ETH Price: $3,004.71 (+4.30%)
Gas: 1 Gwei

Token

Journey to the Metaverse - Genesis (JTTM)
 

Overview

Max Total Supply

444 JTTM

Holders

167

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 JTTM
0x462fcc4b3fc64e0dfd751424bc3b070d79efb300
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Wukong

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-04
*/

/**
 *Submitted for verification at Etherscan.io on 2022-02-04
*/

/**
 *Submitted for verification at Etherscan.io on 2022-02-03
*/

// Sources flattened with hardhat v2.5.0 https://hardhat.org

// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}


// File contracts/utils/introspection/IERC165.sol
 
// SPDX-License-Identifier: MIT
 
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 contracts/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 contracts/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 contracts/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 contracts/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;
        // solhint-disable-next-line no-inline-assembly
        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");
 
        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");
 
        // solhint-disable-next-line avoid-low-level-calls
        (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");
 
        // solhint-disable-next-line avoid-low-level-calls
        (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");
 
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
 
    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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
 
                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
 
 
// File contracts/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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
 
// File contracts/utils/Strings.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
 
}
 
 
// File contracts/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 contracts/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}. 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 {
        require(operator != _msgSender(), "ERC721: approve to caller");
 
        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }
 
    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }
 
    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        //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 Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        private returns (bool)
    {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 contracts/token/ERC721/extensions/ERC721URIStorage.sol
 
 
 
pragma solidity ^0.8.0;
 
/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;
 
    // Optional mapping for token URIs
    mapping (uint256 => string) private _tokenURIs;
 
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");
 
        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();
 
        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
 
        return super.tokenURI(tokenId);
    }
 
    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }
 
    /**
     * @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 override {
        super._burn(tokenId);
 
        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}
 
 
// File contracts/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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 

contract Wukong is ERC721URIStorage, Ownable, ReentrancyGuard {

    using Strings for uint256;

    event mintWukong (address indexed minter, uint256 startWith, uint256 times);
   
    mapping (address => bool) public addressesMinted;
       
    uint256 public totalWukong;
    uint256 public TokenAvailable = 423;
    uint256 public TokenReserve = 21; 
    uint256 public maxBatch = 2;
    uint256 public OGSalePrice = 44400000000000000; // 0.0444 eth
    uint256 public SalePrice = 66600000000000000; // 0.0666 eth
    string public baseURI;
    bool public PublicStart;
    bool public OGStart;
    bool public ResStart;
    uint addressRegistryCount;
    bytes32 public OGMerkleRoot;
    bytes32 public ResMerkleRoot;
    bool public revealed = false;
    string public notRevealedUri;
    string private baseExtension = ".json";
    
    constructor(string memory name_, string memory symbol_, string memory baseURI_) ERC721(name_, symbol_) {
        baseURI = baseURI_;
    }
    
    modifier canOGMint() {
        require(OGStart, "Whitelist mint has not started");
        _; 
    }

    modifier canResMint() {
        require(ResStart, "Whitelist mint has not started");
        _; 
    }

    modifier mintEnabled() {
        require(PublicStart, "Not started");
        _;
    }

    modifier isValidMerkleProof(bytes32[] calldata merkleProof, bytes32 root) {
        require(
            MerkleProof.verify(
                merkleProof,
                root,
                keccak256(abi.encodePacked(msg.sender))
            ),
            "Address does not exist in list"
        );
        _;
    }
 
    function totalSupply() public view virtual returns (uint256) {
        return totalWukong;
       
    }
 
    function _baseURI() internal view virtual override returns (string memory){
        return baseURI;
    }
 
    function setBaseURI(string memory _newURI) public onlyOwner {
        baseURI = _newURI;
    }
 
    function changeOGPrice(uint256 _newPrice) public onlyOwner {
        OGSalePrice = _newPrice;
    }

    function changePublicPrice(uint256 _newPrice) public onlyOwner {
        SalePrice = _newPrice;
    }
 
    function setTokenURI(uint256 _tokenId, string memory _tokenURI) public onlyOwner {
        _setTokenURI(_tokenId, _tokenURI);
    }

    function setNotRevealUri(string memory _uri) external onlyOwner {
        notRevealedUri = _uri;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        
        if(revealed == false) {
            return notRevealedUri;
        }

        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : "";
    }
    
    function reveal() external onlyOwner {
        revealed = true;
    }
 
    function setNormalStart(bool _start) public onlyOwner {
        PublicStart = _start;
    }
    
    function setOGStart(bool _start) public onlyOwner {
        OGStart = _start;
    }

    function setResStart(bool _start) public onlyOwner {
        ResStart = _start;
    }
    
 
    function MintWukong(uint256 _times) payable public mintEnabled {
        require(_times >0 && _times <= maxBatch, "mint wrong number");
        require(totalWukong + _times <= TokenAvailable, "too much");
        require(msg.value == _times * SalePrice, "value error");
        require(isInMinted(msg.sender) == false, "You already minted!");
        for(uint256 i=0; i< _times; i++){
            _mint(_msgSender(), 1 + totalWukong++);
        addressesMinted[msg.sender] = true;
        }
    } 
    
    function adminMint(uint256 _times) public onlyOwner {
        require(totalWukong + _times <= TokenAvailable + TokenReserve, "too much");
        for(uint256 i=0; i< _times; i++){
            _mint(_msgSender(), 1 + totalWukong++);
        }
    }
    
    
    function OGMint(
      uint _times, bytes32[] calldata merkleProof
    ) 
        payable public 
            isValidMerkleProof(merkleProof, OGMerkleRoot)
            nonReentrant 
            canOGMint
        {
        require(_times >0 && _times <= maxBatch, "mint wrong number");
        require(totalWukong + _times <= TokenAvailable, "too much");
        require(msg.value == _times * OGSalePrice, "Incorrect transaction value.");
        require(isInMinted(msg.sender) == false, "You already minted!");
        for(uint256 i=0; i< _times; i++){
            _mint(_msgSender(), 1 + totalWukong++);
        addressesMinted[msg.sender] = true; 
        }
    }
    
        function ResMint(
      uint _times, bytes32[] calldata merkleProof
    ) 
        payable public 
            isValidMerkleProof(merkleProof, ResMerkleRoot)
            nonReentrant 
            canResMint
        {
        require(_times >0 && _times <= maxBatch, "mint wrong number");
        require(totalWukong + _times <= TokenAvailable, "too much");
        require(msg.value == _times * OGSalePrice, "Incorrect transaction value.");
        require(isInMinted(msg.sender) == false, "You already minted!");
        for(uint256 i=0; i< _times; i++){
            _mint(_msgSender(), 1 + totalWukong++);
        addressesMinted[msg.sender] = true;
        }
    }
    
    function adminMintGiveaways(address _addr) public onlyOwner {
        require(totalWukong + 1 <= TokenAvailable + TokenReserve, "Mint amount will exceed total collection amount.");
        _mint(_addr, 1 + totalWukong++);
    } 


    function setOGMerkleRoot(bytes32 merkleRoot) external onlyOwner {
        OGMerkleRoot = merkleRoot;
    }

    function setReserveMerkleRoot(bytes32 merkleRoot) external onlyOwner {
        ResMerkleRoot = merkleRoot;
    }

    function isInMinted(address _address) public view returns (bool) {
        return addressesMinted[_address];
    }

    function addToMinted(address _address) private {
        addressesMinted[_address] = true;
    }

    function withdraw() public onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }



}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"baseURI_","type":"string"}],"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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"startWith","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"times","type":"uint256"}],"name":"mintWukong","type":"event"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"MintWukong","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"OGMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"OGMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"OGSalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"OGStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PublicStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ResMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"ResMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ResStart","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SalePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TokenAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TokenReserve","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressesMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"adminMintGiveaways","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changeOGPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"changePublicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isInMinted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"setNormalStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setNotRevealUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"setOGMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"setOGStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"setResStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot","type":"bytes32"}],"name":"setReserveMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWukong","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526101a7600b556015600c556002600d55669dbd9094070000600e5566ec9c58de0a8000600f556000601560006101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506017908051906020019062000092929190620001df565b50348015620000a057600080fd5b50604051620058ea380380620058ea8339818101604052810190620000c691906200030d565b82828160009080519060200190620000e0929190620001df565b508060019080519060200190620000f9929190620001df565b50505060006200010e620001d760201b60201c565b905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060016008819055508060109080519060200190620001cd929190620001df565b505050506200054a565b600033905090565b828054620001ed906200045b565b90600052602060002090601f0160209004810192826200021157600085556200025d565b82601f106200022c57805160ff19168380011785556200025d565b828001600101855582156200025d579182015b828111156200025c5782518255916020019190600101906200023f565b5b5090506200026c919062000270565b5090565b5b808211156200028b57600081600090555060010162000271565b5090565b6000620002a6620002a084620003ef565b620003c6565b905082815260208101848484011115620002c557620002c46200052a565b5b620002d284828562000425565b509392505050565b600082601f830112620002f257620002f162000525565b5b8151620003048482602086016200028f565b91505092915050565b60008060006060848603121562000329576200032862000534565b5b600084015167ffffffffffffffff8111156200034a57620003496200052f565b5b6200035886828701620002da565b935050602084015167ffffffffffffffff8111156200037c576200037b6200052f565b5b6200038a86828701620002da565b925050604084015167ffffffffffffffff811115620003ae57620003ad6200052f565b5b620003bc86828701620002da565b9150509250925092565b6000620003d2620003e5565b9050620003e0828262000491565b919050565b6000604051905090565b600067ffffffffffffffff8211156200040d576200040c620004f6565b5b620004188262000539565b9050602081019050919050565b60005b838110156200044557808201518184015260208101905062000428565b8381111562000455576000848401525b50505050565b600060028204905060018216806200047457607f821691505b602082108114156200048b576200048a620004c7565b5b50919050565b6200049c8262000539565b810181811067ffffffffffffffff82111715620004be57620004bd620004f6565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b615390806200055a6000396000f3fe6080604052600436106102c95760003560e01c8063715018a611610175578063a69027d9116100dc578063c1f2612311610095578063db72a7591161006f578063db72a75914610a7b578063e5628d7014610aa6578063e985e9c514610ad1578063f2fde38b14610b0e576102c9565b8063c1f26123146109ea578063c87b56dd14610a13578063ce6d65c914610a50576102c9565b8063a69027d9146108f0578063a779a52114610919578063aa08f39614610944578063aad460dd1461096d578063b88d4fde14610998578063c1325508146109c1576102c9565b8063976418391161012e57806397641839146108155780639a5c57d6146108315780639d7e8d5f1461085c578063a22cb46514610885578063a475b5dd146108ae578063a4e6c98a146108c5576102c9565b8063715018a61461073857806383df8d8d1461074f5780638da5cb5b1461077a578063917bb57f146107a55780639394cb60146107ce57806395d89b41146107ea576102c9565b80633597d3e21161023457806355f804b3116101ed57806367765b87116101c757806367765b871461067c5780636c0360eb146106a757806370355472146106d257806370a08231146106fb576102c9565b806355f804b3146105eb5780636352211e146106145780636484fdff14610651576102c9565b80633597d3e2146104dd5780633c49a8a91461051a5780633ccfd60b1461054357806342842e0e1461055a578063435a59a41461058357806351830227146105c0576102c9565b8063130255071161028657806313025507146103f0578063162094c41461041b57806318160ddd1461044457806323b872dd1461046f57806325c2c020146104985780632932d1b1146104c1576102c9565b806301ffc9a7146102ce57806306fdde031461030b578063081812fc14610336578063081c8c4414610373578063095ea7b31461039e5780630a84c571146103c7575b600080fd5b3480156102da57600080fd5b506102f560048036038101906102f09190613c1f565b610b37565b60405161030291906143c7565b60405180910390f35b34801561031757600080fd5b50610320610c19565b60405161032d91906143fd565b60405180910390f35b34801561034257600080fd5b5061035d60048036038101906103589190613cc2565b610cab565b60405161036a9190614360565b60405180910390f35b34801561037f57600080fd5b50610388610d30565b60405161039591906143fd565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190613b85565b610dbe565b005b3480156103d357600080fd5b506103ee60048036038101906103e99190613bc5565b610ed6565b005b3480156103fc57600080fd5b50610405610f6f565b604051610412919061477f565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d9190613d4f565b610f75565b005b34801561045057600080fd5b50610459610fff565b604051610466919061477f565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613a6f565b611009565b005b3480156104a457600080fd5b506104bf60048036038101906104ba9190613bf2565b611069565b005b6104db60048036038101906104d69190613cef565b6110ef565b005b3480156104e957600080fd5b5061050460048036038101906104ff9190613a02565b61143d565b60405161051191906143c7565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190613a02565b611493565b005b34801561054f57600080fd5b5061055861159e565b005b34801561056657600080fd5b50610581600480360381019061057c9190613a6f565b611669565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190613a02565b611689565b6040516105b791906143c7565b60405180910390f35b3480156105cc57600080fd5b506105d56116a9565b6040516105e291906143c7565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190613c79565b6116bc565b005b34801561062057600080fd5b5061063b60048036038101906106369190613cc2565b611752565b6040516106489190614360565b60405180910390f35b34801561065d57600080fd5b50610666611804565b604051610673919061477f565b60405180910390f35b34801561068857600080fd5b5061069161180a565b60405161069e919061477f565b60405180910390f35b3480156106b357600080fd5b506106bc611810565b6040516106c991906143fd565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f49190613bc5565b61189e565b005b34801561070757600080fd5b50610722600480360381019061071d9190613a02565b611937565b60405161072f919061477f565b60405180910390f35b34801561074457600080fd5b5061074d6119ef565b005b34801561075b57600080fd5b50610764611b2c565b60405161077191906143e2565b60405180910390f35b34801561078657600080fd5b5061078f611b32565b60405161079c9190614360565b60405180910390f35b3480156107b157600080fd5b506107cc60048036038101906107c79190613bc5565b611b5c565b005b6107e860048036038101906107e39190613cef565b611bf5565b005b3480156107f657600080fd5b506107ff611f43565b60405161080c91906143fd565b60405180910390f35b61082f600480360381019061082a9190613cc2565b611fd5565b005b34801561083d57600080fd5b50610846612212565b60405161085391906143c7565b60405180910390f35b34801561086857600080fd5b50610883600480360381019061087e9190613cc2565b612225565b005b34801561089157600080fd5b506108ac60048036038101906108a79190613b45565b6122ab565b005b3480156108ba57600080fd5b506108c361242c565b005b3480156108d157600080fd5b506108da6124c5565b6040516108e791906143e2565b60405180910390f35b3480156108fc57600080fd5b5061091760048036038101906109129190613bf2565b6124cb565b005b34801561092557600080fd5b5061092e612551565b60405161093b919061477f565b60405180910390f35b34801561095057600080fd5b5061096b60048036038101906109669190613c79565b612557565b005b34801561097957600080fd5b506109826125ed565b60405161098f91906143c7565b60405180910390f35b3480156109a457600080fd5b506109bf60048036038101906109ba9190613ac2565b612600565b005b3480156109cd57600080fd5b506109e860048036038101906109e39190613cc2565b612662565b005b3480156109f657600080fd5b50610a116004803603810190610a0c9190613cc2565b6126e8565b005b348015610a1f57600080fd5b50610a3a6004803603810190610a359190613cc2565b612818565b604051610a4791906143fd565b60405180910390f35b348015610a5c57600080fd5b50610a65612971565b604051610a72919061477f565b60405180910390f35b348015610a8757600080fd5b50610a90612977565b604051610a9d919061477f565b60405180910390f35b348015610ab257600080fd5b50610abb61297d565b604051610ac891906143c7565b60405180910390f35b348015610add57600080fd5b50610af86004803603810190610af39190613a2f565b612990565b604051610b0591906143c7565b60405180910390f35b348015610b1a57600080fd5b50610b356004803603810190610b309190613a02565b612a24565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c0257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c125750610c1182612bd0565b5b9050919050565b606060008054610c2890614a4e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5490614a4e565b8015610ca15780601f10610c7657610100808354040283529160200191610ca1565b820191906000526020600020905b815481529060010190602001808311610c8457829003601f168201915b5050505050905090565b6000610cb682612c3a565b610cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cec9061465f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60168054610d3d90614a4e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6990614a4e565b8015610db65780601f10610d8b57610100808354040283529160200191610db6565b820191906000526020600020905b815481529060010190602001808311610d9957829003601f168201915b505050505081565b6000610dc982611752565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e31906146df565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e59612ca6565b73ffffffffffffffffffffffffffffffffffffffff161480610e885750610e8781610e82612ca6565b612990565b5b610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe9061459f565b60405180910390fd5b610ed18383612cae565b505050565b610ede612ca6565b73ffffffffffffffffffffffffffffffffffffffff16610efc611b32565b73ffffffffffffffffffffffffffffffffffffffff1614610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f499061467f565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b600c5481565b610f7d612ca6565b73ffffffffffffffffffffffffffffffffffffffff16610f9b611b32565b73ffffffffffffffffffffffffffffffffffffffff1614610ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe89061467f565b60405180910390fd5b610ffb8282612d67565b5050565b6000600a54905090565b61101a611014612ca6565b82612ddb565b611059576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611050906146ff565b60405180910390fd5b611064838383612eb9565b505050565b611071612ca6565b73ffffffffffffffffffffffffffffffffffffffff1661108f611b32565b73ffffffffffffffffffffffffffffffffffffffff16146110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc9061467f565b60405180910390fd5b8060138190555050565b8181601354611166838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050823360405160200161114b91906142e8565b60405160208183030381529060405280519060200120613115565b6111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119c9061457f565b60405180910390fd5b600260085414156111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e29061473f565b60405180910390fd5b6002600881905550601160019054906101000a900460ff16611242576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611239906144bf565b60405180910390fd5b6000861180156112545750600d548611155b611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a906144ff565b60405180910390fd5b600b5486600a546112a49190614879565b11156112e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dc9061441f565b60405180910390fd5b600e54866112f39190614900565b3414611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b9061461f565b60405180910390fd5b600015156113413361143d565b151514611383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137a9061443f565b60405180910390fd5b60005b8681101561142c576113c1611399612ca6565b600a60008154809291906113ac90614ab1565b9190505560016113bc9190614879565b61312c565b6001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061142490614ab1565b915050611386565b506001600881905550505050505050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61149b612ca6565b73ffffffffffffffffffffffffffffffffffffffff166114b9611b32565b73ffffffffffffffffffffffffffffffffffffffff161461150f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115069061467f565b60405180910390fd5b600c54600b5461151f9190614879565b6001600a5461152e9190614879565b111561156f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115669061471f565b60405180910390fd5b61159b81600a600081548092919061158690614ab1565b9190505560016115969190614879565b61312c565b50565b6115a6612ca6565b73ffffffffffffffffffffffffffffffffffffffff166115c4611b32565b73ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116119061467f565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611665573d6000803e3d6000fd5b5050565b61168483838360405180602001604052806000815250612600565b505050565b60096020528060005260406000206000915054906101000a900460ff1681565b601560009054906101000a900460ff1681565b6116c4612ca6565b73ffffffffffffffffffffffffffffffffffffffff166116e2611b32565b73ffffffffffffffffffffffffffffffffffffffff1614611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f9061467f565b60405180910390fd5b806010908051906020019061174e9291906137ab565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f2906145df565b60405180910390fd5b80915050919050565b600a5481565b600d5481565b6010805461181d90614a4e565b80601f016020809104026020016040519081016040528092919081815260200182805461184990614a4e565b80156118965780601f1061186b57610100808354040283529160200191611896565b820191906000526020600020905b81548152906001019060200180831161187957829003601f168201915b505050505081565b6118a6612ca6565b73ffffffffffffffffffffffffffffffffffffffff166118c4611b32565b73ffffffffffffffffffffffffffffffffffffffff161461191a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119119061467f565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199f906145bf565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119f7612ca6565b73ffffffffffffffffffffffffffffffffffffffff16611a15611b32565b73ffffffffffffffffffffffffffffffffffffffff1614611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a629061467f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60135481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b64612ca6565b73ffffffffffffffffffffffffffffffffffffffff16611b82611b32565b73ffffffffffffffffffffffffffffffffffffffff1614611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf9061467f565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b8181601454611c6c838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508233604051602001611c5191906142e8565b60405160208183030381529060405280519060200120613115565b611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca29061457f565b60405180910390fd5b60026008541415611cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce89061473f565b60405180910390fd5b6002600881905550601160029054906101000a900460ff16611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f906144bf565b60405180910390fd5b600086118015611d5a5750600d548611155b611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d90906144ff565b60405180910390fd5b600b5486600a54611daa9190614879565b1115611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de29061441f565b60405180910390fd5b600e5486611df99190614900565b3414611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e319061461f565b60405180910390fd5b60001515611e473361143d565b151514611e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e809061443f565b60405180910390fd5b60005b86811015611f3257611ec7611e9f612ca6565b600a6000815480929190611eb290614ab1565b919050556001611ec29190614879565b61312c565b6001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f2a90614ab1565b915050611e8c565b506001600881905550505050505050565b606060018054611f5290614a4e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7e90614a4e565b8015611fcb5780601f10611fa057610100808354040283529160200191611fcb565b820191906000526020600020905b815481529060010190602001808311611fae57829003601f168201915b5050505050905090565b601160009054906101000a900460ff16612024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201b9061445f565b60405180910390fd5b6000811180156120365750600d548111155b612075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206c906144ff565b60405180910390fd5b600b5481600a546120869190614879565b11156120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be9061441f565b60405180910390fd5b600f54816120d59190614900565b3414612116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210d9061475f565b60405180910390fd5b600015156121233361143d565b151514612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215c9061443f565b60405180910390fd5b60005b8181101561220e576121a361217b612ca6565b600a600081548092919061218e90614ab1565b91905055600161219e9190614879565b61312c565b6001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061220690614ab1565b915050612168565b5050565b601160029054906101000a900460ff1681565b61222d612ca6565b73ffffffffffffffffffffffffffffffffffffffff1661224b611b32565b73ffffffffffffffffffffffffffffffffffffffff16146122a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122989061467f565b60405180910390fd5b80600f8190555050565b6122b3612ca6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612321576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123189061453f565b60405180910390fd5b806005600061232e612ca6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166123db612ca6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161242091906143c7565b60405180910390a35050565b612434612ca6565b73ffffffffffffffffffffffffffffffffffffffff16612452611b32565b73ffffffffffffffffffffffffffffffffffffffff16146124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f9061467f565b60405180910390fd5b6001601560006101000a81548160ff021916908315150217905550565b60145481565b6124d3612ca6565b73ffffffffffffffffffffffffffffffffffffffff166124f1611b32565b73ffffffffffffffffffffffffffffffffffffffff1614612547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253e9061467f565b60405180910390fd5b8060148190555050565b600b5481565b61255f612ca6565b73ffffffffffffffffffffffffffffffffffffffff1661257d611b32565b73ffffffffffffffffffffffffffffffffffffffff16146125d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ca9061467f565b60405180910390fd5b80601690805190602001906125e99291906137ab565b5050565b601160009054906101000a900460ff1681565b61261161260b612ca6565b83612ddb565b612650576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612647906146ff565b60405180910390fd5b61265c848484846132fa565b50505050565b61266a612ca6565b73ffffffffffffffffffffffffffffffffffffffff16612688611b32565b73ffffffffffffffffffffffffffffffffffffffff16146126de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d59061467f565b60405180910390fd5b80600e8190555050565b6126f0612ca6565b73ffffffffffffffffffffffffffffffffffffffff1661270e611b32565b73ffffffffffffffffffffffffffffffffffffffff1614612764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275b9061467f565b60405180910390fd5b600c54600b546127749190614879565b81600a546127829190614879565b11156127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba9061441f565b60405180910390fd5b60005b81811015612814576128016127d9612ca6565b600a60008154809291906127ec90614ab1565b9190505560016127fc9190614879565b61312c565b808061280c90614ab1565b9150506127c6565b5050565b606061282382612c3a565b612862576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612859906146bf565b60405180910390fd5b60001515601560009054906101000a900460ff1615151415612910576016805461288b90614a4e565b80601f01602080910402602001604051908101604052809291908181526020018280546128b790614a4e565b80156129045780601f106128d957610100808354040283529160200191612904565b820191906000526020600020905b8154815290600101906020018083116128e757829003601f168201915b5050505050905061296c565b600061291a613356565b9050600081511161293a5760405180602001604052806000815250612968565b80612944846133e8565b60176040516020016129589392919061432f565b6040516020818303038152906040525b9150505b919050565b600e5481565b600f5481565b601160019054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612a2c612ca6565b73ffffffffffffffffffffffffffffffffffffffff16612a4a611b32565b73ffffffffffffffffffffffffffffffffffffffff1614612aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a979061467f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b079061449f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612d2183611752565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612d7082612c3a565b612daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da6906145ff565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190612dd69291906137ab565b505050565b6000612de682612c3a565b612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c9061455f565b60405180910390fd5b6000612e3083611752565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612e9f57508373ffffffffffffffffffffffffffffffffffffffff16612e8784610cab565b73ffffffffffffffffffffffffffffffffffffffff16145b80612eb05750612eaf8185612990565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612ed982611752565b73ffffffffffffffffffffffffffffffffffffffff1614612f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f269061469f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f969061451f565b60405180910390fd5b612faa838383613549565b612fb5600082612cae565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613005919061495a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461305c9190614879565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600082613122858461354e565b1490509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561319c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131939061463f565b60405180910390fd5b6131a581612c3a565b156131e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dc906144df565b60405180910390fd5b6131f160008383613549565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132419190614879565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b613305848484612eb9565b61331184848484613601565b613350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133479061447f565b60405180910390fd5b50505050565b60606010805461336590614a4e565b80601f016020809104026020016040519081016040528092919081815260200182805461339190614a4e565b80156133de5780601f106133b3576101008083540402835291602001916133de565b820191906000526020600020905b8154815290600101906020018083116133c157829003601f168201915b5050505050905090565b60606000821415613430576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613544565b600082905060005b6000821461346257808061344b90614ab1565b915050600a8261345b91906148cf565b9150613438565b60008167ffffffffffffffff81111561347e5761347d614c15565b5b6040519080825280601f01601f1916602001820160405280156134b05781602001600182028036833780820191505090505b5090505b6000851461353d576001826134c9919061495a565b9150600a856134d89190614b28565b60306134e49190614879565b60f81b8183815181106134fa576134f9614be6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561353691906148cf565b94506134b4565b8093505050505b919050565b505050565b60008082905060005b84518110156135f657600085828151811061357557613574614be6565b5b602002602001015190508083116135b6578281604051602001613599929190614303565b6040516020818303038152906040528051906020012092506135e2565b80836040516020016135c9929190614303565b6040516020818303038152906040528051906020012092505b5080806135ee90614ab1565b915050613557565b508091505092915050565b60006136228473ffffffffffffffffffffffffffffffffffffffff16613798565b1561378b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261364b612ca6565b8786866040518563ffffffff1660e01b815260040161366d949392919061437b565b602060405180830381600087803b15801561368757600080fd5b505af19250505080156136b857506040513d601f19601f820116820180604052508101906136b59190613c4c565b60015b61373b573d80600081146136e8576040519150601f19603f3d011682016040523d82523d6000602084013e6136ed565b606091505b50600081511415613733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372a9061447f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613790565b600190505b949350505050565b600080823b905060008111915050919050565b8280546137b790614a4e565b90600052602060002090601f0160209004810192826137d95760008555613820565b82601f106137f257805160ff1916838001178555613820565b82800160010185558215613820579182015b8281111561381f578251825591602001919060010190613804565b5b50905061382d9190613831565b5090565b5b8082111561384a576000816000905550600101613832565b5090565b600061386161385c846147bf565b61479a565b90508281526020810184848401111561387d5761387c614c53565b5b613888848285614a0c565b509392505050565b60006138a361389e846147f0565b61479a565b9050828152602081018484840111156138bf576138be614c53565b5b6138ca848285614a0c565b509392505050565b6000813590506138e1816152e7565b92915050565b60008083601f8401126138fd576138fc614c49565b5b8235905067ffffffffffffffff81111561391a57613919614c44565b5b60208301915083602082028301111561393657613935614c4e565b5b9250929050565b60008135905061394c816152fe565b92915050565b60008135905061396181615315565b92915050565b6000813590506139768161532c565b92915050565b60008151905061398b8161532c565b92915050565b600082601f8301126139a6576139a5614c49565b5b81356139b684826020860161384e565b91505092915050565b600082601f8301126139d4576139d3614c49565b5b81356139e4848260208601613890565b91505092915050565b6000813590506139fc81615343565b92915050565b600060208284031215613a1857613a17614c5d565b5b6000613a26848285016138d2565b91505092915050565b60008060408385031215613a4657613a45614c5d565b5b6000613a54858286016138d2565b9250506020613a65858286016138d2565b9150509250929050565b600080600060608486031215613a8857613a87614c5d565b5b6000613a96868287016138d2565b9350506020613aa7868287016138d2565b9250506040613ab8868287016139ed565b9150509250925092565b60008060008060808587031215613adc57613adb614c5d565b5b6000613aea878288016138d2565b9450506020613afb878288016138d2565b9350506040613b0c878288016139ed565b925050606085013567ffffffffffffffff811115613b2d57613b2c614c58565b5b613b3987828801613991565b91505092959194509250565b60008060408385031215613b5c57613b5b614c5d565b5b6000613b6a858286016138d2565b9250506020613b7b8582860161393d565b9150509250929050565b60008060408385031215613b9c57613b9b614c5d565b5b6000613baa858286016138d2565b9250506020613bbb858286016139ed565b9150509250929050565b600060208284031215613bdb57613bda614c5d565b5b6000613be98482850161393d565b91505092915050565b600060208284031215613c0857613c07614c5d565b5b6000613c1684828501613952565b91505092915050565b600060208284031215613c3557613c34614c5d565b5b6000613c4384828501613967565b91505092915050565b600060208284031215613c6257613c61614c5d565b5b6000613c708482850161397c565b91505092915050565b600060208284031215613c8f57613c8e614c5d565b5b600082013567ffffffffffffffff811115613cad57613cac614c58565b5b613cb9848285016139bf565b91505092915050565b600060208284031215613cd857613cd7614c5d565b5b6000613ce6848285016139ed565b91505092915050565b600080600060408486031215613d0857613d07614c5d565b5b6000613d16868287016139ed565b935050602084013567ffffffffffffffff811115613d3757613d36614c58565b5b613d43868287016138e7565b92509250509250925092565b60008060408385031215613d6657613d65614c5d565b5b6000613d74858286016139ed565b925050602083013567ffffffffffffffff811115613d9557613d94614c58565b5b613da1858286016139bf565b9150509250929050565b613db48161498e565b82525050565b613dcb613dc68261498e565b614afa565b82525050565b613dda816149a0565b82525050565b613de9816149ac565b82525050565b613e00613dfb826149ac565b614b0c565b82525050565b6000613e1182614836565b613e1b818561484c565b9350613e2b818560208601614a1b565b613e3481614c62565b840191505092915050565b6000613e4a82614841565b613e54818561485d565b9350613e64818560208601614a1b565b613e6d81614c62565b840191505092915050565b6000613e8382614841565b613e8d818561486e565b9350613e9d818560208601614a1b565b80840191505092915050565b60008154613eb681614a4e565b613ec0818661486e565b94506001821660008114613edb5760018114613eec57613f1f565b60ff19831686528186019350613f1f565b613ef585614821565b60005b83811015613f1757815481890152600182019150602081019050613ef8565b838801955050505b50505092915050565b6000613f3560088361485d565b9150613f4082614c80565b602082019050919050565b6000613f5860138361485d565b9150613f6382614ca9565b602082019050919050565b6000613f7b600b8361485d565b9150613f8682614cd2565b602082019050919050565b6000613f9e60328361485d565b9150613fa982614cfb565b604082019050919050565b6000613fc160268361485d565b9150613fcc82614d4a565b604082019050919050565b6000613fe4601e8361485d565b9150613fef82614d99565b602082019050919050565b6000614007601c8361485d565b915061401282614dc2565b602082019050919050565b600061402a60118361485d565b915061403582614deb565b602082019050919050565b600061404d60248361485d565b915061405882614e14565b604082019050919050565b600061407060198361485d565b915061407b82614e63565b602082019050919050565b6000614093602c8361485d565b915061409e82614e8c565b604082019050919050565b60006140b6601e8361485d565b91506140c182614edb565b602082019050919050565b60006140d960388361485d565b91506140e482614f04565b604082019050919050565b60006140fc602a8361485d565b915061410782614f53565b604082019050919050565b600061411f60298361485d565b915061412a82614fa2565b604082019050919050565b6000614142602e8361485d565b915061414d82614ff1565b604082019050919050565b6000614165601c8361485d565b915061417082615040565b602082019050919050565b600061418860208361485d565b915061419382615069565b602082019050919050565b60006141ab602c8361485d565b91506141b682615092565b604082019050919050565b60006141ce60208361485d565b91506141d9826150e1565b602082019050919050565b60006141f160298361485d565b91506141fc8261510a565b604082019050919050565b6000614214602f8361485d565b915061421f82615159565b604082019050919050565b600061423760218361485d565b9150614242826151a8565b604082019050919050565b600061425a60318361485d565b9150614265826151f7565b604082019050919050565b600061427d60308361485d565b915061428882615246565b604082019050919050565b60006142a0601f8361485d565b91506142ab82615295565b602082019050919050565b60006142c3600b8361485d565b91506142ce826152be565b602082019050919050565b6142e281614a02565b82525050565b60006142f48284613dba565b60148201915081905092915050565b600061430f8285613def565b60208201915061431f8284613def565b6020820191508190509392505050565b600061433b8286613e78565b91506143478285613e78565b91506143538284613ea9565b9150819050949350505050565b60006020820190506143756000830184613dab565b92915050565b60006080820190506143906000830187613dab565b61439d6020830186613dab565b6143aa60408301856142d9565b81810360608301526143bc8184613e06565b905095945050505050565b60006020820190506143dc6000830184613dd1565b92915050565b60006020820190506143f76000830184613de0565b92915050565b600060208201905081810360008301526144178184613e3f565b905092915050565b6000602082019050818103600083015261443881613f28565b9050919050565b6000602082019050818103600083015261445881613f4b565b9050919050565b6000602082019050818103600083015261447881613f6e565b9050919050565b6000602082019050818103600083015261449881613f91565b9050919050565b600060208201905081810360008301526144b881613fb4565b9050919050565b600060208201905081810360008301526144d881613fd7565b9050919050565b600060208201905081810360008301526144f881613ffa565b9050919050565b600060208201905081810360008301526145188161401d565b9050919050565b6000602082019050818103600083015261453881614040565b9050919050565b6000602082019050818103600083015261455881614063565b9050919050565b6000602082019050818103600083015261457881614086565b9050919050565b60006020820190508181036000830152614598816140a9565b9050919050565b600060208201905081810360008301526145b8816140cc565b9050919050565b600060208201905081810360008301526145d8816140ef565b9050919050565b600060208201905081810360008301526145f881614112565b9050919050565b6000602082019050818103600083015261461881614135565b9050919050565b6000602082019050818103600083015261463881614158565b9050919050565b600060208201905081810360008301526146588161417b565b9050919050565b600060208201905081810360008301526146788161419e565b9050919050565b60006020820190508181036000830152614698816141c1565b9050919050565b600060208201905081810360008301526146b8816141e4565b9050919050565b600060208201905081810360008301526146d881614207565b9050919050565b600060208201905081810360008301526146f88161422a565b9050919050565b600060208201905081810360008301526147188161424d565b9050919050565b6000602082019050818103600083015261473881614270565b9050919050565b6000602082019050818103600083015261475881614293565b9050919050565b60006020820190508181036000830152614778816142b6565b9050919050565b600060208201905061479460008301846142d9565b92915050565b60006147a46147b5565b90506147b08282614a80565b919050565b6000604051905090565b600067ffffffffffffffff8211156147da576147d9614c15565b5b6147e382614c62565b9050602081019050919050565b600067ffffffffffffffff82111561480b5761480a614c15565b5b61481482614c62565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061488482614a02565b915061488f83614a02565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148c4576148c3614b59565b5b828201905092915050565b60006148da82614a02565b91506148e583614a02565b9250826148f5576148f4614b88565b5b828204905092915050565b600061490b82614a02565b915061491683614a02565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561494f5761494e614b59565b5b828202905092915050565b600061496582614a02565b915061497083614a02565b92508282101561498357614982614b59565b5b828203905092915050565b6000614999826149e2565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a39578082015181840152602081019050614a1e565b83811115614a48576000848401525b50505050565b60006002820490506001821680614a6657607f821691505b60208210811415614a7a57614a79614bb7565b5b50919050565b614a8982614c62565b810181811067ffffffffffffffff82111715614aa857614aa7614c15565b5b80604052505050565b6000614abc82614a02565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614aef57614aee614b59565b5b600182019050919050565b6000614b0582614b16565b9050919050565b6000819050919050565b6000614b2182614c73565b9050919050565b6000614b3382614a02565b9150614b3e83614a02565b925082614b4e57614b4d614b88565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f746f6f206d756368000000000000000000000000000000000000000000000000600082015250565b7f596f7520616c7265616479206d696e7465642100000000000000000000000000600082015250565b7f4e6f742073746172746564000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374206d696e7420686173206e6f7420737461727465640000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d696e742077726f6e67206e756d626572000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4164647265737320646f6573206e6f7420657869737420696e206c6973740000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f496e636f7272656374207472616e73616374696f6e2076616c75652e00000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e742077696c6c2065786365656420746f74616c20636f60008201527f6c6c656374696f6e20616d6f756e742e00000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f76616c7565206572726f72000000000000000000000000000000000000000000600082015250565b6152f08161498e565b81146152fb57600080fd5b50565b615307816149a0565b811461531257600080fd5b50565b61531e816149ac565b811461532957600080fd5b50565b615335816149b6565b811461534057600080fd5b50565b61534c81614a02565b811461535757600080fd5b5056fea26469706673582212203266c0dafccf911d7006908d3f338b58a2aab1a763a1063db6baabe693d147c264736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000224a6f75726e657920746f20746865204d6574617665727365202d2047656e6573697300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044a54544d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102c95760003560e01c8063715018a611610175578063a69027d9116100dc578063c1f2612311610095578063db72a7591161006f578063db72a75914610a7b578063e5628d7014610aa6578063e985e9c514610ad1578063f2fde38b14610b0e576102c9565b8063c1f26123146109ea578063c87b56dd14610a13578063ce6d65c914610a50576102c9565b8063a69027d9146108f0578063a779a52114610919578063aa08f39614610944578063aad460dd1461096d578063b88d4fde14610998578063c1325508146109c1576102c9565b8063976418391161012e57806397641839146108155780639a5c57d6146108315780639d7e8d5f1461085c578063a22cb46514610885578063a475b5dd146108ae578063a4e6c98a146108c5576102c9565b8063715018a61461073857806383df8d8d1461074f5780638da5cb5b1461077a578063917bb57f146107a55780639394cb60146107ce57806395d89b41146107ea576102c9565b80633597d3e21161023457806355f804b3116101ed57806367765b87116101c757806367765b871461067c5780636c0360eb146106a757806370355472146106d257806370a08231146106fb576102c9565b806355f804b3146105eb5780636352211e146106145780636484fdff14610651576102c9565b80633597d3e2146104dd5780633c49a8a91461051a5780633ccfd60b1461054357806342842e0e1461055a578063435a59a41461058357806351830227146105c0576102c9565b8063130255071161028657806313025507146103f0578063162094c41461041b57806318160ddd1461044457806323b872dd1461046f57806325c2c020146104985780632932d1b1146104c1576102c9565b806301ffc9a7146102ce57806306fdde031461030b578063081812fc14610336578063081c8c4414610373578063095ea7b31461039e5780630a84c571146103c7575b600080fd5b3480156102da57600080fd5b506102f560048036038101906102f09190613c1f565b610b37565b60405161030291906143c7565b60405180910390f35b34801561031757600080fd5b50610320610c19565b60405161032d91906143fd565b60405180910390f35b34801561034257600080fd5b5061035d60048036038101906103589190613cc2565b610cab565b60405161036a9190614360565b60405180910390f35b34801561037f57600080fd5b50610388610d30565b60405161039591906143fd565b60405180910390f35b3480156103aa57600080fd5b506103c560048036038101906103c09190613b85565b610dbe565b005b3480156103d357600080fd5b506103ee60048036038101906103e99190613bc5565b610ed6565b005b3480156103fc57600080fd5b50610405610f6f565b604051610412919061477f565b60405180910390f35b34801561042757600080fd5b50610442600480360381019061043d9190613d4f565b610f75565b005b34801561045057600080fd5b50610459610fff565b604051610466919061477f565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613a6f565b611009565b005b3480156104a457600080fd5b506104bf60048036038101906104ba9190613bf2565b611069565b005b6104db60048036038101906104d69190613cef565b6110ef565b005b3480156104e957600080fd5b5061050460048036038101906104ff9190613a02565b61143d565b60405161051191906143c7565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c9190613a02565b611493565b005b34801561054f57600080fd5b5061055861159e565b005b34801561056657600080fd5b50610581600480360381019061057c9190613a6f565b611669565b005b34801561058f57600080fd5b506105aa60048036038101906105a59190613a02565b611689565b6040516105b791906143c7565b60405180910390f35b3480156105cc57600080fd5b506105d56116a9565b6040516105e291906143c7565b60405180910390f35b3480156105f757600080fd5b50610612600480360381019061060d9190613c79565b6116bc565b005b34801561062057600080fd5b5061063b60048036038101906106369190613cc2565b611752565b6040516106489190614360565b60405180910390f35b34801561065d57600080fd5b50610666611804565b604051610673919061477f565b60405180910390f35b34801561068857600080fd5b5061069161180a565b60405161069e919061477f565b60405180910390f35b3480156106b357600080fd5b506106bc611810565b6040516106c991906143fd565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f49190613bc5565b61189e565b005b34801561070757600080fd5b50610722600480360381019061071d9190613a02565b611937565b60405161072f919061477f565b60405180910390f35b34801561074457600080fd5b5061074d6119ef565b005b34801561075b57600080fd5b50610764611b2c565b60405161077191906143e2565b60405180910390f35b34801561078657600080fd5b5061078f611b32565b60405161079c9190614360565b60405180910390f35b3480156107b157600080fd5b506107cc60048036038101906107c79190613bc5565b611b5c565b005b6107e860048036038101906107e39190613cef565b611bf5565b005b3480156107f657600080fd5b506107ff611f43565b60405161080c91906143fd565b60405180910390f35b61082f600480360381019061082a9190613cc2565b611fd5565b005b34801561083d57600080fd5b50610846612212565b60405161085391906143c7565b60405180910390f35b34801561086857600080fd5b50610883600480360381019061087e9190613cc2565b612225565b005b34801561089157600080fd5b506108ac60048036038101906108a79190613b45565b6122ab565b005b3480156108ba57600080fd5b506108c361242c565b005b3480156108d157600080fd5b506108da6124c5565b6040516108e791906143e2565b60405180910390f35b3480156108fc57600080fd5b5061091760048036038101906109129190613bf2565b6124cb565b005b34801561092557600080fd5b5061092e612551565b60405161093b919061477f565b60405180910390f35b34801561095057600080fd5b5061096b60048036038101906109669190613c79565b612557565b005b34801561097957600080fd5b506109826125ed565b60405161098f91906143c7565b60405180910390f35b3480156109a457600080fd5b506109bf60048036038101906109ba9190613ac2565b612600565b005b3480156109cd57600080fd5b506109e860048036038101906109e39190613cc2565b612662565b005b3480156109f657600080fd5b50610a116004803603810190610a0c9190613cc2565b6126e8565b005b348015610a1f57600080fd5b50610a3a6004803603810190610a359190613cc2565b612818565b604051610a4791906143fd565b60405180910390f35b348015610a5c57600080fd5b50610a65612971565b604051610a72919061477f565b60405180910390f35b348015610a8757600080fd5b50610a90612977565b604051610a9d919061477f565b60405180910390f35b348015610ab257600080fd5b50610abb61297d565b604051610ac891906143c7565b60405180910390f35b348015610add57600080fd5b50610af86004803603810190610af39190613a2f565b612990565b604051610b0591906143c7565b60405180910390f35b348015610b1a57600080fd5b50610b356004803603810190610b309190613a02565b612a24565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c0257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c125750610c1182612bd0565b5b9050919050565b606060008054610c2890614a4e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5490614a4e565b8015610ca15780601f10610c7657610100808354040283529160200191610ca1565b820191906000526020600020905b815481529060010190602001808311610c8457829003601f168201915b5050505050905090565b6000610cb682612c3a565b610cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cec9061465f565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60168054610d3d90614a4e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6990614a4e565b8015610db65780601f10610d8b57610100808354040283529160200191610db6565b820191906000526020600020905b815481529060010190602001808311610d9957829003601f168201915b505050505081565b6000610dc982611752565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e31906146df565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e59612ca6565b73ffffffffffffffffffffffffffffffffffffffff161480610e885750610e8781610e82612ca6565b612990565b5b610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe9061459f565b60405180910390fd5b610ed18383612cae565b505050565b610ede612ca6565b73ffffffffffffffffffffffffffffffffffffffff16610efc611b32565b73ffffffffffffffffffffffffffffffffffffffff1614610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f499061467f565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b600c5481565b610f7d612ca6565b73ffffffffffffffffffffffffffffffffffffffff16610f9b611b32565b73ffffffffffffffffffffffffffffffffffffffff1614610ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe89061467f565b60405180910390fd5b610ffb8282612d67565b5050565b6000600a54905090565b61101a611014612ca6565b82612ddb565b611059576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611050906146ff565b60405180910390fd5b611064838383612eb9565b505050565b611071612ca6565b73ffffffffffffffffffffffffffffffffffffffff1661108f611b32565b73ffffffffffffffffffffffffffffffffffffffff16146110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc9061467f565b60405180910390fd5b8060138190555050565b8181601354611166838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050823360405160200161114b91906142e8565b60405160208183030381529060405280519060200120613115565b6111a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119c9061457f565b60405180910390fd5b600260085414156111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e29061473f565b60405180910390fd5b6002600881905550601160019054906101000a900460ff16611242576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611239906144bf565b60405180910390fd5b6000861180156112545750600d548611155b611293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128a906144ff565b60405180910390fd5b600b5486600a546112a49190614879565b11156112e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dc9061441f565b60405180910390fd5b600e54866112f39190614900565b3414611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b9061461f565b60405180910390fd5b600015156113413361143d565b151514611383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137a9061443f565b60405180910390fd5b60005b8681101561142c576113c1611399612ca6565b600a60008154809291906113ac90614ab1565b9190505560016113bc9190614879565b61312c565b6001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061142490614ab1565b915050611386565b506001600881905550505050505050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61149b612ca6565b73ffffffffffffffffffffffffffffffffffffffff166114b9611b32565b73ffffffffffffffffffffffffffffffffffffffff161461150f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115069061467f565b60405180910390fd5b600c54600b5461151f9190614879565b6001600a5461152e9190614879565b111561156f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115669061471f565b60405180910390fd5b61159b81600a600081548092919061158690614ab1565b9190505560016115969190614879565b61312c565b50565b6115a6612ca6565b73ffffffffffffffffffffffffffffffffffffffff166115c4611b32565b73ffffffffffffffffffffffffffffffffffffffff161461161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116119061467f565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611665573d6000803e3d6000fd5b5050565b61168483838360405180602001604052806000815250612600565b505050565b60096020528060005260406000206000915054906101000a900460ff1681565b601560009054906101000a900460ff1681565b6116c4612ca6565b73ffffffffffffffffffffffffffffffffffffffff166116e2611b32565b73ffffffffffffffffffffffffffffffffffffffff1614611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f9061467f565b60405180910390fd5b806010908051906020019061174e9291906137ab565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f2906145df565b60405180910390fd5b80915050919050565b600a5481565b600d5481565b6010805461181d90614a4e565b80601f016020809104026020016040519081016040528092919081815260200182805461184990614a4e565b80156118965780601f1061186b57610100808354040283529160200191611896565b820191906000526020600020905b81548152906001019060200180831161187957829003601f168201915b505050505081565b6118a6612ca6565b73ffffffffffffffffffffffffffffffffffffffff166118c4611b32565b73ffffffffffffffffffffffffffffffffffffffff161461191a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119119061467f565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199f906145bf565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119f7612ca6565b73ffffffffffffffffffffffffffffffffffffffff16611a15611b32565b73ffffffffffffffffffffffffffffffffffffffff1614611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a629061467f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60135481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b64612ca6565b73ffffffffffffffffffffffffffffffffffffffff16611b82611b32565b73ffffffffffffffffffffffffffffffffffffffff1614611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf9061467f565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b8181601454611c6c838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508233604051602001611c5191906142e8565b60405160208183030381529060405280519060200120613115565b611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca29061457f565b60405180910390fd5b60026008541415611cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce89061473f565b60405180910390fd5b6002600881905550601160029054906101000a900460ff16611d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3f906144bf565b60405180910390fd5b600086118015611d5a5750600d548611155b611d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d90906144ff565b60405180910390fd5b600b5486600a54611daa9190614879565b1115611deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de29061441f565b60405180910390fd5b600e5486611df99190614900565b3414611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e319061461f565b60405180910390fd5b60001515611e473361143d565b151514611e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e809061443f565b60405180910390fd5b60005b86811015611f3257611ec7611e9f612ca6565b600a6000815480929190611eb290614ab1565b919050556001611ec29190614879565b61312c565b6001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611f2a90614ab1565b915050611e8c565b506001600881905550505050505050565b606060018054611f5290614a4e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7e90614a4e565b8015611fcb5780601f10611fa057610100808354040283529160200191611fcb565b820191906000526020600020905b815481529060010190602001808311611fae57829003601f168201915b5050505050905090565b601160009054906101000a900460ff16612024576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201b9061445f565b60405180910390fd5b6000811180156120365750600d548111155b612075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206c906144ff565b60405180910390fd5b600b5481600a546120869190614879565b11156120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be9061441f565b60405180910390fd5b600f54816120d59190614900565b3414612116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210d9061475f565b60405180910390fd5b600015156121233361143d565b151514612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215c9061443f565b60405180910390fd5b60005b8181101561220e576121a361217b612ca6565b600a600081548092919061218e90614ab1565b91905055600161219e9190614879565b61312c565b6001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061220690614ab1565b915050612168565b5050565b601160029054906101000a900460ff1681565b61222d612ca6565b73ffffffffffffffffffffffffffffffffffffffff1661224b611b32565b73ffffffffffffffffffffffffffffffffffffffff16146122a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122989061467f565b60405180910390fd5b80600f8190555050565b6122b3612ca6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612321576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123189061453f565b60405180910390fd5b806005600061232e612ca6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166123db612ca6565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161242091906143c7565b60405180910390a35050565b612434612ca6565b73ffffffffffffffffffffffffffffffffffffffff16612452611b32565b73ffffffffffffffffffffffffffffffffffffffff16146124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f9061467f565b60405180910390fd5b6001601560006101000a81548160ff021916908315150217905550565b60145481565b6124d3612ca6565b73ffffffffffffffffffffffffffffffffffffffff166124f1611b32565b73ffffffffffffffffffffffffffffffffffffffff1614612547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253e9061467f565b60405180910390fd5b8060148190555050565b600b5481565b61255f612ca6565b73ffffffffffffffffffffffffffffffffffffffff1661257d611b32565b73ffffffffffffffffffffffffffffffffffffffff16146125d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ca9061467f565b60405180910390fd5b80601690805190602001906125e99291906137ab565b5050565b601160009054906101000a900460ff1681565b61261161260b612ca6565b83612ddb565b612650576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612647906146ff565b60405180910390fd5b61265c848484846132fa565b50505050565b61266a612ca6565b73ffffffffffffffffffffffffffffffffffffffff16612688611b32565b73ffffffffffffffffffffffffffffffffffffffff16146126de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d59061467f565b60405180910390fd5b80600e8190555050565b6126f0612ca6565b73ffffffffffffffffffffffffffffffffffffffff1661270e611b32565b73ffffffffffffffffffffffffffffffffffffffff1614612764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275b9061467f565b60405180910390fd5b600c54600b546127749190614879565b81600a546127829190614879565b11156127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba9061441f565b60405180910390fd5b60005b81811015612814576128016127d9612ca6565b600a60008154809291906127ec90614ab1565b9190505560016127fc9190614879565b61312c565b808061280c90614ab1565b9150506127c6565b5050565b606061282382612c3a565b612862576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612859906146bf565b60405180910390fd5b60001515601560009054906101000a900460ff1615151415612910576016805461288b90614a4e565b80601f01602080910402602001604051908101604052809291908181526020018280546128b790614a4e565b80156129045780601f106128d957610100808354040283529160200191612904565b820191906000526020600020905b8154815290600101906020018083116128e757829003601f168201915b5050505050905061296c565b600061291a613356565b9050600081511161293a5760405180602001604052806000815250612968565b80612944846133e8565b60176040516020016129589392919061432f565b6040516020818303038152906040525b9150505b919050565b600e5481565b600f5481565b601160019054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612a2c612ca6565b73ffffffffffffffffffffffffffffffffffffffff16612a4a611b32565b73ffffffffffffffffffffffffffffffffffffffff1614612aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a979061467f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b079061449f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612d2183611752565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b612d7082612c3a565b612daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da6906145ff565b60405180910390fd5b80600660008481526020019081526020016000209080519060200190612dd69291906137ab565b505050565b6000612de682612c3a565b612e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1c9061455f565b60405180910390fd5b6000612e3083611752565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612e9f57508373ffffffffffffffffffffffffffffffffffffffff16612e8784610cab565b73ffffffffffffffffffffffffffffffffffffffff16145b80612eb05750612eaf8185612990565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612ed982611752565b73ffffffffffffffffffffffffffffffffffffffff1614612f2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f269061469f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f969061451f565b60405180910390fd5b612faa838383613549565b612fb5600082612cae565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613005919061495a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461305c9190614879565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600082613122858461354e565b1490509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561319c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131939061463f565b60405180910390fd5b6131a581612c3a565b156131e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131dc906144df565b60405180910390fd5b6131f160008383613549565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132419190614879565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b613305848484612eb9565b61331184848484613601565b613350576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133479061447f565b60405180910390fd5b50505050565b60606010805461336590614a4e565b80601f016020809104026020016040519081016040528092919081815260200182805461339190614a4e565b80156133de5780601f106133b3576101008083540402835291602001916133de565b820191906000526020600020905b8154815290600101906020018083116133c157829003601f168201915b5050505050905090565b60606000821415613430576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613544565b600082905060005b6000821461346257808061344b90614ab1565b915050600a8261345b91906148cf565b9150613438565b60008167ffffffffffffffff81111561347e5761347d614c15565b5b6040519080825280601f01601f1916602001820160405280156134b05781602001600182028036833780820191505090505b5090505b6000851461353d576001826134c9919061495a565b9150600a856134d89190614b28565b60306134e49190614879565b60f81b8183815181106134fa576134f9614be6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561353691906148cf565b94506134b4565b8093505050505b919050565b505050565b60008082905060005b84518110156135f657600085828151811061357557613574614be6565b5b602002602001015190508083116135b6578281604051602001613599929190614303565b6040516020818303038152906040528051906020012092506135e2565b80836040516020016135c9929190614303565b6040516020818303038152906040528051906020012092505b5080806135ee90614ab1565b915050613557565b508091505092915050565b60006136228473ffffffffffffffffffffffffffffffffffffffff16613798565b1561378b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261364b612ca6565b8786866040518563ffffffff1660e01b815260040161366d949392919061437b565b602060405180830381600087803b15801561368757600080fd5b505af19250505080156136b857506040513d601f19601f820116820180604052508101906136b59190613c4c565b60015b61373b573d80600081146136e8576040519150601f19603f3d011682016040523d82523d6000602084013e6136ed565b606091505b50600081511415613733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372a9061447f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613790565b600190505b949350505050565b600080823b905060008111915050919050565b8280546137b790614a4e565b90600052602060002090601f0160209004810192826137d95760008555613820565b82601f106137f257805160ff1916838001178555613820565b82800160010185558215613820579182015b8281111561381f578251825591602001919060010190613804565b5b50905061382d9190613831565b5090565b5b8082111561384a576000816000905550600101613832565b5090565b600061386161385c846147bf565b61479a565b90508281526020810184848401111561387d5761387c614c53565b5b613888848285614a0c565b509392505050565b60006138a361389e846147f0565b61479a565b9050828152602081018484840111156138bf576138be614c53565b5b6138ca848285614a0c565b509392505050565b6000813590506138e1816152e7565b92915050565b60008083601f8401126138fd576138fc614c49565b5b8235905067ffffffffffffffff81111561391a57613919614c44565b5b60208301915083602082028301111561393657613935614c4e565b5b9250929050565b60008135905061394c816152fe565b92915050565b60008135905061396181615315565b92915050565b6000813590506139768161532c565b92915050565b60008151905061398b8161532c565b92915050565b600082601f8301126139a6576139a5614c49565b5b81356139b684826020860161384e565b91505092915050565b600082601f8301126139d4576139d3614c49565b5b81356139e4848260208601613890565b91505092915050565b6000813590506139fc81615343565b92915050565b600060208284031215613a1857613a17614c5d565b5b6000613a26848285016138d2565b91505092915050565b60008060408385031215613a4657613a45614c5d565b5b6000613a54858286016138d2565b9250506020613a65858286016138d2565b9150509250929050565b600080600060608486031215613a8857613a87614c5d565b5b6000613a96868287016138d2565b9350506020613aa7868287016138d2565b9250506040613ab8868287016139ed565b9150509250925092565b60008060008060808587031215613adc57613adb614c5d565b5b6000613aea878288016138d2565b9450506020613afb878288016138d2565b9350506040613b0c878288016139ed565b925050606085013567ffffffffffffffff811115613b2d57613b2c614c58565b5b613b3987828801613991565b91505092959194509250565b60008060408385031215613b5c57613b5b614c5d565b5b6000613b6a858286016138d2565b9250506020613b7b8582860161393d565b9150509250929050565b60008060408385031215613b9c57613b9b614c5d565b5b6000613baa858286016138d2565b9250506020613bbb858286016139ed565b9150509250929050565b600060208284031215613bdb57613bda614c5d565b5b6000613be98482850161393d565b91505092915050565b600060208284031215613c0857613c07614c5d565b5b6000613c1684828501613952565b91505092915050565b600060208284031215613c3557613c34614c5d565b5b6000613c4384828501613967565b91505092915050565b600060208284031215613c6257613c61614c5d565b5b6000613c708482850161397c565b91505092915050565b600060208284031215613c8f57613c8e614c5d565b5b600082013567ffffffffffffffff811115613cad57613cac614c58565b5b613cb9848285016139bf565b91505092915050565b600060208284031215613cd857613cd7614c5d565b5b6000613ce6848285016139ed565b91505092915050565b600080600060408486031215613d0857613d07614c5d565b5b6000613d16868287016139ed565b935050602084013567ffffffffffffffff811115613d3757613d36614c58565b5b613d43868287016138e7565b92509250509250925092565b60008060408385031215613d6657613d65614c5d565b5b6000613d74858286016139ed565b925050602083013567ffffffffffffffff811115613d9557613d94614c58565b5b613da1858286016139bf565b9150509250929050565b613db48161498e565b82525050565b613dcb613dc68261498e565b614afa565b82525050565b613dda816149a0565b82525050565b613de9816149ac565b82525050565b613e00613dfb826149ac565b614b0c565b82525050565b6000613e1182614836565b613e1b818561484c565b9350613e2b818560208601614a1b565b613e3481614c62565b840191505092915050565b6000613e4a82614841565b613e54818561485d565b9350613e64818560208601614a1b565b613e6d81614c62565b840191505092915050565b6000613e8382614841565b613e8d818561486e565b9350613e9d818560208601614a1b565b80840191505092915050565b60008154613eb681614a4e565b613ec0818661486e565b94506001821660008114613edb5760018114613eec57613f1f565b60ff19831686528186019350613f1f565b613ef585614821565b60005b83811015613f1757815481890152600182019150602081019050613ef8565b838801955050505b50505092915050565b6000613f3560088361485d565b9150613f4082614c80565b602082019050919050565b6000613f5860138361485d565b9150613f6382614ca9565b602082019050919050565b6000613f7b600b8361485d565b9150613f8682614cd2565b602082019050919050565b6000613f9e60328361485d565b9150613fa982614cfb565b604082019050919050565b6000613fc160268361485d565b9150613fcc82614d4a565b604082019050919050565b6000613fe4601e8361485d565b9150613fef82614d99565b602082019050919050565b6000614007601c8361485d565b915061401282614dc2565b602082019050919050565b600061402a60118361485d565b915061403582614deb565b602082019050919050565b600061404d60248361485d565b915061405882614e14565b604082019050919050565b600061407060198361485d565b915061407b82614e63565b602082019050919050565b6000614093602c8361485d565b915061409e82614e8c565b604082019050919050565b60006140b6601e8361485d565b91506140c182614edb565b602082019050919050565b60006140d960388361485d565b91506140e482614f04565b604082019050919050565b60006140fc602a8361485d565b915061410782614f53565b604082019050919050565b600061411f60298361485d565b915061412a82614fa2565b604082019050919050565b6000614142602e8361485d565b915061414d82614ff1565b604082019050919050565b6000614165601c8361485d565b915061417082615040565b602082019050919050565b600061418860208361485d565b915061419382615069565b602082019050919050565b60006141ab602c8361485d565b91506141b682615092565b604082019050919050565b60006141ce60208361485d565b91506141d9826150e1565b602082019050919050565b60006141f160298361485d565b91506141fc8261510a565b604082019050919050565b6000614214602f8361485d565b915061421f82615159565b604082019050919050565b600061423760218361485d565b9150614242826151a8565b604082019050919050565b600061425a60318361485d565b9150614265826151f7565b604082019050919050565b600061427d60308361485d565b915061428882615246565b604082019050919050565b60006142a0601f8361485d565b91506142ab82615295565b602082019050919050565b60006142c3600b8361485d565b91506142ce826152be565b602082019050919050565b6142e281614a02565b82525050565b60006142f48284613dba565b60148201915081905092915050565b600061430f8285613def565b60208201915061431f8284613def565b6020820191508190509392505050565b600061433b8286613e78565b91506143478285613e78565b91506143538284613ea9565b9150819050949350505050565b60006020820190506143756000830184613dab565b92915050565b60006080820190506143906000830187613dab565b61439d6020830186613dab565b6143aa60408301856142d9565b81810360608301526143bc8184613e06565b905095945050505050565b60006020820190506143dc6000830184613dd1565b92915050565b60006020820190506143f76000830184613de0565b92915050565b600060208201905081810360008301526144178184613e3f565b905092915050565b6000602082019050818103600083015261443881613f28565b9050919050565b6000602082019050818103600083015261445881613f4b565b9050919050565b6000602082019050818103600083015261447881613f6e565b9050919050565b6000602082019050818103600083015261449881613f91565b9050919050565b600060208201905081810360008301526144b881613fb4565b9050919050565b600060208201905081810360008301526144d881613fd7565b9050919050565b600060208201905081810360008301526144f881613ffa565b9050919050565b600060208201905081810360008301526145188161401d565b9050919050565b6000602082019050818103600083015261453881614040565b9050919050565b6000602082019050818103600083015261455881614063565b9050919050565b6000602082019050818103600083015261457881614086565b9050919050565b60006020820190508181036000830152614598816140a9565b9050919050565b600060208201905081810360008301526145b8816140cc565b9050919050565b600060208201905081810360008301526145d8816140ef565b9050919050565b600060208201905081810360008301526145f881614112565b9050919050565b6000602082019050818103600083015261461881614135565b9050919050565b6000602082019050818103600083015261463881614158565b9050919050565b600060208201905081810360008301526146588161417b565b9050919050565b600060208201905081810360008301526146788161419e565b9050919050565b60006020820190508181036000830152614698816141c1565b9050919050565b600060208201905081810360008301526146b8816141e4565b9050919050565b600060208201905081810360008301526146d881614207565b9050919050565b600060208201905081810360008301526146f88161422a565b9050919050565b600060208201905081810360008301526147188161424d565b9050919050565b6000602082019050818103600083015261473881614270565b9050919050565b6000602082019050818103600083015261475881614293565b9050919050565b60006020820190508181036000830152614778816142b6565b9050919050565b600060208201905061479460008301846142d9565b92915050565b60006147a46147b5565b90506147b08282614a80565b919050565b6000604051905090565b600067ffffffffffffffff8211156147da576147d9614c15565b5b6147e382614c62565b9050602081019050919050565b600067ffffffffffffffff82111561480b5761480a614c15565b5b61481482614c62565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061488482614a02565b915061488f83614a02565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148c4576148c3614b59565b5b828201905092915050565b60006148da82614a02565b91506148e583614a02565b9250826148f5576148f4614b88565b5b828204905092915050565b600061490b82614a02565b915061491683614a02565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561494f5761494e614b59565b5b828202905092915050565b600061496582614a02565b915061497083614a02565b92508282101561498357614982614b59565b5b828203905092915050565b6000614999826149e2565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a39578082015181840152602081019050614a1e565b83811115614a48576000848401525b50505050565b60006002820490506001821680614a6657607f821691505b60208210811415614a7a57614a79614bb7565b5b50919050565b614a8982614c62565b810181811067ffffffffffffffff82111715614aa857614aa7614c15565b5b80604052505050565b6000614abc82614a02565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614aef57614aee614b59565b5b600182019050919050565b6000614b0582614b16565b9050919050565b6000819050919050565b6000614b2182614c73565b9050919050565b6000614b3382614a02565b9150614b3e83614a02565b925082614b4e57614b4d614b88565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f746f6f206d756368000000000000000000000000000000000000000000000000600082015250565b7f596f7520616c7265616479206d696e7465642100000000000000000000000000600082015250565b7f4e6f742073746172746564000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374206d696e7420686173206e6f7420737461727465640000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d696e742077726f6e67206e756d626572000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4164647265737320646f6573206e6f7420657869737420696e206c6973740000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f496e636f7272656374207472616e73616374696f6e2076616c75652e00000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e742077696c6c2065786365656420746f74616c20636f60008201527f6c6c656374696f6e20616d6f756e742e00000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f76616c7565206572726f72000000000000000000000000000000000000000000600082015250565b6152f08161498e565b81146152fb57600080fd5b50565b615307816149a0565b811461531257600080fd5b50565b61531e816149ac565b811461532957600080fd5b50565b615335816149b6565b811461534057600080fd5b50565b61534c81614a02565b811461535757600080fd5b5056fea26469706673582212203266c0dafccf911d7006908d3f338b58a2aab1a763a1063db6baabe693d147c264736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000224a6f75726e657920746f20746865204d6574617665727365202d2047656e6573697300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044a54544d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Journey to the Metaverse - Genesis
Arg [1] : symbol_ (string): JTTM
Arg [2] : baseURI_ (string):

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000022
Arg [4] : 4a6f75726e657920746f20746865204d6574617665727365202d2047656e6573
Arg [5] : 6973000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4a54544d00000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

41776:6385:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25706:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26641:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28109:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42560:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27643:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44925:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42107:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44015:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43457:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29004:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47541:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45908:681;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47779:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47300:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48009:143;;;;;;;;;;;;;:::i;:::-;;29382:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41968:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42525:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43689:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26334:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42032:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42147:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42313:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45018:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26063:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41218:148;;;;;;;;;;;;;:::i;:::-;;42456:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40565:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44820:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46605:683;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26811:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45120:505;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42397:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43903:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28404:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44740:71;;;;;;;;;;;;;:::i;:::-;;42490:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47657:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42065:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44156:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42341:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29605:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43794:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45638:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44268:460;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42181:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42248:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42371:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28772:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41522:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25706:292;25808:4;25847:25;25832:40;;;:11;:40;;;;:105;;;;25904:33;25889:48;;;:11;:48;;;;25832:105;:158;;;;25954:36;25978:11;25954:23;:36::i;:::-;25832:158;25825:165;;25706:292;;;:::o;26641:100::-;26695:13;26728:5;26721:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26641:100;:::o;28109:222::-;28185:7;28213:16;28221:7;28213;:16::i;:::-;28205:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28299:15;:24;28315:7;28299:24;;;;;;;;;;;;;;;;;;;;;28292:31;;28109:222;;;:::o;42560:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27643:399::-;27724:13;27740:23;27755:7;27740:14;:23::i;:::-;27724:39;;27788:5;27782:11;;:2;:11;;;;27774:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27869:5;27853:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27878:37;27895:5;27902:12;:10;:12::i;:::-;27878:16;:37::i;:::-;27853:62;27845:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28013:21;28022:2;28026:7;28013:8;:21::i;:::-;27713:329;27643:399;;:::o;44925:85::-;40797:12;:10;:12::i;:::-;40786:23;;:7;:5;:7::i;:::-;:23;;;40778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44996:6:::1;44986:7;;:16;;;;;;;;;;;;;;;;;;44925:85:::0;:::o;42107:32::-;;;;:::o;44015:133::-;40797:12;:10;:12::i;:::-;40786:23;;:7;:5;:7::i;:::-;:23;;;40778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44107:33:::1;44120:8;44130:9;44107:12;:33::i;:::-;44015:133:::0;;:::o;43457:107::-;43509:7;43536:11;;43529:18;;43457:107;:::o;29004:306::-;29165:41;29184:12;:10;:12::i;:::-;29198:7;29165:18;:41::i;:::-;29157:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29274:28;29284:4;29290:2;29294:7;29274:9;:28::i;:::-;29004:306;;;:::o;47541:108::-;40797:12;:10;:12::i;:::-;40786:23;;:7;:5;:7::i;:::-;:23;;;40778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47631:10:::1;47616:12;:25;;;;47541:108:::0;:::o;45908:681::-;46041:11;;46054:12;;43226:144;43263:11;;43226:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43293:4;43343:10;43326:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;43316:39;;;;;;43226:18;:144::i;:::-;43204:224;;;;;;;;;;;;:::i;:::-;;;;;;;;;4186:1:::1;4784:7;;:19;;4776:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4186:1;4917:7;:18;;;;42838:7:::2;;;;;;;;;;;42830:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;46154:1:::3;46146:6;:9;:31;;;;;46169:8;;46159:6;:18;;46146:31;46138:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;46242:14;;46232:6;46218:11;;:20;;;;:::i;:::-;:38;;46210:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;46310:11;;46301:6;:20;;;;:::i;:::-;46288:9;:33;46280:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;46399:5;46373:31;;:22;46384:10;46373;:22::i;:::-;:31;;;46365:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;46443:9;46439:143;46459:6;46456:1;:9;46439:143;;;46486:38;46492:12;:10;:12::i;:::-;46510:11;;:13;;;;;;;;;:::i;:::-;;;;;46506:1;:17;;;;:::i;:::-;46486:5;:38::i;:::-;46565:4;46535:15;:27;46551:10;46535:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;46467:3;;;;;:::i;:::-;;;;46439:143;;;;4142:1:::1;5096:7;:22;;;;45908:681:::0;;;;;;:::o;47779:116::-;47838:4;47862:15;:25;47878:8;47862:25;;;;;;;;;;;;;;;;;;;;;;;;;47855:32;;47779:116;;;:::o;47300:230::-;40797:12;:10;:12::i;:::-;40786:23;;:7;:5;:7::i;:::-;:23;;;40778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47415:12:::1;;47398:14;;:29;;;;:::i;:::-;47393:1;47379:11;;:15;;;;:::i;:::-;:48;;47371:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;47491:31;47497:5;47508:11;;:13;;;;;;;;;:::i;:::-;;;;;47504:1;:17;;;;:::i;:::-;47491:5;:31::i;:::-;47300:230:::0;:::o;48009:143::-;40797:12;:10;:12::i;:::-;40786:23;;:7;:5;:7::i;:::-;:23;;;40778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48057:15:::1;48075:21;48057:39;;48115:10;48107:28;;:37;48136:7;48107:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;48046:106;48009:143::o:0;29382:151::-;29486:39;29503:4;29509:2;29513:7;29486:39;;;;;;;;;;;;:16;:39::i;:::-;29382:151;;;:::o;41968:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;42525:28::-;;;;;;;;;;;;;:::o;43689:96::-;40797:12;:10;:12::i;:::-;40786:23;;:7;:5;:7::i;:::-;:23;;;40778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43770:7:::1;43760;:17;;;;;;;;;;;;:::i;:::-;;43689:96:::0;:::o;26334:239::-;26406:7;26426:13;26442:7;:16;26450:7;26442:16;;;;;;;;;;;;;;;;;;;;;26426:32;;26494:1;26477:19;;:5;:19;;;;26469:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26560:5;26553:12;;;26334:239;;;:::o;42032:26::-;;;;:::o;42147:27::-;;;;:::o;42313:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45018:87::-;40797:12;:10;:12::i;:::-;40786:23;;:7;:5;:7::i;:::-;:23;;;40778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45091:6:::1;45080:8;;:17;;;;;;;;;;;;;;;;;;45018:87:::0;:::o;26063:208::-;26135:7;26180:1;26163:19;;:5;:19;;;;26155:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26247:9;:16;26257:5;26247:16;;;;;;;;;;;;;;;;26240:23;;26063:208;;;:::o;41218:148::-;40797:12;:10;:12::i;:::-;40786:23;;:7;:5;:7::i;:::-;:23;;;40778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41325:1:::1;41288:40;;41309:6;;;;;;;;;;;41288:40;;;;;;;;;;;;41356:1;41339:6;;:19;;;;;;;;;;;;;;;;;;41218:148::o:0;42456:27::-;;;;:::o;40565:87::-;40611:7;40638:6;;;;;;;;;;;40631:13;;40565:87;:::o;44820:93::-;40797:12;:10;:12::i;:::-;40786:23;;:7;:5;:7::i;:::-;:23;;;40778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44899:6:::1;44885:11;;:20;;;;;;;;;;;;;;;;;;44820:93:::0;:::o;46605:683::-;46739:11;;46752:13;;43226:144;43263:11;;43226:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43293:4;43343:10;43326:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;43316:39;;;;;;43226:18;:144::i;:::-;43204:224;;;;;;;;;;;;:::i;:::-;;;;;;;;;4186:1:::1;4784:7;;:19;;4776:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4186:1;4917:7;:18;;;;42950:8:::2;;;;;;;;;;;42942:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;46854:1:::3;46846:6;:9;:31;;;;;46869:8;;46859:6;:18;;46846:31;46838:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;46942:14;;46932:6;46918:11;;:20;;;;:::i;:::-;:38;;46910:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;47010:11;;47001:6;:20;;;;:::i;:::-;46988:9;:33;46980:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;47099:5;47073:31;;:22;47084:10;47073;:22::i;:::-;:31;;;47065:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;47143:9;47139:142;47159:6;47156:1;:9;47139:142;;;47186:38;47192:12;:10;:12::i;:::-;47210:11;;:13;;;;;;;;;:::i;:::-;;;;;47206:1;:17;;;;:::i;:::-;47186:5;:38::i;:::-;47265:4;47235:15;:27;47251:10;47235:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;47167:3;;;;;:::i;:::-;;;;47139:142;;;;4142:1:::1;5096:7;:22;;;;46605:683:::0;;;;;;:::o;26811:104::-;26867:13;26900:7;26893:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26811:104;:::o;45120:505::-;43064:11;;;;;;;;;;;43056:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;45210:1:::1;45202:6;:9;:31;;;;;45225:8;;45215:6;:18;;45202:31;45194:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;45298:14;;45288:6;45274:11;;:20;;;;:::i;:::-;:38;;45266:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;45366:9;;45357:6;:18;;;;:::i;:::-;45344:9;:31;45336:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45436:5;45410:31;;:22;45421:10;45410;:22::i;:::-;:31;;;45402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;45480:9;45476:142;45496:6;45493:1;:9;45476:142;;;45523:38;45529:12;:10;:12::i;:::-;45547:11;;:13;;;;;;;;;:::i;:::-;;;;;45543:1;:17;;;;:::i;:::-;45523:5;:38::i;:::-;45602:4;45572:15;:27;45588:10;45572:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;45504:3;;;;;:::i;:::-;;;;45476:142;;;;45120:505:::0;:::o;42397:20::-;;;;;;;;;;;;;:::o;43903:103::-;40797:12;:10;:12::i;:::-;40786:23;;:7;:5;:7::i;:::-;:23;;;40778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43989:9:::1;43977;:21;;;;43903:103:::0;:::o;28404:296::-;28519:12;:10;:12::i;:::-;28507:24;;:8;:24;;;;28499:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28620:8;28575:18;:32;28594:12;:10;:12::i;:::-;28575:32;;;;;;;;;;;;;;;:42;28608:8;28575:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28673:8;28644:48;;28659:12;:10;:12::i;:::-;28644:48;;;28683:8;28644:48;;;;;;:::i;:::-;;;;;;;;28404:296;;:::o;44740:71::-;40797:12;:10;:12::i;:::-;40786:23;;:7;:5;:7::i;:::-;:23;;;40778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44799:4:::1;44788:8;;:15;;;;;;;;;;;;;;;;;;44740:71::o:0;42490:28::-;;;;:::o;47657:114::-;40797:12;:10;:12::i;:::-;40786:23;;:7;:5;:7::i;:::-;:23;;;40778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47753:10:::1;47737:13;:26;;;;47657:114:::0;:::o;42065:35::-;;;;:::o;44156:104::-;40797:12;:10;:12::i;:::-;40786:23;;:7;:5;:7::i;:::-;:23;;;40778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44248:4:::1;44231:14;:21;;;;;;;;;;;;:::i;:::-;;44156:104:::0;:::o;42341:23::-;;;;;;;;;;;;;:::o;29605:285::-;29737:41;29756:12;:10;:12::i;:::-;29770:7;29737:18;:41::i;:::-;29729:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29843:39;29857:4;29863:2;29867:7;29876:5;29843:13;:39::i;:::-;29605:285;;;;:::o;43794:101::-;40797:12;:10;:12::i;:::-;40786:23;;:7;:5;:7::i;:::-;:23;;;40778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43878:9:::1;43864:11;:23;;;;43794:101:::0;:::o;45638:252::-;40797:12;:10;:12::i;:::-;40786:23;;:7;:5;:7::i;:::-;:23;;;40778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45750:12:::1;;45733:14;;:29;;;;:::i;:::-;45723:6;45709:11;;:20;;;;:::i;:::-;:53;;45701:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;45790:9;45786:97;45806:6;45803:1;:9;45786:97;;;45833:38;45839:12;:10;:12::i;:::-;45857:11;;:13;;;;;;;;;:::i;:::-;;;;;45853:1;:17;;;;:::i;:::-;45833:5;:38::i;:::-;45814:3;;;;;:::i;:::-;;;;45786:97;;;;45638:252:::0;:::o;44268:460::-;44341:13;44375:16;44383:7;44375;:16::i;:::-;44367:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44479:5;44467:17;;:8;;;;;;;;;;;:17;;;44464:70;;;44508:14;44501:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44464:70;44546:28;44577:10;:8;:10::i;:::-;44546:41;;44636:1;44611:14;44605:28;:32;:115;;;;;;;;;;;;;;;;;44664:14;44680:18;:7;:16;:18::i;:::-;44700:13;44647:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44605:115;44598:122;;;44268:460;;;;:::o;42181:46::-;;;;:::o;42248:44::-;;;;:::o;42371:19::-;;;;;;;;;;;;;:::o;28772:164::-;28869:4;28893:18;:25;28912:5;28893:25;;;;;;;;;;;;;;;:35;28919:8;28893:35;;;;;;;;;;;;;;;;;;;;;;;;;28886:42;;28772:164;;;;:::o;41522:244::-;40797:12;:10;:12::i;:::-;40786:23;;:7;:5;:7::i;:::-;:23;;;40778:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41631:1:::1;41611:22;;:8;:22;;;;41603:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41721:8;41692:38;;41713:6;;;;;;;;;;;41692:38;;;;;;;;;;;;41750:8;41741:6;;:17;;;;;;;;;;;;;;;;;;41522:244:::0;:::o;24199:157::-;24284:4;24323:25;24308:40;;;:11;:40;;;;24301:47;;24199:157;;;:::o;31359:127::-;31424:4;31476:1;31448:30;;:7;:16;31456:7;31448:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31441:37;;31359:127;;;:::o;20999:98::-;21052:7;21079:10;21072:17;;20999:98;:::o;35254:174::-;35356:2;35329:15;:24;35345:7;35329:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35412:7;35408:2;35374:46;;35383:23;35398:7;35383:14;:23::i;:::-;35374:46;;;;;;;;;;;;35254:174;;:::o;38814:217::-;38914:16;38922:7;38914;:16::i;:::-;38906:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39014:9;38992:10;:19;39003:7;38992:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;38814:217;;:::o;31654:348::-;31747:4;31772:16;31780:7;31772;:16::i;:::-;31764:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31848:13;31864:23;31879:7;31864:14;:23::i;:::-;31848:39;;31917:5;31906:16;;:7;:16;;;:51;;;;31950:7;31926:31;;:20;31938:7;31926:11;:20::i;:::-;:31;;;31906:51;:87;;;;31961:32;31978:5;31985:7;31961:16;:32::i;:::-;31906:87;31898:96;;;31654:348;;;;:::o;34587:548::-;34712:4;34685:31;;:23;34700:7;34685:14;:23::i;:::-;:31;;;34677:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34795:1;34781:16;;:2;:16;;;;34773:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34852:39;34873:4;34879:2;34883:7;34852:20;:39::i;:::-;34957:29;34974:1;34978:7;34957:8;:29::i;:::-;35019:1;35000:9;:15;35010:4;35000:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35048:1;35031:9;:13;35041:2;35031:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35079:2;35060:7;:16;35068:7;35060:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35119:7;35115:2;35100:27;;35109:4;35100:27;;;;;;;;;;;;34587:548;;;:::o;1114:190::-;1239:4;1292;1263:25;1276:5;1283:4;1263:12;:25::i;:::-;:33;1256:40;;1114:190;;;;;:::o;33270:385::-;33364:1;33350:16;;:2;:16;;;;33342:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33423:16;33431:7;33423;:16::i;:::-;33422:17;33414:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33486:45;33515:1;33519:2;33523:7;33486:20;:45::i;:::-;33562:1;33545:9;:13;33555:2;33545:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33593:2;33574:7;:16;33582:7;33574:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33639:7;33635:2;33614:33;;33631:1;33614:33;;;;;;;;;;;;33270:385;;:::o;30773:272::-;30887:28;30897:4;30903:2;30907:7;30887:9;:28::i;:::-;30934:48;30957:4;30963:2;30967:7;30976:5;30934:22;:48::i;:::-;30926:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30773:272;;;;:::o;43573:107::-;43633:13;43665:7;43658:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43573:107;:::o;21649:724::-;21705:13;21936:1;21927:5;:10;21923:53;;;21954:10;;;;;;;;;;;;;;;;;;;;;21923:53;21986:12;22001:5;21986:20;;22017:14;22042:78;22057:1;22049:4;:9;22042:78;;22075:8;;;;;:::i;:::-;;;;22106:2;22098:10;;;;;:::i;:::-;;;22042:78;;;22130:19;22162:6;22152:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22130:39;;22180:154;22196:1;22187:5;:10;22180:154;;22224:1;22214:11;;;;;:::i;:::-;;;22291:2;22283:5;:10;;;;:::i;:::-;22270:2;:24;;;;:::i;:::-;22257:39;;22240:6;22247;22240:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;22320:2;22311:11;;;;;:::i;:::-;;;22180:154;;;22358:6;22344:21;;;;;21649:724;;;;:::o;37451:93::-;;;;:::o;1666:701::-;1749:7;1769:20;1792:4;1769:27;;1812:9;1807:523;1831:5;:12;1827:1;:16;1807:523;;;1865:20;1888:5;1894:1;1888:8;;;;;;;;:::i;:::-;;;;;;;;1865:31;;1931:12;1915;:28;1911:408;;2085:12;2099;2068:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2058:55;;;;;;2043:70;;1911:408;;;2275:12;2289;2258:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2248:55;;;;;;2233:70;;1911:408;1850:480;1845:3;;;;;:::i;:::-;;;;1807:523;;;;2347:12;2340:19;;;1666:701;;;;:::o;35994:843::-;36115:4;36141:15;:2;:13;;;:15::i;:::-;36137:693;;;36193:2;36177:36;;;36214:12;:10;:12::i;:::-;36228:4;36234:7;36243:5;36177:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36173:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36440:1;36423:6;:13;:18;36419:341;;;36466:60;;;;;;;;;;:::i;:::-;;;;;;;;36419:341;36710:6;36704:13;36695:6;36691:2;36687:15;36680:38;36173:602;36310:45;;;36300:55;;;:6;:55;;;;36293:62;;;;;36137:693;36814:4;36807:11;;35994:843;;;;;;;:::o;13107:423::-;13167:4;13376:12;13487:7;13475:20;13467:28;;13521:1;13514:4;:8;13507:15;;;13107:423;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:323::-;6412:6;6461:2;6449:9;6440:7;6436:23;6432:32;6429:119;;;6467:79;;:::i;:::-;6429:119;6587:1;6612:50;6654:7;6645:6;6634:9;6630:22;6612:50;:::i;:::-;6602:60;;6558:114;6356:323;;;;:::o;6685:329::-;6744:6;6793:2;6781:9;6772:7;6768:23;6764:32;6761:119;;;6799:79;;:::i;:::-;6761:119;6919:1;6944:53;6989:7;6980:6;6969:9;6965:22;6944:53;:::i;:::-;6934:63;;6890:117;6685:329;;;;:::o;7020:327::-;7078:6;7127:2;7115:9;7106:7;7102:23;7098:32;7095:119;;;7133:79;;:::i;:::-;7095:119;7253:1;7278:52;7322:7;7313:6;7302:9;7298:22;7278:52;:::i;:::-;7268:62;;7224:116;7020:327;;;;:::o;7353:349::-;7422:6;7471:2;7459:9;7450:7;7446:23;7442:32;7439:119;;;7477:79;;:::i;:::-;7439:119;7597:1;7622:63;7677:7;7668:6;7657:9;7653:22;7622:63;:::i;:::-;7612:73;;7568:127;7353:349;;;;:::o;7708:509::-;7777:6;7826:2;7814:9;7805:7;7801:23;7797:32;7794:119;;;7832:79;;:::i;:::-;7794:119;7980:1;7969:9;7965:17;7952:31;8010:18;8002:6;7999:30;7996:117;;;8032:79;;:::i;:::-;7996:117;8137:63;8192:7;8183:6;8172:9;8168:22;8137:63;:::i;:::-;8127:73;;7923:287;7708:509;;;;:::o;8223:329::-;8282:6;8331:2;8319:9;8310:7;8306:23;8302:32;8299:119;;;8337:79;;:::i;:::-;8299:119;8457:1;8482:53;8527:7;8518:6;8507:9;8503:22;8482:53;:::i;:::-;8472:63;;8428:117;8223:329;;;;:::o;8558:704::-;8653:6;8661;8669;8718:2;8706:9;8697:7;8693:23;8689:32;8686:119;;;8724:79;;:::i;:::-;8686:119;8844:1;8869:53;8914:7;8905:6;8894:9;8890:22;8869:53;:::i;:::-;8859:63;;8815:117;8999:2;8988:9;8984:18;8971:32;9030:18;9022:6;9019:30;9016:117;;;9052:79;;:::i;:::-;9016:117;9165:80;9237:7;9228:6;9217:9;9213:22;9165:80;:::i;:::-;9147:98;;;;8942:313;8558:704;;;;;:::o;9268:654::-;9346:6;9354;9403:2;9391:9;9382:7;9378:23;9374:32;9371:119;;;9409:79;;:::i;:::-;9371:119;9529:1;9554:53;9599:7;9590:6;9579:9;9575:22;9554:53;:::i;:::-;9544:63;;9500:117;9684:2;9673:9;9669:18;9656:32;9715:18;9707:6;9704:30;9701:117;;;9737:79;;:::i;:::-;9701:117;9842:63;9897:7;9888:6;9877:9;9873:22;9842:63;:::i;:::-;9832:73;;9627:288;9268:654;;;;;:::o;9928:118::-;10015:24;10033:5;10015:24;:::i;:::-;10010:3;10003:37;9928:118;;:::o;10052:157::-;10157:45;10177:24;10195:5;10177:24;:::i;:::-;10157:45;:::i;:::-;10152:3;10145:58;10052:157;;:::o;10215:109::-;10296:21;10311:5;10296:21;:::i;:::-;10291:3;10284:34;10215:109;;:::o;10330:118::-;10417:24;10435:5;10417:24;:::i;:::-;10412:3;10405:37;10330:118;;:::o;10454:157::-;10559:45;10579:24;10597:5;10579:24;:::i;:::-;10559:45;:::i;:::-;10554:3;10547:58;10454:157;;:::o;10617:360::-;10703:3;10731:38;10763:5;10731:38;:::i;:::-;10785:70;10848:6;10843:3;10785:70;:::i;:::-;10778:77;;10864:52;10909:6;10904:3;10897:4;10890:5;10886:16;10864:52;:::i;:::-;10941:29;10963:6;10941:29;:::i;:::-;10936:3;10932:39;10925:46;;10707:270;10617:360;;;;:::o;10983:364::-;11071:3;11099:39;11132:5;11099:39;:::i;:::-;11154:71;11218:6;11213:3;11154:71;:::i;:::-;11147:78;;11234:52;11279:6;11274:3;11267:4;11260:5;11256:16;11234:52;:::i;:::-;11311:29;11333:6;11311:29;:::i;:::-;11306:3;11302:39;11295:46;;11075:272;10983:364;;;;:::o;11353:377::-;11459:3;11487:39;11520:5;11487:39;:::i;:::-;11542:89;11624:6;11619:3;11542:89;:::i;:::-;11535:96;;11640:52;11685:6;11680:3;11673:4;11666:5;11662:16;11640:52;:::i;:::-;11717:6;11712:3;11708:16;11701:23;;11463:267;11353:377;;;;:::o;11760:845::-;11863:3;11900:5;11894:12;11929:36;11955:9;11929:36;:::i;:::-;11981:89;12063:6;12058:3;11981:89;:::i;:::-;11974:96;;12101:1;12090:9;12086:17;12117:1;12112:137;;;;12263:1;12258:341;;;;12079:520;;12112:137;12196:4;12192:9;12181;12177:25;12172:3;12165:38;12232:6;12227:3;12223:16;12216:23;;12112:137;;12258:341;12325:38;12357:5;12325:38;:::i;:::-;12385:1;12399:154;12413:6;12410:1;12407:13;12399:154;;;12487:7;12481:14;12477:1;12472:3;12468:11;12461:35;12537:1;12528:7;12524:15;12513:26;;12435:4;12432:1;12428:12;12423:17;;12399:154;;;12582:6;12577:3;12573:16;12566:23;;12265:334;;12079:520;;11867:738;;11760:845;;;;:::o;12611:365::-;12753:3;12774:66;12838:1;12833:3;12774:66;:::i;:::-;12767:73;;12849:93;12938:3;12849:93;:::i;:::-;12967:2;12962:3;12958:12;12951:19;;12611:365;;;:::o;12982:366::-;13124:3;13145:67;13209:2;13204:3;13145:67;:::i;:::-;13138:74;;13221:93;13310:3;13221:93;:::i;:::-;13339:2;13334:3;13330:12;13323:19;;12982:366;;;:::o;13354:::-;13496:3;13517:67;13581:2;13576:3;13517:67;:::i;:::-;13510:74;;13593:93;13682:3;13593:93;:::i;:::-;13711:2;13706:3;13702:12;13695:19;;13354:366;;;:::o;13726:::-;13868:3;13889:67;13953:2;13948:3;13889:67;:::i;:::-;13882:74;;13965:93;14054:3;13965:93;:::i;:::-;14083:2;14078:3;14074:12;14067:19;;13726:366;;;:::o;14098:::-;14240:3;14261:67;14325:2;14320:3;14261:67;:::i;:::-;14254:74;;14337:93;14426:3;14337:93;:::i;:::-;14455:2;14450:3;14446:12;14439:19;;14098:366;;;:::o;14470:::-;14612:3;14633:67;14697:2;14692:3;14633:67;:::i;:::-;14626:74;;14709:93;14798:3;14709:93;:::i;:::-;14827:2;14822:3;14818:12;14811:19;;14470:366;;;:::o;14842:::-;14984:3;15005:67;15069:2;15064:3;15005:67;:::i;:::-;14998:74;;15081:93;15170:3;15081:93;:::i;:::-;15199:2;15194:3;15190:12;15183:19;;14842:366;;;:::o;15214:::-;15356:3;15377:67;15441:2;15436:3;15377:67;:::i;:::-;15370:74;;15453:93;15542:3;15453:93;:::i;:::-;15571:2;15566:3;15562:12;15555:19;;15214:366;;;:::o;15586:::-;15728:3;15749:67;15813:2;15808:3;15749:67;:::i;:::-;15742:74;;15825:93;15914:3;15825:93;:::i;:::-;15943:2;15938:3;15934:12;15927:19;;15586:366;;;:::o;15958:::-;16100:3;16121:67;16185:2;16180:3;16121:67;:::i;:::-;16114:74;;16197:93;16286:3;16197:93;:::i;:::-;16315:2;16310:3;16306:12;16299:19;;15958:366;;;:::o;16330:::-;16472:3;16493:67;16557:2;16552:3;16493:67;:::i;:::-;16486:74;;16569:93;16658:3;16569:93;:::i;:::-;16687:2;16682:3;16678:12;16671:19;;16330:366;;;:::o;16702:::-;16844:3;16865:67;16929:2;16924:3;16865:67;:::i;:::-;16858:74;;16941:93;17030:3;16941:93;:::i;:::-;17059:2;17054:3;17050:12;17043:19;;16702:366;;;:::o;17074:::-;17216:3;17237:67;17301:2;17296:3;17237:67;:::i;:::-;17230:74;;17313:93;17402:3;17313:93;:::i;:::-;17431:2;17426:3;17422:12;17415:19;;17074:366;;;:::o;17446:::-;17588:3;17609:67;17673:2;17668:3;17609:67;:::i;:::-;17602:74;;17685:93;17774:3;17685:93;:::i;:::-;17803:2;17798:3;17794:12;17787:19;;17446:366;;;:::o;17818:::-;17960:3;17981:67;18045:2;18040:3;17981:67;:::i;:::-;17974:74;;18057:93;18146:3;18057:93;:::i;:::-;18175:2;18170:3;18166:12;18159:19;;17818:366;;;:::o;18190:::-;18332:3;18353:67;18417:2;18412:3;18353:67;:::i;:::-;18346:74;;18429:93;18518:3;18429:93;:::i;:::-;18547:2;18542:3;18538:12;18531:19;;18190:366;;;:::o;18562:::-;18704:3;18725:67;18789:2;18784:3;18725:67;:::i;:::-;18718:74;;18801:93;18890:3;18801:93;:::i;:::-;18919:2;18914:3;18910:12;18903:19;;18562:366;;;:::o;18934:::-;19076:3;19097:67;19161:2;19156:3;19097:67;:::i;:::-;19090:74;;19173:93;19262:3;19173:93;:::i;:::-;19291:2;19286:3;19282:12;19275:19;;18934:366;;;:::o;19306:::-;19448:3;19469:67;19533:2;19528:3;19469:67;:::i;:::-;19462:74;;19545:93;19634:3;19545:93;:::i;:::-;19663:2;19658:3;19654:12;19647:19;;19306:366;;;:::o;19678:::-;19820:3;19841:67;19905:2;19900:3;19841:67;:::i;:::-;19834:74;;19917:93;20006:3;19917:93;:::i;:::-;20035:2;20030:3;20026:12;20019:19;;19678:366;;;:::o;20050:::-;20192:3;20213:67;20277:2;20272:3;20213:67;:::i;:::-;20206:74;;20289:93;20378:3;20289:93;:::i;:::-;20407:2;20402:3;20398:12;20391:19;;20050:366;;;:::o;20422:::-;20564:3;20585:67;20649:2;20644:3;20585:67;:::i;:::-;20578:74;;20661:93;20750:3;20661:93;:::i;:::-;20779:2;20774:3;20770:12;20763:19;;20422:366;;;:::o;20794:::-;20936:3;20957:67;21021:2;21016:3;20957:67;:::i;:::-;20950:74;;21033:93;21122:3;21033:93;:::i;:::-;21151:2;21146:3;21142:12;21135:19;;20794:366;;;:::o;21166:::-;21308:3;21329:67;21393:2;21388:3;21329:67;:::i;:::-;21322:74;;21405:93;21494:3;21405:93;:::i;:::-;21523:2;21518:3;21514:12;21507:19;;21166:366;;;:::o;21538:::-;21680:3;21701:67;21765:2;21760:3;21701:67;:::i;:::-;21694:74;;21777:93;21866:3;21777:93;:::i;:::-;21895:2;21890:3;21886:12;21879:19;;21538:366;;;:::o;21910:::-;22052:3;22073:67;22137:2;22132:3;22073:67;:::i;:::-;22066:74;;22149:93;22238:3;22149:93;:::i;:::-;22267:2;22262:3;22258:12;22251:19;;21910:366;;;:::o;22282:::-;22424:3;22445:67;22509:2;22504:3;22445:67;:::i;:::-;22438:74;;22521:93;22610:3;22521:93;:::i;:::-;22639:2;22634:3;22630:12;22623:19;;22282:366;;;:::o;22654:118::-;22741:24;22759:5;22741:24;:::i;:::-;22736:3;22729:37;22654:118;;:::o;22778:256::-;22890:3;22905:75;22976:3;22967:6;22905:75;:::i;:::-;23005:2;23000:3;22996:12;22989:19;;23025:3;23018:10;;22778:256;;;;:::o;23040:397::-;23180:3;23195:75;23266:3;23257:6;23195:75;:::i;:::-;23295:2;23290:3;23286:12;23279:19;;23308:75;23379:3;23370:6;23308:75;:::i;:::-;23408:2;23403:3;23399:12;23392:19;;23428:3;23421:10;;23040:397;;;;;:::o;23443:589::-;23668:3;23690:95;23781:3;23772:6;23690:95;:::i;:::-;23683:102;;23802:95;23893:3;23884:6;23802:95;:::i;:::-;23795:102;;23914:92;24002:3;23993:6;23914:92;:::i;:::-;23907:99;;24023:3;24016:10;;23443:589;;;;;;:::o;24038:222::-;24131:4;24169:2;24158:9;24154:18;24146:26;;24182:71;24250:1;24239:9;24235:17;24226:6;24182:71;:::i;:::-;24038:222;;;;:::o;24266:640::-;24461:4;24499:3;24488:9;24484:19;24476:27;;24513:71;24581:1;24570:9;24566:17;24557:6;24513:71;:::i;:::-;24594:72;24662:2;24651:9;24647:18;24638:6;24594:72;:::i;:::-;24676;24744:2;24733:9;24729:18;24720:6;24676:72;:::i;:::-;24795:9;24789:4;24785:20;24780:2;24769:9;24765:18;24758:48;24823:76;24894:4;24885:6;24823:76;:::i;:::-;24815:84;;24266:640;;;;;;;:::o;24912:210::-;24999:4;25037:2;25026:9;25022:18;25014:26;;25050:65;25112:1;25101:9;25097:17;25088:6;25050:65;:::i;:::-;24912:210;;;;:::o;25128:222::-;25221:4;25259:2;25248:9;25244:18;25236:26;;25272:71;25340:1;25329:9;25325:17;25316:6;25272:71;:::i;:::-;25128:222;;;;:::o;25356:313::-;25469:4;25507:2;25496:9;25492:18;25484:26;;25556:9;25550:4;25546:20;25542:1;25531:9;25527:17;25520:47;25584:78;25657:4;25648:6;25584:78;:::i;:::-;25576:86;;25356:313;;;;:::o;25675:419::-;25841:4;25879:2;25868:9;25864:18;25856:26;;25928:9;25922:4;25918:20;25914:1;25903:9;25899:17;25892:47;25956:131;26082:4;25956:131;:::i;:::-;25948:139;;25675:419;;;:::o;26100:::-;26266:4;26304:2;26293:9;26289:18;26281:26;;26353:9;26347:4;26343:20;26339:1;26328:9;26324:17;26317:47;26381:131;26507:4;26381:131;:::i;:::-;26373:139;;26100:419;;;:::o;26525:::-;26691:4;26729:2;26718:9;26714:18;26706:26;;26778:9;26772:4;26768:20;26764:1;26753:9;26749:17;26742:47;26806:131;26932:4;26806:131;:::i;:::-;26798:139;;26525:419;;;:::o;26950:::-;27116:4;27154:2;27143:9;27139:18;27131:26;;27203:9;27197:4;27193:20;27189:1;27178:9;27174:17;27167:47;27231:131;27357:4;27231:131;:::i;:::-;27223:139;;26950:419;;;:::o;27375:::-;27541:4;27579:2;27568:9;27564:18;27556:26;;27628:9;27622:4;27618:20;27614:1;27603:9;27599:17;27592:47;27656:131;27782:4;27656:131;:::i;:::-;27648:139;;27375:419;;;:::o;27800:::-;27966:4;28004:2;27993:9;27989:18;27981:26;;28053:9;28047:4;28043:20;28039:1;28028:9;28024:17;28017:47;28081:131;28207:4;28081:131;:::i;:::-;28073:139;;27800:419;;;:::o;28225:::-;28391:4;28429:2;28418:9;28414:18;28406:26;;28478:9;28472:4;28468:20;28464:1;28453:9;28449:17;28442:47;28506:131;28632:4;28506:131;:::i;:::-;28498:139;;28225:419;;;:::o;28650:::-;28816:4;28854:2;28843:9;28839:18;28831:26;;28903:9;28897:4;28893:20;28889:1;28878:9;28874:17;28867:47;28931:131;29057:4;28931:131;:::i;:::-;28923:139;;28650:419;;;:::o;29075:::-;29241:4;29279:2;29268:9;29264:18;29256:26;;29328:9;29322:4;29318:20;29314:1;29303:9;29299:17;29292:47;29356:131;29482:4;29356:131;:::i;:::-;29348:139;;29075:419;;;:::o;29500:::-;29666:4;29704:2;29693:9;29689:18;29681:26;;29753:9;29747:4;29743:20;29739:1;29728:9;29724:17;29717:47;29781:131;29907:4;29781:131;:::i;:::-;29773:139;;29500:419;;;:::o;29925:::-;30091:4;30129:2;30118:9;30114:18;30106:26;;30178:9;30172:4;30168:20;30164:1;30153:9;30149:17;30142:47;30206:131;30332:4;30206:131;:::i;:::-;30198:139;;29925:419;;;:::o;30350:::-;30516:4;30554:2;30543:9;30539:18;30531:26;;30603:9;30597:4;30593:20;30589:1;30578:9;30574:17;30567:47;30631:131;30757:4;30631:131;:::i;:::-;30623:139;;30350:419;;;:::o;30775:::-;30941:4;30979:2;30968:9;30964:18;30956:26;;31028:9;31022:4;31018:20;31014:1;31003:9;30999:17;30992:47;31056:131;31182:4;31056:131;:::i;:::-;31048:139;;30775:419;;;:::o;31200:::-;31366:4;31404:2;31393:9;31389:18;31381:26;;31453:9;31447:4;31443:20;31439:1;31428:9;31424:17;31417:47;31481:131;31607:4;31481:131;:::i;:::-;31473:139;;31200:419;;;:::o;31625:::-;31791:4;31829:2;31818:9;31814:18;31806:26;;31878:9;31872:4;31868:20;31864:1;31853:9;31849:17;31842:47;31906:131;32032:4;31906:131;:::i;:::-;31898:139;;31625:419;;;:::o;32050:::-;32216:4;32254:2;32243:9;32239:18;32231:26;;32303:9;32297:4;32293:20;32289:1;32278:9;32274:17;32267:47;32331:131;32457:4;32331:131;:::i;:::-;32323:139;;32050:419;;;:::o;32475:::-;32641:4;32679:2;32668:9;32664:18;32656:26;;32728:9;32722:4;32718:20;32714:1;32703:9;32699:17;32692:47;32756:131;32882:4;32756:131;:::i;:::-;32748:139;;32475:419;;;:::o;32900:::-;33066:4;33104:2;33093:9;33089:18;33081:26;;33153:9;33147:4;33143:20;33139:1;33128:9;33124:17;33117:47;33181:131;33307:4;33181:131;:::i;:::-;33173:139;;32900:419;;;:::o;33325:::-;33491:4;33529:2;33518:9;33514:18;33506:26;;33578:9;33572:4;33568:20;33564:1;33553:9;33549:17;33542:47;33606:131;33732:4;33606:131;:::i;:::-;33598:139;;33325:419;;;:::o;33750:::-;33916:4;33954:2;33943:9;33939:18;33931:26;;34003:9;33997:4;33993:20;33989:1;33978:9;33974:17;33967:47;34031:131;34157:4;34031:131;:::i;:::-;34023:139;;33750:419;;;:::o;34175:::-;34341:4;34379:2;34368:9;34364:18;34356:26;;34428:9;34422:4;34418:20;34414:1;34403:9;34399:17;34392:47;34456:131;34582:4;34456:131;:::i;:::-;34448:139;;34175:419;;;:::o;34600:::-;34766:4;34804:2;34793:9;34789:18;34781:26;;34853:9;34847:4;34843:20;34839:1;34828:9;34824:17;34817:47;34881:131;35007:4;34881:131;:::i;:::-;34873:139;;34600:419;;;:::o;35025:::-;35191:4;35229:2;35218:9;35214:18;35206:26;;35278:9;35272:4;35268:20;35264:1;35253:9;35249:17;35242:47;35306:131;35432:4;35306:131;:::i;:::-;35298:139;;35025:419;;;:::o;35450:::-;35616:4;35654:2;35643:9;35639:18;35631:26;;35703:9;35697:4;35693:20;35689:1;35678:9;35674:17;35667:47;35731:131;35857:4;35731:131;:::i;:::-;35723:139;;35450:419;;;:::o;35875:::-;36041:4;36079:2;36068:9;36064:18;36056:26;;36128:9;36122:4;36118:20;36114:1;36103:9;36099:17;36092:47;36156:131;36282:4;36156:131;:::i;:::-;36148:139;;35875:419;;;:::o;36300:::-;36466:4;36504:2;36493:9;36489:18;36481:26;;36553:9;36547:4;36543:20;36539:1;36528:9;36524:17;36517:47;36581:131;36707:4;36581:131;:::i;:::-;36573:139;;36300:419;;;:::o;36725:::-;36891:4;36929:2;36918:9;36914:18;36906:26;;36978:9;36972:4;36968:20;36964:1;36953:9;36949:17;36942:47;37006:131;37132:4;37006:131;:::i;:::-;36998:139;;36725:419;;;:::o;37150:222::-;37243:4;37281:2;37270:9;37266:18;37258:26;;37294:71;37362:1;37351:9;37347:17;37338:6;37294:71;:::i;:::-;37150:222;;;;:::o;37378:129::-;37412:6;37439:20;;:::i;:::-;37429:30;;37468:33;37496:4;37488:6;37468:33;:::i;:::-;37378:129;;;:::o;37513:75::-;37546:6;37579:2;37573:9;37563:19;;37513:75;:::o;37594:307::-;37655:4;37745:18;37737:6;37734:30;37731:56;;;37767:18;;:::i;:::-;37731:56;37805:29;37827:6;37805:29;:::i;:::-;37797:37;;37889:4;37883;37879:15;37871:23;;37594:307;;;:::o;37907:308::-;37969:4;38059:18;38051:6;38048:30;38045:56;;;38081:18;;:::i;:::-;38045:56;38119:29;38141:6;38119:29;:::i;:::-;38111:37;;38203:4;38197;38193:15;38185:23;;37907:308;;;:::o;38221:141::-;38270:4;38293:3;38285:11;;38316:3;38313:1;38306:14;38350:4;38347:1;38337:18;38329:26;;38221:141;;;:::o;38368:98::-;38419:6;38453:5;38447:12;38437:22;;38368:98;;;:::o;38472:99::-;38524:6;38558:5;38552:12;38542:22;;38472:99;;;:::o;38577:168::-;38660:11;38694:6;38689:3;38682:19;38734:4;38729:3;38725:14;38710:29;;38577:168;;;;:::o;38751:169::-;38835:11;38869:6;38864:3;38857:19;38909:4;38904:3;38900:14;38885:29;;38751:169;;;;:::o;38926:148::-;39028:11;39065:3;39050:18;;38926:148;;;;:::o;39080:305::-;39120:3;39139:20;39157:1;39139:20;:::i;:::-;39134:25;;39173:20;39191:1;39173:20;:::i;:::-;39168:25;;39327:1;39259:66;39255:74;39252:1;39249:81;39246:107;;;39333:18;;:::i;:::-;39246:107;39377:1;39374;39370:9;39363:16;;39080:305;;;;:::o;39391:185::-;39431:1;39448:20;39466:1;39448:20;:::i;:::-;39443:25;;39482:20;39500:1;39482:20;:::i;:::-;39477:25;;39521:1;39511:35;;39526:18;;:::i;:::-;39511:35;39568:1;39565;39561:9;39556:14;;39391:185;;;;:::o;39582:348::-;39622:7;39645:20;39663:1;39645:20;:::i;:::-;39640:25;;39679:20;39697:1;39679:20;:::i;:::-;39674:25;;39867:1;39799:66;39795:74;39792:1;39789:81;39784:1;39777:9;39770:17;39766:105;39763:131;;;39874:18;;:::i;:::-;39763:131;39922:1;39919;39915:9;39904:20;;39582:348;;;;:::o;39936:191::-;39976:4;39996:20;40014:1;39996:20;:::i;:::-;39991:25;;40030:20;40048:1;40030:20;:::i;:::-;40025:25;;40069:1;40066;40063:8;40060:34;;;40074:18;;:::i;:::-;40060:34;40119:1;40116;40112:9;40104:17;;39936:191;;;;:::o;40133:96::-;40170:7;40199:24;40217:5;40199:24;:::i;:::-;40188:35;;40133:96;;;:::o;40235:90::-;40269:7;40312:5;40305:13;40298:21;40287:32;;40235:90;;;:::o;40331:77::-;40368:7;40397:5;40386:16;;40331:77;;;:::o;40414:149::-;40450:7;40490:66;40483:5;40479:78;40468:89;;40414:149;;;:::o;40569:126::-;40606:7;40646:42;40639:5;40635:54;40624:65;;40569:126;;;:::o;40701:77::-;40738:7;40767:5;40756:16;;40701:77;;;:::o;40784:154::-;40868:6;40863:3;40858;40845:30;40930:1;40921:6;40916:3;40912:16;40905:27;40784:154;;;:::o;40944:307::-;41012:1;41022:113;41036:6;41033:1;41030:13;41022:113;;;41121:1;41116:3;41112:11;41106:18;41102:1;41097:3;41093:11;41086:39;41058:2;41055:1;41051:10;41046:15;;41022:113;;;41153:6;41150:1;41147:13;41144:101;;;41233:1;41224:6;41219:3;41215:16;41208:27;41144:101;40993:258;40944:307;;;:::o;41257:320::-;41301:6;41338:1;41332:4;41328:12;41318:22;;41385:1;41379:4;41375:12;41406:18;41396:81;;41462:4;41454:6;41450:17;41440:27;;41396:81;41524:2;41516:6;41513:14;41493:18;41490:38;41487:84;;;41543:18;;:::i;:::-;41487:84;41308:269;41257:320;;;:::o;41583:281::-;41666:27;41688:4;41666:27;:::i;:::-;41658:6;41654:40;41796:6;41784:10;41781:22;41760:18;41748:10;41745:34;41742:62;41739:88;;;41807:18;;:::i;:::-;41739:88;41847:10;41843:2;41836:22;41626:238;41583:281;;:::o;41870:233::-;41909:3;41932:24;41950:5;41932:24;:::i;:::-;41923:33;;41978:66;41971:5;41968:77;41965:103;;;42048:18;;:::i;:::-;41965:103;42095:1;42088:5;42084:13;42077:20;;41870:233;;;:::o;42109:100::-;42148:7;42177:26;42197:5;42177:26;:::i;:::-;42166:37;;42109:100;;;:::o;42215:79::-;42254:7;42283:5;42272:16;;42215:79;;;:::o;42300:94::-;42339:7;42368:20;42382:5;42368:20;:::i;:::-;42357:31;;42300:94;;;:::o;42400:176::-;42432:1;42449:20;42467:1;42449:20;:::i;:::-;42444:25;;42483:20;42501:1;42483:20;:::i;:::-;42478:25;;42522:1;42512:35;;42527:18;;:::i;:::-;42512:35;42568:1;42565;42561:9;42556:14;;42400:176;;;;:::o;42582:180::-;42630:77;42627:1;42620:88;42727:4;42724:1;42717:15;42751:4;42748:1;42741:15;42768:180;42816:77;42813:1;42806:88;42913:4;42910:1;42903:15;42937:4;42934:1;42927:15;42954:180;43002:77;42999:1;42992:88;43099:4;43096:1;43089:15;43123:4;43120:1;43113:15;43140:180;43188:77;43185:1;43178:88;43285:4;43282:1;43275:15;43309:4;43306:1;43299:15;43326:180;43374:77;43371:1;43364:88;43471:4;43468:1;43461:15;43495:4;43492:1;43485:15;43512:117;43621:1;43618;43611:12;43635:117;43744:1;43741;43734:12;43758:117;43867:1;43864;43857:12;43881:117;43990:1;43987;43980:12;44004:117;44113:1;44110;44103:12;44127:117;44236:1;44233;44226:12;44250:102;44291:6;44342:2;44338:7;44333:2;44326:5;44322:14;44318:28;44308:38;;44250:102;;;:::o;44358:94::-;44391:8;44439:5;44435:2;44431:14;44410:35;;44358:94;;;:::o;44458:158::-;44598:10;44594:1;44586:6;44582:14;44575:34;44458:158;:::o;44622:169::-;44762:21;44758:1;44750:6;44746:14;44739:45;44622:169;:::o;44797:161::-;44937:13;44933:1;44925:6;44921:14;44914:37;44797:161;:::o;44964:237::-;45104:34;45100:1;45092:6;45088:14;45081:58;45173:20;45168:2;45160:6;45156:15;45149:45;44964:237;:::o;45207:225::-;45347:34;45343:1;45335:6;45331:14;45324:58;45416:8;45411:2;45403:6;45399:15;45392:33;45207:225;:::o;45438:180::-;45578:32;45574:1;45566:6;45562:14;45555:56;45438:180;:::o;45624:178::-;45764:30;45760:1;45752:6;45748:14;45741:54;45624:178;:::o;45808:167::-;45948:19;45944:1;45936:6;45932:14;45925:43;45808:167;:::o;45981:223::-;46121:34;46117:1;46109:6;46105:14;46098:58;46190:6;46185:2;46177:6;46173:15;46166:31;45981:223;:::o;46210:175::-;46350:27;46346:1;46338:6;46334:14;46327:51;46210:175;:::o;46391:231::-;46531:34;46527:1;46519:6;46515:14;46508:58;46600:14;46595:2;46587:6;46583:15;46576:39;46391:231;:::o;46628:180::-;46768:32;46764:1;46756:6;46752:14;46745:56;46628:180;:::o;46814:243::-;46954:34;46950:1;46942:6;46938:14;46931:58;47023:26;47018:2;47010:6;47006:15;46999:51;46814:243;:::o;47063:229::-;47203:34;47199:1;47191:6;47187:14;47180:58;47272:12;47267:2;47259:6;47255:15;47248:37;47063:229;:::o;47298:228::-;47438:34;47434:1;47426:6;47422:14;47415:58;47507:11;47502:2;47494:6;47490:15;47483:36;47298:228;:::o;47532:233::-;47672:34;47668:1;47660:6;47656:14;47649:58;47741:16;47736:2;47728:6;47724:15;47717:41;47532:233;:::o;47771:178::-;47911:30;47907:1;47899:6;47895:14;47888:54;47771:178;:::o;47955:182::-;48095:34;48091:1;48083:6;48079:14;48072:58;47955:182;:::o;48143:231::-;48283:34;48279:1;48271:6;48267:14;48260:58;48352:14;48347:2;48339:6;48335:15;48328:39;48143:231;:::o;48380:182::-;48520:34;48516:1;48508:6;48504:14;48497:58;48380:182;:::o;48568:228::-;48708:34;48704:1;48696:6;48692:14;48685:58;48777:11;48772:2;48764:6;48760:15;48753:36;48568:228;:::o;48802:234::-;48942:34;48938:1;48930:6;48926:14;48919:58;49011:17;49006:2;48998:6;48994:15;48987:42;48802:234;:::o;49042:220::-;49182:34;49178:1;49170:6;49166:14;49159:58;49251:3;49246:2;49238:6;49234:15;49227:28;49042:220;:::o;49268:236::-;49408:34;49404:1;49396:6;49392:14;49385:58;49477:19;49472:2;49464:6;49460:15;49453:44;49268:236;:::o;49510:235::-;49650:34;49646:1;49638:6;49634:14;49627:58;49719:18;49714:2;49706:6;49702:15;49695:43;49510:235;:::o;49751:181::-;49891:33;49887:1;49879:6;49875:14;49868:57;49751:181;:::o;49938:161::-;50078:13;50074:1;50066:6;50062:14;50055:37;49938:161;:::o;50105:122::-;50178:24;50196:5;50178:24;:::i;:::-;50171:5;50168:35;50158:63;;50217:1;50214;50207:12;50158:63;50105:122;:::o;50233:116::-;50303:21;50318:5;50303:21;:::i;:::-;50296:5;50293:32;50283:60;;50339:1;50336;50329:12;50283:60;50233:116;:::o;50355:122::-;50428:24;50446:5;50428:24;:::i;:::-;50421:5;50418:35;50408:63;;50467:1;50464;50457:12;50408:63;50355:122;:::o;50483:120::-;50555:23;50572:5;50555:23;:::i;:::-;50548:5;50545:34;50535:62;;50593:1;50590;50583:12;50535:62;50483:120;:::o;50609:122::-;50682:24;50700:5;50682:24;:::i;:::-;50675:5;50672:35;50662:63;;50721:1;50718;50711:12;50662:63;50609:122;:::o

Swarm Source

ipfs://3266c0dafccf911d7006908d3f338b58a2aab1a763a1063db6baabe693d147c2
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.