ETH Price: $3,296.20 (-3.61%)
Gas: 12 Gwei

Token

Pixel Foxes Spooky Season (SPOOKYFOXES)
 

Overview

Max Total Supply

512 SPOOKYFOXES

Holders

318

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 SPOOKYFOXES
0xb05b36b986853db8ddd0e04cd68dd6b93da26383
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:
PixelFoxes

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 2021-10-25
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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




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

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




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

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

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

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

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













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

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

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

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

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

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

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

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

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

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

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

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





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







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

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

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





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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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









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


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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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












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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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







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

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

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

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

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

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

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

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





/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature` or error string. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     *
     * Documentation for signature generation:
     * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
     * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
     *
     * _Available since v4.3._
     */
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
     *
     * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s;
        uint8 v;
        assembly {
            s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
            v := add(shr(255, vs), 27)
        }
        return tryRecover(hash, v, r, s);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
     *
     * _Available since v4.2._
     */
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Overload of {ECDSA-tryRecover} that receives the `v`,
     * `r` and `s` signature fields separately.
     *
     * _Available since v4.3._
     */
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}


//........................................................................
//........................................................................
//...||     ||     ||     ||  || ||||||    ||    || ||||||||||||| |||||||
//...|||| ||||    ||||    || ||  ||        |||   || ||      ||   ||||
//...||  || ||   ||  ||   ||||   |||||     || || || |||||   ||     |||||
//...||     ||  ||||||||  || ||  ||        ||  |||| ||      ||        |||
//...||     || ||      || ||  || ||||||    ||    || ||      ||   |||||||
//...
//...||    ||    ||||  ||||||||    ||          ||     ||      ||||||
//...|||   ||   ||  ||    ||        ||   ||   ||     ||||     ||   ||
//...|| || ||  ||    ||   ||         || ||| |||     ||  ||    ||||||
//...||  ||||   ||  ||    ||          |||  |||     ||||||||   ||   ||
//...||    ||    ||||     ||           ||  ||     ||      ||  ||    ||
//........................................................................
//........................they grew up on the outside of society --refugee
//........................................................................

contract PixelFoxes is ERC721Enumerable, Ownable {
    using ECDSA for bytes32;
    using Strings for uint256; 
    string _baseTokenURI;  
    uint256 private _price = 0.0 ether; 
    bool public _paused = true;   
    address private _signatureAddress = 0x527866865Bf4a75fe9c293E342F46BF52f9d7C31;
    mapping(string => bool) private _mintedNonces;
     
    // PixelFoxes
    // Operation SpookySeason = 1000 PixelFoxes
    constructor(
        string memory name,
        string memory symbol,
        string memory baseURI
    ) ERC721(name,symbol)  {
        setBaseURI(baseURI);
    }
 
    function SpookyMint(bytes memory signature, string memory nonce) external {
        uint256 supply = totalSupply(); 
        uint256 num = 1;

        require( !_paused,                                                                   "Minting paused." );
        require( supply + num < 1001,                                                        "Exceeds maximum Sppoky supply." );
        require( balanceOf(msg.sender) <= 1,                                                 "You can only hold 2 mints.");
        require( matchAddresSignature(hashTransaction(msg.sender, num, nonce), signature),   "Direct Mint is not allowed.");
        require(!_mintedNonces[nonce], "Hash already used.");
        
        for(uint256 i; i < num; i++){
            _safeMint( msg.sender, supply + i );
        } 

        _mintedNonces[nonce] = true;
        
    }

    function hashTransaction(address sender, uint256 qty, string memory nonce) private pure returns(bytes32) {
        bytes32 hash = keccak256(abi.encodePacked(
            "\x19Ethereum Signed Message:\n32",
            keccak256(abi.encodePacked(sender, qty, nonce)))
        ); 
        return hash;
    }

    function matchAddresSignature(bytes32 hash, bytes memory signature) private view returns(bool) {
        return _signatureAddress == hash.recover(signature);
    }

    function setSignatureAddress(address addr) external onlyOwner {
        _signatureAddress = addr;
    }

    function giveAway(address _to, uint256 _amount) external onlyOwner() {
        uint256 supply = totalSupply(); 
        require( supply + _amount < 1001,  "Exceeds maximum Spooky Season supply" );
        for(uint256 i; i < _amount; i++){
            _safeMint( _to, supply + i );
        } 
    }

    function walletOfOwner(address _owner) public view returns(uint256[] memory) {
        uint256 tokenCount = balanceOf(_owner); 
        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint256 i; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
    }
    
    function setPrice(uint256 _newPrice) public onlyOwner() {
        _price = _newPrice;
    }

    function getPrice() public view returns (uint256){
        return _price;
    }
 
    function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }
    
    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseTokenURI = baseURI;
    }
 
    function pause(bool val) public onlyOwner {
        _paused = val;
    }
     
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"string","name":"nonce","type":"string"}],"name":"SpookyMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setSignatureAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"}]

60806040526000600c556001600d60006101000a81548160ff02191690831515021790555073527866865bf4a75fe9c293e342f46bf52f9d7c31600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200008657600080fd5b5060405162004fef38038062004fef8339818101604052810190620000ac9190620003e1565b82828160009080519060200190620000c6929190620002bf565b508060019080519060200190620000df929190620002bf565b50505062000102620000f66200011c60201b60201c565b6200012460201b60201c565b6200011381620001ea60201b60201c565b50505062000628565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001fa6200011c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002206200029560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000279576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027090620004c4565b60405180910390fd5b80600b908051906020019062000291929190620002bf565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002cd9062000594565b90600052602060002090601f016020900481019282620002f157600085556200033d565b82601f106200030c57805160ff19168380011785556200033d565b828001600101855582156200033d579182015b828111156200033c5782518255916020019190600101906200031f565b5b5090506200034c919062000350565b5090565b5b808211156200036b57600081600090555060010162000351565b5090565b60006200038662000380846200051a565b620004e6565b9050828152602081018484840111156200039f57600080fd5b620003ac8482856200055e565b509392505050565b600082601f830112620003c657600080fd5b8151620003d88482602086016200036f565b91505092915050565b600080600060608486031215620003f757600080fd5b600084015167ffffffffffffffff8111156200041257600080fd5b6200042086828701620003b4565b935050602084015167ffffffffffffffff8111156200043e57600080fd5b6200044c86828701620003b4565b925050604084015167ffffffffffffffff8111156200046a57600080fd5b6200047886828701620003b4565b9150509250925092565b6000620004916020836200054d565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006020820190508181036000830152620004df8162000482565b9050919050565b6000604051905081810181811067ffffffffffffffff8211171562000510576200050f620005f9565b5b8060405250919050565b600067ffffffffffffffff821115620005385762000537620005f9565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b60005b838110156200057e57808201518184015260208101905062000561565b838111156200058e576000848401525b50505050565b60006002820490506001821680620005ad57607f821691505b60208210811415620005c457620005c3620005ca565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6149b780620006386000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd146104ef578063ca8001441461051f578063e985e9c51461053b578063f2fde38b1461056b576101c4565b8063a22cb4651461049b578063b0129f5e146104b7578063b88d4fde146104d3576101c4565b806391b7f5ed116100d357806391b7f5ed1461042757806391e0630e1461044357806395d89b411461045f57806398d5fdca1461047d576101c4565b806370a08231146103cf578063715018a6146103ff5780638da5cb5b14610409576101c4565b806323b872dd11610166578063438b630011610140578063438b6300146103235780634f6ccce71461035357806355f804b3146103835780636352211e1461039f576101c4565b806323b872dd146102bb5780632f745c59146102d757806342842e0e14610307576101c4565b8063081812fc116101a2578063081812fc14610233578063095ea7b31461026357806316c61ccc1461027f57806318160ddd1461029d576101c4565b806301ffc9a7146101c957806302329a29146101f957806306fdde0314610215575b600080fd5b6101e360048036038101906101de91906132ec565b610587565b6040516101f091906140b5565b60405180910390f35b610213600480360381019061020e91906132c3565b610601565b005b61021d61069a565b60405161022a9190614115565b60405180910390f35b61024d600480360381019061024891906133eb565b61072c565b60405161025a919061402c565b60405180910390f35b61027d60048036038101906102789190613287565b6107b1565b005b6102876108c9565b60405161029491906140b5565b60405180910390f35b6102a56108dc565b6040516102b291906144b7565b60405180910390f35b6102d560048036038101906102d09190613181565b6108e9565b005b6102f160048036038101906102ec9190613287565b610949565b6040516102fe91906144b7565b60405180910390f35b610321600480360381019061031c9190613181565b6109ee565b005b61033d6004803603810190610338919061311c565b610a0e565b60405161034a9190614093565b60405180910390f35b61036d600480360381019061036891906133eb565b610b08565b60405161037a91906144b7565b60405180910390f35b61039d600480360381019061039891906133aa565b610b9f565b005b6103b960048036038101906103b491906133eb565b610c35565b6040516103c6919061402c565b60405180910390f35b6103e960048036038101906103e4919061311c565b610ce7565b6040516103f691906144b7565b60405180910390f35b610407610d9f565b005b610411610e27565b60405161041e919061402c565b60405180910390f35b610441600480360381019061043c91906133eb565b610e51565b005b61045d6004803603810190610458919061333e565b610ed7565b005b610467611104565b6040516104749190614115565b60405180910390f35b610485611196565b60405161049291906144b7565b60405180910390f35b6104b560048036038101906104b0919061324b565b6111a0565b005b6104d160048036038101906104cc919061311c565b611321565b005b6104ed60048036038101906104e891906131d0565b6113e1565b005b610509600480360381019061050491906133eb565b611443565b6040516105169190614115565b60405180910390f35b61053960048036038101906105349190613287565b6114ea565b005b61055560048036038101906105509190613145565b6115fa565b60405161056291906140b5565b60405180910390f35b6105856004803603810190610580919061311c565b61168e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105fa57506105f982611786565b5b9050919050565b610609611868565b73ffffffffffffffffffffffffffffffffffffffff16610627610e27565b73ffffffffffffffffffffffffffffffffffffffff161461067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067490614377565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6060600080546106a990614767565b80601f01602080910402602001604051908101604052809291908181526020018280546106d590614767565b80156107225780601f106106f757610100808354040283529160200191610722565b820191906000526020600020905b81548152906001019060200180831161070557829003601f168201915b5050505050905090565b600061073782611870565b610776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076d90614337565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107bc82610c35565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082490614437565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661084c611868565b73ffffffffffffffffffffffffffffffffffffffff16148061087b575061087a81610875611868565b6115fa565b5b6108ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b190614297565b60405180910390fd5b6108c483836118dc565b505050565b600d60009054906101000a900460ff1681565b6000600880549050905090565b6108fa6108f4611868565b82611995565b610939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093090614457565b60405180910390fd5b610944838383611a73565b505050565b600061095483610ce7565b8210610995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098c90614177565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610a09838383604051806020016040528060008152506113e1565b505050565b60606000610a1b83610ce7565b905060008167ffffffffffffffff811115610a5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610a8d5781602001602082028036833780820191505090505b50905060005b82811015610afd57610aa58582610949565b828281518110610ade577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610af590614799565b915050610a93565b508092505050919050565b6000610b126108dc565b8210610b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4a90614477565b60405180910390fd5b60088281548110610b8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610ba7611868565b73ffffffffffffffffffffffffffffffffffffffff16610bc5610e27565b73ffffffffffffffffffffffffffffffffffffffff1614610c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1290614377565b60405180910390fd5b80600b9080519060200190610c31929190612f40565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd5906142d7565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f906142b7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610da7611868565b73ffffffffffffffffffffffffffffffffffffffff16610dc5610e27565b73ffffffffffffffffffffffffffffffffffffffff1614610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290614377565b60405180910390fd5b610e256000611ccf565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e59611868565b73ffffffffffffffffffffffffffffffffffffffff16610e77610e27565b73ffffffffffffffffffffffffffffffffffffffff1614610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec490614377565b60405180910390fd5b80600c8190555050565b6000610ee16108dc565b9050600060019050600d60009054906101000a900460ff1615610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3090614357565b60405180910390fd5b6103e98183610f4891906145df565b10610f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7f90614397565b60405180910390fd5b6001610f9333610ce7565b1115610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90614417565b60405180910390fd5b610fe8610fe2338386611d95565b85611df6565b611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e90614497565b60405180910390fd5b600e836040516110379190613fcb565b908152602001604051809103902060009054906101000a900460ff1615611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a90614277565b60405180910390fd5b60005b818110156110c6576110b33382856110ae91906145df565b611e63565b80806110be90614799565b915050611096565b506001600e846040516110d99190613fcb565b908152602001604051809103902060006101000a81548160ff02191690831515021790555050505050565b60606001805461111390614767565b80601f016020809104026020016040519081016040528092919081815260200182805461113f90614767565b801561118c5780601f106111615761010080835404028352916020019161118c565b820191906000526020600020905b81548152906001019060200180831161116f57829003601f168201915b5050505050905090565b6000600c54905090565b6111a8611868565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614217565b60405180910390fd5b8060056000611223611868565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166112d0611868565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161131591906140b5565b60405180910390a35050565b611329611868565b73ffffffffffffffffffffffffffffffffffffffff16611347610e27565b73ffffffffffffffffffffffffffffffffffffffff161461139d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139490614377565b60405180910390fd5b80600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113f26113ec611868565b83611995565b611431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142890614457565b60405180910390fd5b61143d84848484611e81565b50505050565b606061144e82611870565b61148d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611484906143f7565b60405180910390fd5b6000611497611edd565b905060008151116114b757604051806020016040528060008152506114e2565b806114c184611f6f565b6040516020016114d2929190613fe2565b6040516020818303038152906040525b915050919050565b6114f2611868565b73ffffffffffffffffffffffffffffffffffffffff16611510610e27565b73ffffffffffffffffffffffffffffffffffffffff1614611566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155d90614377565b60405180910390fd5b60006115706108dc565b90506103e9828261158191906145df565b106115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b8906143b7565b60405180910390fd5b60005b828110156115f4576115e18482846115dc91906145df565b611e63565b80806115ec90614799565b9150506115c4565b50505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611696611868565b73ffffffffffffffffffffffffffffffffffffffff166116b4610e27565b73ffffffffffffffffffffffffffffffffffffffff161461170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170190614377565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561177a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611771906141b7565b60405180910390fd5b61178381611ccf565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061185157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061186157506118608261211c565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661194f83610c35565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119a082611870565b6119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d690614257565b60405180910390fd5b60006119ea83610c35565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a5957508373ffffffffffffffffffffffffffffffffffffffff16611a418461072c565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a6a5750611a6981856115fa565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a9382610c35565b73ffffffffffffffffffffffffffffffffffffffff1614611ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae0906143d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b50906141f7565b60405180910390fd5b611b64838383612186565b611b6f6000826118dc565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bbf9190614666565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c1691906145df565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080848484604051602001611dad93929190613f92565b60405160208183030381529060405280519060200120604051602001611dd39190614006565b604051602081830303815290604052805190602001209050809150509392505050565b6000611e0b828461229a90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b611e7d8282604051806020016040528060008152506122c1565b5050565b611e8c848484611a73565b611e988484848461231c565b611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece90614197565b60405180910390fd5b50505050565b6060600b8054611eec90614767565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1890614767565b8015611f655780601f10611f3a57610100808354040283529160200191611f65565b820191906000526020600020905b815481529060010190602001808311611f4857829003601f168201915b5050505050905090565b60606000821415611fb7576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612117565b600082905060005b60008214611fe9578080611fd290614799565b915050600a82611fe29190614635565b9150611fbf565b60008167ffffffffffffffff81111561202b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561205d5781602001600182028036833780820191505090505b5090505b60008514612110576001826120769190614666565b9150600a85612085919061481a565b603061209191906145df565b60f81b8183815181106120cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121099190614635565b9450612061565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121918383836124b3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121d4576121cf816124b8565b612213565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612212576122118382612501565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612256576122518161266e565b612295565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122945761229382826127b1565b5b5b505050565b60008060006122a98585612830565b915091506122b6816128b3565b819250505092915050565b6122cb8383612c04565b6122d8600084848461231c565b612317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230e90614197565b60405180910390fd5b505050565b600061233d8473ffffffffffffffffffffffffffffffffffffffff16612dd2565b156124a6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612366611868565b8786866040518563ffffffff1660e01b81526004016123889493929190614047565b602060405180830381600087803b1580156123a257600080fd5b505af19250505080156123d357506040513d601f19601f820116820180604052508101906123d09190613315565b60015b612456573d8060008114612403576040519150601f19603f3d011682016040523d82523d6000602084013e612408565b606091505b5060008151141561244e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244590614197565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124ab565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161250e84610ce7565b6125189190614666565b90506000600760008481526020019081526020016000205490508181146125fd576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506126829190614666565b90506000600960008481526020019081526020016000205490506000600883815481106126d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612720577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612795577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006127bc83610ce7565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000806041835114156128725760008060006020860151925060408601519150606086015160001a905061286687828585612de5565b945094505050506128ac565b6040835114156128a3576000806020850151915060408501519050612898868383612ef2565b9350935050506128ac565b60006002915091505b9250929050565b600060048111156128ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612926577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561293157612c01565b6001600481111561296b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156129a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156129e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129dc90614137565b60405180910390fd5b60026004811115612a1f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612a58577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9090614157565b60405180910390fd5b60036004811115612ad3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612b0c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4490614237565b60405180910390fd5b600480811115612b86577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612bbf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf7906142f7565b60405180910390fd5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6b90614317565b60405180910390fd5b612c7d81611870565b15612cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb4906141d7565b60405180910390fd5b612cc960008383612186565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d1991906145df565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612e20576000600391509150612ee9565b601b8560ff1614158015612e385750601c8560ff1614155b15612e4a576000600491509150612ee9565b600060018787878760405160008152602001604052604051612e6f94939291906140d0565b6020604051602081039080840390855afa158015612e91573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ee057600060019250925050612ee9565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050612f3287828885612de5565b935093505050935093915050565b828054612f4c90614767565b90600052602060002090601f016020900481019282612f6e5760008555612fb5565b82601f10612f8757805160ff1916838001178555612fb5565b82800160010185558215612fb5579182015b82811115612fb4578251825591602001919060010190612f99565b5b509050612fc29190612fc6565b5090565b5b80821115612fdf576000816000905550600101612fc7565b5090565b6000612ff6612ff184614503565b6144d2565b90508281526020810184848401111561300e57600080fd5b613019848285614725565b509392505050565b600061303461302f84614533565b6144d2565b90508281526020810184848401111561304c57600080fd5b613057848285614725565b509392505050565b60008135905061306e81614925565b92915050565b6000813590506130838161493c565b92915050565b60008135905061309881614953565b92915050565b6000815190506130ad81614953565b92915050565b600082601f8301126130c457600080fd5b81356130d4848260208601612fe3565b91505092915050565b600082601f8301126130ee57600080fd5b81356130fe848260208601613021565b91505092915050565b6000813590506131168161496a565b92915050565b60006020828403121561312e57600080fd5b600061313c8482850161305f565b91505092915050565b6000806040838503121561315857600080fd5b60006131668582860161305f565b92505060206131778582860161305f565b9150509250929050565b60008060006060848603121561319657600080fd5b60006131a48682870161305f565b93505060206131b58682870161305f565b92505060406131c686828701613107565b9150509250925092565b600080600080608085870312156131e657600080fd5b60006131f48782880161305f565b94505060206132058782880161305f565b935050604061321687828801613107565b925050606085013567ffffffffffffffff81111561323357600080fd5b61323f878288016130b3565b91505092959194509250565b6000806040838503121561325e57600080fd5b600061326c8582860161305f565b925050602061327d85828601613074565b9150509250929050565b6000806040838503121561329a57600080fd5b60006132a88582860161305f565b92505060206132b985828601613107565b9150509250929050565b6000602082840312156132d557600080fd5b60006132e384828501613074565b91505092915050565b6000602082840312156132fe57600080fd5b600061330c84828501613089565b91505092915050565b60006020828403121561332757600080fd5b60006133358482850161309e565b91505092915050565b6000806040838503121561335157600080fd5b600083013567ffffffffffffffff81111561336b57600080fd5b613377858286016130b3565b925050602083013567ffffffffffffffff81111561339457600080fd5b6133a0858286016130dd565b9150509250929050565b6000602082840312156133bc57600080fd5b600082013567ffffffffffffffff8111156133d657600080fd5b6133e2848285016130dd565b91505092915050565b6000602082840312156133fd57600080fd5b600061340b84828501613107565b91505092915050565b60006134208383613f4e565b60208301905092915050565b6134358161469a565b82525050565b61344c6134478261469a565b6147e2565b82525050565b600061345d82614573565b61346781856145a1565b935061347283614563565b8060005b838110156134a357815161348a8882613414565b975061349583614594565b925050600181019050613476565b5085935050505092915050565b6134b9816146ac565b82525050565b6134c8816146b8565b82525050565b6134df6134da826146b8565b6147f4565b82525050565b60006134f08261457e565b6134fa81856145b2565b935061350a818560208601614734565b61351381614907565b840191505092915050565b600061352982614589565b61353381856145c3565b9350613543818560208601614734565b61354c81614907565b840191505092915050565b600061356282614589565b61356c81856145d4565b935061357c818560208601614734565b80840191505092915050565b60006135956018836145c3565b91507f45434453413a20696e76616c6964207369676e617475726500000000000000006000830152602082019050919050565b60006135d5601f836145c3565b91507f45434453413a20696e76616c6964207369676e6174757265206c656e677468006000830152602082019050919050565b6000613615601c836145d4565b91507f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000830152601c82019050919050565b6000613655602b836145c3565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006136bb6032836145c3565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006137216026836145c3565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613787601c836145c3565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006137c76024836145c3565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061382d6019836145c3565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b600061386d6022836145c3565b91507f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138d3602c836145c3565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006139396012836145c3565b91507f4861736820616c726561647920757365642e00000000000000000000000000006000830152602082019050919050565b60006139796038836145c3565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006139df602a836145c3565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a456029836145c3565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613aab6022836145c3565b91507f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b116020836145c3565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613b51602c836145c3565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613bb7600f836145c3565b91507f4d696e74696e67207061757365642e00000000000000000000000000000000006000830152602082019050919050565b6000613bf76020836145c3565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613c37601e836145c3565b91507f45786365656473206d6178696d756d205370706f6b7920737570706c792e00006000830152602082019050919050565b6000613c776024836145c3565b91507f45786365656473206d6178696d756d2053706f6f6b7920536561736f6e20737560008301527f70706c79000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cdd6029836145c3565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d43602f836145c3565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613da9601a836145c3565b91507f596f752063616e206f6e6c7920686f6c642032206d696e74732e0000000000006000830152602082019050919050565b6000613de96021836145c3565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e4f6031836145c3565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613eb5602c836145c3565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613f1b601b836145c3565b91507f446972656374204d696e74206973206e6f7420616c6c6f7765642e00000000006000830152602082019050919050565b613f578161470e565b82525050565b613f668161470e565b82525050565b613f7d613f788261470e565b614810565b82525050565b613f8c81614718565b82525050565b6000613f9e828661343b565b601482019150613fae8285613f6c565b602082019150613fbe8284613557565b9150819050949350505050565b6000613fd78284613557565b915081905092915050565b6000613fee8285613557565b9150613ffa8284613557565b91508190509392505050565b600061401182613608565b915061401d82846134ce565b60208201915081905092915050565b6000602082019050614041600083018461342c565b92915050565b600060808201905061405c600083018761342c565b614069602083018661342c565b6140766040830185613f5d565b818103606083015261408881846134e5565b905095945050505050565b600060208201905081810360008301526140ad8184613452565b905092915050565b60006020820190506140ca60008301846134b0565b92915050565b60006080820190506140e560008301876134bf565b6140f26020830186613f83565b6140ff60408301856134bf565b61410c60608301846134bf565b95945050505050565b6000602082019050818103600083015261412f818461351e565b905092915050565b6000602082019050818103600083015261415081613588565b9050919050565b60006020820190508181036000830152614170816135c8565b9050919050565b6000602082019050818103600083015261419081613648565b9050919050565b600060208201905081810360008301526141b0816136ae565b9050919050565b600060208201905081810360008301526141d081613714565b9050919050565b600060208201905081810360008301526141f08161377a565b9050919050565b60006020820190508181036000830152614210816137ba565b9050919050565b6000602082019050818103600083015261423081613820565b9050919050565b6000602082019050818103600083015261425081613860565b9050919050565b60006020820190508181036000830152614270816138c6565b9050919050565b600060208201905081810360008301526142908161392c565b9050919050565b600060208201905081810360008301526142b08161396c565b9050919050565b600060208201905081810360008301526142d0816139d2565b9050919050565b600060208201905081810360008301526142f081613a38565b9050919050565b6000602082019050818103600083015261431081613a9e565b9050919050565b6000602082019050818103600083015261433081613b04565b9050919050565b6000602082019050818103600083015261435081613b44565b9050919050565b6000602082019050818103600083015261437081613baa565b9050919050565b6000602082019050818103600083015261439081613bea565b9050919050565b600060208201905081810360008301526143b081613c2a565b9050919050565b600060208201905081810360008301526143d081613c6a565b9050919050565b600060208201905081810360008301526143f081613cd0565b9050919050565b6000602082019050818103600083015261441081613d36565b9050919050565b6000602082019050818103600083015261443081613d9c565b9050919050565b6000602082019050818103600083015261445081613ddc565b9050919050565b6000602082019050818103600083015261447081613e42565b9050919050565b6000602082019050818103600083015261449081613ea8565b9050919050565b600060208201905081810360008301526144b081613f0e565b9050919050565b60006020820190506144cc6000830184613f5d565b92915050565b6000604051905081810181811067ffffffffffffffff821117156144f9576144f86148d8565b5b8060405250919050565b600067ffffffffffffffff82111561451e5761451d6148d8565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561454e5761454d6148d8565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006145ea8261470e565b91506145f58361470e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561462a5761462961484b565b5b828201905092915050565b60006146408261470e565b915061464b8361470e565b92508261465b5761465a61487a565b5b828204905092915050565b60006146718261470e565b915061467c8361470e565b92508282101561468f5761468e61484b565b5b828203905092915050565b60006146a5826146ee565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614752578082015181840152602081019050614737565b83811115614761576000848401525b50505050565b6000600282049050600182168061477f57607f821691505b60208210811415614793576147926148a9565b5b50919050565b60006147a48261470e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147d7576147d661484b565b5b600182019050919050565b60006147ed826147fe565b9050919050565b6000819050919050565b600061480982614918565b9050919050565b6000819050919050565b60006148258261470e565b91506148308361470e565b9250826148405761483f61487a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b61492e8161469a565b811461493957600080fd5b50565b614945816146ac565b811461495057600080fd5b50565b61495c816146c2565b811461496757600080fd5b50565b6149738161470e565b811461497e57600080fd5b5056fea2646970667358221220fe0fa85f8bae596c72dd31e86b92e2d7297541158cce221e323709a37d6fd95164736f6c63430008000033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000019506978656c20466f7865732053706f6f6b7920536561736f6e00000000000000000000000000000000000000000000000000000000000000000000000000000b53504f4f4b59464f584553000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f746f6b656e746f7563616e2e636f6d2f706673736e6674732f00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063a22cb46511610097578063c87b56dd11610071578063c87b56dd146104ef578063ca8001441461051f578063e985e9c51461053b578063f2fde38b1461056b576101c4565b8063a22cb4651461049b578063b0129f5e146104b7578063b88d4fde146104d3576101c4565b806391b7f5ed116100d357806391b7f5ed1461042757806391e0630e1461044357806395d89b411461045f57806398d5fdca1461047d576101c4565b806370a08231146103cf578063715018a6146103ff5780638da5cb5b14610409576101c4565b806323b872dd11610166578063438b630011610140578063438b6300146103235780634f6ccce71461035357806355f804b3146103835780636352211e1461039f576101c4565b806323b872dd146102bb5780632f745c59146102d757806342842e0e14610307576101c4565b8063081812fc116101a2578063081812fc14610233578063095ea7b31461026357806316c61ccc1461027f57806318160ddd1461029d576101c4565b806301ffc9a7146101c957806302329a29146101f957806306fdde0314610215575b600080fd5b6101e360048036038101906101de91906132ec565b610587565b6040516101f091906140b5565b60405180910390f35b610213600480360381019061020e91906132c3565b610601565b005b61021d61069a565b60405161022a9190614115565b60405180910390f35b61024d600480360381019061024891906133eb565b61072c565b60405161025a919061402c565b60405180910390f35b61027d60048036038101906102789190613287565b6107b1565b005b6102876108c9565b60405161029491906140b5565b60405180910390f35b6102a56108dc565b6040516102b291906144b7565b60405180910390f35b6102d560048036038101906102d09190613181565b6108e9565b005b6102f160048036038101906102ec9190613287565b610949565b6040516102fe91906144b7565b60405180910390f35b610321600480360381019061031c9190613181565b6109ee565b005b61033d6004803603810190610338919061311c565b610a0e565b60405161034a9190614093565b60405180910390f35b61036d600480360381019061036891906133eb565b610b08565b60405161037a91906144b7565b60405180910390f35b61039d600480360381019061039891906133aa565b610b9f565b005b6103b960048036038101906103b491906133eb565b610c35565b6040516103c6919061402c565b60405180910390f35b6103e960048036038101906103e4919061311c565b610ce7565b6040516103f691906144b7565b60405180910390f35b610407610d9f565b005b610411610e27565b60405161041e919061402c565b60405180910390f35b610441600480360381019061043c91906133eb565b610e51565b005b61045d6004803603810190610458919061333e565b610ed7565b005b610467611104565b6040516104749190614115565b60405180910390f35b610485611196565b60405161049291906144b7565b60405180910390f35b6104b560048036038101906104b0919061324b565b6111a0565b005b6104d160048036038101906104cc919061311c565b611321565b005b6104ed60048036038101906104e891906131d0565b6113e1565b005b610509600480360381019061050491906133eb565b611443565b6040516105169190614115565b60405180910390f35b61053960048036038101906105349190613287565b6114ea565b005b61055560048036038101906105509190613145565b6115fa565b60405161056291906140b5565b60405180910390f35b6105856004803603810190610580919061311c565b61168e565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105fa57506105f982611786565b5b9050919050565b610609611868565b73ffffffffffffffffffffffffffffffffffffffff16610627610e27565b73ffffffffffffffffffffffffffffffffffffffff161461067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067490614377565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6060600080546106a990614767565b80601f01602080910402602001604051908101604052809291908181526020018280546106d590614767565b80156107225780601f106106f757610100808354040283529160200191610722565b820191906000526020600020905b81548152906001019060200180831161070557829003601f168201915b5050505050905090565b600061073782611870565b610776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161076d90614337565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107bc82610c35565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082490614437565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661084c611868565b73ffffffffffffffffffffffffffffffffffffffff16148061087b575061087a81610875611868565b6115fa565b5b6108ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b190614297565b60405180910390fd5b6108c483836118dc565b505050565b600d60009054906101000a900460ff1681565b6000600880549050905090565b6108fa6108f4611868565b82611995565b610939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093090614457565b60405180910390fd5b610944838383611a73565b505050565b600061095483610ce7565b8210610995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098c90614177565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610a09838383604051806020016040528060008152506113e1565b505050565b60606000610a1b83610ce7565b905060008167ffffffffffffffff811115610a5f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015610a8d5781602001602082028036833780820191505090505b50905060005b82811015610afd57610aa58582610949565b828281518110610ade577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508080610af590614799565b915050610a93565b508092505050919050565b6000610b126108dc565b8210610b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4a90614477565b60405180910390fd5b60088281548110610b8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610ba7611868565b73ffffffffffffffffffffffffffffffffffffffff16610bc5610e27565b73ffffffffffffffffffffffffffffffffffffffff1614610c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1290614377565b60405180910390fd5b80600b9080519060200190610c31929190612f40565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd5906142d7565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4f906142b7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610da7611868565b73ffffffffffffffffffffffffffffffffffffffff16610dc5610e27565b73ffffffffffffffffffffffffffffffffffffffff1614610e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1290614377565b60405180910390fd5b610e256000611ccf565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e59611868565b73ffffffffffffffffffffffffffffffffffffffff16610e77610e27565b73ffffffffffffffffffffffffffffffffffffffff1614610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec490614377565b60405180910390fd5b80600c8190555050565b6000610ee16108dc565b9050600060019050600d60009054906101000a900460ff1615610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3090614357565b60405180910390fd5b6103e98183610f4891906145df565b10610f88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7f90614397565b60405180910390fd5b6001610f9333610ce7565b1115610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90614417565b60405180910390fd5b610fe8610fe2338386611d95565b85611df6565b611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e90614497565b60405180910390fd5b600e836040516110379190613fcb565b908152602001604051809103902060009054906101000a900460ff1615611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a90614277565b60405180910390fd5b60005b818110156110c6576110b33382856110ae91906145df565b611e63565b80806110be90614799565b915050611096565b506001600e846040516110d99190613fcb565b908152602001604051809103902060006101000a81548160ff02191690831515021790555050505050565b60606001805461111390614767565b80601f016020809104026020016040519081016040528092919081815260200182805461113f90614767565b801561118c5780601f106111615761010080835404028352916020019161118c565b820191906000526020600020905b81548152906001019060200180831161116f57829003601f168201915b5050505050905090565b6000600c54905090565b6111a8611868565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90614217565b60405180910390fd5b8060056000611223611868565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166112d0611868565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161131591906140b5565b60405180910390a35050565b611329611868565b73ffffffffffffffffffffffffffffffffffffffff16611347610e27565b73ffffffffffffffffffffffffffffffffffffffff161461139d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139490614377565b60405180910390fd5b80600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113f26113ec611868565b83611995565b611431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142890614457565b60405180910390fd5b61143d84848484611e81565b50505050565b606061144e82611870565b61148d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611484906143f7565b60405180910390fd5b6000611497611edd565b905060008151116114b757604051806020016040528060008152506114e2565b806114c184611f6f565b6040516020016114d2929190613fe2565b6040516020818303038152906040525b915050919050565b6114f2611868565b73ffffffffffffffffffffffffffffffffffffffff16611510610e27565b73ffffffffffffffffffffffffffffffffffffffff1614611566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155d90614377565b60405180910390fd5b60006115706108dc565b90506103e9828261158191906145df565b106115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b8906143b7565b60405180910390fd5b60005b828110156115f4576115e18482846115dc91906145df565b611e63565b80806115ec90614799565b9150506115c4565b50505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611696611868565b73ffffffffffffffffffffffffffffffffffffffff166116b4610e27565b73ffffffffffffffffffffffffffffffffffffffff161461170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170190614377565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561177a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611771906141b7565b60405180910390fd5b61178381611ccf565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061185157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061186157506118608261211c565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661194f83610c35565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119a082611870565b6119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d690614257565b60405180910390fd5b60006119ea83610c35565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611a5957508373ffffffffffffffffffffffffffffffffffffffff16611a418461072c565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a6a5750611a6981856115fa565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a9382610c35565b73ffffffffffffffffffffffffffffffffffffffff1614611ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae0906143d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b50906141f7565b60405180910390fd5b611b64838383612186565b611b6f6000826118dc565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bbf9190614666565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c1691906145df565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080848484604051602001611dad93929190613f92565b60405160208183030381529060405280519060200120604051602001611dd39190614006565b604051602081830303815290604052805190602001209050809150509392505050565b6000611e0b828461229a90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b611e7d8282604051806020016040528060008152506122c1565b5050565b611e8c848484611a73565b611e988484848461231c565b611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece90614197565b60405180910390fd5b50505050565b6060600b8054611eec90614767565b80601f0160208091040260200160405190810160405280929190818152602001828054611f1890614767565b8015611f655780601f10611f3a57610100808354040283529160200191611f65565b820191906000526020600020905b815481529060010190602001808311611f4857829003601f168201915b5050505050905090565b60606000821415611fb7576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612117565b600082905060005b60008214611fe9578080611fd290614799565b915050600a82611fe29190614635565b9150611fbf565b60008167ffffffffffffffff81111561202b577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561205d5781602001600182028036833780820191505090505b5090505b60008514612110576001826120769190614666565b9150600a85612085919061481a565b603061209191906145df565b60f81b8183815181106120cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121099190614635565b9450612061565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6121918383836124b3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121d4576121cf816124b8565b612213565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612212576122118382612501565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612256576122518161266e565b612295565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146122945761229382826127b1565b5b5b505050565b60008060006122a98585612830565b915091506122b6816128b3565b819250505092915050565b6122cb8383612c04565b6122d8600084848461231c565b612317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230e90614197565b60405180910390fd5b505050565b600061233d8473ffffffffffffffffffffffffffffffffffffffff16612dd2565b156124a6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612366611868565b8786866040518563ffffffff1660e01b81526004016123889493929190614047565b602060405180830381600087803b1580156123a257600080fd5b505af19250505080156123d357506040513d601f19601f820116820180604052508101906123d09190613315565b60015b612456573d8060008114612403576040519150601f19603f3d011682016040523d82523d6000602084013e612408565b606091505b5060008151141561244e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244590614197565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506124ab565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161250e84610ce7565b6125189190614666565b90506000600760008481526020019081526020016000205490508181146125fd576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506126829190614666565b90506000600960008481526020019081526020016000205490506000600883815481106126d8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612720577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612795577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b60006127bc83610ce7565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000806041835114156128725760008060006020860151925060408601519150606086015160001a905061286687828585612de5565b945094505050506128ac565b6040835114156128a3576000806020850151915060408501519050612898868383612ef2565b9350935050506128ac565b60006002915091505b9250929050565b600060048111156128ed577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612926577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561293157612c01565b6001600481111561296b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156129a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156129e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129dc90614137565b60405180910390fd5b60026004811115612a1f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612a58577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9090614157565b60405180910390fd5b60036004811115612ad3577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612b0c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4490614237565b60405180910390fd5b600480811115612b86577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612bbf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf7906142f7565b60405180910390fd5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6b90614317565b60405180910390fd5b612c7d81611870565b15612cbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb4906141d7565b60405180910390fd5b612cc960008383612186565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d1991906145df565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612e20576000600391509150612ee9565b601b8560ff1614158015612e385750601c8560ff1614155b15612e4a576000600491509150612ee9565b600060018787878760405160008152602001604052604051612e6f94939291906140d0565b6020604051602081039080840390855afa158015612e91573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ee057600060019250925050612ee9565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050612f3287828885612de5565b935093505050935093915050565b828054612f4c90614767565b90600052602060002090601f016020900481019282612f6e5760008555612fb5565b82601f10612f8757805160ff1916838001178555612fb5565b82800160010185558215612fb5579182015b82811115612fb4578251825591602001919060010190612f99565b5b509050612fc29190612fc6565b5090565b5b80821115612fdf576000816000905550600101612fc7565b5090565b6000612ff6612ff184614503565b6144d2565b90508281526020810184848401111561300e57600080fd5b613019848285614725565b509392505050565b600061303461302f84614533565b6144d2565b90508281526020810184848401111561304c57600080fd5b613057848285614725565b509392505050565b60008135905061306e81614925565b92915050565b6000813590506130838161493c565b92915050565b60008135905061309881614953565b92915050565b6000815190506130ad81614953565b92915050565b600082601f8301126130c457600080fd5b81356130d4848260208601612fe3565b91505092915050565b600082601f8301126130ee57600080fd5b81356130fe848260208601613021565b91505092915050565b6000813590506131168161496a565b92915050565b60006020828403121561312e57600080fd5b600061313c8482850161305f565b91505092915050565b6000806040838503121561315857600080fd5b60006131668582860161305f565b92505060206131778582860161305f565b9150509250929050565b60008060006060848603121561319657600080fd5b60006131a48682870161305f565b93505060206131b58682870161305f565b92505060406131c686828701613107565b9150509250925092565b600080600080608085870312156131e657600080fd5b60006131f48782880161305f565b94505060206132058782880161305f565b935050604061321687828801613107565b925050606085013567ffffffffffffffff81111561323357600080fd5b61323f878288016130b3565b91505092959194509250565b6000806040838503121561325e57600080fd5b600061326c8582860161305f565b925050602061327d85828601613074565b9150509250929050565b6000806040838503121561329a57600080fd5b60006132a88582860161305f565b92505060206132b985828601613107565b9150509250929050565b6000602082840312156132d557600080fd5b60006132e384828501613074565b91505092915050565b6000602082840312156132fe57600080fd5b600061330c84828501613089565b91505092915050565b60006020828403121561332757600080fd5b60006133358482850161309e565b91505092915050565b6000806040838503121561335157600080fd5b600083013567ffffffffffffffff81111561336b57600080fd5b613377858286016130b3565b925050602083013567ffffffffffffffff81111561339457600080fd5b6133a0858286016130dd565b9150509250929050565b6000602082840312156133bc57600080fd5b600082013567ffffffffffffffff8111156133d657600080fd5b6133e2848285016130dd565b91505092915050565b6000602082840312156133fd57600080fd5b600061340b84828501613107565b91505092915050565b60006134208383613f4e565b60208301905092915050565b6134358161469a565b82525050565b61344c6134478261469a565b6147e2565b82525050565b600061345d82614573565b61346781856145a1565b935061347283614563565b8060005b838110156134a357815161348a8882613414565b975061349583614594565b925050600181019050613476565b5085935050505092915050565b6134b9816146ac565b82525050565b6134c8816146b8565b82525050565b6134df6134da826146b8565b6147f4565b82525050565b60006134f08261457e565b6134fa81856145b2565b935061350a818560208601614734565b61351381614907565b840191505092915050565b600061352982614589565b61353381856145c3565b9350613543818560208601614734565b61354c81614907565b840191505092915050565b600061356282614589565b61356c81856145d4565b935061357c818560208601614734565b80840191505092915050565b60006135956018836145c3565b91507f45434453413a20696e76616c6964207369676e617475726500000000000000006000830152602082019050919050565b60006135d5601f836145c3565b91507f45434453413a20696e76616c6964207369676e6174757265206c656e677468006000830152602082019050919050565b6000613615601c836145d4565b91507f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000830152601c82019050919050565b6000613655602b836145c3565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006136bb6032836145c3565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006137216026836145c3565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613787601c836145c3565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006137c76024836145c3565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061382d6019836145c3565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b600061386d6022836145c3565b91507f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006138d3602c836145c3565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006139396012836145c3565b91507f4861736820616c726561647920757365642e00000000000000000000000000006000830152602082019050919050565b60006139796038836145c3565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006139df602a836145c3565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a456029836145c3565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613aab6022836145c3565b91507f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008301527f75650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b116020836145c3565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613b51602c836145c3565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613bb7600f836145c3565b91507f4d696e74696e67207061757365642e00000000000000000000000000000000006000830152602082019050919050565b6000613bf76020836145c3565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613c37601e836145c3565b91507f45786365656473206d6178696d756d205370706f6b7920737570706c792e00006000830152602082019050919050565b6000613c776024836145c3565b91507f45786365656473206d6178696d756d2053706f6f6b7920536561736f6e20737560008301527f70706c79000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613cdd6029836145c3565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d43602f836145c3565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613da9601a836145c3565b91507f596f752063616e206f6e6c7920686f6c642032206d696e74732e0000000000006000830152602082019050919050565b6000613de96021836145c3565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e4f6031836145c3565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613eb5602c836145c3565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613f1b601b836145c3565b91507f446972656374204d696e74206973206e6f7420616c6c6f7765642e00000000006000830152602082019050919050565b613f578161470e565b82525050565b613f668161470e565b82525050565b613f7d613f788261470e565b614810565b82525050565b613f8c81614718565b82525050565b6000613f9e828661343b565b601482019150613fae8285613f6c565b602082019150613fbe8284613557565b9150819050949350505050565b6000613fd78284613557565b915081905092915050565b6000613fee8285613557565b9150613ffa8284613557565b91508190509392505050565b600061401182613608565b915061401d82846134ce565b60208201915081905092915050565b6000602082019050614041600083018461342c565b92915050565b600060808201905061405c600083018761342c565b614069602083018661342c565b6140766040830185613f5d565b818103606083015261408881846134e5565b905095945050505050565b600060208201905081810360008301526140ad8184613452565b905092915050565b60006020820190506140ca60008301846134b0565b92915050565b60006080820190506140e560008301876134bf565b6140f26020830186613f83565b6140ff60408301856134bf565b61410c60608301846134bf565b95945050505050565b6000602082019050818103600083015261412f818461351e565b905092915050565b6000602082019050818103600083015261415081613588565b9050919050565b60006020820190508181036000830152614170816135c8565b9050919050565b6000602082019050818103600083015261419081613648565b9050919050565b600060208201905081810360008301526141b0816136ae565b9050919050565b600060208201905081810360008301526141d081613714565b9050919050565b600060208201905081810360008301526141f08161377a565b9050919050565b60006020820190508181036000830152614210816137ba565b9050919050565b6000602082019050818103600083015261423081613820565b9050919050565b6000602082019050818103600083015261425081613860565b9050919050565b60006020820190508181036000830152614270816138c6565b9050919050565b600060208201905081810360008301526142908161392c565b9050919050565b600060208201905081810360008301526142b08161396c565b9050919050565b600060208201905081810360008301526142d0816139d2565b9050919050565b600060208201905081810360008301526142f081613a38565b9050919050565b6000602082019050818103600083015261431081613a9e565b9050919050565b6000602082019050818103600083015261433081613b04565b9050919050565b6000602082019050818103600083015261435081613b44565b9050919050565b6000602082019050818103600083015261437081613baa565b9050919050565b6000602082019050818103600083015261439081613bea565b9050919050565b600060208201905081810360008301526143b081613c2a565b9050919050565b600060208201905081810360008301526143d081613c6a565b9050919050565b600060208201905081810360008301526143f081613cd0565b9050919050565b6000602082019050818103600083015261441081613d36565b9050919050565b6000602082019050818103600083015261443081613d9c565b9050919050565b6000602082019050818103600083015261445081613ddc565b9050919050565b6000602082019050818103600083015261447081613e42565b9050919050565b6000602082019050818103600083015261449081613ea8565b9050919050565b600060208201905081810360008301526144b081613f0e565b9050919050565b60006020820190506144cc6000830184613f5d565b92915050565b6000604051905081810181811067ffffffffffffffff821117156144f9576144f86148d8565b5b8060405250919050565b600067ffffffffffffffff82111561451e5761451d6148d8565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561454e5761454d6148d8565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006145ea8261470e565b91506145f58361470e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561462a5761462961484b565b5b828201905092915050565b60006146408261470e565b915061464b8361470e565b92508261465b5761465a61487a565b5b828204905092915050565b60006146718261470e565b915061467c8361470e565b92508282101561468f5761468e61484b565b5b828203905092915050565b60006146a5826146ee565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614752578082015181840152602081019050614737565b83811115614761576000848401525b50505050565b6000600282049050600182168061477f57607f821691505b60208210811415614793576147926148a9565b5b50919050565b60006147a48261470e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147d7576147d661484b565b5b600182019050919050565b60006147ed826147fe565b9050919050565b6000819050919050565b600061480982614918565b9050919050565b6000819050919050565b60006148258261470e565b91506148308361470e565b9250826148405761483f61487a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b61492e8161469a565b811461493957600080fd5b50565b614945816146ac565b811461495057600080fd5b50565b61495c816146c2565b811461496757600080fd5b50565b6149738161470e565b811461497e57600080fd5b5056fea2646970667358221220fe0fa85f8bae596c72dd31e86b92e2d7297541158cce221e323709a37d6fd95164736f6c63430008000033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000019506978656c20466f7865732053706f6f6b7920536561736f6e00000000000000000000000000000000000000000000000000000000000000000000000000000b53504f4f4b59464f584553000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002168747470733a2f2f746f6b656e746f7563616e2e636f6d2f706673736e6674732f00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Pixel Foxes Spooky Season
Arg [1] : symbol (string): SPOOKYFOXES
Arg [2] : baseURI (string): https://tokentoucan.com/pfssnfts/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [4] : 506978656c20466f7865732053706f6f6b7920536561736f6e00000000000000
Arg [5] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [6] : 53504f4f4b59464f584553000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000021
Arg [8] : 68747470733a2f2f746f6b656e746f7563616e2e636f6d2f706673736e667473
Arg [9] : 2f00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

52142:3278:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33760:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55336:74;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20868:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22427:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21950:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52332:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34400:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23317:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34068:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23727:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54555:341;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34590:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55225:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20562:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20292:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41481:94;;;:::i;:::-;;40830:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54908:93;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52759:872;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21037:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55009:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22720:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54131:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23983:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21212:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54244:303;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23086:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41730:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33760:224;33862:4;33901:35;33886:50;;;:11;:50;;;;:90;;;;33940:36;33964:11;33940:23;:36::i;:::-;33886:90;33879:97;;33760:224;;;:::o;55336:74::-;41061:12;:10;:12::i;:::-;41050:23;;:7;:5;:7::i;:::-;:23;;;41042:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55399:3:::1;55389:7;;:13;;;;;;;;;;;;;;;;;;55336:74:::0;:::o;20868:100::-;20922:13;20955:5;20948:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20868:100;:::o;22427:221::-;22503:7;22531:16;22539:7;22531;:16::i;:::-;22523:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22616:15;:24;22632:7;22616:24;;;;;;;;;;;;;;;;;;;;;22609:31;;22427:221;;;:::o;21950:411::-;22031:13;22047:23;22062:7;22047:14;:23::i;:::-;22031:39;;22095:5;22089:11;;:2;:11;;;;22081:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22189:5;22173:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22198:37;22215:5;22222:12;:10;:12::i;:::-;22198:16;:37::i;:::-;22173:62;22151:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22332:21;22341:2;22345:7;22332:8;:21::i;:::-;21950:411;;;:::o;52332:26::-;;;;;;;;;;;;;:::o;34400:113::-;34461:7;34488:10;:17;;;;34481:24;;34400:113;:::o;23317:339::-;23512:41;23531:12;:10;:12::i;:::-;23545:7;23512:18;:41::i;:::-;23504:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23620:28;23630:4;23636:2;23640:7;23620:9;:28::i;:::-;23317:339;;;:::o;34068:256::-;34165:7;34201:23;34218:5;34201:16;:23::i;:::-;34193:5;:31;34185:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34290:12;:19;34303:5;34290:19;;;;;;;;;;;;;;;:26;34310:5;34290:26;;;;;;;;;;;;34283:33;;34068:256;;;;:::o;23727:185::-;23865:39;23882:4;23888:2;23892:7;23865:39;;;;;;;;;;;;:16;:39::i;:::-;23727:185;;;:::o;54555:341::-;54614:16;54643:18;54664:17;54674:6;54664:9;:17::i;:::-;54643:38;;54693:25;54735:10;54721:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54693:53;;54761:9;54757:106;54776:10;54772:1;:14;54757:106;;;54821:30;54841:6;54849:1;54821:19;:30::i;:::-;54807:8;54816:1;54807:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;54788:3;;;;;:::i;:::-;;;;54757:106;;;;54880:8;54873:15;;;;54555:341;;;:::o;34590:233::-;34665:7;34701:30;:28;:30::i;:::-;34693:5;:38;34685:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;34798:10;34809:5;34798:17;;;;;;;;;;;;;;;;;;;;;;;;34791:24;;34590:233;;;:::o;55225:102::-;41061:12;:10;:12::i;:::-;41050:23;;:7;:5;:7::i;:::-;:23;;;41042:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55312:7:::1;55296:13;:23;;;;;;;;;;;;:::i;:::-;;55225:102:::0;:::o;20562:239::-;20634:7;20654:13;20670:7;:16;20678:7;20670:16;;;;;;;;;;;;;;;;;;;;;20654:32;;20722:1;20705:19;;:5;:19;;;;20697:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20788:5;20781:12;;;20562:239;;;:::o;20292:208::-;20364:7;20409:1;20392:19;;:5;:19;;;;20384:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20476:9;:16;20486:5;20476:16;;;;;;;;;;;;;;;;20469:23;;20292:208;;;:::o;41481:94::-;41061:12;:10;:12::i;:::-;41050:23;;:7;:5;:7::i;:::-;:23;;;41042:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41546:21:::1;41564:1;41546:9;:21::i;:::-;41481:94::o:0;40830:87::-;40876:7;40903:6;;;;;;;;;;;40896:13;;40830:87;:::o;54908:93::-;41061:12;:10;:12::i;:::-;41050:23;;:7;:5;:7::i;:::-;:23;;;41042:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54984:9:::1;54975:6;:18;;;;54908:93:::0;:::o;52759:872::-;52844:14;52861:13;:11;:13::i;:::-;52844:30;;52886:11;52900:1;52886:15;;52924:7;;;;;;;;;;;52923:8;52914:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;53053:4;53047:3;53038:6;:12;;;;:::i;:::-;:19;53029:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;53193:1;53168:21;53178:10;53168:9;:21::i;:::-;:26;;53159:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;53293:72;53314:39;53330:10;53342:3;53347:5;53314:15;:39::i;:::-;53355:9;53293:20;:72::i;:::-;53284:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;53419:13;53433:5;53419:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;53418:21;53410:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;53487:9;53483:90;53502:3;53498:1;:7;53483:90;;;53526:35;53537:10;53558:1;53549:6;:10;;;;:::i;:::-;53526:9;:35::i;:::-;53507:3;;;;;:::i;:::-;;;;53483:90;;;;53609:4;53586:13;53600:5;53586:20;;;;;;:::i;:::-;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;52759:872;;;;:::o;21037:104::-;21093:13;21126:7;21119:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21037:104;:::o;55009:81::-;55050:7;55076:6;;55069:13;;55009:81;:::o;22720:295::-;22835:12;:10;:12::i;:::-;22823:24;;:8;:24;;;;22815:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22935:8;22890:18;:32;22909:12;:10;:12::i;:::-;22890:32;;;;;;;;;;;;;;;:42;22923:8;22890:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22988:8;22959:48;;22974:12;:10;:12::i;:::-;22959:48;;;22998:8;22959:48;;;;;;:::i;:::-;;;;;;;;22720:295;;:::o;54131:105::-;41061:12;:10;:12::i;:::-;41050:23;;:7;:5;:7::i;:::-;:23;;;41042:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54224:4:::1;54204:17;;:24;;;;;;;;;;;;;;;;;;54131:105:::0;:::o;23983:328::-;24158:41;24177:12;:10;:12::i;:::-;24191:7;24158:18;:41::i;:::-;24150:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24264:39;24278:4;24284:2;24288:7;24297:5;24264:13;:39::i;:::-;23983:328;;;;:::o;21212:334::-;21285:13;21319:16;21327:7;21319;:16::i;:::-;21311:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21400:21;21424:10;:8;:10::i;:::-;21400:34;;21476:1;21458:7;21452:21;:25;:86;;;;;;;;;;;;;;;;;21504:7;21513:18;:7;:16;:18::i;:::-;21487:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21452:86;21445:93;;;21212:334;;;:::o;54244:303::-;41061:12;:10;:12::i;:::-;41050:23;;:7;:5;:7::i;:::-;:23;;;41042:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54324:14:::1;54341:13;:11;:13::i;:::-;54324:30;;54394:4;54384:7;54375:6;:16;;;;:::i;:::-;:23;54366:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;54456:9;54452:87;54471:7;54467:1;:11;54452:87;;;54499:28;54510:3;54524:1;54515:6;:10;;;;:::i;:::-;54499:9;:28::i;:::-;54480:3;;;;;:::i;:::-;;;;54452:87;;;;41121:1;54244:303:::0;;:::o;23086:164::-;23183:4;23207:18;:25;23226:5;23207:25;;;;;;;;;;;;;;;:35;23233:8;23207:35;;;;;;;;;;;;;;;;;;;;;;;;;23200:42;;23086:164;;;;:::o;41730:192::-;41061:12;:10;:12::i;:::-;41050:23;;:7;:5;:7::i;:::-;:23;;;41042:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41839:1:::1;41819:22;;:8;:22;;;;41811:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;41895:19;41905:8;41895:9;:19::i;:::-;41730:192:::0;:::o;19923:305::-;20025:4;20077:25;20062:40;;;:11;:40;;;;:105;;;;20134:33;20119:48;;;:11;:48;;;;20062:105;:158;;;;20184:36;20208:11;20184:23;:36::i;:::-;20062:158;20042:178;;19923:305;;;:::o;1358:98::-;1411:7;1438:10;1431:17;;1358:98;:::o;25821:127::-;25886:4;25938:1;25910:30;;:7;:16;25918:7;25910:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25903:37;;25821:127;;;:::o;29803:174::-;29905:2;29878:15;:24;29894:7;29878:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29961:7;29957:2;29923:46;;29932:23;29947:7;29932:14;:23::i;:::-;29923:46;;;;;;;;;;;;29803:174;;:::o;26115:348::-;26208:4;26233:16;26241:7;26233;:16::i;:::-;26225:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26309:13;26325:23;26340:7;26325:14;:23::i;:::-;26309:39;;26378:5;26367:16;;:7;:16;;;:51;;;;26411:7;26387:31;;:20;26399:7;26387:11;:20::i;:::-;:31;;;26367:51;:87;;;;26422:32;26439:5;26446:7;26422:16;:32::i;:::-;26367:87;26359:96;;;26115:348;;;;:::o;29107:578::-;29266:4;29239:31;;:23;29254:7;29239:14;:23::i;:::-;:31;;;29231:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29349:1;29335:16;;:2;:16;;;;29327:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29405:39;29426:4;29432:2;29436:7;29405:20;:39::i;:::-;29509:29;29526:1;29530:7;29509:8;:29::i;:::-;29570:1;29551:9;:15;29561:4;29551:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29599:1;29582:9;:13;29592:2;29582:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29630:2;29611:7;:16;29619:7;29611:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29669:7;29665:2;29650:27;;29659:4;29650:27;;;;;;;;;;;;29107:578;;;:::o;41930:173::-;41986:16;42005:6;;;;;;;;;;;41986:25;;42031:8;42022:6;;:17;;;;;;;;;;;;;;;;;;42086:8;42055:40;;42076:8;42055:40;;;;;;;;;;;;41930:173;;:::o;53639:311::-;53735:7;53755:12;53887:6;53895:3;53900:5;53870:36;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53860:47;;;;;;53780:128;;;;;;;;:::i;:::-;;;;;;;;;;;;;53770:149;;;;;;53755:164;;53938:4;53931:11;;;53639:311;;;;;:::o;53958:165::-;54047:4;54092:23;54105:9;54092:4;:12;;:23;;;;:::i;:::-;54071:44;;:17;;;;;;;;;;;:44;;;54064:51;;53958:165;;;;:::o;26805:110::-;26881:26;26891:2;26895:7;26881:26;;;;;;;;;;;;:9;:26::i;:::-;26805:110;;:::o;25193:315::-;25350:28;25360:4;25366:2;25370:7;25350:9;:28::i;:::-;25397:48;25420:4;25426:2;25430:7;25439:5;25397:22;:48::i;:::-;25389:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25193:315;;;;:::o;55099:114::-;55159:13;55192;55185:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55099:114;:::o;1804:723::-;1860:13;2090:1;2081:5;:10;2077:53;;;2108:10;;;;;;;;;;;;;;;;;;;;;2077:53;2140:12;2155:5;2140:20;;2171:14;2196:78;2211:1;2203:4;:9;2196:78;;2229:8;;;;;:::i;:::-;;;;2260:2;2252:10;;;;;:::i;:::-;;;2196:78;;;2284:19;2316:6;2306:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2284:39;;2334:154;2350:1;2341:5;:10;2334:154;;2378:1;2368:11;;;;;:::i;:::-;;;2445:2;2437:5;:10;;;;:::i;:::-;2424:2;:24;;;;:::i;:::-;2411:39;;2394:6;2401;2394:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;2474:2;2465:11;;;;;:::i;:::-;;;2334:154;;;2512:6;2498:21;;;;;1804:723;;;;:::o;18530:157::-;18615:4;18654:25;18639:40;;;:11;:40;;;;18632:47;;18530:157;;;:::o;35436:589::-;35580:45;35607:4;35613:2;35617:7;35580:26;:45::i;:::-;35658:1;35642:18;;:4;:18;;;35638:187;;;35677:40;35709:7;35677:31;:40::i;:::-;35638:187;;;35747:2;35739:10;;:4;:10;;;35735:90;;35766:47;35799:4;35805:7;35766:32;:47::i;:::-;35735:90;35638:187;35853:1;35839:16;;:2;:16;;;35835:183;;;35872:45;35909:7;35872:36;:45::i;:::-;35835:183;;;35945:4;35939:10;;:2;:10;;;35935:83;;35966:40;35994:2;35998:7;35966:27;:40::i;:::-;35935:83;35835:183;35436:589;;;:::o;46357:231::-;46435:7;46456:17;46475:18;46497:27;46508:4;46514:9;46497:10;:27::i;:::-;46455:69;;;;46535:18;46547:5;46535:11;:18::i;:::-;46571:9;46564:16;;;;46357:231;;;;:::o;27142:321::-;27272:18;27278:2;27282:7;27272:5;:18::i;:::-;27323:54;27354:1;27358:2;27362:7;27371:5;27323:22;:54::i;:::-;27301:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27142:321;;;:::o;30542:799::-;30697:4;30718:15;:2;:13;;;:15::i;:::-;30714:620;;;30770:2;30754:36;;;30791:12;:10;:12::i;:::-;30805:4;30811:7;30820:5;30754:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30750:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31013:1;30996:6;:13;:18;30992:272;;;31039:60;;;;;;;;;;:::i;:::-;;;;;;;;30992:272;31214:6;31208:13;31199:6;31195:2;31191:15;31184:38;30750:529;30887:41;;;30877:51;;;:6;:51;;;;30870:58;;;;;30714:620;31318:4;31311:11;;30542:799;;;;;;;:::o;31913:126::-;;;;:::o;36748:164::-;36852:10;:17;;;;36825:15;:24;36841:7;36825:24;;;;;;;;;;;:44;;;;36880:10;36896:7;36880:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36748:164;:::o;37539:988::-;37805:22;37855:1;37830:22;37847:4;37830:16;:22::i;:::-;:26;;;;:::i;:::-;37805:51;;37867:18;37888:17;:26;37906:7;37888:26;;;;;;;;;;;;37867:47;;38035:14;38021:10;:28;38017:328;;38066:19;38088:12;:18;38101:4;38088:18;;;;;;;;;;;;;;;:34;38107:14;38088:34;;;;;;;;;;;;38066:56;;38172:11;38139:12;:18;38152:4;38139:18;;;;;;;;;;;;;;;:30;38158:10;38139:30;;;;;;;;;;;:44;;;;38289:10;38256:17;:30;38274:11;38256:30;;;;;;;;;;;:43;;;;38017:328;;38441:17;:26;38459:7;38441:26;;;;;;;;;;;38434:33;;;38485:12;:18;38498:4;38485:18;;;;;;;;;;;;;;;:34;38504:14;38485:34;;;;;;;;;;;38478:41;;;37539:988;;;;:::o;38822:1079::-;39075:22;39120:1;39100:10;:17;;;;:21;;;;:::i;:::-;39075:46;;39132:18;39153:15;:24;39169:7;39153:24;;;;;;;;;;;;39132:45;;39504:19;39526:10;39537:14;39526:26;;;;;;;;;;;;;;;;;;;;;;;;39504:48;;39590:11;39565:10;39576;39565:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;39701:10;39670:15;:28;39686:11;39670:28;;;;;;;;;;;:41;;;;39842:15;:24;39858:7;39842:24;;;;;;;;;;;39835:31;;;39877:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38822:1079;;;;:::o;36326:221::-;36411:14;36428:20;36445:2;36428:16;:20::i;:::-;36411:37;;36486:7;36459:12;:16;36472:2;36459:16;;;;;;;;;;;;;;;:24;36476:6;36459:24;;;;;;;;;;;:34;;;;36533:6;36504:17;:26;36522:7;36504:26;;;;;;;;;;;:35;;;;36326:221;;;:::o;44247:1308::-;44328:7;44337:12;44582:2;44562:9;:16;:22;44558:990;;;44601:9;44625;44649:7;44858:4;44847:9;44843:20;44837:27;44832:32;;44908:4;44897:9;44893:20;44887:27;44882:32;;44966:4;44955:9;44951:20;44945:27;44942:1;44937:36;44932:41;;45009:25;45020:4;45026:1;45029;45032;45009:10;:25::i;:::-;45002:32;;;;;;;;;44558:990;45076:2;45056:9;:16;:22;45052:496;;;45095:9;45119:10;45331:4;45320:9;45316:20;45310:27;45305:32;;45382:4;45371:9;45367:20;45361:27;45355:33;;45424:23;45435:4;45441:1;45444:2;45424:10;:23::i;:::-;45417:30;;;;;;;;45052:496;45496:1;45500:35;45480:56;;;;44247:1308;;;;;;:::o;42518:643::-;42596:20;42587:29;;;;;;;;;;;;;;;;:5;:29;;;;;;;;;;;;;;;;;42583:571;;;42633:7;;42583:571;42694:29;42685:38;;;;;;;;;;;;;;;;:5;:38;;;;;;;;;;;;;;;;;42681:473;;;42740:34;;;;;;;;;;:::i;:::-;;;;;;;;42681:473;42805:35;42796:44;;;;;;;;;;;;;;;;:5;:44;;;;;;;;;;;;;;;;;42792:362;;;42857:41;;;;;;;;;;:::i;:::-;;;;;;;;42792:362;42929:30;42920:39;;;;;;;;;;;;;;;;:5;:39;;;;;;;;;;;;;;;;;42916:238;;;42976:44;;;;;;;;;;:::i;:::-;;;;;;;;42916:238;43051:30;43042:39;;;;;;;;;;;;;;;;:5;:39;;;;;;;;;;;;;;;;;43038:116;;;43098:44;;;;;;;;;;:::i;:::-;;;;;;;;43038:116;42518:643;;:::o;27799:382::-;27893:1;27879:16;;:2;:16;;;;27871:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27952:16;27960:7;27952;:16::i;:::-;27951:17;27943:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28014:45;28043:1;28047:2;28051:7;28014:20;:45::i;:::-;28089:1;28072:9;:13;28082:2;28072:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28120:2;28101:7;:16;28109:7;28101:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28165:7;28161:2;28140:33;;28157:1;28140:33;;;;;;;;;;;;27799:382;;:::o;10485:387::-;10545:4;10753:12;10820:7;10808:20;10800:28;;10863:1;10856:4;:8;10849:15;;;10485:387;;;:::o;47856:1632::-;47987:7;47996:12;48921:66;48916:1;48908:10;;:79;48904:163;;;49020:1;49024:30;49004:51;;;;;;48904:163;49086:2;49081:1;:7;;;;:18;;;;;49097:2;49092:1;:7;;;;49081:18;49077:102;;;49132:1;49136:30;49116:51;;;;;;49077:102;49276:14;49293:24;49303:4;49309:1;49312;49315;49293:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49276:41;;49350:1;49332:20;;:6;:20;;;49328:103;;;49385:1;49389:29;49369:50;;;;;;;49328:103;49451:6;49459:20;49443:37;;;;;47856:1632;;;;;;;;:::o;46851:391::-;46965:7;46974:12;46999:9;47019:7;47074:66;47070:2;47066:75;47061:80;;47178:2;47173;47168:3;47164:12;47160:21;47155:26;;47209:25;47220:4;47226:1;47229;47232;47209:10;:25::i;:::-;47202:32;;;;;;46851:391;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:256::-;;4986:2;4974:9;4965:7;4961:23;4957:32;4954:2;;;5002:1;4999;4992:12;4954:2;5045:1;5070:50;5112:7;5103:6;5092:9;5088:22;5070:50;:::i;:::-;5060:60;;5016:114;4944:193;;;;:::o;5143:260::-;;5250:2;5238:9;5229:7;5225:23;5221:32;5218:2;;;5266:1;5263;5256:12;5218:2;5309:1;5334:52;5378:7;5369:6;5358:9;5354:22;5334:52;:::i;:::-;5324:62;;5280:116;5208:195;;;;:::o;5409:282::-;;5527:2;5515:9;5506:7;5502:23;5498:32;5495:2;;;5543:1;5540;5533:12;5495:2;5586:1;5611:63;5666:7;5657:6;5646:9;5642:22;5611:63;:::i;:::-;5601:73;;5557:127;5485:206;;;;:::o;5697:631::-;;;5841:2;5829:9;5820:7;5816:23;5812:32;5809:2;;;5857:1;5854;5847:12;5809:2;5928:1;5917:9;5913:17;5900:31;5958:18;5950:6;5947:30;5944:2;;;5990:1;5987;5980:12;5944:2;6018:62;6072:7;6063:6;6052:9;6048:22;6018:62;:::i;:::-;6008:72;;5871:219;6157:2;6146:9;6142:18;6129:32;6188:18;6180:6;6177:30;6174:2;;;6220:1;6217;6210:12;6174:2;6248:63;6303:7;6294:6;6283:9;6279:22;6248:63;:::i;:::-;6238:73;;6100:221;5799:529;;;;;:::o;6334:375::-;;6452:2;6440:9;6431:7;6427:23;6423:32;6420:2;;;6468:1;6465;6458:12;6420:2;6539:1;6528:9;6524:17;6511:31;6569:18;6561:6;6558:30;6555:2;;;6601:1;6598;6591:12;6555:2;6629:63;6684:7;6675:6;6664:9;6660:22;6629:63;:::i;:::-;6619:73;;6482:220;6410:299;;;;:::o;6715:262::-;;6823:2;6811:9;6802:7;6798:23;6794:32;6791:2;;;6839:1;6836;6829:12;6791:2;6882:1;6907:53;6952:7;6943:6;6932:9;6928:22;6907:53;:::i;:::-;6897:63;;6853:117;6781:196;;;;:::o;6983:179::-;;7073:46;7115:3;7107:6;7073:46;:::i;:::-;7151:4;7146:3;7142:14;7128:28;;7063:99;;;;:::o;7168:118::-;7255:24;7273:5;7255:24;:::i;:::-;7250:3;7243:37;7233:53;;:::o;7292:157::-;7397:45;7417:24;7435:5;7417:24;:::i;:::-;7397:45;:::i;:::-;7392:3;7385:58;7375:74;;:::o;7485:732::-;;7633:54;7681:5;7633:54;:::i;:::-;7703:86;7782:6;7777:3;7703:86;:::i;:::-;7696:93;;7813:56;7863:5;7813:56;:::i;:::-;7892:7;7923:1;7908:284;7933:6;7930:1;7927:13;7908:284;;;8009:6;8003:13;8036:63;8095:3;8080:13;8036:63;:::i;:::-;8029:70;;8122:60;8175:6;8122:60;:::i;:::-;8112:70;;7968:224;7955:1;7952;7948:9;7943:14;;7908:284;;;7912:14;8208:3;8201:10;;7609:608;;;;;;;:::o;8223:109::-;8304:21;8319:5;8304:21;:::i;:::-;8299:3;8292:34;8282:50;;:::o;8338:118::-;8425:24;8443:5;8425:24;:::i;:::-;8420:3;8413:37;8403:53;;:::o;8462:157::-;8567:45;8587:24;8605:5;8587:24;:::i;:::-;8567:45;:::i;:::-;8562:3;8555:58;8545:74;;:::o;8625:360::-;;8739:38;8771:5;8739:38;:::i;:::-;8793:70;8856:6;8851:3;8793:70;:::i;:::-;8786:77;;8872:52;8917:6;8912:3;8905:4;8898:5;8894:16;8872:52;:::i;:::-;8949:29;8971:6;8949:29;:::i;:::-;8944:3;8940:39;8933:46;;8715:270;;;;;:::o;8991:364::-;;9107:39;9140:5;9107:39;:::i;:::-;9162:71;9226:6;9221:3;9162:71;:::i;:::-;9155:78;;9242:52;9287:6;9282:3;9275:4;9268:5;9264:16;9242:52;:::i;:::-;9319:29;9341:6;9319:29;:::i;:::-;9314:3;9310:39;9303:46;;9083:272;;;;;:::o;9361:377::-;;9495:39;9528:5;9495:39;:::i;:::-;9550:89;9632:6;9627:3;9550:89;:::i;:::-;9543:96;;9648:52;9693:6;9688:3;9681:4;9674:5;9670:16;9648:52;:::i;:::-;9725:6;9720:3;9716:16;9709:23;;9471:267;;;;;:::o;9744:322::-;;9907:67;9971:2;9966:3;9907:67;:::i;:::-;9900:74;;10004:26;10000:1;9995:3;9991:11;9984:47;10057:2;10052:3;10048:12;10041:19;;9890:176;;;:::o;10072:329::-;;10235:67;10299:2;10294:3;10235:67;:::i;:::-;10228:74;;10332:33;10328:1;10323:3;10319:11;10312:54;10392:2;10387:3;10383:12;10376:19;;10218:183;;;:::o;10407:398::-;;10588:85;10670:2;10665:3;10588:85;:::i;:::-;10581:92;;10703:66;10699:1;10694:3;10690:11;10683:87;10796:2;10791:3;10787:12;10780:19;;10571:234;;;:::o;10811:375::-;;10974:67;11038:2;11033:3;10974:67;:::i;:::-;10967:74;;11071:34;11067:1;11062:3;11058:11;11051:55;11137:13;11132:2;11127:3;11123:12;11116:35;11177:2;11172:3;11168:12;11161:19;;10957:229;;;:::o;11192:382::-;;11355:67;11419:2;11414:3;11355:67;:::i;:::-;11348:74;;11452:34;11448:1;11443:3;11439:11;11432:55;11518:20;11513:2;11508:3;11504:12;11497:42;11565:2;11560:3;11556:12;11549:19;;11338:236;;;:::o;11580:370::-;;11743:67;11807:2;11802:3;11743:67;:::i;:::-;11736:74;;11840:34;11836:1;11831:3;11827:11;11820:55;11906:8;11901:2;11896:3;11892:12;11885:30;11941:2;11936:3;11932:12;11925:19;;11726:224;;;:::o;11956:326::-;;12119:67;12183:2;12178:3;12119:67;:::i;:::-;12112:74;;12216:30;12212:1;12207:3;12203:11;12196:51;12273:2;12268:3;12264:12;12257:19;;12102:180;;;:::o;12288:368::-;;12451:67;12515:2;12510:3;12451:67;:::i;:::-;12444:74;;12548:34;12544:1;12539:3;12535:11;12528:55;12614:6;12609:2;12604:3;12600:12;12593:28;12647:2;12642:3;12638:12;12631:19;;12434:222;;;:::o;12662:323::-;;12825:67;12889:2;12884:3;12825:67;:::i;:::-;12818:74;;12922:27;12918:1;12913:3;12909:11;12902:48;12976:2;12971:3;12967:12;12960:19;;12808:177;;;:::o;12991:366::-;;13154:67;13218:2;13213:3;13154:67;:::i;:::-;13147:74;;13251:34;13247:1;13242:3;13238:11;13231:55;13317:4;13312:2;13307:3;13303:12;13296:26;13348:2;13343:3;13339:12;13332:19;;13137:220;;;:::o;13363:376::-;;13526:67;13590:2;13585:3;13526:67;:::i;:::-;13519:74;;13623:34;13619:1;13614:3;13610:11;13603:55;13689:14;13684:2;13679:3;13675:12;13668:36;13730:2;13725:3;13721:12;13714:19;;13509:230;;;:::o;13745:316::-;;13908:67;13972:2;13967:3;13908:67;:::i;:::-;13901:74;;14005:20;14001:1;13996:3;13992:11;13985:41;14052:2;14047:3;14043:12;14036:19;;13891:170;;;:::o;14067:388::-;;14230:67;14294:2;14289:3;14230:67;:::i;:::-;14223:74;;14327:34;14323:1;14318:3;14314:11;14307:55;14393:26;14388:2;14383:3;14379:12;14372:48;14446:2;14441:3;14437:12;14430:19;;14213:242;;;:::o;14461:374::-;;14624:67;14688:2;14683:3;14624:67;:::i;:::-;14617:74;;14721:34;14717:1;14712:3;14708:11;14701:55;14787:12;14782:2;14777:3;14773:12;14766:34;14826:2;14821:3;14817:12;14810:19;;14607:228;;;:::o;14841:373::-;;15004:67;15068:2;15063:3;15004:67;:::i;:::-;14997:74;;15101:34;15097:1;15092:3;15088:11;15081:55;15167:11;15162:2;15157:3;15153:12;15146:33;15205:2;15200:3;15196:12;15189:19;;14987:227;;;:::o;15220:366::-;;15383:67;15447:2;15442:3;15383:67;:::i;:::-;15376:74;;15480:34;15476:1;15471:3;15467:11;15460:55;15546:4;15541:2;15536:3;15532:12;15525:26;15577:2;15572:3;15568:12;15561:19;;15366:220;;;:::o;15592:330::-;;15755:67;15819:2;15814:3;15755:67;:::i;:::-;15748:74;;15852:34;15848:1;15843:3;15839:11;15832:55;15913:2;15908:3;15904:12;15897:19;;15738:184;;;:::o;15928:376::-;;16091:67;16155:2;16150:3;16091:67;:::i;:::-;16084:74;;16188:34;16184:1;16179:3;16175:11;16168:55;16254:14;16249:2;16244:3;16240:12;16233:36;16295:2;16290:3;16286:12;16279:19;;16074:230;;;:::o;16310:313::-;;16473:67;16537:2;16532:3;16473:67;:::i;:::-;16466:74;;16570:17;16566:1;16561:3;16557:11;16550:38;16614:2;16609:3;16605:12;16598:19;;16456:167;;;:::o;16629:330::-;;16792:67;16856:2;16851:3;16792:67;:::i;:::-;16785:74;;16889:34;16885:1;16880:3;16876:11;16869:55;16950:2;16945:3;16941:12;16934:19;;16775:184;;;:::o;16965:328::-;;17128:67;17192:2;17187:3;17128:67;:::i;:::-;17121:74;;17225:32;17221:1;17216:3;17212:11;17205:53;17284:2;17279:3;17275:12;17268:19;;17111:182;;;:::o;17299:368::-;;17462:67;17526:2;17521:3;17462:67;:::i;:::-;17455:74;;17559:34;17555:1;17550:3;17546:11;17539:55;17625:6;17620:2;17615:3;17611:12;17604:28;17658:2;17653:3;17649:12;17642:19;;17445:222;;;:::o;17673:373::-;;17836:67;17900:2;17895:3;17836:67;:::i;:::-;17829:74;;17933:34;17929:1;17924:3;17920:11;17913:55;17999:11;17994:2;17989:3;17985:12;17978:33;18037:2;18032:3;18028:12;18021:19;;17819:227;;;:::o;18052:379::-;;18215:67;18279:2;18274:3;18215:67;:::i;:::-;18208:74;;18312:34;18308:1;18303:3;18299:11;18292:55;18378:17;18373:2;18368:3;18364:12;18357:39;18422:2;18417:3;18413:12;18406:19;;18198:233;;;:::o;18437:324::-;;18600:67;18664:2;18659:3;18600:67;:::i;:::-;18593:74;;18697:28;18693:1;18688:3;18684:11;18677:49;18752:2;18747:3;18743:12;18736:19;;18583:178;;;:::o;18767:365::-;;18930:67;18994:2;18989:3;18930:67;:::i;:::-;18923:74;;19027:34;19023:1;19018:3;19014:11;19007:55;19093:3;19088:2;19083:3;19079:12;19072:25;19123:2;19118:3;19114:12;19107:19;;18913:219;;;:::o;19138:381::-;;19301:67;19365:2;19360:3;19301:67;:::i;:::-;19294:74;;19398:34;19394:1;19389:3;19385:11;19378:55;19464:19;19459:2;19454:3;19450:12;19443:41;19510:2;19505:3;19501:12;19494:19;;19284:235;;;:::o;19525:376::-;;19688:67;19752:2;19747:3;19688:67;:::i;:::-;19681:74;;19785:34;19781:1;19776:3;19772:11;19765:55;19851:14;19846:2;19841:3;19837:12;19830:36;19892:2;19887:3;19883:12;19876:19;;19671:230;;;:::o;19907:325::-;;20070:67;20134:2;20129:3;20070:67;:::i;:::-;20063:74;;20167:29;20163:1;20158:3;20154:11;20147:50;20223:2;20218:3;20214:12;20207:19;;20053:179;;;:::o;20238:108::-;20315:24;20333:5;20315:24;:::i;:::-;20310:3;20303:37;20293:53;;:::o;20352:118::-;20439:24;20457:5;20439:24;:::i;:::-;20434:3;20427:37;20417:53;;:::o;20476:157::-;20581:45;20601:24;20619:5;20601:24;:::i;:::-;20581:45;:::i;:::-;20576:3;20569:58;20559:74;;:::o;20639:112::-;20722:22;20738:5;20722:22;:::i;:::-;20717:3;20710:35;20700:51;;:::o;20757:557::-;;20960:75;21031:3;21022:6;20960:75;:::i;:::-;21060:2;21055:3;21051:12;21044:19;;21073:75;21144:3;21135:6;21073:75;:::i;:::-;21173:2;21168:3;21164:12;21157:19;;21193:95;21284:3;21275:6;21193:95;:::i;:::-;21186:102;;21305:3;21298:10;;20949:365;;;;;;:::o;21320:275::-;;21474:95;21565:3;21556:6;21474:95;:::i;:::-;21467:102;;21586:3;21579:10;;21456:139;;;;:::o;21601:435::-;;21803:95;21894:3;21885:6;21803:95;:::i;:::-;21796:102;;21915:95;22006:3;21997:6;21915:95;:::i;:::-;21908:102;;22027:3;22020:10;;21785:251;;;;;:::o;22042:522::-;;22277:148;22421:3;22277:148;:::i;:::-;22270:155;;22435:75;22506:3;22497:6;22435:75;:::i;:::-;22535:2;22530:3;22526:12;22519:19;;22555:3;22548:10;;22259:305;;;;:::o;22570:222::-;;22701:2;22690:9;22686:18;22678:26;;22714:71;22782:1;22771:9;22767:17;22758:6;22714:71;:::i;:::-;22668:124;;;;:::o;22798:640::-;;23031:3;23020:9;23016:19;23008:27;;23045:71;23113:1;23102:9;23098:17;23089:6;23045:71;:::i;:::-;23126:72;23194:2;23183:9;23179:18;23170:6;23126:72;:::i;:::-;23208;23276:2;23265:9;23261:18;23252:6;23208:72;:::i;:::-;23327:9;23321:4;23317:20;23312:2;23301:9;23297:18;23290:48;23355:76;23426:4;23417:6;23355:76;:::i;:::-;23347:84;;22998:440;;;;;;;:::o;23444:373::-;;23625:2;23614:9;23610:18;23602:26;;23674:9;23668:4;23664:20;23660:1;23649:9;23645:17;23638:47;23702:108;23805:4;23796:6;23702:108;:::i;:::-;23694:116;;23592:225;;;;:::o;23823:210::-;;23948:2;23937:9;23933:18;23925:26;;23961:65;24023:1;24012:9;24008:17;23999:6;23961:65;:::i;:::-;23915:118;;;;:::o;24039:545::-;;24250:3;24239:9;24235:19;24227:27;;24264:71;24332:1;24321:9;24317:17;24308:6;24264:71;:::i;:::-;24345:68;24409:2;24398:9;24394:18;24385:6;24345:68;:::i;:::-;24423:72;24491:2;24480:9;24476:18;24467:6;24423:72;:::i;:::-;24505;24573:2;24562:9;24558:18;24549:6;24505:72;:::i;:::-;24217:367;;;;;;;:::o;24590:313::-;;24741:2;24730:9;24726:18;24718:26;;24790:9;24784:4;24780:20;24776:1;24765:9;24761:17;24754:47;24818:78;24891:4;24882:6;24818:78;:::i;:::-;24810:86;;24708:195;;;;:::o;24909:419::-;;25113:2;25102:9;25098:18;25090:26;;25162:9;25156:4;25152:20;25148:1;25137:9;25133:17;25126:47;25190:131;25316:4;25190:131;:::i;:::-;25182:139;;25080:248;;;:::o;25334:419::-;;25538:2;25527:9;25523:18;25515:26;;25587:9;25581:4;25577:20;25573:1;25562:9;25558:17;25551:47;25615:131;25741:4;25615:131;:::i;:::-;25607:139;;25505:248;;;:::o;25759:419::-;;25963:2;25952:9;25948:18;25940:26;;26012:9;26006:4;26002:20;25998:1;25987:9;25983:17;25976:47;26040:131;26166:4;26040:131;:::i;:::-;26032:139;;25930:248;;;:::o;26184:419::-;;26388:2;26377:9;26373:18;26365:26;;26437:9;26431:4;26427:20;26423:1;26412:9;26408:17;26401:47;26465:131;26591:4;26465:131;:::i;:::-;26457:139;;26355:248;;;:::o;26609:419::-;;26813:2;26802:9;26798:18;26790:26;;26862:9;26856:4;26852:20;26848:1;26837:9;26833:17;26826:47;26890:131;27016:4;26890:131;:::i;:::-;26882:139;;26780:248;;;:::o;27034:419::-;;27238:2;27227:9;27223:18;27215:26;;27287:9;27281:4;27277:20;27273:1;27262:9;27258:17;27251:47;27315:131;27441:4;27315:131;:::i;:::-;27307:139;;27205:248;;;:::o;27459:419::-;;27663:2;27652:9;27648:18;27640:26;;27712:9;27706:4;27702:20;27698:1;27687:9;27683:17;27676:47;27740:131;27866:4;27740:131;:::i;:::-;27732:139;;27630:248;;;:::o;27884:419::-;;28088:2;28077:9;28073:18;28065:26;;28137:9;28131:4;28127:20;28123:1;28112:9;28108:17;28101:47;28165:131;28291:4;28165:131;:::i;:::-;28157:139;;28055:248;;;:::o;28309:419::-;;28513:2;28502:9;28498:18;28490:26;;28562:9;28556:4;28552:20;28548:1;28537:9;28533:17;28526:47;28590:131;28716:4;28590:131;:::i;:::-;28582:139;;28480:248;;;:::o;28734:419::-;;28938:2;28927:9;28923:18;28915:26;;28987:9;28981:4;28977:20;28973:1;28962:9;28958:17;28951:47;29015:131;29141:4;29015:131;:::i;:::-;29007:139;;28905:248;;;:::o;29159:419::-;;29363:2;29352:9;29348:18;29340:26;;29412:9;29406:4;29402:20;29398:1;29387:9;29383:17;29376:47;29440:131;29566:4;29440:131;:::i;:::-;29432:139;;29330:248;;;:::o;29584:419::-;;29788:2;29777:9;29773:18;29765:26;;29837:9;29831:4;29827:20;29823:1;29812:9;29808:17;29801:47;29865:131;29991:4;29865:131;:::i;:::-;29857:139;;29755:248;;;:::o;30009:419::-;;30213:2;30202:9;30198:18;30190:26;;30262:9;30256:4;30252:20;30248:1;30237:9;30233:17;30226:47;30290:131;30416:4;30290:131;:::i;:::-;30282:139;;30180:248;;;:::o;30434:419::-;;30638:2;30627:9;30623:18;30615:26;;30687:9;30681:4;30677:20;30673:1;30662:9;30658:17;30651:47;30715:131;30841:4;30715:131;:::i;:::-;30707:139;;30605:248;;;:::o;30859:419::-;;31063:2;31052:9;31048:18;31040:26;;31112:9;31106:4;31102:20;31098:1;31087:9;31083:17;31076:47;31140:131;31266:4;31140:131;:::i;:::-;31132:139;;31030:248;;;:::o;31284:419::-;;31488:2;31477:9;31473:18;31465:26;;31537:9;31531:4;31527:20;31523:1;31512:9;31508:17;31501:47;31565:131;31691:4;31565:131;:::i;:::-;31557:139;;31455:248;;;:::o;31709:419::-;;31913:2;31902:9;31898:18;31890:26;;31962:9;31956:4;31952:20;31948:1;31937:9;31933:17;31926:47;31990:131;32116:4;31990:131;:::i;:::-;31982:139;;31880:248;;;:::o;32134:419::-;;32338:2;32327:9;32323:18;32315:26;;32387:9;32381:4;32377:20;32373:1;32362:9;32358:17;32351:47;32415:131;32541:4;32415:131;:::i;:::-;32407:139;;32305:248;;;:::o;32559:419::-;;32763:2;32752:9;32748:18;32740:26;;32812:9;32806:4;32802:20;32798:1;32787:9;32783:17;32776:47;32840:131;32966:4;32840:131;:::i;:::-;32832:139;;32730:248;;;:::o;32984:419::-;;33188:2;33177:9;33173:18;33165:26;;33237:9;33231:4;33227:20;33223:1;33212:9;33208:17;33201:47;33265:131;33391:4;33265:131;:::i;:::-;33257:139;;33155:248;;;:::o;33409:419::-;;33613:2;33602:9;33598:18;33590:26;;33662:9;33656:4;33652:20;33648:1;33637:9;33633:17;33626:47;33690:131;33816:4;33690:131;:::i;:::-;33682:139;;33580:248;;;:::o;33834:419::-;;34038:2;34027:9;34023:18;34015:26;;34087:9;34081:4;34077:20;34073:1;34062:9;34058:17;34051:47;34115:131;34241:4;34115:131;:::i;:::-;34107:139;;34005:248;;;:::o;34259:419::-;;34463:2;34452:9;34448:18;34440:26;;34512:9;34506:4;34502:20;34498:1;34487:9;34483:17;34476:47;34540:131;34666:4;34540:131;:::i;:::-;34532:139;;34430:248;;;:::o;34684:419::-;;34888:2;34877:9;34873:18;34865:26;;34937:9;34931:4;34927:20;34923:1;34912:9;34908:17;34901:47;34965:131;35091:4;34965:131;:::i;:::-;34957:139;;34855:248;;;:::o;35109:419::-;;35313:2;35302:9;35298:18;35290:26;;35362:9;35356:4;35352:20;35348:1;35337:9;35333:17;35326:47;35390:131;35516:4;35390:131;:::i;:::-;35382:139;;35280:248;;;:::o;35534:419::-;;35738:2;35727:9;35723:18;35715:26;;35787:9;35781:4;35777:20;35773:1;35762:9;35758:17;35751:47;35815:131;35941:4;35815:131;:::i;:::-;35807:139;;35705:248;;;:::o;35959:419::-;;36163:2;36152:9;36148:18;36140:26;;36212:9;36206:4;36202:20;36198:1;36187:9;36183:17;36176:47;36240:131;36366:4;36240:131;:::i;:::-;36232:139;;36130:248;;;:::o;36384:419::-;;36588:2;36577:9;36573:18;36565:26;;36637:9;36631:4;36627:20;36623:1;36612:9;36608:17;36601:47;36665:131;36791:4;36665:131;:::i;:::-;36657:139;;36555:248;;;:::o;36809:222::-;;36940:2;36929:9;36925:18;36917:26;;36953:71;37021:1;37010:9;37006:17;36997:6;36953:71;:::i;:::-;36907:124;;;;:::o;37037:283::-;;37103:2;37097:9;37087:19;;37145:4;37137:6;37133:17;37252:6;37240:10;37237:22;37216:18;37204:10;37201:34;37198:62;37195:2;;;37263:18;;:::i;:::-;37195:2;37303:10;37299:2;37292:22;37077:243;;;;:::o;37326:331::-;;37477:18;37469:6;37466:30;37463:2;;;37499:18;;:::i;:::-;37463:2;37584:4;37580:9;37573:4;37565:6;37561:17;37557:33;37549:41;;37645:4;37639;37635:15;37627:23;;37392:265;;;:::o;37663:332::-;;37815:18;37807:6;37804:30;37801:2;;;37837:18;;:::i;:::-;37801:2;37922:4;37918:9;37911:4;37903:6;37899:17;37895:33;37887:41;;37983:4;37977;37973:15;37965:23;;37730:265;;;:::o;38001:132::-;;38091:3;38083:11;;38121:4;38116:3;38112:14;38104:22;;38073:60;;;:::o;38139:114::-;;38240:5;38234:12;38224:22;;38213:40;;;:::o;38259:98::-;;38344:5;38338:12;38328:22;;38317:40;;;:::o;38363:99::-;;38449:5;38443:12;38433:22;;38422:40;;;:::o;38468:113::-;;38570:4;38565:3;38561:14;38553:22;;38543:38;;;:::o;38587:184::-;;38720:6;38715:3;38708:19;38760:4;38755:3;38751:14;38736:29;;38698:73;;;;:::o;38777:168::-;;38894:6;38889:3;38882:19;38934:4;38929:3;38925:14;38910:29;;38872:73;;;;:::o;38951:169::-;;39069:6;39064:3;39057:19;39109:4;39104:3;39100:14;39085:29;;39047:73;;;;:::o;39126:148::-;;39265:3;39250:18;;39240:34;;;;:::o;39280:305::-;;39339:20;39357:1;39339:20;:::i;:::-;39334:25;;39373:20;39391:1;39373:20;:::i;:::-;39368:25;;39527:1;39459:66;39455:74;39452:1;39449:81;39446:2;;;39533:18;;:::i;:::-;39446:2;39577:1;39574;39570:9;39563:16;;39324:261;;;;:::o;39591:185::-;;39648:20;39666:1;39648:20;:::i;:::-;39643:25;;39682:20;39700:1;39682:20;:::i;:::-;39677:25;;39721:1;39711:2;;39726:18;;:::i;:::-;39711:2;39768:1;39765;39761:9;39756:14;;39633:143;;;;:::o;39782:191::-;;39842:20;39860:1;39842:20;:::i;:::-;39837:25;;39876:20;39894:1;39876:20;:::i;:::-;39871:25;;39915:1;39912;39909:8;39906:2;;;39920:18;;:::i;:::-;39906:2;39965:1;39962;39958:9;39950:17;;39827:146;;;;:::o;39979:96::-;;40045:24;40063:5;40045:24;:::i;:::-;40034:35;;40024:51;;;:::o;40081:90::-;;40158:5;40151:13;40144:21;40133:32;;40123:48;;;:::o;40177:77::-;;40243:5;40232:16;;40222:32;;;:::o;40260:149::-;;40336:66;40329:5;40325:78;40314:89;;40304:105;;;:::o;40415:126::-;;40492:42;40485:5;40481:54;40470:65;;40460:81;;;:::o;40547:77::-;;40613:5;40602:16;;40592:32;;;:::o;40630:86::-;;40705:4;40698:5;40694:16;40683:27;;40673:43;;;:::o;40722:154::-;40806:6;40801:3;40796;40783:30;40868:1;40859:6;40854:3;40850:16;40843:27;40773:103;;;:::o;40882:307::-;40950:1;40960:113;40974:6;40971:1;40968:13;40960:113;;;41059:1;41054:3;41050:11;41044:18;41040:1;41035:3;41031:11;41024:39;40996:2;40993:1;40989:10;40984:15;;40960:113;;;41091:6;41088:1;41085:13;41082:2;;;41171:1;41162:6;41157:3;41153:16;41146:27;41082:2;40931:258;;;;:::o;41195:320::-;;41276:1;41270:4;41266:12;41256:22;;41323:1;41317:4;41313:12;41344:18;41334:2;;41400:4;41392:6;41388:17;41378:27;;41334:2;41462;41454:6;41451:14;41431:18;41428:38;41425:2;;;41481:18;;:::i;:::-;41425:2;41246:269;;;;:::o;41521:233::-;;41583:24;41601:5;41583:24;:::i;:::-;41574:33;;41629:66;41622:5;41619:77;41616:2;;;41699:18;;:::i;:::-;41616:2;41746:1;41739:5;41735:13;41728:20;;41564:190;;;:::o;41760:100::-;;41828:26;41848:5;41828:26;:::i;:::-;41817:37;;41807:53;;;:::o;41866:79::-;;41934:5;41923:16;;41913:32;;;:::o;41951:94::-;;42019:20;42033:5;42019:20;:::i;:::-;42008:31;;41998:47;;;:::o;42051:79::-;;42119:5;42108:16;;42098:32;;;:::o;42136:176::-;;42185:20;42203:1;42185:20;:::i;:::-;42180:25;;42219:20;42237:1;42219:20;:::i;:::-;42214:25;;42258:1;42248:2;;42263:18;;:::i;:::-;42248:2;42304:1;42301;42297:9;42292:14;;42170:142;;;;:::o;42318:180::-;42366:77;42363:1;42356:88;42463:4;42460:1;42453:15;42487:4;42484:1;42477:15;42504:180;42552:77;42549:1;42542:88;42649:4;42646:1;42639:15;42673:4;42670:1;42663:15;42690:180;42738:77;42735:1;42728:88;42835:4;42832:1;42825:15;42859:4;42856:1;42849:15;42876:180;42924:77;42921:1;42914:88;43021:4;43018:1;43011:15;43045:4;43042:1;43035:15;43062:102;;43154:2;43150:7;43145:2;43138:5;43134:14;43130:28;43120:38;;43110:54;;;:::o;43170:94::-;;43251:5;43247:2;43243:14;43222:35;;43212:52;;;:::o;43270:122::-;43343:24;43361:5;43343:24;:::i;:::-;43336:5;43333:35;43323:2;;43382:1;43379;43372:12;43323:2;43313:79;:::o;43398:116::-;43468:21;43483:5;43468:21;:::i;:::-;43461:5;43458:32;43448:2;;43504:1;43501;43494:12;43448:2;43438:76;:::o;43520:120::-;43592:23;43609:5;43592:23;:::i;:::-;43585:5;43582:34;43572:2;;43630:1;43627;43620:12;43572:2;43562:78;:::o;43646:122::-;43719:24;43737:5;43719:24;:::i;:::-;43712:5;43709:35;43699:2;;43758:1;43755;43748:12;43699:2;43689:79;:::o

Swarm Source

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