ETH Price: $2,494.03 (-3.64%)

Token

ApeRaffle_Eth (APEONE)
 

Overview

Max Total Supply

100 APEONE

Holders

92

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
cryptgod.eth
Balance
1 APEONE
0x6e3b39ae89e153792df33342a4f4c69cf4977331
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:
ApeRaffle_Eth

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at polygonscan.com on 2022-01-26
*/

/**
 *Submitted for verification at Etherscan.io on 2021-12-18
*/

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

// OpenZeppelin Contracts v4.4.1 (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;
}



// OpenZeppelin Contracts v4.4.1 (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);
}


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

pragma solidity ^0.8.0;


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

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

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


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

pragma solidity ^0.8.0;


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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (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(), ".json")) : "";
         return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI)) : "";
    }

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (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);
}



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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


pragma solidity ^0.8.0;


contract ApeRaffle_Eth is ERC721Enumerable, Ownable {

    uint256 public apePrice = 80000000000000000;
    uint public constant maxApePurchase = 1;
    uint public ApeSup = 100;
    bool public drop_is_active = false;
    bool public presale_is_active = true;
    string public baseURI = "https://ipfs.io/ipfs/QmRExheDJcrs1zi8AyKvVdeJYz5J9pYJ99uUdgtvGcgUvT/";
    uint256 public tokensMinted = 0;

    mapping(address => uint) addressesThatMinted;

    struct Whitelistaddr {
        uint256 presalemints;
        bool exists;
    }
    mapping(address => Whitelistaddr) private whitelist;

    constructor() ERC721("ApeRaffle_Eth", "APEONE"){
    whitelist[0x0B0237aD59e1BbCb611fdf0c9Fa07350C3f41e87].exists = true;
    }

    function OnWhiteList(address walletaddr)
    public
    view
    returns (bool)
    {
        if (whitelist[walletaddr].exists){
            return true;
        }
        else{
            return false;
        }
    }

    function addToWhiteList (address[] memory newWalletaddr) public onlyOwner{
        for (uint256 i = 0; i<newWalletaddr.length;i++){
            whitelist[newWalletaddr[i]].exists = true;
        }        
    }

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

    function flipDropState() public onlyOwner {
        drop_is_active = !drop_is_active;
    }

    function flipPresaleSate() public onlyOwner {
        presale_is_active = !presale_is_active;
    }

    function PresaleMint(uint256 numberOfTokens) public payable{
        require(presale_is_active, "Please wait until the PreMint has begun!");
        require(whitelist[msg.sender].exists == true, "This Wallet is not able mint for presale"); 
        require(numberOfTokens > 0 && tokensMinted + numberOfTokens <= ApeSup, "Purchase would exceed current max supply of APERFL's");
        require(whitelist[msg.sender].presalemints + numberOfTokens <= 10,"This Wallet has already minted its 10 reserved APERFL's");
        require(msg.value >= apePrice * numberOfTokens, "ETH value sent is too little for this many APERFL's");

        for(uint i=0;i<numberOfTokens;i++){
            if (tokensMinted < ApeSup){
                whitelist[msg.sender].presalemints++;
                tokensMinted++;
                _safeMint(msg.sender, tokensMinted);
            }
        }

    }

    function mintApeRaffle(uint numberOfTokens) public payable {
        require(drop_is_active, "Please wait until the Public sale is active to mint");
        require(numberOfTokens > 0 && numberOfTokens <= maxApePurchase);
        require(tokensMinted + numberOfTokens <= ApeSup, "Purchase would exceed max supply of APERFL's");
        require(msg.value >= apePrice * numberOfTokens, "ETH value sent is too little for this many APERFL's");
        require(((addressesThatMinted[msg.sender] + numberOfTokens) * 100) <= 100, "You have already minted in this 100 set");

        addressesThatMinted[msg.sender] += numberOfTokens;

        for (uint i=0;i<numberOfTokens;i++){
            if (tokensMinted < ApeSup){
                tokensMinted++;
                _safeMint(msg.sender, tokensMinted);
            }
        }
    }

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

    function setBaseURI(string memory newBaseURI)public onlyOwner{
        baseURI = newBaseURI;
    }
    function changeMintPrice(uint256 newPrice) public onlyOwner {
        // require(newPrice < apePrice); removing mandate to go lower
        apePrice = newPrice;
    }

    function changeMintSupply(uint256 newSupply) public onlyOwner {
        // require(newSupply < ApeSup); removing mandate to go lower
        require(newSupply > totalSupply());
        ApeSup = newSupply;
    }
}

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":"ApeSup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"walletaddr","type":"address"}],"name":"OnWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"PresaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newWalletaddr","type":"address[]"}],"name":"addToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"apePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changeMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSupply","type":"uint256"}],"name":"changeMintSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"drop_is_active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipDropState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipPresaleSate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxApePurchase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintApeRaffle","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale_is_active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMinted","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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405267011c37937e080000600b556064600c556000600d60006101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff02191690831515021790555060405180608001604052806044815260200162004a6060449139600e90805190602001906200007c92919062000293565b506000600f553480156200008f57600080fd5b506040518060400160405280600d81526020017f417065526166666c655f457468000000000000000000000000000000000000008152506040518060400160405280600681526020017f4150454f4e45000000000000000000000000000000000000000000000000000081525081600090805190602001906200011492919062000293565b5080600190805190602001906200012d92919062000293565b5050506200015062000144620001c560201b60201c565b620001cd60201b60201c565b600160116000730b0237ad59e1bbcb611fdf0c9fa07350c3f41e8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff021916908315150217905550620003a8565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002a19062000343565b90600052602060002090601f016020900481019282620002c5576000855562000311565b82601f10620002e057805160ff191683800117855562000311565b8280016001018555821562000311579182015b8281111562000310578251825591602001919060010190620002f3565b5b50905062000320919062000324565b5090565b5b808211156200033f57600081600090555060010162000325565b5090565b600060028204905060018216806200035c57607f821691505b6020821081141562000373576200037262000379565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6146a880620003b86000396000f3fe60806040526004361061020f5760003560e01c80636c0360eb1161011857806396f8f6dd116100a0578063b88d4fde1161006f578063b88d4fde1461074b578063c87b56dd14610774578063dd764566146107b1578063e985e9c5146107da578063f2fde38b146108175761020f565b806396f8f6dd146106d8578063a22cb465146106ef578063a31a13eb14610718578063af27073e1461072f5761020f565b8063740d73f3116100e7578063740d73f3146105f157806377bf14111461061a5780637a3f451e146106575780638da5cb5b1461068257806395d89b41146106ad5761020f565b80636c0360eb146105475780636de9f32b1461057257806370a082311461059d578063715018a6146105da5761020f565b80632f745c591161019b5780634f6ccce71161016a5780634f6ccce71461044e578063528173a61461048b57806355f804b3146104b6578063571dff3b146104df5780636352211e1461050a5761020f565b80632f745c59146103a85780633ccfd60b146103e55780633fd17366146103fc57806342842e0e146104255761020f565b8063095ea7b3116101e2578063095ea7b3146102e457806314fcdf491461030d57806318160ddd1461032957806318308a581461035457806323b872dd1461037f5761020f565b806301ffc9a714610214578063052939051461025157806306fdde031461027c578063081812fc146102a7575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906132fd565b610840565b6040516102489190613ecb565b60405180910390f35b34801561025d57600080fd5b506102666108ba565b6040516102739190613ecb565b60405180910390f35b34801561028857600080fd5b506102916108cd565b60405161029e9190613ee6565b60405180910390f35b3480156102b357600080fd5b506102ce60048036038101906102c99190613390565b61095f565b6040516102db9190613e64565b60405180910390f35b3480156102f057600080fd5b5061030b60048036038101906103069190613280565b6109e4565b005b61032760048036038101906103229190613390565b610afc565b005b34801561033557600080fd5b5061033e610d49565b60405161034b9190614248565b60405180910390f35b34801561036057600080fd5b50610369610d56565b6040516103769190613ecb565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a1919061317a565b610d69565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190613280565b610dc9565b6040516103dc9190614248565b60405180910390f35b3480156103f157600080fd5b506103fa610e6e565b005b34801561040857600080fd5b50610423600480360381019061041e9190613390565b610f2a565b005b34801561043157600080fd5b5061044c6004803603810190610447919061317a565b610fb0565b005b34801561045a57600080fd5b5061047560048036038101906104709190613390565b610fd0565b6040516104829190614248565b60405180910390f35b34801561049757600080fd5b506104a0611067565b6040516104ad9190614248565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d8919061334f565b61106d565b005b3480156104eb57600080fd5b506104f4611103565b6040516105019190614248565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c9190613390565b611108565b60405161053e9190613e64565b60405180910390f35b34801561055357600080fd5b5061055c6111ba565b6040516105699190613ee6565b60405180910390f35b34801561057e57600080fd5b50610587611248565b6040516105949190614248565b60405180910390f35b3480156105a957600080fd5b506105c460048036038101906105bf9190613115565b61124e565b6040516105d19190614248565b60405180910390f35b3480156105e657600080fd5b506105ef611306565b005b3480156105fd57600080fd5b50610618600480360381019061061391906132bc565b61138e565b005b34801561062657600080fd5b50610641600480360381019061063c9190613115565b6114c8565b60405161064e9190613ecb565b60405180910390f35b34801561066357600080fd5b5061066c611532565b6040516106799190614248565b60405180910390f35b34801561068e57600080fd5b50610697611538565b6040516106a49190613e64565b60405180910390f35b3480156106b957600080fd5b506106c2611562565b6040516106cf9190613ee6565b60405180910390f35b3480156106e457600080fd5b506106ed6115f4565b005b3480156106fb57600080fd5b5061071660048036038101906107119190613244565b61169c565b005b34801561072457600080fd5b5061072d6116b2565b005b61074960048036038101906107449190613390565b61175a565b005b34801561075757600080fd5b50610772600480360381019061076d91906131c9565b611a29565b005b34801561078057600080fd5b5061079b60048036038101906107969190613390565b611a8b565b6040516107a89190613ee6565b60405180910390f35b3480156107bd57600080fd5b506107d860048036038101906107d39190613390565b611b28565b005b3480156107e657600080fd5b5061080160048036038101906107fc919061313e565b611bc1565b60405161080e9190613ecb565b60405180910390f35b34801561082357600080fd5b5061083e60048036038101906108399190613115565b611c55565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108b357506108b282611d4d565b5b9050919050565b600d60009054906101000a900460ff1681565b6060600080546108dc906144fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610908906144fd565b80156109555780601f1061092a57610100808354040283529160200191610955565b820191906000526020600020905b81548152906001019060200180831161093857829003601f168201915b5050505050905090565b600061096a82611e2f565b6109a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a0906140c8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109ef82611108565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5790614188565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a7f611e9b565b73ffffffffffffffffffffffffffffffffffffffff161480610aae5750610aad81610aa8611e9b565b611bc1565b5b610aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae490614048565b60405180910390fd5b610af78383611ea3565b505050565b600d60009054906101000a900460ff16610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290613fa8565b60405180910390fd5b600081118015610b5c575060018111155b610b6557600080fd5b600c5481600f54610b769190614363565b1115610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90614208565b60405180910390fd5b80600b54610bc591906143b9565b341015610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90614168565b60405180910390fd5b60648082601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c559190614363565b610c5f91906143b9565b1115610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9790613f88565b60405180910390fd5b80601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610cef9190614363565b9250508190555060005b81811015610d4557600c54600f541015610d3257600f6000815480929190610d209061452f565b9190505550610d3133600f54611f5c565b5b8080610d3d9061452f565b915050610cf9565b5050565b6000600880549050905090565b600d60019054906101000a900460ff1681565b610d7a610d74611e9b565b82611f7a565b610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db0906141a8565b60405180910390fd5b610dc4838383612058565b505050565b6000610dd48361124e565b8210610e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0c90613f08565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e76611e9b565b73ffffffffffffffffffffffffffffffffffffffff16610e94611538565b73ffffffffffffffffffffffffffffffffffffffff1614610eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee190614108565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610f2857600080fd5b565b610f32611e9b565b73ffffffffffffffffffffffffffffffffffffffff16610f50611538565b73ffffffffffffffffffffffffffffffffffffffff1614610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d90614108565b60405180910390fd5b80600b8190555050565b610fcb83838360405180602001604052806000815250611a29565b505050565b6000610fda610d49565b821061101b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611012906141c8565b60405180910390fd5b60088281548110611055577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b600c5481565b611075611e9b565b73ffffffffffffffffffffffffffffffffffffffff16611093611538565b73ffffffffffffffffffffffffffffffffffffffff16146110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614108565b60405180910390fd5b80600e90805190602001906110ff929190612ea3565b5050565b600181565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a890614088565b60405180910390fd5b80915050919050565b600e80546111c7906144fd565b80601f01602080910402602001604051908101604052809291908181526020018280546111f3906144fd565b80156112405780601f1061121557610100808354040283529160200191611240565b820191906000526020600020905b81548152906001019060200180831161122357829003601f168201915b505050505081565b600f5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b690614068565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61130e611e9b565b73ffffffffffffffffffffffffffffffffffffffff1661132c611538565b73ffffffffffffffffffffffffffffffffffffffff1614611382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137990614108565b60405180910390fd5b61138c60006122b4565b565b611396611e9b565b73ffffffffffffffffffffffffffffffffffffffff166113b4611538565b73ffffffffffffffffffffffffffffffffffffffff161461140a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140190614108565b60405180910390fd5b60005b81518110156114c457600160116000848481518110611455577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff02191690831515021790555080806114bc9061452f565b91505061140d565b5050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff1615611528576001905061152d565b600090505b919050565b600b5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611571906144fd565b80601f016020809104026020016040519081016040528092919081815260200182805461159d906144fd565b80156115ea5780601f106115bf576101008083540402835291602001916115ea565b820191906000526020600020905b8154815290600101906020018083116115cd57829003601f168201915b5050505050905090565b6115fc611e9b565b73ffffffffffffffffffffffffffffffffffffffff1661161a611538565b73ffffffffffffffffffffffffffffffffffffffff1614611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790614108565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b6116ae6116a7611e9b565b838361237a565b5050565b6116ba611e9b565b73ffffffffffffffffffffffffffffffffffffffff166116d8611538565b73ffffffffffffffffffffffffffffffffffffffff161461172e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172590614108565b60405180910390fd5b600d60019054906101000a900460ff1615600d60016101000a81548160ff021916908315150217905550565b600d60019054906101000a900460ff166117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090614008565b60405180910390fd5b60011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff1615151461183f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611836906141e8565b60405180910390fd5b60008111801561185e5750600c5481600f5461185b9190614363565b11155b61189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189490614228565b60405180910390fd5b600a81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546118ed9190614363565b111561192e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611925906140e8565b60405180910390fd5b80600b5461193c91906143b9565b34101561197e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197590614168565b60405180910390fd5b60005b81811015611a2557600c54600f541015611a1257601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008154809291906119e89061452f565b9190505550600f6000815480929190611a009061452f565b9190505550611a1133600f54611f5c565b5b8080611a1d9061452f565b915050611981565b5050565b611a3a611a34611e9b565b83611f7a565b611a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a70906141a8565b60405180910390fd5b611a85848484846124e7565b50505050565b6060611a9682611e2f565b611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc90614148565b60405180910390fd5b6000611adf612543565b90506000815111611aff5760405180602001604052806000815250611b20565b80604051602001611b109190613e4d565b6040516020818303038152906040525b915050919050565b611b30611e9b565b73ffffffffffffffffffffffffffffffffffffffff16611b4e611538565b73ffffffffffffffffffffffffffffffffffffffff1614611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90614108565b60405180910390fd5b611bac610d49565b8111611bb757600080fd5b80600c8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c5d611e9b565b73ffffffffffffffffffffffffffffffffffffffff16611c7b611538565b73ffffffffffffffffffffffffffffffffffffffff1614611cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc890614108565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890613f48565b60405180910390fd5b611d4a816122b4565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e1857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611e285750611e27826125d5565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f1683611108565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611f7682826040518060200160405280600081525061263f565b5050565b6000611f8582611e2f565b611fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbb90614028565b60405180910390fd5b6000611fcf83611108565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061203e57508373ffffffffffffffffffffffffffffffffffffffff166120268461095f565b73ffffffffffffffffffffffffffffffffffffffff16145b8061204f575061204e8185611bc1565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661207882611108565b73ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590614128565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590613fc8565b60405180910390fd5b61214983838361269a565b612154600082611ea3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121a49190614413565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121fb9190614363565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e090613fe8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124da9190613ecb565b60405180910390a3505050565b6124f2848484612058565b6124fe848484846127ae565b61253d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253490613f28565b60405180910390fd5b50505050565b6060600e8054612552906144fd565b80601f016020809104026020016040519081016040528092919081815260200182805461257e906144fd565b80156125cb5780601f106125a0576101008083540402835291602001916125cb565b820191906000526020600020905b8154815290600101906020018083116125ae57829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6126498383612945565b61265660008484846127ae565b612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c90613f28565b60405180910390fd5b505050565b6126a5838383612b13565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e8576126e381612b18565b612727565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612726576127258382612b61565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561276a5761276581612cce565b6127a9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127a8576127a78282612e11565b5b5b505050565b60006127cf8473ffffffffffffffffffffffffffffffffffffffff16612e90565b15612938578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127f8611e9b565b8786866040518563ffffffff1660e01b815260040161281a9493929190613e7f565b602060405180830381600087803b15801561283457600080fd5b505af192505050801561286557506040513d601f19601f820116820180604052508101906128629190613326565b60015b6128e8573d8060008114612895576040519150601f19603f3d011682016040523d82523d6000602084013e61289a565b606091505b506000815114156128e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d790613f28565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061293d565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ac906140a8565b60405180910390fd5b6129be81611e2f565b156129fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f590613f68565b60405180910390fd5b612a0a6000838361269a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a5a9190614363565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b6e8461124e565b612b789190614413565b9050600060076000848152602001908152602001600020549050818114612c5d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612ce29190614413565b9050600060096000848152602001908152602001600020549050600060088381548110612d38577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612d80577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612df5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612e1c8361124e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612eaf906144fd565b90600052602060002090601f016020900481019282612ed15760008555612f18565b82601f10612eea57805160ff1916838001178555612f18565b82800160010185558215612f18579182015b82811115612f17578251825591602001919060010190612efc565b5b509050612f259190612f29565b5090565b5b80821115612f42576000816000905550600101612f2a565b5090565b6000612f59612f5484614294565b614263565b90508083825260208201905082856020860282011115612f7857600080fd5b60005b85811015612fa85781612f8e888261302e565b845260208401935060208301925050600181019050612f7b565b5050509392505050565b6000612fc5612fc0846142c0565b614263565b905082815260208101848484011115612fdd57600080fd5b612fe88482856144bb565b509392505050565b6000613003612ffe846142f0565b614263565b90508281526020810184848401111561301b57600080fd5b6130268482856144bb565b509392505050565b60008135905061303d81614616565b92915050565b600082601f83011261305457600080fd5b8135613064848260208601612f46565b91505092915050565b60008135905061307c8161462d565b92915050565b60008135905061309181614644565b92915050565b6000815190506130a681614644565b92915050565b600082601f8301126130bd57600080fd5b81356130cd848260208601612fb2565b91505092915050565b600082601f8301126130e757600080fd5b81356130f7848260208601612ff0565b91505092915050565b60008135905061310f8161465b565b92915050565b60006020828403121561312757600080fd5b60006131358482850161302e565b91505092915050565b6000806040838503121561315157600080fd5b600061315f8582860161302e565b92505060206131708582860161302e565b9150509250929050565b60008060006060848603121561318f57600080fd5b600061319d8682870161302e565b93505060206131ae8682870161302e565b92505060406131bf86828701613100565b9150509250925092565b600080600080608085870312156131df57600080fd5b60006131ed8782880161302e565b94505060206131fe8782880161302e565b935050604061320f87828801613100565b925050606085013567ffffffffffffffff81111561322c57600080fd5b613238878288016130ac565b91505092959194509250565b6000806040838503121561325757600080fd5b60006132658582860161302e565b92505060206132768582860161306d565b9150509250929050565b6000806040838503121561329357600080fd5b60006132a18582860161302e565b92505060206132b285828601613100565b9150509250929050565b6000602082840312156132ce57600080fd5b600082013567ffffffffffffffff8111156132e857600080fd5b6132f484828501613043565b91505092915050565b60006020828403121561330f57600080fd5b600061331d84828501613082565b91505092915050565b60006020828403121561333857600080fd5b600061334684828501613097565b91505092915050565b60006020828403121561336157600080fd5b600082013567ffffffffffffffff81111561337b57600080fd5b613387848285016130d6565b91505092915050565b6000602082840312156133a257600080fd5b60006133b084828501613100565b91505092915050565b6133c281614447565b82525050565b6133d181614459565b82525050565b60006133e282614320565b6133ec8185614336565b93506133fc8185602086016144ca565b61340581614605565b840191505092915050565b600061341b8261432b565b6134258185614347565b93506134358185602086016144ca565b61343e81614605565b840191505092915050565b60006134548261432b565b61345e8185614358565b935061346e8185602086016144ca565b80840191505092915050565b6000613487602b83614347565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006134ed603283614347565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613553602683614347565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135b9601c83614347565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006135f9602783614347565b91507f596f75206861766520616c7265616479206d696e74656420696e20746869732060008301527f31303020736574000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061365f603383614347565b91507f506c65617365207761697420756e74696c20746865205075626c69632073616c60008301527f652069732061637469766520746f206d696e74000000000000000000000000006020830152604082019050919050565b60006136c5602483614347565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061372b601983614347565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b600061376b602883614347565b91507f506c65617365207761697420756e74696c20746865205072654d696e7420686160008301527f7320626567756e210000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137d1602c83614347565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613837603883614347565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061389d602a83614347565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613903602983614347565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613969602083614347565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006139a9602c83614347565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613a0f603783614347565b91507f546869732057616c6c65742068617320616c7265616479206d696e746564206960008301527f74732031302072657365727665642041504552464c27730000000000000000006020830152604082019050919050565b6000613a75602083614347565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613ab5602983614347565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b1b602f83614347565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613b81603383614347565b91507f4554482076616c75652073656e7420697320746f6f206c6974746c6520666f7260008301527f2074686973206d616e792041504552464c2773000000000000000000000000006020830152604082019050919050565b6000613be7602183614347565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c4d603183614347565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613cb3602c83614347565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613d19602883614347565b91507f546869732057616c6c6574206973206e6f742061626c65206d696e7420666f7260008301527f2070726573616c650000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d7f602c83614347565b91507f507572636861736520776f756c6420657863656564206d617820737570706c7960008301527f206f662041504552464c277300000000000000000000000000000000000000006020830152604082019050919050565b6000613de5603483614347565b91507f507572636861736520776f756c64206578636565642063757272656e74206d6160008301527f7820737570706c79206f662041504552464c27730000000000000000000000006020830152604082019050919050565b613e47816144b1565b82525050565b6000613e598284613449565b915081905092915050565b6000602082019050613e7960008301846133b9565b92915050565b6000608082019050613e9460008301876133b9565b613ea160208301866133b9565b613eae6040830185613e3e565b8181036060830152613ec081846133d7565b905095945050505050565b6000602082019050613ee060008301846133c8565b92915050565b60006020820190508181036000830152613f008184613410565b905092915050565b60006020820190508181036000830152613f218161347a565b9050919050565b60006020820190508181036000830152613f41816134e0565b9050919050565b60006020820190508181036000830152613f6181613546565b9050919050565b60006020820190508181036000830152613f81816135ac565b9050919050565b60006020820190508181036000830152613fa1816135ec565b9050919050565b60006020820190508181036000830152613fc181613652565b9050919050565b60006020820190508181036000830152613fe1816136b8565b9050919050565b600060208201905081810360008301526140018161371e565b9050919050565b600060208201905081810360008301526140218161375e565b9050919050565b60006020820190508181036000830152614041816137c4565b9050919050565b600060208201905081810360008301526140618161382a565b9050919050565b6000602082019050818103600083015261408181613890565b9050919050565b600060208201905081810360008301526140a1816138f6565b9050919050565b600060208201905081810360008301526140c18161395c565b9050919050565b600060208201905081810360008301526140e18161399c565b9050919050565b6000602082019050818103600083015261410181613a02565b9050919050565b6000602082019050818103600083015261412181613a68565b9050919050565b6000602082019050818103600083015261414181613aa8565b9050919050565b6000602082019050818103600083015261416181613b0e565b9050919050565b6000602082019050818103600083015261418181613b74565b9050919050565b600060208201905081810360008301526141a181613bda565b9050919050565b600060208201905081810360008301526141c181613c40565b9050919050565b600060208201905081810360008301526141e181613ca6565b9050919050565b6000602082019050818103600083015261420181613d0c565b9050919050565b6000602082019050818103600083015261422181613d72565b9050919050565b6000602082019050818103600083015261424181613dd8565b9050919050565b600060208201905061425d6000830184613e3e565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561428a576142896145d6565b5b8060405250919050565b600067ffffffffffffffff8211156142af576142ae6145d6565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156142db576142da6145d6565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561430b5761430a6145d6565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061436e826144b1565b9150614379836144b1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143ae576143ad614578565b5b828201905092915050565b60006143c4826144b1565b91506143cf836144b1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561440857614407614578565b5b828202905092915050565b600061441e826144b1565b9150614429836144b1565b92508282101561443c5761443b614578565b5b828203905092915050565b600061445282614491565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144e85780820151818401526020810190506144cd565b838111156144f7576000848401525b50505050565b6000600282049050600182168061451557607f821691505b60208210811415614529576145286145a7565b5b50919050565b600061453a826144b1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561456d5761456c614578565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61461f81614447565b811461462a57600080fd5b50565b61463681614459565b811461464157600080fd5b50565b61464d81614465565b811461465857600080fd5b50565b614664816144b1565b811461466f57600080fd5b5056fea264697066735822122003a3d0b032e94d42508a11e8465614c0c8b8bd6b57e4c6f6f6ba489928d0f07564736f6c6343000800003368747470733a2f2f697066732e696f2f697066732f516d5245786865444a637273317a693841794b765664654a597a354a3970594a39397555646774764763675576542f

