ETH Price: $3,228.39 (-0.80%)
Gas: 1 Gwei

Token

Resurrection of Sartoshi (ROS)
 

Overview

Max Total Supply

39 ROS

Holders

38

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 ROS
0x6c5c52c888ce8b60751e2365025099f586372d3f
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:
ResurrectionOfSartoshi

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// dapprex.com Contract Creator

pragma solidity ^0.8.7;

/**
 * @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);
}


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

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

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

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

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

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

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

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

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

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

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

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


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

/**
 * @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);
}

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function decimals() external view returns (uint8);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

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

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

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

/**
 * @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;
    }
}

/**
 * @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;
    }
}

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

    address private _owner;


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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

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

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);

        _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 a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}

    /**
     * @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 {}
}


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}


/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

contract ResurrectionOfSartoshi is ERC721Enumerable, Ownable {

    // The total tokens minted to an address. Does not matter if tokens are transferred out.
    mapping(address => uint256) public addressMintCount;

    string public baseTokenURI; // Can be combined with the tokenId to create the metadata URI
    IERC20 public externalToken;
    uint256 public externalMinAmount = 20000000000;  // set external token amount
    uint256 public MINT_PRICE = 0.0069 ether; // Public mint price
    uint256 public MAX_TOTAL_SUPPLY = 6969; // The maximum total supply of tokens
    bool public _enableMint = false;

    address[] public externalWalletList;
    bool public externalTokenNeeded = false;

    bool public isFirstNftFree = true;
    uint256 public mint_num_per_action = 10;
    uint256 public mint_num_per_wallet = 10;

    bool public isWhitelistPresale = true;
    mapping (address => bool) public walletWhitelisted;

    event SetBaseURI(address _from);
    event Withdraw(address _from, uint amount);

    mapping(uint256 => bool) public isMint;

    constructor(string memory _baseUri, address _token) ERC721("Resurrection of Sartoshi", "ROS") {
        baseTokenURI = _baseUri;
        externalToken = IERC20(_token);
    }

    // Overrides the default _baseURI function in order to return the correct value from tokenURI function
    function _baseURI() internal view virtual override returns (string memory) {
        return baseTokenURI;
    }

    // Allows the contract owner to set a new base URI string
    function setBaseURI(string calldata baseURI) external onlyOwner {
        baseTokenURI = baseURI;
        emit SetBaseURI(msg.sender);
    }

    function setExternalTokenNeed(bool _flag) public onlyOwner {
        externalTokenNeeded = _flag;
    }

    function setExternalToken(address _token) public onlyOwner {
        externalToken = IERC20(_token);
    }

    function setExternalTokenMinAmount(uint256 _amount) public onlyOwner {
        externalMinAmount = _amount;
    }

    function excludeExternalTokenWallet(address _addr) public onlyOwner {
        uint256 length = externalWalletList.length;
        bool flag = true;
        for (uint256 i=0; i<length; i++) {
            if(externalWalletList[i] == _addr) {
                flag = false;
                break;
            }
        }
        if (flag ==  true) {
            externalWalletList.push(_addr);
        }
    }

    function includeExternalTokenWallet(address _addr) public onlyOwner {
        uint256 length = externalWalletList.length;
        uint256 impossibleId = MAX_TOTAL_SUPPLY + 1 ;
        uint256 id = impossibleId;
        for (uint256 i=0; i<length; i++) {
            if(externalWalletList[i] == _addr) {
                id = i;
                break;
            }
        }
        if (id != impossibleId) {
            delete externalWalletList[id];
        }
    }

    function enableMint(bool _flag) public onlyOwner {
        _enableMint = _flag;
    }

    function setMintPrice(uint256 _price) public onlyOwner {
        MINT_PRICE = _price;
    }

    // Public mint function
    function mint(uint256 _amount) external payable {
        uint256 supply = totalSupply();
        if (isWhitelistPresale) {
            require(walletWhitelisted[msg.sender], "User is not whitelisted");
        }
        require(_enableMint == true, "Minting NFT is disabled now.");
        require(_amount <= mint_num_per_action, "Max mint amount per action is reached");
        require(supply + _amount <= MAX_TOTAL_SUPPLY, "Max mint amount is reached");
        require(addressMintCount[msg.sender] + _amount <= mint_num_per_wallet, "Exceed the Max Amount to mint.");

        if(externalTokenNeeded){
            bool flag = false;
            uint256 j;
            for(j=0; j<externalWalletList.length; j++) {
                if (externalWalletList[j] == msg.sender) {
                    flag = true;
                    break;
                }
            }
            if (flag == false) {
                uint256 balance = externalToken.balanceOf(msg.sender);
                uint256 decimal = externalToken.decimals();
                require( balance >= externalMinAmount * (10 ** decimal), "Need more external token to mint");
            }
        }

        uint256 mintPrice = getMintValue(msg.sender, _amount);
        require( mintPrice == msg.value, "Price must be mint price for each NFT");

        uint256 id = supply + 1;
        _safeMint(msg.sender, id);
        isMint[id] = true;
        addressMintCount[msg.sender] = addressMintCount[msg.sender] + _amount;
    }

    // Withdraw the value of the contract to the specified address
    function withdrawTo(address recipient, uint256 amount) external onlyOwner {
        amount = amount * (10 ** 18);
        uint256 balance = address(this).balance;
        require(balance > amount, "Withdraw amount overflow");
        payable(recipient).transfer(amount);
        emit Withdraw(msg.sender, amount);
    }

    // Withdraw the value of the contract to the specified address
    function withdrawAll(address recipient) external onlyOwner {
        uint256 balance = address(this).balance;
        payable(recipient).transfer(balance);
        emit Withdraw(msg.sender, balance);
    }

    function tokenTransfer(IERC20 token, address recipient, uint amount) private {
        bool sent = token.transfer(recipient, amount);
        require(sent, "Token transfer failed");
    }

    // Used to get the list of token IDs owned by a user (address).
    function walletOfUser(address user) external view returns(uint256[] memory) {
        uint256 tokenCount = 0;
        uint256[] memory tokensId = new uint256[](0);
        tokenCount = balanceOf(user);

        if (tokenCount > 0) {
            tokensId = new uint256[](tokenCount);
            for(uint256 i = 0; i < tokenCount; i++){
                tokensId[i] = tokenOfOwnerByIndex(user, i);
            }
        }
        return tokensId;
    }

    function getCurrentMintCount() public view returns(uint256) {
        uint256 supply = totalSupply();
        return supply;
    }

    function getMintValue(address to, uint256 _amount) public view returns(uint256) {
        require (_amount > 0, "Amount must be greater than 0");
        uint256 totalMintedOnWallet = addressMintCount[to];
        bool hasMintedNftBefore = totalMintedOnWallet > 0;
        uint256 payAmount;
        if(!hasMintedNftBefore && isFirstNftFree){
            payAmount = _amount - 1;
        } else {
            payAmount = _amount;
        }
        uint256 price = payAmount * MINT_PRICE;

        return price;
    }

    // set Max total supply
    function setMaxTotalSupply(uint256 _max) public onlyOwner {
        MAX_TOTAL_SUPPLY = _max;
    }

    function setMintNumberPerAction(uint256 _mintNum) public onlyOwner {
        mint_num_per_action = _mintNum;
    }

    function setMintNumberPerWallet(uint256 _mintNum) public onlyOwner {
        mint_num_per_wallet = _mintNum;
    }

    function setWhiteListPresale(bool isWhitelist) external onlyOwner {
        isWhitelistPresale = isWhitelist;
    }

    function setFirstNftFree(bool isFree) external onlyOwner {
        isFirstNftFree = isFree;
    }

    function whitelistWallet(address wallet, bool value) public onlyOwner {
        walletWhitelisted[wallet] = value;
    }
    
    function whitelistWallets(address[] memory wallets, bool _flag) public onlyOwner {
        for(uint256 i = 0; i < wallets.length; i++){
            whitelistWallet(wallets[i], _flag);
        }
    }

    function ownerTransfer(address from, address to, uint256 tokenId) external onlyOwner {
        _transfer(from, to, tokenId);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"},{"internalType":"address","name":"_token","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":false,"internalType":"address","name":"_from","type":"address"}],"name":"SetBaseURI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"MAX_TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_enableMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"enableMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"excludeExternalTokenWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"externalMinAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"externalToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"externalTokenNeeded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"externalWalletList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"getMintValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"includeExternalTokenWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFirstNftFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"isMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhitelistPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mint_num_per_action","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint_num_per_wallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"setExternalToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setExternalTokenMinAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setExternalTokenNeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isFree","type":"bool"}],"name":"setFirstNftFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setMaxTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintNum","type":"uint256"}],"name":"setMintNumberPerAction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintNum","type":"uint256"}],"name":"setMintNumberPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isWhitelist","type":"bool"}],"name":"setWhiteListPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"walletOfUser","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"walletWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"whitelistWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"whitelistWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTo","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526404a817c800600e556618838370f34000600f55611b396010556011805460ff199081169091556013805461ffff1916610100179055600a60148190556015556016805490911660011790553480156200005d57600080fd5b5060405162003732380380620037328339810160408190526200008091620001ce565b6040518060400160405280601881526020017f526573757272656374696f6e206f6620536172746f736869000000000000000081525060405180604001604052806003815260200162524f5360e81b8152508160009081620000e391906200034e565b506001620000f282826200034e565b5050506200010f620001096200014560201b60201c565b62000149565b600c6200011d83826200034e565b50600d80546001600160a01b0319166001600160a01b0392909216919091179055506200041a565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001c957600080fd5b919050565b60008060408385031215620001e257600080fd5b82516001600160401b0380821115620001fa57600080fd5b818501915085601f8301126200020f57600080fd5b8151818111156200022457620002246200019b565b604051601f8201601f19908116603f011681019083821181831017156200024f576200024f6200019b565b816040528281526020935088848487010111156200026c57600080fd5b600091505b8282101562000290578482018401518183018501529083019062000271565b82821115620002a25760008484830101525b9550620002b4915050858201620001b1565b925050509250929050565b600181811c90821680620002d457607f821691505b602082108103620002f557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200034957600081815260208120601f850160051c81016020861015620003245750805b601f850160051c820191505b81811015620003455782815560010162000330565b5050505b505050565b81516001600160401b038111156200036a576200036a6200019b565b62000382816200037b8454620002bf565b84620002fb565b602080601f831160018114620003ba5760008415620003a15750858301515b600019600386901b1c1916600185901b17855562000345565b600085815260208120601f198616915b82811015620003eb57888601518255948401946001909101908401620003ca565b50858210156200040a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b613308806200042a6000396000f3fe60806040526004361061036b5760003560e01c80637c58aed3116101c6578063c002d23d116100f7578063dda3043411610095578063f2fde38b1161006f578063f2fde38b14610a09578063f4a0a52814610a29578063f87028b314610a49578063fa09e63014610a6357600080fd5b8063dda304341461098a578063e985e9c5146109a0578063ec19f201146109e957600080fd5b8063c9828ae0116100d1578063c9828ae014610925578063cdabc6be14610945578063d547cfb71461095b578063d58008cf1461097057600080fd5b8063c002d23d146108cf578063c68b3305146108e5578063c87b56dd1461090557600080fd5b8063a22cb46511610164578063b20060d51161013e578063b20060d514610832578063b27b22ff1461085f578063b88d4fde1461088f578063bbd9e5b4146108af57600080fd5b8063a22cb465146107dc578063a821221a146107fc578063a98c80721461081c57600080fd5b806395d89b41116101a057806395d89b41146107755780639f5387d31461078a578063a0712d68146107a9578063a1291f7f146107bc57600080fd5b80637c58aed3146107175780637fa900f6146107375780638da5cb5b1461075757600080fd5b806333039d3d116102a057806355f804b31161023e5780636352211e116102185780636352211e146106a257806370a08231146106c257806370f90ab4146106e2578063715018a61461070257600080fd5b806355f804b3146106425780635a402b92146106625780636135af2a1461068257600080fd5b806342842e0e1161027a57806342842e0e146105d357806345545e16146105f3578063490a9c40146106085780634f6ccce71461062257600080fd5b806333039d3d1461057d57806334e2c760146105935780633f3e4c11146105b357600080fd5b80631633bb1b1161030d5780631ba4f67d116102e75780631ba4f67d146104f0578063205c28781461051d57806323b872dd1461053d5780632f745c591461055d57600080fd5b80631633bb1b1461048157806318160ddd146104a15780631a61985f146104c057600080fd5b8063095ea7b311610349578063095ea7b3146103ff5780630aab2eb0146104215780630ce3494b14610441578063135a9d9b1461046157600080fd5b806301ffc9a71461037057806306fdde03146103a5578063081812fc146103c7575b600080fd5b34801561037c57600080fd5b5061039061038b3660046129c3565b610a83565b60405190151581526020015b60405180910390f35b3480156103b157600080fd5b506103ba610aae565b60405161039c9190612a38565b3480156103d357600080fd5b506103e76103e2366004612a4b565b610b40565b6040516001600160a01b03909116815260200161039c565b34801561040b57600080fd5b5061041f61041a366004612a80565b610bda565b005b34801561042d57600080fd5b506103e761043c366004612a4b565b610cef565b34801561044d57600080fd5b5061041f61045c366004612a4b565b610d19565b34801561046d57600080fd5b5061041f61047c366004612aaa565b610d48565b34801561048d57600080fd5b5061041f61049c366004612aaa565b610e20565b3480156104ad57600080fd5b506008545b60405190815260200161039c565b3480156104cc57600080fd5b506103906104db366004612aaa565b60176020526000908152604090205460ff1681565b3480156104fc57600080fd5b506104b261050b366004612aaa565b600b6020526000908152604090205481565b34801561052957600080fd5b5061041f610538366004612a80565b610e6c565b34801561054957600080fd5b5061041f610558366004612ac5565b610f6f565b34801561056957600080fd5b506104b2610578366004612a80565b610fa0565b34801561058957600080fd5b506104b260105481565b34801561059f57600080fd5b5061041f6105ae366004612b11565b611036565b3480156105bf57600080fd5b5061041f6105ce366004612a4b565b611073565b3480156105df57600080fd5b5061041f6105ee366004612ac5565b6110a2565b3480156105ff57600080fd5b506104b26110bd565b34801561061457600080fd5b506013546103909060ff1681565b34801561062e57600080fd5b506104b261063d366004612a4b565b6110c9565b34801561064e57600080fd5b5061041f61065d366004612b2c565b61115c565b34801561066e57600080fd5b506104b261067d366004612a80565b6111cc565b34801561068e57600080fd5b5061041f61069d366004612b9e565b611284565b3480156106ae57600080fd5b506103e76106bd366004612a4b565b6112d9565b3480156106ce57600080fd5b506104b26106dd366004612aaa565b611350565b3480156106ee57600080fd5b5061041f6106fd366004612b11565b6113d7565b34801561070e57600080fd5b5061041f611414565b34801561072357600080fd5b5061041f610732366004612b11565b61144a565b34801561074357600080fd5b5061041f610752366004612a4b565b61148e565b34801561076357600080fd5b50600a546001600160a01b03166103e7565b34801561078157600080fd5b506103ba6114bd565b34801561079657600080fd5b5060135461039090610100900460ff1681565b61041f6107b7366004612a4b565b6114cc565b3480156107c857600080fd5b5061041f6107d7366004612ac5565b61195d565b3480156107e857600080fd5b5061041f6107f7366004612b9e565b611987565b34801561080857600080fd5b5061041f610817366004612aaa565b611996565b34801561082857600080fd5b506104b260155481565b34801561083e57600080fd5b5061085261084d366004612aaa565b611a7f565b60405161039c9190612bd1565b34801561086b57600080fd5b5061039061087a366004612a4b565b60186020526000908152604090205460ff1681565b34801561089b57600080fd5b5061041f6108aa366004612c5c565b611b36565b3480156108bb57600080fd5b5061041f6108ca366004612d1c565b611b68565b3480156108db57600080fd5b506104b2600f5481565b3480156108f157600080fd5b5061041f610900366004612b11565b611bd3565b34801561091157600080fd5b506103ba610920366004612a4b565b611c10565b34801561093157600080fd5b50600d546103e7906001600160a01b031681565b34801561095157600080fd5b506104b260145481565b34801561096757600080fd5b506103ba611cea565b34801561097c57600080fd5b506011546103909060ff1681565b34801561099657600080fd5b506104b2600e5481565b3480156109ac57600080fd5b506103906109bb366004612ddb565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156109f557600080fd5b5061041f610a04366004612a4b565b611d78565b348015610a1557600080fd5b5061041f610a24366004612aaa565b611da7565b348015610a3557600080fd5b5061041f610a44366004612a4b565b611e42565b348015610a5557600080fd5b506016546103909060ff1681565b348015610a6f57600080fd5b5061041f610a7e366004612aaa565b611e71565b60006001600160e01b0319821663780e9d6360e01b1480610aa85750610aa882611f0a565b92915050565b606060008054610abd90612e05565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae990612e05565b8015610b365780601f10610b0b57610100808354040283529160200191610b36565b820191906000526020600020905b815481529060010190602001808311610b1957829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610bbe5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610be5826112d9565b9050806001600160a01b0316836001600160a01b031603610c525760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610bb5565b336001600160a01b0382161480610c6e5750610c6e81336109bb565b610ce05760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610bb5565b610cea8383611f5a565b505050565b60128181548110610cff57600080fd5b6000918252602090912001546001600160a01b0316905081565b600a546001600160a01b03163314610d435760405162461bcd60e51b8152600401610bb590612e3f565b601455565b600a546001600160a01b03163314610d725760405162461bcd60e51b8152600401610bb590612e3f565b601254601054600090610d86906001612e8a565b90508060005b83811015610de557846001600160a01b031660128281548110610db157610db1612ea2565b6000918252602090912001546001600160a01b031603610dd357809150610de5565b80610ddd81612eb8565b915050610d8c565b50818114610e1a5760128181548110610e0057610e00612ea2565b600091825260209091200180546001600160a01b03191690555b50505050565b600a546001600160a01b03163314610e4a5760405162461bcd60e51b8152600401610bb590612e3f565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b03163314610e965760405162461bcd60e51b8152600401610bb590612e3f565b610ea881670de0b6b3a7640000612ed1565b905047818111610efa5760405162461bcd60e51b815260206004820152601860248201527f576974686472617720616d6f756e74206f766572666c6f7700000000000000006044820152606401610bb5565b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015610f30573d6000803e3d6000fd5b5060408051338152602081018490527f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364910160405180910390a1505050565b610f793382611fc8565b610f955760405162461bcd60e51b8152600401610bb590612ef0565b610cea8383836120bf565b6000610fab83611350565b821061100d5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610bb5565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146110605760405162461bcd60e51b8152600401610bb590612e3f565b6016805460ff1916911515919091179055565b600a546001600160a01b0316331461109d5760405162461bcd60e51b8152600401610bb590612e3f565b601055565b610cea83838360405180602001604052806000815250611b36565b600080610aa860085490565b60006110d460085490565b82106111375760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610bb5565b6008828154811061114a5761114a612ea2565b90600052602060002001549050919050565b600a546001600160a01b031633146111865760405162461bcd60e51b8152600401610bb590612e3f565b600c611193828483612f8f565b506040513381527f9bfdd2b649e4e6b3a8a2d15283914c1356714c1eb38ccfbd28339e399c7d8e0f906020015b60405180910390a15050565b600080821161121d5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bb5565b6001600160a01b0383166000908152600b6020526040812054908115801591908261124f5750601354610100900460ff165b156112665761125f600186613050565b9050611269565b50835b6000600f54826112799190612ed1565b979650505050505050565b600a546001600160a01b031633146112ae5760405162461bcd60e51b8152600401610bb590612e3f565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6000818152600260205260408120546001600160a01b031680610aa85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610bb5565b60006001600160a01b0382166113bb5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610bb5565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146114015760405162461bcd60e51b8152600401610bb590612e3f565b6013805460ff1916911515919091179055565b600a546001600160a01b0316331461143e5760405162461bcd60e51b8152600401610bb590612e3f565b6114486000612266565b565b600a546001600160a01b031633146114745760405162461bcd60e51b8152600401610bb590612e3f565b601380549115156101000261ff0019909216919091179055565b600a546001600160a01b031633146114b85760405162461bcd60e51b8152600401610bb590612e3f565b601555565b606060018054610abd90612e05565b60006114d760085490565b60165490915060ff1615611544573360009081526017602052604090205460ff166115445760405162461bcd60e51b815260206004820152601760248201527f55736572206973206e6f742077686974656c69737465640000000000000000006044820152606401610bb5565b60115460ff16151560011461159b5760405162461bcd60e51b815260206004820152601c60248201527f4d696e74696e67204e46542069732064697361626c6564206e6f772e000000006044820152606401610bb5565b6014548211156115fb5760405162461bcd60e51b815260206004820152602560248201527f4d6178206d696e7420616d6f756e742070657220616374696f6e2069732072656044820152641858da195960da1b6064820152608401610bb5565b6010546116088383612e8a565b11156116565760405162461bcd60e51b815260206004820152601a60248201527f4d6178206d696e7420616d6f756e7420697320726561636865640000000000006044820152606401610bb5565b601554336000908152600b6020526040902054611674908490612e8a565b11156116c25760405162461bcd60e51b815260206004820152601e60248201527f45786365656420746865204d617820416d6f756e7420746f206d696e742e00006044820152606401610bb5565b60135460ff1615611891576000805b60125481101561172d57336001600160a01b0316601282815481106116f8576116f8612ea2565b6000918252602090912001546001600160a01b03160361171b576001915061172d565b8061172581612eb8565b9150506116d1565b81151560000361188e57600d546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611780573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a49190613067565b90506000600d60009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181f9190613080565b60ff16905061182f81600a613187565b600e5461183c9190612ed1565b82101561188b5760405162461bcd60e51b815260206004820181905260248201527f4e656564206d6f72652065787465726e616c20746f6b656e20746f206d696e746044820152606401610bb5565b50505b50505b600061189d33846111cc565b90503481146118fc5760405162461bcd60e51b815260206004820152602560248201527f5072696365206d757374206265206d696e7420707269636520666f72206561636044820152641a0813919560da1b6064820152608401610bb5565b6000611909836001612e8a565b905061191533826122b8565b6000818152601860209081526040808320805460ff19166001179055338352600b909152902054611947908590612e8a565b336000908152600b602052604090205550505050565b600a546001600160a01b03163314610f955760405162461bcd60e51b8152600401610bb590612e3f565b6119923383836122d2565b5050565b600a546001600160a01b031633146119c05760405162461bcd60e51b8152600401610bb590612e3f565b601254600160005b82811015611a2257836001600160a01b0316601282815481106119ed576119ed612ea2565b6000918252602090912001546001600160a01b031603611a105760009150611a22565b80611a1a81612eb8565b9150506119c8565b50801515600103610cea57601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0385166001600160a01b0319909116179055505050565b6040805160008082526020820190925260609190611a9c84611350565b91508115611b2f578167ffffffffffffffff811115611abd57611abd612c15565b604051908082528060200260200182016040528015611ae6578160200160208202803683370190505b50905060005b82811015611b2d57611afe8582610fa0565b828281518110611b1057611b10612ea2565b602090810291909101015280611b2581612eb8565b915050611aec565b505b9392505050565b611b403383611fc8565b611b5c5760405162461bcd60e51b8152600401610bb590612ef0565b610e1a848484846123a0565b600a546001600160a01b03163314611b925760405162461bcd60e51b8152600401610bb590612e3f565b60005b8251811015610cea57611bc1838281518110611bb357611bb3612ea2565b602002602001015183611284565b80611bcb81612eb8565b915050611b95565b600a546001600160a01b03163314611bfd5760405162461bcd60e51b8152600401610bb590612e3f565b6011805460ff1916911515919091179055565b6000818152600260205260409020546060906001600160a01b0316611c8f5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610bb5565b6000611c996123d3565b90506000815111611cb95760405180602001604052806000815250611b2f565b80611cc3846123e2565b604051602001611cd4929190613193565b6040516020818303038152906040529392505050565b600c8054611cf790612e05565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2390612e05565b8015611d705780601f10611d4557610100808354040283529160200191611d70565b820191906000526020600020905b815481529060010190602001808311611d5357829003601f168201915b505050505081565b600a546001600160a01b03163314611da25760405162461bcd60e51b8152600401610bb590612e3f565b600e55565b600a546001600160a01b03163314611dd15760405162461bcd60e51b8152600401610bb590612e3f565b6001600160a01b038116611e365760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb5565b611e3f81612266565b50565b600a546001600160a01b03163314611e6c5760405162461bcd60e51b8152600401610bb590612e3f565b600f55565b600a546001600160a01b03163314611e9b5760405162461bcd60e51b8152600401610bb590612e3f565b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611ed3573d6000803e3d6000fd5b5060408051338152602081018390527f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436491016111c0565b60006001600160e01b031982166380ac58cd60e01b1480611f3b57506001600160e01b03198216635b5e139f60e01b145b80610aa857506301ffc9a760e01b6001600160e01b0319831614610aa8565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f8f826112d9565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166120415760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610bb5565b600061204c836112d9565b9050806001600160a01b0316846001600160a01b031614806120875750836001600160a01b031661207c84610b40565b6001600160a01b0316145b806120b757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166120d2826112d9565b6001600160a01b0316146121365760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610bb5565b6001600160a01b0382166121985760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610bb5565b6121a38383836124e3565b6121ae600082611f5a565b6001600160a01b03831660009081526003602052604081208054600192906121d7908490613050565b90915550506001600160a01b0382166000908152600360205260408120805460019290612205908490612e8a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61199282826040518060200160405280600081525061259b565b816001600160a01b0316836001600160a01b0316036123335760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610bb5565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6123ab8484846120bf565b6123b7848484846125ce565b610e1a5760405162461bcd60e51b8152600401610bb5906131d2565b6060600c8054610abd90612e05565b6060816000036124095750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612433578061241d81612eb8565b915061242c9050600a8361323a565b915061240d565b60008167ffffffffffffffff81111561244e5761244e612c15565b6040519080825280601f01601f191660200182016040528015612478576020820181803683370190505b5090505b84156120b75761248d600183613050565b915061249a600a8661324e565b6124a5906030612e8a565b60f81b8183815181106124ba576124ba612ea2565b60200101906001600160f81b031916908160001a9053506124dc600a8661323a565b945061247c565b6001600160a01b03831661253e5761253981600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612561565b816001600160a01b0316836001600160a01b0316146125615761256183826126cf565b6001600160a01b03821661257857610cea8161276c565b826001600160a01b0316826001600160a01b031614610cea57610cea828261281b565b6125a5838361285f565b6125b260008484846125ce565b610cea5760405162461bcd60e51b8152600401610bb5906131d2565b60006001600160a01b0384163b156126c457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612612903390899088908890600401613262565b6020604051808303816000875af192505050801561264d575060408051601f3d908101601f1916820190925261264a9181019061329f565b60015b6126aa573d80801561267b576040519150601f19603f3d011682016040523d82523d6000602084013e612680565b606091505b5080516000036126a25760405162461bcd60e51b8152600401610bb5906131d2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506120b7565b506001949350505050565b600060016126dc84611350565b6126e69190613050565b600083815260076020526040902054909150808214612739576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061277e90600190613050565b600083815260096020526040812054600880549394509092849081106127a6576127a6612ea2565b9060005260206000200154905080600883815481106127c7576127c7612ea2565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806127ff576127ff6132bc565b6001900381819060005260206000200160009055905550505050565b600061282683611350565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166128b55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610bb5565b6000818152600260205260409020546001600160a01b03161561291a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610bb5565b612926600083836124e3565b6001600160a01b038216600090815260036020526040812080546001929061294f908490612e8a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b031981168114611e3f57600080fd5b6000602082840312156129d557600080fd5b8135611b2f816129ad565b60005b838110156129fb5781810151838201526020016129e3565b83811115610e1a5750506000910152565b60008151808452612a248160208601602086016129e0565b601f01601f19169290920160200192915050565b602081526000611b2f6020830184612a0c565b600060208284031215612a5d57600080fd5b5035919050565b80356001600160a01b0381168114612a7b57600080fd5b919050565b60008060408385031215612a9357600080fd5b612a9c83612a64565b946020939093013593505050565b600060208284031215612abc57600080fd5b611b2f82612a64565b600080600060608486031215612ada57600080fd5b612ae384612a64565b9250612af160208501612a64565b9150604084013590509250925092565b80358015158114612a7b57600080fd5b600060208284031215612b2357600080fd5b611b2f82612b01565b60008060208385031215612b3f57600080fd5b823567ffffffffffffffff80821115612b5757600080fd5b818501915085601f830112612b6b57600080fd5b813581811115612b7a57600080fd5b866020828501011115612b8c57600080fd5b60209290920196919550909350505050565b60008060408385031215612bb157600080fd5b612bba83612a64565b9150612bc860208401612b01565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612c0957835183529284019291840191600101612bed565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612c5457612c54612c15565b604052919050565b60008060008060808587031215612c7257600080fd5b612c7b85612a64565b93506020612c8a818701612a64565b935060408601359250606086013567ffffffffffffffff80821115612cae57600080fd5b818801915088601f830112612cc257600080fd5b813581811115612cd457612cd4612c15565b612ce6601f8201601f19168501612c2b565b91508082528984828501011115612cfc57600080fd5b808484018584013760008482840101525080935050505092959194509250565b60008060408385031215612d2f57600080fd5b823567ffffffffffffffff80821115612d4757600080fd5b818501915085601f830112612d5b57600080fd5b8135602082821115612d6f57612d6f612c15565b8160051b9250612d80818401612c2b565b8281529284018101928181019089851115612d9a57600080fd5b948201945b84861015612dbf57612db086612a64565b82529482019490820190612d9f565b9650612dce9050878201612b01565b9450505050509250929050565b60008060408385031215612dee57600080fd5b612df783612a64565b9150612bc860208401612a64565b600181811c90821680612e1957607f821691505b602082108103612e3957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612e9d57612e9d612e74565b500190565b634e487b7160e01b600052603260045260246000fd5b600060018201612eca57612eca612e74565b5060010190565b6000816000190483118215151615612eeb57612eeb612e74565b500290565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b601f821115610cea57600081815260208120601f850160051c81016020861015612f685750805b601f850160051c820191505b81811015612f8757828155600101612f74565b505050505050565b67ffffffffffffffff831115612fa757612fa7612c15565b612fbb83612fb58354612e05565b83612f41565b6000601f841160018114612fef5760008515612fd75750838201355b600019600387901b1c1916600186901b178355613049565b600083815260209020601f19861690835b828110156130205786850135825560209485019460019092019101613000565b508682101561303d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60008282101561306257613062612e74565b500390565b60006020828403121561307957600080fd5b5051919050565b60006020828403121561309257600080fd5b815160ff81168114611b2f57600080fd5b600181815b808511156130de5781600019048211156130c4576130c4612e74565b808516156130d157918102915b93841c93908002906130a8565b509250929050565b6000826130f557506001610aa8565b8161310257506000610aa8565b816001811461311857600281146131225761313e565b6001915050610aa8565b60ff84111561313357613133612e74565b50506001821b610aa8565b5060208310610133831016604e8410600b8410161715613161575081810a610aa8565b61316b83836130a3565b806000190482111561317f5761317f612e74565b029392505050565b6000611b2f83836130e6565b600083516131a58184602088016129e0565b8351908301906131b98183602088016129e0565b64173539b7b760d91b9101908152600501949350505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261324957613249613224565b500490565b60008261325d5761325d613224565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061329590830184612a0c565b9695505050505050565b6000602082840312156132b157600080fd5b8151611b2f816129ad565b634e487b7160e01b600052603160045260246000fdfea264697066735822122086f8c8afe1324aa3a82b1f27cd318251fbe1b0a1b585250dd800a2b4d93f7fb164736f6c634300080f003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f726573757272656374696f6e6f66736172746f7368692e636f6d2f6d696e7400000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061036b5760003560e01c80637c58aed3116101c6578063c002d23d116100f7578063dda3043411610095578063f2fde38b1161006f578063f2fde38b14610a09578063f4a0a52814610a29578063f87028b314610a49578063fa09e63014610a6357600080fd5b8063dda304341461098a578063e985e9c5146109a0578063ec19f201146109e957600080fd5b8063c9828ae0116100d1578063c9828ae014610925578063cdabc6be14610945578063d547cfb71461095b578063d58008cf1461097057600080fd5b8063c002d23d146108cf578063c68b3305146108e5578063c87b56dd1461090557600080fd5b8063a22cb46511610164578063b20060d51161013e578063b20060d514610832578063b27b22ff1461085f578063b88d4fde1461088f578063bbd9e5b4146108af57600080fd5b8063a22cb465146107dc578063a821221a146107fc578063a98c80721461081c57600080fd5b806395d89b41116101a057806395d89b41146107755780639f5387d31461078a578063a0712d68146107a9578063a1291f7f146107bc57600080fd5b80637c58aed3146107175780637fa900f6146107375780638da5cb5b1461075757600080fd5b806333039d3d116102a057806355f804b31161023e5780636352211e116102185780636352211e146106a257806370a08231146106c257806370f90ab4146106e2578063715018a61461070257600080fd5b806355f804b3146106425780635a402b92146106625780636135af2a1461068257600080fd5b806342842e0e1161027a57806342842e0e146105d357806345545e16146105f3578063490a9c40146106085780634f6ccce71461062257600080fd5b806333039d3d1461057d57806334e2c760146105935780633f3e4c11146105b357600080fd5b80631633bb1b1161030d5780631ba4f67d116102e75780631ba4f67d146104f0578063205c28781461051d57806323b872dd1461053d5780632f745c591461055d57600080fd5b80631633bb1b1461048157806318160ddd146104a15780631a61985f146104c057600080fd5b8063095ea7b311610349578063095ea7b3146103ff5780630aab2eb0146104215780630ce3494b14610441578063135a9d9b1461046157600080fd5b806301ffc9a71461037057806306fdde03146103a5578063081812fc146103c7575b600080fd5b34801561037c57600080fd5b5061039061038b3660046129c3565b610a83565b60405190151581526020015b60405180910390f35b3480156103b157600080fd5b506103ba610aae565b60405161039c9190612a38565b3480156103d357600080fd5b506103e76103e2366004612a4b565b610b40565b6040516001600160a01b03909116815260200161039c565b34801561040b57600080fd5b5061041f61041a366004612a80565b610bda565b005b34801561042d57600080fd5b506103e761043c366004612a4b565b610cef565b34801561044d57600080fd5b5061041f61045c366004612a4b565b610d19565b34801561046d57600080fd5b5061041f61047c366004612aaa565b610d48565b34801561048d57600080fd5b5061041f61049c366004612aaa565b610e20565b3480156104ad57600080fd5b506008545b60405190815260200161039c565b3480156104cc57600080fd5b506103906104db366004612aaa565b60176020526000908152604090205460ff1681565b3480156104fc57600080fd5b506104b261050b366004612aaa565b600b6020526000908152604090205481565b34801561052957600080fd5b5061041f610538366004612a80565b610e6c565b34801561054957600080fd5b5061041f610558366004612ac5565b610f6f565b34801561056957600080fd5b506104b2610578366004612a80565b610fa0565b34801561058957600080fd5b506104b260105481565b34801561059f57600080fd5b5061041f6105ae366004612b11565b611036565b3480156105bf57600080fd5b5061041f6105ce366004612a4b565b611073565b3480156105df57600080fd5b5061041f6105ee366004612ac5565b6110a2565b3480156105ff57600080fd5b506104b26110bd565b34801561061457600080fd5b506013546103909060ff1681565b34801561062e57600080fd5b506104b261063d366004612a4b565b6110c9565b34801561064e57600080fd5b5061041f61065d366004612b2c565b61115c565b34801561066e57600080fd5b506104b261067d366004612a80565b6111cc565b34801561068e57600080fd5b5061041f61069d366004612b9e565b611284565b3480156106ae57600080fd5b506103e76106bd366004612a4b565b6112d9565b3480156106ce57600080fd5b506104b26106dd366004612aaa565b611350565b3480156106ee57600080fd5b5061041f6106fd366004612b11565b6113d7565b34801561070e57600080fd5b5061041f611414565b34801561072357600080fd5b5061041f610732366004612b11565b61144a565b34801561074357600080fd5b5061041f610752366004612a4b565b61148e565b34801561076357600080fd5b50600a546001600160a01b03166103e7565b34801561078157600080fd5b506103ba6114bd565b34801561079657600080fd5b5060135461039090610100900460ff1681565b61041f6107b7366004612a4b565b6114cc565b3480156107c857600080fd5b5061041f6107d7366004612ac5565b61195d565b3480156107e857600080fd5b5061041f6107f7366004612b9e565b611987565b34801561080857600080fd5b5061041f610817366004612aaa565b611996565b34801561082857600080fd5b506104b260155481565b34801561083e57600080fd5b5061085261084d366004612aaa565b611a7f565b60405161039c9190612bd1565b34801561086b57600080fd5b5061039061087a366004612a4b565b60186020526000908152604090205460ff1681565b34801561089b57600080fd5b5061041f6108aa366004612c5c565b611b36565b3480156108bb57600080fd5b5061041f6108ca366004612d1c565b611b68565b3480156108db57600080fd5b506104b2600f5481565b3480156108f157600080fd5b5061041f610900366004612b11565b611bd3565b34801561091157600080fd5b506103ba610920366004612a4b565b611c10565b34801561093157600080fd5b50600d546103e7906001600160a01b031681565b34801561095157600080fd5b506104b260145481565b34801561096757600080fd5b506103ba611cea565b34801561097c57600080fd5b506011546103909060ff1681565b34801561099657600080fd5b506104b2600e5481565b3480156109ac57600080fd5b506103906109bb366004612ddb565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156109f557600080fd5b5061041f610a04366004612a4b565b611d78565b348015610a1557600080fd5b5061041f610a24366004612aaa565b611da7565b348015610a3557600080fd5b5061041f610a44366004612a4b565b611e42565b348015610a5557600080fd5b506016546103909060ff1681565b348015610a6f57600080fd5b5061041f610a7e366004612aaa565b611e71565b60006001600160e01b0319821663780e9d6360e01b1480610aa85750610aa882611f0a565b92915050565b606060008054610abd90612e05565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae990612e05565b8015610b365780601f10610b0b57610100808354040283529160200191610b36565b820191906000526020600020905b815481529060010190602001808311610b1957829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610bbe5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610be5826112d9565b9050806001600160a01b0316836001600160a01b031603610c525760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610bb5565b336001600160a01b0382161480610c6e5750610c6e81336109bb565b610ce05760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610bb5565b610cea8383611f5a565b505050565b60128181548110610cff57600080fd5b6000918252602090912001546001600160a01b0316905081565b600a546001600160a01b03163314610d435760405162461bcd60e51b8152600401610bb590612e3f565b601455565b600a546001600160a01b03163314610d725760405162461bcd60e51b8152600401610bb590612e3f565b601254601054600090610d86906001612e8a565b90508060005b83811015610de557846001600160a01b031660128281548110610db157610db1612ea2565b6000918252602090912001546001600160a01b031603610dd357809150610de5565b80610ddd81612eb8565b915050610d8c565b50818114610e1a5760128181548110610e0057610e00612ea2565b600091825260209091200180546001600160a01b03191690555b50505050565b600a546001600160a01b03163314610e4a5760405162461bcd60e51b8152600401610bb590612e3f565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b03163314610e965760405162461bcd60e51b8152600401610bb590612e3f565b610ea881670de0b6b3a7640000612ed1565b905047818111610efa5760405162461bcd60e51b815260206004820152601860248201527f576974686472617720616d6f756e74206f766572666c6f7700000000000000006044820152606401610bb5565b6040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015610f30573d6000803e3d6000fd5b5060408051338152602081018490527f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364910160405180910390a1505050565b610f793382611fc8565b610f955760405162461bcd60e51b8152600401610bb590612ef0565b610cea8383836120bf565b6000610fab83611350565b821061100d5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610bb5565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b031633146110605760405162461bcd60e51b8152600401610bb590612e3f565b6016805460ff1916911515919091179055565b600a546001600160a01b0316331461109d5760405162461bcd60e51b8152600401610bb590612e3f565b601055565b610cea83838360405180602001604052806000815250611b36565b600080610aa860085490565b60006110d460085490565b82106111375760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610bb5565b6008828154811061114a5761114a612ea2565b90600052602060002001549050919050565b600a546001600160a01b031633146111865760405162461bcd60e51b8152600401610bb590612e3f565b600c611193828483612f8f565b506040513381527f9bfdd2b649e4e6b3a8a2d15283914c1356714c1eb38ccfbd28339e399c7d8e0f906020015b60405180910390a15050565b600080821161121d5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610bb5565b6001600160a01b0383166000908152600b6020526040812054908115801591908261124f5750601354610100900460ff165b156112665761125f600186613050565b9050611269565b50835b6000600f54826112799190612ed1565b979650505050505050565b600a546001600160a01b031633146112ae5760405162461bcd60e51b8152600401610bb590612e3f565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6000818152600260205260408120546001600160a01b031680610aa85760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610bb5565b60006001600160a01b0382166113bb5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610bb5565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146114015760405162461bcd60e51b8152600401610bb590612e3f565b6013805460ff1916911515919091179055565b600a546001600160a01b0316331461143e5760405162461bcd60e51b8152600401610bb590612e3f565b6114486000612266565b565b600a546001600160a01b031633146114745760405162461bcd60e51b8152600401610bb590612e3f565b601380549115156101000261ff0019909216919091179055565b600a546001600160a01b031633146114b85760405162461bcd60e51b8152600401610bb590612e3f565b601555565b606060018054610abd90612e05565b60006114d760085490565b60165490915060ff1615611544573360009081526017602052604090205460ff166115445760405162461bcd60e51b815260206004820152601760248201527f55736572206973206e6f742077686974656c69737465640000000000000000006044820152606401610bb5565b60115460ff16151560011461159b5760405162461bcd60e51b815260206004820152601c60248201527f4d696e74696e67204e46542069732064697361626c6564206e6f772e000000006044820152606401610bb5565b6014548211156115fb5760405162461bcd60e51b815260206004820152602560248201527f4d6178206d696e7420616d6f756e742070657220616374696f6e2069732072656044820152641858da195960da1b6064820152608401610bb5565b6010546116088383612e8a565b11156116565760405162461bcd60e51b815260206004820152601a60248201527f4d6178206d696e7420616d6f756e7420697320726561636865640000000000006044820152606401610bb5565b601554336000908152600b6020526040902054611674908490612e8a565b11156116c25760405162461bcd60e51b815260206004820152601e60248201527f45786365656420746865204d617820416d6f756e7420746f206d696e742e00006044820152606401610bb5565b60135460ff1615611891576000805b60125481101561172d57336001600160a01b0316601282815481106116f8576116f8612ea2565b6000918252602090912001546001600160a01b03160361171b576001915061172d565b8061172581612eb8565b9150506116d1565b81151560000361188e57600d546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611780573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a49190613067565b90506000600d60009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061181f9190613080565b60ff16905061182f81600a613187565b600e5461183c9190612ed1565b82101561188b5760405162461bcd60e51b815260206004820181905260248201527f4e656564206d6f72652065787465726e616c20746f6b656e20746f206d696e746044820152606401610bb5565b50505b50505b600061189d33846111cc565b90503481146118fc5760405162461bcd60e51b815260206004820152602560248201527f5072696365206d757374206265206d696e7420707269636520666f72206561636044820152641a0813919560da1b6064820152608401610bb5565b6000611909836001612e8a565b905061191533826122b8565b6000818152601860209081526040808320805460ff19166001179055338352600b909152902054611947908590612e8a565b336000908152600b602052604090205550505050565b600a546001600160a01b03163314610f955760405162461bcd60e51b8152600401610bb590612e3f565b6119923383836122d2565b5050565b600a546001600160a01b031633146119c05760405162461bcd60e51b8152600401610bb590612e3f565b601254600160005b82811015611a2257836001600160a01b0316601282815481106119ed576119ed612ea2565b6000918252602090912001546001600160a01b031603611a105760009150611a22565b80611a1a81612eb8565b9150506119c8565b50801515600103610cea57601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0385166001600160a01b0319909116179055505050565b6040805160008082526020820190925260609190611a9c84611350565b91508115611b2f578167ffffffffffffffff811115611abd57611abd612c15565b604051908082528060200260200182016040528015611ae6578160200160208202803683370190505b50905060005b82811015611b2d57611afe8582610fa0565b828281518110611b1057611b10612ea2565b602090810291909101015280611b2581612eb8565b915050611aec565b505b9392505050565b611b403383611fc8565b611b5c5760405162461bcd60e51b8152600401610bb590612ef0565b610e1a848484846123a0565b600a546001600160a01b03163314611b925760405162461bcd60e51b8152600401610bb590612e3f565b60005b8251811015610cea57611bc1838281518110611bb357611bb3612ea2565b602002602001015183611284565b80611bcb81612eb8565b915050611b95565b600a546001600160a01b03163314611bfd5760405162461bcd60e51b8152600401610bb590612e3f565b6011805460ff1916911515919091179055565b6000818152600260205260409020546060906001600160a01b0316611c8f5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610bb5565b6000611c996123d3565b90506000815111611cb95760405180602001604052806000815250611b2f565b80611cc3846123e2565b604051602001611cd4929190613193565b6040516020818303038152906040529392505050565b600c8054611cf790612e05565b80601f0160208091040260200160405190810160405280929190818152602001828054611d2390612e05565b8015611d705780601f10611d4557610100808354040283529160200191611d70565b820191906000526020600020905b815481529060010190602001808311611d5357829003601f168201915b505050505081565b600a546001600160a01b03163314611da25760405162461bcd60e51b8152600401610bb590612e3f565b600e55565b600a546001600160a01b03163314611dd15760405162461bcd60e51b8152600401610bb590612e3f565b6001600160a01b038116611e365760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bb5565b611e3f81612266565b50565b600a546001600160a01b03163314611e6c5760405162461bcd60e51b8152600401610bb590612e3f565b600f55565b600a546001600160a01b03163314611e9b5760405162461bcd60e51b8152600401610bb590612e3f565b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611ed3573d6000803e3d6000fd5b5060408051338152602081018390527f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436491016111c0565b60006001600160e01b031982166380ac58cd60e01b1480611f3b57506001600160e01b03198216635b5e139f60e01b145b80610aa857506301ffc9a760e01b6001600160e01b0319831614610aa8565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f8f826112d9565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166120415760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610bb5565b600061204c836112d9565b9050806001600160a01b0316846001600160a01b031614806120875750836001600160a01b031661207c84610b40565b6001600160a01b0316145b806120b757506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166120d2826112d9565b6001600160a01b0316146121365760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610bb5565b6001600160a01b0382166121985760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610bb5565b6121a38383836124e3565b6121ae600082611f5a565b6001600160a01b03831660009081526003602052604081208054600192906121d7908490613050565b90915550506001600160a01b0382166000908152600360205260408120805460019290612205908490612e8a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61199282826040518060200160405280600081525061259b565b816001600160a01b0316836001600160a01b0316036123335760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610bb5565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6123ab8484846120bf565b6123b7848484846125ce565b610e1a5760405162461bcd60e51b8152600401610bb5906131d2565b6060600c8054610abd90612e05565b6060816000036124095750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612433578061241d81612eb8565b915061242c9050600a8361323a565b915061240d565b60008167ffffffffffffffff81111561244e5761244e612c15565b6040519080825280601f01601f191660200182016040528015612478576020820181803683370190505b5090505b84156120b75761248d600183613050565b915061249a600a8661324e565b6124a5906030612e8a565b60f81b8183815181106124ba576124ba612ea2565b60200101906001600160f81b031916908160001a9053506124dc600a8661323a565b945061247c565b6001600160a01b03831661253e5761253981600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612561565b816001600160a01b0316836001600160a01b0316146125615761256183826126cf565b6001600160a01b03821661257857610cea8161276c565b826001600160a01b0316826001600160a01b031614610cea57610cea828261281b565b6125a5838361285f565b6125b260008484846125ce565b610cea5760405162461bcd60e51b8152600401610bb5906131d2565b60006001600160a01b0384163b156126c457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612612903390899088908890600401613262565b6020604051808303816000875af192505050801561264d575060408051601f3d908101601f1916820190925261264a9181019061329f565b60015b6126aa573d80801561267b576040519150601f19603f3d011682016040523d82523d6000602084013e612680565b606091505b5080516000036126a25760405162461bcd60e51b8152600401610bb5906131d2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506120b7565b506001949350505050565b600060016126dc84611350565b6126e69190613050565b600083815260076020526040902054909150808214612739576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061277e90600190613050565b600083815260096020526040812054600880549394509092849081106127a6576127a6612ea2565b9060005260206000200154905080600883815481106127c7576127c7612ea2565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806127ff576127ff6132bc565b6001900381819060005260206000200160009055905550505050565b600061282683611350565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6001600160a01b0382166128b55760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610bb5565b6000818152600260205260409020546001600160a01b03161561291a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610bb5565b612926600083836124e3565b6001600160a01b038216600090815260036020526040812080546001929061294f908490612e8a565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001600160e01b031981168114611e3f57600080fd5b6000602082840312156129d557600080fd5b8135611b2f816129ad565b60005b838110156129fb5781810151838201526020016129e3565b83811115610e1a5750506000910152565b60008151808452612a248160208601602086016129e0565b601f01601f19169290920160200192915050565b602081526000611b2f6020830184612a0c565b600060208284031215612a5d57600080fd5b5035919050565b80356001600160a01b0381168114612a7b57600080fd5b919050565b60008060408385031215612a9357600080fd5b612a9c83612a64565b946020939093013593505050565b600060208284031215612abc57600080fd5b611b2f82612a64565b600080600060608486031215612ada57600080fd5b612ae384612a64565b9250612af160208501612a64565b9150604084013590509250925092565b80358015158114612a7b57600080fd5b600060208284031215612b2357600080fd5b611b2f82612b01565b60008060208385031215612b3f57600080fd5b823567ffffffffffffffff80821115612b5757600080fd5b818501915085601f830112612b6b57600080fd5b813581811115612b7a57600080fd5b866020828501011115612b8c57600080fd5b60209290920196919550909350505050565b60008060408385031215612bb157600080fd5b612bba83612a64565b9150612bc860208401612b01565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612c0957835183529284019291840191600101612bed565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612c5457612c54612c15565b604052919050565b60008060008060808587031215612c7257600080fd5b612c7b85612a64565b93506020612c8a818701612a64565b935060408601359250606086013567ffffffffffffffff80821115612cae57600080fd5b818801915088601f830112612cc257600080fd5b813581811115612cd457612cd4612c15565b612ce6601f8201601f19168501612c2b565b91508082528984828501011115612cfc57600080fd5b808484018584013760008482840101525080935050505092959194509250565b60008060408385031215612d2f57600080fd5b823567ffffffffffffffff80821115612d4757600080fd5b818501915085601f830112612d5b57600080fd5b8135602082821115612d6f57612d6f612c15565b8160051b9250612d80818401612c2b565b8281529284018101928181019089851115612d9a57600080fd5b948201945b84861015612dbf57612db086612a64565b82529482019490820190612d9f565b9650612dce9050878201612b01565b9450505050509250929050565b60008060408385031215612dee57600080fd5b612df783612a64565b9150612bc860208401612a64565b600181811c90821680612e1957607f821691505b602082108103612e3957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115612e9d57612e9d612e74565b500190565b634e487b7160e01b600052603260045260246000fd5b600060018201612eca57612eca612e74565b5060010190565b6000816000190483118215151615612eeb57612eeb612e74565b500290565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b601f821115610cea57600081815260208120601f850160051c81016020861015612f685750805b601f850160051c820191505b81811015612f8757828155600101612f74565b505050505050565b67ffffffffffffffff831115612fa757612fa7612c15565b612fbb83612fb58354612e05565b83612f41565b6000601f841160018114612fef5760008515612fd75750838201355b600019600387901b1c1916600186901b178355613049565b600083815260209020601f19861690835b828110156130205786850135825560209485019460019092019101613000565b508682101561303d5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60008282101561306257613062612e74565b500390565b60006020828403121561307957600080fd5b5051919050565b60006020828403121561309257600080fd5b815160ff81168114611b2f57600080fd5b600181815b808511156130de5781600019048211156130c4576130c4612e74565b808516156130d157918102915b93841c93908002906130a8565b509250929050565b6000826130f557506001610aa8565b8161310257506000610aa8565b816001811461311857600281146131225761313e565b6001915050610aa8565b60ff84111561313357613133612e74565b50506001821b610aa8565b5060208310610133831016604e8410600b8410161715613161575081810a610aa8565b61316b83836130a3565b806000190482111561317f5761317f612e74565b029392505050565b6000611b2f83836130e6565b600083516131a58184602088016129e0565b8351908301906131b98183602088016129e0565b64173539b7b760d91b9101908152600501949350505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261324957613249613224565b500490565b60008261325d5761325d613224565b500690565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061329590830184612a0c565b9695505050505050565b6000602082840312156132b157600080fd5b8151611b2f816129ad565b634e487b7160e01b600052603160045260246000fdfea264697066735822122086f8c8afe1324aa3a82b1f27cd318251fbe1b0a1b585250dd800a2b4d93f7fb164736f6c634300080f0033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f726573757272656374696f6e6f66736172746f7368692e636f6d2f6d696e7400000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _baseUri (string): https://resurrectionofsartoshi.com/mint
Arg [1] : _token (address): 0x0000000000000000000000000000000000000000

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000027
Arg [3] : 68747470733a2f2f726573757272656374696f6e6f66736172746f7368692e63
Arg [4] : 6f6d2f6d696e7400000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

44299:7940:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38151:224;;;;;;;;;;-1:-1:-1;38151:224:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;38151:224:0;;;;;;;;24287:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25855:221::-;;;;;;;;;;-1:-1:-1;25855:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;25855:221:0;1528:203:1;25378:411:0;;;;;;;;;;-1:-1:-1;25378:411:0;;;;;:::i;:::-;;:::i;:::-;;44927:35;;;;;;;;;;-1:-1:-1;44927:35:0;;;;;:::i;:::-;;:::i;51279:116::-;;;;;;;;;;-1:-1:-1;51279:116:0;;;;;:::i;:::-;;:::i;46795:479::-;;;;;;;;;;-1:-1:-1;46795:479:0;;;;;:::i;:::-;;:::i;46131:108::-;;;;;;;;;;-1:-1:-1;46131:108:0;;;;;:::i;:::-;;:::i;38791:113::-;;;;;;;;;;-1:-1:-1;38879:10:0;:17;38791:113;;;2510:25:1;;;2498:2;2483:18;38791:113:0;2364:177:1;45195:50:0;;;;;;;;;;-1:-1:-1;45195:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;44463:51;;;;;;;;;;-1:-1:-1;44463:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;49109:325;;;;;;;;;;-1:-1:-1;49109:325:0;;;;;:::i;:::-;;:::i;26605:339::-;;;;;;;;;;-1:-1:-1;26605:339:0;;;;;:::i;:::-;;:::i;38459:256::-;;;;;;;;;;-1:-1:-1;38459:256:0;;;;;:::i;:::-;;:::i;44804:38::-;;;;;;;;;;;;;;;;51527:117;;;;;;;;;;-1:-1:-1;51527:117:0;;;;;:::i;:::-;;:::i;51171:100::-;;;;;;;;;;-1:-1:-1;51171:100:0;;;;;:::i;:::-;;:::i;27015:185::-;;;;;;;;;;-1:-1:-1;27015:185:0;;;;;:::i;:::-;;:::i;50464:133::-;;;;;;;;;;;;;:::i;44969:39::-;;;;;;;;;;-1:-1:-1;44969:39:0;;;;;;;;38981:233;;;;;;;;;;-1:-1:-1;38981:233:0;;;;;:::i;:::-;;:::i;45867:143::-;;;;;;;;;;-1:-1:-1;45867:143:0;;;;;:::i;:::-;;:::i;50605:529::-;;;;;;;;;;-1:-1:-1;50605:529:0;;;;;:::i;:::-;;:::i;51759:122::-;;;;;;;;;;-1:-1:-1;51759:122:0;;;;;:::i;:::-;;:::i;23981:239::-;;;;;;;;;;-1:-1:-1;23981:239:0;;;;;:::i;:::-;;:::i;23711:208::-;;;;;;;;;;-1:-1:-1;23711:208:0;;;;;:::i;:::-;;:::i;46018:105::-;;;;;;;;;;-1:-1:-1;46018:105:0;;;;;:::i;:::-;;:::i;21297:103::-;;;;;;;;;;;;;:::i;51652:99::-;;;;;;;;;;-1:-1:-1;51652:99:0;;;;;:::i;:::-;;:::i;51403:116::-;;;;;;;;;;-1:-1:-1;51403:116:0;;;;;:::i;:::-;;:::i;20646:87::-;;;;;;;;;;-1:-1:-1;20719:6:0;;-1:-1:-1;;;;;20719:6:0;20646:87;;24456:104;;;;;;;;;;;;;:::i;45017:33::-;;;;;;;;;;-1:-1:-1;45017:33:0;;;;;;;;;;;47507:1526;;;;;;:::i;:::-;;:::i;52104:132::-;;;;;;;;;;-1:-1:-1;52104:132:0;;;;;:::i;:::-;;:::i;26148:155::-;;;;;;;;;;-1:-1:-1;26148:155:0;;;;;:::i;:::-;;:::i;46370:417::-;;;;;;;;;;-1:-1:-1;46370:417:0;;;;;:::i;:::-;;:::i;45103:39::-;;;;;;;;;;;;;;;;49994:462;;;;;;;;;;-1:-1:-1;49994:462:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;45343:38::-;;;;;;;;;;-1:-1:-1;45343:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27271:328;;;;;;;;;;-1:-1:-1;27271:328:0;;;;;:::i;:::-;;:::i;51893:203::-;;;;;;;;;;-1:-1:-1;51893:203:0;;;;;:::i;:::-;;:::i;44736:40::-;;;;;;;;;;;;;;;;47282:87;;;;;;;;;;-1:-1:-1;47282:87:0;;;;;:::i;:::-;;:::i;24631:343::-;;;;;;;;;;-1:-1:-1;24631:343:0;;;;;:::i;:::-;;:::i;44619:27::-;;;;;;;;;;-1:-1:-1;44619:27:0;;;;-1:-1:-1;;;;;44619:27:0;;;45057:39;;;;;;;;;;;;;;;;44523:26;;;;;;;;;;;;;:::i;44887:31::-;;;;;;;;;;-1:-1:-1;44887:31:0;;;;;;;;44653:46;;;;;;;;;;;;;;;;26374:164;;;;;;;;;;-1:-1:-1;26374:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;26495:25:0;;;26471:4;26495:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;26374:164;46247:115;;;;;;;;;;-1:-1:-1;46247:115:0;;;;;:::i;:::-;;:::i;21555:201::-;;;;;;;;;;-1:-1:-1;21555:201:0;;;;;:::i;:::-;;:::i;47377:93::-;;;;;;;;;;-1:-1:-1;47377:93:0;;;;;:::i;:::-;;:::i;45151:37::-;;;;;;;;;;-1:-1:-1;45151:37:0;;;;;;;;49510:209;;;;;;;;;;-1:-1:-1;49510:209:0;;;;;:::i;:::-;;:::i;38151:224::-;38253:4;-1:-1:-1;;;;;;38277:50:0;;-1:-1:-1;;;38277:50:0;;:90;;;38331:36;38355:11;38331:23;:36::i;:::-;38270:97;38151:224;-1:-1:-1;;38151:224:0:o;24287:100::-;24341:13;24374:5;24367:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24287:100;:::o;25855:221::-;25931:7;29198:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29198:16:0;25951:73;;;;-1:-1:-1;;;25951:73:0;;8220:2:1;25951:73:0;;;8202:21:1;8259:2;8239:18;;;8232:30;8298:34;8278:18;;;8271:62;-1:-1:-1;;;8349:18:1;;;8342:42;8401:19;;25951:73:0;;;;;;;;;-1:-1:-1;26044:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;26044:24:0;;25855:221::o;25378:411::-;25459:13;25475:23;25490:7;25475:14;:23::i;:::-;25459:39;;25523:5;-1:-1:-1;;;;;25517:11:0;:2;-1:-1:-1;;;;;25517:11:0;;25509:57;;;;-1:-1:-1;;;25509:57:0;;8633:2:1;25509:57:0;;;8615:21:1;8672:2;8652:18;;;8645:30;8711:34;8691:18;;;8684:62;-1:-1:-1;;;8762:18:1;;;8755:31;8803:19;;25509:57:0;8431:397:1;25509:57:0;19589:10;-1:-1:-1;;;;;25601:21:0;;;;:62;;-1:-1:-1;25626:37:0;25643:5;19589:10;26374:164;:::i;25626:37::-;25579:168;;;;-1:-1:-1;;;25579:168:0;;9035:2:1;25579:168:0;;;9017:21:1;9074:2;9054:18;;;9047:30;9113:34;9093:18;;;9086:62;9184:26;9164:18;;;9157:54;9228:19;;25579:168:0;8833:420:1;25579:168:0;25760:21;25769:2;25773:7;25760:8;:21::i;:::-;25448:341;25378:411;;:::o;44927:35::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;44927:35:0;;-1:-1:-1;44927:35:0;:::o;51279:116::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;51357:19:::1;:30:::0;51279:116::o;46795:479::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;46891:18:::1;:25:::0;46950:16:::1;::::0;46874:14:::1;::::0;46950:20:::1;::::0;46969:1:::1;46950:20;:::i;:::-;46927:43:::0;-1:-1:-1;46927:43:0;46982:10:::1;47018:159;47038:6;47036:1;:8;47018:159;;;47094:5;-1:-1:-1::0;;;;;47069:30:0::1;:18;47088:1;47069:21;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;47069:21:0::1;:30:::0;47066:100:::1;;47125:1;47120:6;;47145:5;;47066:100;47046:3:::0;::::1;::::0;::::1;:::i;:::-;;;;47018:159;;;;47197:12;47191:2;:18;47187:80;;47233:18;47252:2;47233:22;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;47226:29:::0;;-1:-1:-1;;;;;;47226:29:0::1;::::0;;47187:80:::1;46863:411;;;46795:479:::0;:::o;46131:108::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;46201:13:::1;:30:::0;;-1:-1:-1;;;;;;46201:30:0::1;-1:-1:-1::0;;;;;46201:30:0;;;::::1;::::0;;;::::1;::::0;;46131:108::o;49109:325::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;49203:19:::1;:6:::0;49213:8:::1;49203:19;:::i;:::-;49194:28:::0;-1:-1:-1;49251:21:0::1;49291:16:::0;;::::1;49283:53;;;::::0;-1:-1:-1;;;49283:53:0;;10531:2:1;49283:53:0::1;::::0;::::1;10513:21:1::0;10570:2;10550:18;;;10543:30;10609:26;10589:18;;;10582:54;10653:18;;49283:53:0::1;10329:348:1::0;49283:53:0::1;49347:35;::::0;-1:-1:-1;;;;;49347:27:0;::::1;::::0;:35;::::1;;;::::0;49375:6;;49347:35:::1;::::0;;;49375:6;49347:27;:35;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;49398:28:0::1;::::0;;49407:10:::1;10856:51:1::0;;10938:2;10923:18;;10916:34;;;49398:28:0::1;::::0;10829:18:1;49398:28:0::1;;;;;;;49183:251;49109:325:::0;;:::o;26605:339::-;26800:41;19589:10;26833:7;26800:18;:41::i;:::-;26792:103;;;;-1:-1:-1;;;26792:103:0;;;;;;;:::i;:::-;26908:28;26918:4;26924:2;26928:7;26908:9;:28::i;38459:256::-;38556:7;38592:23;38609:5;38592:16;:23::i;:::-;38584:5;:31;38576:87;;;;-1:-1:-1;;;38576:87:0;;11581:2:1;38576:87:0;;;11563:21:1;11620:2;11600:18;;;11593:30;11659:34;11639:18;;;11632:62;-1:-1:-1;;;11710:18:1;;;11703:41;11761:19;;38576:87:0;11379:407:1;38576:87:0;-1:-1:-1;;;;;;38681:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;38459:256::o;51527:117::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;51604:18:::1;:32:::0;;-1:-1:-1;;51604:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;51527:117::o;51171:100::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;51240:16:::1;:23:::0;51171:100::o;27015:185::-;27153:39;27170:4;27176:2;27180:7;27153:39;;;;;;;;;;;;:16;:39::i;50464:133::-;50515:7;50535:14;50552:13;38879:10;:17;;38791:113;38981:233;39056:7;39092:30;38879:10;:17;;38791:113;39092:30;39084:5;:38;39076:95;;;;-1:-1:-1;;;39076:95:0;;11993:2:1;39076:95:0;;;11975:21:1;12032:2;12012:18;;;12005:30;12071:34;12051:18;;;12044:62;-1:-1:-1;;;12122:18:1;;;12115:42;12174:19;;39076:95:0;11791:408:1;39076:95:0;39189:10;39200:5;39189:17;;;;;;;;:::i;:::-;;;;;;;;;39182:24;;38981:233;;;:::o;45867:143::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;45942:12:::1;:22;45957:7:::0;;45942:12;:22:::1;:::i;:::-;-1:-1:-1::0;45980:22:0::1;::::0;45991:10:::1;1674:51:1::0;;45980:22:0::1;::::0;1662:2:1;1647:18;45980:22:0::1;;;;;;;;45867:143:::0;;:::o;50605:529::-;50676:7;50715:1;50705:7;:11;50696:54;;;;-1:-1:-1;;;50696:54:0;;14464:2:1;50696:54:0;;;14446:21:1;14503:2;14483:18;;;14476:30;14542:31;14522:18;;;14515:59;14591:18;;50696:54:0;14262:353:1;50696:54:0;-1:-1:-1;;;;;50791:20:0;;50761:27;50791:20;;;:16;:20;;;;;;;50848:23;;;;;50761:27;50848:23;50913:37;;-1:-1:-1;50936:14:0;;;;;;;50913:37;50910:143;;;50978:11;50988:1;50978:7;:11;:::i;:::-;50966:23;;50910:143;;;-1:-1:-1;51034:7:0;50910:143;51063:13;51091:10;;51079:9;:22;;;;:::i;:::-;51063:38;50605:529;-1:-1:-1;;;;;;;50605:529:0:o;51759:122::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51840:25:0;;;::::1;;::::0;;;:17:::1;:25;::::0;;;;:33;;-1:-1:-1;;51840:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;51759:122::o;23981:239::-;24053:7;24089:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24089:16:0;;24116:73;;;;-1:-1:-1;;;24116:73:0;;14952:2:1;24116:73:0;;;14934:21:1;14991:2;14971:18;;;14964:30;15030:34;15010:18;;;15003:62;-1:-1:-1;;;15081:18:1;;;15074:39;15130:19;;24116:73:0;14750:405:1;23711:208:0;23783:7;-1:-1:-1;;;;;23811:19:0;;23803:74;;;;-1:-1:-1;;;23803:74:0;;15362:2:1;23803:74:0;;;15344:21:1;15401:2;15381:18;;;15374:30;15440:34;15420:18;;;15413:62;-1:-1:-1;;;15491:18:1;;;15484:40;15541:19;;23803:74:0;15160:406:1;23803:74:0;-1:-1:-1;;;;;;23895:16:0;;;;;:9;:16;;;;;;;23711:208::o;46018:105::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;46088:19:::1;:27:::0;;-1:-1:-1;;46088:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46018:105::o;21297:103::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;21362:30:::1;21389:1;21362:18;:30::i;:::-;21297:103::o:0;51652:99::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;51720:14:::1;:23:::0;;;::::1;;;;-1:-1:-1::0;;51720:23:0;;::::1;::::0;;;::::1;::::0;;51652:99::o;51403:116::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;51481:19:::1;:30:::0;51403:116::o;24456:104::-;24512:13;24545:7;24538:14;;;;;:::i;47507:1526::-;47566:14;47583:13;38879:10;:17;;38791:113;47583:13;47611:18;;47566:30;;-1:-1:-1;47611:18:0;;47607:116;;;47672:10;47654:29;;;;:17;:29;;;;;;;;47646:65;;;;-1:-1:-1;;;47646:65:0;;15773:2:1;47646:65:0;;;15755:21:1;15812:2;15792:18;;;15785:30;15851:25;15831:18;;;15824:53;15894:18;;47646:65:0;15571:347:1;47646:65:0;47741:11;;;;:19;;:11;:19;47733:60;;;;-1:-1:-1;;;47733:60:0;;16125:2:1;47733:60:0;;;16107:21:1;16164:2;16144:18;;;16137:30;16203;16183:18;;;16176:58;16251:18;;47733:60:0;15923:352:1;47733:60:0;47823:19;;47812:7;:30;;47804:80;;;;-1:-1:-1;;;47804:80:0;;16482:2:1;47804:80:0;;;16464:21:1;16521:2;16501:18;;;16494:30;16560:34;16540:18;;;16533:62;-1:-1:-1;;;16611:18:1;;;16604:35;16656:19;;47804:80:0;16280:401:1;47804:80:0;47923:16;;47903;47912:7;47903:6;:16;:::i;:::-;:36;;47895:75;;;;-1:-1:-1;;;47895:75:0;;16888:2:1;47895:75:0;;;16870:21:1;16927:2;16907:18;;;16900:30;16966:28;16946:18;;;16939:56;17012:18;;47895:75:0;16686:350:1;47895:75:0;48031:19;;48006:10;47989:28;;;;:16;:28;;;;;;:38;;48020:7;;47989:38;:::i;:::-;:61;;47981:104;;;;-1:-1:-1;;;47981:104:0;;17243:2:1;47981:104:0;;;17225:21:1;17282:2;17262:18;;;17255:30;17321:32;17301:18;;;17294:60;17371:18;;47981:104:0;17041:354:1;47981:104:0;48101:19;;;;48098:598;;;48136:9;48168;48192:200;48203:18;:25;48201:27;;48192:200;;;48283:10;-1:-1:-1;;;;;48258:35:0;:18;48277:1;48258:21;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;48258:21:0;:35;48254:123;;48325:4;48318:11;;48352:5;;48254:123;48230:3;;;;:::i;:::-;;;;48192:200;;;48410:13;;;48418:5;48410:13;48406:279;;48462:13;;:35;;-1:-1:-1;;;48462:35:0;;48486:10;48462:35;;;1674:51:1;48444:15:0;;-1:-1:-1;;;;;48462:13:0;;:23;;1647:18:1;;48462:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48444:53;;48516:15;48534:13;;;;;;;;;-1:-1:-1;;;;;48534:13:0;-1:-1:-1;;;;;48534:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48516:42;;;-1:-1:-1;48618:13:0;48516:42;48618:2;:13;:::i;:::-;48597:17;;:35;;;;:::i;:::-;48586:7;:46;;48577:92;;;;-1:-1:-1;;;48577:92:0;;19443:2:1;48577:92:0;;;19425:21:1;;;19462:18;;;19455:30;19521:34;19501:18;;;19494:62;19573:18;;48577:92:0;19241:356:1;48577:92:0;48425:260;;48406:279;48121:575;;48098:598;48708:17;48728:33;48741:10;48753:7;48728:12;:33::i;:::-;48708:53;;48794:9;48781;:22;48772:73;;;;-1:-1:-1;;;48772:73:0;;19804:2:1;48772:73:0;;;19786:21:1;19843:2;19823:18;;;19816:30;19882:34;19862:18;;;19855:62;-1:-1:-1;;;19933:18:1;;;19926:35;19978:19;;48772:73:0;19602:401:1;48772:73:0;48858:10;48871;:6;48880:1;48871:10;:::i;:::-;48858:23;;48892:25;48902:10;48914:2;48892:9;:25::i;:::-;48928:10;;;;:6;:10;;;;;;;;:17;;-1:-1:-1;;48928:17:0;48941:4;48928:17;;;49004:10;48987:28;;:16;:28;;;;;;:38;;49018:7;;48987:38;:::i;:::-;48973:10;48956:28;;;;:16;:28;;;;;:69;-1:-1:-1;;;;47507:1526:0:o;52104:132::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;26148:155::-;26243:52;19589:10;26276:8;26286;26243:18;:52::i;:::-;26148:155;;:::o;46370:417::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;46466:18:::1;:25:::0;46514:4:::1;46449:14;46529:165;46549:6;46547:1;:8;46529:165;;;46605:5;-1:-1:-1::0;;;;;46580:30:0::1;:18;46599:1;46580:21;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;46580:21:0::1;:30:::0;46577:106:::1;;46638:5;46631:12;;46662:5;;46577:106;46557:3:::0;::::1;::::0;::::1;:::i;:::-;;;;46529:165;;;-1:-1:-1::0;46708:13:0;::::1;;46717:4;46708:13:::0;46704:76:::1;;46738:18;:30:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;46738:30:0;;;;;::::1;::::0;;-1:-1:-1;;;;;46738:30:0;::::1;-1:-1:-1::0;;;;;;46738:30:0;;::::1;;::::0;;46438:349:::1;;46370:417:::0;:::o;49994:462::-;50142:16;;;50081:18;50142:16;;;;;;;;;50052;;50081:18;50182:15;50192:4;50182:9;:15::i;:::-;50169:28;-1:-1:-1;50214:14:0;;50210:213;;50270:10;50256:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50256:25:0;;50245:36;;50300:9;50296:116;50319:10;50315:1;:14;50296:116;;;50368:28;50388:4;50394:1;50368:19;:28::i;:::-;50354:8;50363:1;50354:11;;;;;;;;:::i;:::-;;;;;;;;;;:42;50331:3;;;;:::i;:::-;;;;50296:116;;;;50210:213;50440:8;49994:462;-1:-1:-1;;;49994:462:0:o;27271:328::-;27446:41;19589:10;27479:7;27446:18;:41::i;:::-;27438:103;;;;-1:-1:-1;;;27438:103:0;;;;;;;:::i;:::-;27552:39;27566:4;27572:2;27576:7;27585:5;27552:13;:39::i;51893:203::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;51989:9:::1;51985:104;52008:7;:14;52004:1;:18;51985:104;;;52043:34;52059:7;52067:1;52059:10;;;;;;;;:::i;:::-;;;;;;;52071:5;52043:15;:34::i;:::-;52024:3:::0;::::1;::::0;::::1;:::i;:::-;;;;51985:104;;47282:87:::0;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;47342:11:::1;:19:::0;;-1:-1:-1;;47342:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47282:87::o;24631:343::-;29174:4;29198:16;;;:7;:16;;;;;;24704:13;;-1:-1:-1;;;;;29198:16:0;24730:76;;;;-1:-1:-1;;;24730:76:0;;20210:2:1;24730:76:0;;;20192:21:1;20249:2;20229:18;;;20222:30;20288:34;20268:18;;;20261:62;-1:-1:-1;;;20339:18:1;;;20332:45;20394:19;;24730:76:0;20008:411:1;24730:76:0;24819:21;24843:10;:8;:10::i;:::-;24819:34;;24895:1;24877:7;24871:21;:25;:95;;;;;;;;;;;;;;;;;24923:7;24932:18;:7;:16;:18::i;:::-;24906:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24864:102;24631:343;-1:-1:-1;;;24631:343:0:o;44523:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46247:115::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;46327:17:::1;:27:::0;46247:115::o;21555:201::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21644:22:0;::::1;21636:73;;;::::0;-1:-1:-1;;;21636:73:0;;21268:2:1;21636:73:0::1;::::0;::::1;21250:21:1::0;21307:2;21287:18;;;21280:30;21346:34;21326:18;;;21319:62;-1:-1:-1;;;21397:18:1;;;21390:36;21443:19;;21636:73:0::1;21066:402:1::0;21636:73:0::1;21720:28;21739:8;21720:18;:28::i;:::-;21555:201:::0;:::o;47377:93::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;47443:10:::1;:19:::0;47377:93::o;49510:209::-;20719:6;;-1:-1:-1;;;;;20719:6:0;19589:10;20866:23;20858:68;;;;-1:-1:-1;;;20858:68:0;;;;;;;:::i;:::-;49630:36:::1;::::0;49598:21:::1;::::0;-1:-1:-1;;;;;49630:27:0;::::1;::::0;:36;::::1;;;::::0;49598:21;;49580:15:::1;49630:36:::0;49580:15;49630:36;49598:21;49630:27;:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;49682:29:0::1;::::0;;49691:10:::1;10856:51:1::0;;10938:2;10923:18;;10916:34;;;49682:29:0::1;::::0;10829:18:1;49682:29:0::1;10682:274:1::0;23342:305:0;23444:4;-1:-1:-1;;;;;;23481:40:0;;-1:-1:-1;;;23481:40:0;;:105;;-1:-1:-1;;;;;;;23538:48:0;;-1:-1:-1;;;23538:48:0;23481:105;:158;;;-1:-1:-1;;;;;;;;;;18912:40:0;;;23603:36;18803:157;33255:174;33330:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;33330:29:0;-1:-1:-1;;;;;33330:29:0;;;;;;;;:24;;33384:23;33330:24;33384:14;:23::i;:::-;-1:-1:-1;;;;;33375:46:0;;;;;;;;;;;33255:174;;:::o;29403:348::-;29496:4;29198:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29198:16:0;29513:73;;;;-1:-1:-1;;;29513:73:0;;21675:2:1;29513:73:0;;;21657:21:1;21714:2;21694:18;;;21687:30;21753:34;21733:18;;;21726:62;-1:-1:-1;;;21804:18:1;;;21797:42;21856:19;;29513:73:0;21473:408:1;29513:73:0;29597:13;29613:23;29628:7;29613:14;:23::i;:::-;29597:39;;29666:5;-1:-1:-1;;;;;29655:16:0;:7;-1:-1:-1;;;;;29655:16:0;;:51;;;;29699:7;-1:-1:-1;;;;;29675:31:0;:20;29687:7;29675:11;:20::i;:::-;-1:-1:-1;;;;;29675:31:0;;29655:51;:87;;;-1:-1:-1;;;;;;26495:25:0;;;26471:4;26495:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;29710:32;29647:96;29403:348;-1:-1:-1;;;;29403:348:0:o;32512:625::-;32671:4;-1:-1:-1;;;;;32644:31:0;:23;32659:7;32644:14;:23::i;:::-;-1:-1:-1;;;;;32644:31:0;;32636:81;;;;-1:-1:-1;;;32636:81:0;;22088:2:1;32636:81:0;;;22070:21:1;22127:2;22107:18;;;22100:30;22166:34;22146:18;;;22139:62;-1:-1:-1;;;22217:18:1;;;22210:35;22262:19;;32636:81:0;21886:401:1;32636:81:0;-1:-1:-1;;;;;32736:16:0;;32728:65;;;;-1:-1:-1;;;32728:65:0;;22494:2:1;32728:65:0;;;22476:21:1;22533:2;22513:18;;;22506:30;22572:34;22552:18;;;22545:62;-1:-1:-1;;;22623:18:1;;;22616:34;22667:19;;32728:65:0;22292:400:1;32728:65:0;32806:39;32827:4;32833:2;32837:7;32806:20;:39::i;:::-;32910:29;32927:1;32931:7;32910:8;:29::i;:::-;-1:-1:-1;;;;;32952:15:0;;;;;;:9;:15;;;;;:20;;32971:1;;32952:15;:20;;32971:1;;32952:20;:::i;:::-;;;;-1:-1:-1;;;;;;;32983:13:0;;;;;;:9;:13;;;;;:18;;33000:1;;32983:13;:18;;33000:1;;32983:18;:::i;:::-;;;;-1:-1:-1;;33012:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33012:21:0;-1:-1:-1;;;;;33012:21:0;;;;;;;;;33051:27;;33012:16;;33051:27;;;;;;;25448:341;25378:411;;:::o;21916:191::-;22009:6;;;-1:-1:-1;;;;;22026:17:0;;;-1:-1:-1;;;;;;22026:17:0;;;;;;;22059:40;;22009:6;;;22026:17;22009:6;;22059:40;;21990:16;;22059:40;21979:128;21916:191;:::o;30093:110::-;30169:26;30179:2;30183:7;30169:26;;;;;;;;;;;;:9;:26::i;33571:315::-;33726:8;-1:-1:-1;;;;;33717:17:0;:5;-1:-1:-1;;;;;33717:17:0;;33709:55;;;;-1:-1:-1;;;33709:55:0;;22899:2:1;33709:55:0;;;22881:21:1;22938:2;22918:18;;;22911:30;22977:27;22957:18;;;22950:55;23022:18;;33709:55:0;22697:349:1;33709:55:0;-1:-1:-1;;;;;33775:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;33775:46:0;;;;;;;;;;33837:41;;540::1;;;33837::0;;513:18:1;33837:41:0;;;;;;;33571:315;;;:::o;28481:::-;28638:28;28648:4;28654:2;28658:7;28638:9;:28::i;:::-;28685:48;28708:4;28714:2;28718:7;28727:5;28685:22;:48::i;:::-;28677:111;;;;-1:-1:-1;;;28677:111:0;;;;;;;:::i;45683:113::-;45743:13;45776:12;45769:19;;;;;:::i;16346:723::-;16402:13;16623:5;16632:1;16623:10;16619:53;;-1:-1:-1;;16650:10:0;;;;;;;;;;;;-1:-1:-1;;;16650:10:0;;;;;16346:723::o;16619:53::-;16697:5;16682:12;16738:78;16745:9;;16738:78;;16771:8;;;;:::i;:::-;;-1:-1:-1;16794:10:0;;-1:-1:-1;16802:2:0;16794:10;;:::i;:::-;;;16738:78;;;16826:19;16858:6;16848:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16848:17:0;;16826:39;;16876:154;16883:10;;16876:154;;16910:11;16920:1;16910:11;;:::i;:::-;;-1:-1:-1;16979:10:0;16987:2;16979:5;:10;:::i;:::-;16966:24;;:2;:24;:::i;:::-;16953:39;;16936:6;16943;16936:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;16936:56:0;;;;;;;;-1:-1:-1;17007:11:0;17016:2;17007:11;;:::i;:::-;;;16876:154;;39827:589;-1:-1:-1;;;;;40033:18:0;;40029:187;;40068:40;40100:7;41243:10;:17;;41216:24;;;;:15;:24;;;;;:44;;;41271:24;;;;;;;;;;;;41139:164;40068:40;40029:187;;;40138:2;-1:-1:-1;;;;;40130:10:0;:4;-1:-1:-1;;;;;40130:10:0;;40126:90;;40157:47;40190:4;40196:7;40157:32;:47::i;:::-;-1:-1:-1;;;;;40230:16:0;;40226:183;;40263:45;40300:7;40263:36;:45::i;40226:183::-;40336:4;-1:-1:-1;;;;;40330:10:0;:2;-1:-1:-1;;;;;40330:10:0;;40326:83;;40357:40;40385:2;40389:7;40357:27;:40::i;30430:321::-;30560:18;30566:2;30570:7;30560:5;:18::i;:::-;30611:54;30642:1;30646:2;30650:7;30659:5;30611:22;:54::i;:::-;30589:154;;;;-1:-1:-1;;;30589:154:0;;;;;;;:::i;34451:799::-;34606:4;-1:-1:-1;;;;;34627:13:0;;8412:19;:23;34623:620;;34663:72;;-1:-1:-1;;;34663:72:0;;-1:-1:-1;;;;;34663:36:0;;;;;:72;;19589:10;;34714:4;;34720:7;;34729:5;;34663:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34663:72:0;;;;;;;;-1:-1:-1;;34663:72:0;;;;;;;;;;;;:::i;:::-;;;34659:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34905:6;:13;34922:1;34905:18;34901:272;;34948:60;;-1:-1:-1;;;34948:60:0;;;;;;;:::i;34901:272::-;35123:6;35117:13;35108:6;35104:2;35100:15;35093:38;34659:529;-1:-1:-1;;;;;;34786:51:0;-1:-1:-1;;;34786:51:0;;-1:-1:-1;34779:58:0;;34623:620;-1:-1:-1;35227:4:0;34451:799;;;;;;:::o;41930:988::-;42196:22;42246:1;42221:22;42238:4;42221:16;:22::i;:::-;:26;;;;:::i;:::-;42258:18;42279:26;;;:17;:26;;;;;;42196:51;;-1:-1:-1;42412:28:0;;;42408:328;;-1:-1:-1;;;;;42479:18:0;;42457:19;42479:18;;;:12;:18;;;;;;;;:34;;;;;;;;;42530:30;;;;;;:44;;;42647:30;;:17;:30;;;;;:43;;;42408:328;-1:-1:-1;42832:26:0;;;;:17;:26;;;;;;;;42825:33;;;-1:-1:-1;;;;;42876:18:0;;;;;:12;:18;;;;;:34;;;;;;;42869:41;41930:988::o;43213:1079::-;43491:10;:17;43466:22;;43491:21;;43511:1;;43491:21;:::i;:::-;43523:18;43544:24;;;:15;:24;;;;;;43917:10;:26;;43466:46;;-1:-1:-1;43544:24:0;;43466:46;;43917:26;;;;;;:::i;:::-;;;;;;;;;43895:48;;43981:11;43956:10;43967;43956:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;44061:28;;;:15;:28;;;;;;;:41;;;44233:24;;;;;44226:31;44268:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;43284:1008;;;43213:1079;:::o;40717:221::-;40802:14;40819:20;40836:2;40819:16;:20::i;:::-;-1:-1:-1;;;;;40850:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;40895:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;40717:221:0:o;31087:439::-;-1:-1:-1;;;;;31167:16:0;;31159:61;;;;-1:-1:-1;;;31159:61:0;;24926:2:1;31159:61:0;;;24908:21:1;;;24945:18;;;24938:30;25004:34;24984:18;;;24977:62;25056:18;;31159:61:0;24724:356:1;31159:61:0;29174:4;29198:16;;;:7;:16;;;;;;-1:-1:-1;;;;;29198:16:0;:30;31231:58;;;;-1:-1:-1;;;31231:58:0;;25287:2:1;31231:58:0;;;25269:21:1;25326:2;25306:18;;;25299:30;25365;25345:18;;;25338:58;25413:18;;31231:58:0;25085:352:1;31231:58:0;31302:45;31331:1;31335:2;31339:7;31302:20;:45::i;:::-;-1:-1:-1;;;;;31360:13:0;;;;;;:9;:13;;;;;:18;;31377:1;;31360:13;:18;;31377:1;;31360:18;:::i;:::-;;;;-1:-1:-1;;31389:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;31389:21:0;-1:-1:-1;;;;;31389:21:0;;;;;;;;31428:33;;31389:16;;;31428:33;;31389:16;;31428:33;26148:155;;:::o;14:131:1:-;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:1;;1843:42;;1833:70;;1899:1;1896;1889:12;1833:70;1736:173;;;:::o;1914:254::-;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:1:o;2173:186::-;2232:6;2285:2;2273:9;2264:7;2260:23;2256:32;2253:52;;;2301:1;2298;2291:12;2253:52;2324:29;2343:9;2324:29;:::i;2546:328::-;2623:6;2631;2639;2692:2;2680:9;2671:7;2667:23;2663:32;2660:52;;;2708:1;2705;2698:12;2660:52;2731:29;2750:9;2731:29;:::i;:::-;2721:39;;2779:38;2813:2;2802:9;2798:18;2779:38;:::i;:::-;2769:48;;2864:2;2853:9;2849:18;2836:32;2826:42;;2546:328;;;;;:::o;2879:160::-;2944:20;;3000:13;;2993:21;2983:32;;2973:60;;3029:1;3026;3019:12;3044:180;3100:6;3153:2;3141:9;3132:7;3128:23;3124:32;3121:52;;;3169:1;3166;3159:12;3121:52;3192:26;3208:9;3192:26;:::i;3229:592::-;3300:6;3308;3361:2;3349:9;3340:7;3336:23;3332:32;3329:52;;;3377:1;3374;3367:12;3329:52;3417:9;3404:23;3446:18;3487:2;3479:6;3476:14;3473:34;;;3503:1;3500;3493:12;3473:34;3541:6;3530:9;3526:22;3516:32;;3586:7;3579:4;3575:2;3571:13;3567:27;3557:55;;3608:1;3605;3598:12;3557:55;3648:2;3635:16;3674:2;3666:6;3663:14;3660:34;;;3690:1;3687;3680:12;3660:34;3735:7;3730:2;3721:6;3717:2;3713:15;3709:24;3706:37;3703:57;;;3756:1;3753;3746:12;3703:57;3787:2;3779:11;;;;;3809:6;;-1:-1:-1;3229:592:1;;-1:-1:-1;;;;3229:592:1:o;3826:254::-;3891:6;3899;3952:2;3940:9;3931:7;3927:23;3923:32;3920:52;;;3968:1;3965;3958:12;3920:52;3991:29;4010:9;3991:29;:::i;:::-;3981:39;;4039:35;4070:2;4059:9;4055:18;4039:35;:::i;:::-;4029:45;;3826:254;;;;;:::o;4085:632::-;4256:2;4308:21;;;4378:13;;4281:18;;;4400:22;;;4227:4;;4256:2;4479:15;;;;4453:2;4438:18;;;4227:4;4522:169;4536:6;4533:1;4530:13;4522:169;;;4597:13;;4585:26;;4666:15;;;;4631:12;;;;4558:1;4551:9;4522:169;;;-1:-1:-1;4708:3:1;;4085:632;-1:-1:-1;;;;;;4085:632:1:o;4722:127::-;4783:10;4778:3;4774:20;4771:1;4764:31;4814:4;4811:1;4804:15;4838:4;4835:1;4828:15;4854:275;4925:2;4919:9;4990:2;4971:13;;-1:-1:-1;;4967:27:1;4955:40;;5025:18;5010:34;;5046:22;;;5007:62;5004:88;;;5072:18;;:::i;:::-;5108:2;5101:22;4854:275;;-1:-1:-1;4854:275:1:o;5134:980::-;5229:6;5237;5245;5253;5306:3;5294:9;5285:7;5281:23;5277:33;5274:53;;;5323:1;5320;5313:12;5274:53;5346:29;5365:9;5346:29;:::i;:::-;5336:39;;5394:2;5415:38;5449:2;5438:9;5434:18;5415:38;:::i;:::-;5405:48;;5500:2;5489:9;5485:18;5472:32;5462:42;;5555:2;5544:9;5540:18;5527:32;5578:18;5619:2;5611:6;5608:14;5605:34;;;5635:1;5632;5625:12;5605:34;5673:6;5662:9;5658:22;5648:32;;5718:7;5711:4;5707:2;5703:13;5699:27;5689:55;;5740:1;5737;5730:12;5689:55;5776:2;5763:16;5798:2;5794;5791:10;5788:36;;;5804:18;;:::i;:::-;5846:53;5889:2;5870:13;;-1:-1:-1;;5866:27:1;5862:36;;5846:53;:::i;:::-;5833:66;;5922:2;5915:5;5908:17;5962:7;5957:2;5952;5948;5944:11;5940:20;5937:33;5934:53;;;5983:1;5980;5973:12;5934:53;6038:2;6033;6029;6025:11;6020:2;6013:5;6009:14;5996:45;6082:1;6077:2;6072;6065:5;6061:14;6057:23;6050:34;;6103:5;6093:15;;;;;5134:980;;;;;;;:::o;6119:1022::-;6209:6;6217;6270:2;6258:9;6249:7;6245:23;6241:32;6238:52;;;6286:1;6283;6276:12;6238:52;6326:9;6313:23;6355:18;6396:2;6388:6;6385:14;6382:34;;;6412:1;6409;6402:12;6382:34;6450:6;6439:9;6435:22;6425:32;;6495:7;6488:4;6484:2;6480:13;6476:27;6466:55;;6517:1;6514;6507:12;6466:55;6553:2;6540:16;6575:4;6598:2;6594;6591:10;6588:36;;;6604:18;;:::i;:::-;6650:2;6647:1;6643:10;6633:20;;6673:28;6697:2;6693;6689:11;6673:28;:::i;:::-;6735:15;;;6805:11;;;6801:20;;;6766:12;;;;6833:19;;;6830:39;;;6865:1;6862;6855:12;6830:39;6889:11;;;;6909:148;6925:6;6920:3;6917:15;6909:148;;;6991:23;7010:3;6991:23;:::i;:::-;6979:36;;6942:12;;;;7035;;;;6909:148;;;7076:5;-1:-1:-1;7100:35:1;;-1:-1:-1;7116:18:1;;;7100:35;:::i;:::-;7090:45;;;;;;6119:1022;;;;;:::o;7368:260::-;7436:6;7444;7497:2;7485:9;7476:7;7472:23;7468:32;7465:52;;;7513:1;7510;7503:12;7465:52;7536:29;7555:9;7536:29;:::i;:::-;7526:39;;7584:38;7618:2;7607:9;7603:18;7584:38;:::i;7633:380::-;7712:1;7708:12;;;;7755;;;7776:61;;7830:4;7822:6;7818:17;7808:27;;7776:61;7883:2;7875:6;7872:14;7852:18;7849:38;7846:161;;7929:10;7924:3;7920:20;7917:1;7910:31;7964:4;7961:1;7954:15;7992:4;7989:1;7982:15;7846:161;;7633:380;;;:::o;9258:356::-;9460:2;9442:21;;;9479:18;;;9472:30;9538:34;9533:2;9518:18;;9511:62;9605:2;9590:18;;9258:356::o;9619:127::-;9680:10;9675:3;9671:20;9668:1;9661:31;9711:4;9708:1;9701:15;9735:4;9732:1;9725:15;9751:128;9791:3;9822:1;9818:6;9815:1;9812:13;9809:39;;;9828:18;;:::i;:::-;-1:-1:-1;9864:9:1;;9751:128::o;9884:127::-;9945:10;9940:3;9936:20;9933:1;9926:31;9976:4;9973:1;9966:15;10000:4;9997:1;9990:15;10016:135;10055:3;10076:17;;;10073:43;;10096:18;;:::i;:::-;-1:-1:-1;10143:1:1;10132:13;;10016:135::o;10156:168::-;10196:7;10262:1;10258;10254:6;10250:14;10247:1;10244:21;10239:1;10232:9;10225:17;10221:45;10218:71;;;10269:18;;:::i;:::-;-1:-1:-1;10309:9:1;;10156:168::o;10961:413::-;11163:2;11145:21;;;11202:2;11182:18;;;11175:30;11241:34;11236:2;11221:18;;11214:62;-1:-1:-1;;;11307:2:1;11292:18;;11285:47;11364:3;11349:19;;10961:413::o;12330:545::-;12432:2;12427:3;12424:11;12421:448;;;12468:1;12493:5;12489:2;12482:17;12538:4;12534:2;12524:19;12608:2;12596:10;12592:19;12589:1;12585:27;12579:4;12575:38;12644:4;12632:10;12629:20;12626:47;;;-1:-1:-1;12667:4:1;12626:47;12722:2;12717:3;12713:12;12710:1;12706:20;12700:4;12696:31;12686:41;;12777:82;12795:2;12788:5;12785:13;12777:82;;;12840:17;;;12821:1;12810:13;12777:82;;;12781:3;;;12330:545;;;:::o;13051:1206::-;13175:18;13170:3;13167:27;13164:53;;;13197:18;;:::i;:::-;13226:94;13316:3;13276:38;13308:4;13302:11;13276:38;:::i;:::-;13270:4;13226:94;:::i;:::-;13346:1;13371:2;13366:3;13363:11;13388:1;13383:616;;;;14043:1;14060:3;14057:93;;;-1:-1:-1;14116:19:1;;;14103:33;14057:93;-1:-1:-1;;13008:1:1;13004:11;;;13000:24;12996:29;12986:40;13032:1;13028:11;;;12983:57;14163:78;;13356:895;;13383:616;12277:1;12270:14;;;12314:4;12301:18;;-1:-1:-1;;13419:17:1;;;13520:9;13542:229;13556:7;13553:1;13550:14;13542:229;;;13645:19;;;13632:33;13617:49;;13752:4;13737:20;;;;13705:1;13693:14;;;;13572:12;13542:229;;;13546:3;13799;13790:7;13787:16;13784:159;;;13923:1;13919:6;13913:3;13907;13904:1;13900:11;13896:21;13892:34;13888:39;13875:9;13870:3;13866:19;13853:33;13849:79;13841:6;13834:95;13784:159;;;13986:1;13980:3;13977:1;13973:11;13969:19;13963:4;13956:33;13356:895;;;13051:1206;;;:::o;14620:125::-;14660:4;14688:1;14685;14682:8;14679:34;;;14693:18;;:::i;:::-;-1:-1:-1;14730:9:1;;14620:125::o;17400:184::-;17470:6;17523:2;17511:9;17502:7;17498:23;17494:32;17491:52;;;17539:1;17536;17529:12;17491:52;-1:-1:-1;17562:16:1;;17400:184;-1:-1:-1;17400:184:1:o;17589:273::-;17657:6;17710:2;17698:9;17689:7;17685:23;17681:32;17678:52;;;17726:1;17723;17716:12;17678:52;17758:9;17752:16;17808:4;17801:5;17797:16;17790:5;17787:27;17777:55;;17828:1;17825;17818:12;17867:422;17956:1;17999:5;17956:1;18013:270;18034:7;18024:8;18021:21;18013:270;;;18093:4;18089:1;18085:6;18081:17;18075:4;18072:27;18069:53;;;18102:18;;:::i;:::-;18152:7;18142:8;18138:22;18135:55;;;18172:16;;;;18135:55;18251:22;;;;18211:15;;;;18013:270;;;18017:3;17867:422;;;;;:::o;18294:806::-;18343:5;18373:8;18363:80;;-1:-1:-1;18414:1:1;18428:5;;18363:80;18462:4;18452:76;;-1:-1:-1;18499:1:1;18513:5;;18452:76;18544:4;18562:1;18557:59;;;;18630:1;18625:130;;;;18537:218;;18557:59;18587:1;18578:10;;18601:5;;;18625:130;18662:3;18652:8;18649:17;18646:43;;;18669:18;;:::i;:::-;-1:-1:-1;;18725:1:1;18711:16;;18740:5;;18537:218;;18839:2;18829:8;18826:16;18820:3;18814:4;18811:13;18807:36;18801:2;18791:8;18788:16;18783:2;18777:4;18774:12;18770:35;18767:77;18764:159;;;-1:-1:-1;18876:19:1;;;18908:5;;18764:159;18955:34;18980:8;18974:4;18955:34;:::i;:::-;19025:6;19021:1;19017:6;19013:19;19004:7;19001:32;18998:58;;;19036:18;;:::i;:::-;19074:20;;18294:806;-1:-1:-1;;;18294:806:1:o;19105:131::-;19165:5;19194:36;19221:8;19215:4;19194:36;:::i;20424:637::-;20704:3;20742:6;20736:13;20758:53;20804:6;20799:3;20792:4;20784:6;20780:17;20758:53;:::i;:::-;20874:13;;20833:16;;;;20896:57;20874:13;20833:16;20930:4;20918:17;;20896:57;:::i;:::-;-1:-1:-1;;;20975:20:1;;21004:22;;;21053:1;21042:13;;20424:637;-1:-1:-1;;;;20424:637:1:o;23051:414::-;23253:2;23235:21;;;23292:2;23272:18;;;23265:30;23331:34;23326:2;23311:18;;23304:62;-1:-1:-1;;;23397:2:1;23382:18;;23375:48;23455:3;23440:19;;23051:414::o;23470:127::-;23531:10;23526:3;23522:20;23519:1;23512:31;23562:4;23559:1;23552:15;23586:4;23583:1;23576:15;23602:120;23642:1;23668;23658:35;;23673:18;;:::i;:::-;-1:-1:-1;23707:9:1;;23602:120::o;23727:112::-;23759:1;23785;23775:35;;23790:18;;:::i;:::-;-1:-1:-1;23824:9:1;;23727:112::o;23844:489::-;-1:-1:-1;;;;;24113:15:1;;;24095:34;;24165:15;;24160:2;24145:18;;24138:43;24212:2;24197:18;;24190:34;;;24260:3;24255:2;24240:18;;24233:31;;;24038:4;;24281:46;;24307:19;;24299:6;24281:46;:::i;:::-;24273:54;23844:489;-1:-1:-1;;;;;;23844:489:1:o;24338:249::-;24407:6;24460:2;24448:9;24439:7;24435:23;24431:32;24428:52;;;24476:1;24473;24466:12;24428:52;24508:9;24502:16;24527:30;24551:5;24527:30;:::i;24592:127::-;24653:10;24648:3;24644:20;24641:1;24634:31;24684:4;24681:1;24674:15;24708:4;24705:1;24698:15

Swarm Source

ipfs://86f8c8afe1324aa3a82b1f27cd318251fbe1b0a1b585250dd800a2b4d93f7fb1
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.