ETH Price: $2,393.72 (-4.44%)

Token

The Dope Troll Town (TDTT)
 

Overview

Max Total Supply

23 TDTT

Holders

13

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 TDTT
0x5b0d7d8ec5330abf16c4732269af23c12df97aef
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:
TheDopeTrolTown

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-12
*/

// SPDX-License-Identifier: MIT

// Amended by DopeTrollTown
/*
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@        @@@@@@@@@        @@@@@         @@@          @            @         @@@@@        @@@@@  @@@@@@  @            @        @  @@@@@@@@@@@@@@@@@@@@@@@@@  @   @@@@@@@@@  @@@
@  @@@@@  @@@@@@@  @@@@@@  @@@@  @@@@@@  @@  @@@@@@@@@@@@@@  @@@@@@  @@@@@@  @@@  @@@@@@  @@@@  @@@@@@  @@@@@@  @@@@@  @@@@@@  @  @@@@@@@@@@@@@@@@@@@@@@@  @@  @ @@@@@@@@  @@@
@  @@@@@@  @@@@@  @@@@@@@@  @@@  @@@@@@@  @  @@@@@@@@@@@@@@  @@@@@@  @@@@@@@  @  @@@@@@@@  @@@  @@@@@@  @@@@@@  @@@@  @@@@@@@@  @  @@@@@@@@@@@@@@@@@@@@@  @@@  @@ @@@@@@@  @@@
@  @@@@@@@  @@@  @@@@@@@@@@  @@  @@@@@@  @@  @@@@@@@@@@@@@@  @@@@@@  @@@@@@  @  @@@@@@@@@@  @@  @@@@@@  @@@@@@  @@@  @@@@@@@@@@  @  @@@@@@@@@@@@@@@@@@@  @@@@  @@@ @@@@@@  @@@
@  @@@@@@@@  @  @@@@@@@@@@@@  @        @@@@         @@@@@@@  @@@@@@        @@  @@@@@@@@@@@@  @  @@@@@@  @@@@@@  @@  @@@@@@@@@@@@  @  @@@@@@@@@@@@@@@@@  @@@@@  @@@@ @@@@@  @@@
@  @@@@@@@@  @  @@@@@@@@@@@@  @  @@@@@@@@@@         @@@@@@@  @@@@@@    @@@@@@  @@@@@@@@@@@@  @  @@@@@@  @@@@@@  @@  @@@@@@@@@@@@  @@  @@@@@@@@@@@@@@@  @@@@@@  @@@@@ @@@@  @@@
@  @@@@@@@  @@@  @@@@@@@@@@  @@  @@@@@@@@@@  @@@@@@@@@@@@@@  @@@@@@  @@  @@@@@  @@@@@@@@@@  @@  @@@@@@  @@@@@@  @@@  @@@@@@@@@@  @@@@  @@@@@  @@@@@@  @@@@@@@  @@@@@@ @@@  @@@
@  @@@@@@  @@@@@  @@@@@@@@  @@@  @@@@@@@@@@  @@@@@@@@@@@@@@  @@@@@@  @@@  @@@@@  @@@@@@@@  @@@  @@@@@@  @@@@@@  @@@@  @@@@@@@@  @@@@@@  @@@ @@ @@@@  @@@@@@@@  @@@@@@@ @@  @@@
@  @@@@@  @@@@@@@  @@@@@@  @@@@  @@@@@@@@@@  @@@@@@@@@@@@@@  @@@@@@  @@@@  @@@@@  @@@@@@  @@@@  @@@@@@  @@@@@@  @@@@@  @@@@@@  @@@@@@@@  @ @@@@ @@  @@@@@@@@@  @@@@@@@@ @  @@@
@        @@@@@@@@@        @@@@@  @@@@@@@@@@          @@@@@@  @@@@@@  @@@@@  @@@@@        @@@@@       @       @  @@@@@@        @@@@@@@@@@   @@@@@   @@@@@@@@@@  @@@@@@@@@   @@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
           
*/
// File: @openzeppelin/contracts/utils/Counters.sol


// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

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


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

pragma solidity ^0.8.0;

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

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

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

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

        _;

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

// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC721/ERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: address zero is not a valid owner");
        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: invalid token ID");
        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) {
        _requireMinted(tokenId);

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overridden 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 token owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token 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: caller is not token 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) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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);

        _afterTokenTransfer(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);

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits an {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    /// @solidity memory-safe-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` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: contracts/The Dope Troll Town.sol



pragma solidity ^0.8.9;





contract OwnableDelegateProxy {}

contract ProxyRegistry {
  mapping(address => OwnableDelegateProxy) public proxies;
}

contract TheDopeTrolTown is ERC721, ReentrancyGuard, Ownable {
  using Counters for Counters.Counter;

  constructor(string memory customBaseURI_, address proxyRegistryAddress_)
    ERC721("The Dope Troll Town", "TDTT")
  {
    customBaseURI = customBaseURI_;

    proxyRegistryAddress = proxyRegistryAddress_;
  }

  /** MINTING LIMITS **/

  mapping(address => uint256) private mintCountMap;

  mapping(address => uint256) private allowedMintCountMap;

  uint256 public constant MINT_LIMIT_PER_WALLET = 2;

  function allowedMintCount(address minter) public view returns (uint256) {
    return MINT_LIMIT_PER_WALLET - mintCountMap[minter];
  }

  function updateMintCount(address minter, uint256 count) private {
    mintCountMap[minter] += count;
  }

  /** MINTING **/

  uint256 public constant MAX_SUPPLY = 10001;

  uint256 public constant MAX_MULTIMINT = 20;

  Counters.Counter private supplyCounter;

  function mint(uint256 count) public nonReentrant {
    require(saleIsActive, "Sale not active");

    if (allowedMintCount(msg.sender) >= count) {
      updateMintCount(msg.sender, count);
    } else {
      revert("Minting limit exceeded");
    }

    require(totalSupply() + count - 1 < MAX_SUPPLY, "Exceeds max supply");

    require(count <= MAX_MULTIMINT, "Mint at most 20 at a time");

    for (uint256 i = 0; i < count; i++) {
      _mint(msg.sender, totalSupply());

      supplyCounter.increment();
    }
  }

  function totalSupply() public view returns (uint256) {
    return supplyCounter.current();
  }

  /** ACTIVATION **/

  bool public saleIsActive = true;

  function setSaleIsActive(bool saleIsActive_) external onlyOwner {
    saleIsActive = saleIsActive_;
  }

  /** URI HANDLING **/

  string private customBaseURI;

  mapping(uint256 => string) private tokenURIMap;

  function setTokenURI(uint256 tokenId, string memory tokenURI_)
    external
    onlyOwner
  {
    tokenURIMap[tokenId] = tokenURI_;
  }

  function setBaseURI(string memory customBaseURI_) external onlyOwner {
    customBaseURI = customBaseURI_;
  }

  function _baseURI() internal view virtual override returns (string memory) {
    return customBaseURI;
  }

  function tokenURI(uint256 tokenId) public view override
    returns (string memory)
  {
    string memory _tokenURI = super.tokenURI(tokenId);
        return
            bytes(_tokenURI).length > 0
                ? string(abi.encodePacked(_tokenURI, ".json"))
                : "";
    }

    

  /** PROXY REGISTRY **/

  address private immutable proxyRegistryAddress;

  function isApprovedForAll(address owner, address operator)
    override
    public
    view
    returns (bool)
  {
    ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);

    if (address(proxyRegistry.proxies(owner)) == operator) {
      return true;
    }

    return super.isApprovedForAll(owner, operator);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"customBaseURI_","type":"string"},{"internalType":"address","name":"proxyRegistryAddress_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_MULTIMINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_LIMIT_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"minter","type":"address"}],"name":"allowedMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"uint256","name":"count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"customBaseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"saleIsActive_","type":"bool"}],"name":"setSaleIsActive","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":[{"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"}]

