ETH Price: $3,239.70 (-1.06%)
Gas: 4 Gwei

Token

CryptoNeko (CryptoNeko)
 

Overview

Max Total Supply

80 CryptoNeko

Holders

30

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
0xvitor.eth
Balance
4 CryptoNeko
0xdE8131EaCa958a713f94E5EEEBF13edf79a34955
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:
CryptoNeko

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-05-06
*/

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {

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

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

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

// File: node_modules\@openzeppelin\contracts\token\ERC721\extensions\IERC721Enumerable.sol



pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

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

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

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



pragma solidity ^0.8.0;

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

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

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

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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



pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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



pragma solidity ^0.8.0;

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

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

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

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

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

}

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



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;









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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
     * in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

        require(_msgSender() == owner || ERC721.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 || ERC721.isApprovedForAll(owner, spender));
    }

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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



pragma solidity ^0.8.0;

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

// File: contracts\CryptoNeko.sol

// SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.0;



contract CryptoNeko is ERC721, Ownable  {
    using Strings for uint256;

    bool public hasSaleStarted = false;
    string public METADATA_PROVENANCE_HASH = "";
    uint256 public MAX_NEKO_CAT = 64;
    uint256 public MAX_TOTAL_NEKO_CAT = 128;
    uint256 internal numTokens = 0;

    // Base URI
    string private _baseTokenURI;

   constructor() ERC721("CryptoNeko", "CryptoNeko") {
        _baseTokenURI ="https://cryptoneko.net/api/";
        
        
    }
    
    function tokensOfOwner(address catowner) external view returns(uint256[] memory ) {
        uint256 tokenCount = balanceOf(catowner);
        if (tokenCount == 0) {
            // Return an empty array
            return new uint256[](0);
        } else {
            uint256[] memory result = new uint256[](tokenCount);
            uint256 index;
            index = 0;
            uint256 tokenId;
            for (tokenId = 1; tokenId <= numTokens; tokenId++) {
                if(ownerOf(tokenId) == catowner){
                    result[index] = tokenId; 
                }
                index++;
            }
            return result;
        }
    }
    
    function totalSupply() public view returns (uint256) {
    return numTokens;
    }

    // set the price
    function calculatePrice() internal view returns (uint256) {
        uint256 price;
        if (numTokens < 16) {
        price = 20000000000000000; //0.02
        } else if (numTokens >= 16 && numTokens < 32) {
        price = 40000000000000000; //0.04
        } else if (numTokens >= 32 && numTokens < 48) {
        price = 60000000000000000; //0.06
        } else if (numTokens >= 48 && numTokens < 64) {
        price = 80000000000000000; //0.08
        } else {
        price = 1000000000000000000; //0.1
    }
    return price;
    }
    
    // mint cat
    function createCat() public payable returns(uint256) {        
        require(hasSaleStarted == true, "Sale hasn't started");
        require(numTokens < MAX_NEKO_CAT,"ERC721: maximum number of tokens already minted");
        require(msg.value >= calculatePrice(), "ERC721: insufficient ether");
        uint256 id = numTokens + 1;
        _safeMint(msg.sender, id);
        numTokens = numTokens + 1;    

        return id;
    }
    
    // set our base URI
    function baseURI() public view returns (string memory) {
        return _baseURI();
    }

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

    // ONLYOWNER FUNCTIONS
    
    function setProvenanceHash(string memory _hash) public onlyOwner {
        METADATA_PROVENANCE_HASH = _hash;
    }
    
    function setBaseURI(string memory _setBaseURI) public onlyOwner {
        _baseTokenURI = _setBaseURI;
    }
    
    function startDrop() public onlyOwner {
        hasSaleStarted = true;
    }
    function pauseDrop() public onlyOwner {
        hasSaleStarted = false;
    }

    function withdrawAll() public payable onlyOwner {
        require(payable(msg.sender).send(address(this).balance));
    }

    function createRewardCat() public onlyOwner returns(uint256) {        
        require(numTokens < MAX_TOTAL_NEKO_CAT,"ERC721: maximum number of tokens already minted");
        uint256 id = numTokens + 1;
        _safeMint(msg.sender, id);
        numTokens = numTokens + 1;    
        
        return id;
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_NEKO_CAT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOTAL_NEKO_CAT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"METADATA_PROVENANCE_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createCat","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"createRewardCat","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseDrop","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":"_setBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"catowner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526000600660146101000a81548160ff02191690831515021790555060405180602001604052806000815250600790805190602001906200004692919062000211565b50604060085560806009556000600a553480156200006357600080fd5b506040518060400160405280600a81526020017f43727970746f4e656b6f000000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f43727970746f4e656b6f000000000000000000000000000000000000000000008152508160009080519060200190620000e892919062000211565b5080600190805190602001906200010192919062000211565b5050506000620001166200020960201b60201c565b905080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040518060400160405280601b81526020017f68747470733a2f2f63727970746f6e656b6f2e6e65742f6170692f0000000000815250600b90805190602001906200020292919062000211565b5062000326565b600033905090565b8280546200021f90620002c1565b90600052602060002090601f0160209004810192826200024357600085556200028f565b82601f106200025e57805160ff19168380011785556200028f565b828001600101855582156200028f579182015b828111156200028e57825182559160200191906001019062000271565b5b5090506200029e9190620002a2565b5090565b5b80821115620002bd576000816000905550600101620002a3565b5090565b60006002820490506001821680620002da57607f821691505b60208210811415620002f157620002f0620002f7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613aa280620003366000396000f3fe6080604052600436106101cd5760003560e01c80636352211e116100f757806395d89b4111610095578063e985e9c511610064578063e985e9c514610631578063ee1b0edf1461066e578063f0c9dc601461068c578063f2fde38b146106b7576101cd565b806395d89b4114610577578063a22cb465146105a2578063b88d4fde146105cb578063c87b56dd146105f4576101cd565b8063715018a6116100d1578063715018a6146104ee5780638462151c14610505578063853828b6146105425780638da5cb5b1461054c576101cd565b80636352211e146104495780636c0360eb1461048657806370a08231146104b1576101cd565b80631c8b232d1161016f57806334d84c7b1161013e57806334d84c7b146103b5578063395baad7146103cc57806342842e0e146103f757806355f804b314610420576101cd565b80631c8b232d1461031f5780631e0f6bf91461034a57806323b872dd146103755780632808c92c1461039e576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806310969523146102a057806318160ddd146102c95780631c4a485a146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f491906129f5565b6106e0565b6040516102069190613361565b60405180910390f35b34801561021b57600080fd5b506102246107c2565b604051610231919061337c565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190612a88565b610854565b60405161026e91906132d8565b60405180910390f35b34801561028357600080fd5b5061029e600480360381019061029991906129b9565b6108d9565b005b3480156102ac57600080fd5b506102c760048036038101906102c29190612a47565b6109f1565b005b3480156102d557600080fd5b506102de610a87565b6040516102eb91906135fe565b60405180910390f35b34801561030057600080fd5b50610309610a91565b60405161031691906135fe565b60405180910390f35b34801561032b57600080fd5b50610334610b8e565b6040516103419190613361565b60405180910390f35b34801561035657600080fd5b5061035f610ba1565b60405161036c91906135fe565b60405180910390f35b34801561038157600080fd5b5061039c600480360381019061039791906128b3565b610ba7565b005b3480156103aa57600080fd5b506103b3610c07565b005b3480156103c157600080fd5b506103ca610ca0565b005b3480156103d857600080fd5b506103e1610d39565b6040516103ee91906135fe565b60405180910390f35b34801561040357600080fd5b5061041e600480360381019061041991906128b3565b610d3f565b005b34801561042c57600080fd5b5061044760048036038101906104429190612a47565b610d5f565b005b34801561045557600080fd5b50610470600480360381019061046b9190612a88565b610df5565b60405161047d91906132d8565b60405180910390f35b34801561049257600080fd5b5061049b610ea7565b6040516104a8919061337c565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d3919061284e565b610eb6565b6040516104e591906135fe565b60405180910390f35b3480156104fa57600080fd5b50610503610f6e565b005b34801561051157600080fd5b5061052c6004803603810190610527919061284e565b6110ab565b604051610539919061333f565b60405180910390f35b61054a611270565b005b34801561055857600080fd5b5061056161132c565b60405161056e91906132d8565b60405180910390f35b34801561058357600080fd5b5061058c611356565b604051610599919061337c565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c4919061297d565b6113e8565b005b3480156105d757600080fd5b506105f260048036038101906105ed9190612902565b611569565b005b34801561060057600080fd5b5061061b60048036038101906106169190612a88565b6115cb565b604051610628919061337c565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190612877565b611672565b6040516106659190613361565b60405180910390f35b610676611706565b60405161068391906135fe565b60405180910390f35b34801561069857600080fd5b506106a1611827565b6040516106ae919061337c565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d9919061284e565b6118b5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ab57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107bb57506107ba82611a61565b5b9050919050565b6060600080546107d190613897565b80601f01602080910402602001604051908101604052809291908181526020018280546107fd90613897565b801561084a5780601f1061081f5761010080835404028352916020019161084a565b820191906000526020600020905b81548152906001019060200180831161082d57829003601f168201915b5050505050905090565b600061085f82611acb565b61089e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610895906134de565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108e482610df5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094c9061355e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610974611b37565b73ffffffffffffffffffffffffffffffffffffffff1614806109a357506109a28161099d611b37565b611672565b5b6109e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d99061345e565b60405180910390fd5b6109ec8383611b3f565b505050565b6109f9611b37565b73ffffffffffffffffffffffffffffffffffffffff16610a1761132c565b73ffffffffffffffffffffffffffffffffffffffff1614610a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a64906134fe565b60405180910390fd5b8060079080519060200190610a83929190612672565b5050565b6000600a54905090565b6000610a9b611b37565b73ffffffffffffffffffffffffffffffffffffffff16610ab961132c565b73ffffffffffffffffffffffffffffffffffffffff1614610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b06906134fe565b60405180910390fd5b600954600a5410610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c906135de565b60405180910390fd5b60006001600a54610b669190613726565b9050610b723382611bf8565b6001600a54610b819190613726565b600a819055508091505090565b600660149054906101000a900460ff1681565b60095481565b610bb8610bb2611b37565b82611c16565b610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee9061357e565b60405180910390fd5b610c02838383611cf4565b505050565b610c0f611b37565b73ffffffffffffffffffffffffffffffffffffffff16610c2d61132c565b73ffffffffffffffffffffffffffffffffffffffff1614610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a906134fe565b60405180910390fd5b6000600660146101000a81548160ff021916908315150217905550565b610ca8611b37565b73ffffffffffffffffffffffffffffffffffffffff16610cc661132c565b73ffffffffffffffffffffffffffffffffffffffff1614610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d13906134fe565b60405180910390fd5b6001600660146101000a81548160ff021916908315150217905550565b60085481565b610d5a83838360405180602001604052806000815250611569565b505050565b610d67611b37565b73ffffffffffffffffffffffffffffffffffffffff16610d8561132c565b73ffffffffffffffffffffffffffffffffffffffff1614610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd2906134fe565b60405180910390fd5b80600b9080519060200190610df1929190612672565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e959061349e565b60405180910390fd5b80915050919050565b6060610eb1611f50565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e9061347e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f76611b37565b73ffffffffffffffffffffffffffffffffffffffff16610f9461132c565b73ffffffffffffffffffffffffffffffffffffffff1614610fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe1906134fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060006110b883610eb6565b9050600081141561113b57600067ffffffffffffffff811115611104577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111325781602001602082028036833780820191505090505b5091505061126b565b60008167ffffffffffffffff81111561117d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111ab5781602001602082028036833780820191505090505b509050600080600190505b600a548111611263578573ffffffffffffffffffffffffffffffffffffffff166111df82610df5565b73ffffffffffffffffffffffffffffffffffffffff1614156112425780838381518110611235577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250505b818061124d906138c9565b925050808061125b906138c9565b9150506111b6565b829450505050505b919050565b611278611b37565b73ffffffffffffffffffffffffffffffffffffffff1661129661132c565b73ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e3906134fe565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061132a57600080fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461136590613897565b80601f016020809104026020016040519081016040528092919081815260200182805461139190613897565b80156113de5780601f106113b3576101008083540402835291602001916113de565b820191906000526020600020905b8154815290600101906020018083116113c157829003601f168201915b5050505050905090565b6113f0611b37565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561145e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114559061341e565b60405180910390fd5b806005600061146b611b37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611518611b37565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161155d9190613361565b60405180910390a35050565b61157a611574611b37565b83611c16565b6115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b09061357e565b60405180910390fd5b6115c584848484611fe2565b50505050565b60606115d682611acb565b611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c9061353e565b60405180910390fd5b600061161f611f50565b9050600081511161163f576040518060200160405280600081525061166a565b806116498461203e565b60405160200161165a9291906132b4565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600060011515600660149054906101000a900460ff1615151461175e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611755906135be565b60405180910390fd5b600854600a54106117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b906135de565b60405180910390fd5b6117ac6121eb565b3410156117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e59061359e565b60405180910390fd5b60006001600a546117ff9190613726565b905061180b3382611bf8565b6001600a5461181a9190613726565b600a819055508091505090565b6007805461183490613897565b80601f016020809104026020016040519081016040528092919081815260200182805461186090613897565b80156118ad5780601f10611882576101008083540402835291602001916118ad565b820191906000526020600020905b81548152906001019060200180831161189057829003601f168201915b505050505081565b6118bd611b37565b73ffffffffffffffffffffffffffffffffffffffff166118db61132c565b73ffffffffffffffffffffffffffffffffffffffff1614611931576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611928906134fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611998906133be565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bb283610df5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611c1282826040518060200160405280600081525061229a565b5050565b6000611c2182611acb565b611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c579061343e565b60405180910390fd5b6000611c6b83610df5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611cda57508373ffffffffffffffffffffffffffffffffffffffff16611cc284610854565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ceb5750611cea8185611672565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d1482610df5565b73ffffffffffffffffffffffffffffffffffffffff1614611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d619061351e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd1906133fe565b60405180910390fd5b611de58383836122f5565b611df0600082611b3f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e4091906137ad565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e979190613726565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6060600b8054611f5f90613897565b80601f0160208091040260200160405190810160405280929190818152602001828054611f8b90613897565b8015611fd85780601f10611fad57610100808354040283529160200191611fd8565b820191906000526020600020905b815481529060010190602001808311611fbb57829003601f168201915b5050505050905090565b611fed848484611cf4565b611ff9848484846122fa565b612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f9061339e565b60405180910390fd5b50505050565b60606000821415612086576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121e6565b600082905060005b600082146120b85780806120a1906138c9565b915050600a826120b1919061377c565b915061208e565b60008167ffffffffffffffff8111156120fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561212c5781602001600182028036833780820191505090505b5090505b600085146121df5760018261214591906137ad565b9150600a856121549190613912565b60306121609190613726565b60f81b81838151811061219c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121d8919061377c565b9450612130565b8093505050505b919050565b6000806010600a5410156122085766470de4df8200009050612293565b6010600a541015801561221d57506020600a54105b1561223157668e1bc9bf0400009050612292565b6020600a541015801561224657506030600a54105b1561225a5766d529ae9e8600009050612291565b6030600a541015801561226f57506040600a54105b156122845767011c37937e0800009050612290565b670de0b6b3a764000090505b5b5b5b8091505090565b6122a48383612491565b6122b160008484846122fa565b6122f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e79061339e565b60405180910390fd5b505050565b505050565b600061231b8473ffffffffffffffffffffffffffffffffffffffff1661265f565b15612484578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612344611b37565b8786866040518563ffffffff1660e01b815260040161236694939291906132f3565b602060405180830381600087803b15801561238057600080fd5b505af19250505080156123b157506040513d601f19601f820116820180604052508101906123ae9190612a1e565b60015b612434573d80600081146123e1576040519150601f19603f3d011682016040523d82523d6000602084013e6123e6565b606091505b5060008151141561242c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124239061339e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612489565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f8906134be565b60405180910390fd5b61250a81611acb565b1561254a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612541906133de565b60405180910390fd5b612556600083836122f5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125a69190613726565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461267e90613897565b90600052602060002090601f0160209004810192826126a057600085556126e7565b82601f106126b957805160ff19168380011785556126e7565b828001600101855582156126e7579182015b828111156126e65782518255916020019190600101906126cb565b5b5090506126f491906126f8565b5090565b5b808211156127115760008160009055506001016126f9565b5090565b60006127286127238461364a565b613619565b90508281526020810184848401111561274057600080fd5b61274b848285613855565b509392505050565b60006127666127618461367a565b613619565b90508281526020810184848401111561277e57600080fd5b612789848285613855565b509392505050565b6000813590506127a081613a10565b92915050565b6000813590506127b581613a27565b92915050565b6000813590506127ca81613a3e565b92915050565b6000815190506127df81613a3e565b92915050565b600082601f8301126127f657600080fd5b8135612806848260208601612715565b91505092915050565b600082601f83011261282057600080fd5b8135612830848260208601612753565b91505092915050565b60008135905061284881613a55565b92915050565b60006020828403121561286057600080fd5b600061286e84828501612791565b91505092915050565b6000806040838503121561288a57600080fd5b600061289885828601612791565b92505060206128a985828601612791565b9150509250929050565b6000806000606084860312156128c857600080fd5b60006128d686828701612791565b93505060206128e786828701612791565b92505060406128f886828701612839565b9150509250925092565b6000806000806080858703121561291857600080fd5b600061292687828801612791565b945050602061293787828801612791565b935050604061294887828801612839565b925050606085013567ffffffffffffffff81111561296557600080fd5b612971878288016127e5565b91505092959194509250565b6000806040838503121561299057600080fd5b600061299e85828601612791565b92505060206129af858286016127a6565b9150509250929050565b600080604083850312156129cc57600080fd5b60006129da85828601612791565b92505060206129eb85828601612839565b9150509250929050565b600060208284031215612a0757600080fd5b6000612a15848285016127bb565b91505092915050565b600060208284031215612a3057600080fd5b6000612a3e848285016127d0565b91505092915050565b600060208284031215612a5957600080fd5b600082013567ffffffffffffffff811115612a7357600080fd5b612a7f8482850161280f565b91505092915050565b600060208284031215612a9a57600080fd5b6000612aa884828501612839565b91505092915050565b6000612abd8383613296565b60208301905092915050565b612ad2816137e1565b82525050565b6000612ae3826136ba565b612aed81856136e8565b9350612af8836136aa565b8060005b83811015612b29578151612b108882612ab1565b9750612b1b836136db565b925050600181019050612afc565b5085935050505092915050565b612b3f816137f3565b82525050565b6000612b50826136c5565b612b5a81856136f9565b9350612b6a818560208601613864565b612b73816139ff565b840191505092915050565b6000612b89826136d0565b612b93818561370a565b9350612ba3818560208601613864565b612bac816139ff565b840191505092915050565b6000612bc2826136d0565b612bcc818561371b565b9350612bdc818560208601613864565b80840191505092915050565b6000612bf560328361370a565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000612c5b60268361370a565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612cc1601c8361370a565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612d0160248361370a565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d6760198361370a565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000612da7602c8361370a565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612e0d60388361370a565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612e73602a8361370a565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ed960298361370a565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f3f60208361370a565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000612f7f602c8361370a565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612fe560208361370a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061302560298361370a565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061308b602f8361370a565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006130f160218361370a565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061315760318361370a565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b60006131bd601a8361370a565b91507f4552433732313a20696e73756666696369656e742065746865720000000000006000830152602082019050919050565b60006131fd60138361370a565b91507f53616c65206861736e27742073746172746564000000000000000000000000006000830152602082019050919050565b600061323d602f8361370a565b91507f4552433732313a206d6178696d756d206e756d626572206f6620746f6b656e7360008301527f20616c7265616479206d696e74656400000000000000000000000000000000006020830152604082019050919050565b61329f8161384b565b82525050565b6132ae8161384b565b82525050565b60006132c08285612bb7565b91506132cc8284612bb7565b91508190509392505050565b60006020820190506132ed6000830184612ac9565b92915050565b60006080820190506133086000830187612ac9565b6133156020830186612ac9565b61332260408301856132a5565b81810360608301526133348184612b45565b905095945050505050565b600060208201905081810360008301526133598184612ad8565b905092915050565b60006020820190506133766000830184612b36565b92915050565b600060208201905081810360008301526133968184612b7e565b905092915050565b600060208201905081810360008301526133b781612be8565b9050919050565b600060208201905081810360008301526133d781612c4e565b9050919050565b600060208201905081810360008301526133f781612cb4565b9050919050565b6000602082019050818103600083015261341781612cf4565b9050919050565b6000602082019050818103600083015261343781612d5a565b9050919050565b6000602082019050818103600083015261345781612d9a565b9050919050565b6000602082019050818103600083015261347781612e00565b9050919050565b6000602082019050818103600083015261349781612e66565b9050919050565b600060208201905081810360008301526134b781612ecc565b9050919050565b600060208201905081810360008301526134d781612f32565b9050919050565b600060208201905081810360008301526134f781612f72565b9050919050565b6000602082019050818103600083015261351781612fd8565b9050919050565b6000602082019050818103600083015261353781613018565b9050919050565b600060208201905081810360008301526135578161307e565b9050919050565b60006020820190508181036000830152613577816130e4565b9050919050565b600060208201905081810360008301526135978161314a565b9050919050565b600060208201905081810360008301526135b7816131b0565b9050919050565b600060208201905081810360008301526135d7816131f0565b9050919050565b600060208201905081810360008301526135f781613230565b9050919050565b600060208201905061361360008301846132a5565b92915050565b6000604051905081810181811067ffffffffffffffff821117156136405761363f6139d0565b5b8060405250919050565b600067ffffffffffffffff821115613665576136646139d0565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613695576136946139d0565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006137318261384b565b915061373c8361384b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561377157613770613943565b5b828201905092915050565b60006137878261384b565b91506137928361384b565b9250826137a2576137a1613972565b5b828204905092915050565b60006137b88261384b565b91506137c38361384b565b9250828210156137d6576137d5613943565b5b828203905092915050565b60006137ec8261382b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613882578082015181840152602081019050613867565b83811115613891576000848401525b50505050565b600060028204905060018216806138af57607f821691505b602082108114156138c3576138c26139a1565b5b50919050565b60006138d48261384b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561390757613906613943565b5b600182019050919050565b600061391d8261384b565b91506139288361384b565b92508261393857613937613972565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613a19816137e1565b8114613a2457600080fd5b50565b613a30816137f3565b8114613a3b57600080fd5b50565b613a47816137ff565b8114613a5257600080fd5b50565b613a5e8161384b565b8114613a6957600080fd5b5056fea2646970667358221220880996a094d3de3e90cc8d9277250cf4881494b7180fd6e3bc12774e9979209864736f6c63430008000033

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c80636352211e116100f757806395d89b4111610095578063e985e9c511610064578063e985e9c514610631578063ee1b0edf1461066e578063f0c9dc601461068c578063f2fde38b146106b7576101cd565b806395d89b4114610577578063a22cb465146105a2578063b88d4fde146105cb578063c87b56dd146105f4576101cd565b8063715018a6116100d1578063715018a6146104ee5780638462151c14610505578063853828b6146105425780638da5cb5b1461054c576101cd565b80636352211e146104495780636c0360eb1461048657806370a08231146104b1576101cd565b80631c8b232d1161016f57806334d84c7b1161013e57806334d84c7b146103b5578063395baad7146103cc57806342842e0e146103f757806355f804b314610420576101cd565b80631c8b232d1461031f5780631e0f6bf91461034a57806323b872dd146103755780632808c92c1461039e576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806310969523146102a057806318160ddd146102c95780631c4a485a146102f4576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f491906129f5565b6106e0565b6040516102069190613361565b60405180910390f35b34801561021b57600080fd5b506102246107c2565b604051610231919061337c565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c9190612a88565b610854565b60405161026e91906132d8565b60405180910390f35b34801561028357600080fd5b5061029e600480360381019061029991906129b9565b6108d9565b005b3480156102ac57600080fd5b506102c760048036038101906102c29190612a47565b6109f1565b005b3480156102d557600080fd5b506102de610a87565b6040516102eb91906135fe565b60405180910390f35b34801561030057600080fd5b50610309610a91565b60405161031691906135fe565b60405180910390f35b34801561032b57600080fd5b50610334610b8e565b6040516103419190613361565b60405180910390f35b34801561035657600080fd5b5061035f610ba1565b60405161036c91906135fe565b60405180910390f35b34801561038157600080fd5b5061039c600480360381019061039791906128b3565b610ba7565b005b3480156103aa57600080fd5b506103b3610c07565b005b3480156103c157600080fd5b506103ca610ca0565b005b3480156103d857600080fd5b506103e1610d39565b6040516103ee91906135fe565b60405180910390f35b34801561040357600080fd5b5061041e600480360381019061041991906128b3565b610d3f565b005b34801561042c57600080fd5b5061044760048036038101906104429190612a47565b610d5f565b005b34801561045557600080fd5b50610470600480360381019061046b9190612a88565b610df5565b60405161047d91906132d8565b60405180910390f35b34801561049257600080fd5b5061049b610ea7565b6040516104a8919061337c565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d3919061284e565b610eb6565b6040516104e591906135fe565b60405180910390f35b3480156104fa57600080fd5b50610503610f6e565b005b34801561051157600080fd5b5061052c6004803603810190610527919061284e565b6110ab565b604051610539919061333f565b60405180910390f35b61054a611270565b005b34801561055857600080fd5b5061056161132c565b60405161056e91906132d8565b60405180910390f35b34801561058357600080fd5b5061058c611356565b604051610599919061337c565b60405180910390f35b3480156105ae57600080fd5b506105c960048036038101906105c4919061297d565b6113e8565b005b3480156105d757600080fd5b506105f260048036038101906105ed9190612902565b611569565b005b34801561060057600080fd5b5061061b60048036038101906106169190612a88565b6115cb565b604051610628919061337c565b60405180910390f35b34801561063d57600080fd5b5061065860048036038101906106539190612877565b611672565b6040516106659190613361565b60405180910390f35b610676611706565b60405161068391906135fe565b60405180910390f35b34801561069857600080fd5b506106a1611827565b6040516106ae919061337c565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d9919061284e565b6118b5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ab57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107bb57506107ba82611a61565b5b9050919050565b6060600080546107d190613897565b80601f01602080910402602001604051908101604052809291908181526020018280546107fd90613897565b801561084a5780601f1061081f5761010080835404028352916020019161084a565b820191906000526020600020905b81548152906001019060200180831161082d57829003601f168201915b5050505050905090565b600061085f82611acb565b61089e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610895906134de565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108e482610df5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094c9061355e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610974611b37565b73ffffffffffffffffffffffffffffffffffffffff1614806109a357506109a28161099d611b37565b611672565b5b6109e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d99061345e565b60405180910390fd5b6109ec8383611b3f565b505050565b6109f9611b37565b73ffffffffffffffffffffffffffffffffffffffff16610a1761132c565b73ffffffffffffffffffffffffffffffffffffffff1614610a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a64906134fe565b60405180910390fd5b8060079080519060200190610a83929190612672565b5050565b6000600a54905090565b6000610a9b611b37565b73ffffffffffffffffffffffffffffffffffffffff16610ab961132c565b73ffffffffffffffffffffffffffffffffffffffff1614610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b06906134fe565b60405180910390fd5b600954600a5410610b55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4c906135de565b60405180910390fd5b60006001600a54610b669190613726565b9050610b723382611bf8565b6001600a54610b819190613726565b600a819055508091505090565b600660149054906101000a900460ff1681565b60095481565b610bb8610bb2611b37565b82611c16565b610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee9061357e565b60405180910390fd5b610c02838383611cf4565b505050565b610c0f611b37565b73ffffffffffffffffffffffffffffffffffffffff16610c2d61132c565b73ffffffffffffffffffffffffffffffffffffffff1614610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a906134fe565b60405180910390fd5b6000600660146101000a81548160ff021916908315150217905550565b610ca8611b37565b73ffffffffffffffffffffffffffffffffffffffff16610cc661132c565b73ffffffffffffffffffffffffffffffffffffffff1614610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d13906134fe565b60405180910390fd5b6001600660146101000a81548160ff021916908315150217905550565b60085481565b610d5a83838360405180602001604052806000815250611569565b505050565b610d67611b37565b73ffffffffffffffffffffffffffffffffffffffff16610d8561132c565b73ffffffffffffffffffffffffffffffffffffffff1614610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd2906134fe565b60405180910390fd5b80600b9080519060200190610df1929190612672565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e959061349e565b60405180910390fd5b80915050919050565b6060610eb1611f50565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e9061347e565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f76611b37565b73ffffffffffffffffffffffffffffffffffffffff16610f9461132c565b73ffffffffffffffffffffffffffffffffffffffff1614610fea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe1906134fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060006110b883610eb6565b9050600081141561113b57600067ffffffffffffffff811115611104577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111325781602001602082028036833780820191505090505b5091505061126b565b60008167ffffffffffffffff81111561117d577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156111ab5781602001602082028036833780820191505090505b509050600080600190505b600a548111611263578573ffffffffffffffffffffffffffffffffffffffff166111df82610df5565b73ffffffffffffffffffffffffffffffffffffffff1614156112425780838381518110611235577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250505b818061124d906138c9565b925050808061125b906138c9565b9150506111b6565b829450505050505b919050565b611278611b37565b73ffffffffffffffffffffffffffffffffffffffff1661129661132c565b73ffffffffffffffffffffffffffffffffffffffff16146112ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e3906134fe565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061132a57600080fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461136590613897565b80601f016020809104026020016040519081016040528092919081815260200182805461139190613897565b80156113de5780601f106113b3576101008083540402835291602001916113de565b820191906000526020600020905b8154815290600101906020018083116113c157829003601f168201915b5050505050905090565b6113f0611b37565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561145e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114559061341e565b60405180910390fd5b806005600061146b611b37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611518611b37565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161155d9190613361565b60405180910390a35050565b61157a611574611b37565b83611c16565b6115b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b09061357e565b60405180910390fd5b6115c584848484611fe2565b50505050565b60606115d682611acb565b611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c9061353e565b60405180910390fd5b600061161f611f50565b9050600081511161163f576040518060200160405280600081525061166a565b806116498461203e565b60405160200161165a9291906132b4565b6040516020818303038152906040525b915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600060011515600660149054906101000a900460ff1615151461175e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611755906135be565b60405180910390fd5b600854600a54106117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b906135de565b60405180910390fd5b6117ac6121eb565b3410156117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e59061359e565b60405180910390fd5b60006001600a546117ff9190613726565b905061180b3382611bf8565b6001600a5461181a9190613726565b600a819055508091505090565b6007805461183490613897565b80601f016020809104026020016040519081016040528092919081815260200182805461186090613897565b80156118ad5780601f10611882576101008083540402835291602001916118ad565b820191906000526020600020905b81548152906001019060200180831161189057829003601f168201915b505050505081565b6118bd611b37565b73ffffffffffffffffffffffffffffffffffffffff166118db61132c565b73ffffffffffffffffffffffffffffffffffffffff1614611931576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611928906134fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611998906133be565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bb283610df5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611c1282826040518060200160405280600081525061229a565b5050565b6000611c2182611acb565b611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c579061343e565b60405180910390fd5b6000611c6b83610df5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611cda57508373ffffffffffffffffffffffffffffffffffffffff16611cc284610854565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ceb5750611cea8185611672565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d1482610df5565b73ffffffffffffffffffffffffffffffffffffffff1614611d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d619061351e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd1906133fe565b60405180910390fd5b611de58383836122f5565b611df0600082611b3f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e4091906137ad565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e979190613726565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6060600b8054611f5f90613897565b80601f0160208091040260200160405190810160405280929190818152602001828054611f8b90613897565b8015611fd85780601f10611fad57610100808354040283529160200191611fd8565b820191906000526020600020905b815481529060010190602001808311611fbb57829003601f168201915b5050505050905090565b611fed848484611cf4565b611ff9848484846122fa565b612038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202f9061339e565b60405180910390fd5b50505050565b60606000821415612086576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121e6565b600082905060005b600082146120b85780806120a1906138c9565b915050600a826120b1919061377c565b915061208e565b60008167ffffffffffffffff8111156120fa577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561212c5781602001600182028036833780820191505090505b5090505b600085146121df5760018261214591906137ad565b9150600a856121549190613912565b60306121609190613726565b60f81b81838151811061219c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121d8919061377c565b9450612130565b8093505050505b919050565b6000806010600a5410156122085766470de4df8200009050612293565b6010600a541015801561221d57506020600a54105b1561223157668e1bc9bf0400009050612292565b6020600a541015801561224657506030600a54105b1561225a5766d529ae9e8600009050612291565b6030600a541015801561226f57506040600a54105b156122845767011c37937e0800009050612290565b670de0b6b3a764000090505b5b5b5b8091505090565b6122a48383612491565b6122b160008484846122fa565b6122f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e79061339e565b60405180910390fd5b505050565b505050565b600061231b8473ffffffffffffffffffffffffffffffffffffffff1661265f565b15612484578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612344611b37565b8786866040518563ffffffff1660e01b815260040161236694939291906132f3565b602060405180830381600087803b15801561238057600080fd5b505af19250505080156123b157506040513d601f19601f820116820180604052508101906123ae9190612a1e565b60015b612434573d80600081146123e1576040519150601f19603f3d011682016040523d82523d6000602084013e6123e6565b606091505b5060008151141561242c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124239061339e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612489565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612501576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f8906134be565b60405180910390fd5b61250a81611acb565b1561254a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612541906133de565b60405180910390fd5b612556600083836122f5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125a69190613726565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461267e90613897565b90600052602060002090601f0160209004810192826126a057600085556126e7565b82601f106126b957805160ff19168380011785556126e7565b828001600101855582156126e7579182015b828111156126e65782518255916020019190600101906126cb565b5b5090506126f491906126f8565b5090565b5b808211156127115760008160009055506001016126f9565b5090565b60006127286127238461364a565b613619565b90508281526020810184848401111561274057600080fd5b61274b848285613855565b509392505050565b60006127666127618461367a565b613619565b90508281526020810184848401111561277e57600080fd5b612789848285613855565b509392505050565b6000813590506127a081613a10565b92915050565b6000813590506127b581613a27565b92915050565b6000813590506127ca81613a3e565b92915050565b6000815190506127df81613a3e565b92915050565b600082601f8301126127f657600080fd5b8135612806848260208601612715565b91505092915050565b600082601f83011261282057600080fd5b8135612830848260208601612753565b91505092915050565b60008135905061284881613a55565b92915050565b60006020828403121561286057600080fd5b600061286e84828501612791565b91505092915050565b6000806040838503121561288a57600080fd5b600061289885828601612791565b92505060206128a985828601612791565b9150509250929050565b6000806000606084860312156128c857600080fd5b60006128d686828701612791565b93505060206128e786828701612791565b92505060406128f886828701612839565b9150509250925092565b6000806000806080858703121561291857600080fd5b600061292687828801612791565b945050602061293787828801612791565b935050604061294887828801612839565b925050606085013567ffffffffffffffff81111561296557600080fd5b612971878288016127e5565b91505092959194509250565b6000806040838503121561299057600080fd5b600061299e85828601612791565b92505060206129af858286016127a6565b9150509250929050565b600080604083850312156129cc57600080fd5b60006129da85828601612791565b92505060206129eb85828601612839565b9150509250929050565b600060208284031215612a0757600080fd5b6000612a15848285016127bb565b91505092915050565b600060208284031215612a3057600080fd5b6000612a3e848285016127d0565b91505092915050565b600060208284031215612a5957600080fd5b600082013567ffffffffffffffff811115612a7357600080fd5b612a7f8482850161280f565b91505092915050565b600060208284031215612a9a57600080fd5b6000612aa884828501612839565b91505092915050565b6000612abd8383613296565b60208301905092915050565b612ad2816137e1565b82525050565b6000612ae3826136ba565b612aed81856136e8565b9350612af8836136aa565b8060005b83811015612b29578151612b108882612ab1565b9750612b1b836136db565b925050600181019050612afc565b5085935050505092915050565b612b3f816137f3565b82525050565b6000612b50826136c5565b612b5a81856136f9565b9350612b6a818560208601613864565b612b73816139ff565b840191505092915050565b6000612b89826136d0565b612b93818561370a565b9350612ba3818560208601613864565b612bac816139ff565b840191505092915050565b6000612bc2826136d0565b612bcc818561371b565b9350612bdc818560208601613864565b80840191505092915050565b6000612bf560328361370a565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000612c5b60268361370a565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612cc1601c8361370a565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612d0160248361370a565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d6760198361370a565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000612da7602c8361370a565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612e0d60388361370a565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612e73602a8361370a565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000612ed960298361370a565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f3f60208361370a565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000612f7f602c8361370a565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612fe560208361370a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b600061302560298361370a565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061308b602f8361370a565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006130f160218361370a565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061315760318361370a565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b60006131bd601a8361370a565b91507f4552433732313a20696e73756666696369656e742065746865720000000000006000830152602082019050919050565b60006131fd60138361370a565b91507f53616c65206861736e27742073746172746564000000000000000000000000006000830152602082019050919050565b600061323d602f8361370a565b91507f4552433732313a206d6178696d756d206e756d626572206f6620746f6b656e7360008301527f20616c7265616479206d696e74656400000000000000000000000000000000006020830152604082019050919050565b61329f8161384b565b82525050565b6132ae8161384b565b82525050565b60006132c08285612bb7565b91506132cc8284612bb7565b91508190509392505050565b60006020820190506132ed6000830184612ac9565b92915050565b60006080820190506133086000830187612ac9565b6133156020830186612ac9565b61332260408301856132a5565b81810360608301526133348184612b45565b905095945050505050565b600060208201905081810360008301526133598184612ad8565b905092915050565b60006020820190506133766000830184612b36565b92915050565b600060208201905081810360008301526133968184612b7e565b905092915050565b600060208201905081810360008301526133b781612be8565b9050919050565b600060208201905081810360008301526133d781612c4e565b9050919050565b600060208201905081810360008301526133f781612cb4565b9050919050565b6000602082019050818103600083015261341781612cf4565b9050919050565b6000602082019050818103600083015261343781612d5a565b9050919050565b6000602082019050818103600083015261345781612d9a565b9050919050565b6000602082019050818103600083015261347781612e00565b9050919050565b6000602082019050818103600083015261349781612e66565b9050919050565b600060208201905081810360008301526134b781612ecc565b9050919050565b600060208201905081810360008301526134d781612f32565b9050919050565b600060208201905081810360008301526134f781612f72565b9050919050565b6000602082019050818103600083015261351781612fd8565b9050919050565b6000602082019050818103600083015261353781613018565b9050919050565b600060208201905081810360008301526135578161307e565b9050919050565b60006020820190508181036000830152613577816130e4565b9050919050565b600060208201905081810360008301526135978161314a565b9050919050565b600060208201905081810360008301526135b7816131b0565b9050919050565b600060208201905081810360008301526135d7816131f0565b9050919050565b600060208201905081810360008301526135f781613230565b9050919050565b600060208201905061361360008301846132a5565b92915050565b6000604051905081810181811067ffffffffffffffff821117156136405761363f6139d0565b5b8060405250919050565b600067ffffffffffffffff821115613665576136646139d0565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613695576136946139d0565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006137318261384b565b915061373c8361384b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561377157613770613943565b5b828201905092915050565b60006137878261384b565b91506137928361384b565b9250826137a2576137a1613972565b5b828204905092915050565b60006137b88261384b565b91506137c38361384b565b9250828210156137d6576137d5613943565b5b828203905092915050565b60006137ec8261382b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613882578082015181840152602081019050613867565b83811115613891576000848401525b50505050565b600060028204905060018216806138af57607f821691505b602082108114156138c3576138c26139a1565b5b50919050565b60006138d48261384b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561390757613906613943565b5b600182019050919050565b600061391d8261384b565b91506139288361384b565b92508261393857613937613972565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b613a19816137e1565b8114613a2457600080fd5b50565b613a30816137f3565b8114613a3b57600080fd5b50565b613a47816137ff565b8114613a5257600080fd5b50565b613a5e8161384b565b8114613a6957600080fd5b5056fea2646970667358221220880996a094d3de3e90cc8d9277250cf4881494b7180fd6e3bc12774e9979209864736f6c63430008000033

Deployed Bytecode Sourcemap

35905:3485:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21678:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22610:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24077:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23607:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38509:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37088:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39061:320;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35986:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36116:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24967:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38843:79;;;;;;;;;;;;;:::i;:::-;;38759:78;;;;;;;;;;;;;:::i;:::-;;36077:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25343:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38637:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22304:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38262:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22034:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35241:148;;;;;;;;;;;;;:::i;:::-;;36398:678;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38930:123;;;:::i;:::-;;34590:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22779:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24370:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25565:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22954:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24736:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37783:442;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36027:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35544:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21678:292;21780:4;21819:25;21804:40;;;:11;:40;;;;:105;;;;21876:33;21861:48;;;:11;:48;;;;21804:105;:158;;;;21926:36;21950:11;21926:23;:36::i;:::-;21804:158;21797:165;;21678:292;;;:::o;22610:100::-;22664:13;22697:5;22690:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22610:100;:::o;24077:221::-;24153:7;24181:16;24189:7;24181;:16::i;:::-;24173:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24266:15;:24;24282:7;24266:24;;;;;;;;;;;;;;;;;;;;;24259:31;;24077:221;;;:::o;23607:404::-;23688:13;23704:23;23719:7;23704:14;:23::i;:::-;23688:39;;23752:5;23746:11;;:2;:11;;;;23738:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23832:5;23816:21;;:12;:10;:12::i;:::-;:21;;;:69;;;;23841:44;23865:5;23872:12;:10;:12::i;:::-;23841:23;:44::i;:::-;23816:69;23808:161;;;;;;;;;;;;:::i;:::-;;;;;;;;;23982:21;23991:2;23995:7;23982:8;:21::i;:::-;23607:404;;;:::o;38509:116::-;34821:12;:10;:12::i;:::-;34810:23;;:7;:5;:7::i;:::-;:23;;;34802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38612:5:::1;38585:24;:32;;;;;;;;;;;;:::i;:::-;;38509:116:::0;:::o;37088:84::-;37132:7;37155:9;;37148:16;;37088:84;:::o;39061:320::-;39113:7;34821:12;:10;:12::i;:::-;34810:23;;:7;:5;:7::i;:::-;:23;;;34802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39161:18:::1;;39149:9;;:30;39141:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;39241:10;39266:1;39254:9;;:13;;;;:::i;:::-;39241:26;;39278:25;39288:10;39300:2;39278:9;:25::i;:::-;39338:1;39326:9;;:13;;;;:::i;:::-;39314:9;:25;;;;39371:2;39364:9;;;39061:320:::0;:::o;35986:34::-;;;;;;;;;;;;;:::o;36116:39::-;;;;:::o;24967:305::-;25128:41;25147:12;:10;:12::i;:::-;25161:7;25128:18;:41::i;:::-;25120:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25236:28;25246:4;25252:2;25256:7;25236:9;:28::i;:::-;24967:305;;;:::o;38843:79::-;34821:12;:10;:12::i;:::-;34810:23;;:7;:5;:7::i;:::-;:23;;;34802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38909:5:::1;38892:14;;:22;;;;;;;;;;;;;;;;;;38843:79::o:0;38759:78::-;34821:12;:10;:12::i;:::-;34810:23;;:7;:5;:7::i;:::-;:23;;;34802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38825:4:::1;38808:14;;:21;;;;;;;;;;;;;;;;;;38759:78::o:0;36077:32::-;;;;:::o;25343:151::-;25447:39;25464:4;25470:2;25474:7;25447:39;;;;;;;;;;;;:16;:39::i;:::-;25343:151;;;:::o;38637:110::-;34821:12;:10;:12::i;:::-;34810:23;;:7;:5;:7::i;:::-;:23;;;34802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38728:11:::1;38712:13;:27;;;;;;;;;;;;:::i;:::-;;38637:110:::0;:::o;22304:239::-;22376:7;22396:13;22412:7;:16;22420:7;22412:16;;;;;;;;;;;;;;;;;;;;;22396:32;;22464:1;22447:19;;:5;:19;;;;22439:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22530:5;22523:12;;;22304:239;;;:::o;38262:91::-;38302:13;38335:10;:8;:10::i;:::-;38328:17;;38262:91;:::o;22034:208::-;22106:7;22151:1;22134:19;;:5;:19;;;;22126:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22218:9;:16;22228:5;22218:16;;;;;;;;;;;;;;;;22211:23;;22034:208;;;:::o;35241:148::-;34821:12;:10;:12::i;:::-;34810:23;;:7;:5;:7::i;:::-;:23;;;34802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35348:1:::1;35311:40;;35332:6;;;;;;;;;;;35311:40;;;;;;;;;;;;35379:1;35362:6;;:19;;;;;;;;;;;;;;;;;;35241:148::o:0;36398:678::-;36461:16;36491:18;36512:19;36522:8;36512:9;:19::i;:::-;36491:40;;36560:1;36546:10;:15;36542:527;;;36637:1;36623:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36616:23;;;;;36542:527;36672:23;36712:10;36698:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36672:51;;36738:13;36790:15;36835:1;36825:11;;36820:210;36849:9;;36838:7;:20;36820:210;;36913:8;36893:28;;:16;36901:7;36893;:16::i;:::-;:28;;;36890:99;;;36961:7;36945:6;36952:5;36945:13;;;;;;;;;;;;;;;;;;;;;:23;;;;;36890:99;37007:7;;;;;:::i;:::-;;;;36860:9;;;;;:::i;:::-;;;;36820:210;;;37051:6;37044:13;;;;;;36398:678;;;;:::o;38930:123::-;34821:12;:10;:12::i;:::-;34810:23;;:7;:5;:7::i;:::-;:23;;;34802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39005:10:::1;38997:24;;:47;39022:21;38997:47;;;;;;;;;;;;;;;;;;;;;;;38989:56;;;::::0;::::1;;38930:123::o:0;34590:87::-;34636:7;34663:6;;;;;;;;;;;34656:13;;34590:87;:::o;22779:104::-;22835:13;22868:7;22861:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22779:104;:::o;24370:295::-;24485:12;:10;:12::i;:::-;24473:24;;:8;:24;;;;24465:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24585:8;24540:18;:32;24559:12;:10;:12::i;:::-;24540:32;;;;;;;;;;;;;;;:42;24573:8;24540:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24638:8;24609:48;;24624:12;:10;:12::i;:::-;24609:48;;;24648:8;24609:48;;;;;;:::i;:::-;;;;;;;;24370:295;;:::o;25565:285::-;25697:41;25716:12;:10;:12::i;:::-;25730:7;25697:18;:41::i;:::-;25689:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25803:39;25817:4;25823:2;25827:7;25836:5;25803:13;:39::i;:::-;25565:285;;;;:::o;22954:360::-;23027:13;23061:16;23069:7;23061;:16::i;:::-;23053:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23142:21;23166:10;:8;:10::i;:::-;23142:34;;23218:1;23200:7;23194:21;:25;:112;;;;;;;;;;;;;;;;;23259:7;23268:18;:7;:16;:18::i;:::-;23242:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23194:112;23187:119;;;22954:360;;;:::o;24736:164::-;24833:4;24857:18;:25;24876:5;24857:25;;;;;;;;;;;;;;;:35;24883:8;24857:35;;;;;;;;;;;;;;;;;;;;;;;;;24850:42;;24736:164;;;;:::o;37783:442::-;37827:7;37881:4;37863:22;;:14;;;;;;;;;;;:22;;;37855:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;37940:12;;37928:9;;:24;37920:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;38035:16;:14;:16::i;:::-;38022:9;:29;;38014:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38093:10;38118:1;38106:9;;:13;;;;:::i;:::-;38093:26;;38130:25;38140:10;38152:2;38130:9;:25::i;:::-;38190:1;38178:9;;:13;;;;:::i;:::-;38166:9;:25;;;;38215:2;38208:9;;;37783:442;:::o;36027:43::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35544:244::-;34821:12;:10;:12::i;:::-;34810:23;;:7;:5;:7::i;:::-;:23;;;34802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35653:1:::1;35633:22;;:8;:22;;;;35625:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35743:8;35714:38;;35735:6;;;;;;;;;;;35714:38;;;;;;;;;;;;35772:8;35763:6;;:17;;;;;;;;;;;;;;;;;;35544:244:::0;:::o;20174:157::-;20259:4;20298:25;20283:40;;;:11;:40;;;;20276:47;;20174:157;;;:::o;27317:127::-;27382:4;27434:1;27406:30;;:7;:16;27414:7;27406:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27399:37;;27317:127;;;:::o;16938:98::-;16991:7;17018:10;17011:17;;16938:98;:::o;31201:174::-;31303:2;31276:15;:24;31292:7;31276:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31359:7;31355:2;31321:46;;31330:23;31345:7;31330:14;:23::i;:::-;31321:46;;;;;;;;;;;;31201:174;;:::o;28308:110::-;28384:26;28394:2;28398:7;28384:26;;;;;;;;;;;;:9;:26::i;:::-;28308:110;;:::o;27611:355::-;27704:4;27729:16;27737:7;27729;:16::i;:::-;27721:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27805:13;27821:23;27836:7;27821:14;:23::i;:::-;27805:39;;27874:5;27863:16;;:7;:16;;;:51;;;;27907:7;27883:31;;:20;27895:7;27883:11;:20::i;:::-;:31;;;27863:51;:94;;;;27918:39;27942:5;27949:7;27918:23;:39::i;:::-;27863:94;27855:103;;;27611:355;;;;:::o;30539:544::-;30664:4;30637:31;;:23;30652:7;30637:14;:23::i;:::-;:31;;;30629:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30747:1;30733:16;;:2;:16;;;;30725:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30803:39;30824:4;30830:2;30834:7;30803:20;:39::i;:::-;30907:29;30924:1;30928:7;30907:8;:29::i;:::-;30968:1;30949:9;:15;30959:4;30949:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30997:1;30980:9;:13;30990:2;30980:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31028:2;31009:7;:16;31017:7;31009:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31067:7;31063:2;31048:27;;31057:4;31048:27;;;;;;;;;;;;30539:544;;;:::o;38361:106::-;38413:13;38446;38439:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38361:106;:::o;26732:272::-;26846:28;26856:4;26862:2;26866:7;26846:9;:28::i;:::-;26893:48;26916:4;26922:2;26926:7;26935:5;26893:22;:48::i;:::-;26885:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26732:272;;;;:::o;17606:723::-;17662:13;17892:1;17883:5;:10;17879:53;;;17910:10;;;;;;;;;;;;;;;;;;;;;17879:53;17942:12;17957:5;17942:20;;17973:14;17998:78;18013:1;18005:4;:9;17998:78;;18031:8;;;;;:::i;:::-;;;;18062:2;18054:10;;;;;:::i;:::-;;;17998:78;;;18086:19;18118:6;18108:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18086:39;;18136:154;18152:1;18143:5;:10;18136:154;;18180:1;18170:11;;;;;:::i;:::-;;;18247:2;18239:5;:10;;;;:::i;:::-;18226:2;:24;;;;:::i;:::-;18213:39;;18196:6;18203;18196:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;18276:2;18267:11;;;;;:::i;:::-;;;18136:154;;;18314:6;18300:21;;;;;17606:723;;;;:::o;37202:552::-;37251:7;37271:13;37311:2;37299:9;;:14;37295:433;;;37334:17;37326:25;;37295:433;;;37393:2;37380:9;;:15;;:33;;;;;37411:2;37399:9;;:14;37380:33;37376:352;;;37434:17;37426:25;;37376:352;;;37493:2;37480:9;;:15;;:33;;;;;37511:2;37499:9;;:14;37480:33;37476:252;;;37534:17;37526:25;;37476:252;;;37593:2;37580:9;;:15;;:33;;;;;37611:2;37599:9;;:14;37580:33;37576:152;;;37634:17;37626:25;;37576:152;;;37695:19;37687:27;;37576:152;37476:252;37376:352;37295:433;37741:5;37734:12;;;37202:552;:::o;28645:250::-;28741:18;28747:2;28751:7;28741:5;:18::i;:::-;28778:54;28809:1;28813:2;28817:7;28826:5;28778:22;:54::i;:::-;28770:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;28645:250;;;:::o;33396:93::-;;;;:::o;31940:843::-;32061:4;32087:15;:2;:13;;;:15::i;:::-;32083:693;;;32139:2;32123:36;;;32160:12;:10;:12::i;:::-;32174:4;32180:7;32189:5;32123:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32119:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32386:1;32369:6;:13;:18;32365:341;;;32412:60;;;;;;;;;;:::i;:::-;;;;;;;;32365:341;32656:6;32650:13;32641:6;32637:2;32633:15;32626:38;32119:602;32256:45;;;32246:55;;;:6;:55;;;;32239:62;;;;;32083:693;32760:4;32753:11;;31940:843;;;;;;;:::o;29231:382::-;29325:1;29311:16;;:2;:16;;;;29303:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29384:16;29392:7;29384;:16::i;:::-;29383:17;29375:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29446:45;29475:1;29479:2;29483:7;29446:20;:45::i;:::-;29521:1;29504:9;:13;29514:2;29504:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29552:2;29533:7;:16;29541:7;29533:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29597:7;29593:2;29572:33;;29589:1;29572:33;;;;;;;;;;;;29231:382;;:::o;9042:422::-;9102:4;9310:12;9421:7;9409:20;9401:28;;9455:1;9448:4;:8;9441:15;;;9042:422;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:260::-;;4988:2;4976:9;4967:7;4963:23;4959:32;4956:2;;;5004:1;5001;4994:12;4956:2;5047:1;5072:52;5116:7;5107:6;5096:9;5092:22;5072:52;:::i;:::-;5062:62;;5018:116;4946:195;;;;:::o;5147:282::-;;5265:2;5253:9;5244:7;5240:23;5236:32;5233:2;;;5281:1;5278;5271:12;5233:2;5324:1;5349:63;5404:7;5395:6;5384:9;5380:22;5349:63;:::i;:::-;5339:73;;5295:127;5223:206;;;;:::o;5435:375::-;;5553:2;5541:9;5532:7;5528:23;5524:32;5521:2;;;5569:1;5566;5559:12;5521:2;5640:1;5629:9;5625:17;5612:31;5670:18;5662:6;5659:30;5656:2;;;5702:1;5699;5692:12;5656:2;5730:63;5785:7;5776:6;5765:9;5761:22;5730:63;:::i;:::-;5720:73;;5583:220;5511:299;;;;:::o;5816:262::-;;5924:2;5912:9;5903:7;5899:23;5895:32;5892:2;;;5940:1;5937;5930:12;5892:2;5983:1;6008:53;6053:7;6044:6;6033:9;6029:22;6008:53;:::i;:::-;5998:63;;5954:117;5882:196;;;;:::o;6084:179::-;;6174:46;6216:3;6208:6;6174:46;:::i;:::-;6252:4;6247:3;6243:14;6229:28;;6164:99;;;;:::o;6269:118::-;6356:24;6374:5;6356:24;:::i;:::-;6351:3;6344:37;6334:53;;:::o;6423:732::-;;6571:54;6619:5;6571:54;:::i;:::-;6641:86;6720:6;6715:3;6641:86;:::i;:::-;6634:93;;6751:56;6801:5;6751:56;:::i;:::-;6830:7;6861:1;6846:284;6871:6;6868:1;6865:13;6846:284;;;6947:6;6941:13;6974:63;7033:3;7018:13;6974:63;:::i;:::-;6967:70;;7060:60;7113:6;7060:60;:::i;:::-;7050:70;;6906:224;6893:1;6890;6886:9;6881:14;;6846:284;;;6850:14;7146:3;7139:10;;6547:608;;;;;;;:::o;7161:109::-;7242:21;7257:5;7242:21;:::i;:::-;7237:3;7230:34;7220:50;;:::o;7276:360::-;;7390:38;7422:5;7390:38;:::i;:::-;7444:70;7507:6;7502:3;7444:70;:::i;:::-;7437:77;;7523:52;7568:6;7563:3;7556:4;7549:5;7545:16;7523:52;:::i;:::-;7600:29;7622:6;7600:29;:::i;:::-;7595:3;7591:39;7584:46;;7366:270;;;;;:::o;7642:364::-;;7758:39;7791:5;7758:39;:::i;:::-;7813:71;7877:6;7872:3;7813:71;:::i;:::-;7806:78;;7893:52;7938:6;7933:3;7926:4;7919:5;7915:16;7893:52;:::i;:::-;7970:29;7992:6;7970:29;:::i;:::-;7965:3;7961:39;7954:46;;7734:272;;;;;:::o;8012:377::-;;8146:39;8179:5;8146:39;:::i;:::-;8201:89;8283:6;8278:3;8201:89;:::i;:::-;8194:96;;8299:52;8344:6;8339:3;8332:4;8325:5;8321:16;8299:52;:::i;:::-;8376:6;8371:3;8367:16;8360:23;;8122:267;;;;;:::o;8395:382::-;;8558:67;8622:2;8617:3;8558:67;:::i;:::-;8551:74;;8655:34;8651:1;8646:3;8642:11;8635:55;8721:20;8716:2;8711:3;8707:12;8700:42;8768:2;8763:3;8759:12;8752:19;;8541:236;;;:::o;8783:370::-;;8946:67;9010:2;9005:3;8946:67;:::i;:::-;8939:74;;9043:34;9039:1;9034:3;9030:11;9023:55;9109:8;9104:2;9099:3;9095:12;9088:30;9144:2;9139:3;9135:12;9128:19;;8929:224;;;:::o;9159:326::-;;9322:67;9386:2;9381:3;9322:67;:::i;:::-;9315:74;;9419:30;9415:1;9410:3;9406:11;9399:51;9476:2;9471:3;9467:12;9460:19;;9305:180;;;:::o;9491:368::-;;9654:67;9718:2;9713:3;9654:67;:::i;:::-;9647:74;;9751:34;9747:1;9742:3;9738:11;9731:55;9817:6;9812:2;9807:3;9803:12;9796:28;9850:2;9845:3;9841:12;9834:19;;9637:222;;;:::o;9865:323::-;;10028:67;10092:2;10087:3;10028:67;:::i;:::-;10021:74;;10125:27;10121:1;10116:3;10112:11;10105:48;10179:2;10174:3;10170:12;10163:19;;10011:177;;;:::o;10194:376::-;;10357:67;10421:2;10416:3;10357:67;:::i;:::-;10350:74;;10454:34;10450:1;10445:3;10441:11;10434:55;10520:14;10515:2;10510:3;10506:12;10499:36;10561:2;10556:3;10552:12;10545:19;;10340:230;;;:::o;10576:388::-;;10739:67;10803:2;10798:3;10739:67;:::i;:::-;10732:74;;10836:34;10832:1;10827:3;10823:11;10816:55;10902:26;10897:2;10892:3;10888:12;10881:48;10955:2;10950:3;10946:12;10939:19;;10722:242;;;:::o;10970:374::-;;11133:67;11197:2;11192:3;11133:67;:::i;:::-;11126:74;;11230:34;11226:1;11221:3;11217:11;11210:55;11296:12;11291:2;11286:3;11282:12;11275:34;11335:2;11330:3;11326:12;11319:19;;11116:228;;;:::o;11350:373::-;;11513:67;11577:2;11572:3;11513:67;:::i;:::-;11506:74;;11610:34;11606:1;11601:3;11597:11;11590:55;11676:11;11671:2;11666:3;11662:12;11655:33;11714:2;11709:3;11705:12;11698:19;;11496:227;;;:::o;11729:330::-;;11892:67;11956:2;11951:3;11892:67;:::i;:::-;11885:74;;11989:34;11985:1;11980:3;11976:11;11969:55;12050:2;12045:3;12041:12;12034:19;;11875:184;;;:::o;12065:376::-;;12228:67;12292:2;12287:3;12228:67;:::i;:::-;12221:74;;12325:34;12321:1;12316:3;12312:11;12305:55;12391:14;12386:2;12381:3;12377:12;12370:36;12432:2;12427:3;12423:12;12416:19;;12211:230;;;:::o;12447:330::-;;12610:67;12674:2;12669:3;12610:67;:::i;:::-;12603:74;;12707:34;12703:1;12698:3;12694:11;12687:55;12768:2;12763:3;12759:12;12752:19;;12593:184;;;:::o;12783:373::-;;12946:67;13010:2;13005:3;12946:67;:::i;:::-;12939:74;;13043:34;13039:1;13034:3;13030:11;13023:55;13109:11;13104:2;13099:3;13095:12;13088:33;13147:2;13142:3;13138:12;13131:19;;12929:227;;;:::o;13162:379::-;;13325:67;13389:2;13384:3;13325:67;:::i;:::-;13318:74;;13422:34;13418:1;13413:3;13409:11;13402:55;13488:17;13483:2;13478:3;13474:12;13467:39;13532:2;13527:3;13523:12;13516:19;;13308:233;;;:::o;13547:365::-;;13710:67;13774:2;13769:3;13710:67;:::i;:::-;13703:74;;13807:34;13803:1;13798:3;13794:11;13787:55;13873:3;13868:2;13863:3;13859:12;13852:25;13903:2;13898:3;13894:12;13887:19;;13693:219;;;:::o;13918:381::-;;14081:67;14145:2;14140:3;14081:67;:::i;:::-;14074:74;;14178:34;14174:1;14169:3;14165:11;14158:55;14244:19;14239:2;14234:3;14230:12;14223:41;14290:2;14285:3;14281:12;14274:19;;14064:235;;;:::o;14305:324::-;;14468:67;14532:2;14527:3;14468:67;:::i;:::-;14461:74;;14565:28;14561:1;14556:3;14552:11;14545:49;14620:2;14615:3;14611:12;14604:19;;14451:178;;;:::o;14635:317::-;;14798:67;14862:2;14857:3;14798:67;:::i;:::-;14791:74;;14895:21;14891:1;14886:3;14882:11;14875:42;14943:2;14938:3;14934:12;14927:19;;14781:171;;;:::o;14958:379::-;;15121:67;15185:2;15180:3;15121:67;:::i;:::-;15114:74;;15218:34;15214:1;15209:3;15205:11;15198:55;15284:17;15279:2;15274:3;15270:12;15263:39;15328:2;15323:3;15319:12;15312:19;;15104:233;;;:::o;15343:108::-;15420:24;15438:5;15420:24;:::i;:::-;15415:3;15408:37;15398:53;;:::o;15457:118::-;15544:24;15562:5;15544:24;:::i;:::-;15539:3;15532:37;15522:53;;:::o;15581:435::-;;15783:95;15874:3;15865:6;15783:95;:::i;:::-;15776:102;;15895:95;15986:3;15977:6;15895:95;:::i;:::-;15888:102;;16007:3;16000:10;;15765:251;;;;;:::o;16022:222::-;;16153:2;16142:9;16138:18;16130:26;;16166:71;16234:1;16223:9;16219:17;16210:6;16166:71;:::i;:::-;16120:124;;;;:::o;16250:640::-;;16483:3;16472:9;16468:19;16460:27;;16497:71;16565:1;16554:9;16550:17;16541:6;16497:71;:::i;:::-;16578:72;16646:2;16635:9;16631:18;16622:6;16578:72;:::i;:::-;16660;16728:2;16717:9;16713:18;16704:6;16660:72;:::i;:::-;16779:9;16773:4;16769:20;16764:2;16753:9;16749:18;16742:48;16807:76;16878:4;16869:6;16807:76;:::i;:::-;16799:84;;16450:440;;;;;;;:::o;16896:373::-;;17077:2;17066:9;17062:18;17054:26;;17126:9;17120:4;17116:20;17112:1;17101:9;17097:17;17090:47;17154:108;17257:4;17248:6;17154:108;:::i;:::-;17146:116;;17044:225;;;;:::o;17275:210::-;;17400:2;17389:9;17385:18;17377:26;;17413:65;17475:1;17464:9;17460:17;17451:6;17413:65;:::i;:::-;17367:118;;;;:::o;17491:313::-;;17642:2;17631:9;17627:18;17619:26;;17691:9;17685:4;17681:20;17677:1;17666:9;17662:17;17655:47;17719:78;17792:4;17783:6;17719:78;:::i;:::-;17711:86;;17609:195;;;;:::o;17810:419::-;;18014:2;18003:9;17999:18;17991:26;;18063:9;18057:4;18053:20;18049:1;18038:9;18034:17;18027:47;18091:131;18217:4;18091:131;:::i;:::-;18083:139;;17981:248;;;:::o;18235:419::-;;18439:2;18428:9;18424:18;18416:26;;18488:9;18482:4;18478:20;18474:1;18463:9;18459:17;18452:47;18516:131;18642:4;18516:131;:::i;:::-;18508:139;;18406:248;;;:::o;18660:419::-;;18864:2;18853:9;18849:18;18841:26;;18913:9;18907:4;18903:20;18899:1;18888:9;18884:17;18877:47;18941:131;19067:4;18941:131;:::i;:::-;18933:139;;18831:248;;;:::o;19085:419::-;;19289:2;19278:9;19274:18;19266:26;;19338:9;19332:4;19328:20;19324:1;19313:9;19309:17;19302:47;19366:131;19492:4;19366:131;:::i;:::-;19358:139;;19256:248;;;:::o;19510:419::-;;19714:2;19703:9;19699:18;19691:26;;19763:9;19757:4;19753:20;19749:1;19738:9;19734:17;19727:47;19791:131;19917:4;19791:131;:::i;:::-;19783:139;;19681:248;;;:::o;19935:419::-;;20139:2;20128:9;20124:18;20116:26;;20188:9;20182:4;20178:20;20174:1;20163:9;20159:17;20152:47;20216:131;20342:4;20216:131;:::i;:::-;20208:139;;20106:248;;;:::o;20360:419::-;;20564:2;20553:9;20549:18;20541:26;;20613:9;20607:4;20603:20;20599:1;20588:9;20584:17;20577:47;20641:131;20767:4;20641:131;:::i;:::-;20633:139;;20531:248;;;:::o;20785:419::-;;20989:2;20978:9;20974:18;20966:26;;21038:9;21032:4;21028:20;21024:1;21013:9;21009:17;21002:47;21066:131;21192:4;21066:131;:::i;:::-;21058:139;;20956:248;;;:::o;21210:419::-;;21414:2;21403:9;21399:18;21391:26;;21463:9;21457:4;21453:20;21449:1;21438:9;21434:17;21427:47;21491:131;21617:4;21491:131;:::i;:::-;21483:139;;21381:248;;;:::o;21635:419::-;;21839:2;21828:9;21824:18;21816:26;;21888:9;21882:4;21878:20;21874:1;21863:9;21859:17;21852:47;21916:131;22042:4;21916:131;:::i;:::-;21908:139;;21806:248;;;:::o;22060:419::-;;22264:2;22253:9;22249:18;22241:26;;22313:9;22307:4;22303:20;22299:1;22288:9;22284:17;22277:47;22341:131;22467:4;22341:131;:::i;:::-;22333:139;;22231:248;;;:::o;22485:419::-;;22689:2;22678:9;22674:18;22666:26;;22738:9;22732:4;22728:20;22724:1;22713:9;22709:17;22702:47;22766:131;22892:4;22766:131;:::i;:::-;22758:139;;22656:248;;;:::o;22910:419::-;;23114:2;23103:9;23099:18;23091:26;;23163:9;23157:4;23153:20;23149:1;23138:9;23134:17;23127:47;23191:131;23317:4;23191:131;:::i;:::-;23183:139;;23081:248;;;:::o;23335:419::-;;23539:2;23528:9;23524:18;23516:26;;23588:9;23582:4;23578:20;23574:1;23563:9;23559:17;23552:47;23616:131;23742:4;23616:131;:::i;:::-;23608:139;;23506:248;;;:::o;23760:419::-;;23964:2;23953:9;23949:18;23941:26;;24013:9;24007:4;24003:20;23999:1;23988:9;23984:17;23977:47;24041:131;24167:4;24041:131;:::i;:::-;24033:139;;23931:248;;;:::o;24185:419::-;;24389:2;24378:9;24374:18;24366:26;;24438:9;24432:4;24428:20;24424:1;24413:9;24409:17;24402:47;24466:131;24592:4;24466:131;:::i;:::-;24458:139;;24356:248;;;:::o;24610:419::-;;24814:2;24803:9;24799:18;24791:26;;24863:9;24857:4;24853:20;24849:1;24838:9;24834:17;24827:47;24891:131;25017:4;24891:131;:::i;:::-;24883:139;;24781:248;;;:::o;25035:419::-;;25239:2;25228:9;25224:18;25216:26;;25288:9;25282:4;25278:20;25274:1;25263:9;25259:17;25252:47;25316:131;25442:4;25316:131;:::i;:::-;25308:139;;25206:248;;;:::o;25460:419::-;;25664:2;25653:9;25649:18;25641:26;;25713:9;25707:4;25703:20;25699:1;25688:9;25684:17;25677:47;25741:131;25867:4;25741:131;:::i;:::-;25733:139;;25631:248;;;:::o;25885:222::-;;26016:2;26005:9;26001:18;25993:26;;26029:71;26097:1;26086:9;26082:17;26073:6;26029:71;:::i;:::-;25983:124;;;;:::o;26113:283::-;;26179:2;26173:9;26163:19;;26221:4;26213:6;26209:17;26328:6;26316:10;26313:22;26292:18;26280:10;26277:34;26274:62;26271:2;;;26339:18;;:::i;:::-;26271:2;26379:10;26375:2;26368:22;26153:243;;;;:::o;26402:331::-;;26553:18;26545:6;26542:30;26539:2;;;26575:18;;:::i;:::-;26539:2;26660:4;26656:9;26649:4;26641:6;26637:17;26633:33;26625:41;;26721:4;26715;26711:15;26703:23;;26468:265;;;:::o;26739:332::-;;26891:18;26883:6;26880:30;26877:2;;;26913:18;;:::i;:::-;26877:2;26998:4;26994:9;26987:4;26979:6;26975:17;26971:33;26963:41;;27059:4;27053;27049:15;27041:23;;26806:265;;;:::o;27077:132::-;;27167:3;27159:11;;27197:4;27192:3;27188:14;27180:22;;27149:60;;;:::o;27215:114::-;;27316:5;27310:12;27300:22;;27289:40;;;:::o;27335:98::-;;27420:5;27414:12;27404:22;;27393:40;;;:::o;27439:99::-;;27525:5;27519:12;27509:22;;27498:40;;;:::o;27544:113::-;;27646:4;27641:3;27637:14;27629:22;;27619:38;;;:::o;27663:184::-;;27796:6;27791:3;27784:19;27836:4;27831:3;27827:14;27812:29;;27774:73;;;;:::o;27853:168::-;;27970:6;27965:3;27958:19;28010:4;28005:3;28001:14;27986:29;;27948:73;;;;:::o;28027:169::-;;28145:6;28140:3;28133:19;28185:4;28180:3;28176:14;28161:29;;28123:73;;;;:::o;28202:148::-;;28341:3;28326:18;;28316:34;;;;:::o;28356:305::-;;28415:20;28433:1;28415:20;:::i;:::-;28410:25;;28449:20;28467:1;28449:20;:::i;:::-;28444:25;;28603:1;28535:66;28531:74;28528:1;28525:81;28522:2;;;28609:18;;:::i;:::-;28522:2;28653:1;28650;28646:9;28639:16;;28400:261;;;;:::o;28667:185::-;;28724:20;28742:1;28724:20;:::i;:::-;28719:25;;28758:20;28776:1;28758:20;:::i;:::-;28753:25;;28797:1;28787:2;;28802:18;;:::i;:::-;28787:2;28844:1;28841;28837:9;28832:14;;28709:143;;;;:::o;28858:191::-;;28918:20;28936:1;28918:20;:::i;:::-;28913:25;;28952:20;28970:1;28952:20;:::i;:::-;28947:25;;28991:1;28988;28985:8;28982:2;;;28996:18;;:::i;:::-;28982:2;29041:1;29038;29034:9;29026:17;;28903:146;;;;:::o;29055:96::-;;29121:24;29139:5;29121:24;:::i;:::-;29110:35;;29100:51;;;:::o;29157:90::-;;29234:5;29227:13;29220:21;29209:32;;29199:48;;;:::o;29253:149::-;;29329:66;29322:5;29318:78;29307:89;;29297:105;;;:::o;29408:126::-;;29485:42;29478:5;29474:54;29463:65;;29453:81;;;:::o;29540:77::-;;29606:5;29595:16;;29585:32;;;:::o;29623:154::-;29707:6;29702:3;29697;29684:30;29769:1;29760:6;29755:3;29751:16;29744:27;29674:103;;;:::o;29783:307::-;29851:1;29861:113;29875:6;29872:1;29869:13;29861:113;;;29960:1;29955:3;29951:11;29945:18;29941:1;29936:3;29932:11;29925:39;29897:2;29894:1;29890:10;29885:15;;29861:113;;;29992:6;29989:1;29986:13;29983:2;;;30072:1;30063:6;30058:3;30054:16;30047:27;29983:2;29832:258;;;;:::o;30096:320::-;;30177:1;30171:4;30167:12;30157:22;;30224:1;30218:4;30214:12;30245:18;30235:2;;30301:4;30293:6;30289:17;30279:27;;30235:2;30363;30355:6;30352:14;30332:18;30329:38;30326:2;;;30382:18;;:::i;:::-;30326:2;30147:269;;;;:::o;30422:233::-;;30484:24;30502:5;30484:24;:::i;:::-;30475:33;;30530:66;30523:5;30520:77;30517:2;;;30600:18;;:::i;:::-;30517:2;30647:1;30640:5;30636:13;30629:20;;30465:190;;;:::o;30661:176::-;;30710:20;30728:1;30710:20;:::i;:::-;30705:25;;30744:20;30762:1;30744:20;:::i;:::-;30739:25;;30783:1;30773:2;;30788:18;;:::i;:::-;30773:2;30829:1;30826;30822:9;30817:14;;30695:142;;;;:::o;30843:180::-;30891:77;30888:1;30881:88;30988:4;30985:1;30978:15;31012:4;31009:1;31002:15;31029:180;31077:77;31074:1;31067:88;31174:4;31171:1;31164:15;31198:4;31195:1;31188:15;31215:180;31263:77;31260:1;31253:88;31360:4;31357:1;31350:15;31384:4;31381:1;31374:15;31401:180;31449:77;31446:1;31439:88;31546:4;31543:1;31536:15;31570:4;31567:1;31560:15;31587:102;;31679:2;31675:7;31670:2;31663:5;31659:14;31655:28;31645:38;;31635:54;;;:::o;31695:122::-;31768:24;31786:5;31768:24;:::i;:::-;31761:5;31758:35;31748:2;;31807:1;31804;31797:12;31748:2;31738:79;:::o;31823:116::-;31893:21;31908:5;31893:21;:::i;:::-;31886:5;31883:32;31873:2;;31929:1;31926;31919:12;31873:2;31863:76;:::o;31945:120::-;32017:23;32034:5;32017:23;:::i;:::-;32010:5;32007:34;31997:2;;32055:1;32052;32045:12;31997:2;31987:78;:::o;32071:122::-;32144:24;32162:5;32144:24;:::i;:::-;32137:5;32134:35;32124:2;;32183:1;32180;32173:12;32124:2;32114:79;:::o

Swarm Source

ipfs://880996a094d3de3e90cc8d9277250cf4881494b7180fd6e3bc12774e99792098
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.