Deployed Bytecode

0x60806040526004361061020f5760003560e01c80636c0360eb1161011857806396f8f6dd116100a0578063b88d4fde1161006f578063b88d4fde1461074b578063c87b56dd14610774578063dd764566146107b1578063e985e9c5146107da578063f2fde38b146108175761020f565b806396f8f6dd146106d8578063a22cb465146106ef578063a31a13eb14610718578063af27073e1461072f5761020f565b8063740d73f3116100e7578063740d73f3146105f157806377bf14111461061a5780637a3f451e146106575780638da5cb5b1461068257806395d89b41146106ad5761020f565b80636c0360eb146105475780636de9f32b1461057257806370a082311461059d578063715018a6146105da5761020f565b80632f745c591161019b5780634f6ccce71161016a5780634f6ccce71461044e578063528173a61461048b57806355f804b3146104b6578063571dff3b146104df5780636352211e1461050a5761020f565b80632f745c59146103a85780633ccfd60b146103e55780633fd17366146103fc57806342842e0e146104255761020f565b8063095ea7b3116101e2578063095ea7b3146102e457806314fcdf491461030d57806318160ddd1461032957806318308a581461035457806323b872dd1461037f5761020f565b806301ffc9a714610214578063052939051461025157806306fdde031461027c578063081812fc146102a7575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906132fd565b610840565b6040516102489190613ecb565b60405180910390f35b34801561025d57600080fd5b506102666108ba565b6040516102739190613ecb565b60405180910390f35b34801561028857600080fd5b506102916108cd565b60405161029e9190613ee6565b60405180910390f35b3480156102b357600080fd5b506102ce60048036038101906102c99190613390565b61095f565b6040516102db9190613e64565b60405180910390f35b3480156102f057600080fd5b5061030b60048036038101906103069190613280565b6109e4565b005b61032760048036038101906103229190613390565b610afc565b005b34801561033557600080fd5b5061033e610d49565b60405161034b9190614248565b60405180910390f35b34801561036057600080fd5b50610369610d56565b6040516103769190613ecb565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a1919061317a565b610d69565b005b3480156103b457600080fd5b506103cf60048036038101906103ca9190613280565b610dc9565b6040516103dc9190614248565b60405180910390f35b3480156103f157600080fd5b506103fa610e6e565b005b34801561040857600080fd5b50610423600480360381019061041e9190613390565b610f2a565b005b34801561043157600080fd5b5061044c6004803603810190610447919061317a565b610fb0565b005b34801561045a57600080fd5b5061047560048036038101906104709190613390565b610fd0565b6040516104829190614248565b60405180910390f35b34801561049757600080fd5b506104a0611067565b6040516104ad9190614248565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d8919061334f565b61106d565b005b3480156104eb57600080fd5b506104f4611103565b6040516105019190614248565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c9190613390565b611108565b60405161053e9190613e64565b60405180910390f35b34801561055357600080fd5b5061055c6111ba565b6040516105699190613ee6565b60405180910390f35b34801561057e57600080fd5b50610587611248565b6040516105949190614248565b60405180910390f35b3480156105a957600080fd5b506105c460048036038101906105bf9190613115565b61124e565b6040516105d19190614248565b60405180910390f35b3480156105e657600080fd5b506105ef611306565b005b3480156105fd57600080fd5b50610618600480360381019061061391906132bc565b61138e565b005b34801561062657600080fd5b50610641600480360381019061063c9190613115565b6114c8565b60405161064e9190613ecb565b60405180910390f35b34801561066357600080fd5b5061066c611532565b6040516106799190614248565b60405180910390f35b34801561068e57600080fd5b50610697611538565b6040516106a49190613e64565b60405180910390f35b3480156106b957600080fd5b506106c2611562565b6040516106cf9190613ee6565b60405180910390f35b3480156106e457600080fd5b506106ed6115f4565b005b3480156106fb57600080fd5b5061071660048036038101906107119190613244565b61169c565b005b34801561072457600080fd5b5061072d6116b2565b005b61074960048036038101906107449190613390565b61175a565b005b34801561075757600080fd5b50610772600480360381019061076d91906131c9565b611a29565b005b34801561078057600080fd5b5061079b60048036038101906107969190613390565b611a8b565b6040516107a89190613ee6565b60405180910390f35b3480156107bd57600080fd5b506107d860048036038101906107d39190613390565b611b28565b005b3480156107e657600080fd5b5061080160048036038101906107fc919061313e565b611bc1565b60405161080e9190613ecb565b60405180910390f35b34801561082357600080fd5b5061083e60048036038101906108399190613115565b611c55565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108b357506108b282611d4d565b5b9050919050565b600d60009054906101000a900460ff1681565b6060600080546108dc906144fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610908906144fd565b80156109555780601f1061092a57610100808354040283529160200191610955565b820191906000526020600020905b81548152906001019060200180831161093857829003601f168201915b5050505050905090565b600061096a82611e2f565b6109a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a0906140c8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109ef82611108565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5790614188565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a7f611e9b565b73ffffffffffffffffffffffffffffffffffffffff161480610aae5750610aad81610aa8611e9b565b611bc1565b5b610aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae490614048565b60405180910390fd5b610af78383611ea3565b505050565b600d60009054906101000a900460ff16610b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4290613fa8565b60405180910390fd5b600081118015610b5c575060018111155b610b6557600080fd5b600c5481600f54610b769190614363565b1115610bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bae90614208565b60405180910390fd5b80600b54610bc591906143b9565b341015610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe90614168565b60405180910390fd5b60648082601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c559190614363565b610c5f91906143b9565b1115610ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9790613f88565b60405180910390fd5b80601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610cef9190614363565b9250508190555060005b81811015610d4557600c54600f541015610d3257600f6000815480929190610d209061452f565b9190505550610d3133600f54611f5c565b5b8080610d3d9061452f565b915050610cf9565b5050565b6000600880549050905090565b600d60019054906101000a900460ff1681565b610d7a610d74611e9b565b82611f7a565b610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db0906141a8565b60405180910390fd5b610dc4838383612058565b505050565b6000610dd48361124e565b8210610e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0c90613f08565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e76611e9b565b73ffffffffffffffffffffffffffffffffffffffff16610e94611538565b73ffffffffffffffffffffffffffffffffffffffff1614610eea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee190614108565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610f2857600080fd5b565b610f32611e9b565b73ffffffffffffffffffffffffffffffffffffffff16610f50611538565b73ffffffffffffffffffffffffffffffffffffffff1614610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d90614108565b60405180910390fd5b80600b8190555050565b610fcb83838360405180602001604052806000815250611a29565b505050565b6000610fda610d49565b821061101b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611012906141c8565b60405180910390fd5b60088281548110611055577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b600c5481565b611075611e9b565b73ffffffffffffffffffffffffffffffffffffffff16611093611538565b73ffffffffffffffffffffffffffffffffffffffff16146110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090614108565b60405180910390fd5b80600e90805190602001906110ff929190612ea3565b5050565b600181565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a890614088565b60405180910390fd5b80915050919050565b600e80546111c7906144fd565b80601f01602080910402602001604051908101604052809291908181526020018280546111f3906144fd565b80156112405780601f1061121557610100808354040283529160200191611240565b820191906000526020600020905b81548152906001019060200180831161122357829003601f168201915b505050505081565b600f5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b690614068565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61130e611e9b565b73ffffffffffffffffffffffffffffffffffffffff1661132c611538565b73ffffffffffffffffffffffffffffffffffffffff1614611382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137990614108565b60405180910390fd5b61138c60006122b4565b565b611396611e9b565b73ffffffffffffffffffffffffffffffffffffffff166113b4611538565b73ffffffffffffffffffffffffffffffffffffffff161461140a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140190614108565b60405180910390fd5b60005b81518110156114c457600160116000848481518110611455577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff02191690831515021790555080806114bc9061452f565b91505061140d565b5050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff1615611528576001905061152d565b600090505b919050565b600b5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611571906144fd565b80601f016020809104026020016040519081016040528092919081815260200182805461159d906144fd565b80156115ea5780601f106115bf576101008083540402835291602001916115ea565b820191906000526020600020905b8154815290600101906020018083116115cd57829003601f168201915b5050505050905090565b6115fc611e9b565b73ffffffffffffffffffffffffffffffffffffffff1661161a611538565b73ffffffffffffffffffffffffffffffffffffffff1614611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790614108565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b6116ae6116a7611e9b565b838361237a565b5050565b6116ba611e9b565b73ffffffffffffffffffffffffffffffffffffffff166116d8611538565b73ffffffffffffffffffffffffffffffffffffffff161461172e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172590614108565b60405180910390fd5b600d60019054906101000a900460ff1615600d60016101000a81548160ff021916908315150217905550565b600d60019054906101000a900460ff166117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090614008565b60405180910390fd5b60011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff1615151461183f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611836906141e8565b60405180910390fd5b60008111801561185e5750600c5481600f5461185b9190614363565b11155b61189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189490614228565b60405180910390fd5b600a81601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546118ed9190614363565b111561192e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611925906140e8565b60405180910390fd5b80600b5461193c91906143b9565b34101561197e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197590614168565b60405180910390fd5b60005b81811015611a2557600c54600f541015611a1257601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008154809291906119e89061452f565b9190505550600f6000815480929190611a009061452f565b9190505550611a1133600f54611f5c565b5b8080611a1d9061452f565b915050611981565b5050565b611a3a611a34611e9b565b83611f7a565b611a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a70906141a8565b60405180910390fd5b611a85848484846124e7565b50505050565b6060611a9682611e2f565b611ad5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acc90614148565b60405180910390fd5b6000611adf612543565b90506000815111611aff5760405180602001604052806000815250611b20565b80604051602001611b109190613e4d565b6040516020818303038152906040525b915050919050565b611b30611e9b565b73ffffffffffffffffffffffffffffffffffffffff16611b4e611538565b73ffffffffffffffffffffffffffffffffffffffff1614611ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9b90614108565b60405180910390fd5b611bac610d49565b8111611bb757600080fd5b80600c8190555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c5d611e9b565b73ffffffffffffffffffffffffffffffffffffffff16611c7b611538565b73ffffffffffffffffffffffffffffffffffffffff1614611cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc890614108565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890613f48565b60405180910390fd5b611d4a816122b4565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e1857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611e285750611e27826125d5565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f1683611108565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611f7682826040518060200160405280600081525061263f565b5050565b6000611f8582611e2f565b611fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbb90614028565b60405180910390fd5b6000611fcf83611108565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061203e57508373ffffffffffffffffffffffffffffffffffffffff166120268461095f565b73ffffffffffffffffffffffffffffffffffffffff16145b8061204f575061204e8185611bc1565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661207882611108565b73ffffffffffffffffffffffffffffffffffffffff16146120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c590614128565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561213e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213590613fc8565b60405180910390fd5b61214983838361269a565b612154600082611ea3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121a49190614413565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121fb9190614363565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e090613fe8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124da9190613ecb565b60405180910390a3505050565b6124f2848484612058565b6124fe848484846127ae565b61253d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253490613f28565b60405180910390fd5b50505050565b6060600e8054612552906144fd565b80601f016020809104026020016040519081016040528092919081815260200182805461257e906144fd565b80156125cb5780601f106125a0576101008083540402835291602001916125cb565b820191906000526020600020905b8154815290600101906020018083116125ae57829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6126498383612945565b61265660008484846127ae565b612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c90613f28565b60405180910390fd5b505050565b6126a5838383612b13565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126e8576126e381612b18565b612727565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612726576127258382612b61565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561276a5761276581612cce565b6127a9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127a8576127a78282612e11565b5b5b505050565b60006127cf8473ffffffffffffffffffffffffffffffffffffffff16612e90565b15612938578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127f8611e9b565b8786866040518563ffffffff1660e01b815260040161281a9493929190613e7f565b602060405180830381600087803b15801561283457600080fd5b505af192505050801561286557506040513d601f19601f820116820180604052508101906128629190613326565b60015b6128e8573d8060008114612895576040519150601f19603f3d011682016040523d82523d6000602084013e61289a565b606091505b506000815114156128e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d790613f28565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061293d565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ac906140a8565b60405180910390fd5b6129be81611e2f565b156129fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f590613f68565b60405180910390fd5b612a0a6000838361269a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a5a9190614363565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b6e8461124e565b612b789190614413565b9050600060076000848152602001908152602001600020549050818114612c5d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612ce29190614413565b9050600060096000848152602001908152602001600020549050600060088381548110612d38577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612d80577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612df5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612e1c8361124e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612eaf906144fd565b90600052602060002090601f016020900481019282612ed15760008555612f18565b82601f10612eea57805160ff1916838001178555612f18565b82800160010185558215612f18579182015b82811115612f17578251825591602001919060010190612efc565b5b509050612f259190612f29565b5090565b5b80821115612f42576000816000905550600101612f2a565b5090565b6000612f59612f5484614294565b614263565b90508083825260208201905082856020860282011115612f7857600080fd5b60005b85811015612fa85781612f8e888261302e565b845260208401935060208301925050600181019050612f7b565b5050509392505050565b6000612fc5612fc0846142c0565b614263565b905082815260208101848484011115612fdd57600080fd5b612fe88482856144bb565b509392505050565b6000613003612ffe846142f0565b614263565b90508281526020810184848401111561301b57600080fd5b6130268482856144bb565b509392505050565b60008135905061303d81614616565b92915050565b600082601f83011261305457600080fd5b8135613064848260208601612f46565b91505092915050565b60008135905061307c8161462d565b92915050565b60008135905061309181614644565b92915050565b6000815190506130a681614644565b92915050565b600082601f8301126130bd57600080fd5b81356130cd848260208601612fb2565b91505092915050565b600082601f8301126130e757600080fd5b81356130f7848260208601612ff0565b91505092915050565b60008135905061310f8161465b565b92915050565b60006020828403121561312757600080fd5b60006131358482850161302e565b91505092915050565b6000806040838503121561315157600080fd5b600061315f8582860161302e565b92505060206131708582860161302e565b9150509250929050565b60008060006060848603121561318f57600080fd5b600061319d8682870161302e565b93505060206131ae8682870161302e565b92505060406131bf86828701613100565b9150509250925092565b600080600080608085870312156131df57600080fd5b60006131ed8782880161302e565b94505060206131fe8782880161302e565b935050604061320f87828801613100565b925050606085013567ffffffffffffffff81111561322c57600080fd5b613238878288016130ac565b91505092959194509250565b6000806040838503121561325757600080fd5b60006132658582860161302e565b92505060206132768582860161306d565b9150509250929050565b6000806040838503121561329357600080fd5b60006132a18582860161302e565b92505060206132b285828601613100565b9150509250929050565b6000602082840312156132ce57600080fd5b600082013567ffffffffffffffff8111156132e857600080fd5b6132f484828501613043565b91505092915050565b60006020828403121561330f57600080fd5b600061331d84828501613082565b91505092915050565b60006020828403121561333857600080fd5b600061334684828501613097565b91505092915050565b60006020828403121561336157600080fd5b600082013567ffffffffffffffff81111561337b57600080fd5b613387848285016130d6565b91505092915050565b6000602082840312156133a257600080fd5b60006133b084828501613100565b91505092915050565b6133c281614447565b82525050565b6133d181614459565b82525050565b60006133e282614320565b6133ec8185614336565b93506133fc8185602086016144ca565b61340581614605565b840191505092915050565b600061341b8261432b565b6134258185614347565b93506134358185602086016144ca565b61343e81614605565b840191505092915050565b60006134548261432b565b61345e8185614358565b935061346e8185602086016144ca565b80840191505092915050565b6000613487602b83614347565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006134ed603283614347565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613553602683614347565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135b9601c83614347565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006135f9602783614347565b91507f596f75206861766520616c7265616479206d696e74656420696e20746869732060008301527f31303020736574000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061365f603383614347565b91507f506c65617365207761697420756e74696c20746865205075626c69632073616c60008301527f652069732061637469766520746f206d696e74000000000000000000000000006020830152604082019050919050565b60006136c5602483614347565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061372b601983614347565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b600061376b602883614347565b91507f506c65617365207761697420756e74696c20746865205072654d696e7420686160008301527f7320626567756e210000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137d1602c83614347565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613837603883614347565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b600061389d602a83614347565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613903602983614347565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613969602083614347565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b60006139a9602c83614347565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613a0f603783614347565b91507f546869732057616c6c65742068617320616c7265616479206d696e746564206960008301527f74732031302072657365727665642041504552464c27730000000000000000006020830152604082019050919050565b6000613a75602083614347565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613ab5602983614347565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b1b602f83614347565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613b81603383614347565b91507f4554482076616c75652073656e7420697320746f6f206c6974746c6520666f7260008301527f2074686973206d616e792041504552464c2773000000000000000000000000006020830152604082019050919050565b6000613be7602183614347565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c4d603183614347565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613cb3602c83614347565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613d19602883614347565b91507f546869732057616c6c6574206973206e6f742061626c65206d696e7420666f7260008301527f2070726573616c650000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d7f602c83614347565b91507f507572636861736520776f756c6420657863656564206d617820737570706c7960008301527f206f662041504552464c277300000000000000000000000000000000000000006020830152604082019050919050565b6000613de5603483614347565b91507f507572636861736520776f756c64206578636565642063757272656e74206d6160008301527f7820737570706c79206f662041504552464c27730000000000000000000000006020830152604082019050919050565b613e47816144b1565b82525050565b6000613e598284613449565b915081905092915050565b6000602082019050613e7960008301846133b9565b92915050565b6000608082019050613e9460008301876133b9565b613ea160208301866133b9565b613eae6040830185613e3e565b8181036060830152613ec081846133d7565b905095945050505050565b6000602082019050613ee060008301846133c8565b92915050565b60006020820190508181036000830152613f008184613410565b905092915050565b60006020820190508181036000830152613f218161347a565b9050919050565b60006020820190508181036000830152613f41816134e0565b9050919050565b60006020820190508181036000830152613f6181613546565b9050919050565b60006020820190508181036000830152613f81816135ac565b9050919050565b60006020820190508181036000830152613fa1816135ec565b9050919050565b60006020820190508181036000830152613fc181613652565b9050919050565b60006020820190508181036000830152613fe1816136b8565b9050919050565b600060208201905081810360008301526140018161371e565b9050919050565b600060208201905081810360008301526140218161375e565b9050919050565b60006020820190508181036000830152614041816137c4565b9050919050565b600060208201905081810360008301526140618161382a565b9050919050565b6000602082019050818103600083015261408181613890565b9050919050565b600060208201905081810360008301526140a1816138f6565b9050919050565b600060208201905081810360008301526140c18161395c565b9050919050565b600060208201905081810360008301526140e18161399c565b9050919050565b6000602082019050818103600083015261410181613a02565b9050919050565b6000602082019050818103600083015261412181613a68565b9050919050565b6000602082019050818103600083015261414181613aa8565b9050919050565b6000602082019050818103600083015261416181613b0e565b9050919050565b6000602082019050818103600083015261418181613b74565b9050919050565b600060208201905081810360008301526141a181613bda565b9050919050565b600060208201905081810360008301526141c181613c40565b9050919050565b600060208201905081810360008301526141e181613ca6565b9050919050565b6000602082019050818103600083015261420181613d0c565b9050919050565b6000602082019050818103600083015261422181613d72565b9050919050565b6000602082019050818103600083015261424181613dd8565b9050919050565b600060208201905061425d6000830184613e3e565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561428a576142896145d6565b5b8060405250919050565b600067ffffffffffffffff8211156142af576142ae6145d6565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156142db576142da6145d6565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561430b5761430a6145d6565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061436e826144b1565b9150614379836144b1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143ae576143ad614578565b5b828201905092915050565b60006143c4826144b1565b91506143cf836144b1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561440857614407614578565b5b828202905092915050565b600061441e826144b1565b9150614429836144b1565b92508282101561443c5761443b614578565b5b828203905092915050565b600061445282614491565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144e85780820151818401526020810190506144cd565b838111156144f7576000848401525b50505050565b6000600282049050600182168061451557607f821691505b60208210811415614529576145286145a7565b5b50919050565b600061453a826144b1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561456d5761456c614578565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b61461f81614447565b811461462a57600080fd5b50565b61463681614459565b811461464157600080fd5b50565b61464d81614465565b811461465857600080fd5b50565b614664816144b1565b811461466f57600080fd5b5056fea264697066735822122003a3d0b032e94d42508a11e8465614c0c8b8bd6b57e4c6f6f6ba489928d0f07564736f6c63430008000033

