ERC-721
NFT
Overview
Max Total Supply
5,000 WTC
Holders
218
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 WTCLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Wizard
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-10 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.0 (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/Strings.sol // OpenZeppelin Contracts v4.4.0 (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/cryptography/ECDSA.sol // OpenZeppelin Contracts v4.4.0 (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 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 v4.4.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 `IERC721.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.0 (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.0 (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 v4.4.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`, 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 Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.0 (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/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (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/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // 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; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @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 || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @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 virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_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 { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _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 virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @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. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: 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`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * 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 ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @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.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * 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`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (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; 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(), "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: Wizard.sol pragma solidity 0.8.0; contract IWizardStaking { function autoStake(address from, uint256 tokenId) external {} } contract Wizard is Ownable, ERC721, ReentrancyGuard { using ECDSA for bytes32; uint256 public constant AST_PRICE = 0.060 ether; uint256 public constant NFT_PRICE = 0.065 ether; uint256 public constant NFT_LIMIT = 10000; uint256 public constant NFT_GIFTS = 100; uint256 public totalSupply = 0; uint256 public preSaleMax = 5; uint256 public pubSaleMax = 10; bool public preSaleOn = false; bool public pubSaleOn = false; address public signer; string public baseURI = ""; mapping(address => uint256) public preSaleCount; constructor(string memory _initURI, address _initSigner) ERC721("Wizard Treasure Collective", "WTC") { baseURI = _initURI; signer = _initSigner; } function mint(uint256 _amount, address[] memory _autoStake) external payable nonReentrant { require(pubSaleOn == true, "SALE_NOT_STARTED"); require(_amount <= pubSaleMax, "SALE_MAX_REACHED"); _mint(_amount, _autoStake); } function mintPresale( uint256 _amount, bytes32 _hash, bytes memory _sig, address[] memory _autoStake ) external payable nonReentrant { require(preSaleOn == true, "PRESALE_NOT_STARTED"); require(_checkSignature(_hash, _sig), "SIG_CHECK_FAILED"); require( _hashTransaction(_msgSender(), _amount) == _hash, "HASH_CHECK_FAILED" ); require( preSaleCount[_msgSender()] + _amount <= preSaleMax, "PRESALE_MAX_REACHED" ); _mint(_amount, _autoStake); preSaleCount[_msgSender()] += _amount; } function _mint(uint256 _amount, address[] memory _autoStake) private { require(_autoStake.length <= _amount, "AMOUNT_AUTOSTAKE_MISMATCH"); require(totalSupply + _amount <= NFT_LIMIT - NFT_GIFTS, "NFT_LIMIT_REACHED"); require( msg.value == (NFT_PRICE * (_amount - _autoStake.length)) + (AST_PRICE * _autoStake.length), "INCORRECT_VALUE" ); for (uint256 i = 0; i < _amount; i++) { uint256 tokenId = totalSupply; _safeMint(_msgSender(), tokenId); if (_autoStake.length > i) { require( _autoStake[i] != address(0), "INVALID_AUTOSTAKE_ADDRESS" ); safeTransferFrom(_msgSender(), _autoStake[i], tokenId); IWizardStaking(_autoStake[i]).autoStake(_msgSender(), tokenId); } totalSupply++; } } function gift(address[] memory _to) external onlyOwner nonReentrant { require(totalSupply + _to.length <= NFT_LIMIT, "NFT_LIMIT_REACHED"); for(uint256 i = 0; i < _to.length; i++) { _safeMint(_msgSender(), totalSupply); totalSupply++; } } function tokensOfOwner(address _owner) public view returns (uint256[] memory) { uint256 _tokenCount = balanceOf(_owner); uint256[] memory _tokenIds = new uint256[](_tokenCount); uint256 _tokenIndex = 0; for (uint256 i = 0; i < totalSupply; i++) { if (ownerOf(i) == _owner) { _tokenIds[_tokenIndex] = i; _tokenIndex++; } } return _tokenIds; } function tokensOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256) { return tokensOfOwner(_owner)[_index]; } function _checkSignature(bytes32 _hash, bytes memory _sig) private view returns (bool) { (address _addr, ) = ECDSA.toEthSignedMessageHash(_hash).tryRecover( _sig ); return _addr == signer; } function _hashTransaction(address _sender, uint256 _amount) private pure returns (bytes32) { return keccak256(abi.encodePacked(_sender, _amount)); } function withdraw() public payable onlyOwner { address ADDR_DAO = 0x62a25a9429d033E31328195c179351BD76A3F866; address ADDR_TEAM1 = 0x889C3EF9972Fb7c12F8e5339fFee49bFA0847f5A; address ADDR_TEAM2 = 0x96054f1141d31b59B36aA48689d56F669708d83A; uint256 _balance = address(this).balance; (bool daoSuccess, ) = payable(ADDR_DAO).call{ value: (_balance * 50) / 100 }(""); require(daoSuccess, "DAO Transfer Failed"); (bool team1Success, ) = payable(ADDR_TEAM1).call{ value: (_balance * 165) / 1000 }(""); require(team1Success, "Team 1 Transfer Failed"); (bool team2Success, ) = payable(ADDR_TEAM2).call{ value: (_balance * 165) / 1000 }(""); require(team2Success, "Team 2 Transfer Failed"); (bool ownerSuccess, ) = payable(_msgSender()).call{ value: address(this).balance }(""); require(ownerSuccess, "Owner Transfer Failed"); } function togglePreSale() public onlyOwner { preSaleOn = !preSaleOn; } function togglePubSale() public onlyOwner { pubSaleOn = !pubSaleOn; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function contractURI() public view returns (string memory) { return string(abi.encodePacked(baseURI, "contract")); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initURI","type":"string"},{"internalType":"address","name":"_initSigner","type":"address"}],"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":[],"name":"AST_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_GIFTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"contractURI","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":"_to","type":"address[]"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address[]","name":"_autoStake","type":"address[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32","name":"_hash","type":"bytes32"},{"internalType":"bytes","name":"_sig","type":"bytes"},{"internalType":"address[]","name":"_autoStake","type":"address[]"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","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":[{"internalType":"address","name":"","type":"address"}],"name":"preSaleCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pubSaleMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pubSaleOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"togglePreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePubSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokensOfOwnerByIndex","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":"payable","type":"function"}]
Contract Creation Code
600060088190556005600955600a8055600b805461ffff1916905560a0604081905260808290526200003591600c91906200019e565b503480156200004357600080fd5b50604051620031ea380380620031ea833981016040819052620000669162000261565b6040518060400160405280601a81526020017f57697a61726420547265617375726520436f6c6c6563746976650000000000008152506040518060400160405280600381526020016257544360e81b815250620000d2620000cc6200014a60201b60201c565b6200014e565b8151620000e79060019060208501906200019e565b508051620000fd9060029060208401906200019e565b505060016007555081516200011a90600c9060208501906200019e565b50600b80546001600160a01b03909216620100000262010000600160b01b03199092169190911790555062000398565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620001ac9062000345565b90600052602060002090601f016020900481019282620001d057600085556200021b565b82601f10620001eb57805160ff19168380011785556200021b565b828001600101855582156200021b579182015b828111156200021b578251825591602001919060010190620001fe565b50620002299291506200022d565b5090565b5b808211156200022957600081556001016200022e565b80516001600160a01b03811681146200025c57600080fd5b919050565b6000806040838503121562000274578182fd5b82516001600160401b03808211156200028b578384fd5b818501915085601f8301126200029f578384fd5b815181811115620002b457620002b462000382565b6040516020601f8301601f1916820181018481118382101715620002dc57620002dc62000382565b6040528282528483018101891015620002f3578687fd5b8693505b82841015620003165784840181015182850182015292830192620002f7565b828411156200032757868184840101525b8196506200033781890162000244565b955050505050509250929050565b6002810460018216806200035a57607f821691505b602082108114156200037c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b612e4280620003a86000396000f3fe6080604052600436106102255760003560e01c8063676dd56311610123578063a22cb465116100ab578063ca3cb5221161006f578063ca3cb522146105bf578063e8468c39146105d4578063e8a3d485146105e9578063e985e9c5146105fe578063f2fde38b1461061e57610225565b8063a22cb46514610535578063a2be7c2914610555578063a9cbeb681461056a578063b88d4fde1461057f578063c87b56dd1461059f57610225565b80638462151c116100f25780638462151c146104a95780638aecd74a146104d65780638da5cb5b146104eb57806395d89b411461050057806395db3db01461051557610225565b8063676dd5631461044a5780636c0360eb1461045f57806370a0823114610474578063715018a61461049457610225565b80633aa19b95116101b15780634e6cca8f116101755780634e6cca8f146103cf578063545458a0146103e257806355f804b3146103f75780636352211e14610417578063642da4191461043757610225565b80633aa19b951461035d5780633ccfd60b1461037257806341ecd4081461037a57806342842e0e1461038f5780634707f44f146103af57610225565b8063163e1e61116101f8578063163e1e61146102d157806318160ddd146102f1578063238ac9331461031357806323b872dd1461032857806329e41da51461034857610225565b806301ffc9a71461022a57806306fdde0314610260578063081812fc14610282578063095ea7b3146102af575b600080fd5b34801561023657600080fd5b5061024a6102453660046121d1565b61063e565b6040516102579190612523565b60405180910390f35b34801561026c57600080fd5b50610275610686565b604051610257919061254c565b34801561028e57600080fd5b506102a261029d36600461224f565b610718565b6040516102579190612475565b3480156102bb57600080fd5b506102cf6102ca366004612175565b610764565b005b3480156102dd57600080fd5b506102cf6102ec36600461219e565b6107fc565b3480156102fd57600080fd5b506103066108e3565b6040516102579190612c7d565b34801561031f57600080fd5b506102a26108e9565b34801561033457600080fd5b506102cf61034336600461209a565b6108fe565b34801561035457600080fd5b50610306610936565b34801561036957600080fd5b5061030661093c565b6102cf610941565b34801561038657600080fd5b50610306610bfc565b34801561039b57600080fd5b506102cf6103aa36600461209a565b610c02565b3480156103bb57600080fd5b506103066103ca366004612175565b610c1d565b6102cf6103dd366004612267565b610c57565b3480156103ee57600080fd5b50610306610cd8565b34801561040357600080fd5b506102cf610412366004612209565b610ce3565b34801561042357600080fd5b506102a261043236600461224f565b610d39565b6102cf6104453660046122ac565b610d6e565b34801561045657600080fd5b50610306610ec1565b34801561046b57600080fd5b50610275610ecc565b34801561048057600080fd5b5061030661048f36600461204e565b610f5a565b3480156104a057600080fd5b506102cf610f9e565b3480156104b557600080fd5b506104c96104c436600461204e565b610fe9565b60405161025791906124df565b3480156104e257600080fd5b506102cf6110d3565b3480156104f757600080fd5b506102a261112f565b34801561050c57600080fd5b5061027561113e565b34801561052157600080fd5b5061030661053036600461204e565b61114d565b34801561054157600080fd5b506102cf61055036600461213b565b61115f565b34801561056157600080fd5b5061024a611171565b34801561057657600080fd5b5061030661117a565b34801561058b57600080fd5b506102cf61059a3660046120d5565b611180565b3480156105ab57600080fd5b506102756105ba36600461224f565b6111bf565b3480156105cb57600080fd5b506102cf611242565b3480156105e057600080fd5b5061024a611295565b3480156105f557600080fd5b506102756112a3565b34801561060a57600080fd5b5061024a610619366004612068565b6112cb565b34801561062a57600080fd5b506102cf61063936600461204e565b6112f9565b60006001600160e01b031982166380ac58cd60e01b148061066f57506001600160e01b03198216635b5e139f60e01b145b8061067e575061067e8261136a565b90505b919050565b60606001805461069590612d4a565b80601f01602080910402602001604051908101604052809291908181526020018280546106c190612d4a565b801561070e5780601f106106e35761010080835404028352916020019161070e565b820191906000526020600020905b8154815290600101906020018083116106f157829003601f168201915b5050505050905090565b600061072382611383565b6107485760405162461bcd60e51b815260040161073f906129b2565b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061076f82610d39565b9050806001600160a01b0316836001600160a01b031614156107a35760405162461bcd60e51b815260040161073f90612b2d565b806001600160a01b03166107b56113a0565b6001600160a01b031614806107d157506107d1816106196113a0565b6107ed5760405162461bcd60e51b815260040161073f9061288d565b6107f783836113a4565b505050565b6108046113a0565b6001600160a01b031661081561112f565b6001600160a01b03161461083b5760405162461bcd60e51b815260040161073f906129fe565b6002600754141561085e5760405162461bcd60e51b815260040161073f90612c1c565b600260075580516008546127109161087591612cbc565b11156108935760405162461bcd60e51b815260040161073f90612862565b60005b81518110156108da576108b26108aa6113a0565b600854611412565b600880549060006108c283612d85565b919050555080806108d290612d85565b915050610896565b50506001600755565b60085481565b600b546201000090046001600160a01b031681565b61090f6109096113a0565b8261142c565b61092b5760405162461bcd60e51b815260040161073f90612b9e565b6107f78383836114b1565b61271081565b606481565b6109496113a0565b6001600160a01b031661095a61112f565b6001600160a01b0316146109805760405162461bcd60e51b815260040161073f906129fe565b7362a25a9429d033e31328195c179351bd76a3f86673889c3ef9972fb7c12f8e5339ffee49bfa0847f5a7396054f1141d31b59b36aa48689d56f669708d83a4760008460646109d0846032612ce8565b6109da9190612cd4565b6040516109e690612472565b60006040518083038185875af1925050503d8060008114610a23576040519150601f19603f3d011682016040523d82523d6000602084013e610a28565b606091505b5050905080610a495760405162461bcd60e51b815260040161073f906126e0565b60006001600160a01b0385166103e8610a638560a5612ce8565b610a6d9190612cd4565b604051610a7990612472565b60006040518083038185875af1925050503d8060008114610ab6576040519150601f19603f3d011682016040523d82523d6000602084013e610abb565b606091505b5050905080610adc5760405162461bcd60e51b815260040161073f9061258e565b60006001600160a01b0385166103e8610af68660a5612ce8565b610b009190612cd4565b604051610b0c90612472565b60006040518083038185875af1925050503d8060008114610b49576040519150601f19603f3d011682016040523d82523d6000602084013e610b4e565b606091505b5050905080610b6f5760405162461bcd60e51b815260040161073f90612b6e565b6000610b796113a0565b6001600160a01b031647604051610b8f90612472565b60006040518083038185875af1925050503d8060008114610bcc576040519150601f19603f3d011682016040523d82523d6000602084013e610bd1565b606091505b5050905080610bf25760405162461bcd60e51b815260040161073f9061255f565b5050505050505050565b60095481565b6107f783838360405180602001604052806000815250611180565b6000610c2883610fe9565b8281518110610c4757634e487b7160e01b600052603260045260246000fd5b6020026020010151905092915050565b60026007541415610c7a5760405162461bcd60e51b815260040161073f90612c1c565b6002600755600b5460ff610100909104161515600114610cac5760405162461bcd60e51b815260040161073f9061267f565b600a54821115610cce5760405162461bcd60e51b815260040161073f90612c53565b6108da82826115de565b66d529ae9e86000081565b610ceb6113a0565b6001600160a01b0316610cfc61112f565b6001600160a01b031614610d225760405162461bcd60e51b815260040161073f906129fe565b8051610d3590600c906020840190611e9e565b5050565b6000818152600360205260408120546001600160a01b03168061067e5760405162461bcd60e51b815260040161073f90612934565b60026007541415610d915760405162461bcd60e51b815260040161073f90612c1c565b6002600755600b5460ff161515600114610dbd5760405162461bcd60e51b815260040161073f9061270d565b610dc78383611803565b610de35760405162461bcd60e51b815260040161073f906127ec565b82610df5610def6113a0565b86611839565b14610e125760405162461bcd60e51b815260040161073f90612b02565b60095484600d6000610e226113a0565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610e4d9190612cbc565b1115610e6b5760405162461bcd60e51b815260040161073f90612bef565b610e7584826115de565b83600d6000610e826113a0565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610eb19190612cbc565b9091555050600160075550505050565b66e6ed27d666800081565b600c8054610ed990612d4a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0590612d4a565b8015610f525780601f10610f2757610100808354040283529160200191610f52565b820191906000526020600020905b815481529060010190602001808311610f3557829003601f168201915b505050505081565b60006001600160a01b038216610f825760405162461bcd60e51b815260040161073f906128ea565b506001600160a01b031660009081526004602052604090205490565b610fa66113a0565b6001600160a01b0316610fb761112f565b6001600160a01b031614610fdd5760405162461bcd60e51b815260040161073f906129fe565b610fe7600061186c565b565b60606000610ff683610f5a565b905060008167ffffffffffffffff81111561102157634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561104a578160200160208202803683370190505b5090506000805b6008548110156110c957856001600160a01b031661106e82610d39565b6001600160a01b031614156110b7578083838151811061109e57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152816110b381612d85565b9250505b806110c181612d85565b915050611051565b5090949350505050565b6110db6113a0565b6001600160a01b03166110ec61112f565b6001600160a01b0316146111125760405162461bcd60e51b815260040161073f906129fe565b600b805461ff001981166101009182900460ff1615909102179055565b6000546001600160a01b031690565b60606002805461069590612d4a565b600d6020526000908152604090205481565b610d3561116a6113a0565b83836118bc565b600b5460ff1681565b600a5481565b61119161118b6113a0565b8361142c565b6111ad5760405162461bcd60e51b815260040161073f90612b9e565b6111b98484848461195f565b50505050565b60606111ca82611383565b6111e65760405162461bcd60e51b815260040161073f90612a7c565b60006111f0611992565b90506000815111611210576040518060200160405280600081525061123b565b8061121a846119a1565b60405160200161122b929190612376565b6040516020818303038152906040525b9392505050565b61124a6113a0565b6001600160a01b031661125b61112f565b6001600160a01b0316146112815760405162461bcd60e51b815260040161073f906129fe565b600b805460ff19811660ff90911615179055565b600b54610100900460ff1681565b6060600c6040516020016112b791906123a5565b604051602081830303815290604052905090565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6113016113a0565b6001600160a01b031661131261112f565b6001600160a01b0316146113385760405162461bcd60e51b815260040161073f906129fe565b6001600160a01b03811661135e5760405162461bcd60e51b815260040161073f90612610565b6113678161186c565b50565b6001600160e01b031981166301ffc9a760e01b14919050565b6000908152600360205260409020546001600160a01b0316151590565b3390565b600081815260056020526040902080546001600160a01b0319166001600160a01b03841690811790915581906113d982610d39565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610d35828260405180602001604052806000815250611abc565b600061143782611383565b6114535760405162461bcd60e51b815260040161073f90612816565b600061145e83610d39565b9050806001600160a01b0316846001600160a01b031614806114995750836001600160a01b031661148e84610718565b6001600160a01b0316145b806114a957506114a981856112cb565b949350505050565b826001600160a01b03166114c482610d39565b6001600160a01b0316146114ea5760405162461bcd60e51b815260040161073f90612a33565b6001600160a01b0382166115105760405162461bcd60e51b815260040161073f90612771565b61151b8383836107f7565b6115266000826113a4565b6001600160a01b038316600090815260046020526040812080546001929061154f908490612d07565b90915550506001600160a01b038216600090815260046020526040812080546001929061157d908490612cbc565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b81815111156115ff5760405162461bcd60e51b815260040161073f90612acb565b61160c6064612710612d07565b8260085461161a9190612cbc565b11156116385760405162461bcd60e51b815260040161073f90612862565b805161164b9066d529ae9e860000612ce8565b81516116579084612d07565b6116689066e6ed27d6668000612ce8565b6116729190612cbc565b34146116905760405162461bcd60e51b815260040161073f90612656565b60005b828110156107f7576008546116af6116a96113a0565b82611412565b81835111156117da5760006001600160a01b03168383815181106116e357634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156117125760405162461bcd60e51b815260040161073f9061273a565b61174b61171d6113a0565b84848151811061173d57634e487b7160e01b600052603260045260246000fd5b602002602001015183610c02565b82828151811061176b57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663baffb69f6117896113a0565b836040518363ffffffff1660e01b81526004016117a79291906124c6565b600060405180830381600087803b1580156117c157600080fd5b505af11580156117d5573d6000803e3d6000fd5b505050505b600880549060006117ea83612d85565b91905055505080806117fb90612d85565b915050611693565b6000806118198361181386611aef565b90611b1f565b50600b546201000090046001600160a01b03908116911614949350505050565b6000828260405160200161184e929190612354565b60405160208183030381529060405280519060200120905092915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b031614156118ee5760405162461bcd60e51b815260040161073f906127b5565b6001600160a01b0383811660008181526006602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190611952908590612523565b60405180910390a3505050565b61196a8484846114b1565b61197684848484611b8f565b6111b95760405162461bcd60e51b815260040161073f906125be565b6060600c805461069590612d4a565b6060816119c657506040805180820190915260018152600360fc1b6020820152610681565b8160005b81156119f057806119da81612d85565b91506119e99050600a83612cd4565b91506119ca565b60008167ffffffffffffffff811115611a1957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611a43576020820181803683370190505b5090505b84156114a957611a58600183612d07565b9150611a65600a86612da0565b611a70906030612cbc565b60f81b818381518110611a9357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611ab5600a86612cd4565b9450611a47565b611ac68383611caa565b611ad36000848484611b8f565b6107f75760405162461bcd60e51b815260040161073f906125be565b600081604051602001611b029190612441565b604051602081830303815290604052805190602001209050919050565b600080825160411415611b565760208301516040840151606085015160001a611b4a87828585611d89565b94509450505050611b88565b825160401415611b805760208301516040840151611b75868383611e69565b935093505050611b88565b506000905060025b9250929050565b6000611ba3846001600160a01b0316611e98565b15611c9f57836001600160a01b031663150b7a02611bbf6113a0565b8786866040518563ffffffff1660e01b8152600401611be19493929190612489565b602060405180830381600087803b158015611bfb57600080fd5b505af1925050508015611c2b575060408051601f3d908101601f19168201909252611c28918101906121ed565b60015b611c85573d808015611c59576040519150601f19603f3d011682016040523d82523d6000602084013e611c5e565b606091505b508051611c7d5760405162461bcd60e51b815260040161073f906125be565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506114a9565b506001949350505050565b6001600160a01b038216611cd05760405162461bcd60e51b815260040161073f9061297d565b611cd981611383565b15611cf65760405162461bcd60e51b815260040161073f906126a9565b611d02600083836107f7565b6001600160a01b0382166000908152600460205260408120805460019290611d2b908490612cbc565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611dc05750600090506003611e60565b8460ff16601b14158015611dd857508460ff16601c14155b15611de95750600090506004611e60565b600060018787878760405160008152602001604052604051611e0e949392919061252e565b6020604051602081039080840390855afa158015611e30573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611e5957600060019250925050611e60565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01611e8a87828885611d89565b935093505050935093915050565b3b151590565b828054611eaa90612d4a565b90600052602060002090601f016020900481019282611ecc5760008555611f12565b82601f10611ee557805160ff1916838001178555611f12565b82800160010185558215611f12579182015b82811115611f12578251825591602001919060010190611ef7565b50611f1e929150611f22565b5090565b5b80821115611f1e5760008155600101611f23565b600067ffffffffffffffff831115611f5157611f51612de0565b611f64601f8401601f1916602001612c86565b9050828152838383011115611f7857600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461068157600080fd5b600082601f830112611fb6578081fd5b8135602067ffffffffffffffff821115611fd257611fd2612de0565b808202611fe0828201612c86565b838152828101908684018388018501891015611ffa578687fd5b8693505b858410156120235761200f81611f8f565b835260019390930192918401918401611ffe565b50979650505050505050565b600082601f83011261203f578081fd5b61123b83833560208501611f37565b60006020828403121561205f578081fd5b61123b82611f8f565b6000806040838503121561207a578081fd5b61208383611f8f565b915061209160208401611f8f565b90509250929050565b6000806000606084860312156120ae578081fd5b6120b784611f8f565b92506120c560208501611f8f565b9150604084013590509250925092565b600080600080608085870312156120ea578081fd5b6120f385611f8f565b935061210160208601611f8f565b925060408501359150606085013567ffffffffffffffff811115612123578182fd5b61212f8782880161202f565b91505092959194509250565b6000806040838503121561214d578182fd5b61215683611f8f565b91506020830135801515811461216a578182fd5b809150509250929050565b60008060408385031215612187578182fd5b61219083611f8f565b946020939093013593505050565b6000602082840312156121af578081fd5b813567ffffffffffffffff8111156121c5578182fd5b6114a984828501611fa6565b6000602082840312156121e2578081fd5b813561123b81612df6565b6000602082840312156121fe578081fd5b815161123b81612df6565b60006020828403121561221a578081fd5b813567ffffffffffffffff811115612230578182fd5b8201601f81018413612240578182fd5b6114a984823560208401611f37565b600060208284031215612260578081fd5b5035919050565b60008060408385031215612279578182fd5b82359150602083013567ffffffffffffffff811115612296578182fd5b6122a285828601611fa6565b9150509250929050565b600080600080608085870312156122c1578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156122e6578384fd5b6122f28883890161202f565b93506060870135915080821115612307578283fd5b5061212f87828801611fa6565b6000815180845261232c816020860160208601612d1e565b601f01601f19169290920160200192915050565b6718dbdb9d1c9858dd60c21b815260080190565b60609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60008351612388818460208801612d1e565b83519083019061239c818360208801612d1e565b01949350505050565b81546000908190600281046001808316806123c157607f831692505b60208084108214156123e157634e487b7160e01b87526022600452602487fd5b8180156123f5576001811461240657612432565b60ff19861689528489019650612432565b61240f8a612cb0565b885b8681101561242a5781548b820152908501908301612411565b505084890196505b5050505050506114a981612340565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124bc90830184612314565b9695505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015612517578351835292840192918401916001016124fb565b50909695505050505050565b901515815260200190565b93845260ff9290921660208401526040830152606082015260800190565b60006020825261123b6020830184612314565b60208082526015908201527413dddb995c88151c985b9cd9995c8811985a5b1959605a1b604082015260600190565b6020808252601690820152751519585b480c48151c985b9cd9995c8811985a5b195960521b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600f908201526e494e434f52524543545f56414c554560881b604082015260600190565b60208082526010908201526f14d0531157d393d517d4d5105495115160821b604082015260600190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b602080825260139082015272111053c8151c985b9cd9995c8811985a5b1959606a1b604082015260600190565b60208082526013908201527214149154d0531157d393d517d4d51054951151606a1b604082015260600190565b60208082526019908201527f494e56414c49445f4155544f5354414b455f4144445245535300000000000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526010908201526f14d251d7d0d21150d2d7d1905253115160821b604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526011908201527013919517d31253525517d4915050d21151607a1b604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526019908201527f414d4f554e545f4155544f5354414b455f4d49534d4154434800000000000000604082015260600190565b602080825260119082015270121054d217d0d21150d2d7d19052531151607a1b604082015260600190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b6020808252601690820152751519585b480c88151c985b9cd9995c8811985a5b195960521b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526013908201527214149154d0531157d3505617d4915050d21151606a1b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526010908201526f14d0531157d3505617d4915050d2115160821b604082015260600190565b90815260200190565b60405181810167ffffffffffffffff81118282101715612ca857612ca8612de0565b604052919050565b60009081526020902090565b60008219821115612ccf57612ccf612db4565b500190565b600082612ce357612ce3612dca565b500490565b6000816000190483118215151615612d0257612d02612db4565b500290565b600082821015612d1957612d19612db4565b500390565b60005b83811015612d39578181015183820152602001612d21565b838111156111b95750506000910152565b600281046001821680612d5e57607f821691505b60208210811415612d7f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612d9957612d99612db4565b5060010190565b600082612daf57612daf612dca565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461136757600080fdfea2646970667358221220ee2b8d26b6745b12dbe6d147dd27ffbf4809fabf15b47e02f7846033c1382e6d64736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000007c51636e5c95a99f310e6d8ed39c1c3e9f71be67000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f77697a61726474726561737572652e636f6d2f70726572657665616c2f000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102255760003560e01c8063676dd56311610123578063a22cb465116100ab578063ca3cb5221161006f578063ca3cb522146105bf578063e8468c39146105d4578063e8a3d485146105e9578063e985e9c5146105fe578063f2fde38b1461061e57610225565b8063a22cb46514610535578063a2be7c2914610555578063a9cbeb681461056a578063b88d4fde1461057f578063c87b56dd1461059f57610225565b80638462151c116100f25780638462151c146104a95780638aecd74a146104d65780638da5cb5b146104eb57806395d89b411461050057806395db3db01461051557610225565b8063676dd5631461044a5780636c0360eb1461045f57806370a0823114610474578063715018a61461049457610225565b80633aa19b95116101b15780634e6cca8f116101755780634e6cca8f146103cf578063545458a0146103e257806355f804b3146103f75780636352211e14610417578063642da4191461043757610225565b80633aa19b951461035d5780633ccfd60b1461037257806341ecd4081461037a57806342842e0e1461038f5780634707f44f146103af57610225565b8063163e1e61116101f8578063163e1e61146102d157806318160ddd146102f1578063238ac9331461031357806323b872dd1461032857806329e41da51461034857610225565b806301ffc9a71461022a57806306fdde0314610260578063081812fc14610282578063095ea7b3146102af575b600080fd5b34801561023657600080fd5b5061024a6102453660046121d1565b61063e565b6040516102579190612523565b60405180910390f35b34801561026c57600080fd5b50610275610686565b604051610257919061254c565b34801561028e57600080fd5b506102a261029d36600461224f565b610718565b6040516102579190612475565b3480156102bb57600080fd5b506102cf6102ca366004612175565b610764565b005b3480156102dd57600080fd5b506102cf6102ec36600461219e565b6107fc565b3480156102fd57600080fd5b506103066108e3565b6040516102579190612c7d565b34801561031f57600080fd5b506102a26108e9565b34801561033457600080fd5b506102cf61034336600461209a565b6108fe565b34801561035457600080fd5b50610306610936565b34801561036957600080fd5b5061030661093c565b6102cf610941565b34801561038657600080fd5b50610306610bfc565b34801561039b57600080fd5b506102cf6103aa36600461209a565b610c02565b3480156103bb57600080fd5b506103066103ca366004612175565b610c1d565b6102cf6103dd366004612267565b610c57565b3480156103ee57600080fd5b50610306610cd8565b34801561040357600080fd5b506102cf610412366004612209565b610ce3565b34801561042357600080fd5b506102a261043236600461224f565b610d39565b6102cf6104453660046122ac565b610d6e565b34801561045657600080fd5b50610306610ec1565b34801561046b57600080fd5b50610275610ecc565b34801561048057600080fd5b5061030661048f36600461204e565b610f5a565b3480156104a057600080fd5b506102cf610f9e565b3480156104b557600080fd5b506104c96104c436600461204e565b610fe9565b60405161025791906124df565b3480156104e257600080fd5b506102cf6110d3565b3480156104f757600080fd5b506102a261112f565b34801561050c57600080fd5b5061027561113e565b34801561052157600080fd5b5061030661053036600461204e565b61114d565b34801561054157600080fd5b506102cf61055036600461213b565b61115f565b34801561056157600080fd5b5061024a611171565b34801561057657600080fd5b5061030661117a565b34801561058b57600080fd5b506102cf61059a3660046120d5565b611180565b3480156105ab57600080fd5b506102756105ba36600461224f565b6111bf565b3480156105cb57600080fd5b506102cf611242565b3480156105e057600080fd5b5061024a611295565b3480156105f557600080fd5b506102756112a3565b34801561060a57600080fd5b5061024a610619366004612068565b6112cb565b34801561062a57600080fd5b506102cf61063936600461204e565b6112f9565b60006001600160e01b031982166380ac58cd60e01b148061066f57506001600160e01b03198216635b5e139f60e01b145b8061067e575061067e8261136a565b90505b919050565b60606001805461069590612d4a565b80601f01602080910402602001604051908101604052809291908181526020018280546106c190612d4a565b801561070e5780601f106106e35761010080835404028352916020019161070e565b820191906000526020600020905b8154815290600101906020018083116106f157829003601f168201915b5050505050905090565b600061072382611383565b6107485760405162461bcd60e51b815260040161073f906129b2565b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b600061076f82610d39565b9050806001600160a01b0316836001600160a01b031614156107a35760405162461bcd60e51b815260040161073f90612b2d565b806001600160a01b03166107b56113a0565b6001600160a01b031614806107d157506107d1816106196113a0565b6107ed5760405162461bcd60e51b815260040161073f9061288d565b6107f783836113a4565b505050565b6108046113a0565b6001600160a01b031661081561112f565b6001600160a01b03161461083b5760405162461bcd60e51b815260040161073f906129fe565b6002600754141561085e5760405162461bcd60e51b815260040161073f90612c1c565b600260075580516008546127109161087591612cbc565b11156108935760405162461bcd60e51b815260040161073f90612862565b60005b81518110156108da576108b26108aa6113a0565b600854611412565b600880549060006108c283612d85565b919050555080806108d290612d85565b915050610896565b50506001600755565b60085481565b600b546201000090046001600160a01b031681565b61090f6109096113a0565b8261142c565b61092b5760405162461bcd60e51b815260040161073f90612b9e565b6107f78383836114b1565b61271081565b606481565b6109496113a0565b6001600160a01b031661095a61112f565b6001600160a01b0316146109805760405162461bcd60e51b815260040161073f906129fe565b7362a25a9429d033e31328195c179351bd76a3f86673889c3ef9972fb7c12f8e5339ffee49bfa0847f5a7396054f1141d31b59b36aa48689d56f669708d83a4760008460646109d0846032612ce8565b6109da9190612cd4565b6040516109e690612472565b60006040518083038185875af1925050503d8060008114610a23576040519150601f19603f3d011682016040523d82523d6000602084013e610a28565b606091505b5050905080610a495760405162461bcd60e51b815260040161073f906126e0565b60006001600160a01b0385166103e8610a638560a5612ce8565b610a6d9190612cd4565b604051610a7990612472565b60006040518083038185875af1925050503d8060008114610ab6576040519150601f19603f3d011682016040523d82523d6000602084013e610abb565b606091505b5050905080610adc5760405162461bcd60e51b815260040161073f9061258e565b60006001600160a01b0385166103e8610af68660a5612ce8565b610b009190612cd4565b604051610b0c90612472565b60006040518083038185875af1925050503d8060008114610b49576040519150601f19603f3d011682016040523d82523d6000602084013e610b4e565b606091505b5050905080610b6f5760405162461bcd60e51b815260040161073f90612b6e565b6000610b796113a0565b6001600160a01b031647604051610b8f90612472565b60006040518083038185875af1925050503d8060008114610bcc576040519150601f19603f3d011682016040523d82523d6000602084013e610bd1565b606091505b5050905080610bf25760405162461bcd60e51b815260040161073f9061255f565b5050505050505050565b60095481565b6107f783838360405180602001604052806000815250611180565b6000610c2883610fe9565b8281518110610c4757634e487b7160e01b600052603260045260246000fd5b6020026020010151905092915050565b60026007541415610c7a5760405162461bcd60e51b815260040161073f90612c1c565b6002600755600b5460ff610100909104161515600114610cac5760405162461bcd60e51b815260040161073f9061267f565b600a54821115610cce5760405162461bcd60e51b815260040161073f90612c53565b6108da82826115de565b66d529ae9e86000081565b610ceb6113a0565b6001600160a01b0316610cfc61112f565b6001600160a01b031614610d225760405162461bcd60e51b815260040161073f906129fe565b8051610d3590600c906020840190611e9e565b5050565b6000818152600360205260408120546001600160a01b03168061067e5760405162461bcd60e51b815260040161073f90612934565b60026007541415610d915760405162461bcd60e51b815260040161073f90612c1c565b6002600755600b5460ff161515600114610dbd5760405162461bcd60e51b815260040161073f9061270d565b610dc78383611803565b610de35760405162461bcd60e51b815260040161073f906127ec565b82610df5610def6113a0565b86611839565b14610e125760405162461bcd60e51b815260040161073f90612b02565b60095484600d6000610e226113a0565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610e4d9190612cbc565b1115610e6b5760405162461bcd60e51b815260040161073f90612bef565b610e7584826115de565b83600d6000610e826113a0565b6001600160a01b03166001600160a01b031681526020019081526020016000206000828254610eb19190612cbc565b9091555050600160075550505050565b66e6ed27d666800081565b600c8054610ed990612d4a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0590612d4a565b8015610f525780601f10610f2757610100808354040283529160200191610f52565b820191906000526020600020905b815481529060010190602001808311610f3557829003601f168201915b505050505081565b60006001600160a01b038216610f825760405162461bcd60e51b815260040161073f906128ea565b506001600160a01b031660009081526004602052604090205490565b610fa66113a0565b6001600160a01b0316610fb761112f565b6001600160a01b031614610fdd5760405162461bcd60e51b815260040161073f906129fe565b610fe7600061186c565b565b60606000610ff683610f5a565b905060008167ffffffffffffffff81111561102157634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561104a578160200160208202803683370190505b5090506000805b6008548110156110c957856001600160a01b031661106e82610d39565b6001600160a01b031614156110b7578083838151811061109e57634e487b7160e01b600052603260045260246000fd5b6020908102919091010152816110b381612d85565b9250505b806110c181612d85565b915050611051565b5090949350505050565b6110db6113a0565b6001600160a01b03166110ec61112f565b6001600160a01b0316146111125760405162461bcd60e51b815260040161073f906129fe565b600b805461ff001981166101009182900460ff1615909102179055565b6000546001600160a01b031690565b60606002805461069590612d4a565b600d6020526000908152604090205481565b610d3561116a6113a0565b83836118bc565b600b5460ff1681565b600a5481565b61119161118b6113a0565b8361142c565b6111ad5760405162461bcd60e51b815260040161073f90612b9e565b6111b98484848461195f565b50505050565b60606111ca82611383565b6111e65760405162461bcd60e51b815260040161073f90612a7c565b60006111f0611992565b90506000815111611210576040518060200160405280600081525061123b565b8061121a846119a1565b60405160200161122b929190612376565b6040516020818303038152906040525b9392505050565b61124a6113a0565b6001600160a01b031661125b61112f565b6001600160a01b0316146112815760405162461bcd60e51b815260040161073f906129fe565b600b805460ff19811660ff90911615179055565b600b54610100900460ff1681565b6060600c6040516020016112b791906123a5565b604051602081830303815290604052905090565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6113016113a0565b6001600160a01b031661131261112f565b6001600160a01b0316146113385760405162461bcd60e51b815260040161073f906129fe565b6001600160a01b03811661135e5760405162461bcd60e51b815260040161073f90612610565b6113678161186c565b50565b6001600160e01b031981166301ffc9a760e01b14919050565b6000908152600360205260409020546001600160a01b0316151590565b3390565b600081815260056020526040902080546001600160a01b0319166001600160a01b03841690811790915581906113d982610d39565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b610d35828260405180602001604052806000815250611abc565b600061143782611383565b6114535760405162461bcd60e51b815260040161073f90612816565b600061145e83610d39565b9050806001600160a01b0316846001600160a01b031614806114995750836001600160a01b031661148e84610718565b6001600160a01b0316145b806114a957506114a981856112cb565b949350505050565b826001600160a01b03166114c482610d39565b6001600160a01b0316146114ea5760405162461bcd60e51b815260040161073f90612a33565b6001600160a01b0382166115105760405162461bcd60e51b815260040161073f90612771565b61151b8383836107f7565b6115266000826113a4565b6001600160a01b038316600090815260046020526040812080546001929061154f908490612d07565b90915550506001600160a01b038216600090815260046020526040812080546001929061157d908490612cbc565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b81815111156115ff5760405162461bcd60e51b815260040161073f90612acb565b61160c6064612710612d07565b8260085461161a9190612cbc565b11156116385760405162461bcd60e51b815260040161073f90612862565b805161164b9066d529ae9e860000612ce8565b81516116579084612d07565b6116689066e6ed27d6668000612ce8565b6116729190612cbc565b34146116905760405162461bcd60e51b815260040161073f90612656565b60005b828110156107f7576008546116af6116a96113a0565b82611412565b81835111156117da5760006001600160a01b03168383815181106116e357634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031614156117125760405162461bcd60e51b815260040161073f9061273a565b61174b61171d6113a0565b84848151811061173d57634e487b7160e01b600052603260045260246000fd5b602002602001015183610c02565b82828151811061176b57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b031663baffb69f6117896113a0565b836040518363ffffffff1660e01b81526004016117a79291906124c6565b600060405180830381600087803b1580156117c157600080fd5b505af11580156117d5573d6000803e3d6000fd5b505050505b600880549060006117ea83612d85565b91905055505080806117fb90612d85565b915050611693565b6000806118198361181386611aef565b90611b1f565b50600b546201000090046001600160a01b03908116911614949350505050565b6000828260405160200161184e929190612354565b60405160208183030381529060405280519060200120905092915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b816001600160a01b0316836001600160a01b031614156118ee5760405162461bcd60e51b815260040161073f906127b5565b6001600160a01b0383811660008181526006602090815260408083209487168084529490915290819020805460ff1916851515179055517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3190611952908590612523565b60405180910390a3505050565b61196a8484846114b1565b61197684848484611b8f565b6111b95760405162461bcd60e51b815260040161073f906125be565b6060600c805461069590612d4a565b6060816119c657506040805180820190915260018152600360fc1b6020820152610681565b8160005b81156119f057806119da81612d85565b91506119e99050600a83612cd4565b91506119ca565b60008167ffffffffffffffff811115611a1957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611a43576020820181803683370190505b5090505b84156114a957611a58600183612d07565b9150611a65600a86612da0565b611a70906030612cbc565b60f81b818381518110611a9357634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611ab5600a86612cd4565b9450611a47565b611ac68383611caa565b611ad36000848484611b8f565b6107f75760405162461bcd60e51b815260040161073f906125be565b600081604051602001611b029190612441565b604051602081830303815290604052805190602001209050919050565b600080825160411415611b565760208301516040840151606085015160001a611b4a87828585611d89565b94509450505050611b88565b825160401415611b805760208301516040840151611b75868383611e69565b935093505050611b88565b506000905060025b9250929050565b6000611ba3846001600160a01b0316611e98565b15611c9f57836001600160a01b031663150b7a02611bbf6113a0565b8786866040518563ffffffff1660e01b8152600401611be19493929190612489565b602060405180830381600087803b158015611bfb57600080fd5b505af1925050508015611c2b575060408051601f3d908101601f19168201909252611c28918101906121ed565b60015b611c85573d808015611c59576040519150601f19603f3d011682016040523d82523d6000602084013e611c5e565b606091505b508051611c7d5760405162461bcd60e51b815260040161073f906125be565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506114a9565b506001949350505050565b6001600160a01b038216611cd05760405162461bcd60e51b815260040161073f9061297d565b611cd981611383565b15611cf65760405162461bcd60e51b815260040161073f906126a9565b611d02600083836107f7565b6001600160a01b0382166000908152600460205260408120805460019290611d2b908490612cbc565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611dc05750600090506003611e60565b8460ff16601b14158015611dd857508460ff16601c14155b15611de95750600090506004611e60565b600060018787878760405160008152602001604052604051611e0e949392919061252e565b6020604051602081039080840390855afa158015611e30573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611e5957600060019250925050611e60565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01611e8a87828885611d89565b935093505050935093915050565b3b151590565b828054611eaa90612d4a565b90600052602060002090601f016020900481019282611ecc5760008555611f12565b82601f10611ee557805160ff1916838001178555611f12565b82800160010185558215611f12579182015b82811115611f12578251825591602001919060010190611ef7565b50611f1e929150611f22565b5090565b5b80821115611f1e5760008155600101611f23565b600067ffffffffffffffff831115611f5157611f51612de0565b611f64601f8401601f1916602001612c86565b9050828152838383011115611f7857600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461068157600080fd5b600082601f830112611fb6578081fd5b8135602067ffffffffffffffff821115611fd257611fd2612de0565b808202611fe0828201612c86565b838152828101908684018388018501891015611ffa578687fd5b8693505b858410156120235761200f81611f8f565b835260019390930192918401918401611ffe565b50979650505050505050565b600082601f83011261203f578081fd5b61123b83833560208501611f37565b60006020828403121561205f578081fd5b61123b82611f8f565b6000806040838503121561207a578081fd5b61208383611f8f565b915061209160208401611f8f565b90509250929050565b6000806000606084860312156120ae578081fd5b6120b784611f8f565b92506120c560208501611f8f565b9150604084013590509250925092565b600080600080608085870312156120ea578081fd5b6120f385611f8f565b935061210160208601611f8f565b925060408501359150606085013567ffffffffffffffff811115612123578182fd5b61212f8782880161202f565b91505092959194509250565b6000806040838503121561214d578182fd5b61215683611f8f565b91506020830135801515811461216a578182fd5b809150509250929050565b60008060408385031215612187578182fd5b61219083611f8f565b946020939093013593505050565b6000602082840312156121af578081fd5b813567ffffffffffffffff8111156121c5578182fd5b6114a984828501611fa6565b6000602082840312156121e2578081fd5b813561123b81612df6565b6000602082840312156121fe578081fd5b815161123b81612df6565b60006020828403121561221a578081fd5b813567ffffffffffffffff811115612230578182fd5b8201601f81018413612240578182fd5b6114a984823560208401611f37565b600060208284031215612260578081fd5b5035919050565b60008060408385031215612279578182fd5b82359150602083013567ffffffffffffffff811115612296578182fd5b6122a285828601611fa6565b9150509250929050565b600080600080608085870312156122c1578182fd5b8435935060208501359250604085013567ffffffffffffffff808211156122e6578384fd5b6122f28883890161202f565b93506060870135915080821115612307578283fd5b5061212f87828801611fa6565b6000815180845261232c816020860160208601612d1e565b601f01601f19169290920160200192915050565b6718dbdb9d1c9858dd60c21b815260080190565b60609290921b6bffffffffffffffffffffffff19168252601482015260340190565b60008351612388818460208801612d1e565b83519083019061239c818360208801612d1e565b01949350505050565b81546000908190600281046001808316806123c157607f831692505b60208084108214156123e157634e487b7160e01b87526022600452602487fd5b8180156123f5576001811461240657612432565b60ff19861689528489019650612432565b61240f8a612cb0565b885b8681101561242a5781548b820152908501908301612411565b505084890196505b5050505050506114a981612340565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124bc90830184612314565b9695505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b81811015612517578351835292840192918401916001016124fb565b50909695505050505050565b901515815260200190565b93845260ff9290921660208401526040830152606082015260800190565b60006020825261123b6020830184612314565b60208082526015908201527413dddb995c88151c985b9cd9995c8811985a5b1959605a1b604082015260600190565b6020808252601690820152751519585b480c48151c985b9cd9995c8811985a5b195960521b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600f908201526e494e434f52524543545f56414c554560881b604082015260600190565b60208082526010908201526f14d0531157d393d517d4d5105495115160821b604082015260600190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b602080825260139082015272111053c8151c985b9cd9995c8811985a5b1959606a1b604082015260600190565b60208082526013908201527214149154d0531157d393d517d4d51054951151606a1b604082015260600190565b60208082526019908201527f494e56414c49445f4155544f5354414b455f4144445245535300000000000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b60208082526010908201526f14d251d7d0d21150d2d7d1905253115160821b604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526011908201527013919517d31253525517d4915050d21151607a1b604082015260600190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526019908201527f414d4f554e545f4155544f5354414b455f4d49534d4154434800000000000000604082015260600190565b602080825260119082015270121054d217d0d21150d2d7d19052531151607a1b604082015260600190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b6020808252601690820152751519585b480c88151c985b9cd9995c8811985a5b195960521b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60208082526013908201527214149154d0531157d3505617d4915050d21151606a1b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526010908201526f14d0531157d3505617d4915050d2115160821b604082015260600190565b90815260200190565b60405181810167ffffffffffffffff81118282101715612ca857612ca8612de0565b604052919050565b60009081526020902090565b60008219821115612ccf57612ccf612db4565b500190565b600082612ce357612ce3612dca565b500490565b6000816000190483118215151615612d0257612d02612db4565b500290565b600082821015612d1957612d19612db4565b500390565b60005b83811015612d39578181015183820152602001612d21565b838111156111b95750506000910152565b600281046001821680612d5e57607f821691505b60208210811415612d7f57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612d9957612d99612db4565b5060010190565b600082612daf57612daf612dca565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461136757600080fdfea2646970667358221220ee2b8d26b6745b12dbe6d147dd27ffbf4809fabf15b47e02f7846033c1382e6d64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000400000000000000000000000007c51636e5c95a99f310e6d8ed39c1c3e9f71be67000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f77697a61726474726561737572652e636f6d2f70726572657665616c2f000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _initURI (string): https://wizardtreasure.com/prereveal/
Arg [1] : _initSigner (address): 0x7C51636E5c95A99F310E6D8ed39c1C3e9F71be67
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000007c51636e5c95a99f310e6d8ed39c1c3e9f71be67
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000025
Arg [3] : 68747470733a2f2f77697a61726474726561737572652e636f6d2f7072657265
Arg [4] : 7665616c2f000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
48665:5773:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33537:305;;;;;;;;;;-1:-1:-1;33537:305:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34482:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36041:221::-;;;;;;;;;;-1:-1:-1;36041:221:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35564:411::-;;;;;;;;;;-1:-1:-1;35564:411:0;;;;;:::i;:::-;;:::i;:::-;;51398:295;;;;;;;;;;-1:-1:-1;51398:295:0;;;;;:::i;:::-;;:::i;48960:30::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;49146:21::-;;;;;;;;;;;;;:::i;36791:339::-;;;;;;;;;;-1:-1:-1;36791:339:0;;;;;:::i;:::-;;:::i;48864:41::-;;;;;;;;;;;;;:::i;48912:39::-;;;;;;;;;;;;;:::i;52865:1022::-;;;:::i;48997:29::-;;;;;;;;;;;;;:::i;37201:185::-;;;;;;;;;;-1:-1:-1;37201:185:0;;;;;:::i;:::-;;:::i;52201:179::-;;;;;;;;;;-1:-1:-1;52201:179:0;;;;;:::i;:::-;;:::i;49458:285::-;;;;;;:::i;:::-;;:::i;48756:47::-;;;;;;;;;;;;;:::i;54077:104::-;;;;;;;;;;-1:-1:-1;54077:104:0;;;;;:::i;:::-;;:::i;34176:239::-;;;;;;;;;;-1:-1:-1;34176:239:0;;;;;:::i;:::-;;:::i;49751:651::-;;;;;;:::i;:::-;;:::i;48810:47::-;;;;;;;;;;;;;:::i;49176:26::-;;;;;;;;;;;;;:::i;33906:208::-;;;;;;;;;;-1:-1:-1;33906:208:0;;;;;:::i;:::-;;:::i;47690:103::-;;;;;;;;;;;;;:::i;51701:492::-;;;;;;;;;;-1:-1:-1;51701:492:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;53986:83::-;;;;;;;;;;;;;:::i;47039:87::-;;;;;;;;;;;;;:::i;34651:104::-;;;;;;;;;;;;;:::i;49211:47::-;;;;;;;;;;-1:-1:-1;49211:47:0;;;;;:::i;:::-;;:::i;36334:155::-;;;;;;;;;;-1:-1:-1;36334:155:0;;;;;:::i;:::-;;:::i;49072:29::-;;;;;;;;;;;;;:::i;49033:30::-;;;;;;;;;;;;;:::i;37457:328::-;;;;;;;;;;-1:-1:-1;37457:328:0;;;;;:::i;:::-;;:::i;34826:334::-;;;;;;;;;;-1:-1:-1;34826:334:0;;;;;:::i;:::-;;:::i;53895:83::-;;;;;;;;;;;;;:::i;49108:29::-;;;;;;;;;;;;;:::i;54305:130::-;;;;;;;;;;;;;:::i;36560:164::-;;;;;;;;;;-1:-1:-1;36560:164:0;;;;;:::i;:::-;;:::i;47948:201::-;;;;;;;;;;-1:-1:-1;47948:201:0;;;;;:::i;:::-;;:::i;33537:305::-;33639:4;-1:-1:-1;;;;;;33676:40:0;;-1:-1:-1;;;33676:40:0;;:105;;-1:-1:-1;;;;;;;33733:48:0;;-1:-1:-1;;;33733:48:0;33676:105;:158;;;;33798:36;33822:11;33798:23;:36::i;:::-;33656:178;;33537:305;;;;:::o;34482:100::-;34536:13;34569:5;34562:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34482:100;:::o;36041:221::-;36117:7;36145:16;36153:7;36145;:16::i;:::-;36137:73;;;;-1:-1:-1;;;36137:73:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;36230:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;36230:24:0;;36041:221::o;35564:411::-;35645:13;35661:23;35676:7;35661:14;:23::i;:::-;35645:39;;35709:5;-1:-1:-1;;;;;35703:11:0;:2;-1:-1:-1;;;;;35703:11:0;;;35695:57;;;;-1:-1:-1;;;35695:57:0;;;;;;;:::i;:::-;35803:5;-1:-1:-1;;;;;35787:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;35787:21:0;;:62;;;;35812:37;35829:5;35836:12;:10;:12::i;35812:37::-;35765:168;;;;-1:-1:-1;;;35765:168:0;;;;;;;:::i;:::-;35946:21;35955:2;35959:7;35946:8;:21::i;:::-;35564:411;;;:::o;51398:295::-;47270:12;:10;:12::i;:::-;-1:-1:-1;;;;;47259:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;47259:23:0;;47251:68;;;;-1:-1:-1;;;47251:68:0;;;;;;;:::i;:::-;1812:1:::1;2410:7;;:19;;2402:63;;;;-1:-1:-1::0;;;2402:63:0::1;;;;;;;:::i;:::-;1812:1;2543:7;:18:::0;51499:10;;51485:11:::2;::::0;48900:5:::2;::::0;51485:24:::2;::::0;::::2;:::i;:::-;:37;;51477:67;;;;-1:-1:-1::0;;;51477:67:0::2;;;;;;;:::i;:::-;51559:9;51555:131;51578:3;:10;51574:1;:14;51555:131;;;51610:36;51620:12;:10;:12::i;:::-;51634:11;;51610:9;:36::i;:::-;51661:11;:13:::0;;;:11:::2;:13;::::0;::::2;:::i;:::-;;;;;;51590:3;;;;;:::i;:::-;;;;51555:131;;;-1:-1:-1::0;;1768:1:0::1;2722:7;:22:::0;51398:295::o;48960:30::-;;;;:::o;49146:21::-;;;;;;-1:-1:-1;;;;;49146:21:0;;:::o;36791:339::-;36986:41;37005:12;:10;:12::i;:::-;37019:7;36986:18;:41::i;:::-;36978:103;;;;-1:-1:-1;;;36978:103:0;;;;;;;:::i;:::-;37094:28;37104:4;37110:2;37114:7;37094:9;:28::i;48864:41::-;48900:5;48864:41;:::o;48912:39::-;48948:3;48912:39;:::o;52865:1022::-;47270:12;:10;:12::i;:::-;-1:-1:-1;;;;;47259:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;47259:23:0;;47251:68;;;;-1:-1:-1;;;47251:68:0;;;;;;;:::i;:::-;52940:42:::1;53014;53088;53162:21;52921:16;52940:42:::0;53278:3:::1;53261:13;53162:21:::0;53272:2:::1;53261:13;:::i;:::-;53260:21;;;;:::i;:::-;53216:80;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53194:102;;;53315:10;53307:42;;;;-1:-1:-1::0;;;53307:42:0::1;;;;;;;:::i;:::-;53361:17;-1:-1:-1::0;;;;;53384:24:0;::::1;53449:4;53431:14;:8:::0;53442:3:::1;53431:14;:::i;:::-;53430:23;;;;:::i;:::-;53384:84;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53360:108;;;53487:12;53479:47;;;;-1:-1:-1::0;;;53479:47:0::1;;;;;;;:::i;:::-;53538:17;-1:-1:-1::0;;;;;53561:24:0;::::1;53626:4;53608:14;:8:::0;53619:3:::1;53608:14;:::i;:::-;53607:23;;;;:::i;:::-;53561:84;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53537:108;;;53664:12;53656:47;;;;-1:-1:-1::0;;;53656:47:0::1;;;;;;;:::i;:::-;53715:17;53746:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;53738:26:0::1;53786:21;53738:84;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53714:108;;;53841:12;53833:46;;;;-1:-1:-1::0;;;53833:46:0::1;;;;;;;:::i;:::-;47330:1;;;;;;;;52865:1022::o:0;48997:29::-;;;;:::o;37201:185::-;37339:39;37356:4;37362:2;37366:7;37339:39;;;;;;;;;;;;:16;:39::i;52201:179::-;52311:7;52343:21;52357:6;52343:13;:21::i;:::-;52365:6;52343:29;;;;;;-1:-1:-1;;;52343:29:0;;;;;;;;;;;;;;;52336:36;;52201:179;;;;:::o;49458:285::-;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;49599:9:::1;::::0;::::1;;::::0;;::::1;;:17;;:9;:17;49591:46;;;;-1:-1:-1::0;;;49591:46:0::1;;;;;;;:::i;:::-;49667:10;;49656:7;:21;;49648:50;;;;-1:-1:-1::0;;;49648:50:0::1;;;;;;;:::i;:::-;49709:26;49715:7;49724:10;49709:5;:26::i;48756:47::-:0;48792:11;48756:47;:::o;54077:104::-;47270:12;:10;:12::i;:::-;-1:-1:-1;;;;;47259:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;47259:23:0;;47251:68;;;;-1:-1:-1;;;47251:68:0;;;;;;;:::i;:::-;54152:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;:::-;;54077:104:::0;:::o;34176:239::-;34248:7;34284:16;;;:7;:16;;;;;;-1:-1:-1;;;;;34284:16:0;34319:19;34311:73;;;;-1:-1:-1;;;34311:73:0;;;;;;;:::i;49751:651::-;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;49944:9:::1;::::0;::::1;;:17;;:9:::0;:17:::1;49936:49;;;;-1:-1:-1::0;;;49936:49:0::1;;;;;;;:::i;:::-;50004:28;50020:5;50027:4;50004:15;:28::i;:::-;49996:57;;;;-1:-1:-1::0;;;49996:57:0::1;;;;;;;:::i;:::-;50129:5;50086:39;50103:12;:10;:12::i;:::-;50117:7;50086:16;:39::i;:::-;:48;50064:115;;;;-1:-1:-1::0;;;50064:115:0::1;;;;;;;:::i;:::-;50252:10;;50241:7;50212:12;:26;50225:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;50212:26:0::1;-1:-1:-1::0;;;;;50212:26:0::1;;;;;;;;;;;;;:36;;;;:::i;:::-;:50;;50190:119;;;;-1:-1:-1::0;;;50190:119:0::1;;;;;;;:::i;:::-;50320:26;50326:7;50335:10;50320:5;:26::i;:::-;50387:7;50357:12;:26;50370:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;50357:26:0::1;-1:-1:-1::0;;;;;50357:26:0::1;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;1768:1:0;2722:7;:22;-1:-1:-1;;;;49751:651:0:o;48810:47::-;48846:11;48810:47;:::o;49176:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33906:208::-;33978:7;-1:-1:-1;;;;;34006:19:0;;33998:74;;;;-1:-1:-1;;;33998:74:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;34090:16:0;;;;;:9;:16;;;;;;;33906:208::o;47690:103::-;47270:12;:10;:12::i;:::-;-1:-1:-1;;;;;47259:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;47259:23:0;;47251:68;;;;-1:-1:-1;;;47251:68:0;;;;;;;:::i;:::-;47755:30:::1;47782:1;47755:18;:30::i;:::-;47690:103::o:0;51701:492::-;51788:16;51822:19;51844:17;51854:6;51844:9;:17::i;:::-;51822:39;;51872:26;51915:11;51901:26;;;;;;-1:-1:-1;;;51901:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51901:26:0;;51872:55;;51938:19;51977:9;51972:187;51996:11;;51992:1;:15;51972:187;;;52047:6;-1:-1:-1;;;;;52033:20:0;:10;52041:1;52033:7;:10::i;:::-;-1:-1:-1;;;;;52033:20:0;;52029:119;;;52099:1;52074:9;52084:11;52074:22;;;;;;-1:-1:-1;;;52074:22:0;;;;;;;;;;;;;;;;;;:26;52119:13;;;;:::i;:::-;;;;52029:119;52009:3;;;;:::i;:::-;;;;51972:187;;;-1:-1:-1;52176:9:0;;51701:492;-1:-1:-1;;;;51701:492:0:o;53986:83::-;47270:12;:10;:12::i;:::-;-1:-1:-1;;;;;47259:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;47259:23:0;;47251:68;;;;-1:-1:-1;;;47251:68:0;;;;;;;:::i;:::-;54052:9:::1;::::0;;-1:-1:-1;;54039:22:0;::::1;54052:9;::::0;;;::::1;;;54051:10;54039:22:::0;;::::1;;::::0;;53986:83::o;47039:87::-;47085:7;47112:6;-1:-1:-1;;;;;47112:6:0;47039:87;:::o;34651:104::-;34707:13;34740:7;34733:14;;;;;:::i;49211:47::-;;;;;;;;;;;;;:::o;36334:155::-;36429:52;36448:12;:10;:12::i;:::-;36462:8;36472;36429:18;:52::i;49072:29::-;;;;;;:::o;49033:30::-;;;;:::o;37457:328::-;37632:41;37651:12;:10;:12::i;:::-;37665:7;37632:18;:41::i;:::-;37624:103;;;;-1:-1:-1;;;37624:103:0;;;;;;;:::i;:::-;37738:39;37752:4;37758:2;37762:7;37771:5;37738:13;:39::i;:::-;37457:328;;;;:::o;34826:334::-;34899:13;34933:16;34941:7;34933;:16::i;:::-;34925:76;;;;-1:-1:-1;;;34925:76:0;;;;;;;:::i;:::-;35014:21;35038:10;:8;:10::i;:::-;35014:34;;35090:1;35072:7;35066:21;:25;:86;;;;;;;;;;;;;;;;;35118:7;35127:18;:7;:16;:18::i;:::-;35101:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35066:86;35059:93;34826:334;-1:-1:-1;;;34826:334:0:o;53895:83::-;47270:12;:10;:12::i;:::-;-1:-1:-1;;;;;47259:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;47259:23:0;;47251:68;;;;-1:-1:-1;;;47251:68:0;;;;;;;:::i;:::-;53961:9:::1;::::0;;-1:-1:-1;;53948:22:0;::::1;53961:9;::::0;;::::1;53960:10;53948:22;::::0;;53895:83::o;49108:29::-;;;;;;;;;:::o;54305:130::-;54349:13;54406:7;54389:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;54375:52;;54305:130;:::o;36560:164::-;-1:-1:-1;;;;;36681:25:0;;;36657:4;36681:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;36560:164::o;47948:201::-;47270:12;:10;:12::i;:::-;-1:-1:-1;;;;;47259:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;47259:23:0;;47251:68;;;;-1:-1:-1;;;47251:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48037:22:0;::::1;48029:73;;;;-1:-1:-1::0;;;48029:73:0::1;;;;;;;:::i;:::-;48113:28;48132:8;48113:18;:28::i;:::-;47948:201:::0;:::o;25413:157::-;-1:-1:-1;;;;;;25522:40:0;;-1:-1:-1;;;25522:40:0;25413:157;;;:::o;39295:127::-;39360:4;39384:16;;;:7;:16;;;;;;-1:-1:-1;;;;;39384:16:0;:30;;;39295:127::o;31931:98::-;32011:10;31931:98;:::o;43277:174::-;43352:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;43352:29:0;-1:-1:-1;;;;;43352:29:0;;;;;;;;:24;;43406:23;43352:24;43406:14;:23::i;:::-;-1:-1:-1;;;;;43397:46:0;;;;;;;;;;;43277:174;;:::o;40279:110::-;40355:26;40365:2;40369:7;40355:26;;;;;;;;;;;;:9;:26::i;39589:348::-;39682:4;39707:16;39715:7;39707;:16::i;:::-;39699:73;;;;-1:-1:-1;;;39699:73:0;;;;;;;:::i;:::-;39783:13;39799:23;39814:7;39799:14;:23::i;:::-;39783:39;;39852:5;-1:-1:-1;;;;;39841:16:0;:7;-1:-1:-1;;;;;39841:16:0;;:51;;;;39885:7;-1:-1:-1;;;;;39861:31:0;:20;39873:7;39861:11;:20::i;:::-;-1:-1:-1;;;;;39861:31:0;;39841:51;:87;;;;39896:32;39913:5;39920:7;39896:16;:32::i;:::-;39833:96;39589:348;-1:-1:-1;;;;39589:348:0:o;42581:578::-;42740:4;-1:-1:-1;;;;;42713:31:0;:23;42728:7;42713:14;:23::i;:::-;-1:-1:-1;;;;;42713:31:0;;42705:85;;;;-1:-1:-1;;;42705:85:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42809:16:0;;42801:65;;;;-1:-1:-1;;;42801:65:0;;;;;;;:::i;:::-;42879:39;42900:4;42906:2;42910:7;42879:20;:39::i;:::-;42983:29;43000:1;43004:7;42983:8;:29::i;:::-;-1:-1:-1;;;;;43025:15:0;;;;;;:9;:15;;;;;:20;;43044:1;;43025:15;:20;;43044:1;;43025:20;:::i;:::-;;;;-1:-1:-1;;;;;;;43056:13:0;;;;;;:9;:13;;;;;:18;;43073:1;;43056:13;:18;;43073:1;;43056:18;:::i;:::-;;;;-1:-1:-1;;43085:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;43085:21:0;-1:-1:-1;;;;;43085:21:0;;;;;;;;;43124:27;;43085:16;;43124:27;;;;;;;42581:578;;;:::o;50410:980::-;50519:7;50498:10;:17;:28;;50490:66;;;;-1:-1:-1;;;50490:66:0;;;;;;;:::i;:::-;50600:21;48948:3;48900:5;50600:21;:::i;:::-;50589:7;50575:11;;:21;;;;:::i;:::-;:46;;50567:76;;;;-1:-1:-1;;;50567:76:0;;;;;;;:::i;:::-;50786:17;;50774:29;;48792:11;50774:29;:::i;:::-;50730:17;;50720:27;;:7;:27;:::i;:::-;50707:41;;48846:11;50707:41;:::i;:::-;50706:98;;;;:::i;:::-;50676:9;:128;50654:193;;;;-1:-1:-1;;;50654:193:0;;;;;;;:::i;:::-;50863:9;50858:525;50882:7;50878:1;:11;50858:525;;;50929:11;;50955:32;50965:12;:10;:12::i;:::-;50979:7;50955:9;:32::i;:::-;51026:1;51006:10;:17;:21;51002:342;;;51103:1;-1:-1:-1;;;;;51078:27:0;:10;51089:1;51078:13;;;;;;-1:-1:-1;;;51078:13:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;51078:27:0;;;51048:126;;;;-1:-1:-1;;;51048:126:0;;;;;;;:::i;:::-;51193:54;51210:12;:10;:12::i;:::-;51224:10;51235:1;51224:13;;;;;;-1:-1:-1;;;51224:13:0;;;;;;;;;;;;;;;51239:7;51193:16;:54::i;:::-;51281:10;51292:1;51281:13;;;;;;-1:-1:-1;;;51281:13:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;51266:39:0;;51306:12;:10;:12::i;:::-;51320:7;51266:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51002:342;51358:11;:13;;;:11;:13;;;:::i;:::-;;;;;;50858:525;50891:3;;;;;:::i;:::-;;;;50858:525;;52388:267;52496:4;52519:13;52538:76;52599:4;52538:35;52567:5;52538:28;:35::i;:::-;:46;;:76::i;:::-;-1:-1:-1;52641:6:0;;;;;-1:-1:-1;;;;;52641:6:0;;;52632:15;;;;52388:267;-1:-1:-1;;;;52388:267:0:o;52663:194::-;52772:7;52831;52840;52814:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52804:45;;;;;;52797:52;;52663:194;;;;:::o;48309:191::-;48383:16;48402:6;;-1:-1:-1;;;;;48419:17:0;;;-1:-1:-1;;;;;;48419:17:0;;;;;;48452:40;;48402:6;;;;;;;48452:40;;48383:16;48452:40;48309:191;;:::o;43593:315::-;43748:8;-1:-1:-1;;;;;43739:17:0;:5;-1:-1:-1;;;;;43739:17:0;;;43731:55;;;;-1:-1:-1;;;43731:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43797:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;:46;;-1:-1:-1;;43797:46:0;;;;;;;43859:41;;;;;43797:46;;43859:41;:::i;:::-;;;;;;;;43593:315;;;:::o;38667:::-;38824:28;38834:4;38840:2;38844:7;38824:9;:28::i;:::-;38871:48;38894:4;38900:2;38904:7;38913:5;38871:22;:48::i;:::-;38863:111;;;;-1:-1:-1;;;38863:111:0;;;;;;;:::i;54189:108::-;54249:13;54282:7;54275:14;;;;;:::i;3124:723::-;3180:13;3401:10;3397:53;;-1:-1:-1;3428:10:0;;;;;;;;;;;;-1:-1:-1;;;3428:10:0;;;;;;3397:53;3475:5;3460:12;3516:78;3523:9;;3516:78;;3549:8;;;;:::i;:::-;;-1:-1:-1;3572:10:0;;-1:-1:-1;3580:2:0;3572:10;;:::i;:::-;;;3516:78;;;3604:19;3636:6;3626:17;;;;;;-1:-1:-1;;;3626:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3626:17:0;;3604:39;;3654:154;3661:10;;3654:154;;3688:11;3698:1;3688:11;;:::i;:::-;;-1:-1:-1;3757:10:0;3765:2;3757:5;:10;:::i;:::-;3744:24;;:2;:24;:::i;:::-;3731:39;;3714:6;3721;3714:14;;;;;;-1:-1:-1;;;3714:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;3714:56:0;;;;;;;;-1:-1:-1;3785:11:0;3794:2;3785:11;;:::i;:::-;;;3654:154;;40616:321;40746:18;40752:2;40756:7;40746:5;:18::i;:::-;40797:54;40828:1;40832:2;40836:7;40845:5;40797:22;:54::i;:::-;40775:154;;;;-1:-1:-1;;;40775:154:0;;;;;;;:::i;13134:269::-;13203:7;13389:4;13336:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;13326:69;;;;;;13319:76;;13134:269;;;:::o;7175:1308::-;7256:7;7265:12;7490:9;:16;7510:2;7490:22;7486:990;;;7786:4;7771:20;;7765:27;7836:4;7821:20;;7815:27;7894:4;7879:20;;7873:27;7529:9;7865:36;7937:25;7948:4;7865:36;7765:27;7815;7937:10;:25::i;:::-;7930:32;;;;;;;;;7486:990;7984:9;:16;8004:2;7984:22;7980:496;;;8259:4;8244:20;;8238:27;8310:4;8295:20;;8289:27;8352:23;8363:4;8238:27;8289;8352:10;:23::i;:::-;8345:30;;;;;;;;7980:496;-1:-1:-1;8424:1:0;;-1:-1:-1;8428:35:0;7980:496;7175:1308;;;;;:::o;44473:799::-;44628:4;44649:15;:2;-1:-1:-1;;;;;44649:13:0;;:15::i;:::-;44645:620;;;44701:2;-1:-1:-1;;;;;44685:36:0;;44722:12;:10;:12::i;:::-;44736:4;44742:7;44751:5;44685:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44685:72:0;;;;;;;;-1:-1:-1;;44685:72:0;;;;;;;;;;;;:::i;:::-;;;44681:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44927:13:0;;44923:272;;44970:60;;-1:-1:-1;;;44970:60:0;;;;;;;:::i;44923:272::-;45145:6;45139:13;45130:6;45126:2;45122:15;45115:38;44681:529;-1:-1:-1;;;;;;44808:51:0;-1:-1:-1;;;44808:51:0;;-1:-1:-1;44801:58:0;;44645:620;-1:-1:-1;45249:4:0;44473:799;;;;;;:::o;41273:382::-;-1:-1:-1;;;;;41353:16:0;;41345:61;;;;-1:-1:-1;;;41345:61:0;;;;;;;:::i;:::-;41426:16;41434:7;41426;:16::i;:::-;41425:17;41417:58;;;;-1:-1:-1;;;41417:58:0;;;;;;;:::i;:::-;41488:45;41517:1;41521:2;41525:7;41488:20;:45::i;:::-;-1:-1:-1;;;;;41546:13:0;;;;;;:9;:13;;;;;:18;;41563:1;;41546:13;:18;;41563:1;;41546:18;:::i;:::-;;;;-1:-1:-1;;41575:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;41575:21:0;-1:-1:-1;;;;;41575:21:0;;;;;;;;41614:33;;41575:16;;;41614:33;;41575:16;;41614:33;41273:382;;:::o;10784:1632::-;10915:7;;11849:66;11836:79;;11832:163;;;-1:-1:-1;11948:1:0;;-1:-1:-1;11952:30:0;11932:51;;11832:163;12009:1;:7;;12014:2;12009:7;;:18;;;;;12020:1;:7;;12025:2;12020:7;;12009:18;12005:102;;;-1:-1:-1;12060:1:0;;-1:-1:-1;12064:30:0;12044:51;;12005:102;12204:14;12221:24;12231:4;12237:1;12240;12243;12221:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12221:24:0;;-1:-1:-1;;12221:24:0;;;-1:-1:-1;;;;;;;12260:20:0;;12256:103;;12313:1;12317:29;12297:50;;;;;;;12256:103;12379:6;-1:-1:-1;12387:20:0;;-1:-1:-1;10784:1632:0;;;;;;;;:::o;9779:391::-;9893:7;;-1:-1:-1;;;;;9994:75:0;;10096:3;10092:12;;;10106:2;10088:21;10137:25;10148:4;10088:21;10157:1;9994:75;10137:10;:25::i;:::-;10130:32;;;;;;9779:391;;;;;;:::o;15269:387::-;15592:20;15640:8;;;15269:387::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:409:1;;114:18;106:6;103:30;100:2;;;136:18;;:::i;:::-;174:58;220:2;197:17;;-1:-1:-1;;193:31:1;226:4;189:42;174:58;:::i;:::-;165:67;;255:6;248:5;241:21;295:3;286:6;281:3;277:16;274:25;271:2;;;312:1;309;302:12;271:2;361:6;356:3;349:4;342:5;338:16;325:43;415:1;408:4;399:6;392:5;388:18;384:29;377:40;90:333;;;;;:::o;428:175::-;498:20;;-1:-1:-1;;;;;547:31:1;;537:42;;527:2;;593:1;590;583:12;608:757;;721:3;714:4;706:6;702:17;698:27;688:2;;743:5;736;729:20;688:2;783:6;770:20;809:4;832:18;828:2;825:26;822:2;;;854:18;;:::i;:::-;901:2;897;893:11;924:27;947:2;943;939:11;924:27;:::i;:::-;985:15;;;1016:12;;;;1048:15;;;1082;;;1078:24;;1075:33;-1:-1:-1;1072:2:1;;;1125:5;1118;1111:20;1072:2;1151:5;1142:14;;1165:171;1179:2;1176:1;1173:9;1165:171;;;1236:25;1257:3;1236:25;:::i;:::-;1224:38;;1197:1;1190:9;;;;;1282:12;;;;1314;;1165:171;;;-1:-1:-1;1354:5:1;678:687;-1:-1:-1;;;;;;;678:687:1:o;1370:232::-;;1467:3;1460:4;1452:6;1448:17;1444:27;1434:2;;1489:5;1482;1475:20;1434:2;1515:81;1592:3;1583:6;1570:20;1563:4;1555:6;1551:17;1515:81;:::i;1607:198::-;;1719:2;1707:9;1698:7;1694:23;1690:32;1687:2;;;1740:6;1732;1725:22;1687:2;1768:31;1789:9;1768:31;:::i;1810:274::-;;;1939:2;1927:9;1918:7;1914:23;1910:32;1907:2;;;1960:6;1952;1945:22;1907:2;1988:31;2009:9;1988:31;:::i;:::-;1978:41;;2038:40;2074:2;2063:9;2059:18;2038:40;:::i;:::-;2028:50;;1897:187;;;;;:::o;2089:342::-;;;;2235:2;2223:9;2214:7;2210:23;2206:32;2203:2;;;2256:6;2248;2241:22;2203:2;2284:31;2305:9;2284:31;:::i;:::-;2274:41;;2334:40;2370:2;2359:9;2355:18;2334:40;:::i;:::-;2324:50;;2421:2;2410:9;2406:18;2393:32;2383:42;;2193:238;;;;;:::o;2436:563::-;;;;;2608:3;2596:9;2587:7;2583:23;2579:33;2576:2;;;2630:6;2622;2615:22;2576:2;2658:31;2679:9;2658:31;:::i;:::-;2648:41;;2708:40;2744:2;2733:9;2729:18;2708:40;:::i;:::-;2698:50;;2795:2;2784:9;2780:18;2767:32;2757:42;;2850:2;2839:9;2835:18;2822:32;2877:18;2869:6;2866:30;2863:2;;;2914:6;2906;2899:22;2863:2;2942:51;2985:7;2976:6;2965:9;2961:22;2942:51;:::i;:::-;2932:61;;;2566:433;;;;;;;:::o;3004:369::-;;;3130:2;3118:9;3109:7;3105:23;3101:32;3098:2;;;3151:6;3143;3136:22;3098:2;3179:31;3200:9;3179:31;:::i;:::-;3169:41;;3260:2;3249:9;3245:18;3232:32;3307:5;3300:13;3293:21;3286:5;3283:32;3273:2;;3334:6;3326;3319:22;3273:2;3362:5;3352:15;;;3088:285;;;;;:::o;3378:266::-;;;3507:2;3495:9;3486:7;3482:23;3478:32;3475:2;;;3528:6;3520;3513:22;3475:2;3556:31;3577:9;3556:31;:::i;:::-;3546:41;3634:2;3619:18;;;;3606:32;;-1:-1:-1;;;3465:179:1:o;3649:374::-;;3786:2;3774:9;3765:7;3761:23;3757:32;3754:2;;;3807:6;3799;3792:22;3754:2;3852:9;3839:23;3885:18;3877:6;3874:30;3871:2;;;3922:6;3914;3907:22;3871:2;3950:67;4009:7;4000:6;3989:9;3985:22;3950:67;:::i;4028:257::-;;4139:2;4127:9;4118:7;4114:23;4110:32;4107:2;;;4160:6;4152;4145:22;4107:2;4204:9;4191:23;4223:32;4249:5;4223:32;:::i;4290:261::-;;4412:2;4400:9;4391:7;4387:23;4383:32;4380:2;;;4433:6;4425;4418:22;4380:2;4470:9;4464:16;4489:32;4515:5;4489:32;:::i;4556:482::-;;4678:2;4666:9;4657:7;4653:23;4649:32;4646:2;;;4699:6;4691;4684:22;4646:2;4744:9;4731:23;4777:18;4769:6;4766:30;4763:2;;;4814:6;4806;4799:22;4763:2;4842:22;;4895:4;4887:13;;4883:27;-1:-1:-1;4873:2:1;;4929:6;4921;4914:22;4873:2;4957:75;5024:7;5019:2;5006:16;5001:2;4997;4993:11;4957:75;:::i;5043:190::-;;5155:2;5143:9;5134:7;5130:23;5126:32;5123:2;;;5176:6;5168;5161:22;5123:2;-1:-1:-1;5204:23:1;;5113:120;-1:-1:-1;5113:120:1:o;5238:442::-;;;5392:2;5380:9;5371:7;5367:23;5363:32;5360:2;;;5413:6;5405;5398:22;5360:2;5454:9;5441:23;5431:33;;5515:2;5504:9;5500:18;5487:32;5542:18;5534:6;5531:30;5528:2;;;5579:6;5571;5564:22;5528:2;5607:67;5666:7;5657:6;5646:9;5642:22;5607:67;:::i;:::-;5597:77;;;5350:330;;;;;:::o;5685:742::-;;;;;5882:3;5870:9;5861:7;5857:23;5853:33;5850:2;;;5904:6;5896;5889:22;5850:2;5945:9;5932:23;5922:33;;6002:2;5991:9;5987:18;5974:32;5964:42;;6057:2;6046:9;6042:18;6029:32;6080:18;6121:2;6113:6;6110:14;6107:2;;;6142:6;6134;6127:22;6107:2;6170:51;6213:7;6204:6;6193:9;6189:22;6170:51;:::i;:::-;6160:61;;6274:2;6263:9;6259:18;6246:32;6230:48;;6303:2;6293:8;6290:16;6287:2;;;6324:6;6316;6309:22;6287:2;;6352:69;6413:7;6402:8;6391:9;6387:24;6352:69;:::i;6432:259::-;;6513:5;6507:12;6540:6;6535:3;6528:19;6556:63;6612:6;6605:4;6600:3;6596:14;6589:4;6582:5;6578:16;6556:63;:::i;:::-;6673:2;6652:15;-1:-1:-1;;6648:29:1;6639:39;;;;6680:4;6635:50;;6483:208;-1:-1:-1;;6483:208:1:o;6696:123::-;-1:-1:-1;;;6763:23:1;;6811:1;6802:11;;6753:66::o;6824:294::-;7001:2;6997:15;;;;-1:-1:-1;;6993:53:1;6981:66;;7072:2;7063:12;;7056:28;7109:2;7100:12;;6971:147::o;7123:470::-;;7340:6;7334:13;7356:53;7402:6;7397:3;7390:4;7382:6;7378:17;7356:53;:::i;:::-;7472:13;;7431:16;;;;7494:57;7472:13;7431:16;7528:4;7516:17;;7494:57;:::i;:::-;7567:20;;7310:283;-1:-1:-1;;;;7310:283:1:o;7598:1238::-;7885:13;;7598:1238;;;;7958:1;7943:17;;7979:1;8015:18;;;;8042:2;;8096:4;8088:6;8084:17;8074:27;;8042:2;8122;8170;8162:6;8159:14;8139:18;8136:38;8133:2;;;-1:-1:-1;;;8197:33:1;;8253:4;8250:1;8243:15;8283:4;8204:3;8271:17;8133:2;8314:18;8341:104;;;;8459:1;8454:324;;;;8307:471;;8341:104;-1:-1:-1;;8374:24:1;;8362:37;;8419:16;;;;-1:-1:-1;8341:104:1;;8454:324;8490:39;8522:6;8490:39;:::i;:::-;8551:3;8567:165;8581:6;8578:1;8575:13;8567:165;;;8659:14;;8646:11;;;8639:35;8702:16;;;;8596:10;;8567:165;;;8571:3;;8761:6;8756:3;8752:16;8745:23;;8307:471;;;;;;;8794:36;8826:3;8794:36;:::i;8841:380::-;9083:66;9071:79;;9175:2;9166:12;;9159:28;;;;9212:2;9203:12;;9061:160::o;9226:205::-;9426:3;9417:14::o;9436:203::-;-1:-1:-1;;;;;9600:32:1;;;;9582:51;;9570:2;9555:18;;9537:102::o;9644:490::-;-1:-1:-1;;;;;9913:15:1;;;9895:34;;9965:15;;9960:2;9945:18;;9938:43;10012:2;9997:18;;9990:34;;;10060:3;10055:2;10040:18;;10033:31;;;9644:490;;10081:47;;10108:19;;10100:6;10081:47;:::i;:::-;10073:55;9847:287;-1:-1:-1;;;;;;9847:287:1:o;10139:274::-;-1:-1:-1;;;;;10331:32:1;;;;10313:51;;10395:2;10380:18;;10373:34;10301:2;10286:18;;10268:145::o;10418:635::-;10589:2;10641:21;;;10711:13;;10614:18;;;10733:22;;;10418:635;;10589:2;10812:15;;;;10786:2;10771:18;;;10418:635;10858:169;10872:6;10869:1;10866:13;10858:169;;;10933:13;;10921:26;;11002:15;;;;10967:12;;;;10894:1;10887:9;10858:169;;;-1:-1:-1;11044:3:1;;10569:484;-1:-1:-1;;;;;;10569:484:1:o;11058:187::-;11223:14;;11216:22;11198:41;;11186:2;11171:18;;11153:92::o;11250:398::-;11477:25;;;11550:4;11538:17;;;;11533:2;11518:18;;11511:45;11587:2;11572:18;;11565:34;11630:2;11615:18;;11608:34;11464:3;11449:19;;11431:217::o;11653:221::-;;11802:2;11791:9;11784:21;11822:46;11864:2;11853:9;11849:18;11841:6;11822:46;:::i;11879:345::-;12081:2;12063:21;;;12120:2;12100:18;;;12093:30;-1:-1:-1;;;12154:2:1;12139:18;;12132:51;12215:2;12200:18;;12053:171::o;12229:346::-;12431:2;12413:21;;;12470:2;12450:18;;;12443:30;-1:-1:-1;;;12504:2:1;12489:18;;12482:52;12566:2;12551:18;;12403:172::o;12580:414::-;12782:2;12764:21;;;12821:2;12801:18;;;12794:30;12860:34;12855:2;12840:18;;12833:62;-1:-1:-1;;;12926:2:1;12911:18;;12904:48;12984:3;12969:19;;12754:240::o;12999:402::-;13201:2;13183:21;;;13240:2;13220:18;;;13213:30;13279:34;13274:2;13259:18;;13252:62;-1:-1:-1;;;13345:2:1;13330:18;;13323:36;13391:3;13376:19;;13173:228::o;13406:339::-;13608:2;13590:21;;;13647:2;13627:18;;;13620:30;-1:-1:-1;;;13681:2:1;13666:18;;13659:45;13736:2;13721:18;;13580:165::o;13750:340::-;13952:2;13934:21;;;13991:2;13971:18;;;13964:30;-1:-1:-1;;;14025:2:1;14010:18;;14003:46;14081:2;14066:18;;13924:166::o;14095:352::-;14297:2;14279:21;;;14336:2;14316:18;;;14309:30;14375;14370:2;14355:18;;14348:58;14438:2;14423:18;;14269:178::o;14452:343::-;14654:2;14636:21;;;14693:2;14673:18;;;14666:30;-1:-1:-1;;;14727:2:1;14712:18;;14705:49;14786:2;14771:18;;14626:169::o;14800:343::-;15002:2;14984:21;;;15041:2;15021:18;;;15014:30;-1:-1:-1;;;15075:2:1;15060:18;;15053:49;15134:2;15119:18;;14974:169::o;15148:349::-;15350:2;15332:21;;;15389:2;15369:18;;;15362:30;15428:27;15423:2;15408:18;;15401:55;15488:2;15473:18;;15322:175::o;15502:400::-;15704:2;15686:21;;;15743:2;15723:18;;;15716:30;15782:34;15777:2;15762:18;;15755:62;-1:-1:-1;;;15848:2:1;15833:18;;15826:34;15892:3;15877:19;;15676:226::o;15907:349::-;16109:2;16091:21;;;16148:2;16128:18;;;16121:30;16187:27;16182:2;16167:18;;16160:55;16247:2;16232:18;;16081:175::o;16261:340::-;16463:2;16445:21;;;16502:2;16482:18;;;16475:30;-1:-1:-1;;;16536:2:1;16521:18;;16514:46;16592:2;16577:18;;16435:166::o;16606:408::-;16808:2;16790:21;;;16847:2;16827:18;;;16820:30;16886:34;16881:2;16866:18;;16859:62;-1:-1:-1;;;16952:2:1;16937:18;;16930:42;17004:3;16989:19;;16780:234::o;17019:341::-;17221:2;17203:21;;;17260:2;17240:18;;;17233:30;-1:-1:-1;;;17294:2:1;17279:18;;17272:47;17351:2;17336:18;;17193:167::o;17365:420::-;17567:2;17549:21;;;17606:2;17586:18;;;17579:30;17645:34;17640:2;17625:18;;17618:62;17716:26;17711:2;17696:18;;17689:54;17775:3;17760:19;;17539:246::o;17790:406::-;17992:2;17974:21;;;18031:2;18011:18;;;18004:30;18070:34;18065:2;18050:18;;18043:62;-1:-1:-1;;;18136:2:1;18121:18;;18114:40;18186:3;18171:19;;17964:232::o;18201:405::-;18403:2;18385:21;;;18442:2;18422:18;;;18415:30;18481:34;18476:2;18461:18;;18454:62;-1:-1:-1;;;18547:2:1;18532:18;;18525:39;18596:3;18581:19;;18375:231::o;18611:356::-;18813:2;18795:21;;;18832:18;;;18825:30;18891:34;18886:2;18871:18;;18864:62;18958:2;18943:18;;18785:182::o;18972:408::-;19174:2;19156:21;;;19213:2;19193:18;;;19186:30;19252:34;19247:2;19232:18;;19225:62;-1:-1:-1;;;19318:2:1;19303:18;;19296:42;19370:3;19355:19;;19146:234::o;19385:356::-;19587:2;19569:21;;;19606:18;;;19599:30;19665:34;19660:2;19645:18;;19638:62;19732:2;19717:18;;19559:182::o;19746:405::-;19948:2;19930:21;;;19987:2;19967:18;;;19960:30;20026:34;20021:2;20006:18;;19999:62;-1:-1:-1;;;20092:2:1;20077:18;;20070:39;20141:3;20126:19;;19920:231::o;20156:411::-;20358:2;20340:21;;;20397:2;20377:18;;;20370:30;20436:34;20431:2;20416:18;;20409:62;-1:-1:-1;;;20502:2:1;20487:18;;20480:45;20557:3;20542:19;;20330:237::o;20572:349::-;20774:2;20756:21;;;20813:2;20793:18;;;20786:30;20852:27;20847:2;20832:18;;20825:55;20912:2;20897:18;;20746:175::o;20926:341::-;21128:2;21110:21;;;21167:2;21147:18;;;21140:30;-1:-1:-1;;;21201:2:1;21186:18;;21179:47;21258:2;21243:18;;21100:167::o;21272:397::-;21474:2;21456:21;;;21513:2;21493:18;;;21486:30;21552:34;21547:2;21532:18;;21525:62;-1:-1:-1;;;21618:2:1;21603:18;;21596:31;21659:3;21644:19;;21446:223::o;21674:346::-;21876:2;21858:21;;;21915:2;21895:18;;;21888:30;-1:-1:-1;;;21949:2:1;21934:18;;21927:52;22011:2;21996:18;;21848:172::o;22025:413::-;22227:2;22209:21;;;22266:2;22246:18;;;22239:30;22305:34;22300:2;22285:18;;22278:62;-1:-1:-1;;;22371:2:1;22356:18;;22349:47;22428:3;22413:19;;22199:239::o;22443:343::-;22645:2;22627:21;;;22684:2;22664:18;;;22657:30;-1:-1:-1;;;22718:2:1;22703:18;;22696:49;22777:2;22762:18;;22617:169::o;22791:355::-;22993:2;22975:21;;;23032:2;23012:18;;;23005:30;23071:33;23066:2;23051:18;;23044:61;23137:2;23122:18;;22965:181::o;23151:340::-;23353:2;23335:21;;;23392:2;23372:18;;;23365:30;-1:-1:-1;;;23426:2:1;23411:18;;23404:46;23482:2;23467:18;;23325:166::o;23496:177::-;23642:25;;;23630:2;23615:18;;23597:76::o;23678:251::-;23748:2;23742:9;23778:17;;;23825:18;23810:34;;23846:22;;;23807:62;23804:2;;;23872:18;;:::i;:::-;23908:2;23901:22;23722:207;;-1:-1:-1;23722:207:1:o;23934:129::-;;24002:17;;;24052:4;24036:21;;;23992:71::o;24068:128::-;;24139:1;24135:6;24132:1;24129:13;24126:2;;;24145:18;;:::i;:::-;-1:-1:-1;24181:9:1;;24116:80::o;24201:120::-;;24267:1;24257:2;;24272:18;;:::i;:::-;-1:-1:-1;24306:9:1;;24247:74::o;24326:168::-;;24432:1;24428;24424:6;24420:14;24417:1;24414:21;24409:1;24402:9;24395:17;24391:45;24388:2;;;24439:18;;:::i;:::-;-1:-1:-1;24479:9:1;;24378:116::o;24499:125::-;;24567:1;24564;24561:8;24558:2;;;24572:18;;:::i;:::-;-1:-1:-1;24609:9:1;;24548:76::o;24629:258::-;24701:1;24711:113;24725:6;24722:1;24719:13;24711:113;;;24801:11;;;24795:18;24782:11;;;24775:39;24747:2;24740:10;24711:113;;;24842:6;24839:1;24836:13;24833:2;;;-1:-1:-1;;24877:1:1;24859:16;;24852:27;24682:205::o;24892:380::-;24977:1;24967:12;;25024:1;25014:12;;;25035:2;;25089:4;25081:6;25077:17;25067:27;;25035:2;25142;25134:6;25131:14;25111:18;25108:38;25105:2;;;25188:10;25183:3;25179:20;25176:1;25169:31;25223:4;25220:1;25213:15;25251:4;25248:1;25241:15;25105:2;;24947:325;;;:::o;25277:135::-;;-1:-1:-1;;25337:17:1;;25334:2;;;25357:18;;:::i;:::-;-1:-1:-1;25404:1:1;25393:13;;25324:88::o;25417:112::-;;25475:1;25465:2;;25480:18;;:::i;:::-;-1:-1:-1;25514:9:1;;25455:74::o;25534:127::-;25595:10;25590:3;25586:20;25583:1;25576:31;25626:4;25623:1;25616:15;25650:4;25647:1;25640:15;25666:127;25727:10;25722:3;25718:20;25715:1;25708:31;25758:4;25755:1;25748:15;25782:4;25779:1;25772:15;25798:127;25859:10;25854:3;25850:20;25847:1;25840:31;25890:4;25887:1;25880:15;25914:4;25911:1;25904:15;25930:133;-1:-1:-1;;;;;;26006:32:1;;25996:43;;25986:2;;26053:1;26050;26043:12
Swarm Source
ipfs://ee2b8d26b6745b12dbe6d147dd27ffbf4809fabf15b47e02f7846033c1382e6d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.