ETH Price: $3,442.02 (-1.02%)
Gas: 3 Gwei

Token

Shinigami.Official (Shinigami.Official)
 

Overview

Max Total Supply

147 Shinigami.Official

Holders

79

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 Shinigami.Official
0x272217c3B6A836445CeadBA7990FAA183a4E5832
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:
Shinigami

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: contracts/utils/Strings.sol



pragma solidity ^0.8.0;

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

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

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

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

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

// File: contracts/utils/Context.sol



pragma solidity ^0.8.0;

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

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

// File: contracts/access/Ownable.sol



pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_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 {
        _setOwner(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"
        );
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: contracts/utils/Address.sol



pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/token/ERC721/extensions/IERC721Enumerable.sol



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

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

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer of token that is not own"
        );
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

// File: contracts/token/ERC721/extensions/ERC721Enumerable.sol



pragma solidity ^0.8.0;



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

// File: tests/Shinigami.sol

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;



contract Shinigami is ERC721Enumerable, Ownable {
    using Strings for uint256;

    string public baseURI;
    string public baseExtension = ".json";
    string public notRevealedUri;
    uint256 public cost = 0.088 ether;
    uint256 public maxSupply = 6666;
    uint256 public maxMintAmount = 3;
    uint256 public nftPerAddresslimit = 3;
    bool public paused = false;
    bool public onlyWhitelisted = true;
    address[] public whitelistedAddress;


    constructor(
        string memory _name,
        string memory _symbol,
        string memory _initBaseURI
    ) ERC721(_name, _symbol) {
        setBaseURI(_initBaseURI);
        for (uint256 i = 1; i <= 40; i++) {
            _safeMint(owner(), i);
        }
    }

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

    // public
    function mint(uint256 _mintAmount) public payable {
        require(!paused);
        uint256 supply = totalSupply();
        require(_mintAmount > 0);
        require(_mintAmount <= maxMintAmount);
        require(supply + _mintAmount <= maxSupply);
        
        if (msg.sender != owner()) {
            if (onlyWhitelisted == true) {
                require(isWhitelisted(msg.sender), "user is not whitelisted");
                uint256 ownerTokenCount = balanceOf(msg.sender);
                require(ownerTokenCount < nftPerAddresslimit);
            }
            require(msg.value >= cost * _mintAmount);
        }

        for (uint256 i = 1; i <= _mintAmount; i++) {
            _safeMint(msg.sender, supply + i);
        }
    }

    function isWhitelisted(address _user) public view returns (bool) {
        for(uint256 i = 0; i < whitelistedAddress.length; i++) {
            if (whitelistedAddress[i] == _user) {
                return true;
            } 
        }
        return false;
    }

    function walletOfOwner(address _owner)
        public
        view
        returns (uint256[] memory)
    {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory tokenIds = new uint256[](ownerTokenCount);
        for (uint256 i; i < ownerTokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokenIds;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

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

    //only owner
    function setNftPerAddresslimit(uint256 _limit) public onlyOwner {
        nftPerAddresslimit = _limit;
    }

    function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
        maxMintAmount = _newmaxMintAmount;
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }

    function setBaseExtension(string memory _newBaseExtension)
        public
        onlyOwner
    {
        baseExtension = _newBaseExtension;
    }


    function pause(bool _state) public onlyOwner {
        paused = _state;
    }

    function setOnlyWhitelisted(bool _state) public onlyOwner {
        onlyWhitelisted = _state;
    } 

    function whitelistUsers(address[] calldata _users) public onlyOwner {
        delete whitelistedAddress;
        whitelistedAddress = _users;
    }


    function withdraw() public payable onlyOwner {
        (bool success, ) = payable(msg.sender).call{
            value: address(this).balance
        }("");
        require(success);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddresslimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddresslimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000d1a565b50670138a388a43c0000600e55611a0a600f55600360105560036011556000601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff021916908315150217905550348015620000b157600080fd5b5060405162005e6938038062005e698339818101604052810190620000d7919062000e91565b82828160009080519060200190620000f192919062000d1a565b5080600190805190602001906200010a92919062000d1a565b5050506200012d620001216200018f60201b60201c565b6200019760201b60201c565b6200013e816200025d60201b60201c565b6000600190505b6028811162000185576200016f620001626200030860201b60201c565b826200033260201b60201c565b80806200017c906200139e565b91505062000145565b505050506200162f565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200026d6200018f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002936200030860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002e3906200114c565b60405180910390fd5b80600b90805190602001906200030492919062000d1a565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620003548282604051806020016040528060008152506200035860201b60201c565b5050565b6200036a8383620003c660201b60201c565b6200037f6000848484620005ac60201b60201c565b620003c1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003b890620010c4565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000439576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000430906200112a565b60405180910390fd5b6200044a816200076660201b60201c565b156200048d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200048490620010e6565b60405180910390fd5b620004a160008383620007d260201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620004f39190620011fa565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620005da8473ffffffffffffffffffffffffffffffffffffffff166200091960201b62001e631760201c565b1562000759578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200060c6200018f60201b60201c565b8786866040518563ffffffff1660e01b815260040162000630949392919062001070565b602060405180830381600087803b1580156200064b57600080fd5b505af19250505080156200067f57506040513d601f19601f820116820180604052508101906200067c919062000e5f565b60015b62000708573d8060008114620006b2576040519150601f19603f3d011682016040523d82523d6000602084013e620006b7565b606091505b5060008151141562000700576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f790620010c4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506200075e565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620007ea8383836200092c60201b62001e761760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620008375762000831816200093160201b60201c565b6200087f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146200087e576200087d83826200097a60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008cc57620008c68162000af760201b60201c565b62000914565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620009135762000912828262000bd360201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001620009948462000c5f60201b6200147e1760201c565b620009a0919062001257565b905060006007600084815260200190815260200160002054905081811462000a86576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000b0d919062001257565b905060006009600084815260200190815260200160002054905060006008838154811062000b405762000b3f62001479565b5b90600052602060002001549050806008838154811062000b655762000b6462001479565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000bb75762000bb66200144a565b5b6001900381819060005260206000200160009055905550505050565b600062000beb8362000c5f60201b6200147e1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000cd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cca9062001108565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000d289062001332565b90600052602060002090601f01602090048101928262000d4c576000855562000d98565b82601f1062000d6757805160ff191683800117855562000d98565b8280016001018555821562000d98579182015b8281111562000d9757825182559160200191906001019062000d7a565b5b50905062000da7919062000dab565b5090565b5b8082111562000dc657600081600090555060010162000dac565b5090565b600062000de162000ddb8462001197565b6200116e565b90508281526020810184848401111562000e005762000dff620014dc565b5b62000e0d848285620012fc565b509392505050565b60008151905062000e268162001615565b92915050565b600082601f83011262000e445762000e43620014d7565b5b815162000e5684826020860162000dca565b91505092915050565b60006020828403121562000e785762000e77620014e6565b5b600062000e888482850162000e15565b91505092915050565b60008060006060848603121562000ead5762000eac620014e6565b5b600084015167ffffffffffffffff81111562000ece5762000ecd620014e1565b5b62000edc8682870162000e2c565b935050602084015167ffffffffffffffff81111562000f005762000eff620014e1565b5b62000f0e8682870162000e2c565b925050604084015167ffffffffffffffff81111562000f325762000f31620014e1565b5b62000f408682870162000e2c565b9150509250925092565b62000f558162001292565b82525050565b600062000f6882620011cd565b62000f748185620011d8565b935062000f86818560208601620012fc565b62000f9181620014eb565b840191505092915050565b600062000fab603283620011e9565b915062000fb882620014fc565b604082019050919050565b600062000fd2601c83620011e9565b915062000fdf826200154b565b602082019050919050565b600062000ff9602a83620011e9565b9150620010068262001574565b604082019050919050565b600062001020602083620011e9565b91506200102d82620015c3565b602082019050919050565b600062001047602083620011e9565b91506200105482620015ec565b602082019050919050565b6200106a81620012f2565b82525050565b600060808201905062001087600083018762000f4a565b62001096602083018662000f4a565b620010a560408301856200105f565b8181036060830152620010b9818462000f5b565b905095945050505050565b60006020820190508181036000830152620010df8162000f9c565b9050919050565b60006020820190508181036000830152620011018162000fc3565b9050919050565b60006020820190508181036000830152620011238162000fea565b9050919050565b60006020820190508181036000830152620011458162001011565b9050919050565b60006020820190508181036000830152620011678162001038565b9050919050565b60006200117a6200118d565b905062001188828262001368565b919050565b6000604051905090565b600067ffffffffffffffff821115620011b557620011b4620014a8565b5b620011c082620014eb565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200120782620012f2565b91506200121483620012f2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200124c576200124b620013ec565b5b828201905092915050565b60006200126482620012f2565b91506200127183620012f2565b925082821015620012875762001286620013ec565b5b828203905092915050565b60006200129f82620012d2565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200131c578082015181840152602081019050620012ff565b838111156200132c576000848401525b50505050565b600060028204905060018216806200134b57607f821691505b602082108114156200136257620013616200141b565b5b50919050565b6200137382620014eb565b810181811067ffffffffffffffff82111715620013955762001394620014a8565b5b80604052505050565b6000620013ab82620012f2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620013e157620013e0620013ec565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200162081620012a6565b81146200162c57600080fd5b50565b61482a806200163f6000396000f3fe60806040526004361061023b5760003560e01c806355f804b31161012e578063a0712d68116100ab578063d5abeb011161006f578063d5abeb011461087d578063da3ef23f146108a8578063e985e9c5146108d1578063edec5f271461090e578063f2fde38b146109375761023b565b8063a0712d68146107a7578063a22cb465146107c3578063b88d4fde146107ec578063c668286214610815578063c87b56dd146108405761023b565b8063715018a6116100f2578063715018a6146106e65780637f00c7a6146106fd5780638da5cb5b1461072657806395d89b41146107515780639c70b5121461077c5761023b565b806355f804b3146105ed5780635c975abb146106165780636352211e146106415780636c0360eb1461067e57806370a08231146106a95761023b565b806325a4206d116101bc57806342842e0e1161018057806342842e0e146104e2578063438b63001461050b57806343bd396d146105485780634a0283d6146105735780634f6ccce7146105b05761023b565b806325a4206d1461040c5780632f745c59146104355780633af32abf146104725780633c952764146104af5780633ccfd60b146104d85761023b565b8063095ea7b311610203578063095ea7b31461033957806313faede61461036257806318160ddd1461038d578063239c70ae146103b857806323b872dd146103e35761023b565b806301ffc9a71461024057806302329a291461027d57806306fdde03146102a6578063081812fc146102d1578063081c8c441461030e575b600080fd5b34801561024c57600080fd5b506102676004803603810190610262919061347b565b610960565b6040516102749190613aaa565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f919061344e565b6109da565b005b3480156102b257600080fd5b506102bb610a73565b6040516102c89190613ac5565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f3919061351e565b610b05565b6040516103059190613a21565b60405180910390f35b34801561031a57600080fd5b50610323610b8a565b6040516103309190613ac5565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b91906133c1565b610c18565b005b34801561036e57600080fd5b50610377610d30565b6040516103849190613d47565b60405180910390f35b34801561039957600080fd5b506103a2610d36565b6040516103af9190613d47565b60405180910390f35b3480156103c457600080fd5b506103cd610d43565b6040516103da9190613d47565b60405180910390f35b3480156103ef57600080fd5b5061040a600480360381019061040591906132ab565b610d49565b005b34801561041857600080fd5b50610433600480360381019061042e919061351e565b610da9565b005b34801561044157600080fd5b5061045c600480360381019061045791906133c1565b610e2f565b6040516104699190613d47565b60405180910390f35b34801561047e57600080fd5b506104996004803603810190610494919061323e565b610ed4565b6040516104a69190613aaa565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d1919061344e565b610f83565b005b6104e061101c565b005b3480156104ee57600080fd5b50610509600480360381019061050491906132ab565b611111565b005b34801561051757600080fd5b50610532600480360381019061052d919061323e565b611131565b60405161053f9190613a88565b60405180910390f35b34801561055457600080fd5b5061055d6111df565b60405161056a9190613d47565b60405180910390f35b34801561057f57600080fd5b5061059a6004803603810190610595919061351e565b6111e5565b6040516105a79190613a21565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d2919061351e565b611224565b6040516105e49190613d47565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f91906134d5565b611295565b005b34801561062257600080fd5b5061062b61132b565b6040516106389190613aaa565b60405180910390f35b34801561064d57600080fd5b506106686004803603810190610663919061351e565b61133e565b6040516106759190613a21565b60405180910390f35b34801561068a57600080fd5b506106936113f0565b6040516106a09190613ac5565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb919061323e565b61147e565b6040516106dd9190613d47565b60405180910390f35b3480156106f257600080fd5b506106fb611536565b005b34801561070957600080fd5b50610724600480360381019061071f919061351e565b6115be565b005b34801561073257600080fd5b5061073b611644565b6040516107489190613a21565b60405180910390f35b34801561075d57600080fd5b5061076661166e565b6040516107739190613ac5565b60405180910390f35b34801561078857600080fd5b50610791611700565b60405161079e9190613aaa565b60405180910390f35b6107c160048036038101906107bc919061351e565b611713565b005b3480156107cf57600080fd5b506107ea60048036038101906107e59190613381565b611880565b005b3480156107f857600080fd5b50610813600480360381019061080e91906132fe565b611a01565b005b34801561082157600080fd5b5061082a611a63565b6040516108379190613ac5565b60405180910390f35b34801561084c57600080fd5b506108676004803603810190610862919061351e565b611af1565b6040516108749190613ac5565b60405180910390f35b34801561088957600080fd5b50610892611b9b565b60405161089f9190613d47565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca91906134d5565b611ba1565b005b3480156108dd57600080fd5b506108f860048036038101906108f3919061326b565b611c37565b6040516109059190613aaa565b60405180910390f35b34801561091a57600080fd5b5061093560048036038101906109309190613401565b611ccb565b005b34801561094357600080fd5b5061095e6004803603810190610959919061323e565b611d6b565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109d357506109d282611e7b565b5b9050919050565b6109e2611f5d565b73ffffffffffffffffffffffffffffffffffffffff16610a00611644565b73ffffffffffffffffffffffffffffffffffffffff1614610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d90613c67565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610a8290614050565b80601f0160208091040260200160405190810160405280929190818152602001828054610aae90614050565b8015610afb5780601f10610ad057610100808354040283529160200191610afb565b820191906000526020600020905b815481529060010190602001808311610ade57829003601f168201915b5050505050905090565b6000610b1082611f65565b610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4690613c47565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610b9790614050565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc390614050565b8015610c105780601f10610be557610100808354040283529160200191610c10565b820191906000526020600020905b815481529060010190602001808311610bf357829003601f168201915b505050505081565b6000610c238261133e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90613cc7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cb3611f5d565b73ffffffffffffffffffffffffffffffffffffffff161480610ce25750610ce181610cdc611f5d565b611c37565b5b610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890613bc7565b60405180910390fd5b610d2b8383611fd1565b505050565b600e5481565b6000600880549050905090565b60105481565b610d5a610d54611f5d565b8261208a565b610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090613ce7565b60405180910390fd5b610da4838383612168565b505050565b610db1611f5d565b73ffffffffffffffffffffffffffffffffffffffff16610dcf611644565b73ffffffffffffffffffffffffffffffffffffffff1614610e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1c90613c67565b60405180910390fd5b8060118190555050565b6000610e3a8361147e565b8210610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290613ae7565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601380549050811015610f78578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610f1457610f136141e9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f65576001915050610f7e565b8080610f70906140b3565b915050610edc565b50600090505b919050565b610f8b611f5d565b73ffffffffffffffffffffffffffffffffffffffff16610fa9611644565b73ffffffffffffffffffffffffffffffffffffffff1614610fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff690613c67565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b611024611f5d565b73ffffffffffffffffffffffffffffffffffffffff16611042611644565b73ffffffffffffffffffffffffffffffffffffffff1614611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f90613c67565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516110be90613a0c565b60006040518083038185875af1925050503d80600081146110fb576040519150601f19603f3d011682016040523d82523d6000602084013e611100565b606091505b505090508061110e57600080fd5b50565b61112c83838360405180602001604052806000815250611a01565b505050565b6060600061113e8361147e565b905060008167ffffffffffffffff81111561115c5761115b614218565b5b60405190808252806020026020018201604052801561118a5781602001602082028036833780820191505090505b50905060005b828110156111d4576111a28582610e2f565b8282815181106111b5576111b46141e9565b5b60200260200101818152505080806111cc906140b3565b915050611190565b508092505050919050565b60115481565b601381815481106111f557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061122e610d36565b821061126f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126690613d07565b60405180910390fd5b60088281548110611283576112826141e9565b5b90600052602060002001549050919050565b61129d611f5d565b73ffffffffffffffffffffffffffffffffffffffff166112bb611644565b73ffffffffffffffffffffffffffffffffffffffff1614611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890613c67565b60405180910390fd5b80600b9080519060200190611327929190612f3b565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90613c07565b60405180910390fd5b80915050919050565b600b80546113fd90614050565b80601f016020809104026020016040519081016040528092919081815260200182805461142990614050565b80156114765780601f1061144b57610100808354040283529160200191611476565b820191906000526020600020905b81548152906001019060200180831161145957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e690613be7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61153e611f5d565b73ffffffffffffffffffffffffffffffffffffffff1661155c611644565b73ffffffffffffffffffffffffffffffffffffffff16146115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990613c67565b60405180910390fd5b6115bc60006123c4565b565b6115c6611f5d565b73ffffffffffffffffffffffffffffffffffffffff166115e4611644565b73ffffffffffffffffffffffffffffffffffffffff161461163a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163190613c67565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461167d90614050565b80601f01602080910402602001604051908101604052809291908181526020018280546116a990614050565b80156116f65780601f106116cb576101008083540402835291602001916116f6565b820191906000526020600020905b8154815290600101906020018083116116d957829003601f168201915b5050505050905090565b601260019054906101000a900460ff1681565b601260009054906101000a900460ff161561172d57600080fd5b6000611737610d36565b90506000821161174657600080fd5b60105482111561175557600080fd5b600f5482826117649190613e85565b111561176f57600080fd5b611777611644565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118455760011515601260019054906101000a900460ff161515141561182a576117ce33610ed4565b61180d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180490613d27565b60405180910390fd5b60006118183361147e565b9050601154811061182857600080fd5b505b81600e546118389190613f0c565b34101561184457600080fd5b5b6000600190505b82811161187b576118683382846118639190613e85565b61248a565b8080611873906140b3565b91505061184c565b505050565b611888611f5d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90613b87565b60405180910390fd5b8060056000611903611f5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119b0611f5d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119f59190613aaa565b60405180910390a35050565b611a12611a0c611f5d565b8361208a565b611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890613ce7565b60405180910390fd5b611a5d848484846124a8565b50505050565b600c8054611a7090614050565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9c90614050565b8015611ae95780601f10611abe57610100808354040283529160200191611ae9565b820191906000526020600020905b815481529060010190602001808311611acc57829003601f168201915b505050505081565b6060611afc82611f65565b611b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3290613ca7565b60405180910390fd5b6000611b45612504565b90506000815111611b655760405180602001604052806000815250611b93565b80611b6f84612596565b600c604051602001611b83939291906139db565b6040516020818303038152906040525b915050919050565b600f5481565b611ba9611f5d565b73ffffffffffffffffffffffffffffffffffffffff16611bc7611644565b73ffffffffffffffffffffffffffffffffffffffff1614611c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1490613c67565b60405180910390fd5b80600c9080519060200190611c33929190612f3b565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cd3611f5d565b73ffffffffffffffffffffffffffffffffffffffff16611cf1611644565b73ffffffffffffffffffffffffffffffffffffffff1614611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e90613c67565b60405180910390fd5b60136000611d559190612fc1565b818160139190611d66929190612fe2565b505050565b611d73611f5d565b73ffffffffffffffffffffffffffffffffffffffff16611d91611644565b73ffffffffffffffffffffffffffffffffffffffff1614611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde90613c67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90613b27565b60405180910390fd5b611e60816123c4565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f4657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611f565750611f55826126f7565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120448361133e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061209582611f65565b6120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb90613ba7565b60405180910390fd5b60006120df8361133e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061214e57508373ffffffffffffffffffffffffffffffffffffffff1661213684610b05565b73ffffffffffffffffffffffffffffffffffffffff16145b8061215f575061215e8185611c37565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121888261133e565b73ffffffffffffffffffffffffffffffffffffffff16146121de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d590613c87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561224e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224590613b67565b60405180910390fd5b612259838383612761565b612264600082611fd1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122b49190613f66565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461230b9190613e85565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124a4828260405180602001604052806000815250612875565b5050565b6124b3848484612168565b6124bf848484846128d0565b6124fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f590613b07565b60405180910390fd5b50505050565b6060600b805461251390614050565b80601f016020809104026020016040519081016040528092919081815260200182805461253f90614050565b801561258c5780601f106125615761010080835404028352916020019161258c565b820191906000526020600020905b81548152906001019060200180831161256f57829003601f168201915b5050505050905090565b606060008214156125de576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126f2565b600082905060005b600082146126105780806125f9906140b3565b915050600a826126099190613edb565b91506125e6565b60008167ffffffffffffffff81111561262c5761262b614218565b5b6040519080825280601f01601f19166020018201604052801561265e5781602001600182028036833780820191505090505b5090505b600085146126eb576001826126779190613f66565b9150600a8561268691906140fc565b60306126929190613e85565b60f81b8183815181106126a8576126a76141e9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126e49190613edb565b9450612662565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61276c838383611e76565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127af576127aa81612a67565b6127ee565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127ed576127ec8382612ab0565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128315761282c81612c1d565b612870565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461286f5761286e8282612cee565b5b5b505050565b61287f8383612d6d565b61288c60008484846128d0565b6128cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c290613b07565b60405180910390fd5b505050565b60006128f18473ffffffffffffffffffffffffffffffffffffffff16611e63565b15612a5a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261291a611f5d565b8786866040518563ffffffff1660e01b815260040161293c9493929190613a3c565b602060405180830381600087803b15801561295657600080fd5b505af192505050801561298757506040513d601f19601f8201168201806040525081019061298491906134a8565b60015b612a0a573d80600081146129b7576040519150601f19603f3d011682016040523d82523d6000602084013e6129bc565b606091505b50600081511415612a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f990613b07565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a5f565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612abd8461147e565b612ac79190613f66565b9050600060076000848152602001908152602001600020549050818114612bac576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612c319190613f66565b9050600060096000848152602001908152602001600020549050600060088381548110612c6157612c606141e9565b5b906000526020600020015490508060088381548110612c8357612c826141e9565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612cd257612cd16141ba565b5b6001900381819060005260206000200160009055905550505050565b6000612cf98361147e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd490613c27565b60405180910390fd5b612de681611f65565b15612e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1d90613b47565b60405180910390fd5b612e3260008383612761565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e829190613e85565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612f4790614050565b90600052602060002090601f016020900481019282612f695760008555612fb0565b82601f10612f8257805160ff1916838001178555612fb0565b82800160010185558215612fb0579182015b82811115612faf578251825591602001919060010190612f94565b5b509050612fbd9190613082565b5090565b5080546000825590600052602060002090810190612fdf9190613082565b50565b828054828255906000526020600020908101928215613071579160200282015b8281111561307057823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613002565b5b50905061307e9190613082565b5090565b5b8082111561309b576000816000905550600101613083565b5090565b60006130b26130ad84613d87565b613d62565b9050828152602081018484840111156130ce576130cd614256565b5b6130d984828561400e565b509392505050565b60006130f46130ef84613db8565b613d62565b9050828152602081018484840111156131105761310f614256565b5b61311b84828561400e565b509392505050565b60008135905061313281614798565b92915050565b60008083601f84011261314e5761314d61424c565b5b8235905067ffffffffffffffff81111561316b5761316a614247565b5b60208301915083602082028301111561318757613186614251565b5b9250929050565b60008135905061319d816147af565b92915050565b6000813590506131b2816147c6565b92915050565b6000815190506131c7816147c6565b92915050565b600082601f8301126131e2576131e161424c565b5b81356131f284826020860161309f565b91505092915050565b600082601f8301126132105761320f61424c565b5b81356132208482602086016130e1565b91505092915050565b600081359050613238816147dd565b92915050565b60006020828403121561325457613253614260565b5b600061326284828501613123565b91505092915050565b6000806040838503121561328257613281614260565b5b600061329085828601613123565b92505060206132a185828601613123565b9150509250929050565b6000806000606084860312156132c4576132c3614260565b5b60006132d286828701613123565b93505060206132e386828701613123565b92505060406132f486828701613229565b9150509250925092565b6000806000806080858703121561331857613317614260565b5b600061332687828801613123565b945050602061333787828801613123565b935050604061334887828801613229565b925050606085013567ffffffffffffffff8111156133695761336861425b565b5b613375878288016131cd565b91505092959194509250565b6000806040838503121561339857613397614260565b5b60006133a685828601613123565b92505060206133b78582860161318e565b9150509250929050565b600080604083850312156133d8576133d7614260565b5b60006133e685828601613123565b92505060206133f785828601613229565b9150509250929050565b6000806020838503121561341857613417614260565b5b600083013567ffffffffffffffff8111156134365761343561425b565b5b61344285828601613138565b92509250509250929050565b60006020828403121561346457613463614260565b5b60006134728482850161318e565b91505092915050565b60006020828403121561349157613490614260565b5b600061349f848285016131a3565b91505092915050565b6000602082840312156134be576134bd614260565b5b60006134cc848285016131b8565b91505092915050565b6000602082840312156134eb576134ea614260565b5b600082013567ffffffffffffffff8111156135095761350861425b565b5b613515848285016131fb565b91505092915050565b60006020828403121561353457613533614260565b5b600061354284828501613229565b91505092915050565b600061355783836139bd565b60208301905092915050565b61356c81613f9a565b82525050565b600061357d82613e0e565b6135878185613e3c565b935061359283613de9565b8060005b838110156135c35781516135aa888261354b565b97506135b583613e2f565b925050600181019050613596565b5085935050505092915050565b6135d981613fac565b82525050565b60006135ea82613e19565b6135f48185613e4d565b935061360481856020860161401d565b61360d81614265565b840191505092915050565b600061362382613e24565b61362d8185613e69565b935061363d81856020860161401d565b61364681614265565b840191505092915050565b600061365c82613e24565b6136668185613e7a565b935061367681856020860161401d565b80840191505092915050565b6000815461368f81614050565b6136998186613e7a565b945060018216600081146136b457600181146136c5576136f8565b60ff198316865281860193506136f8565b6136ce85613df9565b60005b838110156136f0578154818901526001820191506020810190506136d1565b838801955050505b50505092915050565b600061370e602b83613e69565b915061371982614276565b604082019050919050565b6000613731603283613e69565b915061373c826142c5565b604082019050919050565b6000613754602683613e69565b915061375f82614314565b604082019050919050565b6000613777601c83613e69565b915061378282614363565b602082019050919050565b600061379a602483613e69565b91506137a58261438c565b604082019050919050565b60006137bd601983613e69565b91506137c8826143db565b602082019050919050565b60006137e0602c83613e69565b91506137eb82614404565b604082019050919050565b6000613803603883613e69565b915061380e82614453565b604082019050919050565b6000613826602a83613e69565b9150613831826144a2565b604082019050919050565b6000613849602983613e69565b9150613854826144f1565b604082019050919050565b600061386c602083613e69565b915061387782614540565b602082019050919050565b600061388f602c83613e69565b915061389a82614569565b604082019050919050565b60006138b2602083613e69565b91506138bd826145b8565b602082019050919050565b60006138d5602983613e69565b91506138e0826145e1565b604082019050919050565b60006138f8602f83613e69565b915061390382614630565b604082019050919050565b600061391b602183613e69565b91506139268261467f565b604082019050919050565b600061393e600083613e5e565b9150613949826146ce565b600082019050919050565b6000613961603183613e69565b915061396c826146d1565b604082019050919050565b6000613984602c83613e69565b915061398f82614720565b604082019050919050565b60006139a7601783613e69565b91506139b28261476f565b602082019050919050565b6139c681614004565b82525050565b6139d581614004565b82525050565b60006139e78286613651565b91506139f38285613651565b91506139ff8284613682565b9150819050949350505050565b6000613a1782613931565b9150819050919050565b6000602082019050613a366000830184613563565b92915050565b6000608082019050613a516000830187613563565b613a5e6020830186613563565b613a6b60408301856139cc565b8181036060830152613a7d81846135df565b905095945050505050565b60006020820190508181036000830152613aa28184613572565b905092915050565b6000602082019050613abf60008301846135d0565b92915050565b60006020820190508181036000830152613adf8184613618565b905092915050565b60006020820190508181036000830152613b0081613701565b9050919050565b60006020820190508181036000830152613b2081613724565b9050919050565b60006020820190508181036000830152613b4081613747565b9050919050565b60006020820190508181036000830152613b608161376a565b9050919050565b60006020820190508181036000830152613b808161378d565b9050919050565b60006020820190508181036000830152613ba0816137b0565b9050919050565b60006020820190508181036000830152613bc0816137d3565b9050919050565b60006020820190508181036000830152613be0816137f6565b9050919050565b60006020820190508181036000830152613c0081613819565b9050919050565b60006020820190508181036000830152613c208161383c565b9050919050565b60006020820190508181036000830152613c408161385f565b9050919050565b60006020820190508181036000830152613c6081613882565b9050919050565b60006020820190508181036000830152613c80816138a5565b9050919050565b60006020820190508181036000830152613ca0816138c8565b9050919050565b60006020820190508181036000830152613cc0816138eb565b9050919050565b60006020820190508181036000830152613ce08161390e565b9050919050565b60006020820190508181036000830152613d0081613954565b9050919050565b60006020820190508181036000830152613d2081613977565b9050919050565b60006020820190508181036000830152613d408161399a565b9050919050565b6000602082019050613d5c60008301846139cc565b92915050565b6000613d6c613d7d565b9050613d788282614082565b919050565b6000604051905090565b600067ffffffffffffffff821115613da257613da1614218565b5b613dab82614265565b9050602081019050919050565b600067ffffffffffffffff821115613dd357613dd2614218565b5b613ddc82614265565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e9082614004565b9150613e9b83614004565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ed057613ecf61412d565b5b828201905092915050565b6000613ee682614004565b9150613ef183614004565b925082613f0157613f0061415c565b5b828204905092915050565b6000613f1782614004565b9150613f2283614004565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f5b57613f5a61412d565b5b828202905092915050565b6000613f7182614004565b9150613f7c83614004565b925082821015613f8f57613f8e61412d565b5b828203905092915050565b6000613fa582613fe4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561403b578082015181840152602081019050614020565b8381111561404a576000848401525b50505050565b6000600282049050600182168061406857607f821691505b6020821081141561407c5761407b61418b565b5b50919050565b61408b82614265565b810181811067ffffffffffffffff821117156140aa576140a9614218565b5b80604052505050565b60006140be82614004565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156140f1576140f061412d565b5b600182019050919050565b600061410782614004565b915061411283614004565b9250826141225761412161415c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b6147a181613f9a565b81146147ac57600080fd5b50565b6147b881613fac565b81146147c357600080fd5b50565b6147cf81613fb8565b81146147da57600080fd5b50565b6147e681614004565b81146147f157600080fd5b5056fea26469706673582212206c4b671f29a9e495729b4ac2354bfbfc0f1aa0f7b681295cec7a9e7109cb156b64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000125368696e6967616d692e4f6666696369616c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000125368696e6967616d692e4f6666696369616c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6171463668657a617837505a373738654778383761693368334178427056464379443650666e343366574c6f2f00000000000000000000

Deployed Bytecode

0x60806040526004361061023b5760003560e01c806355f804b31161012e578063a0712d68116100ab578063d5abeb011161006f578063d5abeb011461087d578063da3ef23f146108a8578063e985e9c5146108d1578063edec5f271461090e578063f2fde38b146109375761023b565b8063a0712d68146107a7578063a22cb465146107c3578063b88d4fde146107ec578063c668286214610815578063c87b56dd146108405761023b565b8063715018a6116100f2578063715018a6146106e65780637f00c7a6146106fd5780638da5cb5b1461072657806395d89b41146107515780639c70b5121461077c5761023b565b806355f804b3146105ed5780635c975abb146106165780636352211e146106415780636c0360eb1461067e57806370a08231146106a95761023b565b806325a4206d116101bc57806342842e0e1161018057806342842e0e146104e2578063438b63001461050b57806343bd396d146105485780634a0283d6146105735780634f6ccce7146105b05761023b565b806325a4206d1461040c5780632f745c59146104355780633af32abf146104725780633c952764146104af5780633ccfd60b146104d85761023b565b8063095ea7b311610203578063095ea7b31461033957806313faede61461036257806318160ddd1461038d578063239c70ae146103b857806323b872dd146103e35761023b565b806301ffc9a71461024057806302329a291461027d57806306fdde03146102a6578063081812fc146102d1578063081c8c441461030e575b600080fd5b34801561024c57600080fd5b506102676004803603810190610262919061347b565b610960565b6040516102749190613aaa565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f919061344e565b6109da565b005b3480156102b257600080fd5b506102bb610a73565b6040516102c89190613ac5565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f3919061351e565b610b05565b6040516103059190613a21565b60405180910390f35b34801561031a57600080fd5b50610323610b8a565b6040516103309190613ac5565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b91906133c1565b610c18565b005b34801561036e57600080fd5b50610377610d30565b6040516103849190613d47565b60405180910390f35b34801561039957600080fd5b506103a2610d36565b6040516103af9190613d47565b60405180910390f35b3480156103c457600080fd5b506103cd610d43565b6040516103da9190613d47565b60405180910390f35b3480156103ef57600080fd5b5061040a600480360381019061040591906132ab565b610d49565b005b34801561041857600080fd5b50610433600480360381019061042e919061351e565b610da9565b005b34801561044157600080fd5b5061045c600480360381019061045791906133c1565b610e2f565b6040516104699190613d47565b60405180910390f35b34801561047e57600080fd5b506104996004803603810190610494919061323e565b610ed4565b6040516104a69190613aaa565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d1919061344e565b610f83565b005b6104e061101c565b005b3480156104ee57600080fd5b50610509600480360381019061050491906132ab565b611111565b005b34801561051757600080fd5b50610532600480360381019061052d919061323e565b611131565b60405161053f9190613a88565b60405180910390f35b34801561055457600080fd5b5061055d6111df565b60405161056a9190613d47565b60405180910390f35b34801561057f57600080fd5b5061059a6004803603810190610595919061351e565b6111e5565b6040516105a79190613a21565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d2919061351e565b611224565b6040516105e49190613d47565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f91906134d5565b611295565b005b34801561062257600080fd5b5061062b61132b565b6040516106389190613aaa565b60405180910390f35b34801561064d57600080fd5b506106686004803603810190610663919061351e565b61133e565b6040516106759190613a21565b60405180910390f35b34801561068a57600080fd5b506106936113f0565b6040516106a09190613ac5565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb919061323e565b61147e565b6040516106dd9190613d47565b60405180910390f35b3480156106f257600080fd5b506106fb611536565b005b34801561070957600080fd5b50610724600480360381019061071f919061351e565b6115be565b005b34801561073257600080fd5b5061073b611644565b6040516107489190613a21565b60405180910390f35b34801561075d57600080fd5b5061076661166e565b6040516107739190613ac5565b60405180910390f35b34801561078857600080fd5b50610791611700565b60405161079e9190613aaa565b60405180910390f35b6107c160048036038101906107bc919061351e565b611713565b005b3480156107cf57600080fd5b506107ea60048036038101906107e59190613381565b611880565b005b3480156107f857600080fd5b50610813600480360381019061080e91906132fe565b611a01565b005b34801561082157600080fd5b5061082a611a63565b6040516108379190613ac5565b60405180910390f35b34801561084c57600080fd5b506108676004803603810190610862919061351e565b611af1565b6040516108749190613ac5565b60405180910390f35b34801561088957600080fd5b50610892611b9b565b60405161089f9190613d47565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca91906134d5565b611ba1565b005b3480156108dd57600080fd5b506108f860048036038101906108f3919061326b565b611c37565b6040516109059190613aaa565b60405180910390f35b34801561091a57600080fd5b5061093560048036038101906109309190613401565b611ccb565b005b34801561094357600080fd5b5061095e6004803603810190610959919061323e565b611d6b565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109d357506109d282611e7b565b5b9050919050565b6109e2611f5d565b73ffffffffffffffffffffffffffffffffffffffff16610a00611644565b73ffffffffffffffffffffffffffffffffffffffff1614610a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4d90613c67565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610a8290614050565b80601f0160208091040260200160405190810160405280929190818152602001828054610aae90614050565b8015610afb5780601f10610ad057610100808354040283529160200191610afb565b820191906000526020600020905b815481529060010190602001808311610ade57829003601f168201915b5050505050905090565b6000610b1082611f65565b610b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4690613c47565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610b9790614050565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc390614050565b8015610c105780601f10610be557610100808354040283529160200191610c10565b820191906000526020600020905b815481529060010190602001808311610bf357829003601f168201915b505050505081565b6000610c238261133e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8b90613cc7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cb3611f5d565b73ffffffffffffffffffffffffffffffffffffffff161480610ce25750610ce181610cdc611f5d565b611c37565b5b610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890613bc7565b60405180910390fd5b610d2b8383611fd1565b505050565b600e5481565b6000600880549050905090565b60105481565b610d5a610d54611f5d565b8261208a565b610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090613ce7565b60405180910390fd5b610da4838383612168565b505050565b610db1611f5d565b73ffffffffffffffffffffffffffffffffffffffff16610dcf611644565b73ffffffffffffffffffffffffffffffffffffffff1614610e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1c90613c67565b60405180910390fd5b8060118190555050565b6000610e3a8361147e565b8210610e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7290613ae7565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601380549050811015610f78578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610f1457610f136141e9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f65576001915050610f7e565b8080610f70906140b3565b915050610edc565b50600090505b919050565b610f8b611f5d565b73ffffffffffffffffffffffffffffffffffffffff16610fa9611644565b73ffffffffffffffffffffffffffffffffffffffff1614610fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff690613c67565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b611024611f5d565b73ffffffffffffffffffffffffffffffffffffffff16611042611644565b73ffffffffffffffffffffffffffffffffffffffff1614611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f90613c67565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516110be90613a0c565b60006040518083038185875af1925050503d80600081146110fb576040519150601f19603f3d011682016040523d82523d6000602084013e611100565b606091505b505090508061110e57600080fd5b50565b61112c83838360405180602001604052806000815250611a01565b505050565b6060600061113e8361147e565b905060008167ffffffffffffffff81111561115c5761115b614218565b5b60405190808252806020026020018201604052801561118a5781602001602082028036833780820191505090505b50905060005b828110156111d4576111a28582610e2f565b8282815181106111b5576111b46141e9565b5b60200260200101818152505080806111cc906140b3565b915050611190565b508092505050919050565b60115481565b601381815481106111f557600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061122e610d36565b821061126f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126690613d07565b60405180910390fd5b60088281548110611283576112826141e9565b5b90600052602060002001549050919050565b61129d611f5d565b73ffffffffffffffffffffffffffffffffffffffff166112bb611644565b73ffffffffffffffffffffffffffffffffffffffff1614611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890613c67565b60405180910390fd5b80600b9080519060200190611327929190612f3b565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113de90613c07565b60405180910390fd5b80915050919050565b600b80546113fd90614050565b80601f016020809104026020016040519081016040528092919081815260200182805461142990614050565b80156114765780601f1061144b57610100808354040283529160200191611476565b820191906000526020600020905b81548152906001019060200180831161145957829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e690613be7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61153e611f5d565b73ffffffffffffffffffffffffffffffffffffffff1661155c611644565b73ffffffffffffffffffffffffffffffffffffffff16146115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990613c67565b60405180910390fd5b6115bc60006123c4565b565b6115c6611f5d565b73ffffffffffffffffffffffffffffffffffffffff166115e4611644565b73ffffffffffffffffffffffffffffffffffffffff161461163a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163190613c67565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461167d90614050565b80601f01602080910402602001604051908101604052809291908181526020018280546116a990614050565b80156116f65780601f106116cb576101008083540402835291602001916116f6565b820191906000526020600020905b8154815290600101906020018083116116d957829003601f168201915b5050505050905090565b601260019054906101000a900460ff1681565b601260009054906101000a900460ff161561172d57600080fd5b6000611737610d36565b90506000821161174657600080fd5b60105482111561175557600080fd5b600f5482826117649190613e85565b111561176f57600080fd5b611777611644565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118455760011515601260019054906101000a900460ff161515141561182a576117ce33610ed4565b61180d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180490613d27565b60405180910390fd5b60006118183361147e565b9050601154811061182857600080fd5b505b81600e546118389190613f0c565b34101561184457600080fd5b5b6000600190505b82811161187b576118683382846118639190613e85565b61248a565b8080611873906140b3565b91505061184c565b505050565b611888611f5d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90613b87565b60405180910390fd5b8060056000611903611f5d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119b0611f5d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119f59190613aaa565b60405180910390a35050565b611a12611a0c611f5d565b8361208a565b611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890613ce7565b60405180910390fd5b611a5d848484846124a8565b50505050565b600c8054611a7090614050565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9c90614050565b8015611ae95780601f10611abe57610100808354040283529160200191611ae9565b820191906000526020600020905b815481529060010190602001808311611acc57829003601f168201915b505050505081565b6060611afc82611f65565b611b3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3290613ca7565b60405180910390fd5b6000611b45612504565b90506000815111611b655760405180602001604052806000815250611b93565b80611b6f84612596565b600c604051602001611b83939291906139db565b6040516020818303038152906040525b915050919050565b600f5481565b611ba9611f5d565b73ffffffffffffffffffffffffffffffffffffffff16611bc7611644565b73ffffffffffffffffffffffffffffffffffffffff1614611c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1490613c67565b60405180910390fd5b80600c9080519060200190611c33929190612f3b565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cd3611f5d565b73ffffffffffffffffffffffffffffffffffffffff16611cf1611644565b73ffffffffffffffffffffffffffffffffffffffff1614611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e90613c67565b60405180910390fd5b60136000611d559190612fc1565b818160139190611d66929190612fe2565b505050565b611d73611f5d565b73ffffffffffffffffffffffffffffffffffffffff16611d91611644565b73ffffffffffffffffffffffffffffffffffffffff1614611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde90613c67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90613b27565b60405180910390fd5b611e60816123c4565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f4657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611f565750611f55826126f7565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120448361133e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061209582611f65565b6120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb90613ba7565b60405180910390fd5b60006120df8361133e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061214e57508373ffffffffffffffffffffffffffffffffffffffff1661213684610b05565b73ffffffffffffffffffffffffffffffffffffffff16145b8061215f575061215e8185611c37565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121888261133e565b73ffffffffffffffffffffffffffffffffffffffff16146121de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d590613c87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561224e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224590613b67565b60405180910390fd5b612259838383612761565b612264600082611fd1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122b49190613f66565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461230b9190613e85565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124a4828260405180602001604052806000815250612875565b5050565b6124b3848484612168565b6124bf848484846128d0565b6124fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f590613b07565b60405180910390fd5b50505050565b6060600b805461251390614050565b80601f016020809104026020016040519081016040528092919081815260200182805461253f90614050565b801561258c5780601f106125615761010080835404028352916020019161258c565b820191906000526020600020905b81548152906001019060200180831161256f57829003601f168201915b5050505050905090565b606060008214156125de576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126f2565b600082905060005b600082146126105780806125f9906140b3565b915050600a826126099190613edb565b91506125e6565b60008167ffffffffffffffff81111561262c5761262b614218565b5b6040519080825280601f01601f19166020018201604052801561265e5781602001600182028036833780820191505090505b5090505b600085146126eb576001826126779190613f66565b9150600a8561268691906140fc565b60306126929190613e85565b60f81b8183815181106126a8576126a76141e9565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126e49190613edb565b9450612662565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61276c838383611e76565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127af576127aa81612a67565b6127ee565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146127ed576127ec8382612ab0565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128315761282c81612c1d565b612870565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461286f5761286e8282612cee565b5b5b505050565b61287f8383612d6d565b61288c60008484846128d0565b6128cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c290613b07565b60405180910390fd5b505050565b60006128f18473ffffffffffffffffffffffffffffffffffffffff16611e63565b15612a5a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261291a611f5d565b8786866040518563ffffffff1660e01b815260040161293c9493929190613a3c565b602060405180830381600087803b15801561295657600080fd5b505af192505050801561298757506040513d601f19601f8201168201806040525081019061298491906134a8565b60015b612a0a573d80600081146129b7576040519150601f19603f3d011682016040523d82523d6000602084013e6129bc565b606091505b50600081511415612a02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f990613b07565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612a5f565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612abd8461147e565b612ac79190613f66565b9050600060076000848152602001908152602001600020549050818114612bac576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612c319190613f66565b9050600060096000848152602001908152602001600020549050600060088381548110612c6157612c606141e9565b5b906000526020600020015490508060088381548110612c8357612c826141e9565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612cd257612cd16141ba565b5b6001900381819060005260206000200160009055905550505050565b6000612cf98361147e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd490613c27565b60405180910390fd5b612de681611f65565b15612e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1d90613b47565b60405180910390fd5b612e3260008383612761565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e829190613e85565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612f4790614050565b90600052602060002090601f016020900481019282612f695760008555612fb0565b82601f10612f8257805160ff1916838001178555612fb0565b82800160010185558215612fb0579182015b82811115612faf578251825591602001919060010190612f94565b5b509050612fbd9190613082565b5090565b5080546000825590600052602060002090810190612fdf9190613082565b50565b828054828255906000526020600020908101928215613071579160200282015b8281111561307057823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613002565b5b50905061307e9190613082565b5090565b5b8082111561309b576000816000905550600101613083565b5090565b60006130b26130ad84613d87565b613d62565b9050828152602081018484840111156130ce576130cd614256565b5b6130d984828561400e565b509392505050565b60006130f46130ef84613db8565b613d62565b9050828152602081018484840111156131105761310f614256565b5b61311b84828561400e565b509392505050565b60008135905061313281614798565b92915050565b60008083601f84011261314e5761314d61424c565b5b8235905067ffffffffffffffff81111561316b5761316a614247565b5b60208301915083602082028301111561318757613186614251565b5b9250929050565b60008135905061319d816147af565b92915050565b6000813590506131b2816147c6565b92915050565b6000815190506131c7816147c6565b92915050565b600082601f8301126131e2576131e161424c565b5b81356131f284826020860161309f565b91505092915050565b600082601f8301126132105761320f61424c565b5b81356132208482602086016130e1565b91505092915050565b600081359050613238816147dd565b92915050565b60006020828403121561325457613253614260565b5b600061326284828501613123565b91505092915050565b6000806040838503121561328257613281614260565b5b600061329085828601613123565b92505060206132a185828601613123565b9150509250929050565b6000806000606084860312156132c4576132c3614260565b5b60006132d286828701613123565b93505060206132e386828701613123565b92505060406132f486828701613229565b9150509250925092565b6000806000806080858703121561331857613317614260565b5b600061332687828801613123565b945050602061333787828801613123565b935050604061334887828801613229565b925050606085013567ffffffffffffffff8111156133695761336861425b565b5b613375878288016131cd565b91505092959194509250565b6000806040838503121561339857613397614260565b5b60006133a685828601613123565b92505060206133b78582860161318e565b9150509250929050565b600080604083850312156133d8576133d7614260565b5b60006133e685828601613123565b92505060206133f785828601613229565b9150509250929050565b6000806020838503121561341857613417614260565b5b600083013567ffffffffffffffff8111156134365761343561425b565b5b61344285828601613138565b92509250509250929050565b60006020828403121561346457613463614260565b5b60006134728482850161318e565b91505092915050565b60006020828403121561349157613490614260565b5b600061349f848285016131a3565b91505092915050565b6000602082840312156134be576134bd614260565b5b60006134cc848285016131b8565b91505092915050565b6000602082840312156134eb576134ea614260565b5b600082013567ffffffffffffffff8111156135095761350861425b565b5b613515848285016131fb565b91505092915050565b60006020828403121561353457613533614260565b5b600061354284828501613229565b91505092915050565b600061355783836139bd565b60208301905092915050565b61356c81613f9a565b82525050565b600061357d82613e0e565b6135878185613e3c565b935061359283613de9565b8060005b838110156135c35781516135aa888261354b565b97506135b583613e2f565b925050600181019050613596565b5085935050505092915050565b6135d981613fac565b82525050565b60006135ea82613e19565b6135f48185613e4d565b935061360481856020860161401d565b61360d81614265565b840191505092915050565b600061362382613e24565b61362d8185613e69565b935061363d81856020860161401d565b61364681614265565b840191505092915050565b600061365c82613e24565b6136668185613e7a565b935061367681856020860161401d565b80840191505092915050565b6000815461368f81614050565b6136998186613e7a565b945060018216600081146136b457600181146136c5576136f8565b60ff198316865281860193506136f8565b6136ce85613df9565b60005b838110156136f0578154818901526001820191506020810190506136d1565b838801955050505b50505092915050565b600061370e602b83613e69565b915061371982614276565b604082019050919050565b6000613731603283613e69565b915061373c826142c5565b604082019050919050565b6000613754602683613e69565b915061375f82614314565b604082019050919050565b6000613777601c83613e69565b915061378282614363565b602082019050919050565b600061379a602483613e69565b91506137a58261438c565b604082019050919050565b60006137bd601983613e69565b91506137c8826143db565b602082019050919050565b60006137e0602c83613e69565b91506137eb82614404565b604082019050919050565b6000613803603883613e69565b915061380e82614453565b604082019050919050565b6000613826602a83613e69565b9150613831826144a2565b604082019050919050565b6000613849602983613e69565b9150613854826144f1565b604082019050919050565b600061386c602083613e69565b915061387782614540565b602082019050919050565b600061388f602c83613e69565b915061389a82614569565b604082019050919050565b60006138b2602083613e69565b91506138bd826145b8565b602082019050919050565b60006138d5602983613e69565b91506138e0826145e1565b604082019050919050565b60006138f8602f83613e69565b915061390382614630565b604082019050919050565b600061391b602183613e69565b91506139268261467f565b604082019050919050565b600061393e600083613e5e565b9150613949826146ce565b600082019050919050565b6000613961603183613e69565b915061396c826146d1565b604082019050919050565b6000613984602c83613e69565b915061398f82614720565b604082019050919050565b60006139a7601783613e69565b91506139b28261476f565b602082019050919050565b6139c681614004565b82525050565b6139d581614004565b82525050565b60006139e78286613651565b91506139f38285613651565b91506139ff8284613682565b9150819050949350505050565b6000613a1782613931565b9150819050919050565b6000602082019050613a366000830184613563565b92915050565b6000608082019050613a516000830187613563565b613a5e6020830186613563565b613a6b60408301856139cc565b8181036060830152613a7d81846135df565b905095945050505050565b60006020820190508181036000830152613aa28184613572565b905092915050565b6000602082019050613abf60008301846135d0565b92915050565b60006020820190508181036000830152613adf8184613618565b905092915050565b60006020820190508181036000830152613b0081613701565b9050919050565b60006020820190508181036000830152613b2081613724565b9050919050565b60006020820190508181036000830152613b4081613747565b9050919050565b60006020820190508181036000830152613b608161376a565b9050919050565b60006020820190508181036000830152613b808161378d565b9050919050565b60006020820190508181036000830152613ba0816137b0565b9050919050565b60006020820190508181036000830152613bc0816137d3565b9050919050565b60006020820190508181036000830152613be0816137f6565b9050919050565b60006020820190508181036000830152613c0081613819565b9050919050565b60006020820190508181036000830152613c208161383c565b9050919050565b60006020820190508181036000830152613c408161385f565b9050919050565b60006020820190508181036000830152613c6081613882565b9050919050565b60006020820190508181036000830152613c80816138a5565b9050919050565b60006020820190508181036000830152613ca0816138c8565b9050919050565b60006020820190508181036000830152613cc0816138eb565b9050919050565b60006020820190508181036000830152613ce08161390e565b9050919050565b60006020820190508181036000830152613d0081613954565b9050919050565b60006020820190508181036000830152613d2081613977565b9050919050565b60006020820190508181036000830152613d408161399a565b9050919050565b6000602082019050613d5c60008301846139cc565b92915050565b6000613d6c613d7d565b9050613d788282614082565b919050565b6000604051905090565b600067ffffffffffffffff821115613da257613da1614218565b5b613dab82614265565b9050602081019050919050565b600067ffffffffffffffff821115613dd357613dd2614218565b5b613ddc82614265565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613e9082614004565b9150613e9b83614004565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613ed057613ecf61412d565b5b828201905092915050565b6000613ee682614004565b9150613ef183614004565b925082613f0157613f0061415c565b5b828204905092915050565b6000613f1782614004565b9150613f2283614004565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f5b57613f5a61412d565b5b828202905092915050565b6000613f7182614004565b9150613f7c83614004565b925082821015613f8f57613f8e61412d565b5b828203905092915050565b6000613fa582613fe4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561403b578082015181840152602081019050614020565b8381111561404a576000848401525b50505050565b6000600282049050600182168061406857607f821691505b6020821081141561407c5761407b61418b565b5b50919050565b61408b82614265565b810181811067ffffffffffffffff821117156140aa576140a9614218565b5b80604052505050565b60006140be82614004565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156140f1576140f061412d565b5b600182019050919050565b600061410782614004565b915061411283614004565b9250826141225761412161415c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b6147a181613f9a565b81146147ac57600080fd5b50565b6147b881613fac565b81146147c357600080fd5b50565b6147cf81613fb8565b81146147da57600080fd5b50565b6147e681614004565b81146147f157600080fd5b5056fea26469706673582212206c4b671f29a9e495729b4ac2354bfbfc0f1aa0f7b681295cec7a9e7109cb156b64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000125368696e6967616d692e4f6666696369616c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000125368696e6967616d692e4f6666696369616c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6171463668657a617837505a373738654778383761693368334178427056464379443650666e343366574c6f2f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Shinigami.Official
Arg [1] : _symbol (string): Shinigami.Official
Arg [2] : _initBaseURI (string): ipfs://QmaqF6hezax7PZ778eGx87ai3h3AxBpVFCyD6Pfn43fWLo/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [4] : 5368696e6967616d692e4f6666696369616c0000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [6] : 5368696e6967616d692e4f6666696369616c0000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d6171463668657a617837505a3737386547783837616933
Arg [9] : 68334178427056464379443650666e343366574c6f2f00000000000000000000


Deployed Bytecode Sourcemap

45062:4094:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38553:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48604:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25723:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27416:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45223:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26939:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45258:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39356:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45336:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28475:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48083:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38937:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46739:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48691:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48961:192;;;:::i;:::-;;28922:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47017:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45375:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45493:35;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39546:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48331:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45419:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25330:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45151:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24973:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4573:94;;;;;;;;;;;;;:::i;:::-;;48201:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3922:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25892:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45452:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45971:760;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27796:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29178:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45179:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47415:642;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45298:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48443:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28194:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48801:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4822:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38553:300;38700:4;38757:35;38742:50;;;:11;:50;;;;:103;;;;38809:36;38833:11;38809:23;:36::i;:::-;38742:103;38722:123;;38553:300;;;:::o;48604:79::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48669:6:::1;48660;;:15;;;;;;;;;;;;;;;;;;48604:79:::0;:::o;25723:100::-;25777:13;25810:5;25803:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25723:100;:::o;27416:308::-;27537:7;27584:16;27592:7;27584;:16::i;:::-;27562:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;27692:15;:24;27708:7;27692:24;;;;;;;;;;;;;;;;;;;;;27685:31;;27416:308;;;:::o;45223:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26939:411::-;27020:13;27036:23;27051:7;27036:14;:23::i;:::-;27020:39;;27084:5;27078:11;;:2;:11;;;;27070:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27178:5;27162:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27187:37;27204:5;27211:12;:10;:12::i;:::-;27187:16;:37::i;:::-;27162:62;27140:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27321:21;27330:2;27334:7;27321:8;:21::i;:::-;27009:341;26939:411;;:::o;45258:33::-;;;;:::o;39356:113::-;39417:7;39444:10;:17;;;;39437:24;;39356:113;:::o;45336:32::-;;;;:::o;28475:376::-;28684:41;28703:12;:10;:12::i;:::-;28717:7;28684:18;:41::i;:::-;28662:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28815:28;28825:4;28831:2;28835:7;28815:9;:28::i;:::-;28475:376;;;:::o;48083:110::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48179:6:::1;48158:18;:27;;;;48083:110:::0;:::o;38937:343::-;39079:7;39134:23;39151:5;39134:16;:23::i;:::-;39126:5;:31;39104:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;39246:12;:19;39259:5;39246:19;;;;;;;;;;;;;;;:26;39266:5;39246:26;;;;;;;;;;;;39239:33;;38937:343;;;;:::o;46739:270::-;46798:4;46819:9;46831:1;46819:13;;46815:164;46838:18;:25;;;;46834:1;:29;46815:164;;;46914:5;46889:30;;:18;46908:1;46889:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;46885:82;;;46947:4;46940:11;;;;;46885:82;46865:3;;;;;:::i;:::-;;;;46815:164;;;;46996:5;46989:12;;46739:270;;;;:::o;48691:101::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48778:6:::1;48760:15;;:24;;;;;;;;;;;;;;;;;;48691:101:::0;:::o;48961:192::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49018:12:::1;49044:10;49036:24;;49082:21;49036:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49017:101;;;49137:7;49129:16;;;::::0;::::1;;49006:147;48961:192::o:0;28922:185::-;29060:39;29077:4;29083:2;29087:7;29060:39;;;;;;;;;;;;:16;:39::i;:::-;28922:185;;;:::o;47017:390::-;47104:16;47138:23;47164:17;47174:6;47164:9;:17::i;:::-;47138:43;;47192:25;47234:15;47220:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47192:58;;47266:9;47261:113;47281:15;47277:1;:19;47261:113;;;47332:30;47352:6;47360:1;47332:19;:30::i;:::-;47318:8;47327:1;47318:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;47298:3;;;;;:::i;:::-;;;;47261:113;;;;47391:8;47384:15;;;;47017:390;;;:::o;45375:37::-;;;;:::o;45493:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39546:320::-;39666:7;39721:30;:28;:30::i;:::-;39713:5;:38;39691:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;39841:10;39852:5;39841:17;;;;;;;;:::i;:::-;;;;;;;;;;39834:24;;39546:320;;;:::o;48331:104::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48416:11:::1;48406:7;:21;;;;;;;;;;;;:::i;:::-;;48331:104:::0;:::o;45419:26::-;;;;;;;;;;;;;:::o;25330:326::-;25447:7;25472:13;25488:7;:16;25496:7;25488:16;;;;;;;;;;;;;;;;;;;;;25472:32;;25554:1;25537:19;;:5;:19;;;;25515:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;25643:5;25636:12;;;25330:326;;;:::o;45151:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24973:295::-;25090:7;25154:1;25137:19;;:5;:19;;;;25115:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25244:9;:16;25254:5;25244:16;;;;;;;;;;;;;;;;25237:23;;24973:295;;;:::o;4573:94::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4638:21:::1;4656:1;4638:9;:21::i;:::-;4573:94::o:0;48201:122::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48298:17:::1;48282:13;:33;;;;48201:122:::0;:::o;3922:87::-;3968:7;3995:6;;;;;;;;;;;3988:13;;3922:87;:::o;25892:104::-;25948:13;25981:7;25974:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25892:104;:::o;45452:34::-;;;;;;;;;;;;;:::o;45971:760::-;46041:6;;;;;;;;;;;46040:7;46032:16;;;;;;46059:14;46076:13;:11;:13::i;:::-;46059:30;;46122:1;46108:11;:15;46100:24;;;;;;46158:13;;46143:11;:28;;46135:37;;;;;;46215:9;;46200:11;46191:6;:20;;;;:::i;:::-;:33;;46183:42;;;;;;46264:7;:5;:7::i;:::-;46250:21;;:10;:21;;;46246:363;;46311:4;46292:23;;:15;;;;;;;;;;;:23;;;46288:255;;;46344:25;46358:10;46344:13;:25::i;:::-;46336:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;46416:23;46442:21;46452:10;46442:9;:21::i;:::-;46416:47;;46508:18;;46490:15;:36;46482:45;;;;;;46317:226;46288:255;46585:11;46578:4;;:18;;;;:::i;:::-;46565:9;:31;;46557:40;;;;;;46246:363;46626:9;46638:1;46626:13;;46621:103;46646:11;46641:1;:16;46621:103;;46679:33;46689:10;46710:1;46701:6;:10;;;;:::i;:::-;46679:9;:33::i;:::-;46659:3;;;;;:::i;:::-;;;;46621:103;;;;46021:710;45971:760;:::o;27796:327::-;27943:12;:10;:12::i;:::-;27931:24;;:8;:24;;;;27923:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28043:8;27998:18;:32;28017:12;:10;:12::i;:::-;27998:32;;;;;;;;;;;;;;;:42;28031:8;27998:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28096:8;28067:48;;28082:12;:10;:12::i;:::-;28067:48;;;28106:8;28067:48;;;;;;:::i;:::-;;;;;;;;27796:327;;:::o;29178:365::-;29367:41;29386:12;:10;:12::i;:::-;29400:7;29367:18;:41::i;:::-;29345:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29496:39;29510:4;29516:2;29520:7;29529:5;29496:13;:39::i;:::-;29178:365;;;;:::o;45179:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47415:642::-;47533:13;47586:16;47594:7;47586;:16::i;:::-;47564:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;47690:28;47721:10;:8;:10::i;:::-;47690:41;;47793:1;47768:14;47762:28;:32;:287;;;;;;;;;;;;;;;;;47886:14;47927:18;:7;:16;:18::i;:::-;47972:13;47843:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47762:287;47742:307;;;47415:642;;;:::o;45298:31::-;;;;:::o;48443:151::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48569:17:::1;48553:13;:33;;;;;;;;;;;;:::i;:::-;;48443:151:::0;:::o;28194:214::-;28336:4;28365:18;:25;28384:5;28365:25;;;;;;;;;;;;;;;:35;28391:8;28365:35;;;;;;;;;;;;;;;;;;;;;;;;;28358:42;;28194:214;;;;:::o;48801:150::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48887:18:::1;;48880:25;;;;:::i;:::-;48937:6;;48916:18;:27;;;;;;;:::i;:::-;;48801:150:::0;;:::o;4822:229::-;4153:12;:10;:12::i;:::-;4142:23;;:7;:5;:7::i;:::-;:23;;;4134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4945:1:::1;4925:22;;:8;:22;;;;4903:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;5024:19;5034:8;5024:9;:19::i;:::-;4822:229:::0;:::o;5991:387::-;6051:4;6259:12;6326:7;6314:20;6306:28;;6369:1;6362:4;:8;6355:15;;;5991:387;;;:::o;37504:126::-;;;;:::o;24554:355::-;24701:4;24758:25;24743:40;;;:11;:40;;;;:105;;;;24815:33;24800:48;;;:11;:48;;;;24743:105;:158;;;;24865:36;24889:11;24865:23;:36::i;:::-;24743:158;24723:178;;24554:355;;;:::o;2699:98::-;2752:7;2779:10;2772:17;;2699:98;:::o;31090:127::-;31155:4;31207:1;31179:30;;:7;:16;31187:7;31179:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31172:37;;31090:127;;;:::o;35213:174::-;35315:2;35288:15;:24;35304:7;35288:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35371:7;35367:2;35333:46;;35342:23;35357:7;35342:14;:23::i;:::-;35333:46;;;;;;;;;;;;35213:174;;:::o;31384:452::-;31513:4;31557:16;31565:7;31557;:16::i;:::-;31535:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;31656:13;31672:23;31687:7;31672:14;:23::i;:::-;31656:39;;31725:5;31714:16;;:7;:16;;;:64;;;;31771:7;31747:31;;:20;31759:7;31747:11;:20::i;:::-;:31;;;31714:64;:113;;;;31795:32;31812:5;31819:7;31795:16;:32::i;:::-;31714:113;31706:122;;;31384:452;;;;:::o;34480:615::-;34653:4;34626:31;;:23;34641:7;34626:14;:23::i;:::-;:31;;;34604:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;34759:1;34745:16;;:2;:16;;;;34737:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34815:39;34836:4;34842:2;34846:7;34815:20;:39::i;:::-;34919:29;34936:1;34940:7;34919:8;:29::i;:::-;34980:1;34961:9;:15;34971:4;34961:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35009:1;34992:9;:13;35002:2;34992:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35040:2;35021:7;:16;35029:7;35021:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35079:7;35075:2;35060:27;;35069:4;35060:27;;;;;;;;;;;;34480:615;;;:::o;5059:173::-;5115:16;5134:6;;;;;;;;;;;5115:25;;5160:8;5151:6;;:17;;;;;;;;;;;;;;;;;;5215:8;5184:40;;5205:8;5184:40;;;;;;;;;;;;5104:128;5059:173;:::o;32178:110::-;32254:26;32264:2;32268:7;32254:26;;;;;;;;;;;;:9;:26::i;:::-;32178:110;;:::o;30425:352::-;30582:28;30592:4;30598:2;30602:7;30582:9;:28::i;:::-;30643:48;30666:4;30672:2;30676:7;30685:5;30643:22;:48::i;:::-;30621:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;30425:352;;;;:::o;45840:108::-;45900:13;45933:7;45926:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45840:108;:::o;297:723::-;353:13;583:1;574:5;:10;570:53;;;601:10;;;;;;;;;;;;;;;;;;;;;570:53;633:12;648:5;633:20;;664:14;689:78;704:1;696:4;:9;689:78;;722:8;;;;;:::i;:::-;;;;753:2;745:10;;;;;:::i;:::-;;;689:78;;;777:19;809:6;799:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;777:39;;827:154;843:1;834:5;:10;827:154;;871:1;861:11;;;;;:::i;:::-;;;938:2;930:5;:10;;;;:::i;:::-;917:2;:24;;;;:::i;:::-;904:39;;887:6;894;887:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;967:2;958:11;;;;;:::i;:::-;;;827:154;;;1005:6;991:21;;;;;297:723;;;;:::o;16356:207::-;16486:4;16530:25;16515:40;;;:11;:40;;;;16508:47;;16356:207;;;:::o;40479:589::-;40623:45;40650:4;40656:2;40660:7;40623:26;:45::i;:::-;40701:1;40685:18;;:4;:18;;;40681:187;;;40720:40;40752:7;40720:31;:40::i;:::-;40681:187;;;40790:2;40782:10;;:4;:10;;;40778:90;;40809:47;40842:4;40848:7;40809:32;:47::i;:::-;40778:90;40681:187;40896:1;40882:16;;:2;:16;;;40878:183;;;40915:45;40952:7;40915:36;:45::i;:::-;40878:183;;;40988:4;40982:10;;:2;:10;;;40978:83;;41009:40;41037:2;41041:7;41009:27;:40::i;:::-;40978:83;40878:183;40479:589;;;:::o;32515:321::-;32645:18;32651:2;32655:7;32645:5;:18::i;:::-;32696:54;32727:1;32731:2;32735:7;32744:5;32696:22;:54::i;:::-;32674:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32515:321;;;:::o;35952:980::-;36107:4;36128:15;:2;:13;;;:15::i;:::-;36124:801;;;36197:2;36181:36;;;36240:12;:10;:12::i;:::-;36275:4;36302:7;36332:5;36181:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36160:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36556:1;36539:6;:13;:18;36535:320;;;36582:108;;;;;;;;;;:::i;:::-;;;;;;;;36535:320;36805:6;36799:13;36790:6;36786:2;36782:15;36775:38;36160:710;36430:41;;;36420:51;;;:6;:51;;;;36413:58;;;;;36124:801;36909:4;36902:11;;35952:980;;;;;;;:::o;41791:164::-;41895:10;:17;;;;41868:15;:24;41884:7;41868:24;;;;;;;;;;;:44;;;;41923:10;41939:7;41923:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41791:164;:::o;42582:1002::-;42862:22;42912:1;42887:22;42904:4;42887:16;:22::i;:::-;:26;;;;:::i;:::-;42862:51;;42924:18;42945:17;:26;42963:7;42945:26;;;;;;;;;;;;42924:47;;43092:14;43078:10;:28;43074:328;;43123:19;43145:12;:18;43158:4;43145:18;;;;;;;;;;;;;;;:34;43164:14;43145:34;;;;;;;;;;;;43123:56;;43229:11;43196:12;:18;43209:4;43196:18;;;;;;;;;;;;;;;:30;43215:10;43196:30;;;;;;;;;;;:44;;;;43346:10;43313:17;:30;43331:11;43313:30;;;;;;;;;;;:43;;;;43108:294;43074:328;43498:17;:26;43516:7;43498:26;;;;;;;;;;;43491:33;;;43542:12;:18;43555:4;43542:18;;;;;;;;;;;;;;;:34;43561:14;43542:34;;;;;;;;;;;43535:41;;;42677:907;;42582:1002;;:::o;43879:1079::-;44132:22;44177:1;44157:10;:17;;;;:21;;;;:::i;:::-;44132:46;;44189:18;44210:15;:24;44226:7;44210:24;;;;;;;;;;;;44189:45;;44561:19;44583:10;44594:14;44583:26;;;;;;;;:::i;:::-;;;;;;;;;;44561:48;;44647:11;44622:10;44633;44622:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44758:10;44727:15;:28;44743:11;44727:28;;;;;;;;;;;:41;;;;44899:15;:24;44915:7;44899:24;;;;;;;;;;;44892:31;;;44934:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43950:1008;;;43879:1079;:::o;41369:221::-;41454:14;41471:20;41488:2;41471:16;:20::i;:::-;41454:37;;41529:7;41502:12;:16;41515:2;41502:16;;;;;;;;;;;;;;;:24;41519:6;41502:24;;;;;;;;;;;:34;;;;41576:6;41547:17;:26;41565:7;41547:26;;;;;;;;;;;:35;;;;41443:147;41369:221;;:::o;33172:382::-;33266:1;33252:16;;:2;:16;;;;33244:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33325:16;33333:7;33325;:16::i;:::-;33324:17;33316:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33387:45;33416:1;33420:2;33424:7;33387:20;:45::i;:::-;33462:1;33445:9;:13;33455:2;33445:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33493:2;33474:7;:16;33482:7;33474:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33538:7;33534:2;33513:33;;33530:1;33513:33;;;;;;;;;;;;33172:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:323::-;6832:6;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7007:1;7032:50;7074:7;7065:6;7054:9;7050:22;7032:50;:::i;:::-;7022:60;;6978:114;6776:323;;;;:::o;7105:327::-;7163:6;7212:2;7200:9;7191:7;7187:23;7183:32;7180:119;;;7218:79;;:::i;:::-;7180:119;7338:1;7363:52;7407:7;7398:6;7387:9;7383:22;7363:52;:::i;:::-;7353:62;;7309:116;7105:327;;;;:::o;7438:349::-;7507:6;7556:2;7544:9;7535:7;7531:23;7527:32;7524:119;;;7562:79;;:::i;:::-;7524:119;7682:1;7707:63;7762:7;7753:6;7742:9;7738:22;7707:63;:::i;:::-;7697:73;;7653:127;7438:349;;;;:::o;7793:509::-;7862:6;7911:2;7899:9;7890:7;7886:23;7882:32;7879:119;;;7917:79;;:::i;:::-;7879:119;8065:1;8054:9;8050:17;8037:31;8095:18;8087:6;8084:30;8081:117;;;8117:79;;:::i;:::-;8081:117;8222:63;8277:7;8268:6;8257:9;8253:22;8222:63;:::i;:::-;8212:73;;8008:287;7793:509;;;;:::o;8308:329::-;8367:6;8416:2;8404:9;8395:7;8391:23;8387:32;8384:119;;;8422:79;;:::i;:::-;8384:119;8542:1;8567:53;8612:7;8603:6;8592:9;8588:22;8567:53;:::i;:::-;8557:63;;8513:117;8308:329;;;;:::o;8643:179::-;8712:10;8733:46;8775:3;8767:6;8733:46;:::i;:::-;8811:4;8806:3;8802:14;8788:28;;8643:179;;;;:::o;8828:118::-;8915:24;8933:5;8915:24;:::i;:::-;8910:3;8903:37;8828:118;;:::o;8982:732::-;9101:3;9130:54;9178:5;9130:54;:::i;:::-;9200:86;9279:6;9274:3;9200:86;:::i;:::-;9193:93;;9310:56;9360:5;9310:56;:::i;:::-;9389:7;9420:1;9405:284;9430:6;9427:1;9424:13;9405:284;;;9506:6;9500:13;9533:63;9592:3;9577:13;9533:63;:::i;:::-;9526:70;;9619:60;9672:6;9619:60;:::i;:::-;9609:70;;9465:224;9452:1;9449;9445:9;9440:14;;9405:284;;;9409:14;9705:3;9698:10;;9106:608;;;8982:732;;;;:::o;9720:109::-;9801:21;9816:5;9801:21;:::i;:::-;9796:3;9789:34;9720:109;;:::o;9835:360::-;9921:3;9949:38;9981:5;9949:38;:::i;:::-;10003:70;10066:6;10061:3;10003:70;:::i;:::-;9996:77;;10082:52;10127:6;10122:3;10115:4;10108:5;10104:16;10082:52;:::i;:::-;10159:29;10181:6;10159:29;:::i;:::-;10154:3;10150:39;10143:46;;9925:270;9835:360;;;;:::o;10201:364::-;10289:3;10317:39;10350:5;10317:39;:::i;:::-;10372:71;10436:6;10431:3;10372:71;:::i;:::-;10365:78;;10452:52;10497:6;10492:3;10485:4;10478:5;10474:16;10452:52;:::i;:::-;10529:29;10551:6;10529:29;:::i;:::-;10524:3;10520:39;10513:46;;10293:272;10201:364;;;;:::o;10571:377::-;10677:3;10705:39;10738:5;10705:39;:::i;:::-;10760:89;10842:6;10837:3;10760:89;:::i;:::-;10753:96;;10858:52;10903:6;10898:3;10891:4;10884:5;10880:16;10858:52;:::i;:::-;10935:6;10930:3;10926:16;10919:23;;10681:267;10571:377;;;;:::o;10978:845::-;11081:3;11118:5;11112:12;11147:36;11173:9;11147:36;:::i;:::-;11199:89;11281:6;11276:3;11199:89;:::i;:::-;11192:96;;11319:1;11308:9;11304:17;11335:1;11330:137;;;;11481:1;11476:341;;;;11297:520;;11330:137;11414:4;11410:9;11399;11395:25;11390:3;11383:38;11450:6;11445:3;11441:16;11434:23;;11330:137;;11476:341;11543:38;11575:5;11543:38;:::i;:::-;11603:1;11617:154;11631:6;11628:1;11625:13;11617:154;;;11705:7;11699:14;11695:1;11690:3;11686:11;11679:35;11755:1;11746:7;11742:15;11731:26;;11653:4;11650:1;11646:12;11641:17;;11617:154;;;11800:6;11795:3;11791:16;11784:23;;11483:334;;11297:520;;11085:738;;10978:845;;;;:::o;11829:366::-;11971:3;11992:67;12056:2;12051:3;11992:67;:::i;:::-;11985:74;;12068:93;12157:3;12068:93;:::i;:::-;12186:2;12181:3;12177:12;12170:19;;11829:366;;;:::o;12201:::-;12343:3;12364:67;12428:2;12423:3;12364:67;:::i;:::-;12357:74;;12440:93;12529:3;12440:93;:::i;:::-;12558:2;12553:3;12549:12;12542:19;;12201:366;;;:::o;12573:::-;12715:3;12736:67;12800:2;12795:3;12736:67;:::i;:::-;12729:74;;12812:93;12901:3;12812:93;:::i;:::-;12930:2;12925:3;12921:12;12914:19;;12573:366;;;:::o;12945:::-;13087:3;13108:67;13172:2;13167:3;13108:67;:::i;:::-;13101:74;;13184:93;13273:3;13184:93;:::i;:::-;13302:2;13297:3;13293:12;13286:19;;12945:366;;;:::o;13317:::-;13459:3;13480:67;13544:2;13539:3;13480:67;:::i;:::-;13473:74;;13556:93;13645:3;13556:93;:::i;:::-;13674:2;13669:3;13665:12;13658:19;;13317:366;;;:::o;13689:::-;13831:3;13852:67;13916:2;13911:3;13852:67;:::i;:::-;13845:74;;13928:93;14017:3;13928:93;:::i;:::-;14046:2;14041:3;14037:12;14030:19;;13689:366;;;:::o;14061:::-;14203:3;14224:67;14288:2;14283:3;14224:67;:::i;:::-;14217:74;;14300:93;14389:3;14300:93;:::i;:::-;14418:2;14413:3;14409:12;14402:19;;14061:366;;;:::o;14433:::-;14575:3;14596:67;14660:2;14655:3;14596:67;:::i;:::-;14589:74;;14672:93;14761:3;14672:93;:::i;:::-;14790:2;14785:3;14781:12;14774:19;;14433:366;;;:::o;14805:::-;14947:3;14968:67;15032:2;15027:3;14968:67;:::i;:::-;14961:74;;15044:93;15133:3;15044:93;:::i;:::-;15162:2;15157:3;15153:12;15146:19;;14805:366;;;:::o;15177:::-;15319:3;15340:67;15404:2;15399:3;15340:67;:::i;:::-;15333:74;;15416:93;15505:3;15416:93;:::i;:::-;15534:2;15529:3;15525:12;15518:19;;15177:366;;;:::o;15549:::-;15691:3;15712:67;15776:2;15771:3;15712:67;:::i;:::-;15705:74;;15788:93;15877:3;15788:93;:::i;:::-;15906:2;15901:3;15897:12;15890:19;;15549:366;;;:::o;15921:::-;16063:3;16084:67;16148:2;16143:3;16084:67;:::i;:::-;16077:74;;16160:93;16249:3;16160:93;:::i;:::-;16278:2;16273:3;16269:12;16262:19;;15921:366;;;:::o;16293:::-;16435:3;16456:67;16520:2;16515:3;16456:67;:::i;:::-;16449:74;;16532:93;16621:3;16532:93;:::i;:::-;16650:2;16645:3;16641:12;16634:19;;16293:366;;;:::o;16665:::-;16807:3;16828:67;16892:2;16887:3;16828:67;:::i;:::-;16821:74;;16904:93;16993:3;16904:93;:::i;:::-;17022:2;17017:3;17013:12;17006:19;;16665:366;;;:::o;17037:::-;17179:3;17200:67;17264:2;17259:3;17200:67;:::i;:::-;17193:74;;17276:93;17365:3;17276:93;:::i;:::-;17394:2;17389:3;17385:12;17378:19;;17037:366;;;:::o;17409:::-;17551:3;17572:67;17636:2;17631:3;17572:67;:::i;:::-;17565:74;;17648:93;17737:3;17648:93;:::i;:::-;17766:2;17761:3;17757:12;17750:19;;17409:366;;;:::o;17781:398::-;17940:3;17961:83;18042:1;18037:3;17961:83;:::i;:::-;17954:90;;18053:93;18142:3;18053:93;:::i;:::-;18171:1;18166:3;18162:11;18155:18;;17781:398;;;:::o;18185:366::-;18327:3;18348:67;18412:2;18407:3;18348:67;:::i;:::-;18341:74;;18424:93;18513:3;18424:93;:::i;:::-;18542:2;18537:3;18533:12;18526:19;;18185:366;;;:::o;18557:::-;18699:3;18720:67;18784:2;18779:3;18720:67;:::i;:::-;18713:74;;18796:93;18885:3;18796:93;:::i;:::-;18914:2;18909:3;18905:12;18898:19;;18557:366;;;:::o;18929:::-;19071:3;19092:67;19156:2;19151:3;19092:67;:::i;:::-;19085:74;;19168:93;19257:3;19168:93;:::i;:::-;19286:2;19281:3;19277:12;19270:19;;18929:366;;;:::o;19301:108::-;19378:24;19396:5;19378:24;:::i;:::-;19373:3;19366:37;19301:108;;:::o;19415:118::-;19502:24;19520:5;19502:24;:::i;:::-;19497:3;19490:37;19415:118;;:::o;19539:589::-;19764:3;19786:95;19877:3;19868:6;19786:95;:::i;:::-;19779:102;;19898:95;19989:3;19980:6;19898:95;:::i;:::-;19891:102;;20010:92;20098:3;20089:6;20010:92;:::i;:::-;20003:99;;20119:3;20112:10;;19539:589;;;;;;:::o;20134:379::-;20318:3;20340:147;20483:3;20340:147;:::i;:::-;20333:154;;20504:3;20497:10;;20134:379;;;:::o;20519:222::-;20612:4;20650:2;20639:9;20635:18;20627:26;;20663:71;20731:1;20720:9;20716:17;20707:6;20663:71;:::i;:::-;20519:222;;;;:::o;20747:640::-;20942:4;20980:3;20969:9;20965:19;20957:27;;20994:71;21062:1;21051:9;21047:17;21038:6;20994:71;:::i;:::-;21075:72;21143:2;21132:9;21128:18;21119:6;21075:72;:::i;:::-;21157;21225:2;21214:9;21210:18;21201:6;21157:72;:::i;:::-;21276:9;21270:4;21266:20;21261:2;21250:9;21246:18;21239:48;21304:76;21375:4;21366:6;21304:76;:::i;:::-;21296:84;;20747:640;;;;;;;:::o;21393:373::-;21536:4;21574:2;21563:9;21559:18;21551:26;;21623:9;21617:4;21613:20;21609:1;21598:9;21594:17;21587:47;21651:108;21754:4;21745:6;21651:108;:::i;:::-;21643:116;;21393:373;;;;:::o;21772:210::-;21859:4;21897:2;21886:9;21882:18;21874:26;;21910:65;21972:1;21961:9;21957:17;21948:6;21910:65;:::i;:::-;21772:210;;;;:::o;21988:313::-;22101:4;22139:2;22128:9;22124:18;22116:26;;22188:9;22182:4;22178:20;22174:1;22163:9;22159:17;22152:47;22216:78;22289:4;22280:6;22216:78;:::i;:::-;22208:86;;21988:313;;;;:::o;22307:419::-;22473:4;22511:2;22500:9;22496:18;22488:26;;22560:9;22554:4;22550:20;22546:1;22535:9;22531:17;22524:47;22588:131;22714:4;22588:131;:::i;:::-;22580:139;;22307:419;;;:::o;22732:::-;22898:4;22936:2;22925:9;22921:18;22913:26;;22985:9;22979:4;22975:20;22971:1;22960:9;22956:17;22949:47;23013:131;23139:4;23013:131;:::i;:::-;23005:139;;22732:419;;;:::o;23157:::-;23323:4;23361:2;23350:9;23346:18;23338:26;;23410:9;23404:4;23400:20;23396:1;23385:9;23381:17;23374:47;23438:131;23564:4;23438:131;:::i;:::-;23430:139;;23157:419;;;:::o;23582:::-;23748:4;23786:2;23775:9;23771:18;23763:26;;23835:9;23829:4;23825:20;23821:1;23810:9;23806:17;23799:47;23863:131;23989:4;23863:131;:::i;:::-;23855:139;;23582:419;;;:::o;24007:::-;24173:4;24211:2;24200:9;24196:18;24188:26;;24260:9;24254:4;24250:20;24246:1;24235:9;24231:17;24224:47;24288:131;24414:4;24288:131;:::i;:::-;24280:139;;24007:419;;;:::o;24432:::-;24598:4;24636:2;24625:9;24621:18;24613:26;;24685:9;24679:4;24675:20;24671:1;24660:9;24656:17;24649:47;24713:131;24839:4;24713:131;:::i;:::-;24705:139;;24432:419;;;:::o;24857:::-;25023:4;25061:2;25050:9;25046:18;25038:26;;25110:9;25104:4;25100:20;25096:1;25085:9;25081:17;25074:47;25138:131;25264:4;25138:131;:::i;:::-;25130:139;;24857:419;;;:::o;25282:::-;25448:4;25486:2;25475:9;25471:18;25463:26;;25535:9;25529:4;25525:20;25521:1;25510:9;25506:17;25499:47;25563:131;25689:4;25563:131;:::i;:::-;25555:139;;25282:419;;;:::o;25707:::-;25873:4;25911:2;25900:9;25896:18;25888:26;;25960:9;25954:4;25950:20;25946:1;25935:9;25931:17;25924:47;25988:131;26114:4;25988:131;:::i;:::-;25980:139;;25707:419;;;:::o;26132:::-;26298:4;26336:2;26325:9;26321:18;26313:26;;26385:9;26379:4;26375:20;26371:1;26360:9;26356:17;26349:47;26413:131;26539:4;26413:131;:::i;:::-;26405:139;;26132:419;;;:::o;26557:::-;26723:4;26761:2;26750:9;26746:18;26738:26;;26810:9;26804:4;26800:20;26796:1;26785:9;26781:17;26774:47;26838:131;26964:4;26838:131;:::i;:::-;26830:139;;26557:419;;;:::o;26982:::-;27148:4;27186:2;27175:9;27171:18;27163:26;;27235:9;27229:4;27225:20;27221:1;27210:9;27206:17;27199:47;27263:131;27389:4;27263:131;:::i;:::-;27255:139;;26982:419;;;:::o;27407:::-;27573:4;27611:2;27600:9;27596:18;27588:26;;27660:9;27654:4;27650:20;27646:1;27635:9;27631:17;27624:47;27688:131;27814:4;27688:131;:::i;:::-;27680:139;;27407:419;;;:::o;27832:::-;27998:4;28036:2;28025:9;28021:18;28013:26;;28085:9;28079:4;28075:20;28071:1;28060:9;28056:17;28049:47;28113:131;28239:4;28113:131;:::i;:::-;28105:139;;27832:419;;;:::o;28257:::-;28423:4;28461:2;28450:9;28446:18;28438:26;;28510:9;28504:4;28500:20;28496:1;28485:9;28481:17;28474:47;28538:131;28664:4;28538:131;:::i;:::-;28530:139;;28257:419;;;:::o;28682:::-;28848:4;28886:2;28875:9;28871:18;28863:26;;28935:9;28929:4;28925:20;28921:1;28910:9;28906:17;28899:47;28963:131;29089:4;28963:131;:::i;:::-;28955:139;;28682:419;;;:::o;29107:::-;29273:4;29311:2;29300:9;29296:18;29288:26;;29360:9;29354:4;29350:20;29346:1;29335:9;29331:17;29324:47;29388:131;29514:4;29388:131;:::i;:::-;29380:139;;29107:419;;;:::o;29532:::-;29698:4;29736:2;29725:9;29721:18;29713:26;;29785:9;29779:4;29775:20;29771:1;29760:9;29756:17;29749:47;29813:131;29939:4;29813:131;:::i;:::-;29805:139;;29532:419;;;:::o;29957:::-;30123:4;30161:2;30150:9;30146:18;30138:26;;30210:9;30204:4;30200:20;30196:1;30185:9;30181:17;30174:47;30238:131;30364:4;30238:131;:::i;:::-;30230:139;;29957:419;;;:::o;30382:222::-;30475:4;30513:2;30502:9;30498:18;30490:26;;30526:71;30594:1;30583:9;30579:17;30570:6;30526:71;:::i;:::-;30382:222;;;;:::o;30610:129::-;30644:6;30671:20;;:::i;:::-;30661:30;;30700:33;30728:4;30720:6;30700:33;:::i;:::-;30610:129;;;:::o;30745:75::-;30778:6;30811:2;30805:9;30795:19;;30745:75;:::o;30826:307::-;30887:4;30977:18;30969:6;30966:30;30963:56;;;30999:18;;:::i;:::-;30963:56;31037:29;31059:6;31037:29;:::i;:::-;31029:37;;31121:4;31115;31111:15;31103:23;;30826:307;;;:::o;31139:308::-;31201:4;31291:18;31283:6;31280:30;31277:56;;;31313:18;;:::i;:::-;31277:56;31351:29;31373:6;31351:29;:::i;:::-;31343:37;;31435:4;31429;31425:15;31417:23;;31139:308;;;:::o;31453:132::-;31520:4;31543:3;31535:11;;31573:4;31568:3;31564:14;31556:22;;31453:132;;;:::o;31591:141::-;31640:4;31663:3;31655:11;;31686:3;31683:1;31676:14;31720:4;31717:1;31707:18;31699:26;;31591:141;;;:::o;31738:114::-;31805:6;31839:5;31833:12;31823:22;;31738:114;;;:::o;31858:98::-;31909:6;31943:5;31937:12;31927:22;;31858:98;;;:::o;31962:99::-;32014:6;32048:5;32042:12;32032:22;;31962:99;;;:::o;32067:113::-;32137:4;32169;32164:3;32160:14;32152:22;;32067:113;;;:::o;32186:184::-;32285:11;32319:6;32314:3;32307:19;32359:4;32354:3;32350:14;32335:29;;32186:184;;;;:::o;32376:168::-;32459:11;32493:6;32488:3;32481:19;32533:4;32528:3;32524:14;32509:29;;32376:168;;;;:::o;32550:147::-;32651:11;32688:3;32673:18;;32550:147;;;;:::o;32703:169::-;32787:11;32821:6;32816:3;32809:19;32861:4;32856:3;32852:14;32837:29;;32703:169;;;;:::o;32878:148::-;32980:11;33017:3;33002:18;;32878:148;;;;:::o;33032:305::-;33072:3;33091:20;33109:1;33091:20;:::i;:::-;33086:25;;33125:20;33143:1;33125:20;:::i;:::-;33120:25;;33279:1;33211:66;33207:74;33204:1;33201:81;33198:107;;;33285:18;;:::i;:::-;33198:107;33329:1;33326;33322:9;33315:16;;33032:305;;;;:::o;33343:185::-;33383:1;33400:20;33418:1;33400:20;:::i;:::-;33395:25;;33434:20;33452:1;33434:20;:::i;:::-;33429:25;;33473:1;33463:35;;33478:18;;:::i;:::-;33463:35;33520:1;33517;33513:9;33508:14;;33343:185;;;;:::o;33534:348::-;33574:7;33597:20;33615:1;33597:20;:::i;:::-;33592:25;;33631:20;33649:1;33631:20;:::i;:::-;33626:25;;33819:1;33751:66;33747:74;33744:1;33741:81;33736:1;33729:9;33722:17;33718:105;33715:131;;;33826:18;;:::i;:::-;33715:131;33874:1;33871;33867:9;33856:20;;33534:348;;;;:::o;33888:191::-;33928:4;33948:20;33966:1;33948:20;:::i;:::-;33943:25;;33982:20;34000:1;33982:20;:::i;:::-;33977:25;;34021:1;34018;34015:8;34012:34;;;34026:18;;:::i;:::-;34012:34;34071:1;34068;34064:9;34056:17;;33888:191;;;;:::o;34085:96::-;34122:7;34151:24;34169:5;34151:24;:::i;:::-;34140:35;;34085:96;;;:::o;34187:90::-;34221:7;34264:5;34257:13;34250:21;34239:32;;34187:90;;;:::o;34283:149::-;34319:7;34359:66;34352:5;34348:78;34337:89;;34283:149;;;:::o;34438:126::-;34475:7;34515:42;34508:5;34504:54;34493:65;;34438:126;;;:::o;34570:77::-;34607:7;34636:5;34625:16;;34570:77;;;:::o;34653:154::-;34737:6;34732:3;34727;34714:30;34799:1;34790:6;34785:3;34781:16;34774:27;34653:154;;;:::o;34813:307::-;34881:1;34891:113;34905:6;34902:1;34899:13;34891:113;;;34990:1;34985:3;34981:11;34975:18;34971:1;34966:3;34962:11;34955:39;34927:2;34924:1;34920:10;34915:15;;34891:113;;;35022:6;35019:1;35016:13;35013:101;;;35102:1;35093:6;35088:3;35084:16;35077:27;35013:101;34862:258;34813:307;;;:::o;35126:320::-;35170:6;35207:1;35201:4;35197:12;35187:22;;35254:1;35248:4;35244:12;35275:18;35265:81;;35331:4;35323:6;35319:17;35309:27;;35265:81;35393:2;35385:6;35382:14;35362:18;35359:38;35356:84;;;35412:18;;:::i;:::-;35356:84;35177:269;35126:320;;;:::o;35452:281::-;35535:27;35557:4;35535:27;:::i;:::-;35527:6;35523:40;35665:6;35653:10;35650:22;35629:18;35617:10;35614:34;35611:62;35608:88;;;35676:18;;:::i;:::-;35608:88;35716:10;35712:2;35705:22;35495:238;35452:281;;:::o;35739:233::-;35778:3;35801:24;35819:5;35801:24;:::i;:::-;35792:33;;35847:66;35840:5;35837:77;35834:103;;;35917:18;;:::i;:::-;35834:103;35964:1;35957:5;35953:13;35946:20;;35739:233;;;:::o;35978:176::-;36010:1;36027:20;36045:1;36027:20;:::i;:::-;36022:25;;36061:20;36079:1;36061:20;:::i;:::-;36056:25;;36100:1;36090:35;;36105:18;;:::i;:::-;36090:35;36146:1;36143;36139:9;36134:14;;35978:176;;;;:::o;36160:180::-;36208:77;36205:1;36198:88;36305:4;36302:1;36295:15;36329:4;36326:1;36319:15;36346:180;36394:77;36391:1;36384:88;36491:4;36488:1;36481:15;36515:4;36512:1;36505:15;36532:180;36580:77;36577:1;36570:88;36677:4;36674:1;36667:15;36701:4;36698:1;36691:15;36718:180;36766:77;36763:1;36756:88;36863:4;36860:1;36853:15;36887:4;36884:1;36877:15;36904:180;36952:77;36949:1;36942:88;37049:4;37046:1;37039:15;37073:4;37070:1;37063:15;37090:180;37138:77;37135:1;37128:88;37235:4;37232:1;37225:15;37259:4;37256:1;37249:15;37276:117;37385:1;37382;37375:12;37399:117;37508:1;37505;37498:12;37522:117;37631:1;37628;37621:12;37645:117;37754:1;37751;37744:12;37768:117;37877:1;37874;37867:12;37891:117;38000:1;37997;37990:12;38014:102;38055:6;38106:2;38102:7;38097:2;38090:5;38086:14;38082:28;38072:38;;38014:102;;;:::o;38122:230::-;38262:34;38258:1;38250:6;38246:14;38239:58;38331:13;38326:2;38318:6;38314:15;38307:38;38122:230;:::o;38358:237::-;38498:34;38494:1;38486:6;38482:14;38475:58;38567:20;38562:2;38554:6;38550:15;38543:45;38358:237;:::o;38601:225::-;38741:34;38737:1;38729:6;38725:14;38718:58;38810:8;38805:2;38797:6;38793:15;38786:33;38601:225;:::o;38832:178::-;38972:30;38968:1;38960:6;38956:14;38949:54;38832:178;:::o;39016:223::-;39156:34;39152:1;39144:6;39140:14;39133:58;39225:6;39220:2;39212:6;39208:15;39201:31;39016:223;:::o;39245:175::-;39385:27;39381:1;39373:6;39369:14;39362:51;39245:175;:::o;39426:231::-;39566:34;39562:1;39554:6;39550:14;39543:58;39635:14;39630:2;39622:6;39618:15;39611:39;39426:231;:::o;39663:243::-;39803:34;39799:1;39791:6;39787:14;39780:58;39872:26;39867:2;39859:6;39855:15;39848:51;39663:243;:::o;39912:229::-;40052:34;40048:1;40040:6;40036:14;40029:58;40121:12;40116:2;40108:6;40104:15;40097:37;39912:229;:::o;40147:228::-;40287:34;40283:1;40275:6;40271:14;40264:58;40356:11;40351:2;40343:6;40339:15;40332:36;40147:228;:::o;40381:182::-;40521:34;40517:1;40509:6;40505:14;40498:58;40381:182;:::o;40569:231::-;40709:34;40705:1;40697:6;40693:14;40686:58;40778:14;40773:2;40765:6;40761:15;40754:39;40569:231;:::o;40806:182::-;40946:34;40942:1;40934:6;40930:14;40923:58;40806:182;:::o;40994:228::-;41134:34;41130:1;41122:6;41118:14;41111:58;41203:11;41198:2;41190:6;41186:15;41179:36;40994:228;:::o;41228:234::-;41368:34;41364:1;41356:6;41352:14;41345:58;41437:17;41432:2;41424:6;41420:15;41413:42;41228:234;:::o;41468:220::-;41608:34;41604:1;41596:6;41592:14;41585:58;41677:3;41672:2;41664:6;41660:15;41653:28;41468:220;:::o;41694:114::-;;:::o;41814:236::-;41954:34;41950:1;41942:6;41938:14;41931:58;42023:19;42018:2;42010:6;42006:15;41999:44;41814:236;:::o;42056:231::-;42196:34;42192:1;42184:6;42180:14;42173:58;42265:14;42260:2;42252:6;42248:15;42241:39;42056:231;:::o;42293:173::-;42433:25;42429:1;42421:6;42417:14;42410:49;42293:173;:::o;42472:122::-;42545:24;42563:5;42545:24;:::i;:::-;42538:5;42535:35;42525:63;;42584:1;42581;42574:12;42525:63;42472:122;:::o;42600:116::-;42670:21;42685:5;42670:21;:::i;:::-;42663:5;42660:32;42650:60;;42706:1;42703;42696:12;42650:60;42600:116;:::o;42722:120::-;42794:23;42811:5;42794:23;:::i;:::-;42787:5;42784:34;42774:62;;42832:1;42829;42822:12;42774:62;42722:120;:::o;42848:122::-;42921:24;42939:5;42921:24;:::i;:::-;42914:5;42911:35;42901:63;;42960:1;42957;42950:12;42901:63;42848:122;:::o

Swarm Source

ipfs://6c4b671f29a9e495729b4ac2354bfbfc0f1aa0f7b681295cec7a9e7109cb156b
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.