ETH Price: $3,479.95 (+0.83%)

Token

Numi Token (NUMI)
 

Overview

Max Total Supply

1,306 NUMI

Holders

279

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
12 NUMI
0xA4f25102E7B022ad4e04de84A7F91a70C8D78F02
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:
NumiToken

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-08-02
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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




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

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

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

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

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

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

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

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

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

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

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

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




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





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

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

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



/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    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);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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




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

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



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

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

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

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

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





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




/**
 * @dev 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(to).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 {}
}




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





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


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




contract NumiToken is ERC721Enumerable, Ownable {

    using Strings for uint256;

    string _baseTokenURI;
    uint256 private _reserved = 400;
    uint256 private _price = 0.03 ether;
    bool public _paused = true;

    // withdraw addresses
    address t1 = 0xF02999FceaF91aB30291DA876a9135e04f1e55d7;


    constructor(string memory baseURI) ERC721("Numi Token", "NUMI")  {
        setBaseURI(baseURI);

        //mint to team
        _safeMint(t1, 0);

    }

    function mint(uint256 num) public payable {
        uint256 supply = totalSupply();
        require( !_paused,                            "Sale paused" );
        require( num < 21,                            "You can mint a maximum of 20" );
        require( supply + num < 7590 - _reserved,     "Exceeds maximum supply" );
        require( msg.value >= _price * num,           "Ether sent is not correct" );

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

    function walletOfOwner(address _owner) public view returns(uint256[] memory) {
        uint256 tokenCount = balanceOf(_owner);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint256 i; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
    }

    // Just in case Eth does some crazy stuff
    function setPrice(uint256 _newPrice) public onlyOwner() {
        _price = _newPrice;
    }

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

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

    function getPrice() public view returns (uint256){
        return _price;
    }

    function giveAway(address _to, uint256 _amount) external onlyOwner() {
        require( _amount <= _reserved, "Exceeds reserved supply" );

        uint256 supply = totalSupply();
        for(uint256 i; i < _amount; i++){
            _safeMint( _to, supply + i );
        }

        _reserved -= _amount;
    }

    function pause(bool val) public onlyOwner {
        _paused = val;
    }

    function withdrawAll() public payable onlyOwner {
        uint256 _each = address(this).balance;
        require(payable(t1).send(_each));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","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":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

6080604052610190600c55666a94d74f430000600d556001600e60006101000a81548160ff02191690831515021790555073f02999fceaf91ab30291da876a9135e04f1e55d7600e60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200009257600080fd5b50604051620056b1380380620056b18339818101604052810190620000b8919062000ec7565b6040518060400160405280600a81526020017f4e756d6920546f6b656e000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4e554d490000000000000000000000000000000000000000000000000000000081525081600090805190602001906200013c92919062000d50565b5080600190805190602001906200015592919062000d50565b505050620001786200016c620001c560201b60201c565b620001cd60201b60201c565b62000189816200029360201b60201c565b620001be600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006200033e60201b60201c565b50620015af565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002a3620001c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002c96200036460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000319906200111a565b60405180910390fd5b80600b90805190602001906200033a92919062000d50565b5050565b620003608282604051806020016040528060008152506200038e60201b60201c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620003a08383620003fc60201b60201c565b620003b56000848484620005e260201b60201c565b620003f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003ee9062001092565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200046f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200046690620010f8565b60405180910390fd5b62000480816200079c60201b60201c565b15620004c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004ba90620010b4565b60405180910390fd5b620004d7600083836200080860201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005299190620011c8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620006108473ffffffffffffffffffffffffffffffffffffffff166200094f60201b620017d01760201c565b156200078f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000642620001c560201b60201c565b8786866040518563ffffffff1660e01b81526004016200066694939291906200103e565b602060405180830381600087803b1580156200068157600080fd5b505af1925050508015620006b557506040513d601f19601f82011682018060405250810190620006b2919062000e95565b60015b6200073e573d8060008114620006e8576040519150601f19603f3d011682016040523d82523d6000602084013e620006ed565b606091505b5060008151141562000736576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200072d9062001092565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000794565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620008208383836200096260201b620017e31760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200086d5762000867816200096760201b60201c565b620008b5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620008b457620008b38382620009b060201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200090257620008fc8162000b2d60201b60201c565b6200094a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620009495762000948828262000c0960201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001620009ca8462000c9560201b62000da81760201c565b620009d6919062001225565b905060006007600084815260200190815260200160002054905081811462000abc576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000b43919062001225565b905060006009600084815260200190815260200160002054905060006008838154811062000b765762000b75620013f9565b5b90600052602060002001549050806008838154811062000b9b5762000b9a620013f9565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000bed5762000bec620013ca565b5b6001900381819060005260206000200160009055905550505050565b600062000c218362000c9560201b62000da81760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000d09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d0090620010d6565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000d5e9062001300565b90600052602060002090601f01602090048101928262000d82576000855562000dce565b82601f1062000d9d57805160ff191683800117855562000dce565b8280016001018555821562000dce579182015b8281111562000dcd57825182559160200191906001019062000db0565b5b50905062000ddd919062000de1565b5090565b5b8082111562000dfc57600081600090555060010162000de2565b5090565b600062000e1762000e118462001165565b6200113c565b90508281526020810184848401111562000e365762000e356200145c565b5b62000e43848285620012ca565b509392505050565b60008151905062000e5c8162001595565b92915050565b600082601f83011262000e7a5762000e7962001457565b5b815162000e8c84826020860162000e00565b91505092915050565b60006020828403121562000eae5762000ead62001466565b5b600062000ebe8482850162000e4b565b91505092915050565b60006020828403121562000ee05762000edf62001466565b5b600082015167ffffffffffffffff81111562000f015762000f0062001461565b5b62000f0f8482850162000e62565b91505092915050565b62000f238162001260565b82525050565b600062000f36826200119b565b62000f428185620011a6565b935062000f54818560208601620012ca565b62000f5f816200146b565b840191505092915050565b600062000f79603283620011b7565b915062000f86826200147c565b604082019050919050565b600062000fa0601c83620011b7565b915062000fad82620014cb565b602082019050919050565b600062000fc7602a83620011b7565b915062000fd482620014f4565b604082019050919050565b600062000fee602083620011b7565b915062000ffb8262001543565b602082019050919050565b600062001015602083620011b7565b915062001022826200156c565b602082019050919050565b6200103881620012c0565b82525050565b600060808201905062001055600083018762000f18565b62001064602083018662000f18565b6200107360408301856200102d565b818103606083015262001087818462000f29565b905095945050505050565b60006020820190508181036000830152620010ad8162000f6a565b9050919050565b60006020820190508181036000830152620010cf8162000f91565b9050919050565b60006020820190508181036000830152620010f18162000fb8565b9050919050565b60006020820190508181036000830152620011138162000fdf565b9050919050565b60006020820190508181036000830152620011358162001006565b9050919050565b6000620011486200115b565b905062001156828262001336565b919050565b6000604051905090565b600067ffffffffffffffff82111562001183576200118262001428565b5b6200118e826200146b565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620011d582620012c0565b9150620011e283620012c0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200121a57620012196200136c565b5b828201905092915050565b60006200123282620012c0565b91506200123f83620012c0565b9250828210156200125557620012546200136c565b5b828203905092915050565b60006200126d82620012a0565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620012ea578082015181840152602081019050620012cd565b83811115620012fa576000848401525b50505050565b600060028204905060018216806200131957607f821691505b6020821081141562001330576200132f6200139b565b5b50919050565b62001341826200146b565b810181811067ffffffffffffffff8211171562001363576200136262001428565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620015a08162001274565b8114620015ac57600080fd5b50565b6140f280620015bf6000396000f3fe6080604052600436106101b75760003560e01c806370a08231116100ec578063a0712d681161008a578063c87b56dd11610064578063c87b56dd146105ee578063ca8001441461062b578063e985e9c514610654578063f2fde38b14610691576101b7565b8063a0712d6814610580578063a22cb4651461059c578063b88d4fde146105c5576101b7565b80638da5cb5b116100c65780638da5cb5b146104d657806391b7f5ed1461050157806395d89b411461052a57806398d5fdca14610555576101b7565b806370a0823114610478578063715018a6146104b5578063853828b6146104cc576101b7565b806323b872dd11610159578063438b630011610133578063438b6300146103985780634f6ccce7146103d557806355f804b3146104125780636352211e1461043b576101b7565b806323b872dd146103095780632f745c591461033257806342842e0e1461036f576101b7565b8063081812fc11610195578063081812fc1461024d578063095ea7b31461028a57806316c61ccc146102b357806318160ddd146102de576101b7565b806301ffc9a7146101bc57806302329a29146101f957806306fdde0314610222575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612c84565b6106ba565b6040516101f0919061327b565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b9190612c57565b610734565b005b34801561022e57600080fd5b506102376107cd565b6040516102449190613296565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190612d27565b61085f565b60405161028191906131f2565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190612c17565b6108e4565b005b3480156102bf57600080fd5b506102c86109fc565b6040516102d5919061327b565b60405180910390f35b3480156102ea57600080fd5b506102f3610a0f565b6040516103009190613598565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b9190612b01565b610a1c565b005b34801561033e57600080fd5b5061035960048036038101906103549190612c17565b610a7c565b6040516103669190613598565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190612b01565b610b21565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612a94565b610b41565b6040516103cc9190613259565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f79190612d27565b610bef565b6040516104099190613598565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190612cde565b610c60565b005b34801561044757600080fd5b50610462600480360381019061045d9190612d27565b610cf6565b60405161046f91906131f2565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190612a94565b610da8565b6040516104ac9190613598565b60405180910390f35b3480156104c157600080fd5b506104ca610e60565b005b6104d4610ee8565b005b3480156104e257600080fd5b506104eb610fcc565b6040516104f891906131f2565b60405180910390f35b34801561050d57600080fd5b5061052860048036038101906105239190612d27565b610ff6565b005b34801561053657600080fd5b5061053f61107c565b60405161054c9190613296565b60405180910390f35b34801561056157600080fd5b5061056a61110e565b6040516105779190613598565b60405180910390f35b61059a60048036038101906105959190612d27565b611118565b005b3480156105a857600080fd5b506105c360048036038101906105be9190612bd7565b61129b565b005b3480156105d157600080fd5b506105ec60048036038101906105e79190612b54565b61141c565b005b3480156105fa57600080fd5b5061061560048036038101906106109190612d27565b61147e565b6040516106229190613296565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190612c17565b611525565b005b34801561066057600080fd5b5061067b60048036038101906106769190612ac1565b611644565b604051610688919061327b565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190612a94565b6116d8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061072d575061072c826117e8565b5b9050919050565b61073c6118ca565b73ffffffffffffffffffffffffffffffffffffffff1661075a610fcc565b73ffffffffffffffffffffffffffffffffffffffff16146107b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a790613498565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6060600080546107dc90613881565b80601f016020809104026020016040519081016040528092919081815260200182805461080890613881565b80156108555780601f1061082a57610100808354040283529160200191610855565b820191906000526020600020905b81548152906001019060200180831161083857829003601f168201915b5050505050905090565b600061086a826118d2565b6108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a090613478565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108ef82610cf6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610957906134f8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661097f6118ca565b73ffffffffffffffffffffffffffffffffffffffff1614806109ae57506109ad816109a86118ca565b611644565b5b6109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e4906133d8565b60405180910390fd5b6109f7838361193e565b505050565b600e60009054906101000a900460ff1681565b6000600880549050905090565b610a2d610a276118ca565b826119f7565b610a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6390613558565b60405180910390fd5b610a77838383611ad5565b505050565b6000610a8783610da8565b8210610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf906132d8565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b3c8383836040518060200160405280600081525061141c565b505050565b60606000610b4e83610da8565b905060008167ffffffffffffffff811115610b6c57610b6b613a49565b5b604051908082528060200260200182016040528015610b9a5781602001602082028036833780820191505090505b50905060005b82811015610be457610bb28582610a7c565b828281518110610bc557610bc4613a1a565b5b6020026020010181815250508080610bdc906138e4565b915050610ba0565b508092505050919050565b6000610bf9610a0f565b8210610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3190613578565b60405180910390fd5b60088281548110610c4e57610c4d613a1a565b5b90600052602060002001549050919050565b610c686118ca565b73ffffffffffffffffffffffffffffffffffffffff16610c86610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd390613498565b60405180910390fd5b80600b9080519060200190610cf29291906128a8565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9690613418565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e10906133f8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e686118ca565b73ffffffffffffffffffffffffffffffffffffffff16610e86610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed390613498565b60405180910390fd5b610ee66000611d31565b565b610ef06118ca565b73ffffffffffffffffffffffffffffffffffffffff16610f0e610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5b90613498565b60405180910390fd5b6000479050600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610fc957600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ffe6118ca565b73ffffffffffffffffffffffffffffffffffffffff1661101c610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106990613498565b60405180910390fd5b80600d8190555050565b60606001805461108b90613881565b80601f01602080910402602001604051908101604052809291908181526020018280546110b790613881565b80156111045780601f106110d957610100808354040283529160200191611104565b820191906000526020600020905b8154815290600101906020018083116110e757829003601f168201915b5050505050905090565b6000600d54905090565b6000611122610a0f565b9050600e60009054906101000a900460ff1615611174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116b906132b8565b60405180910390fd5b601582106111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae906133b8565b60405180910390fd5b600c54611da66111c79190613797565b82826111d391906136b6565b10611213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120a90613518565b60405180910390fd5b81600d54611221919061373d565b341015611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a90613538565b60405180910390fd5b60005b828110156112965761128333828461127e91906136b6565b611df7565b808061128e906138e4565b915050611266565b505050565b6112a36118ca565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890613378565b60405180910390fd5b806005600061131e6118ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113cb6118ca565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611410919061327b565b60405180910390a35050565b61142d6114276118ca565b836119f7565b61146c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146390613558565b60405180910390fd5b61147884848484611e15565b50505050565b6060611489826118d2565b6114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bf906134d8565b60405180910390fd5b60006114d2611e71565b905060008151116114f2576040518060200160405280600081525061151d565b806114fc84611f03565b60405160200161150d9291906131ce565b6040516020818303038152906040525b915050919050565b61152d6118ca565b73ffffffffffffffffffffffffffffffffffffffff1661154b610fcc565b73ffffffffffffffffffffffffffffffffffffffff16146115a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159890613498565b60405180910390fd5b600c548111156115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90613438565b60405180910390fd5b60006115f0610a0f565b905060005b828110156116255761161284828461160d91906136b6565b611df7565b808061161d906138e4565b9150506115f5565b5081600c60008282546116389190613797565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116e06118ca565b73ffffffffffffffffffffffffffffffffffffffff166116fe610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b90613498565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90613318565b60405180910390fd5b6117cd81611d31565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806118b357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806118c357506118c282612064565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166119b183610cf6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611a02826118d2565b611a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3890613398565b60405180910390fd5b6000611a4c83610cf6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611abb57508373ffffffffffffffffffffffffffffffffffffffff16611aa38461085f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611acc5750611acb8185611644565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611af582610cf6565b73ffffffffffffffffffffffffffffffffffffffff1614611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b42906134b8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb290613358565b60405180910390fd5b611bc68383836120ce565b611bd160008261193e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c219190613797565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c7891906136b6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611e118282604051806020016040528060008152506121e2565b5050565b611e20848484611ad5565b611e2c8484848461223d565b611e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e62906132f8565b60405180910390fd5b50505050565b6060600b8054611e8090613881565b80601f0160208091040260200160405190810160405280929190818152602001828054611eac90613881565b8015611ef95780601f10611ece57610100808354040283529160200191611ef9565b820191906000526020600020905b815481529060010190602001808311611edc57829003601f168201915b5050505050905090565b60606000821415611f4b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061205f565b600082905060005b60008214611f7d578080611f66906138e4565b915050600a82611f76919061370c565b9150611f53565b60008167ffffffffffffffff811115611f9957611f98613a49565b5b6040519080825280601f01601f191660200182016040528015611fcb5781602001600182028036833780820191505090505b5090505b6000851461205857600182611fe49190613797565b9150600a85611ff3919061392d565b6030611fff91906136b6565b60f81b81838151811061201557612014613a1a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612051919061370c565b9450611fcf565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6120d98383836117e3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561211c57612117816123d4565b61215b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461215a57612159838261241d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561219e576121998161258a565b6121dd565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121dc576121db828261265b565b5b5b505050565b6121ec83836126da565b6121f9600084848461223d565b612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222f906132f8565b60405180910390fd5b505050565b600061225e8473ffffffffffffffffffffffffffffffffffffffff166117d0565b156123c7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122876118ca565b8786866040518563ffffffff1660e01b81526004016122a9949392919061320d565b602060405180830381600087803b1580156122c357600080fd5b505af19250505080156122f457506040513d601f19601f820116820180604052508101906122f19190612cb1565b60015b612377573d8060008114612324576040519150601f19603f3d011682016040523d82523d6000602084013e612329565b606091505b5060008151141561236f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612366906132f8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123cc565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161242a84610da8565b6124349190613797565b9050600060076000848152602001908152602001600020549050818114612519576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061259e9190613797565b90506000600960008481526020019081526020016000205490506000600883815481106125ce576125cd613a1a565b5b9060005260206000200154905080600883815481106125f0576125ef613a1a565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061263f5761263e6139eb565b5b6001900381819060005260206000200160009055905550505050565b600061266683610da8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561274a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274190613458565b60405180910390fd5b612753816118d2565b15612793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278a90613338565b60405180910390fd5b61279f600083836120ce565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127ef91906136b6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546128b490613881565b90600052602060002090601f0160209004810192826128d6576000855561291d565b82601f106128ef57805160ff191683800117855561291d565b8280016001018555821561291d579182015b8281111561291c578251825591602001919060010190612901565b5b50905061292a919061292e565b5090565b5b8082111561294757600081600090555060010161292f565b5090565b600061295e612959846135d8565b6135b3565b90508281526020810184848401111561297a57612979613a7d565b5b61298584828561383f565b509392505050565b60006129a061299b84613609565b6135b3565b9050828152602081018484840111156129bc576129bb613a7d565b5b6129c784828561383f565b509392505050565b6000813590506129de81614060565b92915050565b6000813590506129f381614077565b92915050565b600081359050612a088161408e565b92915050565b600081519050612a1d8161408e565b92915050565b600082601f830112612a3857612a37613a78565b5b8135612a4884826020860161294b565b91505092915050565b600082601f830112612a6657612a65613a78565b5b8135612a7684826020860161298d565b91505092915050565b600081359050612a8e816140a5565b92915050565b600060208284031215612aaa57612aa9613a87565b5b6000612ab8848285016129cf565b91505092915050565b60008060408385031215612ad857612ad7613a87565b5b6000612ae6858286016129cf565b9250506020612af7858286016129cf565b9150509250929050565b600080600060608486031215612b1a57612b19613a87565b5b6000612b28868287016129cf565b9350506020612b39868287016129cf565b9250506040612b4a86828701612a7f565b9150509250925092565b60008060008060808587031215612b6e57612b6d613a87565b5b6000612b7c878288016129cf565b9450506020612b8d878288016129cf565b9350506040612b9e87828801612a7f565b925050606085013567ffffffffffffffff811115612bbf57612bbe613a82565b5b612bcb87828801612a23565b91505092959194509250565b60008060408385031215612bee57612bed613a87565b5b6000612bfc858286016129cf565b9250506020612c0d858286016129e4565b9150509250929050565b60008060408385031215612c2e57612c2d613a87565b5b6000612c3c858286016129cf565b9250506020612c4d85828601612a7f565b9150509250929050565b600060208284031215612c6d57612c6c613a87565b5b6000612c7b848285016129e4565b91505092915050565b600060208284031215612c9a57612c99613a87565b5b6000612ca8848285016129f9565b91505092915050565b600060208284031215612cc757612cc6613a87565b5b6000612cd584828501612a0e565b91505092915050565b600060208284031215612cf457612cf3613a87565b5b600082013567ffffffffffffffff811115612d1257612d11613a82565b5b612d1e84828501612a51565b91505092915050565b600060208284031215612d3d57612d3c613a87565b5b6000612d4b84828501612a7f565b91505092915050565b6000612d6083836131b0565b60208301905092915050565b612d75816137cb565b82525050565b6000612d868261364a565b612d908185613678565b9350612d9b8361363a565b8060005b83811015612dcc578151612db38882612d54565b9750612dbe8361366b565b925050600181019050612d9f565b5085935050505092915050565b612de2816137dd565b82525050565b6000612df382613655565b612dfd8185613689565b9350612e0d81856020860161384e565b612e1681613a8c565b840191505092915050565b6000612e2c82613660565b612e36818561369a565b9350612e4681856020860161384e565b612e4f81613a8c565b840191505092915050565b6000612e6582613660565b612e6f81856136ab565b9350612e7f81856020860161384e565b80840191505092915050565b6000612e98600b8361369a565b9150612ea382613a9d565b602082019050919050565b6000612ebb602b8361369a565b9150612ec682613ac6565b604082019050919050565b6000612ede60328361369a565b9150612ee982613b15565b604082019050919050565b6000612f0160268361369a565b9150612f0c82613b64565b604082019050919050565b6000612f24601c8361369a565b9150612f2f82613bb3565b602082019050919050565b6000612f4760248361369a565b9150612f5282613bdc565b604082019050919050565b6000612f6a60198361369a565b9150612f7582613c2b565b602082019050919050565b6000612f8d602c8361369a565b9150612f9882613c54565b604082019050919050565b6000612fb0601c8361369a565b9150612fbb82613ca3565b602082019050919050565b6000612fd360388361369a565b9150612fde82613ccc565b604082019050919050565b6000612ff6602a8361369a565b915061300182613d1b565b604082019050919050565b600061301960298361369a565b915061302482613d6a565b604082019050919050565b600061303c60178361369a565b915061304782613db9565b602082019050919050565b600061305f60208361369a565b915061306a82613de2565b602082019050919050565b6000613082602c8361369a565b915061308d82613e0b565b604082019050919050565b60006130a560208361369a565b91506130b082613e5a565b602082019050919050565b60006130c860298361369a565b91506130d382613e83565b604082019050919050565b60006130eb602f8361369a565b91506130f682613ed2565b604082019050919050565b600061310e60218361369a565b915061311982613f21565b604082019050919050565b600061313160168361369a565b915061313c82613f70565b602082019050919050565b600061315460198361369a565b915061315f82613f99565b602082019050919050565b600061317760318361369a565b915061318282613fc2565b604082019050919050565b600061319a602c8361369a565b91506131a582614011565b604082019050919050565b6131b981613835565b82525050565b6131c881613835565b82525050565b60006131da8285612e5a565b91506131e68284612e5a565b91508190509392505050565b60006020820190506132076000830184612d6c565b92915050565b60006080820190506132226000830187612d6c565b61322f6020830186612d6c565b61323c60408301856131bf565b818103606083015261324e8184612de8565b905095945050505050565b600060208201905081810360008301526132738184612d7b565b905092915050565b60006020820190506132906000830184612dd9565b92915050565b600060208201905081810360008301526132b08184612e21565b905092915050565b600060208201905081810360008301526132d181612e8b565b9050919050565b600060208201905081810360008301526132f181612eae565b9050919050565b6000602082019050818103600083015261331181612ed1565b9050919050565b6000602082019050818103600083015261333181612ef4565b9050919050565b6000602082019050818103600083015261335181612f17565b9050919050565b6000602082019050818103600083015261337181612f3a565b9050919050565b6000602082019050818103600083015261339181612f5d565b9050919050565b600060208201905081810360008301526133b181612f80565b9050919050565b600060208201905081810360008301526133d181612fa3565b9050919050565b600060208201905081810360008301526133f181612fc6565b9050919050565b6000602082019050818103600083015261341181612fe9565b9050919050565b600060208201905081810360008301526134318161300c565b9050919050565b600060208201905081810360008301526134518161302f565b9050919050565b6000602082019050818103600083015261347181613052565b9050919050565b6000602082019050818103600083015261349181613075565b9050919050565b600060208201905081810360008301526134b181613098565b9050919050565b600060208201905081810360008301526134d1816130bb565b9050919050565b600060208201905081810360008301526134f1816130de565b9050919050565b6000602082019050818103600083015261351181613101565b9050919050565b6000602082019050818103600083015261353181613124565b9050919050565b6000602082019050818103600083015261355181613147565b9050919050565b600060208201905081810360008301526135718161316a565b9050919050565b600060208201905081810360008301526135918161318d565b9050919050565b60006020820190506135ad60008301846131bf565b92915050565b60006135bd6135ce565b90506135c982826138b3565b919050565b6000604051905090565b600067ffffffffffffffff8211156135f3576135f2613a49565b5b6135fc82613a8c565b9050602081019050919050565b600067ffffffffffffffff82111561362457613623613a49565b5b61362d82613a8c565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006136c182613835565b91506136cc83613835565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137015761370061395e565b5b828201905092915050565b600061371782613835565b915061372283613835565b9250826137325761373161398d565b5b828204905092915050565b600061374882613835565b915061375383613835565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561378c5761378b61395e565b5b828202905092915050565b60006137a282613835565b91506137ad83613835565b9250828210156137c0576137bf61395e565b5b828203905092915050565b60006137d682613815565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561386c578082015181840152602081019050613851565b8381111561387b576000848401525b50505050565b6000600282049050600182168061389957607f821691505b602082108114156138ad576138ac6139bc565b5b50919050565b6138bc82613a8c565b810181811067ffffffffffffffff821117156138db576138da613a49565b5b80604052505050565b60006138ef82613835565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139225761392161395e565b5b600182019050919050565b600061393882613835565b915061394383613835565b9250826139535761395261398d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f596f752063616e206d696e742061206d6178696d756d206f6620323000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4578636565647320726573657276656420737570706c79000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614069816137cb565b811461407457600080fd5b50565b614080816137dd565b811461408b57600080fd5b50565b614097816137e9565b81146140a257600080fd5b50565b6140ae81613835565b81146140b957600080fd5b5056fea26469706673582212204ceea9c98bb76e6e6a32bff03845c22039f1ce1f747ef1942afaf539de22bc1864736f6c634300080600330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001b68747470733a2f2f696e666f2e6e756d692e6f6e652f6e756d692f0000000000

Deployed Bytecode

0x6080604052600436106101b75760003560e01c806370a08231116100ec578063a0712d681161008a578063c87b56dd11610064578063c87b56dd146105ee578063ca8001441461062b578063e985e9c514610654578063f2fde38b14610691576101b7565b8063a0712d6814610580578063a22cb4651461059c578063b88d4fde146105c5576101b7565b80638da5cb5b116100c65780638da5cb5b146104d657806391b7f5ed1461050157806395d89b411461052a57806398d5fdca14610555576101b7565b806370a0823114610478578063715018a6146104b5578063853828b6146104cc576101b7565b806323b872dd11610159578063438b630011610133578063438b6300146103985780634f6ccce7146103d557806355f804b3146104125780636352211e1461043b576101b7565b806323b872dd146103095780632f745c591461033257806342842e0e1461036f576101b7565b8063081812fc11610195578063081812fc1461024d578063095ea7b31461028a57806316c61ccc146102b357806318160ddd146102de576101b7565b806301ffc9a7146101bc57806302329a29146101f957806306fdde0314610222575b600080fd5b3480156101c857600080fd5b506101e360048036038101906101de9190612c84565b6106ba565b6040516101f0919061327b565b60405180910390f35b34801561020557600080fd5b50610220600480360381019061021b9190612c57565b610734565b005b34801561022e57600080fd5b506102376107cd565b6040516102449190613296565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190612d27565b61085f565b60405161028191906131f2565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190612c17565b6108e4565b005b3480156102bf57600080fd5b506102c86109fc565b6040516102d5919061327b565b60405180910390f35b3480156102ea57600080fd5b506102f3610a0f565b6040516103009190613598565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b9190612b01565b610a1c565b005b34801561033e57600080fd5b5061035960048036038101906103549190612c17565b610a7c565b6040516103669190613598565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190612b01565b610b21565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612a94565b610b41565b6040516103cc9190613259565b60405180910390f35b3480156103e157600080fd5b506103fc60048036038101906103f79190612d27565b610bef565b6040516104099190613598565b60405180910390f35b34801561041e57600080fd5b5061043960048036038101906104349190612cde565b610c60565b005b34801561044757600080fd5b50610462600480360381019061045d9190612d27565b610cf6565b60405161046f91906131f2565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190612a94565b610da8565b6040516104ac9190613598565b60405180910390f35b3480156104c157600080fd5b506104ca610e60565b005b6104d4610ee8565b005b3480156104e257600080fd5b506104eb610fcc565b6040516104f891906131f2565b60405180910390f35b34801561050d57600080fd5b5061052860048036038101906105239190612d27565b610ff6565b005b34801561053657600080fd5b5061053f61107c565b60405161054c9190613296565b60405180910390f35b34801561056157600080fd5b5061056a61110e565b6040516105779190613598565b60405180910390f35b61059a60048036038101906105959190612d27565b611118565b005b3480156105a857600080fd5b506105c360048036038101906105be9190612bd7565b61129b565b005b3480156105d157600080fd5b506105ec60048036038101906105e79190612b54565b61141c565b005b3480156105fa57600080fd5b5061061560048036038101906106109190612d27565b61147e565b6040516106229190613296565b60405180910390f35b34801561063757600080fd5b50610652600480360381019061064d9190612c17565b611525565b005b34801561066057600080fd5b5061067b60048036038101906106769190612ac1565b611644565b604051610688919061327b565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190612a94565b6116d8565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061072d575061072c826117e8565b5b9050919050565b61073c6118ca565b73ffffffffffffffffffffffffffffffffffffffff1661075a610fcc565b73ffffffffffffffffffffffffffffffffffffffff16146107b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a790613498565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6060600080546107dc90613881565b80601f016020809104026020016040519081016040528092919081815260200182805461080890613881565b80156108555780601f1061082a57610100808354040283529160200191610855565b820191906000526020600020905b81548152906001019060200180831161083857829003601f168201915b5050505050905090565b600061086a826118d2565b6108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a090613478565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108ef82610cf6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610960576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610957906134f8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661097f6118ca565b73ffffffffffffffffffffffffffffffffffffffff1614806109ae57506109ad816109a86118ca565b611644565b5b6109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e4906133d8565b60405180910390fd5b6109f7838361193e565b505050565b600e60009054906101000a900460ff1681565b6000600880549050905090565b610a2d610a276118ca565b826119f7565b610a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6390613558565b60405180910390fd5b610a77838383611ad5565b505050565b6000610a8783610da8565b8210610ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abf906132d8565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610b3c8383836040518060200160405280600081525061141c565b505050565b60606000610b4e83610da8565b905060008167ffffffffffffffff811115610b6c57610b6b613a49565b5b604051908082528060200260200182016040528015610b9a5781602001602082028036833780820191505090505b50905060005b82811015610be457610bb28582610a7c565b828281518110610bc557610bc4613a1a565b5b6020026020010181815250508080610bdc906138e4565b915050610ba0565b508092505050919050565b6000610bf9610a0f565b8210610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3190613578565b60405180910390fd5b60088281548110610c4e57610c4d613a1a565b5b90600052602060002001549050919050565b610c686118ca565b73ffffffffffffffffffffffffffffffffffffffff16610c86610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd390613498565b60405180910390fd5b80600b9080519060200190610cf29291906128a8565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9690613418565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e10906133f8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e686118ca565b73ffffffffffffffffffffffffffffffffffffffff16610e86610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed390613498565b60405180910390fd5b610ee66000611d31565b565b610ef06118ca565b73ffffffffffffffffffffffffffffffffffffffff16610f0e610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614610f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5b90613498565b60405180910390fd5b6000479050600e60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610fc957600080fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ffe6118ca565b73ffffffffffffffffffffffffffffffffffffffff1661101c610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106990613498565b60405180910390fd5b80600d8190555050565b60606001805461108b90613881565b80601f01602080910402602001604051908101604052809291908181526020018280546110b790613881565b80156111045780601f106110d957610100808354040283529160200191611104565b820191906000526020600020905b8154815290600101906020018083116110e757829003601f168201915b5050505050905090565b6000600d54905090565b6000611122610a0f565b9050600e60009054906101000a900460ff1615611174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116b906132b8565b60405180910390fd5b601582106111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae906133b8565b60405180910390fd5b600c54611da66111c79190613797565b82826111d391906136b6565b10611213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120a90613518565b60405180910390fd5b81600d54611221919061373d565b341015611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a90613538565b60405180910390fd5b60005b828110156112965761128333828461127e91906136b6565b611df7565b808061128e906138e4565b915050611266565b505050565b6112a36118ca565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890613378565b60405180910390fd5b806005600061131e6118ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166113cb6118ca565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611410919061327b565b60405180910390a35050565b61142d6114276118ca565b836119f7565b61146c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146390613558565b60405180910390fd5b61147884848484611e15565b50505050565b6060611489826118d2565b6114c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114bf906134d8565b60405180910390fd5b60006114d2611e71565b905060008151116114f2576040518060200160405280600081525061151d565b806114fc84611f03565b60405160200161150d9291906131ce565b6040516020818303038152906040525b915050919050565b61152d6118ca565b73ffffffffffffffffffffffffffffffffffffffff1661154b610fcc565b73ffffffffffffffffffffffffffffffffffffffff16146115a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159890613498565b60405180910390fd5b600c548111156115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90613438565b60405180910390fd5b60006115f0610a0f565b905060005b828110156116255761161284828461160d91906136b6565b611df7565b808061161d906138e4565b9150506115f5565b5081600c60008282546116389190613797565b92505081905550505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116e06118ca565b73ffffffffffffffffffffffffffffffffffffffff166116fe610fcc565b73ffffffffffffffffffffffffffffffffffffffff1614611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174b90613498565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bb90613318565b60405180910390fd5b6117cd81611d31565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806118b357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806118c357506118c282612064565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166119b183610cf6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611a02826118d2565b611a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3890613398565b60405180910390fd5b6000611a4c83610cf6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611abb57508373ffffffffffffffffffffffffffffffffffffffff16611aa38461085f565b73ffffffffffffffffffffffffffffffffffffffff16145b80611acc5750611acb8185611644565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611af582610cf6565b73ffffffffffffffffffffffffffffffffffffffff1614611b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b42906134b8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb290613358565b60405180910390fd5b611bc68383836120ce565b611bd160008261193e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c219190613797565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c7891906136b6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611e118282604051806020016040528060008152506121e2565b5050565b611e20848484611ad5565b611e2c8484848461223d565b611e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e62906132f8565b60405180910390fd5b50505050565b6060600b8054611e8090613881565b80601f0160208091040260200160405190810160405280929190818152602001828054611eac90613881565b8015611ef95780601f10611ece57610100808354040283529160200191611ef9565b820191906000526020600020905b815481529060010190602001808311611edc57829003601f168201915b5050505050905090565b60606000821415611f4b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061205f565b600082905060005b60008214611f7d578080611f66906138e4565b915050600a82611f76919061370c565b9150611f53565b60008167ffffffffffffffff811115611f9957611f98613a49565b5b6040519080825280601f01601f191660200182016040528015611fcb5781602001600182028036833780820191505090505b5090505b6000851461205857600182611fe49190613797565b9150600a85611ff3919061392d565b6030611fff91906136b6565b60f81b81838151811061201557612014613a1a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612051919061370c565b9450611fcf565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6120d98383836117e3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561211c57612117816123d4565b61215b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461215a57612159838261241d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561219e576121998161258a565b6121dd565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146121dc576121db828261265b565b5b5b505050565b6121ec83836126da565b6121f9600084848461223d565b612238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222f906132f8565b60405180910390fd5b505050565b600061225e8473ffffffffffffffffffffffffffffffffffffffff166117d0565b156123c7578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122876118ca565b8786866040518563ffffffff1660e01b81526004016122a9949392919061320d565b602060405180830381600087803b1580156122c357600080fd5b505af19250505080156122f457506040513d601f19601f820116820180604052508101906122f19190612cb1565b60015b612377573d8060008114612324576040519150601f19603f3d011682016040523d82523d6000602084013e612329565b606091505b5060008151141561236f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612366906132f8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506123cc565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161242a84610da8565b6124349190613797565b9050600060076000848152602001908152602001600020549050818114612519576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061259e9190613797565b90506000600960008481526020019081526020016000205490506000600883815481106125ce576125cd613a1a565b5b9060005260206000200154905080600883815481106125f0576125ef613a1a565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061263f5761263e6139eb565b5b6001900381819060005260206000200160009055905550505050565b600061266683610da8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561274a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274190613458565b60405180910390fd5b612753816118d2565b15612793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278a90613338565b60405180910390fd5b61279f600083836120ce565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127ef91906136b6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546128b490613881565b90600052602060002090601f0160209004810192826128d6576000855561291d565b82601f106128ef57805160ff191683800117855561291d565b8280016001018555821561291d579182015b8281111561291c578251825591602001919060010190612901565b5b50905061292a919061292e565b5090565b5b8082111561294757600081600090555060010161292f565b5090565b600061295e612959846135d8565b6135b3565b90508281526020810184848401111561297a57612979613a7d565b5b61298584828561383f565b509392505050565b60006129a061299b84613609565b6135b3565b9050828152602081018484840111156129bc576129bb613a7d565b5b6129c784828561383f565b509392505050565b6000813590506129de81614060565b92915050565b6000813590506129f381614077565b92915050565b600081359050612a088161408e565b92915050565b600081519050612a1d8161408e565b92915050565b600082601f830112612a3857612a37613a78565b5b8135612a4884826020860161294b565b91505092915050565b600082601f830112612a6657612a65613a78565b5b8135612a7684826020860161298d565b91505092915050565b600081359050612a8e816140a5565b92915050565b600060208284031215612aaa57612aa9613a87565b5b6000612ab8848285016129cf565b91505092915050565b60008060408385031215612ad857612ad7613a87565b5b6000612ae6858286016129cf565b9250506020612af7858286016129cf565b9150509250929050565b600080600060608486031215612b1a57612b19613a87565b5b6000612b28868287016129cf565b9350506020612b39868287016129cf565b9250506040612b4a86828701612a7f565b9150509250925092565b60008060008060808587031215612b6e57612b6d613a87565b5b6000612b7c878288016129cf565b9450506020612b8d878288016129cf565b9350506040612b9e87828801612a7f565b925050606085013567ffffffffffffffff811115612bbf57612bbe613a82565b5b612bcb87828801612a23565b91505092959194509250565b60008060408385031215612bee57612bed613a87565b5b6000612bfc858286016129cf565b9250506020612c0d858286016129e4565b9150509250929050565b60008060408385031215612c2e57612c2d613a87565b5b6000612c3c858286016129cf565b9250506020612c4d85828601612a7f565b9150509250929050565b600060208284031215612c6d57612c6c613a87565b5b6000612c7b848285016129e4565b91505092915050565b600060208284031215612c9a57612c99613a87565b5b6000612ca8848285016129f9565b91505092915050565b600060208284031215612cc757612cc6613a87565b5b6000612cd584828501612a0e565b91505092915050565b600060208284031215612cf457612cf3613a87565b5b600082013567ffffffffffffffff811115612d1257612d11613a82565b5b612d1e84828501612a51565b91505092915050565b600060208284031215612d3d57612d3c613a87565b5b6000612d4b84828501612a7f565b91505092915050565b6000612d6083836131b0565b60208301905092915050565b612d75816137cb565b82525050565b6000612d868261364a565b612d908185613678565b9350612d9b8361363a565b8060005b83811015612dcc578151612db38882612d54565b9750612dbe8361366b565b925050600181019050612d9f565b5085935050505092915050565b612de2816137dd565b82525050565b6000612df382613655565b612dfd8185613689565b9350612e0d81856020860161384e565b612e1681613a8c565b840191505092915050565b6000612e2c82613660565b612e36818561369a565b9350612e4681856020860161384e565b612e4f81613a8c565b840191505092915050565b6000612e6582613660565b612e6f81856136ab565b9350612e7f81856020860161384e565b80840191505092915050565b6000612e98600b8361369a565b9150612ea382613a9d565b602082019050919050565b6000612ebb602b8361369a565b9150612ec682613ac6565b604082019050919050565b6000612ede60328361369a565b9150612ee982613b15565b604082019050919050565b6000612f0160268361369a565b9150612f0c82613b64565b604082019050919050565b6000612f24601c8361369a565b9150612f2f82613bb3565b602082019050919050565b6000612f4760248361369a565b9150612f5282613bdc565b604082019050919050565b6000612f6a60198361369a565b9150612f7582613c2b565b602082019050919050565b6000612f8d602c8361369a565b9150612f9882613c54565b604082019050919050565b6000612fb0601c8361369a565b9150612fbb82613ca3565b602082019050919050565b6000612fd360388361369a565b9150612fde82613ccc565b604082019050919050565b6000612ff6602a8361369a565b915061300182613d1b565b604082019050919050565b600061301960298361369a565b915061302482613d6a565b604082019050919050565b600061303c60178361369a565b915061304782613db9565b602082019050919050565b600061305f60208361369a565b915061306a82613de2565b602082019050919050565b6000613082602c8361369a565b915061308d82613e0b565b604082019050919050565b60006130a560208361369a565b91506130b082613e5a565b602082019050919050565b60006130c860298361369a565b91506130d382613e83565b604082019050919050565b60006130eb602f8361369a565b91506130f682613ed2565b604082019050919050565b600061310e60218361369a565b915061311982613f21565b604082019050919050565b600061313160168361369a565b915061313c82613f70565b602082019050919050565b600061315460198361369a565b915061315f82613f99565b602082019050919050565b600061317760318361369a565b915061318282613fc2565b604082019050919050565b600061319a602c8361369a565b91506131a582614011565b604082019050919050565b6131b981613835565b82525050565b6131c881613835565b82525050565b60006131da8285612e5a565b91506131e68284612e5a565b91508190509392505050565b60006020820190506132076000830184612d6c565b92915050565b60006080820190506132226000830187612d6c565b61322f6020830186612d6c565b61323c60408301856131bf565b818103606083015261324e8184612de8565b905095945050505050565b600060208201905081810360008301526132738184612d7b565b905092915050565b60006020820190506132906000830184612dd9565b92915050565b600060208201905081810360008301526132b08184612e21565b905092915050565b600060208201905081810360008301526132d181612e8b565b9050919050565b600060208201905081810360008301526132f181612eae565b9050919050565b6000602082019050818103600083015261331181612ed1565b9050919050565b6000602082019050818103600083015261333181612ef4565b9050919050565b6000602082019050818103600083015261335181612f17565b9050919050565b6000602082019050818103600083015261337181612f3a565b9050919050565b6000602082019050818103600083015261339181612f5d565b9050919050565b600060208201905081810360008301526133b181612f80565b9050919050565b600060208201905081810360008301526133d181612fa3565b9050919050565b600060208201905081810360008301526133f181612fc6565b9050919050565b6000602082019050818103600083015261341181612fe9565b9050919050565b600060208201905081810360008301526134318161300c565b9050919050565b600060208201905081810360008301526134518161302f565b9050919050565b6000602082019050818103600083015261347181613052565b9050919050565b6000602082019050818103600083015261349181613075565b9050919050565b600060208201905081810360008301526134b181613098565b9050919050565b600060208201905081810360008301526134d1816130bb565b9050919050565b600060208201905081810360008301526134f1816130de565b9050919050565b6000602082019050818103600083015261351181613101565b9050919050565b6000602082019050818103600083015261353181613124565b9050919050565b6000602082019050818103600083015261355181613147565b9050919050565b600060208201905081810360008301526135718161316a565b9050919050565b600060208201905081810360008301526135918161318d565b9050919050565b60006020820190506135ad60008301846131bf565b92915050565b60006135bd6135ce565b90506135c982826138b3565b919050565b6000604051905090565b600067ffffffffffffffff8211156135f3576135f2613a49565b5b6135fc82613a8c565b9050602081019050919050565b600067ffffffffffffffff82111561362457613623613a49565b5b61362d82613a8c565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006136c182613835565b91506136cc83613835565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137015761370061395e565b5b828201905092915050565b600061371782613835565b915061372283613835565b9250826137325761373161398d565b5b828204905092915050565b600061374882613835565b915061375383613835565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561378c5761378b61395e565b5b828202905092915050565b60006137a282613835565b91506137ad83613835565b9250828210156137c0576137bf61395e565b5b828203905092915050565b60006137d682613815565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561386c578082015181840152602081019050613851565b8381111561387b576000848401525b50505050565b6000600282049050600182168061389957607f821691505b602082108114156138ad576138ac6139bc565b5b50919050565b6138bc82613a8c565b810181811067ffffffffffffffff821117156138db576138da613a49565b5b80604052505050565b60006138ef82613835565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139225761392161395e565b5b600182019050919050565b600061393882613835565b915061394383613835565b9250826139535761395261398d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f53616c6520706175736564000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f596f752063616e206d696e742061206d6178696d756d206f6620323000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4578636565647320726573657276656420737570706c79000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614069816137cb565b811461407457600080fd5b50565b614080816137dd565b811461408b57600080fd5b50565b614097816137e9565b81146140a257600080fd5b50565b6140ae81613835565b81146140b957600080fd5b5056fea26469706673582212204ceea9c98bb76e6e6a32bff03845c22039f1ce1f747ef1942afaf539de22bc1864736f6c63430008060033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001b68747470733a2f2f696e666f2e6e756d692e6f6e652f6e756d692f0000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://info.numi.one/numi/

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000001b
Arg [2] : 68747470733a2f2f696e666f2e6e756d692e6f6e652f6e756d692f0000000000


Deployed Bytecode Sourcemap

41848:2401:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33502:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44017:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20616:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22175:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21698:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42046:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34142:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23065:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33810:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23475:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42871:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34332:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43491:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20310:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20040:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41213:94;;;;;;;;;;;;;:::i;:::-;;44099:147;;;:::i;:::-;;40562:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43268:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20785:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43601:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42340:523;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22468:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23731:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20960:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43690:319;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22834:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41462:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33502:224;33604:4;33643:35;33628:50;;;:11;:50;;;;:90;;;;33682:36;33706:11;33682:23;:36::i;:::-;33628:90;33621:97;;33502:224;;;:::o;44017:74::-;40793:12;:10;:12::i;:::-;40782:23;;:7;:5;:7::i;:::-;:23;;;40774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44080:3:::1;44070:7;;:13;;;;;;;;;;;;;;;;;;44017:74:::0;:::o;20616:100::-;20670:13;20703:5;20696:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20616:100;:::o;22175:221::-;22251:7;22279:16;22287:7;22279;:16::i;:::-;22271:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22364:15;:24;22380:7;22364:24;;;;;;;;;;;;;;;;;;;;;22357:31;;22175:221;;;:::o;21698:411::-;21779:13;21795:23;21810:7;21795:14;:23::i;:::-;21779:39;;21843:5;21837:11;;:2;:11;;;;21829:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;21937:5;21921:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;21946:37;21963:5;21970:12;:10;:12::i;:::-;21946:16;:37::i;:::-;21921:62;21899:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22080:21;22089:2;22093:7;22080:8;:21::i;:::-;21768:341;21698:411;;:::o;42046:26::-;;;;;;;;;;;;;:::o;34142:113::-;34203:7;34230:10;:17;;;;34223:24;;34142:113;:::o;23065:339::-;23260:41;23279:12;:10;:12::i;:::-;23293:7;23260:18;:41::i;:::-;23252:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23368:28;23378:4;23384:2;23388:7;23368:9;:28::i;:::-;23065:339;;;:::o;33810:256::-;33907:7;33943:23;33960:5;33943:16;:23::i;:::-;33935:5;:31;33927:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34032:12;:19;34045:5;34032:19;;;;;;;;;;;;;;;:26;34052:5;34032:26;;;;;;;;;;;;34025:33;;33810:256;;;;:::o;23475:185::-;23613:39;23630:4;23636:2;23640:7;23613:39;;;;;;;;;;;;:16;:39::i;:::-;23475:185;;;:::o;42871:342::-;42930:16;42959:18;42980:17;42990:6;42980:9;:17::i;:::-;42959:38;;43010:25;43052:10;43038:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43010:53;;43078:9;43074:106;43093:10;43089:1;:14;43074:106;;;43138:30;43158:6;43166:1;43138:19;:30::i;:::-;43124:8;43133:1;43124:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;43105:3;;;;;:::i;:::-;;;;43074:106;;;;43197:8;43190:15;;;;42871:342;;;:::o;34332:233::-;34407:7;34443:30;:28;:30::i;:::-;34435:5;:38;34427:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;34540:10;34551:5;34540:17;;;;;;;;:::i;:::-;;;;;;;;;;34533:24;;34332:233;;;:::o;43491:102::-;40793:12;:10;:12::i;:::-;40782:23;;:7;:5;:7::i;:::-;:23;;;40774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43578:7:::1;43562:13;:23;;;;;;;;;;;;:::i;:::-;;43491:102:::0;:::o;20310:239::-;20382:7;20402:13;20418:7;:16;20426:7;20418:16;;;;;;;;;;;;;;;;;;;;;20402:32;;20470:1;20453:19;;:5;:19;;;;20445:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20536:5;20529:12;;;20310:239;;;:::o;20040:208::-;20112:7;20157:1;20140:19;;:5;:19;;;;20132:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20224:9;:16;20234:5;20224:16;;;;;;;;;;;;;;;;20217:23;;20040:208;;;:::o;41213:94::-;40793:12;:10;:12::i;:::-;40782:23;;:7;:5;:7::i;:::-;:23;;;40774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41278:21:::1;41296:1;41278:9;:21::i;:::-;41213:94::o:0;44099:147::-;40793:12;:10;:12::i;:::-;40782:23;;:7;:5;:7::i;:::-;:23;;;40774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44158:13:::1;44174:21;44158:37;;44222:2;;;;;;;;;;;44214:16;;:23;44231:5;44214:23;;;;;;;;;;;;;;;;;;;;;;;44206:32;;;::::0;::::1;;44147:99;44099:147::o:0;40562:87::-;40608:7;40635:6;;;;;;;;;;;40628:13;;40562:87;:::o;43268:93::-;40793:12;:10;:12::i;:::-;40782:23;;:7;:5;:7::i;:::-;:23;;;40774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43344:9:::1;43335:6;:18;;;;43268:93:::0;:::o;20785:104::-;20841:13;20874:7;20867:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20785:104;:::o;43601:81::-;43642:7;43668:6;;43661:13;;43601:81;:::o;42340:523::-;42393:14;42410:13;:11;:13::i;:::-;42393:30;;42444:7;;;;;;;;;;;42443:8;42434:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;42521:2;42515:3;:8;42506:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;42626:9;;42619:4;:16;;;;:::i;:::-;42613:3;42604:6;:12;;;;:::i;:::-;:31;42595:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;42709:3;42700:6;;:12;;;;:::i;:::-;42687:9;:25;;42678:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;42770:9;42766:90;42785:3;42781:1;:7;42766:90;;;42809:35;42820:10;42841:1;42832:6;:10;;;;:::i;:::-;42809:9;:35::i;:::-;42790:3;;;;;:::i;:::-;;;;42766:90;;;;42382:481;42340:523;:::o;22468:295::-;22583:12;:10;:12::i;:::-;22571:24;;:8;:24;;;;22563:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22683:8;22638:18;:32;22657:12;:10;:12::i;:::-;22638:32;;;;;;;;;;;;;;;:42;22671:8;22638:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22736:8;22707:48;;22722:12;:10;:12::i;:::-;22707:48;;;22746:8;22707:48;;;;;;:::i;:::-;;;;;;;;22468:295;;:::o;23731:328::-;23906:41;23925:12;:10;:12::i;:::-;23939:7;23906:18;:41::i;:::-;23898:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24012:39;24026:4;24032:2;24036:7;24045:5;24012:13;:39::i;:::-;23731:328;;;;:::o;20960:334::-;21033:13;21067:16;21075:7;21067;:16::i;:::-;21059:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21148:21;21172:10;:8;:10::i;:::-;21148:34;;21224:1;21206:7;21200:21;:25;:86;;;;;;;;;;;;;;;;;21252:7;21261:18;:7;:16;:18::i;:::-;21235:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21200:86;21193:93;;;20960:334;;;:::o;43690:319::-;40793:12;:10;:12::i;:::-;40782:23;;:7;:5;:7::i;:::-;:23;;;40774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43790:9:::1;;43779:7;:20;;43770:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;43841:14;43858:13;:11;:13::i;:::-;43841:30;;43886:9;43882:87;43901:7;43897:1;:11;43882:87;;;43929:28;43940:3;43954:1;43945:6;:10;;;;:::i;:::-;43929:9;:28::i;:::-;43910:3;;;;;:::i;:::-;;;;43882:87;;;;43994:7;43981:9;;:20;;;;;;;:::i;:::-;;;;;;;;43759:250;43690:319:::0;;:::o;22834:164::-;22931:4;22955:18;:25;22974:5;22955:25;;;;;;;;;;;;;;;:35;22981:8;22955:35;;;;;;;;;;;;;;;;;;;;;;;;;22948:42;;22834:164;;;;:::o;41462:192::-;40793:12;:10;:12::i;:::-;40782:23;;:7;:5;:7::i;:::-;:23;;;40774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41571:1:::1;41551:22;;:8;:22;;;;41543:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41627:19;41637:8;41627:9;:19::i;:::-;41462:192:::0;:::o;7706:387::-;7766:4;7974:12;8041:7;8029:20;8021:28;;8084:1;8077:4;:8;8070:15;;;7706:387;;;:::o;31665:126::-;;;;:::o;19671:305::-;19773:4;19825:25;19810:40;;;:11;:40;;;;:105;;;;19882:33;19867:48;;;:11;:48;;;;19810:105;:158;;;;19932:36;19956:11;19932:23;:36::i;:::-;19810:158;19790:178;;19671:305;;;:::o;15365:98::-;15418:7;15445:10;15438:17;;15365:98;:::o;25569:127::-;25634:4;25686:1;25658:30;;:7;:16;25666:7;25658:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25651:37;;25569:127;;;:::o;29551:174::-;29653:2;29626:15;:24;29642:7;29626:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29709:7;29705:2;29671:46;;29680:23;29695:7;29680:14;:23::i;:::-;29671:46;;;;;;;;;;;;29551:174;;:::o;25863:348::-;25956:4;25981:16;25989:7;25981;:16::i;:::-;25973:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26057:13;26073:23;26088:7;26073:14;:23::i;:::-;26057:39;;26126:5;26115:16;;:7;:16;;;:51;;;;26159:7;26135:31;;:20;26147:7;26135:11;:20::i;:::-;:31;;;26115:51;:87;;;;26170:32;26187:5;26194:7;26170:16;:32::i;:::-;26115:87;26107:96;;;25863:348;;;;:::o;28855:578::-;29014:4;28987:31;;:23;29002:7;28987:14;:23::i;:::-;:31;;;28979:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29097:1;29083:16;;:2;:16;;;;29075:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29153:39;29174:4;29180:2;29184:7;29153:20;:39::i;:::-;29257:29;29274:1;29278:7;29257:8;:29::i;:::-;29318:1;29299:9;:15;29309:4;29299:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29347:1;29330:9;:13;29340:2;29330:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29378:2;29359:7;:16;29367:7;29359:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29417:7;29413:2;29398:27;;29407:4;29398:27;;;;;;;;;;;;28855:578;;;:::o;41662:173::-;41718:16;41737:6;;;;;;;;;;;41718:25;;41763:8;41754:6;;:17;;;;;;;;;;;;;;;;;;41818:8;41787:40;;41808:8;41787:40;;;;;;;;;;;;41707:128;41662:173;:::o;26553:110::-;26629:26;26639:2;26643:7;26629:26;;;;;;;;;;;;:9;:26::i;:::-;26553:110;;:::o;24941:315::-;25098:28;25108:4;25114:2;25118:7;25098:9;:28::i;:::-;25145:48;25168:4;25174:2;25178:7;25187:5;25145:22;:48::i;:::-;25137:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24941:315;;;;:::o;43369:114::-;43429:13;43462;43455:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43369:114;:::o;15809:723::-;15865:13;16095:1;16086:5;:10;16082:53;;;16113:10;;;;;;;;;;;;;;;;;;;;;16082:53;16145:12;16160:5;16145:20;;16176:14;16201:78;16216:1;16208:4;:9;16201:78;;16234:8;;;;;:::i;:::-;;;;16265:2;16257:10;;;;;:::i;:::-;;;16201:78;;;16289:19;16321:6;16311:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16289:39;;16339:154;16355:1;16346:5;:10;16339:154;;16383:1;16373:11;;;;;:::i;:::-;;;16450:2;16442:5;:10;;;;:::i;:::-;16429:2;:24;;;;:::i;:::-;16416:39;;16399:6;16406;16399:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16479:2;16470:11;;;;;:::i;:::-;;;16339:154;;;16517:6;16503:21;;;;;15809:723;;;;:::o;18274:157::-;18359:4;18398:25;18383:40;;;:11;:40;;;;18376:47;;18274:157;;;:::o;35178:589::-;35322:45;35349:4;35355:2;35359:7;35322:26;:45::i;:::-;35400:1;35384:18;;:4;:18;;;35380:187;;;35419:40;35451:7;35419:31;:40::i;:::-;35380:187;;;35489:2;35481:10;;:4;:10;;;35477:90;;35508:47;35541:4;35547:7;35508:32;:47::i;:::-;35477:90;35380:187;35595:1;35581:16;;:2;:16;;;35577:183;;;35614:45;35651:7;35614:36;:45::i;:::-;35577:183;;;35687:4;35681:10;;:2;:10;;;35677:83;;35708:40;35736:2;35740:7;35708:27;:40::i;:::-;35677:83;35577:183;35178:589;;;:::o;26890:321::-;27020:18;27026:2;27030:7;27020:5;:18::i;:::-;27071:54;27102:1;27106:2;27110:7;27119:5;27071:22;:54::i;:::-;27049:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;26890:321;;;:::o;30290:803::-;30445:4;30466:15;:2;:13;;;:15::i;:::-;30462:624;;;30518:2;30502:36;;;30539:12;:10;:12::i;:::-;30553:4;30559:7;30568:5;30502:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30498:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30765:1;30748:6;:13;:18;30744:272;;;30791:60;;;;;;;;;;:::i;:::-;;;;;;;;30744:272;30966:6;30960:13;30951:6;30947:2;30943:15;30936:38;30498:533;30635:45;;;30625:55;;;:6;:55;;;;30618:62;;;;;30462:624;31070:4;31063:11;;30290:803;;;;;;;:::o;36490:164::-;36594:10;:17;;;;36567:15;:24;36583:7;36567:24;;;;;;;;;;;:44;;;;36622:10;36638:7;36622:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36490:164;:::o;37281:988::-;37547:22;37597:1;37572:22;37589:4;37572:16;:22::i;:::-;:26;;;;:::i;:::-;37547:51;;37609:18;37630:17;:26;37648:7;37630:26;;;;;;;;;;;;37609:47;;37777:14;37763:10;:28;37759:328;;37808:19;37830:12;:18;37843:4;37830:18;;;;;;;;;;;;;;;:34;37849:14;37830:34;;;;;;;;;;;;37808:56;;37914:11;37881:12;:18;37894:4;37881:18;;;;;;;;;;;;;;;:30;37900:10;37881:30;;;;;;;;;;;:44;;;;38031:10;37998:17;:30;38016:11;37998:30;;;;;;;;;;;:43;;;;37793:294;37759:328;38183:17;:26;38201:7;38183:26;;;;;;;;;;;38176:33;;;38227:12;:18;38240:4;38227:18;;;;;;;;;;;;;;;:34;38246:14;38227:34;;;;;;;;;;;38220:41;;;37362:907;;37281:988;;:::o;38564:1079::-;38817:22;38862:1;38842:10;:17;;;;:21;;;;:::i;:::-;38817:46;;38874:18;38895:15;:24;38911:7;38895:24;;;;;;;;;;;;38874:45;;39246:19;39268:10;39279:14;39268:26;;;;;;;;:::i;:::-;;;;;;;;;;39246:48;;39332:11;39307:10;39318;39307:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;39443:10;39412:15;:28;39428:11;39412:28;;;;;;;;;;;:41;;;;39584:15;:24;39600:7;39584:24;;;;;;;;;;;39577:31;;;39619:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38635:1008;;;38564:1079;:::o;36068:221::-;36153:14;36170:20;36187:2;36170:16;:20::i;:::-;36153:37;;36228:7;36201:12;:16;36214:2;36201:16;;;;;;;;;;;;;;;:24;36218:6;36201:24;;;;;;;;;;;:34;;;;36275:6;36246:17;:26;36264:7;36246:26;;;;;;;;;;;:35;;;;36142:147;36068:221;;:::o;27547:382::-;27641:1;27627:16;;:2;:16;;;;27619:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27700:16;27708:7;27700;:16::i;:::-;27699:17;27691:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27762:45;27791:1;27795:2;27799:7;27762:20;:45::i;:::-;27837:1;27820:9;:13;27830:2;27820:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27868:2;27849:7;:16;27857:7;27849:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27913:7;27909:2;27888:33;;27905:1;27888:33;;;;;;;;;;;;27547:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::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:2;;;698:79;;:::i;:::-;667:2;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;893:87;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;1035:84;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1176:86;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1330:79;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:2;;1540:79;;:::i;:::-;1499:2;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:2;;1899:79;;:::i;:::-;1858:2;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2184:87;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:2;;;2391:79;;:::i;:::-;2353:2;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2343:263;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:2;;;2743:79;;:::i;:::-;2705:2;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2695:391;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:2;;;3240:79;;:::i;:::-;3202:2;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3192:519;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:2;;;3892:79;;:::i;:::-;3853:2;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:2;;;4476:79;;:::i;:::-;4440:2;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3843:817;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:2;;;4794:79;;:::i;:::-;4756:2;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4746:388;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5271:79;;:::i;:::-;5233:2;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5223:391;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:2;;;5731:79;;:::i;:::-;5693:2;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5683:260;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:2;;;6062:79;;:::i;:::-;6024:2;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;6014:262;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:2;;;6406:79;;:::i;:::-;6368:2;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6358:273;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:2;;;6761:79;;:::i;:::-;6723:2;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:2;;;6961:79;;:::i;:::-;6925:2;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6713:433;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:2;;;7266:79;;:::i;:::-;7228:2;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7218:263;;;;:::o;7487:179::-;7556:10;7577:46;7619:3;7611:6;7577:46;:::i;:::-;7655:4;7650:3;7646:14;7632:28;;7567:99;;;;:::o;7672:118::-;7759:24;7777:5;7759:24;:::i;:::-;7754:3;7747:37;7737:53;;:::o;7826:732::-;7945:3;7974:54;8022:5;7974:54;:::i;:::-;8044:86;8123:6;8118:3;8044:86;:::i;:::-;8037:93;;8154:56;8204:5;8154:56;:::i;:::-;8233:7;8264:1;8249:284;8274:6;8271:1;8268:13;8249:284;;;8350:6;8344:13;8377:63;8436:3;8421:13;8377:63;:::i;:::-;8370:70;;8463:60;8516:6;8463:60;:::i;:::-;8453:70;;8309:224;8296:1;8293;8289:9;8284:14;;8249:284;;;8253:14;8549:3;8542:10;;7950:608;;;;;;;:::o;8564:109::-;8645:21;8660:5;8645:21;:::i;:::-;8640:3;8633:34;8623:50;;:::o;8679:360::-;8765:3;8793:38;8825:5;8793:38;:::i;:::-;8847:70;8910:6;8905:3;8847:70;:::i;:::-;8840:77;;8926:52;8971:6;8966:3;8959:4;8952:5;8948:16;8926:52;:::i;:::-;9003:29;9025:6;9003:29;:::i;:::-;8998:3;8994:39;8987:46;;8769:270;;;;;:::o;9045:364::-;9133:3;9161:39;9194:5;9161:39;:::i;:::-;9216:71;9280:6;9275:3;9216:71;:::i;:::-;9209:78;;9296:52;9341:6;9336:3;9329:4;9322:5;9318:16;9296:52;:::i;:::-;9373:29;9395:6;9373:29;:::i;:::-;9368:3;9364:39;9357:46;;9137:272;;;;;:::o;9415:377::-;9521:3;9549:39;9582:5;9549:39;:::i;:::-;9604:89;9686:6;9681:3;9604:89;:::i;:::-;9597:96;;9702:52;9747:6;9742:3;9735:4;9728:5;9724:16;9702:52;:::i;:::-;9779:6;9774:3;9770:16;9763:23;;9525:267;;;;;:::o;9798:366::-;9940:3;9961:67;10025:2;10020:3;9961:67;:::i;:::-;9954:74;;10037:93;10126:3;10037:93;:::i;:::-;10155:2;10150:3;10146:12;10139:19;;9944:220;;;:::o;10170:366::-;10312:3;10333:67;10397:2;10392:3;10333:67;:::i;:::-;10326:74;;10409:93;10498:3;10409:93;:::i;:::-;10527:2;10522:3;10518:12;10511:19;;10316:220;;;:::o;10542:366::-;10684:3;10705:67;10769:2;10764:3;10705:67;:::i;:::-;10698:74;;10781:93;10870:3;10781:93;:::i;:::-;10899:2;10894:3;10890:12;10883:19;;10688:220;;;:::o;10914:366::-;11056:3;11077:67;11141:2;11136:3;11077:67;:::i;:::-;11070:74;;11153:93;11242:3;11153:93;:::i;:::-;11271:2;11266:3;11262:12;11255:19;;11060:220;;;:::o;11286:366::-;11428:3;11449:67;11513:2;11508:3;11449:67;:::i;:::-;11442:74;;11525:93;11614:3;11525:93;:::i;:::-;11643:2;11638:3;11634:12;11627:19;;11432:220;;;:::o;11658:366::-;11800:3;11821:67;11885:2;11880:3;11821:67;:::i;:::-;11814:74;;11897:93;11986:3;11897:93;:::i;:::-;12015:2;12010:3;12006:12;11999:19;;11804:220;;;:::o;12030:366::-;12172:3;12193:67;12257:2;12252:3;12193:67;:::i;:::-;12186:74;;12269:93;12358:3;12269:93;:::i;:::-;12387:2;12382:3;12378:12;12371:19;;12176:220;;;:::o;12402:366::-;12544:3;12565:67;12629:2;12624:3;12565:67;:::i;:::-;12558:74;;12641:93;12730:3;12641:93;:::i;:::-;12759:2;12754:3;12750:12;12743:19;;12548:220;;;:::o;12774:366::-;12916:3;12937:67;13001:2;12996:3;12937:67;:::i;:::-;12930:74;;13013:93;13102:3;13013:93;:::i;:::-;13131:2;13126:3;13122:12;13115:19;;12920:220;;;:::o;13146:366::-;13288:3;13309:67;13373:2;13368:3;13309:67;:::i;:::-;13302:74;;13385:93;13474:3;13385:93;:::i;:::-;13503:2;13498:3;13494:12;13487:19;;13292:220;;;:::o;13518:366::-;13660:3;13681:67;13745:2;13740:3;13681:67;:::i;:::-;13674:74;;13757:93;13846:3;13757:93;:::i;:::-;13875:2;13870:3;13866:12;13859:19;;13664:220;;;:::o;13890:366::-;14032:3;14053:67;14117:2;14112:3;14053:67;:::i;:::-;14046:74;;14129:93;14218:3;14129:93;:::i;:::-;14247:2;14242:3;14238:12;14231:19;;14036:220;;;:::o;14262:366::-;14404:3;14425:67;14489:2;14484:3;14425:67;:::i;:::-;14418:74;;14501:93;14590:3;14501:93;:::i;:::-;14619:2;14614:3;14610:12;14603:19;;14408:220;;;:::o;14634:366::-;14776:3;14797:67;14861:2;14856:3;14797:67;:::i;:::-;14790:74;;14873:93;14962:3;14873:93;:::i;:::-;14991:2;14986:3;14982:12;14975:19;;14780:220;;;:::o;15006:366::-;15148:3;15169:67;15233:2;15228:3;15169:67;:::i;:::-;15162:74;;15245:93;15334:3;15245:93;:::i;:::-;15363:2;15358:3;15354:12;15347:19;;15152:220;;;:::o;15378:366::-;15520:3;15541:67;15605:2;15600:3;15541:67;:::i;:::-;15534:74;;15617:93;15706:3;15617:93;:::i;:::-;15735:2;15730:3;15726:12;15719:19;;15524:220;;;:::o;15750:366::-;15892:3;15913:67;15977:2;15972:3;15913:67;:::i;:::-;15906:74;;15989:93;16078:3;15989:93;:::i;:::-;16107:2;16102:3;16098:12;16091:19;;15896:220;;;:::o;16122:366::-;16264:3;16285:67;16349:2;16344:3;16285:67;:::i;:::-;16278:74;;16361:93;16450:3;16361:93;:::i;:::-;16479:2;16474:3;16470:12;16463:19;;16268:220;;;:::o;16494:366::-;16636:3;16657:67;16721:2;16716:3;16657:67;:::i;:::-;16650:74;;16733:93;16822:3;16733:93;:::i;:::-;16851:2;16846:3;16842:12;16835:19;;16640:220;;;:::o;16866:366::-;17008:3;17029:67;17093:2;17088:3;17029:67;:::i;:::-;17022:74;;17105:93;17194:3;17105:93;:::i;:::-;17223:2;17218:3;17214:12;17207:19;;17012:220;;;:::o;17238:366::-;17380:3;17401:67;17465:2;17460:3;17401:67;:::i;:::-;17394:74;;17477:93;17566:3;17477:93;:::i;:::-;17595:2;17590:3;17586:12;17579:19;;17384:220;;;:::o;17610:366::-;17752:3;17773:67;17837:2;17832:3;17773:67;:::i;:::-;17766:74;;17849:93;17938:3;17849:93;:::i;:::-;17967:2;17962:3;17958:12;17951:19;;17756:220;;;:::o;17982:366::-;18124:3;18145:67;18209:2;18204:3;18145:67;:::i;:::-;18138:74;;18221:93;18310:3;18221:93;:::i;:::-;18339:2;18334:3;18330:12;18323:19;;18128:220;;;:::o;18354:108::-;18431:24;18449:5;18431:24;:::i;:::-;18426:3;18419:37;18409:53;;:::o;18468:118::-;18555:24;18573:5;18555:24;:::i;:::-;18550:3;18543:37;18533:53;;:::o;18592:435::-;18772:3;18794:95;18885:3;18876:6;18794:95;:::i;:::-;18787:102;;18906:95;18997:3;18988:6;18906:95;:::i;:::-;18899:102;;19018:3;19011:10;;18776:251;;;;;:::o;19033:222::-;19126:4;19164:2;19153:9;19149:18;19141:26;;19177:71;19245:1;19234:9;19230:17;19221:6;19177:71;:::i;:::-;19131:124;;;;:::o;19261:640::-;19456:4;19494:3;19483:9;19479:19;19471:27;;19508:71;19576:1;19565:9;19561:17;19552:6;19508:71;:::i;:::-;19589:72;19657:2;19646:9;19642:18;19633:6;19589:72;:::i;:::-;19671;19739:2;19728:9;19724:18;19715:6;19671:72;:::i;:::-;19790:9;19784:4;19780:20;19775:2;19764:9;19760:18;19753:48;19818:76;19889:4;19880:6;19818:76;:::i;:::-;19810:84;;19461:440;;;;;;;:::o;19907:373::-;20050:4;20088:2;20077:9;20073:18;20065:26;;20137:9;20131:4;20127:20;20123:1;20112:9;20108:17;20101:47;20165:108;20268:4;20259:6;20165:108;:::i;:::-;20157:116;;20055:225;;;;:::o;20286:210::-;20373:4;20411:2;20400:9;20396:18;20388:26;;20424:65;20486:1;20475:9;20471:17;20462:6;20424:65;:::i;:::-;20378:118;;;;:::o;20502:313::-;20615:4;20653:2;20642:9;20638:18;20630:26;;20702:9;20696:4;20692:20;20688:1;20677:9;20673:17;20666:47;20730:78;20803:4;20794:6;20730:78;:::i;:::-;20722:86;;20620:195;;;;:::o;20821:419::-;20987:4;21025:2;21014:9;21010:18;21002:26;;21074:9;21068:4;21064:20;21060:1;21049:9;21045:17;21038:47;21102:131;21228:4;21102:131;:::i;:::-;21094:139;;20992:248;;;:::o;21246:419::-;21412:4;21450:2;21439:9;21435:18;21427:26;;21499:9;21493:4;21489:20;21485:1;21474:9;21470:17;21463:47;21527:131;21653:4;21527:131;:::i;:::-;21519:139;;21417:248;;;:::o;21671:419::-;21837:4;21875:2;21864:9;21860:18;21852:26;;21924:9;21918:4;21914:20;21910:1;21899:9;21895:17;21888:47;21952:131;22078:4;21952:131;:::i;:::-;21944:139;;21842:248;;;:::o;22096:419::-;22262:4;22300:2;22289:9;22285:18;22277:26;;22349:9;22343:4;22339:20;22335:1;22324:9;22320:17;22313:47;22377:131;22503:4;22377:131;:::i;:::-;22369:139;;22267:248;;;:::o;22521:419::-;22687:4;22725:2;22714:9;22710:18;22702:26;;22774:9;22768:4;22764:20;22760:1;22749:9;22745:17;22738:47;22802:131;22928:4;22802:131;:::i;:::-;22794:139;;22692:248;;;:::o;22946:419::-;23112:4;23150:2;23139:9;23135:18;23127:26;;23199:9;23193:4;23189:20;23185:1;23174:9;23170:17;23163:47;23227:131;23353:4;23227:131;:::i;:::-;23219:139;;23117:248;;;:::o;23371:419::-;23537:4;23575:2;23564:9;23560:18;23552:26;;23624:9;23618:4;23614:20;23610:1;23599:9;23595:17;23588:47;23652:131;23778:4;23652:131;:::i;:::-;23644:139;;23542:248;;;:::o;23796:419::-;23962:4;24000:2;23989:9;23985:18;23977:26;;24049:9;24043:4;24039:20;24035:1;24024:9;24020:17;24013:47;24077:131;24203:4;24077:131;:::i;:::-;24069:139;;23967:248;;;:::o;24221:419::-;24387:4;24425:2;24414:9;24410:18;24402:26;;24474:9;24468:4;24464:20;24460:1;24449:9;24445:17;24438:47;24502:131;24628:4;24502:131;:::i;:::-;24494:139;;24392:248;;;:::o;24646:419::-;24812:4;24850:2;24839:9;24835:18;24827:26;;24899:9;24893:4;24889:20;24885:1;24874:9;24870:17;24863:47;24927:131;25053:4;24927:131;:::i;:::-;24919:139;;24817:248;;;:::o;25071:419::-;25237:4;25275:2;25264:9;25260:18;25252:26;;25324:9;25318:4;25314:20;25310:1;25299:9;25295:17;25288:47;25352:131;25478:4;25352:131;:::i;:::-;25344:139;;25242:248;;;:::o;25496:419::-;25662:4;25700:2;25689:9;25685:18;25677:26;;25749:9;25743:4;25739:20;25735:1;25724:9;25720:17;25713:47;25777:131;25903:4;25777:131;:::i;:::-;25769:139;;25667:248;;;:::o;25921:419::-;26087:4;26125:2;26114:9;26110:18;26102:26;;26174:9;26168:4;26164:20;26160:1;26149:9;26145:17;26138:47;26202:131;26328:4;26202:131;:::i;:::-;26194:139;;26092:248;;;:::o;26346:419::-;26512:4;26550:2;26539:9;26535:18;26527:26;;26599:9;26593:4;26589:20;26585:1;26574:9;26570:17;26563:47;26627:131;26753:4;26627:131;:::i;:::-;26619:139;;26517:248;;;:::o;26771:419::-;26937:4;26975:2;26964:9;26960:18;26952:26;;27024:9;27018:4;27014:20;27010:1;26999:9;26995:17;26988:47;27052:131;27178:4;27052:131;:::i;:::-;27044:139;;26942:248;;;:::o;27196:419::-;27362:4;27400:2;27389:9;27385:18;27377:26;;27449:9;27443:4;27439:20;27435:1;27424:9;27420:17;27413:47;27477:131;27603:4;27477:131;:::i;:::-;27469:139;;27367:248;;;:::o;27621:419::-;27787:4;27825:2;27814:9;27810:18;27802:26;;27874:9;27868:4;27864:20;27860:1;27849:9;27845:17;27838:47;27902:131;28028:4;27902:131;:::i;:::-;27894:139;;27792:248;;;:::o;28046:419::-;28212:4;28250:2;28239:9;28235:18;28227:26;;28299:9;28293:4;28289:20;28285:1;28274:9;28270:17;28263:47;28327:131;28453:4;28327:131;:::i;:::-;28319:139;;28217:248;;;:::o;28471:419::-;28637:4;28675:2;28664:9;28660:18;28652:26;;28724:9;28718:4;28714:20;28710:1;28699:9;28695:17;28688:47;28752:131;28878:4;28752:131;:::i;:::-;28744:139;;28642:248;;;:::o;28896:419::-;29062:4;29100:2;29089:9;29085:18;29077:26;;29149:9;29143:4;29139:20;29135:1;29124:9;29120:17;29113:47;29177:131;29303:4;29177:131;:::i;:::-;29169:139;;29067:248;;;:::o;29321:419::-;29487:4;29525:2;29514:9;29510:18;29502:26;;29574:9;29568:4;29564:20;29560:1;29549:9;29545:17;29538:47;29602:131;29728:4;29602:131;:::i;:::-;29594:139;;29492:248;;;:::o;29746:419::-;29912:4;29950:2;29939:9;29935:18;29927:26;;29999:9;29993:4;29989:20;29985:1;29974:9;29970:17;29963:47;30027:131;30153:4;30027:131;:::i;:::-;30019:139;;29917:248;;;:::o;30171:419::-;30337:4;30375:2;30364:9;30360:18;30352:26;;30424:9;30418:4;30414:20;30410:1;30399:9;30395:17;30388:47;30452:131;30578:4;30452:131;:::i;:::-;30444:139;;30342:248;;;:::o;30596:222::-;30689:4;30727:2;30716:9;30712:18;30704:26;;30740:71;30808:1;30797:9;30793:17;30784:6;30740:71;:::i;:::-;30694:124;;;;:::o;30824:129::-;30858:6;30885:20;;:::i;:::-;30875:30;;30914:33;30942:4;30934:6;30914:33;:::i;:::-;30865:88;;;:::o;30959:75::-;30992:6;31025:2;31019:9;31009:19;;30999:35;:::o;31040:307::-;31101:4;31191:18;31183:6;31180:30;31177:2;;;31213:18;;:::i;:::-;31177:2;31251:29;31273:6;31251:29;:::i;:::-;31243:37;;31335:4;31329;31325:15;31317:23;;31106:241;;;:::o;31353:308::-;31415:4;31505:18;31497:6;31494:30;31491:2;;;31527:18;;:::i;:::-;31491:2;31565:29;31587:6;31565:29;:::i;:::-;31557:37;;31649:4;31643;31639:15;31631:23;;31420:241;;;:::o;31667:132::-;31734:4;31757:3;31749:11;;31787:4;31782:3;31778:14;31770:22;;31739:60;;;:::o;31805:114::-;31872:6;31906:5;31900:12;31890:22;;31879:40;;;:::o;31925:98::-;31976:6;32010:5;32004:12;31994:22;;31983:40;;;:::o;32029:99::-;32081:6;32115:5;32109:12;32099:22;;32088:40;;;:::o;32134:113::-;32204:4;32236;32231:3;32227:14;32219:22;;32209:38;;;:::o;32253:184::-;32352:11;32386:6;32381:3;32374:19;32426:4;32421:3;32417:14;32402:29;;32364:73;;;;:::o;32443:168::-;32526:11;32560:6;32555:3;32548:19;32600:4;32595:3;32591:14;32576:29;;32538:73;;;;:::o;32617:169::-;32701:11;32735:6;32730:3;32723:19;32775:4;32770:3;32766:14;32751:29;;32713:73;;;;:::o;32792:148::-;32894:11;32931:3;32916:18;;32906:34;;;;:::o;32946:305::-;32986:3;33005:20;33023:1;33005:20;:::i;:::-;33000:25;;33039:20;33057:1;33039:20;:::i;:::-;33034:25;;33193:1;33125:66;33121:74;33118:1;33115:81;33112:2;;;33199:18;;:::i;:::-;33112:2;33243:1;33240;33236:9;33229:16;;32990:261;;;;:::o;33257:185::-;33297:1;33314:20;33332:1;33314:20;:::i;:::-;33309:25;;33348:20;33366:1;33348:20;:::i;:::-;33343:25;;33387:1;33377:2;;33392:18;;:::i;:::-;33377:2;33434:1;33431;33427:9;33422:14;;33299:143;;;;:::o;33448:348::-;33488:7;33511:20;33529:1;33511:20;:::i;:::-;33506:25;;33545:20;33563:1;33545:20;:::i;:::-;33540:25;;33733:1;33665:66;33661:74;33658:1;33655:81;33650:1;33643:9;33636:17;33632:105;33629:2;;;33740:18;;:::i;:::-;33629:2;33788:1;33785;33781:9;33770:20;;33496:300;;;;:::o;33802:191::-;33842:4;33862:20;33880:1;33862:20;:::i;:::-;33857:25;;33896:20;33914:1;33896:20;:::i;:::-;33891:25;;33935:1;33932;33929:8;33926:2;;;33940:18;;:::i;:::-;33926:2;33985:1;33982;33978:9;33970:17;;33847:146;;;;:::o;33999:96::-;34036:7;34065:24;34083:5;34065:24;:::i;:::-;34054:35;;34044:51;;;:::o;34101:90::-;34135:7;34178:5;34171:13;34164:21;34153:32;;34143:48;;;:::o;34197:149::-;34233:7;34273:66;34266:5;34262:78;34251:89;;34241:105;;;:::o;34352:126::-;34389:7;34429:42;34422:5;34418:54;34407:65;;34397:81;;;:::o;34484:77::-;34521:7;34550:5;34539:16;;34529:32;;;:::o;34567:154::-;34651:6;34646:3;34641;34628:30;34713:1;34704:6;34699:3;34695:16;34688:27;34618:103;;;:::o;34727:307::-;34795:1;34805:113;34819:6;34816:1;34813:13;34805:113;;;34904:1;34899:3;34895:11;34889:18;34885:1;34880:3;34876:11;34869:39;34841:2;34838:1;34834:10;34829:15;;34805:113;;;34936:6;34933:1;34930:13;34927:2;;;35016:1;35007:6;35002:3;34998:16;34991:27;34927:2;34776:258;;;;:::o;35040:320::-;35084:6;35121:1;35115:4;35111:12;35101:22;;35168:1;35162:4;35158:12;35189:18;35179:2;;35245:4;35237:6;35233:17;35223:27;;35179:2;35307;35299:6;35296:14;35276:18;35273:38;35270:2;;;35326:18;;:::i;:::-;35270:2;35091:269;;;;:::o;35366:281::-;35449:27;35471:4;35449:27;:::i;:::-;35441:6;35437:40;35579:6;35567:10;35564:22;35543:18;35531:10;35528:34;35525:62;35522:2;;;35590:18;;:::i;:::-;35522:2;35630:10;35626:2;35619:22;35409:238;;;:::o;35653:233::-;35692:3;35715:24;35733:5;35715:24;:::i;:::-;35706:33;;35761:66;35754:5;35751:77;35748:2;;;35831:18;;:::i;:::-;35748:2;35878:1;35871:5;35867:13;35860:20;;35696:190;;;:::o;35892:176::-;35924:1;35941:20;35959:1;35941:20;:::i;:::-;35936:25;;35975:20;35993:1;35975:20;:::i;:::-;35970:25;;36014:1;36004:2;;36019:18;;:::i;:::-;36004:2;36060:1;36057;36053:9;36048:14;;35926:142;;;;:::o;36074:180::-;36122:77;36119:1;36112:88;36219:4;36216:1;36209:15;36243:4;36240:1;36233:15;36260:180;36308:77;36305:1;36298:88;36405:4;36402:1;36395:15;36429:4;36426:1;36419:15;36446:180;36494:77;36491:1;36484:88;36591:4;36588:1;36581:15;36615:4;36612:1;36605:15;36632:180;36680:77;36677:1;36670:88;36777:4;36774:1;36767:15;36801:4;36798:1;36791:15;36818:180;36866:77;36863:1;36856:88;36963:4;36960:1;36953:15;36987:4;36984:1;36977:15;37004:180;37052:77;37049:1;37042:88;37149:4;37146:1;37139:15;37173:4;37170:1;37163:15;37190:117;37299:1;37296;37289:12;37313:117;37422:1;37419;37412:12;37436:117;37545:1;37542;37535:12;37559:117;37668:1;37665;37658:12;37682:102;37723:6;37774:2;37770:7;37765:2;37758:5;37754:14;37750:28;37740:38;;37730:54;;;:::o;37790:161::-;37930:13;37926:1;37918:6;37914:14;37907:37;37896:55;:::o;37957:230::-;38097:34;38093:1;38085:6;38081:14;38074:58;38166:13;38161:2;38153:6;38149:15;38142:38;38063:124;:::o;38193:237::-;38333:34;38329:1;38321:6;38317:14;38310:58;38402:20;38397:2;38389:6;38385:15;38378:45;38299:131;:::o;38436:225::-;38576:34;38572:1;38564:6;38560:14;38553:58;38645:8;38640:2;38632:6;38628:15;38621:33;38542:119;:::o;38667:178::-;38807:30;38803:1;38795:6;38791:14;38784:54;38773:72;:::o;38851:223::-;38991:34;38987:1;38979:6;38975:14;38968:58;39060:6;39055:2;39047:6;39043:15;39036:31;38957:117;:::o;39080:175::-;39220:27;39216:1;39208:6;39204:14;39197:51;39186:69;:::o;39261:231::-;39401:34;39397:1;39389:6;39385:14;39378:58;39470:14;39465:2;39457:6;39453:15;39446:39;39367:125;:::o;39498:178::-;39638:30;39634:1;39626:6;39622:14;39615:54;39604:72;:::o;39682:243::-;39822:34;39818:1;39810:6;39806:14;39799:58;39891:26;39886:2;39878:6;39874:15;39867:51;39788:137;:::o;39931:229::-;40071:34;40067:1;40059:6;40055:14;40048:58;40140:12;40135:2;40127:6;40123:15;40116:37;40037:123;:::o;40166:228::-;40306:34;40302:1;40294:6;40290:14;40283:58;40375:11;40370:2;40362:6;40358:15;40351:36;40272:122;:::o;40400:173::-;40540:25;40536:1;40528:6;40524:14;40517:49;40506:67;:::o;40579:182::-;40719:34;40715:1;40707:6;40703:14;40696:58;40685:76;:::o;40767:231::-;40907:34;40903:1;40895:6;40891:14;40884:58;40976:14;40971:2;40963:6;40959:15;40952:39;40873:125;:::o;41004:182::-;41144:34;41140:1;41132:6;41128:14;41121:58;41110:76;:::o;41192:228::-;41332:34;41328:1;41320:6;41316:14;41309:58;41401:11;41396:2;41388:6;41384:15;41377:36;41298:122;:::o;41426:234::-;41566:34;41562:1;41554:6;41550:14;41543:58;41635:17;41630:2;41622:6;41618:15;41611:42;41532:128;:::o;41666:220::-;41806:34;41802:1;41794:6;41790:14;41783:58;41875:3;41870:2;41862:6;41858:15;41851:28;41772:114;:::o;41892:172::-;42032:24;42028:1;42020:6;42016:14;42009:48;41998:66;:::o;42070:175::-;42210:27;42206:1;42198:6;42194:14;42187:51;42176:69;:::o;42251:236::-;42391:34;42387:1;42379:6;42375:14;42368:58;42460:19;42455:2;42447:6;42443:15;42436:44;42357:130;:::o;42493:231::-;42633:34;42629:1;42621:6;42617:14;42610:58;42702:14;42697:2;42689:6;42685:15;42678:39;42599:125;:::o;42730:122::-;42803:24;42821:5;42803:24;:::i;:::-;42796:5;42793:35;42783:2;;42842:1;42839;42832:12;42783:2;42773:79;:::o;42858:116::-;42928:21;42943:5;42928:21;:::i;:::-;42921:5;42918:32;42908:2;;42964:1;42961;42954:12;42908:2;42898:76;:::o;42980:120::-;43052:23;43069:5;43052:23;:::i;:::-;43045:5;43042:34;43032:2;;43090:1;43087;43080:12;43032:2;43022:78;:::o;43106:122::-;43179:24;43197:5;43179:24;:::i;:::-;43172:5;43169:35;43159:2;;43218:1;43215;43208:12;43159:2;43149:79;:::o

Swarm Source

ipfs://4ceea9c98bb76e6e6a32bff03845c22039f1ce1f747ef1942afaf539de22bc18
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.