60a06040526001600b60006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040516200399a3803806200399a8339818101604052810190620000529190620004ef565b6040518060400160405280601381526020017f54686520446f70652054726f6c6c20546f776e000000000000000000000000008152506040518060400160405280600481526020017f54445454000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000d69291906200023d565b508060019080519060200190620000ef9291906200023d565b50505060016006819055506200011a6200010e6200016f60201b60201c565b6200017760201b60201c565b81600c9080519060200190620001329291906200023d565b508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505050620005ba565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200024b9062000584565b90600052602060002090601f0160209004810192826200026f5760008555620002bb565b82601f106200028a57805160ff1916838001178555620002bb565b82800160010185558215620002bb579182015b82811115620002ba5782518255916020019190600101906200029d565b5b509050620002ca9190620002ce565b5090565b5b80821115620002e9576000816000905550600101620002cf565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000356826200030b565b810181811067ffffffffffffffff821117156200037857620003776200031c565b5b80604052505050565b60006200038d620002ed565b90506200039b82826200034b565b919050565b600067ffffffffffffffff821115620003be57620003bd6200031c565b5b620003c9826200030b565b9050602081019050919050565b60005b83811015620003f6578082015181840152602081019050620003d9565b8381111562000406576000848401525b50505050565b6000620004236200041d84620003a0565b62000381565b90508281526020810184848401111562000442576200044162000306565b5b6200044f848285620003d6565b509392505050565b600082601f8301126200046f576200046e62000301565b5b8151620004818482602086016200040c565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004b7826200048a565b9050919050565b620004c981620004aa565b8114620004d557600080fd5b50565b600081519050620004e981620004be565b92915050565b60008060408385031215620005095762000508620002f7565b5b600083015167ffffffffffffffff8111156200052a5762000529620002fc565b5b620005388582860162000457565b92505060206200054b85828601620004d8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200059d57607f821691505b60208210811415620005b457620005b362000555565b5b50919050565b6080516133c4620005d66000396000610e2601526133c46000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c8063715018a6116100de578063b8fc105111610097578063d6c336ed11610071578063d6c336ed1461046d578063e985e9c51461048b578063eb8d2444146104bb578063f2fde38b146104d95761018e565b8063b8fc1051146103ef578063bb660c0a1461040d578063c87b56dd1461043d5761018e565b8063715018a6146103555780638da5cb5b1461035f57806395d89b411461037d578063a0712d681461039b578063a22cb465146103b7578063b88d4fde146103d35761018e565b806318160ddd1161014b57806342842e0e1161012557806342842e0e146102bd57806355f804b3146102d95780636352211e146102f557806370a08231146103255761018e565b806318160ddd1461026557806323b872dd1461028357806332cb6b0c1461029f5761018e565b806301ffc9a71461019357806302c88989146101c357806306fdde03146101df578063081812fc146101fd578063095ea7b31461022d578063162094c414610249575b600080fd5b6101ad60048036038101906101a89190611fbd565b6104f5565b6040516101ba9190612005565b60405180910390f35b6101dd60048036038101906101d8919061204c565b6105d7565b005b6101e76105fc565b6040516101f49190612112565b60405180910390f35b6102176004803603810190610212919061216a565b61068e565b60405161022491906121d8565b60405180910390f35b6102476004803603810190610242919061221f565b6106d4565b005b610263600480360381019061025e9190612394565b6107ec565b005b61026d610820565b60405161027a91906123ff565b60405180910390f35b61029d6004803603810190610298919061241a565b610831565b005b6102a7610891565b6040516102b491906123ff565b60405180910390f35b6102d760048036038101906102d2919061241a565b610897565b005b6102f360048036038101906102ee919061246d565b6108b7565b005b61030f600480360381019061030a919061216a565b6108d9565b60405161031c91906121d8565b60405180910390f35b61033f600480360381019061033a91906124b6565b61098b565b60405161034c91906123ff565b60405180910390f35b61035d610a43565b005b610367610a57565b60405161037491906121d8565b60405180910390f35b610385610a81565b6040516103929190612112565b60405180910390f35b6103b560048036038101906103b0919061216a565b610b13565b005b6103d160048036038101906103cc91906124e3565b610cf4565b005b6103ed60048036038101906103e891906125c4565b610d0a565b005b6103f7610d6c565b60405161040491906123ff565b60405180910390f35b610427600480360381019061042291906124b6565b610d71565b60405161043491906123ff565b60405180910390f35b6104576004803603810190610452919061216a565b610dc6565b6040516104649190612112565b60405180910390f35b610475610e1c565b60405161048291906123ff565b60405180910390f35b6104a560048036038101906104a09190612647565b610e21565b6040516104b29190612005565b60405180910390f35b6104c3610f21565b6040516104d09190612005565b60405180910390f35b6104f360048036038101906104ee91906124b6565b610f34565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105c057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105d057506105cf82610fb8565b5b9050919050565b6105df611022565b80600b60006101000a81548160ff02191690831515021790555050565b60606000805461060b906126b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610637906126b6565b80156106845780601f1061065957610100808354040283529160200191610684565b820191906000526020600020905b81548152906001019060200180831161066757829003601f168201915b5050505050905090565b6000610699826110a0565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106df826108d9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610750576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107479061275a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661076f6110eb565b73ffffffffffffffffffffffffffffffffffffffff16148061079e575061079d816107986110eb565b610e21565b5b6107dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d4906127ec565b60405180910390fd5b6107e783836110f3565b505050565b6107f4611022565b80600d6000848152602001908152602001600020908051906020019061081b929190611eae565b505050565b600061082c600a6111ac565b905090565b61084261083c6110eb565b826111ba565b610881576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108789061287e565b60405180910390fd5b61088c83838361124f565b505050565b61271181565b6108b283838360405180602001604052806000815250610d0a565b505050565b6108bf611022565b80600c90805190602001906108d5929190611eae565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610979906128ea565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156109fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f39061297c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a4b611022565b610a5560006114b6565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610a90906126b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610abc906126b6565b8015610b095780601f10610ade57610100808354040283529160200191610b09565b820191906000526020600020905b815481529060010190602001808311610aec57829003601f168201915b5050505050905090565b60026006541415610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b50906129e8565b60405180910390fd5b6002600681905550600b60009054906101000a900460ff16610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba790612a54565b60405180910390fd5b80610bba33610d71565b10610bce57610bc9338261157c565b610c09565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0090612ac0565b60405180910390fd5b612711600182610c17610820565b610c219190612b0f565b610c2b9190612b65565b10610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290612be5565b60405180910390fd5b6014811115610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690612c51565b60405180910390fd5b60005b81811015610ce857610ccb33610cc6610820565b6115d6565b610cd5600a6117b0565b8080610ce090612c71565b915050610cb2565b50600160068190555050565b610d06610cff6110eb565b83836117c6565b5050565b610d1b610d156110eb565b836111ba565b610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d519061287e565b60405180910390fd5b610d6684848484611933565b50505050565b601481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546002610dbf9190612b65565b9050919050565b60606000610dd38361198f565b90506000815111610df35760405180602001604052806000815250610e14565b80604051602001610e049190612d42565b6040516020818303038152906040525b915050919050565b600281565b6000807f000000000000000000000000000000000000000000000000000000000000000090508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401610e9791906121d8565b60206040518083038186803b158015610eaf57600080fd5b505afa158015610ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee79190612da2565b73ffffffffffffffffffffffffffffffffffffffff161415610f0d576001915050610f1b565b610f1784846119f7565b9150505b92915050565b600b60009054906101000a900460ff1681565b610f3c611022565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390612e41565b60405180910390fd5b610fb5816114b6565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61102a6110eb565b73ffffffffffffffffffffffffffffffffffffffff16611048610a57565b73ffffffffffffffffffffffffffffffffffffffff161461109e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109590612ead565b60405180910390fd5b565b6110a981611a8b565b6110e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110df906128ea565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611166836108d9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000806111c6836108d9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061120857506112078185610e21565b5b8061124657508373ffffffffffffffffffffffffffffffffffffffff1661122e8461068e565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661126f826108d9565b73ffffffffffffffffffffffffffffffffffffffff16146112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc90612f3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c90612fd1565b60405180910390fd5b611340838383611af7565b61134b6000826110f3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461139b9190612b65565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113f29190612b0f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46114b1838383611afc565b505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115cb9190612b0f565b925050819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163d9061303d565b60405180910390fd5b61164f81611a8b565b1561168f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611686906130a9565b60405180910390fd5b61169b60008383611af7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116eb9190612b0f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46117ac60008383611afc565b5050565b6001816000016000828254019250508190555050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c90613115565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119269190612005565b60405180910390a3505050565b61193e84848461124f565b61194a84848484611b01565b611989576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611980906131a7565b60405180910390fd5b50505050565b606061199a826110a0565b60006119a4611c98565b905060008151116119c457604051806020016040528060008152506119ef565b806119ce84611d2a565b6040516020016119df9291906131c7565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b6000611b228473ffffffffffffffffffffffffffffffffffffffff16611e8b565b15611c8b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611b4b6110eb565b8786866040518563ffffffff1660e01b8152600401611b6d9493929190613240565b602060405180830381600087803b158015611b8757600080fd5b505af1925050508015611bb857506040513d601f19601f82011682018060405250810190611bb591906132a1565b60015b611c3b573d8060008114611be8576040519150601f19603f3d011682016040523d82523d6000602084013e611bed565b606091505b50600081511415611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a906131a7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611c90565b600190505b949350505050565b6060600c8054611ca7906126b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd3906126b6565b8015611d205780601f10611cf557610100808354040283529160200191611d20565b820191906000526020600020905b815481529060010190602001808311611d0357829003601f168201915b5050505050905090565b60606000821415611d72576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611e86565b600082905060005b60008214611da4578080611d8d90612c71565b915050600a82611d9d91906132fd565b9150611d7a565b60008167ffffffffffffffff811115611dc057611dbf612269565b5b6040519080825280601f01601f191660200182016040528015611df25781602001600182028036833780820191505090505b5090505b60008514611e7f57600182611e0b9190612b65565b9150600a85611e1a919061332e565b6030611e269190612b0f565b60f81b818381518110611e3c57611e3b61335f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611e7891906132fd565b9450611df6565b8093505050505b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611eba906126b6565b90600052602060002090601f016020900481019282611edc5760008555611f23565b82601f10611ef557805160ff1916838001178555611f23565b82800160010185558215611f23579182015b82811115611f22578251825591602001919060010190611f07565b5b509050611f309190611f34565b5090565b5b80821115611f4d576000816000905550600101611f35565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611f9a81611f65565b8114611fa557600080fd5b50565b600081359050611fb781611f91565b92915050565b600060208284031215611fd357611fd2611f5b565b5b6000611fe184828501611fa8565b91505092915050565b60008115159050919050565b611fff81611fea565b82525050565b600060208201905061201a6000830184611ff6565b92915050565b61202981611fea565b811461203457600080fd5b50565b60008135905061204681612020565b92915050565b60006020828403121561206257612061611f5b565b5b600061207084828501612037565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156120b3578082015181840152602081019050612098565b838111156120c2576000848401525b50505050565b6000601f19601f8301169050919050565b60006120e482612079565b6120ee8185612084565b93506120fe818560208601612095565b612107816120c8565b840191505092915050565b6000602082019050818103600083015261212c81846120d9565b905092915050565b6000819050919050565b61214781612134565b811461215257600080fd5b50565b6000813590506121648161213e565b92915050565b6000602082840312156121805761217f611f5b565b5b600061218e84828501612155565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006121c282612197565b9050919050565b6121d2816121b7565b82525050565b60006020820190506121ed60008301846121c9565b92915050565b6121fc816121b7565b811461220757600080fd5b50565b600081359050612219816121f3565b92915050565b6000806040838503121561223657612235611f5b565b5b60006122448582860161220a565b925050602061225585828601612155565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122a1826120c8565b810181811067ffffffffffffffff821117156122c0576122bf612269565b5b80604052505050565b60006122d3611f51565b90506122df8282612298565b919050565b600067ffffffffffffffff8211156122ff576122fe612269565b5b612308826120c8565b9050602081019050919050565b82818337600083830152505050565b6000612337612332846122e4565b6122c9565b90508281526020810184848401111561235357612352612264565b5b61235e848285612315565b509392505050565b600082601f83011261237b5761237a61225f565b5b813561238b848260208601612324565b91505092915050565b600080604083850312156123ab576123aa611f5b565b5b60006123b985828601612155565b925050602083013567ffffffffffffffff8111156123da576123d9611f60565b5b6123e685828601612366565b9150509250929050565b6123f981612134565b82525050565b600060208201905061241460008301846123f0565b92915050565b60008060006060848603121561243357612432611f5b565b5b60006124418682870161220a565b93505060206124528682870161220a565b925050604061246386828701612155565b9150509250925092565b60006020828403121561248357612482611f5b565b5b600082013567ffffffffffffffff8111156124a1576124a0611f60565b5b6124ad84828501612366565b91505092915050565b6000602082840312156124cc576124cb611f5b565b5b60006124da8482850161220a565b91505092915050565b600080604083850312156124fa576124f9611f5b565b5b60006125088582860161220a565b925050602061251985828601612037565b9150509250929050565b600067ffffffffffffffff82111561253e5761253d612269565b5b612547826120c8565b9050602081019050919050565b600061256761256284612523565b6122c9565b90508281526020810184848401111561258357612582612264565b5b61258e848285612315565b509392505050565b600082601f8301126125ab576125aa61225f565b5b81356125bb848260208601612554565b91505092915050565b600080600080608085870312156125de576125dd611f5b565b5b60006125ec8782880161220a565b94505060206125fd8782880161220a565b935050604061260e87828801612155565b925050606085013567ffffffffffffffff81111561262f5761262e611f60565b5b61263b87828801612596565b91505092959194509250565b6000806040838503121561265e5761265d611f5b565b5b600061266c8582860161220a565b925050602061267d8582860161220a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806126ce57607f821691505b602082108114156126e2576126e1612687565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612744602183612084565b915061274f826126e8565b604082019050919050565b6000602082019050818103600083015261277381612737565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b60006127d6603e83612084565b91506127e18261277a565b604082019050919050565b60006020820190508181036000830152612805816127c9565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612868602e83612084565b91506128738261280c565b604082019050919050565b600060208201905081810360008301526128978161285b565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006128d4601883612084565b91506128df8261289e565b602082019050919050565b60006020820190508181036000830152612903816128c7565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000612966602983612084565b91506129718261290a565b604082019050919050565b6000602082019050818103600083015261299581612959565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006129d2601f83612084565b91506129dd8261299c565b602082019050919050565b60006020820190508181036000830152612a01816129c5565b9050919050565b7f53616c65206e6f74206163746976650000000000000000000000000000000000600082015250565b6000612a3e600f83612084565b9150612a4982612a08565b602082019050919050565b60006020820190508181036000830152612a6d81612a31565b9050919050565b7f4d696e74696e67206c696d697420657863656564656400000000000000000000600082015250565b6000612aaa601683612084565b9150612ab582612a74565b602082019050919050565b60006020820190508181036000830152612ad981612a9d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b1a82612134565b9150612b2583612134565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b5a57612b59612ae0565b5b828201905092915050565b6000612b7082612134565b9150612b7b83612134565b925082821015612b8e57612b8d612ae0565b5b828203905092915050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b6000612bcf601283612084565b9150612bda82612b99565b602082019050919050565b60006020820190508181036000830152612bfe81612bc2565b9050919050565b7f4d696e74206174206d6f737420323020617420612074696d6500000000000000600082015250565b6000612c3b601983612084565b9150612c4682612c05565b602082019050919050565b60006020820190508181036000830152612c6a81612c2e565b9050919050565b6000612c7c82612134565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612caf57612cae612ae0565b5b600182019050919050565b600081905092915050565b6000612cd082612079565b612cda8185612cba565b9350612cea818560208601612095565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000612d2c600583612cba565b9150612d3782612cf6565b600582019050919050565b6000612d4e8284612cc5565b9150612d5982612d1f565b915081905092915050565b6000612d6f826121b7565b9050919050565b612d7f81612d64565b8114612d8a57600080fd5b50565b600081519050612d9c81612d76565b92915050565b600060208284031215612db857612db7611f5b565b5b6000612dc684828501612d8d565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612e2b602683612084565b9150612e3682612dcf565b604082019050919050565b60006020820190508181036000830152612e5a81612e1e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e97602083612084565b9150612ea282612e61565b602082019050919050565b60006020820190508181036000830152612ec681612e8a565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000612f29602583612084565b9150612f3482612ecd565b604082019050919050565b60006020820190508181036000830152612f5881612f1c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612fbb602483612084565b9150612fc682612f5f565b604082019050919050565b60006020820190508181036000830152612fea81612fae565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613027602083612084565b915061303282612ff1565b602082019050919050565b600060208201905081810360008301526130568161301a565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613093601c83612084565b915061309e8261305d565b602082019050919050565b600060208201905081810360008301526130c281613086565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006130ff601983612084565b915061310a826130c9565b602082019050919050565b6000602082019050818103600083015261312e816130f2565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613191603283612084565b915061319c82613135565b604082019050919050565b600060208201905081810360008301526131c081613184565b9050919050565b60006131d38285612cc5565b91506131df8284612cc5565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000613212826131eb565b61321c81856131f6565b935061322c818560208601612095565b613235816120c8565b840191505092915050565b600060808201905061325560008301876121c9565b61326260208301866121c9565b61326f60408301856123f0565b81810360608301526132818184613207565b905095945050505050565b60008151905061329b81611f91565b92915050565b6000602082840312156132b7576132b6611f5b565b5b60006132c58482850161328c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061330882612134565b915061331383612134565b925082613323576133226132ce565b5b828204905092915050565b600061333982612134565b915061334483612134565b925082613354576133536132ce565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea264697066735822122006ad44f63f033151d9e940bcbe5049d37e9ddabf64f8fdc87e01184ebff1440864736f6c634300080900330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000bc97ce3c4415dcc893f900aa655eafc7509717e80000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d543969463932414868624c7843437041376941476177456856694d4474426a746454614b66456b6e4e58626a2f00000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061018e5760003560e01c8063715018a6116100de578063b8fc105111610097578063d6c336ed11610071578063d6c336ed1461046d578063e985e9c51461048b578063eb8d2444146104bb578063f2fde38b146104d95761018e565b8063b8fc1051146103ef578063bb660c0a1461040d578063c87b56dd1461043d5761018e565b8063715018a6146103555780638da5cb5b1461035f57806395d89b411461037d578063a0712d681461039b578063a22cb465146103b7578063b88d4fde146103d35761018e565b806318160ddd1161014b57806342842e0e1161012557806342842e0e146102bd57806355f804b3146102d95780636352211e146102f557806370a08231146103255761018e565b806318160ddd1461026557806323b872dd1461028357806332cb6b0c1461029f5761018e565b806301ffc9a71461019357806302c88989146101c357806306fdde03146101df578063081812fc146101fd578063095ea7b31461022d578063162094c414610249575b600080fd5b6101ad60048036038101906101a89190611fbd565b6104f5565b6040516101ba9190612005565b60405180910390f35b6101dd60048036038101906101d8919061204c565b6105d7565b005b6101e76105fc565b6040516101f49190612112565b60405180910390f35b6102176004803603810190610212919061216a565b61068e565b60405161022491906121d8565b60405180910390f35b6102476004803603810190610242919061221f565b6106d4565b005b610263600480360381019061025e9190612394565b6107ec565b005b61026d610820565b60405161027a91906123ff565b60405180910390f35b61029d6004803603810190610298919061241a565b610831565b005b6102a7610891565b6040516102b491906123ff565b60405180910390f35b6102d760048036038101906102d2919061241a565b610897565b005b6102f360048036038101906102ee919061246d565b6108b7565b005b61030f600480360381019061030a919061216a565b6108d9565b60405161031c91906121d8565b60405180910390f35b61033f600480360381019061033a91906124b6565b61098b565b60405161034c91906123ff565b60405180910390f35b61035d610a43565b005b610367610a57565b60405161037491906121d8565b60405180910390f35b610385610a81565b6040516103929190612112565b60405180910390f35b6103b560048036038101906103b0919061216a565b610b13565b005b6103d160048036038101906103cc91906124e3565b610cf4565b005b6103ed60048036038101906103e891906125c4565b610d0a565b005b6103f7610d6c565b60405161040491906123ff565b60405180910390f35b610427600480360381019061042291906124b6565b610d71565b60405161043491906123ff565b60405180910390f35b6104576004803603810190610452919061216a565b610dc6565b6040516104649190612112565b60405180910390f35b610475610e1c565b60405161048291906123ff565b60405180910390f35b6104a560048036038101906104a09190612647565b610e21565b6040516104b29190612005565b60405180910390f35b6104c3610f21565b6040516104d09190612005565b60405180910390f35b6104f360048036038101906104ee91906124b6565b610f34565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105c057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105d057506105cf82610fb8565b5b9050919050565b6105df611022565b80600b60006101000a81548160ff02191690831515021790555050565b60606000805461060b906126b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610637906126b6565b80156106845780601f1061065957610100808354040283529160200191610684565b820191906000526020600020905b81548152906001019060200180831161066757829003601f168201915b5050505050905090565b6000610699826110a0565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106df826108d9565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610750576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107479061275a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661076f6110eb565b73ffffffffffffffffffffffffffffffffffffffff16148061079e575061079d816107986110eb565b610e21565b5b6107dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d4906127ec565b60405180910390fd5b6107e783836110f3565b505050565b6107f4611022565b80600d6000848152602001908152602001600020908051906020019061081b929190611eae565b505050565b600061082c600a6111ac565b905090565b61084261083c6110eb565b826111ba565b610881576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108789061287e565b60405180910390fd5b61088c83838361124f565b505050565b61271181565b6108b283838360405180602001604052806000815250610d0a565b505050565b6108bf611022565b80600c90805190602001906108d5929190611eae565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610979906128ea565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156109fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f39061297c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a4b611022565b610a5560006114b6565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610a90906126b6565b80601f0160208091040260200160405190810160405280929190818152602001828054610abc906126b6565b8015610b095780601f10610ade57610100808354040283529160200191610b09565b820191906000526020600020905b815481529060010190602001808311610aec57829003601f168201915b5050505050905090565b60026006541415610b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b50906129e8565b60405180910390fd5b6002600681905550600b60009054906101000a900460ff16610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba790612a54565b60405180910390fd5b80610bba33610d71565b10610bce57610bc9338261157c565b610c09565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0090612ac0565b60405180910390fd5b612711600182610c17610820565b610c219190612b0f565b610c2b9190612b65565b10610c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6290612be5565b60405180910390fd5b6014811115610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690612c51565b60405180910390fd5b60005b81811015610ce857610ccb33610cc6610820565b6115d6565b610cd5600a6117b0565b8080610ce090612c71565b915050610cb2565b50600160068190555050565b610d06610cff6110eb565b83836117c6565b5050565b610d1b610d156110eb565b836111ba565b610d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d519061287e565b60405180910390fd5b610d6684848484611933565b50505050565b601481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546002610dbf9190612b65565b9050919050565b60606000610dd38361198f565b90506000815111610df35760405180602001604052806000815250610e14565b80604051602001610e049190612d42565b6040516020818303038152906040525b915050919050565b600281565b6000807f000000000000000000000000bc97ce3c4415dcc893f900aa655eafc7509717e890508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401610e9791906121d8565b60206040518083038186803b158015610eaf57600080fd5b505afa158015610ec3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee79190612da2565b73ffffffffffffffffffffffffffffffffffffffff161415610f0d576001915050610f1b565b610f1784846119f7565b9150505b92915050565b600b60009054906101000a900460ff1681565b610f3c611022565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390612e41565b60405180910390fd5b610fb5816114b6565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61102a6110eb565b73ffffffffffffffffffffffffffffffffffffffff16611048610a57565b73ffffffffffffffffffffffffffffffffffffffff161461109e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109590612ead565b60405180910390fd5b565b6110a981611a8b565b6110e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110df906128ea565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611166836108d9565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000806111c6836108d9565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061120857506112078185610e21565b5b8061124657508373ffffffffffffffffffffffffffffffffffffffff1661122e8461068e565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661126f826108d9565b73ffffffffffffffffffffffffffffffffffffffff16146112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc90612f3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132c90612fd1565b60405180910390fd5b611340838383611af7565b61134b6000826110f3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461139b9190612b65565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113f29190612b0f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46114b1838383611afc565b505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115cb9190612b0f565b925050819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163d9061303d565b60405180910390fd5b61164f81611a8b565b1561168f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611686906130a9565b60405180910390fd5b61169b60008383611af7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116eb9190612b0f565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46117ac60008383611afc565b5050565b6001816000016000828254019250508190555050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182c90613115565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119269190612005565b60405180910390a3505050565b61193e84848461124f565b61194a84848484611b01565b611989576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611980906131a7565b60405180910390fd5b50505050565b606061199a826110a0565b60006119a4611c98565b905060008151116119c457604051806020016040528060008152506119ef565b806119ce84611d2a565b6040516020016119df9291906131c7565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b6000611b228473ffffffffffffffffffffffffffffffffffffffff16611e8b565b15611c8b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611b4b6110eb565b8786866040518563ffffffff1660e01b8152600401611b6d9493929190613240565b602060405180830381600087803b158015611b8757600080fd5b505af1925050508015611bb857506040513d601f19601f82011682018060405250810190611bb591906132a1565b60015b611c3b573d8060008114611be8576040519150601f19603f3d011682016040523d82523d6000602084013e611bed565b606091505b50600081511415611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a906131a7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611c90565b600190505b949350505050565b6060600c8054611ca7906126b6565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd3906126b6565b8015611d205780601f10611cf557610100808354040283529160200191611d20565b820191906000526020600020905b815481529060010190602001808311611d0357829003601f168201915b5050505050905090565b60606000821415611d72576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611e86565b600082905060005b60008214611da4578080611d8d90612c71565b915050600a82611d9d91906132fd565b9150611d7a565b60008167ffffffffffffffff811115611dc057611dbf612269565b5b6040519080825280601f01601f191660200182016040528015611df25781602001600182028036833780820191505090505b5090505b60008514611e7f57600182611e0b9190612b65565b9150600a85611e1a919061332e565b6030611e269190612b0f565b60f81b818381518110611e3c57611e3b61335f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611e7891906132fd565b9450611df6565b8093505050505b919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611eba906126b6565b90600052602060002090601f016020900481019282611edc5760008555611f23565b82601f10611ef557805160ff1916838001178555611f23565b82800160010185558215611f23579182015b82811115611f22578251825591602001919060010190611f07565b5b509050611f309190611f34565b5090565b5b80821115611f4d576000816000905550600101611f35565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611f9a81611f65565b8114611fa557600080fd5b50565b600081359050611fb781611f91565b92915050565b600060208284031215611fd357611fd2611f5b565b5b6000611fe184828501611fa8565b91505092915050565b60008115159050919050565b611fff81611fea565b82525050565b600060208201905061201a6000830184611ff6565b92915050565b61202981611fea565b811461203457600080fd5b50565b60008135905061204681612020565b92915050565b60006020828403121561206257612061611f5b565b5b600061207084828501612037565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156120b3578082015181840152602081019050612098565b838111156120c2576000848401525b50505050565b6000601f19601f8301169050919050565b60006120e482612079565b6120ee8185612084565b93506120fe818560208601612095565b612107816120c8565b840191505092915050565b6000602082019050818103600083015261212c81846120d9565b905092915050565b6000819050919050565b61214781612134565b811461215257600080fd5b50565b6000813590506121648161213e565b92915050565b6000602082840312156121805761217f611f5b565b5b600061218e84828501612155565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006121c282612197565b9050919050565b6121d2816121b7565b82525050565b60006020820190506121ed60008301846121c9565b92915050565b6121fc816121b7565b811461220757600080fd5b50565b600081359050612219816121f3565b92915050565b6000806040838503121561223657612235611f5b565b5b60006122448582860161220a565b925050602061225585828601612155565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122a1826120c8565b810181811067ffffffffffffffff821117156122c0576122bf612269565b5b80604052505050565b60006122d3611f51565b90506122df8282612298565b919050565b600067ffffffffffffffff8211156122ff576122fe612269565b5b612308826120c8565b9050602081019050919050565b82818337600083830152505050565b6000612337612332846122e4565b6122c9565b90508281526020810184848401111561235357612352612264565b5b61235e848285612315565b509392505050565b600082601f83011261237b5761237a61225f565b5b813561238b848260208601612324565b91505092915050565b600080604083850312156123ab576123aa611f5b565b5b60006123b985828601612155565b925050602083013567ffffffffffffffff8111156123da576123d9611f60565b5b6123e685828601612366565b9150509250929050565b6123f981612134565b82525050565b600060208201905061241460008301846123f0565b92915050565b60008060006060848603121561243357612432611f5b565b5b60006124418682870161220a565b93505060206124528682870161220a565b925050604061246386828701612155565b9150509250925092565b60006020828403121561248357612482611f5b565b5b600082013567ffffffffffffffff8111156124a1576124a0611f60565b5b6124ad84828501612366565b91505092915050565b6000602082840312156124cc576124cb611f5b565b5b60006124da8482850161220a565b91505092915050565b600080604083850312156124fa576124f9611f5b565b5b60006125088582860161220a565b925050602061251985828601612037565b9150509250929050565b600067ffffffffffffffff82111561253e5761253d612269565b5b612547826120c8565b9050602081019050919050565b600061256761256284612523565b6122c9565b90508281526020810184848401111561258357612582612264565b5b61258e848285612315565b509392505050565b600082601f8301126125ab576125aa61225f565b5b81356125bb848260208601612554565b91505092915050565b600080600080608085870312156125de576125dd611f5b565b5b60006125ec8782880161220a565b94505060206125fd8782880161220a565b935050604061260e87828801612155565b925050606085013567ffffffffffffffff81111561262f5761262e611f60565b5b61263b87828801612596565b91505092959194509250565b6000806040838503121561265e5761265d611f5b565b5b600061266c8582860161220a565b925050602061267d8582860161220a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806126ce57607f821691505b602082108114156126e2576126e1612687565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612744602183612084565b915061274f826126e8565b604082019050919050565b6000602082019050818103600083015261277381612737565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b60006127d6603e83612084565b91506127e18261277a565b604082019050919050565b60006020820190508181036000830152612805816127c9565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612868602e83612084565b91506128738261280c565b604082019050919050565b600060208201905081810360008301526128978161285b565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006128d4601883612084565b91506128df8261289e565b602082019050919050565b60006020820190508181036000830152612903816128c7565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000612966602983612084565b91506129718261290a565b604082019050919050565b6000602082019050818103600083015261299581612959565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006129d2601f83612084565b91506129dd8261299c565b602082019050919050565b60006020820190508181036000830152612a01816129c5565b9050919050565b7f53616c65206e6f74206163746976650000000000000000000000000000000000600082015250565b6000612a3e600f83612084565b9150612a4982612a08565b602082019050919050565b60006020820190508181036000830152612a6d81612a31565b9050919050565b7f4d696e74696e67206c696d697420657863656564656400000000000000000000600082015250565b6000612aaa601683612084565b9150612ab582612a74565b602082019050919050565b60006020820190508181036000830152612ad981612a9d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612b1a82612134565b9150612b2583612134565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612b5a57612b59612ae0565b5b828201905092915050565b6000612b7082612134565b9150612b7b83612134565b925082821015612b8e57612b8d612ae0565b5b828203905092915050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b6000612bcf601283612084565b9150612bda82612b99565b602082019050919050565b60006020820190508181036000830152612bfe81612bc2565b9050919050565b7f4d696e74206174206d6f737420323020617420612074696d6500000000000000600082015250565b6000612c3b601983612084565b9150612c4682612c05565b602082019050919050565b60006020820190508181036000830152612c6a81612c2e565b9050919050565b6000612c7c82612134565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612caf57612cae612ae0565b5b600182019050919050565b600081905092915050565b6000612cd082612079565b612cda8185612cba565b9350612cea818560208601612095565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000612d2c600583612cba565b9150612d3782612cf6565b600582019050919050565b6000612d4e8284612cc5565b9150612d5982612d1f565b915081905092915050565b6000612d6f826121b7565b9050919050565b612d7f81612d64565b8114612d8a57600080fd5b50565b600081519050612d9c81612d76565b92915050565b600060208284031215612db857612db7611f5b565b5b6000612dc684828501612d8d565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612e2b602683612084565b9150612e3682612dcf565b604082019050919050565b60006020820190508181036000830152612e5a81612e1e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612e97602083612084565b9150612ea282612e61565b602082019050919050565b60006020820190508181036000830152612ec681612e8a565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000612f29602583612084565b9150612f3482612ecd565b604082019050919050565b60006020820190508181036000830152612f5881612f1c565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612fbb602483612084565b9150612fc682612f5f565b604082019050919050565b60006020820190508181036000830152612fea81612fae565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613027602083612084565b915061303282612ff1565b602082019050919050565b600060208201905081810360008301526130568161301a565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613093601c83612084565b915061309e8261305d565b602082019050919050565b600060208201905081810360008301526130c281613086565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006130ff601983612084565b915061310a826130c9565b602082019050919050565b6000602082019050818103600083015261312e816130f2565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613191603283612084565b915061319c82613135565b604082019050919050565b600060208201905081810360008301526131c081613184565b9050919050565b60006131d38285612cc5565b91506131df8284612cc5565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000613212826131eb565b61321c81856131f6565b935061322c818560208601612095565b613235816120c8565b840191505092915050565b600060808201905061325560008301876121c9565b61326260208301866121c9565b61326f60408301856123f0565b81810360608301526132818184613207565b905095945050505050565b60008151905061329b81611f91565b92915050565b6000602082840312156132b7576132b6611f5b565b5b60006132c58482850161328c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061330882612134565b915061331383612134565b925082613323576133226132ce565b5b828204905092915050565b600061333982612134565b915061334483612134565b925082613354576133536132ce565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea264697066735822122006ad44f63f033151d9e940bcbe5049d37e9ddabf64f8fdc87e01184ebff1440864736f6c63430008090033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000bc97ce3c4415dcc893f900aa655eafc7509717e80000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d543969463932414868624c7843437041376941476177456856694d4474426a746454614b66456b6e4e58626a2f00000000000000000000