Deployed Bytecode Sourcemap

43832:3903:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35180:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44020:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21752:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23408:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22931:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46269:842;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35820:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44061:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24158:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35488:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45043:108;;;;;;;;;;;;;:::i;:::-;;47341:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24568:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36010:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43989:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47235:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43943:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21446:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44104:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44205:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21176:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42984:103;;;;;;;;;;;;;:::i;:::-;;44821:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44583:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43893:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42333:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21921:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45159:93;;;;;;;;;;;;;:::i;:::-;;23701:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45260:101;;;;;;;;;;;;;:::i;:::-;;45369:892;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24824:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22096:431;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47518:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23927:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43242:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35180:224;35282:4;35321:35;35306:50;;;:11;:50;;;;:90;;;;35360:36;35384:11;35360:23;:36::i;:::-;35306:90;35299:97;;35180:224;;;:::o;44020:34::-;;;;;;;;;;;;;:::o;21752:100::-;21806:13;21839:5;21832:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21752:100;:::o;23408:221::-;23484:7;23512:16;23520:7;23512;:16::i;:::-;23504:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23597:15;:24;23613:7;23597:24;;;;;;;;;;;;;;;;;;;;;23590:31;;23408:221;;;:::o;22931:411::-;23012:13;23028:23;23043:7;23028:14;:23::i;:::-;23012:39;;23076:5;23070:11;;:2;:11;;;;23062:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23170:5;23154:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23179:37;23196:5;23203:12;:10;:12::i;:::-;23179:16;:37::i;:::-;23154:62;23132:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23313:21;23322:2;23326:7;23313:8;:21::i;:::-;22931:411;;;:::o;46269:842::-;46347:14;;;;;;;;;;;46339:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;46453:1;46436:14;:18;:54;;;;;43981:1;46458:14;:32;;46436:54;46428:63;;;;;;46543:6;;46525:14;46510:12;;:29;;;;:::i;:::-;:39;;46502:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;46641:14;46630:8;;:25;;;;:::i;:::-;46617:9;:38;;46609:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;46792:3;46784;46766:14;46732:19;:31;46752:10;46732:31;;;;;;;;;;;;;;;;:48;;;;:::i;:::-;46731:56;;;;:::i;:::-;46730:65;;46722:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;46887:14;46852:19;:31;46872:10;46852:31;;;;;;;;;;;;;;;;:49;;;;;;;:::i;:::-;;;;;;;;46919:6;46914:190;46930:14;46928:1;:16;46914:190;;;46983:6;;46968:12;;:21;46964:129;;;47009:12;;:14;;;;;;;;;:::i;:::-;;;;;;47042:35;47052:10;47064:12;;47042:9;:35::i;:::-;46964:129;46945:3;;;;;:::i;:::-;;;;46914:190;;;;46269:842;:::o;35820:113::-;35881:7;35908:10;:17;;;;35901:24;;35820:113;:::o;44061:36::-;;;;;;;;;;;;;:::o;24158:339::-;24353:41;24372:12;:10;:12::i;:::-;24386:7;24353:18;:41::i;:::-;24345:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24461:28;24471:4;24477:2;24481:7;24461:9;:28::i;:::-;24158:339;;;:::o;35488:256::-;35585:7;35621:23;35638:5;35621:16;:23::i;:::-;35613:5;:31;35605:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35710:12;:19;35723:5;35710:19;;;;;;;;;;;;;;;:26;35730:5;35710:26;;;;;;;;;;;;35703:33;;35488:256;;;;:::o;45043:108::-;42564:12;:10;:12::i;:::-;42553:23;;:7;:5;:7::i;:::-;:23;;;42545:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45103:10:::1;45095:24;;:47;45120:21;45095:47;;;;;;;;;;;;;;;;;;;;;;;45087:56;;;::::0;::::1;;45043:108::o:0;47341:169::-;42564:12;:10;:12::i;:::-;42553:23;;:7;:5;:7::i;:::-;:23;;;42545:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47494:8:::1;47483;:19;;;;47341:169:::0;:::o;24568:185::-;24706:39;24723:4;24729:2;24733:7;24706:39;;;;;;;;;;;;:16;:39::i;:::-;24568:185;;;:::o;36010:233::-;36085:7;36121:30;:28;:30::i;:::-;36113:5;:38;36105:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36218:10;36229:5;36218:17;;;;;;;;;;;;;;;;;;;;;;;;36211:24;;36010:233;;;:::o;43989:24::-;;;;:::o;47235:100::-;42564:12;:10;:12::i;:::-;42553:23;;:7;:5;:7::i;:::-;:23;;;42545:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47317:10:::1;47307:7;:20;;;;;;;;;;;;:::i;:::-;;47235:100:::0;:::o;43943:39::-;43981:1;43943:39;:::o;21446:239::-;21518:7;21538:13;21554:7;:16;21562:7;21554:16;;;;;;;;;;;;;;;;;;;;;21538:32;;21606:1;21589:19;;:5;:19;;;;21581:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21672:5;21665:12;;;21446:239;;;:::o;44104:94::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44205:31::-;;;;:::o;21176:208::-;21248:7;21293:1;21276:19;;:5;:19;;;;21268:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21360:9;:16;21370:5;21360:16;;;;;;;;;;;;;;;;21353:23;;21176:208;;;:::o;42984:103::-;42564:12;:10;:12::i;:::-;42553:23;;:7;:5;:7::i;:::-;:23;;;42545:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43049:30:::1;43076:1;43049:18;:30::i;:::-;42984:103::o:0;44821:214::-;42564:12;:10;:12::i;:::-;42553:23;;:7;:5;:7::i;:::-;:23;;;42545:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44910:9:::1;44905:115;44927:13;:20;44925:1;:22;44905:115;;;45004:4;44967:9;:27;44977:13;44991:1;44977:16;;;;;;;;;;;;;;;;;;;;;;44967:27;;;;;;;;;;;;;;;:34;;;:41;;;;;;;;;;;;;;;;;;44948:3;;;;;:::i;:::-;;;;44905:115;;;;44821:214:::0;:::o;44583:230::-;44660:4;44686:9;:21;44696:10;44686:21;;;;;;;;;;;;;;;:28;;;;;;;;;;;;44682:124;;;44737:4;44730:11;;;;44682:124;44789:5;44782:12;;44583:230;;;;:::o;43893:43::-;;;;:::o;42333:87::-;42379:7;42406:6;;;;;;;;;;;42399:13;;42333:87;:::o;21921:104::-;21977:13;22010:7;22003:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21921:104;:::o;45159:93::-;42564:12;:10;:12::i;:::-;42553:23;;:7;:5;:7::i;:::-;:23;;;42545:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45230:14:::1;;;;;;;;;;;45229:15;45212:14;;:32;;;;;;;;;;;;;;;;;;45159:93::o:0;23701:155::-;23796:52;23815:12;:10;:12::i;:::-;23829:8;23839;23796:18;:52::i;:::-;23701:155;;:::o;45260:101::-;42564:12;:10;:12::i;:::-;42553:23;;:7;:5;:7::i;:::-;:23;;;42545:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45336:17:::1;;;;;;;;;;;45335:18;45315:17;;:38;;;;;;;;;;;;;;;;;;45260:101::o:0;45369:892::-;45447:17;;;;;;;;;;;45439:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;45560:4;45528:36;;:9;:21;45538:10;45528:21;;;;;;;;;;;;;;;:28;;;;;;;;;;;;:36;;;45520:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;45646:1;45629:14;:18;:61;;;;;45684:6;;45666:14;45651:12;;:29;;;;:::i;:::-;:39;;45629:61;45621:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;45821:2;45803:14;45766:9;:21;45776:10;45766:21;;;;;;;;;;;;;;;:34;;;:51;;;;:::i;:::-;:57;;45758:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;45925:14;45914:8;;:25;;;;:::i;:::-;45901:9;:38;;45893:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;46012:6;46008:244;46023:14;46021:1;:16;46008:244;;;46076:6;;46061:12;;:21;46057:184;;;46102:9;:21;46112:10;46102:21;;;;;;;;;;;;;;;:34;;;:36;;;;;;;;;:::i;:::-;;;;;;46157:12;;:14;;;;;;;;;:::i;:::-;;;;;;46190:35;46200:10;46212:12;;46190:9;:35::i;:::-;46057:184;46038:3;;;;;:::i;:::-;;;;46008:244;;;;45369:892;:::o;24824:328::-;24999:41;25018:12;:10;:12::i;:::-;25032:7;24999:18;:41::i;:::-;24991:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25105:39;25119:4;25125:2;25129:7;25138:5;25105:13;:39::i;:::-;24824:328;;;;:::o;22096:431::-;22169:13;22203:16;22211:7;22203;:16::i;:::-;22195:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22284:21;22308:10;:8;:10::i;:::-;22284:34;;22477:1;22459:7;22453:21;:25;:66;;;;;;;;;;;;;;;;;22505:7;22488:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;22453:66;22446:73;;;22096:431;;;:::o;47518:214::-;42564:12;:10;:12::i;:::-;42553:23;;:7;:5;:7::i;:::-;:23;;;42545:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47681:13:::1;:11;:13::i;:::-;47669:9;:25;47661:34;;;::::0;::::1;;47715:9;47706:6;:18;;;;47518:214:::0;:::o;23927:164::-;24024:4;24048:18;:25;24067:5;24048:25;;;;;;;;;;;;;;;:35;24074:8;24048:35;;;;;;;;;;;;;;;;;;;;;;;;;24041:42;;23927:164;;;;:::o;43242:201::-;42564:12;:10;:12::i;:::-;42553:23;;:7;:5;:7::i;:::-;:23;;;42545:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43351:1:::1;43331:22;;:8;:22;;;;43323:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43407:28;43426:8;43407:18;:28::i;:::-;43242:201:::0;:::o;20807:305::-;20909:4;20961:25;20946:40;;;:11;:40;;;;:105;;;;21018:33;21003:48;;;:11;:48;;;;20946:105;:158;;;;21068:36;21092:11;21068:23;:36::i;:::-;20946:158;20926:178;;20807:305;;;:::o;26662:127::-;26727:4;26779:1;26751:30;;:7;:16;26759:7;26751:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26744:37;;26662:127;;;:::o;17203:98::-;17256:7;17283:10;17276:17;;17203:98;:::o;30644:174::-;30746:2;30719:15;:24;30735:7;30719:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30802:7;30798:2;30764:46;;30773:23;30788:7;30773:14;:23::i;:::-;30764:46;;;;;;;;;;;;30644:174;;:::o;27646:110::-;27722:26;27732:2;27736:7;27722:26;;;;;;;;;;;;:9;:26::i;:::-;27646:110;;:::o;26956:348::-;27049:4;27074:16;27082:7;27074;:16::i;:::-;27066:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27150:13;27166:23;27181:7;27166:14;:23::i;:::-;27150:39;;27219:5;27208:16;;:7;:16;;;:51;;;;27252:7;27228:31;;:20;27240:7;27228:11;:20::i;:::-;:31;;;27208:51;:87;;;;27263:32;27280:5;27287:7;27263:16;:32::i;:::-;27208:87;27200:96;;;26956:348;;;;:::o;29948:578::-;30107:4;30080:31;;:23;30095:7;30080:14;:23::i;:::-;:31;;;30072:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30190:1;30176:16;;:2;:16;;;;30168:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30246:39;30267:4;30273:2;30277:7;30246:20;:39::i;:::-;30350:29;30367:1;30371:7;30350:8;:29::i;:::-;30411:1;30392:9;:15;30402:4;30392:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30440:1;30423:9;:13;30433:2;30423:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30471:2;30452:7;:16;30460:7;30452:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30510:7;30506:2;30491:27;;30500:4;30491:27;;;;;;;;;;;;29948:578;;;:::o;43603:191::-;43677:16;43696:6;;;;;;;;;;;43677:25;;43722:8;43713:6;;:17;;;;;;;;;;;;;;;;;;43777:8;43746:40;;43767:8;43746:40;;;;;;;;;;;;43603:191;;:::o;30960:315::-;31115:8;31106:17;;:5;:17;;;;31098:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31202:8;31164:18;:25;31183:5;31164:25;;;;;;;;;;;;;;;:35;31190:8;31164:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31248:8;31226:41;;31241:5;31226:41;;;31258:8;31226:41;;;;;;:::i;:::-;;;;;;;;30960:315;;;:::o;26034:::-;26191:28;26201:4;26207:2;26211:7;26191:9;:28::i;:::-;26238:48;26261:4;26267:2;26271:7;26280:5;26238:22;:48::i;:::-;26230:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26034:315;;;;:::o;47119:108::-;47179:13;47212:7;47205:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47119:108;:::o;8317:157::-;8402:4;8441:25;8426:40;;;:11;:40;;;;8419:47;;8317:157;;;:::o;27983:321::-;28113:18;28119:2;28123:7;28113:5;:18::i;:::-;28164:54;28195:1;28199:2;28203:7;28212:5;28164:22;:54::i;:::-;28142:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27983:321;;;:::o;36856:589::-;37000:45;37027:4;37033:2;37037:7;37000:26;:45::i;:::-;37078:1;37062:18;;:4;:18;;;37058:187;;;37097:40;37129:7;37097:31;:40::i;:::-;37058:187;;;37167:2;37159:10;;:4;:10;;;37155:90;;37186:47;37219:4;37225:7;37186:32;:47::i;:::-;37155:90;37058:187;37273:1;37259:16;;:2;:16;;;37255:183;;;37292:45;37329:7;37292:36;:45::i;:::-;37255:183;;;37365:4;37359:10;;:2;:10;;;37355:83;;37386:40;37414:2;37418:7;37386:27;:40::i;:::-;37355:83;37255:183;36856:589;;;:::o;31840:799::-;31995:4;32016:15;:2;:13;;;:15::i;:::-;32012:620;;;32068:2;32052:36;;;32089:12;:10;:12::i;:::-;32103:4;32109:7;32118:5;32052:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32048:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32311:1;32294:6;:13;:18;32290:272;;;32337:60;;;;;;;;;;:::i;:::-;;;;;;;;32290:272;32512:6;32506:13;32497:6;32493:2;32489:15;32482:38;32048:529;32185:41;;;32175:51;;;:6;:51;;;;32168:58;;;;;32012:620;32616:4;32609:11;;31840:799;;;;;;;:::o;28640:382::-;28734:1;28720:16;;:2;:16;;;;28712:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28793:16;28801:7;28793;:16::i;:::-;28792:17;28784:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28855:45;28884:1;28888:2;28892:7;28855:20;:45::i;:::-;28930:1;28913:9;:13;28923:2;28913:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28961:2;28942:7;:16;28950:7;28942:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29006:7;29002:2;28981:33;;28998:1;28981:33;;;;;;;;;;;;28640:382;;:::o;33211:126::-;;;;:::o;38168:164::-;38272:10;:17;;;;38245:15;:24;38261:7;38245:24;;;;;;;;;;;:44;;;;38300:10;38316:7;38300:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38168:164;:::o;38959:988::-;39225:22;39275:1;39250:22;39267:4;39250:16;:22::i;:::-;:26;;;;:::i;:::-;39225:51;;39287:18;39308:17;:26;39326:7;39308:26;;;;;;;;;;;;39287:47;;39455:14;39441:10;:28;39437:328;;39486:19;39508:12;:18;39521:4;39508:18;;;;;;;;;;;;;;;:34;39527:14;39508:34;;;;;;;;;;;;39486:56;;39592:11;39559:12;:18;39572:4;39559:18;;;;;;;;;;;;;;;:30;39578:10;39559:30;;;;;;;;;;;:44;;;;39709:10;39676:17;:30;39694:11;39676:30;;;;;;;;;;;:43;;;;39437:328;;39861:17;:26;39879:7;39861:26;;;;;;;;;;;39854:33;;;39905:12;:18;39918:4;39905:18;;;;;;;;;;;;;;;:34;39924:14;39905:34;;;;;;;;;;;39898:41;;;38959:988;;;;:::o;40242:1079::-;40495:22;40540:1;40520:10;:17;;;;:21;;;;:::i;:::-;40495:46;;40552:18;40573:15;:24;40589:7;40573:24;;;;;;;;;;;;40552:45;;40924:19;40946:10;40957:14;40946:26;;;;;;;;;;;;;;;;;;;;;;;;40924:48;;41010:11;40985:10;40996;40985:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;41121:10;41090:15;:28;41106:11;41090:28;;;;;;;;;;;:41;;;;41262:15;:24;41278:7;41262:24;;;;;;;;;;;41255:31;;;41297:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40242:1079;;;;:::o;37746:221::-;37831:14;37848:20;37865:2;37848:16;:20::i;:::-;37831:37;;37906:7;37879:12;:16;37892:2;37879:16;;;;;;;;;;;;;;;:24;37896:6;37879:24;;;;;;;;;;;:34;;;;37953:6;37924:17;:26;37942:7;37924:26;;;;;;;;;;;:35;;;;37746:221;;;:::o;9247:387::-;9307:4;9515:12;9582:7;9570:20;9562:28;;9625:1;9618:4;:8;9611:15;;;9247:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:342::-;;754:64;769:48;810:6;769:48;:::i;:::-;754:64;:::i;:::-;745:73;;841:6;834:5;827:21;879:4;872:5;868:16;917:3;908:6;903:3;899:16;896:25;893:2;;;934:1;931;924:12;893:2;947:41;981:6;976:3;971;947:41;:::i;:::-;735:259;;;;;;:::o;1000:344::-;;1103:65;1118:49;1160:6;1118:49;:::i;:::-;1103:65;:::i;:::-;1094:74;;1191:6;1184:5;1177:21;1229:4;1222:5;1218:16;1267:3;1258:6;1253:3;1249:16;1246:25;1243:2;;;1284:1;1281;1274:12;1243:2;1297:41;1331:6;1326:3;1321;1297:41;:::i;:::-;1084:260;;;;;;:::o;1350:139::-;;1434:6;1421:20;1412:29;;1450:33;1477:5;1450:33;:::i;:::-;1402:87;;;;:::o;1512:303::-;;1632:3;1625:4;1617:6;1613:17;1609:27;1599:2;;1650:1;1647;1640:12;1599:2;1690:6;1677:20;1715:94;1805:3;1797:6;1790:4;1782:6;1778:17;1715:94;:::i;:::-;1706:103;;1589:226;;;;;:::o;1821:133::-;;1902:6;1889:20;1880:29;;1918:30;1942:5;1918:30;:::i;:::-;1870:84;;;;:::o;1960:137::-;;2043:6;2030:20;2021:29;;2059:32;2085:5;2059:32;:::i;:::-;2011:86;;;;:::o;2103:141::-;;2190:6;2184:13;2175:22;;2206:32;2232:5;2206:32;:::i;:::-;2165:79;;;;:::o;2263:271::-;;2367:3;2360:4;2352:6;2348:17;2344:27;2334:2;;2385:1;2382;2375:12;2334:2;2425:6;2412:20;2450:78;2524:3;2516:6;2509:4;2501:6;2497:17;2450:78;:::i;:::-;2441:87;;2324:210;;;;;:::o;2554:273::-;;2659:3;2652:4;2644:6;2640:17;2636:27;2626:2;;2677:1;2674;2667:12;2626:2;2717:6;2704:20;2742:79;2817:3;2809:6;2802:4;2794:6;2790:17;2742:79;:::i;:::-;2733:88;;2616:211;;;;;:::o;2833:139::-;;2917:6;2904:20;2895:29;;2933:33;2960:5;2933:33;:::i;:::-;2885:87;;;;:::o;2978:262::-;;3086:2;3074:9;3065:7;3061:23;3057:32;3054:2;;;3102:1;3099;3092:12;3054:2;3145:1;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3116:117;3044:196;;;;:::o;3246:407::-;;;3371:2;3359:9;3350:7;3346:23;3342:32;3339:2;;;3387:1;3384;3377:12;3339:2;3430:1;3455:53;3500:7;3491:6;3480:9;3476:22;3455:53;:::i;:::-;3445:63;;3401:117;3557:2;3583:53;3628:7;3619:6;3608:9;3604:22;3583:53;:::i;:::-;3573:63;;3528:118;3329:324;;;;;:::o;3659:552::-;;;;3801:2;3789:9;3780:7;3776:23;3772:32;3769:2;;;3817:1;3814;3807:12;3769:2;3860:1;3885:53;3930:7;3921:6;3910:9;3906:22;3885:53;:::i;:::-;3875:63;;3831:117;3987:2;4013:53;4058:7;4049:6;4038:9;4034:22;4013:53;:::i;:::-;4003:63;;3958:118;4115:2;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4086:118;3759:452;;;;;:::o;4217:809::-;;;;;4385:3;4373:9;4364:7;4360:23;4356:33;4353:2;;;4402:1;4399;4392:12;4353:2;4445:1;4470:53;4515:7;4506:6;4495:9;4491:22;4470:53;:::i;:::-;4460:63;;4416:117;4572:2;4598:53;4643:7;4634:6;4623:9;4619:22;4598:53;:::i;:::-;4588:63;;4543:118;4700:2;4726:53;4771:7;4762:6;4751:9;4747:22;4726:53;:::i;:::-;4716:63;;4671:118;4856:2;4845:9;4841:18;4828:32;4887:18;4879:6;4876:30;4873:2;;;4919:1;4916;4909:12;4873:2;4947:62;5001:7;4992:6;4981:9;4977:22;4947:62;:::i;:::-;4937:72;;4799:220;4343:683;;;;;;;:::o;5032:401::-;;;5154:2;5142:9;5133:7;5129:23;5125:32;5122:2;;;5170:1;5167;5160:12;5122:2;5213:1;5238:53;5283:7;5274:6;5263:9;5259:22;5238:53;:::i;:::-;5228:63;;5184:117;5340:2;5366:50;5408:7;5399:6;5388:9;5384:22;5366:50;:::i;:::-;5356:60;;5311:115;5112:321;;;;;:::o;5439:407::-;;;5564:2;5552:9;5543:7;5539:23;5535:32;5532:2;;;5580:1;5577;5570:12;5532:2;5623:1;5648:53;5693:7;5684:6;5673:9;5669:22;5648:53;:::i;:::-;5638:63;;5594:117;5750:2;5776:53;5821:7;5812:6;5801:9;5797:22;5776:53;:::i;:::-;5766:63;;5721:118;5522:324;;;;;:::o;5852:405::-;;5985:2;5973:9;5964:7;5960:23;5956:32;5953:2;;;6001:1;5998;5991:12;5953:2;6072:1;6061:9;6057:17;6044:31;6102:18;6094:6;6091:30;6088:2;;;6134:1;6131;6124:12;6088:2;6162:78;6232:7;6223:6;6212:9;6208:22;6162:78;:::i;:::-;6152:88;;6015:235;5943:314;;;;:::o;6263:260::-;;6370:2;6358:9;6349:7;6345:23;6341:32;6338:2;;;6386:1;6383;6376:12;6338:2;6429:1;6454:52;6498:7;6489:6;6478:9;6474:22;6454:52;:::i;:::-;6444:62;;6400:116;6328:195;;;;:::o;6529:282::-;;6647:2;6635:9;6626:7;6622:23;6618:32;6615:2;;;6663:1;6660;6653:12;6615:2;6706:1;6731:63;6786:7;6777:6;6766:9;6762:22;6731:63;:::i;:::-;6721:73;;6677:127;6605:206;;;;:::o;6817:375::-;;6935:2;6923:9;6914:7;6910:23;6906:32;6903:2;;;6951:1;6948;6941:12;6903:2;7022:1;7011:9;7007:17;6994:31;7052:18;7044:6;7041:30;7038:2;;;7084:1;7081;7074:12;7038:2;7112:63;7167:7;7158:6;7147:9;7143:22;7112:63;:::i;:::-;7102:73;;6965:220;6893:299;;;;:::o;7198:262::-;;7306:2;7294:9;7285:7;7281:23;7277:32;7274:2;;;7322:1;7319;7312:12;7274:2;7365:1;7390:53;7435:7;7426:6;7415:9;7411:22;7390:53;:::i;:::-;7380:63;;7336:117;7264:196;;;;:::o;7466:118::-;7553:24;7571:5;7553:24;:::i;:::-;7548:3;7541:37;7531:53;;:::o;7590:109::-;7671:21;7686:5;7671:21;:::i;:::-;7666:3;7659:34;7649:50;;:::o;7705:360::-;;7819:38;7851:5;7819:38;:::i;:::-;7873:70;7936:6;7931:3;7873:70;:::i;:::-;7866:77;;7952:52;7997:6;7992:3;7985:4;7978:5;7974:16;7952:52;:::i;:::-;8029:29;8051:6;8029:29;:::i;:::-;8024:3;8020:39;8013:46;;7795:270;;;;;:::o;8071:364::-;;8187:39;8220:5;8187:39;:::i;:::-;8242:71;8306:6;8301:3;8242:71;:::i;:::-;8235:78;;8322:52;8367:6;8362:3;8355:4;8348:5;8344:16;8322:52;:::i;:::-;8399:29;8421:6;8399:29;:::i;:::-;8394:3;8390:39;8383:46;;8163:272;;;;;:::o;8441:377::-;;8575:39;8608:5;8575:39;:::i;:::-;8630:89;8712:6;8707:3;8630:89;:::i;:::-;8623:96;;8728:52;8773:6;8768:3;8761:4;8754:5;8750:16;8728:52;:::i;:::-;8805:6;8800:3;8796:16;8789:23;;8551:267;;;;;:::o;8824:375::-;;8987:67;9051:2;9046:3;8987:67;:::i;:::-;8980:74;;9084:34;9080:1;9075:3;9071:11;9064:55;9150:13;9145:2;9140:3;9136:12;9129:35;9190:2;9185:3;9181:12;9174:19;;8970:229;;;:::o;9205:382::-;;9368:67;9432:2;9427:3;9368:67;:::i;:::-;9361:74;;9465:34;9461:1;9456:3;9452:11;9445:55;9531:20;9526:2;9521:3;9517:12;9510:42;9578:2;9573:3;9569:12;9562:19;;9351:236;;;:::o;9593:370::-;;9756:67;9820:2;9815:3;9756:67;:::i;:::-;9749:74;;9853:34;9849:1;9844:3;9840:11;9833:55;9919:8;9914:2;9909:3;9905:12;9898:30;9954:2;9949:3;9945:12;9938:19;;9739:224;;;:::o;9969:326::-;;10132:67;10196:2;10191:3;10132:67;:::i;:::-;10125:74;;10229:30;10225:1;10220:3;10216:11;10209:51;10286:2;10281:3;10277:12;10270:19;;10115:180;;;:::o;10301:371::-;;10464:67;10528:2;10523:3;10464:67;:::i;:::-;10457:74;;10561:34;10557:1;10552:3;10548:11;10541:55;10627:9;10622:2;10617:3;10613:12;10606:31;10663:2;10658:3;10654:12;10647:19;;10447:225;;;:::o;10678:383::-;;10841:67;10905:2;10900:3;10841:67;:::i;:::-;10834:74;;10938:34;10934:1;10929:3;10925:11;10918:55;11004:21;10999:2;10994:3;10990:12;10983:43;11052:2;11047:3;11043:12;11036:19;;10824:237;;;:::o;11067:368::-;;11230:67;11294:2;11289:3;11230:67;:::i;:::-;11223:74;;11327:34;11323:1;11318:3;11314:11;11307:55;11393:6;11388:2;11383:3;11379:12;11372:28;11426:2;11421:3;11417:12;11410:19;;11213:222;;;:::o;11441:323::-;;11604:67;11668:2;11663:3;11604:67;:::i;:::-;11597:74;;11701:27;11697:1;11692:3;11688:11;11681:48;11755:2;11750:3;11746:12;11739:19;;11587:177;;;:::o;11770:372::-;;11933:67;11997:2;11992:3;11933:67;:::i;:::-;11926:74;;12030:34;12026:1;12021:3;12017:11;12010:55;12096:10;12091:2;12086:3;12082:12;12075:32;12133:2;12128:3;12124:12;12117:19;;11916:226;;;:::o;12148:376::-;;12311:67;12375:2;12370:3;12311:67;:::i;:::-;12304:74;;12408:34;12404:1;12399:3;12395:11;12388:55;12474:14;12469:2;12464:3;12460:12;12453:36;12515:2;12510:3;12506:12;12499:19;;12294:230;;;:::o;12530:388::-;;12693:67;12757:2;12752:3;12693:67;:::i;:::-;12686:74;;12790:34;12786:1;12781:3;12777:11;12770:55;12856:26;12851:2;12846:3;12842:12;12835:48;12909:2;12904:3;12900:12;12893:19;;12676:242;;;:::o;12924:374::-;;13087:67;13151:2;13146:3;13087:67;:::i;:::-;13080:74;;13184:34;13180:1;13175:3;13171:11;13164:55;13250:12;13245:2;13240:3;13236:12;13229:34;13289:2;13284:3;13280:12;13273:19;;13070:228;;;:::o;13304:373::-;;13467:67;13531:2;13526:3;13467:67;:::i;:::-;13460:74;;13564:34;13560:1;13555:3;13551:11;13544:55;13630:11;13625:2;13620:3;13616:12;13609:33;13668:2;13663:3;13659:12;13652:19;;13450:227;;;:::o;13683:330::-;;13846:67;13910:2;13905:3;13846:67;:::i;:::-;13839:74;;13943:34;13939:1;13934:3;13930:11;13923:55;14004:2;13999:3;13995:12;13988:19;;13829:184;;;:::o;14019:376::-;;14182:67;14246:2;14241:3;14182:67;:::i;:::-;14175:74;;14279:34;14275:1;14270:3;14266:11;14259:55;14345:14;14340:2;14335:3;14331:12;14324:36;14386:2;14381:3;14377:12;14370:19;;14165:230;;;:::o;14401:387::-;;14564:67;14628:2;14623:3;14564:67;:::i;:::-;14557:74;;14661:34;14657:1;14652:3;14648:11;14641:55;14727:25;14722:2;14717:3;14713:12;14706:47;14779:2;14774:3;14770:12;14763:19;;14547:241;;;:::o;14794:330::-;;14957:67;15021:2;15016:3;14957:67;:::i;:::-;14950:74;;15054:34;15050:1;15045:3;15041:11;15034:55;15115:2;15110:3;15106:12;15099:19;;14940:184;;;:::o;15130:373::-;;15293:67;15357:2;15352:3;15293:67;:::i;:::-;15286:74;;15390:34;15386:1;15381:3;15377:11;15370:55;15456:11;15451:2;15446:3;15442:12;15435:33;15494:2;15489:3;15485:12;15478:19;;15276:227;;;:::o;15509:379::-;;15672:67;15736:2;15731:3;15672:67;:::i;:::-;15665:74;;15769:34;15765:1;15760:3;15756:11;15749:55;15835:17;15830:2;15825:3;15821:12;15814:39;15879:2;15874:3;15870:12;15863:19;;15655:233;;;:::o;15894:383::-;;16057:67;16121:2;16116:3;16057:67;:::i;:::-;16050:74;;16154:34;16150:1;16145:3;16141:11;16134:55;16220:21;16215:2;16210:3;16206:12;16199:43;16268:2;16263:3;16259:12;16252:19;;16040:237;;;:::o;16283:365::-;;16446:67;16510:2;16505:3;16446:67;:::i;:::-;16439:74;;16543:34;16539:1;16534:3;16530:11;16523:55;16609:3;16604:2;16599:3;16595:12;16588:25;16639:2;16634:3;16630:12;16623:19;;16429:219;;;:::o;16654:381::-;;16817:67;16881:2;16876:3;16817:67;:::i;:::-;16810:74;;16914:34;16910:1;16905:3;16901:11;16894:55;16980:19;16975:2;16970:3;16966:12;16959:41;17026:2;17021:3;17017:12;17010:19;;16800:235;;;:::o;17041:376::-;;17204:67;17268:2;17263:3;17204:67;:::i;:::-;17197:74;;17301:34;17297:1;17292:3;17288:11;17281:55;17367:14;17362:2;17357:3;17353:12;17346:36;17408:2;17403:3;17399:12;17392:19;;17187:230;;;:::o;17423:372::-;;17586:67;17650:2;17645:3;17586:67;:::i;:::-;17579:74;;17683:34;17679:1;17674:3;17670:11;17663:55;17749:10;17744:2;17739:3;17735:12;17728:32;17786:2;17781:3;17777:12;17770:19;;17569:226;;;:::o;17801:376::-;;17964:67;18028:2;18023:3;17964:67;:::i;:::-;17957:74;;18061:34;18057:1;18052:3;18048:11;18041:55;18127:14;18122:2;18117:3;18113:12;18106:36;18168:2;18163:3;18159:12;18152:19;;17947:230;;;:::o;18183:384::-;;18346:67;18410:2;18405:3;18346:67;:::i;:::-;18339:74;;18443:34;18439:1;18434:3;18430:11;18423:55;18509:22;18504:2;18499:3;18495:12;18488:44;18558:2;18553:3;18549:12;18542:19;;18329:238;;;:::o;18573:118::-;18660:24;18678:5;18660:24;:::i;:::-;18655:3;18648:37;18638:53;;:::o;18697:275::-;;18851:95;18942:3;18933:6;18851:95;:::i;:::-;18844:102;;18963:3;18956:10;;18833:139;;;;:::o;18978:222::-;;19109:2;19098:9;19094:18;19086:26;;19122:71;19190:1;19179:9;19175:17;19166:6;19122:71;:::i;:::-;19076:124;;;;:::o;19206:640::-;;19439:3;19428:9;19424:19;19416:27;;19453:71;19521:1;19510:9;19506:17;19497:6;19453:71;:::i;:::-;19534:72;19602:2;19591:9;19587:18;19578:6;19534:72;:::i;:::-;19616;19684:2;19673:9;19669:18;19660:6;19616:72;:::i;:::-;19735:9;19729:4;19725:20;19720:2;19709:9;19705:18;19698:48;19763:76;19834:4;19825:6;19763:76;:::i;:::-;19755:84;;19406:440;;;;;;;:::o;19852:210::-;;19977:2;19966:9;19962:18;19954:26;;19990:65;20052:1;20041:9;20037:17;20028:6;19990:65;:::i;:::-;19944:118;;;;:::o;20068:313::-;;20219:2;20208:9;20204:18;20196:26;;20268:9;20262:4;20258:20;20254:1;20243:9;20239:17;20232:47;20296:78;20369:4;20360:6;20296:78;:::i;:::-;20288:86;;20186:195;;;;:::o;20387:419::-;;20591:2;20580:9;20576:18;20568:26;;20640:9;20634:4;20630:20;20626:1;20615:9;20611:17;20604:47;20668:131;20794:4;20668:131;:::i;:::-;20660:139;;20558:248;;;:::o;20812:419::-;;21016:2;21005:9;21001:18;20993:26;;21065:9;21059:4;21055:20;21051:1;21040:9;21036:17;21029:47;21093:131;21219:4;21093:131;:::i;:::-;21085:139;;20983:248;;;:::o;21237:419::-;;21441:2;21430:9;21426:18;21418:26;;21490:9;21484:4;21480:20;21476:1;21465:9;21461:17;21454:47;21518:131;21644:4;21518:131;:::i;:::-;21510:139;;21408:248;;;:::o;21662:419::-;;21866:2;21855:9;21851:18;21843:26;;21915:9;21909:4;21905:20;21901:1;21890:9;21886:17;21879:47;21943:131;22069:4;21943:131;:::i;:::-;21935:139;;21833:248;;;:::o;22087:419::-;;22291:2;22280:9;22276:18;22268:26;;22340:9;22334:4;22330:20;22326:1;22315:9;22311:17;22304:47;22368:131;22494:4;22368:131;:::i;:::-;22360:139;;22258:248;;;:::o;22512:419::-;;22716:2;22705:9;22701:18;22693:26;;22765:9;22759:4;22755:20;22751:1;22740:9;22736:17;22729:47;22793:131;22919:4;22793:131;:::i;:::-;22785:139;;22683:248;;;:::o;22937:419::-;;23141:2;23130:9;23126:18;23118:26;;23190:9;23184:4;23180:20;23176:1;23165:9;23161:17;23154:47;23218:131;23344:4;23218:131;:::i;:::-;23210:139;;23108:248;;;:::o;23362:419::-;;23566:2;23555:9;23551:18;23543:26;;23615:9;23609:4;23605:20;23601:1;23590:9;23586:17;23579:47;23643:131;23769:4;23643:131;:::i;:::-;23635:139;;23533:248;;;:::o;23787:419::-;;23991:2;23980:9;23976:18;23968:26;;24040:9;24034:4;24030:20;24026:1;24015:9;24011:17;24004:47;24068:131;24194:4;24068:131;:::i;:::-;24060:139;;23958:248;;;:::o;24212:419::-;;24416:2;24405:9;24401:18;24393:26;;24465:9;24459:4;24455:20;24451:1;24440:9;24436:17;24429:47;24493:131;24619:4;24493:131;:::i;:::-;24485:139;;24383:248;;;:::o;24637:419::-;;24841:2;24830:9;24826:18;24818:26;;24890:9;24884:4;24880:20;24876:1;24865:9;24861:17;24854:47;24918:131;25044:4;24918:131;:::i;:::-;24910:139;;24808:248;;;:::o;25062:419::-;;25266:2;25255:9;25251:18;25243:26;;25315:9;25309:4;25305:20;25301:1;25290:9;25286:17;25279:47;25343:131;25469:4;25343:131;:::i;:::-;25335:139;;25233:248;;;:::o;25487:419::-;;25691:2;25680:9;25676:18;25668:26;;25740:9;25734:4;25730:20;25726:1;25715:9;25711:17;25704:47;25768:131;25894:4;25768:131;:::i;:::-;25760:139;;25658:248;;;:::o;25912:419::-;;26116:2;26105:9;26101:18;26093:26;;26165:9;26159:4;26155:20;26151:1;26140:9;26136:17;26129:47;26193:131;26319:4;26193:131;:::i;:::-;26185:139;;26083:248;;;:::o;26337:419::-;;26541:2;26530:9;26526:18;26518:26;;26590:9;26584:4;26580:20;26576:1;26565:9;26561:17;26554:47;26618:131;26744:4;26618:131;:::i;:::-;26610:139;;26508:248;;;:::o;26762:419::-;;26966:2;26955:9;26951:18;26943:26;;27015:9;27009:4;27005:20;27001:1;26990:9;26986:17;26979:47;27043:131;27169:4;27043:131;:::i;:::-;27035:139;;26933:248;;;:::o;27187:419::-;;27391:2;27380:9;27376:18;27368:26;;27440:9;27434:4;27430:20;27426:1;27415:9;27411:17;27404:47;27468:131;27594:4;27468:131;:::i;:::-;27460:139;;27358:248;;;:::o;27612:419::-;;27816:2;27805:9;27801:18;27793:26;;27865:9;27859:4;27855:20;27851:1;27840:9;27836:17;27829:47;27893:131;28019:4;27893:131;:::i;:::-;27885:139;;27783:248;;;:::o;28037:419::-;;28241:2;28230:9;28226:18;28218:26;;28290:9;28284:4;28280:20;28276:1;28265:9;28261:17;28254:47;28318:131;28444:4;28318:131;:::i;:::-;28310:139;;28208:248;;;:::o;28462:419::-;;28666:2;28655:9;28651:18;28643:26;;28715:9;28709:4;28705:20;28701:1;28690:9;28686:17;28679:47;28743:131;28869:4;28743:131;:::i;:::-;28735:139;;28633:248;;;:::o;28887:419::-;;29091:2;29080:9;29076:18;29068:26;;29140:9;29134:4;29130:20;29126:1;29115:9;29111:17;29104:47;29168:131;29294:4;29168:131;:::i;:::-;29160:139;;29058:248;;;:::o;29312:419::-;;29516:2;29505:9;29501:18;29493:26;;29565:9;29559:4;29555:20;29551:1;29540:9;29536:17;29529:47;29593:131;29719:4;29593:131;:::i;:::-;29585:139;;29483:248;;;:::o;29737:419::-;;29941:2;29930:9;29926:18;29918:26;;29990:9;29984:4;29980:20;29976:1;29965:9;29961:17;29954:47;30018:131;30144:4;30018:131;:::i;:::-;30010:139;;29908:248;;;:::o;30162:419::-;;30366:2;30355:9;30351:18;30343:26;;30415:9;30409:4;30405:20;30401:1;30390:9;30386:17;30379:47;30443:131;30569:4;30443:131;:::i;:::-;30435:139;;30333:248;;;:::o;30587:419::-;;30791:2;30780:9;30776:18;30768:26;;30840:9;30834:4;30830:20;30826:1;30815:9;30811:17;30804:47;30868:131;30994:4;30868:131;:::i;:::-;30860:139;;30758:248;;;:::o;31012:419::-;;31216:2;31205:9;31201:18;31193:26;;31265:9;31259:4;31255:20;31251:1;31240:9;31236:17;31229:47;31293:131;31419:4;31293:131;:::i;:::-;31285:139;;31183:248;;;:::o;31437:222::-;;31568:2;31557:9;31553:18;31545:26;;31581:71;31649:1;31638:9;31634:17;31625:6;31581:71;:::i;:::-;31535:124;;;;:::o;31665:283::-;;31731:2;31725:9;31715:19;;31773:4;31765:6;31761:17;31880:6;31868:10;31865:22;31844:18;31832:10;31829:34;31826:62;31823:2;;;31891:18;;:::i;:::-;31823:2;31931:10;31927:2;31920:22;31705:243;;;;:::o;31954:311::-;;32121:18;32113:6;32110:30;32107:2;;;32143:18;;:::i;:::-;32107:2;32193:4;32185:6;32181:17;32173:25;;32253:4;32247;32243:15;32235:23;;32036:229;;;:::o;32271:331::-;;32422:18;32414:6;32411:30;32408:2;;;32444:18;;:::i;:::-;32408:2;32529:4;32525:9;32518:4;32510:6;32506:17;32502:33;32494:41;;32590:4;32584;32580:15;32572:23;;32337:265;;;:::o;32608:332::-;;32760:18;32752:6;32749:30;32746:2;;;32782:18;;:::i;:::-;32746:2;32867:4;32863:9;32856:4;32848:6;32844:17;32840:33;32832:41;;32928:4;32922;32918:15;32910:23;;32675:265;;;:::o;32946:98::-;;33031:5;33025:12;33015:22;;33004:40;;;:::o;33050:99::-;;33136:5;33130:12;33120:22;;33109:40;;;:::o;33155:168::-;;33272:6;33267:3;33260:19;33312:4;33307:3;33303:14;33288:29;;33250:73;;;;:::o;33329:169::-;;33447:6;33442:3;33435:19;33487:4;33482:3;33478:14;33463:29;;33425:73;;;;:::o;33504:148::-;;33643:3;33628:18;;33618:34;;;;:::o;33658:305::-;;33717:20;33735:1;33717:20;:::i;:::-;33712:25;;33751:20;33769:1;33751:20;:::i;:::-;33746:25;;33905:1;33837:66;33833:74;33830:1;33827:81;33824:2;;;33911:18;;:::i;:::-;33824:2;33955:1;33952;33948:9;33941:16;;33702:261;;;;:::o;33969:348::-;;34032:20;34050:1;34032:20;:::i;:::-;34027:25;;34066:20;34084:1;34066:20;:::i;:::-;34061:25;;34254:1;34186:66;34182:74;34179:1;34176:81;34171:1;34164:9;34157:17;34153:105;34150:2;;;34261:18;;:::i;:::-;34150:2;34309:1;34306;34302:9;34291:20;;34017:300;;;;:::o;34323:191::-;;34383:20;34401:1;34383:20;:::i;:::-;34378:25;;34417:20;34435:1;34417:20;:::i;:::-;34412:25;;34456:1;34453;34450:8;34447:2;;;34461:18;;:::i;:::-;34447:2;34506:1;34503;34499:9;34491:17;;34368:146;;;;:::o;34520:96::-;;34586:24;34604:5;34586:24;:::i;:::-;34575:35;;34565:51;;;:::o;34622:90::-;;34699:5;34692:13;34685:21;34674:32;;34664:48;;;:::o;34718:149::-;;34794:66;34787:5;34783:78;34772:89;;34762:105;;;:::o;34873:126::-;;34950:42;34943:5;34939:54;34928:65;;34918:81;;;:::o;35005:77::-;;35071:5;35060:16;;35050:32;;;:::o;35088:154::-;35172:6;35167:3;35162;35149:30;35234:1;35225:6;35220:3;35216:16;35209:27;35139:103;;;:::o;35248:307::-;35316:1;35326:113;35340:6;35337:1;35334:13;35326:113;;;35425:1;35420:3;35416:11;35410:18;35406:1;35401:3;35397:11;35390:39;35362:2;35359:1;35355:10;35350:15;;35326:113;;;35457:6;35454:1;35451:13;35448:2;;;35537:1;35528:6;35523:3;35519:16;35512:27;35448:2;35297:258;;;;:::o;35561:320::-;;35642:1;35636:4;35632:12;35622:22;;35689:1;35683:4;35679:12;35710:18;35700:2;;35766:4;35758:6;35754:17;35744:27;;35700:2;35828;35820:6;35817:14;35797:18;35794:38;35791:2;;;35847:18;;:::i;:::-;35791:2;35612:269;;;;:::o;35887:233::-;;35949:24;35967:5;35949:24;:::i;:::-;35940:33;;35995:66;35988:5;35985:77;35982:2;;;36065:18;;:::i;:::-;35982:2;36112:1;36105:5;36101:13;36094:20;;35930:190;;;:::o;36126:180::-;36174:77;36171:1;36164:88;36271:4;36268:1;36261:15;36295:4;36292:1;36285:15;36312:180;36360:77;36357:1;36350:88;36457:4;36454:1;36447:15;36481:4;36478:1;36471:15;36498:180;36546:77;36543:1;36536:88;36643:4;36640:1;36633:15;36667:4;36664:1;36657:15;36684:102;;36776:2;36772:7;36767:2;36760:5;36756:14;36752:28;36742:38;;36732:54;;;:::o;36792:122::-;36865:24;36883:5;36865:24;:::i;:::-;36858:5;36855:35;36845:2;;36904:1;36901;36894:12;36845:2;36835:79;:::o;36920:116::-;36990:21;37005:5;36990:21;:::i;:::-;36983:5;36980:32;36970:2;;37026:1;37023;37016:12;36970:2;36960:76;:::o;37042:120::-;37114:23;37131:5;37114:23;:::i;:::-;37107:5;37104:34;37094:2;;37152:1;37149;37142:12;37094:2;37084:78;:::o;37168:122::-;37241:24;37259:5;37241:24;:::i;:::-;37234:5;37231:35;37221:2;;37280:1;37277;37270:12;37221:2;37211:79;:::o

Swarm Source

ipfs://03a3d0b032e94d42508a11e8465614c0c8b8bd6b57e4c6f6f6ba489928d0f075
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.