-----Decoded View---------------
Arg [0] : customBaseURI_ (string): ipfs://QmT9iF92AHhbLxCCpA7iAGawEhViMDtBjtdTaKfEknNXbj/
Arg [1] : proxyRegistryAddress_ (address): 0xbC97CE3c4415dCC893f900Aa655EaFC7509717E8

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000bc97ce3c4415dcc893f900aa655eafc7509717e8
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d543969463932414868624c784343704137694147617745
Arg [4] : 6856694d4474426a746454614b66456b6e4e58626a2f00000000000000000000


Deployed Bytecode Sourcemap

44552:2992:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31158:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46205:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32085:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33598:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33115:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46430:140;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46041:96;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34298:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45357:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34705:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46576:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31796:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31527:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11694:103;;;:::i;:::-;;11046:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32254:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45500:535;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33841:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34961:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45406:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45082:136;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46808:296;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45026:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47199:342;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46167:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11952:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31158:305;31260:4;31312:25;31297:40;;;:11;:40;;;;:105;;;;31369:33;31354:48;;;:11;:48;;;;31297:105;:158;;;;31419:36;31443:11;31419:23;:36::i;:::-;31297:158;31277:178;;31158:305;;;:::o;46205:105::-;10932:13;:11;:13::i;:::-;46291::::1;46276:12;;:28;;;;;;;;;;;;;;;;;;46205:105:::0;:::o;32085:100::-;32139:13;32172:5;32165:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32085:100;:::o;33598:171::-;33674:7;33694:23;33709:7;33694:14;:23::i;:::-;33737:15;:24;33753:7;33737:24;;;;;;;;;;;;;;;;;;;;;33730:31;;33598:171;;;:::o;33115:417::-;33196:13;33212:23;33227:7;33212:14;:23::i;:::-;33196:39;;33260:5;33254:11;;:2;:11;;;;33246:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33354:5;33338:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33363:37;33380:5;33387:12;:10;:12::i;:::-;33363:16;:37::i;:::-;33338:62;33316:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;33503:21;33512:2;33516:7;33503:8;:21::i;:::-;33185:347;33115:417;;:::o;46430:140::-;10932:13;:11;:13::i;:::-;46555:9:::1;46532:11;:20;46544:7;46532:20;;;;;;;;;;;:32;;;;;;;;;;;;:::i;:::-;;46430:140:::0;;:::o;46041:96::-;46085:7;46108:23;:13;:21;:23::i;:::-;46101:30;;46041:96;:::o;34298:336::-;34493:41;34512:12;:10;:12::i;:::-;34526:7;34493:18;:41::i;:::-;34485:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;34598:28;34608:4;34614:2;34618:7;34598:9;:28::i;:::-;34298:336;;;:::o;45357:42::-;45394:5;45357:42;:::o;34705:185::-;34843:39;34860:4;34866:2;34870:7;34843:39;;;;;;;;;;;;:16;:39::i;:::-;34705:185;;;:::o;46576:112::-;10932:13;:11;:13::i;:::-;46668:14:::1;46652:13;:30;;;;;;;;;;;;:::i;:::-;;46576:112:::0;:::o;31796:222::-;31868:7;31888:13;31904:7;:16;31912:7;31904:16;;;;;;;;;;;;;;;;;;;;;31888:32;;31956:1;31939:19;;:5;:19;;;;31931:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32005:5;31998:12;;;31796:222;;;:::o;31527:207::-;31599:7;31644:1;31627:19;;:5;:19;;;;31619:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31710:9;:16;31720:5;31710:16;;;;;;;;;;;;;;;;31703:23;;31527:207;;;:::o;11694:103::-;10932:13;:11;:13::i;:::-;11759:30:::1;11786:1;11759:18;:30::i;:::-;11694:103::o:0;11046:87::-;11092:7;11119:6;;;;;;;;;;;11112:13;;11046:87;:::o;32254:104::-;32310:13;32343:7;32336:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32254:104;:::o;45500:535::-;5474:1;6072:7;;:19;;6064:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;5474:1;6205:7;:18;;;;45564:12:::1;;;;;;;;;;;45556:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;45641:5;45609:28;45626:10;45609:16;:28::i;:::-;:37;45605:149;;45657:34;45673:10;45685:5;45657:15;:34::i;:::-;45605:149;;;45714:32;;;;;;;;;;:::i;:::-;;;;;;;;45605:149;45394:5;45794:1;45786:5;45770:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:25;;;;:::i;:::-;:38;45762:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;45446:2;45848:5;:22;;45840:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;45914:9;45909:121;45933:5;45929:1;:9;45909:121;;;45954:32;45960:10;45972:13;:11;:13::i;:::-;45954:5;:32::i;:::-;45997:25;:13;:23;:25::i;:::-;45940:3;;;;;:::i;:::-;;;;45909:121;;;;5430:1:::0;6384:7;:22;;;;45500:535;:::o;33841:155::-;33936:52;33955:12;:10;:12::i;:::-;33969:8;33979;33936:18;:52::i;:::-;33841:155;;:::o;34961:323::-;35135:41;35154:12;:10;:12::i;:::-;35168:7;35135:18;:41::i;:::-;35127:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;35238:38;35252:4;35258:2;35262:7;35271:4;35238:13;:38::i;:::-;34961:323;;;;:::o;45406:42::-;45446:2;45406:42;:::o;45082:136::-;45145:7;45192:12;:20;45205:6;45192:20;;;;;;;;;;;;;;;;45074:1;45168:44;;;;:::i;:::-;45161:51;;45082:136;;;:::o;46808:296::-;46878:13;46903:23;46929;46944:7;46929:14;:23::i;:::-;46903:49;;47009:1;46989:9;46983:23;:27;:113;;;;;;;;;;;;;;;;;47054:9;47037:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;46983:113;46963:133;;;46808:296;;;:::o;45026:49::-;45074:1;45026:49;:::o;47199:342::-;47308:4;47324:27;47368:20;47324:65;;47443:8;47402:49;;47410:13;:21;;;47432:5;47410:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47402:49;;;47398:83;;;47469:4;47462:11;;;;;47398:83;47496:39;47519:5;47526:8;47496:22;:39::i;:::-;47489:46;;;47199:342;;;;;:::o;46167:31::-;;;;;;;;;;;;;:::o;11952:201::-;10932:13;:11;:13::i;:::-;12061:1:::1;12041:22;;:8;:22;;;;12033:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12117:28;12136:8;12117:18;:28::i;:::-;11952:201:::0;:::o;23900:157::-;23985:4;24024:25;24009:40;;;:11;:40;;;;24002:47;;23900:157;;;:::o;11211:132::-;11286:12;:10;:12::i;:::-;11275:23;;:7;:5;:7::i;:::-;:23;;;11267:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11211:132::o;41573:135::-;41655:16;41663:7;41655;:16::i;:::-;41647:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;41573:135;:::o;9597:98::-;9650:7;9677:10;9670:17;;9597:98;:::o;40852:174::-;40954:2;40927:15;:24;40943:7;40927:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41010:7;41006:2;40972:46;;40981:23;40996:7;40981:14;:23::i;:::-;40972:46;;;;;;;;;;;;40852:174;;:::o;3069:114::-;3134:7;3161;:14;;;3154:21;;3069:114;;;:::o;37085:264::-;37178:4;37195:13;37211:23;37226:7;37211:14;:23::i;:::-;37195:39;;37264:5;37253:16;;:7;:16;;;:52;;;;37273:32;37290:5;37297:7;37273:16;:32::i;:::-;37253:52;:87;;;;37333:7;37309:31;;:20;37321:7;37309:11;:20::i;:::-;:31;;;37253:87;37245:96;;;37085:264;;;;:::o;40108:625::-;40267:4;40240:31;;:23;40255:7;40240:14;:23::i;:::-;:31;;;40232:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;40346:1;40332:16;;:2;:16;;;;40324:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40402:39;40423:4;40429:2;40433:7;40402:20;:39::i;:::-;40506:29;40523:1;40527:7;40506:8;:29::i;:::-;40567:1;40548:9;:15;40558:4;40548:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;40596:1;40579:9;:13;40589:2;40579:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40627:2;40608:7;:16;40616:7;40608:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40666:7;40662:2;40647:27;;40656:4;40647:27;;;;;;;;;;;;40687:38;40707:4;40713:2;40717:7;40687:19;:38::i;:::-;40108:625;;;:::o;12313:191::-;12387:16;12406:6;;;;;;;;;;;12387:25;;12432:8;12423:6;;:17;;;;;;;;;;;;;;;;;;12487:8;12456:40;;12477:8;12456:40;;;;;;;;;;;;12376:128;12313:191;:::o;45224:106::-;45319:5;45295:12;:20;45308:6;45295:20;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;45224:106;;:::o;38683:439::-;38777:1;38763:16;;:2;:16;;;;38755:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38836:16;38844:7;38836;:16::i;:::-;38835:17;38827:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38898:45;38927:1;38931:2;38935:7;38898:20;:45::i;:::-;38973:1;38956:9;:13;38966:2;38956:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39004:2;38985:7;:16;38993:7;38985:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39049:7;39045:2;39024:33;;39041:1;39024:33;;;;;;;;;;;;39070:44;39098:1;39102:2;39106:7;39070:19;:44::i;:::-;38683:439;;:::o;3191:127::-;3298:1;3280:7;:14;;;:19;;;;;;;;;;;3191:127;:::o;41169:315::-;41324:8;41315:17;;:5;:17;;;;41307:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;41411:8;41373:18;:25;41392:5;41373:25;;;;;;;;;;;;;;;:35;41399:8;41373:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;41457:8;41435:41;;41450:5;41435:41;;;41467:8;41435:41;;;;;;:::i;:::-;;;;;;;;41169:315;;;:::o;36165:313::-;36321:28;36331:4;36337:2;36341:7;36321:9;:28::i;:::-;36368:47;36391:4;36397:2;36401:7;36410:4;36368:22;:47::i;:::-;36360:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;36165:313;;;;:::o;32429:281::-;32502:13;32528:23;32543:7;32528:14;:23::i;:::-;32564:21;32588:10;:8;:10::i;:::-;32564:34;;32640:1;32622:7;32616:21;:25;:86;;;;;;;;;;;;;;;;;32668:7;32677:18;:7;:16;:18::i;:::-;32651:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32616:86;32609:93;;;32429:281;;;:::o;34067:164::-;34164:4;34188:18;:25;34207:5;34188:25;;;;;;;;;;;;;;;:35;34214:8;34188:35;;;;;;;;;;;;;;;;;;;;;;;;;34181:42;;34067:164;;;;:::o;36791:127::-;36856:4;36908:1;36880:30;;:7;:16;36888:7;36880:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36873:37;;36791:127;;;:::o;43697:126::-;;;;:::o;44208:125::-;;;;:::o;42272:853::-;42426:4;42447:15;:2;:13;;;:15::i;:::-;42443:675;;;42499:2;42483:36;;;42520:12;:10;:12::i;:::-;42534:4;42540:7;42549:4;42483:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42479:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42741:1;42724:6;:13;:18;42720:328;;;42767:60;;;;;;;;;;:::i;:::-;;;;;;;;42720:328;42998:6;42992:13;42983:6;42979:2;42975:15;42968:38;42479:584;42615:41;;;42605:51;;;:6;:51;;;;42598:58;;;;;42443:675;43102:4;43095:11;;42272:853;;;;;;;:::o;46694:108::-;46754:13;46783;46776:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46694:108;:::o;6851:723::-;6907:13;7137:1;7128:5;:10;7124:53;;;7155:10;;;;;;;;;;;;;;;;;;;;;7124:53;7187:12;7202:5;7187:20;;7218:14;7243:78;7258:1;7250:4;:9;7243:78;;7276:8;;;;;:::i;:::-;;;;7307:2;7299:10;;;;;:::i;:::-;;;7243:78;;;7331:19;7363:6;7353:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7331:39;;7381:154;7397:1;7388:5;:10;7381:154;;7425:1;7415:11;;;;;:::i;:::-;;;7492:2;7484:5;:10;;;;:::i;:::-;7471:2;:24;;;;:::i;:::-;7458:39;;7441:6;7448;7441:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7521:2;7512:11;;;;;:::i;:::-;;;7381:154;;;7559:6;7545:21;;;;;6851:723;;;;:::o;13744:326::-;13804:4;14061:1;14039:7;:19;;;:23;14032:30;;13744:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:117::-;5637:1;5634;5627:12;5651:117;5760:1;5757;5750:12;5774:180;5822:77;5819:1;5812:88;5919:4;5916:1;5909:15;5943:4;5940:1;5933:15;5960:281;6043:27;6065:4;6043:27;:::i;:::-;6035:6;6031:40;6173:6;6161:10;6158:22;6137:18;6125:10;6122:34;6119:62;6116:88;;;6184:18;;:::i;:::-;6116:88;6224:10;6220:2;6213:22;6003:238;5960:281;;:::o;6247:129::-;6281:6;6308:20;;:::i;:::-;6298:30;;6337:33;6365:4;6357:6;6337:33;:::i;:::-;6247:129;;;:::o;6382:308::-;6444:4;6534:18;6526:6;6523:30;6520:56;;;6556:18;;:::i;:::-;6520:56;6594:29;6616:6;6594:29;:::i;:::-;6586:37;;6678:4;6672;6668:15;6660:23;;6382:308;;;:::o;6696:154::-;6780:6;6775:3;6770;6757:30;6842:1;6833:6;6828:3;6824:16;6817:27;6696:154;;;:::o;6856:412::-;6934:5;6959:66;6975:49;7017:6;6975:49;:::i;:::-;6959:66;:::i;:::-;6950:75;;7048:6;7041:5;7034:21;7086:4;7079:5;7075:16;7124:3;7115:6;7110:3;7106:16;7103:25;7100:112;;;7131:79;;:::i;:::-;7100:112;7221:41;7255:6;7250:3;7245;7221:41;:::i;:::-;6940:328;6856:412;;;;;:::o;7288:340::-;7344:5;7393:3;7386:4;7378:6;7374:17;7370:27;7360:122;;7401:79;;:::i;:::-;7360:122;7518:6;7505:20;7543:79;7618:3;7610:6;7603:4;7595:6;7591:17;7543:79;:::i;:::-;7534:88;;7350:278;7288:340;;;;:::o;7634:654::-;7712:6;7720;7769:2;7757:9;7748:7;7744:23;7740:32;7737:119;;;7775:79;;:::i;:::-;7737:119;7895:1;7920:53;7965:7;7956:6;7945:9;7941:22;7920:53;:::i;:::-;7910:63;;7866:117;8050:2;8039:9;8035:18;8022:32;8081:18;8073:6;8070:30;8067:117;;;8103:79;;:::i;:::-;8067:117;8208:63;8263:7;8254:6;8243:9;8239:22;8208:63;:::i;:::-;8198:73;;7993:288;7634:654;;;;;:::o;8294:118::-;8381:24;8399:5;8381:24;:::i;:::-;8376:3;8369:37;8294:118;;:::o;8418:222::-;8511:4;8549:2;8538:9;8534:18;8526:26;;8562:71;8630:1;8619:9;8615:17;8606:6;8562:71;:::i;:::-;8418:222;;;;:::o;8646:619::-;8723:6;8731;8739;8788:2;8776:9;8767:7;8763:23;8759:32;8756:119;;;8794:79;;:::i;:::-;8756:119;8914:1;8939:53;8984:7;8975:6;8964:9;8960:22;8939:53;:::i;:::-;8929:63;;8885:117;9041:2;9067:53;9112:7;9103:6;9092:9;9088:22;9067:53;:::i;:::-;9057:63;;9012:118;9169:2;9195:53;9240:7;9231:6;9220:9;9216:22;9195:53;:::i;:::-;9185:63;;9140:118;8646:619;;;;;:::o;9271:509::-;9340:6;9389:2;9377:9;9368:7;9364:23;9360:32;9357:119;;;9395:79;;:::i;:::-;9357:119;9543:1;9532:9;9528:17;9515:31;9573:18;9565:6;9562:30;9559:117;;;9595:79;;:::i;:::-;9559:117;9700:63;9755:7;9746:6;9735:9;9731:22;9700:63;:::i;:::-;9690:73;;9486:287;9271:509;;;;:::o;9786:329::-;9845:6;9894:2;9882:9;9873:7;9869:23;9865:32;9862:119;;;9900:79;;:::i;:::-;9862:119;10020:1;10045:53;10090:7;10081:6;10070:9;10066:22;10045:53;:::i;:::-;10035:63;;9991:117;9786:329;;;;:::o;10121:468::-;10186:6;10194;10243:2;10231:9;10222:7;10218:23;10214:32;10211:119;;;10249:79;;:::i;:::-;10211:119;10369:1;10394:53;10439:7;10430:6;10419:9;10415:22;10394:53;:::i;:::-;10384:63;;10340:117;10496:2;10522:50;10564:7;10555:6;10544:9;10540:22;10522:50;:::i;:::-;10512:60;;10467:115;10121:468;;;;;:::o;10595:307::-;10656:4;10746:18;10738:6;10735:30;10732:56;;;10768:18;;:::i;:::-;10732:56;10806:29;10828:6;10806:29;:::i;:::-;10798:37;;10890:4;10884;10880:15;10872:23;;10595:307;;;:::o;10908:410::-;10985:5;11010:65;11026:48;11067:6;11026:48;:::i;:::-;11010:65;:::i;:::-;11001:74;;11098:6;11091:5;11084:21;11136:4;11129:5;11125:16;11174:3;11165:6;11160:3;11156:16;11153:25;11150:112;;;11181:79;;:::i;:::-;11150:112;11271:41;11305:6;11300:3;11295;11271:41;:::i;:::-;10991:327;10908:410;;;;;:::o;11337:338::-;11392:5;11441:3;11434:4;11426:6;11422:17;11418:27;11408:122;;11449:79;;:::i;:::-;11408:122;11566:6;11553:20;11591:78;11665:3;11657:6;11650:4;11642:6;11638:17;11591:78;:::i;:::-;11582:87;;11398:277;11337:338;;;;:::o;11681:943::-;11776:6;11784;11792;11800;11849:3;11837:9;11828:7;11824:23;11820:33;11817:120;;;11856:79;;:::i;:::-;11817:120;11976:1;12001:53;12046:7;12037:6;12026:9;12022:22;12001:53;:::i;:::-;11991:63;;11947:117;12103:2;12129:53;12174:7;12165:6;12154:9;12150:22;12129:53;:::i;:::-;12119:63;;12074:118;12231:2;12257:53;12302:7;12293:6;12282:9;12278:22;12257:53;:::i;:::-;12247:63;;12202:118;12387:2;12376:9;12372:18;12359:32;12418:18;12410:6;12407:30;12404:117;;;12440:79;;:::i;:::-;12404:117;12545:62;12599:7;12590:6;12579:9;12575:22;12545:62;:::i;:::-;12535:72;;12330:287;11681:943;;;;;;;:::o;12630:474::-;12698:6;12706;12755:2;12743:9;12734:7;12730:23;12726:32;12723:119;;;12761:79;;:::i;:::-;12723:119;12881:1;12906:53;12951:7;12942:6;12931:9;12927:22;12906:53;:::i;:::-;12896:63;;12852:117;13008:2;13034:53;13079:7;13070:6;13059:9;13055:22;13034:53;:::i;:::-;13024:63;;12979:118;12630:474;;;;;:::o;13110:180::-;13158:77;13155:1;13148:88;13255:4;13252:1;13245:15;13279:4;13276:1;13269:15;13296:320;13340:6;13377:1;13371:4;13367:12;13357:22;;13424:1;13418:4;13414:12;13445:18;13435:81;;13501:4;13493:6;13489:17;13479:27;;13435:81;13563:2;13555:6;13552:14;13532:18;13529:38;13526:84;;;13582:18;;:::i;:::-;13526:84;13347:269;13296:320;;;:::o;13622:220::-;13762:34;13758:1;13750:6;13746:14;13739:58;13831:3;13826:2;13818:6;13814:15;13807:28;13622:220;:::o;13848:366::-;13990:3;14011:67;14075:2;14070:3;14011:67;:::i;:::-;14004:74;;14087:93;14176:3;14087:93;:::i;:::-;14205:2;14200:3;14196:12;14189:19;;13848:366;;;:::o;14220:419::-;14386:4;14424:2;14413:9;14409:18;14401:26;;14473:9;14467:4;14463:20;14459:1;14448:9;14444:17;14437:47;14501:131;14627:4;14501:131;:::i;:::-;14493:139;;14220:419;;;:::o;14645:249::-;14785:34;14781:1;14773:6;14769:14;14762:58;14854:32;14849:2;14841:6;14837:15;14830:57;14645:249;:::o;14900:366::-;15042:3;15063:67;15127:2;15122:3;15063:67;:::i;:::-;15056:74;;15139:93;15228:3;15139:93;:::i;:::-;15257:2;15252:3;15248:12;15241:19;;14900:366;;;:::o;15272:419::-;15438:4;15476:2;15465:9;15461:18;15453:26;;15525:9;15519:4;15515:20;15511:1;15500:9;15496:17;15489:47;15553:131;15679:4;15553:131;:::i;:::-;15545:139;;15272:419;;;:::o;15697:233::-;15837:34;15833:1;15825:6;15821:14;15814:58;15906:16;15901:2;15893:6;15889:15;15882:41;15697:233;:::o;15936:366::-;16078:3;16099:67;16163:2;16158:3;16099:67;:::i;:::-;16092:74;;16175:93;16264:3;16175:93;:::i;:::-;16293:2;16288:3;16284:12;16277:19;;15936:366;;;:::o;16308:419::-;16474:4;16512:2;16501:9;16497:18;16489:26;;16561:9;16555:4;16551:20;16547:1;16536:9;16532:17;16525:47;16589:131;16715:4;16589:131;:::i;:::-;16581:139;;16308:419;;;:::o;16733:174::-;16873:26;16869:1;16861:6;16857:14;16850:50;16733:174;:::o;16913:366::-;17055:3;17076:67;17140:2;17135:3;17076:67;:::i;:::-;17069:74;;17152:93;17241:3;17152:93;:::i;:::-;17270:2;17265:3;17261:12;17254:19;;16913:366;;;:::o;17285:419::-;17451:4;17489:2;17478:9;17474:18;17466:26;;17538:9;17532:4;17528:20;17524:1;17513:9;17509:17;17502:47;17566:131;17692:4;17566:131;:::i;:::-;17558:139;;17285:419;;;:::o;17710:228::-;17850:34;17846:1;17838:6;17834:14;17827:58;17919:11;17914:2;17906:6;17902:15;17895:36;17710:228;:::o;17944:366::-;18086:3;18107:67;18171:2;18166:3;18107:67;:::i;:::-;18100:74;;18183:93;18272:3;18183:93;:::i;:::-;18301:2;18296:3;18292:12;18285:19;;17944:366;;;:::o;18316:419::-;18482:4;18520:2;18509:9;18505:18;18497:26;;18569:9;18563:4;18559:20;18555:1;18544:9;18540:17;18533:47;18597:131;18723:4;18597:131;:::i;:::-;18589:139;;18316:419;;;:::o;18741:181::-;18881:33;18877:1;18869:6;18865:14;18858:57;18741:181;:::o;18928:366::-;19070:3;19091:67;19155:2;19150:3;19091:67;:::i;:::-;19084:74;;19167:93;19256:3;19167:93;:::i;:::-;19285:2;19280:3;19276:12;19269:19;;18928:366;;;:::o;19300:419::-;19466:4;19504:2;19493:9;19489:18;19481:26;;19553:9;19547:4;19543:20;19539:1;19528:9;19524:17;19517:47;19581:131;19707:4;19581:131;:::i;:::-;19573:139;;19300:419;;;:::o;19725:165::-;19865:17;19861:1;19853:6;19849:14;19842:41;19725:165;:::o;19896:366::-;20038:3;20059:67;20123:2;20118:3;20059:67;:::i;:::-;20052:74;;20135:93;20224:3;20135:93;:::i;:::-;20253:2;20248:3;20244:12;20237:19;;19896:366;;;:::o;20268:419::-;20434:4;20472:2;20461:9;20457:18;20449:26;;20521:9;20515:4;20511:20;20507:1;20496:9;20492:17;20485:47;20549:131;20675:4;20549:131;:::i;:::-;20541:139;;20268:419;;;:::o;20693:172::-;20833:24;20829:1;20821:6;20817:14;20810:48;20693:172;:::o;20871:366::-;21013:3;21034:67;21098:2;21093:3;21034:67;:::i;:::-;21027:74;;21110:93;21199:3;21110:93;:::i;:::-;21228:2;21223:3;21219:12;21212:19;;20871:366;;;:::o;21243:419::-;21409:4;21447:2;21436:9;21432:18;21424:26;;21496:9;21490:4;21486:20;21482:1;21471:9;21467:17;21460:47;21524:131;21650:4;21524:131;:::i;:::-;21516:139;;21243:419;;;:::o;21668:180::-;21716:77;21713:1;21706:88;21813:4;21810:1;21803:15;21837:4;21834:1;21827:15;21854:305;21894:3;21913:20;21931:1;21913:20;:::i;:::-;21908:25;;21947:20;21965:1;21947:20;:::i;:::-;21942:25;;22101:1;22033:66;22029:74;22026:1;22023:81;22020:107;;;22107:18;;:::i;:::-;22020:107;22151:1;22148;22144:9;22137:16;;21854:305;;;;:::o;22165:191::-;22205:4;22225:20;22243:1;22225:20;:::i;:::-;22220:25;;22259:20;22277:1;22259:20;:::i;:::-;22254:25;;22298:1;22295;22292:8;22289:34;;;22303:18;;:::i;:::-;22289:34;22348:1;22345;22341:9;22333:17;;22165:191;;;;:::o;22362:168::-;22502:20;22498:1;22490:6;22486:14;22479:44;22362:168;:::o;22536:366::-;22678:3;22699:67;22763:2;22758:3;22699:67;:::i;:::-;22692:74;;22775:93;22864:3;22775:93;:::i;:::-;22893:2;22888:3;22884:12;22877:19;;22536:366;;;:::o;22908:419::-;23074:4;23112:2;23101:9;23097:18;23089:26;;23161:9;23155:4;23151:20;23147:1;23136:9;23132:17;23125:47;23189:131;23315:4;23189:131;:::i;:::-;23181:139;;22908:419;;;:::o;23333:175::-;23473:27;23469:1;23461:6;23457:14;23450:51;23333:175;:::o;23514:366::-;23656:3;23677:67;23741:2;23736:3;23677:67;:::i;:::-;23670:74;;23753:93;23842:3;23753:93;:::i;:::-;23871:2;23866:3;23862:12;23855:19;;23514:366;;;:::o;23886:419::-;24052:4;24090:2;24079:9;24075:18;24067:26;;24139:9;24133:4;24129:20;24125:1;24114:9;24110:17;24103:47;24167:131;24293:4;24167:131;:::i;:::-;24159:139;;23886:419;;;:::o;24311:233::-;24350:3;24373:24;24391:5;24373:24;:::i;:::-;24364:33;;24419:66;24412:5;24409:77;24406:103;;;24489:18;;:::i;:::-;24406:103;24536:1;24529:5;24525:13;24518:20;;24311:233;;;:::o;24550:148::-;24652:11;24689:3;24674:18;;24550:148;;;;:::o;24704:377::-;24810:3;24838:39;24871:5;24838:39;:::i;:::-;24893:89;24975:6;24970:3;24893:89;:::i;:::-;24886:96;;24991:52;25036:6;25031:3;25024:4;25017:5;25013:16;24991:52;:::i;:::-;25068:6;25063:3;25059:16;25052:23;;24814:267;24704:377;;;;:::o;25087:155::-;25227:7;25223:1;25215:6;25211:14;25204:31;25087:155;:::o;25248:400::-;25408:3;25429:84;25511:1;25506:3;25429:84;:::i;:::-;25422:91;;25522:93;25611:3;25522:93;:::i;:::-;25640:1;25635:3;25631:11;25624:18;;25248:400;;;:::o;25654:541::-;25887:3;25909:95;26000:3;25991:6;25909:95;:::i;:::-;25902:102;;26021:148;26165:3;26021:148;:::i;:::-;26014:155;;26186:3;26179:10;;25654:541;;;;:::o;26201:125::-;26267:7;26296:24;26314:5;26296:24;:::i;:::-;26285:35;;26201:125;;;:::o;26332:180::-;26434:53;26481:5;26434:53;:::i;:::-;26427:5;26424:64;26414:92;;26502:1;26499;26492:12;26414:92;26332:180;:::o;26518:201::-;26604:5;26635:6;26629:13;26620:22;;26651:62;26707:5;26651:62;:::i;:::-;26518:201;;;;:::o;26725:409::-;26824:6;26873:2;26861:9;26852:7;26848:23;26844:32;26841:119;;;26879:79;;:::i;:::-;26841:119;26999:1;27024:93;27109:7;27100:6;27089:9;27085:22;27024:93;:::i;:::-;27014:103;;26970:157;26725:409;;;;:::o;27140:225::-;27280:34;27276:1;27268:6;27264:14;27257:58;27349:8;27344:2;27336:6;27332:15;27325:33;27140:225;:::o;27371:366::-;27513:3;27534:67;27598:2;27593:3;27534:67;:::i;:::-;27527:74;;27610:93;27699:3;27610:93;:::i;:::-;27728:2;27723:3;27719:12;27712:19;;27371:366;;;:::o;27743:419::-;27909:4;27947:2;27936:9;27932:18;27924:26;;27996:9;27990:4;27986:20;27982:1;27971:9;27967:17;27960:47;28024:131;28150:4;28024:131;:::i;:::-;28016:139;;27743:419;;;:::o;28168:182::-;28308:34;28304:1;28296:6;28292:14;28285:58;28168:182;:::o;28356:366::-;28498:3;28519:67;28583:2;28578:3;28519:67;:::i;:::-;28512:74;;28595:93;28684:3;28595:93;:::i;:::-;28713:2;28708:3;28704:12;28697:19;;28356:366;;;:::o;28728:419::-;28894:4;28932:2;28921:9;28917:18;28909:26;;28981:9;28975:4;28971:20;28967:1;28956:9;28952:17;28945:47;29009:131;29135:4;29009:131;:::i;:::-;29001:139;;28728:419;;;:::o;29153:224::-;29293:34;29289:1;29281:6;29277:14;29270:58;29362:7;29357:2;29349:6;29345:15;29338:32;29153:224;:::o;29383:366::-;29525:3;29546:67;29610:2;29605:3;29546:67;:::i;:::-;29539:74;;29622:93;29711:3;29622:93;:::i;:::-;29740:2;29735:3;29731:12;29724:19;;29383:366;;;:::o;29755:419::-;29921:4;29959:2;29948:9;29944:18;29936:26;;30008:9;30002:4;29998:20;29994:1;29983:9;29979:17;29972:47;30036:131;30162:4;30036:131;:::i;:::-;30028:139;;29755:419;;;:::o;30180:223::-;30320:34;30316:1;30308:6;30304:14;30297:58;30389:6;30384:2;30376:6;30372:15;30365:31;30180:223;:::o;30409:366::-;30551:3;30572:67;30636:2;30631:3;30572:67;:::i;:::-;30565:74;;30648:93;30737:3;30648:93;:::i;:::-;30766:2;30761:3;30757:12;30750:19;;30409:366;;;:::o;30781:419::-;30947:4;30985:2;30974:9;30970:18;30962:26;;31034:9;31028:4;31024:20;31020:1;31009:9;31005:17;30998:47;31062:131;31188:4;31062:131;:::i;:::-;31054:139;;30781:419;;;:::o;31206:182::-;31346:34;31342:1;31334:6;31330:14;31323:58;31206:182;:::o;31394:366::-;31536:3;31557:67;31621:2;31616:3;31557:67;:::i;:::-;31550:74;;31633:93;31722:3;31633:93;:::i;:::-;31751:2;31746:3;31742:12;31735:19;;31394:366;;;:::o;31766:419::-;31932:4;31970:2;31959:9;31955:18;31947:26;;32019:9;32013:4;32009:20;32005:1;31994:9;31990:17;31983:47;32047:131;32173:4;32047:131;:::i;:::-;32039:139;;31766:419;;;:::o;32191:178::-;32331:30;32327:1;32319:6;32315:14;32308:54;32191:178;:::o;32375:366::-;32517:3;32538:67;32602:2;32597:3;32538:67;:::i;:::-;32531:74;;32614:93;32703:3;32614:93;:::i;:::-;32732:2;32727:3;32723:12;32716:19;;32375:366;;;:::o;32747:419::-;32913:4;32951:2;32940:9;32936:18;32928:26;;33000:9;32994:4;32990:20;32986:1;32975:9;32971:17;32964:47;33028:131;33154:4;33028:131;:::i;:::-;33020:139;;32747:419;;;:::o;33172:175::-;33312:27;33308:1;33300:6;33296:14;33289:51;33172:175;:::o;33353:366::-;33495:3;33516:67;33580:2;33575:3;33516:67;:::i;:::-;33509:74;;33592:93;33681:3;33592:93;:::i;:::-;33710:2;33705:3;33701:12;33694:19;;33353:366;;;:::o;33725:419::-;33891:4;33929:2;33918:9;33914:18;33906:26;;33978:9;33972:4;33968:20;33964:1;33953:9;33949:17;33942:47;34006:131;34132:4;34006:131;:::i;:::-;33998:139;;33725:419;;;:::o;34150:237::-;34290:34;34286:1;34278:6;34274:14;34267:58;34359:20;34354:2;34346:6;34342:15;34335:45;34150:237;:::o;34393:366::-;34535:3;34556:67;34620:2;34615:3;34556:67;:::i;:::-;34549:74;;34632:93;34721:3;34632:93;:::i;:::-;34750:2;34745:3;34741:12;34734:19;;34393:366;;;:::o;34765:419::-;34931:4;34969:2;34958:9;34954:18;34946:26;;35018:9;35012:4;35008:20;35004:1;34993:9;34989:17;34982:47;35046:131;35172:4;35046:131;:::i;:::-;35038:139;;34765:419;;;:::o;35190:435::-;35370:3;35392:95;35483:3;35474:6;35392:95;:::i;:::-;35385:102;;35504:95;35595:3;35586:6;35504:95;:::i;:::-;35497:102;;35616:3;35609:10;;35190:435;;;;;:::o;35631:98::-;35682:6;35716:5;35710:12;35700:22;;35631:98;;;:::o;35735:168::-;35818:11;35852:6;35847:3;35840:19;35892:4;35887:3;35883:14;35868:29;;35735:168;;;;:::o;35909:360::-;35995:3;36023:38;36055:5;36023:38;:::i;:::-;36077:70;36140:6;36135:3;36077:70;:::i;:::-;36070:77;;36156:52;36201:6;36196:3;36189:4;36182:5;36178:16;36156:52;:::i;:::-;36233:29;36255:6;36233:29;:::i;:::-;36228:3;36224:39;36217:46;;35999:270;35909:360;;;;:::o;36275:640::-;36470:4;36508:3;36497:9;36493:19;36485:27;;36522:71;36590:1;36579:9;36575:17;36566:6;36522:71;:::i;:::-;36603:72;36671:2;36660:9;36656:18;36647:6;36603:72;:::i;:::-;36685;36753:2;36742:9;36738:18;36729:6;36685:72;:::i;:::-;36804:9;36798:4;36794:20;36789:2;36778:9;36774:18;36767:48;36832:76;36903:4;36894:6;36832:76;:::i;:::-;36824:84;;36275:640;;;;;;;:::o;36921:141::-;36977:5;37008:6;37002:13;36993:22;;37024:32;37050:5;37024:32;:::i;:::-;36921:141;;;;:::o;37068:349::-;37137:6;37186:2;37174:9;37165:7;37161:23;37157:32;37154:119;;;37192:79;;:::i;:::-;37154:119;37312:1;37337:63;37392:7;37383:6;37372:9;37368:22;37337:63;:::i;:::-;37327:73;;37283:127;37068:349;;;;:::o;37423:180::-;37471:77;37468:1;37461:88;37568:4;37565:1;37558:15;37592:4;37589:1;37582:15;37609:185;37649:1;37666:20;37684:1;37666:20;:::i;:::-;37661:25;;37700:20;37718:1;37700:20;:::i;:::-;37695:25;;37739:1;37729:35;;37744:18;;:::i;:::-;37729:35;37786:1;37783;37779:9;37774:14;;37609:185;;;;:::o;37800:176::-;37832:1;37849:20;37867:1;37849:20;:::i;:::-;37844:25;;37883:20;37901:1;37883:20;:::i;:::-;37878:25;;37922:1;37912:35;;37927:18;;:::i;:::-;37912:35;37968:1;37965;37961:9;37956:14;;37800:176;;;;:::o;37982:180::-;38030:77;38027:1;38020:88;38127:4;38124:1;38117:15;38151:4;38148:1;38141:15

Swarm Source

ipfs://06ad44f63f033151d9e940bcbe5049d37e9ddabf64f8fdc87e01184ebff14408
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.