ETH Price: $3,334.60 (-1.58%)
Gas: 20 Gwei

Token

0xFactory's Animathereum (Animations)
 

Overview

Max Total Supply

9,999 Animations

Holders

2,240

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 Animations
0x194feaadb5972dd0451baca1300921c730062e77
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:
Animathereum

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

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



pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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


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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

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

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



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



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;

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

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

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

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

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



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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;

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



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



pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

// File: Animathereum.sol


pragma solidity ^0.8.0;

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



pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


contract Animathereum is ERC721Enumerable, Ownable{
    uint public constant MAX_NFTS = 9999;
	bool public paused = true;
	string _baseTokenURI = "https://api.0xfactory.io/animathereum/";
	mapping(uint256 => uint256) private _timestraps;
	XFCT public constant XFCT_CONTRACT = XFCT(0xa50f74f04420443519Ad4908DDB82c02ACCab9D1);

    constructor(address _to, uint _count) ERC721("0xFactory's Animathereum", "Animations")  {
        uint _timestamp = block.timestamp;
        for(uint i = 0; i < _count; i++){
            _timestraps[totalSupply()] = _timestamp;
            _safeMint(_to, totalSupply());
        }
        
    }

    function mint(address _to, uint _count) public payable {
        require(!paused, "Pause");
        require(_count <= 20, "Exceeds 20");
        require(msg.value >= price(_count), "Value below price");
        require(totalSupply() + _count <= MAX_NFTS, "Max limit");
        require(totalSupply() < MAX_NFTS, "Sale end");
        
        uint _timestamp = block.timestamp;
        
        for(uint i = 0; i < _count; i++){
            _timestraps[totalSupply()] = _timestamp;
            _safeMint(_to, totalSupply());
        }
    }
    
    function mintForXFCT(address _to, uint _count) public {
        require(!paused, "Pause");
        require(_count <= 20, "Exceeds 20");
        require(totalSupply() + _count <= MAX_NFTS, "Max limit");
        require(totalSupply() < MAX_NFTS, "Sale end");
        require(XFCT_CONTRACT.balanceOf(msg.sender) >= priceInXFCT(_count), "Value below price");
        require(XFCT_CONTRACT.transferFrom(msg.sender, address(this), priceInXFCT(_count)), "xFCT Transfer error");
        
        uint _timestamp = block.timestamp;
        
        for(uint i = 0; i < _count; i++){
            _timestraps[totalSupply()] = _timestamp;
            _safeMint(_to, totalSupply());
        }
    }
    
    function price(uint _count) public pure returns (uint256) {
        return _count * 10000000000000000;
    }
    
    function priceInXFCT(uint _count) public pure returns (uint256) {
        return _count * 8600;
    }
        
    function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }
    
    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseTokenURI = baseURI;
    }

    function walletOfOwner(address _owner) external view returns(uint256[] memory) {
        uint tokenCount = balanceOf(_owner);
        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint i = 0; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
    }
    
    function pause(bool val) public onlyOwner {
        paused = val;
    }

    function withdrawAll() public payable onlyOwner {
        require(payable(msg.sender).send(address(this).balance));
    }
    
    function getXFCTBalance(address _owner) external view returns(uint256){
        require(_owner != address(0), "Query for the zero address");
        uint tokenCount = balanceOf(_owner);
        uint _timestamp = block.timestamp;
        uint256 _balance = 0;
        for(uint i = 0; i < tokenCount; i++){
            uint256 _tokenBalance = (_timestamp - _timestraps[tokenOfOwnerByIndex(msg.sender, i)]) / 3600;
            _balance = _balance + _tokenBalance;
        }
        return _balance;
    }
    
    function withdrawXFCT() public {
        uint tokenCount = balanceOf(msg.sender);
        uint _timestamp = block.timestamp;
        uint256 _balance = 0;
        for(uint i = 0; i < tokenCount; i++){
            uint256 _tokenBalance = (_timestamp - _timestraps[tokenOfOwnerByIndex(msg.sender, i)]) / 3600;
            if (_tokenBalance > 0) {
                _timestraps[tokenOfOwnerByIndex(msg.sender, i)] = _timestamp;
            }
            _balance = _balance + _tokenBalance;
        }
        XFCT_CONTRACT.mint(msg.sender, _balance);
    }
    
    function burnAllXFCT() public onlyOwner {
        XFCT_CONTRACT.burn(XFCT_CONTRACT.balanceOf(address(this)));
    }
    
}

interface XFCT{
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function mint(address _to, uint256 _count) external;
    function burn(uint256 _count) external;
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_NFTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"XFCT_CONTRACT","outputs":[{"internalType":"contract XFCT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAllXFCT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"getXFCTBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintForXFCT","outputs":[],"stateMutability":"nonpayable","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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"priceInXFCT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawXFCT","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600a60146101000a81548160ff02191690831515021790555060405180606001604052806026815260200162005de960269139600b90805190602001906200005092919062000c80565b503480156200005e57600080fd5b5060405162005e0f38038062005e0f833981810160405281019062000084919062000d75565b6040518060400160405280601881526020017f3078466163746f7279277320416e696d617468657265756d00000000000000008152506040518060400160405280600a81526020017f416e696d6174696f6e730000000000000000000000000000000000000000000081525081600090805190602001906200010892919062000c80565b5080600190805190602001906200012192919062000c80565b5050506200014462000138620001bd60201b60201c565b620001c560201b60201c565b600042905060005b82811015620001b35781600c60006200016a6200028b60201b60201c565b8152602001908152602001600020819055506200019d84620001916200028b60201b60201c565b6200029860201b60201c565b8080620001aa9062001164565b9150506200014c565b50505050620013c2565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600880549050905090565b620002ba828260405180602001604052806000815250620002be60201b60201c565b5050565b620002d083836200032c60201b60201c565b620002e560008484846200051260201b60201c565b62000327576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200031e9062000f41565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200039f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003969062000fa7565b60405180910390fd5b620003b081620006cc60201b60201c565b15620003f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003ea9062000f63565b60405180910390fd5b62000407600083836200073860201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000459919062000ff6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620005408473ffffffffffffffffffffffffffffffffffffffff166200087f60201b62001ed91760201c565b15620006bf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000572620001bd60201b60201c565b8786866040518563ffffffff1660e01b815260040162000596949392919062000eed565b602060405180830381600087803b158015620005b157600080fd5b505af1925050508015620005e557506040513d601f19601f82011682018060405250810190620005e2919062000dbc565b60015b6200066e573d806000811462000618576040519150601f19603f3d011682016040523d82523d6000602084013e6200061d565b606091505b5060008151141562000666576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200065d9062000f41565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620006c4565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620007508383836200089260201b62001eec1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200079d5762000797816200089760201b60201c565b620007e5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620007e457620007e38382620008e060201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000832576200082c8162000a5d60201b60201c565b6200087a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620008795762000878828262000b3960201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001620008fa8462000bc560201b620015641760201c565b62000906919062001053565b9050600060076000848152602001908152602001600020549050818114620009ec576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000a73919062001053565b905060006009600084815260200190815260200160002054905060006008838154811062000aa65762000aa56200123f565b5b90600052602060002001549050806008838154811062000acb5762000aca6200123f565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000b1d5762000b1c62001210565b5b6001900381819060005260206000200160009055905550505050565b600062000b518362000bc560201b620015641760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c309062000f85565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000c8e906200112e565b90600052602060002090601f01602090048101928262000cb2576000855562000cfe565b82601f1062000ccd57805160ff191683800117855562000cfe565b8280016001018555821562000cfe579182015b8281111562000cfd57825182559160200191906001019062000ce0565b5b50905062000d0d919062000d11565b5090565b5b8082111562000d2c57600081600090555060010162000d12565b5090565b60008151905062000d418162001374565b92915050565b60008151905062000d58816200138e565b92915050565b60008151905062000d6f81620013a8565b92915050565b6000806040838503121562000d8f5762000d8e6200126e565b5b600062000d9f8582860162000d30565b925050602062000db28582860162000d5e565b9150509250929050565b60006020828403121562000dd55762000dd46200126e565b5b600062000de58482850162000d47565b91505092915050565b62000df9816200108e565b82525050565b600062000e0c8262000fc9565b62000e18818562000fd4565b935062000e2a818560208601620010f8565b62000e358162001273565b840191505092915050565b600062000e4f60328362000fe5565b915062000e5c8262001284565b604082019050919050565b600062000e76601c8362000fe5565b915062000e8382620012d3565b602082019050919050565b600062000e9d602a8362000fe5565b915062000eaa82620012fc565b604082019050919050565b600062000ec460208362000fe5565b915062000ed1826200134b565b602082019050919050565b62000ee781620010ee565b82525050565b600060808201905062000f04600083018762000dee565b62000f13602083018662000dee565b62000f22604083018562000edc565b818103606083015262000f36818462000dff565b905095945050505050565b6000602082019050818103600083015262000f5c8162000e40565b9050919050565b6000602082019050818103600083015262000f7e8162000e67565b9050919050565b6000602082019050818103600083015262000fa08162000e8e565b9050919050565b6000602082019050818103600083015262000fc28162000eb5565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200100382620010ee565b91506200101083620010ee565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010485762001047620011b2565b5b828201905092915050565b60006200106082620010ee565b91506200106d83620010ee565b925082821015620010835762001082620011b2565b5b828203905092915050565b60006200109b82620010ce565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562001118578082015181840152602081019050620010fb565b8381111562001128576000848401525b50505050565b600060028204905060018216806200114757607f821691505b602082108114156200115e576200115d620011e1565b5b50919050565b60006200117182620010ee565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620011a757620011a6620011b2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6200137f816200108e565b81146200138b57600080fd5b50565b6200139981620010a2565b8114620013a557600080fd5b50565b620013b381620010ee565b8114620013bf57600080fd5b50565b614a1780620013d26000396000f3fe6080604052600436106101ee5760003560e01c806355f804b31161010d5780638da5cb5b116100a0578063b88d4fde1161006f578063b88d4fde146106cf578063c87b56dd146106f8578063e447d94714610735578063e985e9c514610772578063f2fde38b146107af576101ee565b80638da5cb5b1461062557806395795cba1461065057806395d89b411461067b578063a22cb465146106a6576101ee565b806370a08231116100dc57806370a08231146105b0578063715018a6146105ed578063839d715e14610604578063853828b61461061b576101ee565b806355f804b3146104f65780635c975abb1461051f5780635e38452d1461054a5780636352211e14610573576101ee565b806326a49e371161018557806342842e0e1161015457806342842e0e1461041657806342e3e8d81461043f578063438b63001461047c5780634f6ccce7146104b9576101ee565b806326a49e37146103695780632f745c59146103a65780633fc5edd5146103e357806340c10f19146103fa576101ee565b8063093d8c64116101c1578063093d8c64146102c1578063095ea7b3146102ec57806318160ddd1461031557806323b872dd14610340576101ee565b806301ffc9a7146101f357806302329a291461023057806306fdde0314610259578063081812fc14610284575b600080fd5b3480156101ff57600080fd5b5061021a600480360381019061021591906133e4565b6107d8565b6040516102279190613abd565b60405180910390f35b34801561023c57600080fd5b506102576004803603810190610252919061338a565b610852565b005b34801561026557600080fd5b5061026e6108eb565b60405161027b9190613af3565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a69190613487565b61097d565b6040516102b891906139d4565b60405180910390f35b3480156102cd57600080fd5b506102d6610a02565b6040516102e39190613e35565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e919061334a565b610a08565b005b34801561032157600080fd5b5061032a610b20565b6040516103379190613e35565b60405180910390f35b34801561034c57600080fd5b5061036760048036038101906103629190613234565b610b2d565b005b34801561037557600080fd5b50610390600480360381019061038b9190613487565b610b8d565b60405161039d9190613e35565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c8919061334a565b610ba9565b6040516103da9190613e35565b60405180910390f35b3480156103ef57600080fd5b506103f8610c4e565b005b610414600480360381019061040f919061334a565b610d79565b005b34801561042257600080fd5b5061043d60048036038101906104389190613234565b610f53565b005b34801561044b57600080fd5b5061046660048036038101906104619190613487565b610f73565b6040516104739190613e35565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e91906131c7565b610f8a565b6040516104b09190613a9b565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190613487565b611038565b6040516104ed9190613e35565b60405180910390f35b34801561050257600080fd5b5061051d6004803603810190610518919061343e565b6110a9565b005b34801561052b57600080fd5b5061053461113f565b6040516105419190613abd565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c919061334a565b611152565b005b34801561057f57600080fd5b5061059a60048036038101906105959190613487565b6114b2565b6040516105a791906139d4565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d291906131c7565b611564565b6040516105e49190613e35565b60405180910390f35b3480156105f957600080fd5b5061060261161c565b005b34801561061057600080fd5b506106196116a4565b005b61062361183d565b005b34801561063157600080fd5b5061063a6118f9565b60405161064791906139d4565b60405180910390f35b34801561065c57600080fd5b50610665611923565b6040516106729190613ad8565b60405180910390f35b34801561068757600080fd5b5061069061193b565b60405161069d9190613af3565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c8919061330a565b6119cd565b005b3480156106db57600080fd5b506106f660048036038101906106f19190613287565b611b4e565b005b34801561070457600080fd5b5061071f600480360381019061071a9190613487565b611bb0565b60405161072c9190613af3565b60405180910390f35b34801561074157600080fd5b5061075c600480360381019061075791906131c7565b611c57565b6040516107699190613e35565b60405180910390f35b34801561077e57600080fd5b50610799600480360381019061079491906131f4565b611d4d565b6040516107a69190613abd565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d191906131c7565b611de1565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084b575061084a82611ef1565b5b9050919050565b61085a611fd3565b73ffffffffffffffffffffffffffffffffffffffff166108786118f9565b73ffffffffffffffffffffffffffffffffffffffff16146108ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c590613d35565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b6060600080546108fa90614154565b80601f016020809104026020016040519081016040528092919081815260200182805461092690614154565b80156109735780601f1061094857610100808354040283529160200191610973565b820191906000526020600020905b81548152906001019060200180831161095657829003601f168201915b5050505050905090565b600061098882611fdb565b6109c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109be90613d15565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61270f81565b6000610a13826114b2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7b90613db5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aa3611fd3565b73ffffffffffffffffffffffffffffffffffffffff161480610ad25750610ad181610acc611fd3565b611d4d565b5b610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0890613c75565b60405180910390fd5b610b1b8383612047565b505050565b6000600880549050905090565b610b3e610b38611fd3565b82612100565b610b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7490613df5565b60405180910390fd5b610b888383836121de565b505050565b6000662386f26fc1000082610ba29190613fda565b9050919050565b6000610bb483611564565b8210610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec90613b15565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000610c5933611564565b905060004290506000805b83811015610cf2576000610e10600c6000610c7f3386610ba9565b81526020019081526020016000205485610c999190614034565b610ca39190613fa9565b90506000811115610cd05783600c6000610cbd3386610ba9565b8152602001908152602001600020819055505b8083610cdc9190613f53565b9250508080610cea906141b7565b915050610c64565b5073a50f74f04420443519ad4908ddb82c02accab9d173ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b8152600401610d42929190613a72565b600060405180830381600087803b158015610d5c57600080fd5b505af1158015610d70573d6000803e3d6000fd5b50505050505050565b600a60149054906101000a900460ff1615610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc090613bf5565b60405180910390fd5b6014811115610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490613dd5565b60405180910390fd5b610e1681610b8d565b341015610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f90613d95565b60405180910390fd5b61270f81610e64610b20565b610e6e9190613f53565b1115610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea690613c35565b60405180910390fd5b61270f610eba610b20565b10610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef190613cf5565b60405180910390fd5b600042905060005b82811015610f4d5781600c6000610f17610b20565b815260200190815260200160002081905550610f3a84610f35610b20565b61243a565b8080610f45906141b7565b915050610f02565b50505050565b610f6e83838360405180602001604052806000815250611b4e565b505050565b600061219882610f839190613fda565b9050919050565b60606000610f9783611564565b905060008167ffffffffffffffff811115610fb557610fb461431c565b5b604051908082528060200260200182016040528015610fe35781602001602082028036833780820191505090505b50905060005b8281101561102d57610ffb8582610ba9565b82828151811061100e5761100d6142ed565b5b6020026020010181815250508080611025906141b7565b915050610fe9565b508092505050919050565b6000611042610b20565b8210611083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107a90613e15565b60405180910390fd5b60088281548110611097576110966142ed565b5b90600052602060002001549050919050565b6110b1611fd3565b73ffffffffffffffffffffffffffffffffffffffff166110cf6118f9565b73ffffffffffffffffffffffffffffffffffffffff1614611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c90613d35565b60405180910390fd5b80600b908051906020019061113b929190612fb1565b5050565b600a60149054906101000a900460ff1681565b600a60149054906101000a900460ff16156111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990613bf5565b60405180910390fd5b60148111156111e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111dd90613dd5565b60405180910390fd5b61270f816111f2610b20565b6111fc9190613f53565b111561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490613c35565b60405180910390fd5b61270f611248610b20565b10611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f90613cf5565b60405180910390fd5b61129181610f73565b73a50f74f04420443519ad4908ddb82c02accab9d173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016112de91906139d4565b60206040518083038186803b1580156112f657600080fd5b505afa15801561130a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132e91906134b4565b101561136f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136690613d95565b60405180910390fd5b73a50f74f04420443519ad4908ddb82c02accab9d173ffffffffffffffffffffffffffffffffffffffff166323b872dd33306113aa85610f73565b6040518463ffffffff1660e01b81526004016113c8939291906139ef565b602060405180830381600087803b1580156113e257600080fd5b505af11580156113f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141a91906133b7565b611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090613b95565b60405180910390fd5b600042905060005b828110156114ac5781600c6000611476610b20565b81526020019081526020016000208190555061149984611494610b20565b61243a565b80806114a4906141b7565b915050611461565b50505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155290613cb5565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cc90613c95565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611624611fd3565b73ffffffffffffffffffffffffffffffffffffffff166116426118f9565b73ffffffffffffffffffffffffffffffffffffffff1614611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90613d35565b60405180910390fd5b6116a26000612458565b565b6116ac611fd3565b73ffffffffffffffffffffffffffffffffffffffff166116ca6118f9565b73ffffffffffffffffffffffffffffffffffffffff1614611720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171790613d35565b60405180910390fd5b73a50f74f04420443519ad4908ddb82c02accab9d173ffffffffffffffffffffffffffffffffffffffff166342966c6873a50f74f04420443519ad4908ddb82c02accab9d173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161179d91906139d4565b60206040518083038186803b1580156117b557600080fd5b505afa1580156117c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ed91906134b4565b6040518263ffffffff1660e01b81526004016118099190613e35565b600060405180830381600087803b15801561182357600080fd5b505af1158015611837573d6000803e3d6000fd5b50505050565b611845611fd3565b73ffffffffffffffffffffffffffffffffffffffff166118636118f9565b73ffffffffffffffffffffffffffffffffffffffff16146118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090613d35565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506118f757600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73a50f74f04420443519ad4908ddb82c02accab9d181565b60606001805461194a90614154565b80601f016020809104026020016040519081016040528092919081815260200182805461197690614154565b80156119c35780601f10611998576101008083540402835291602001916119c3565b820191906000526020600020905b8154815290600101906020018083116119a657829003601f168201915b5050505050905090565b6119d5611fd3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a90613bd5565b60405180910390fd5b8060056000611a50611fd3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611afd611fd3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b429190613abd565b60405180910390a35050565b611b5f611b59611fd3565b83612100565b611b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9590613df5565b60405180910390fd5b611baa8484848461251e565b50505050565b6060611bbb82611fdb565b611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf190613d75565b60405180910390fd5b6000611c0461257a565b90506000815111611c245760405180602001604052806000815250611c4f565b80611c2e8461260c565b604051602001611c3f9291906139b0565b6040516020818303038152906040525b915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf90613c15565b60405180910390fd5b6000611cd383611564565b905060004290506000805b83811015611d41576000610e10600c6000611cf93386610ba9565b81526020019081526020016000205485611d139190614034565b611d1d9190613fa9565b90508083611d2b9190613f53565b9250508080611d39906141b7565b915050611cde565b50809350505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611de9611fd3565b73ffffffffffffffffffffffffffffffffffffffff16611e076118f9565b73ffffffffffffffffffffffffffffffffffffffff1614611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5490613d35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec490613b55565b60405180910390fd5b611ed681612458565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611fbc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611fcc5750611fcb8261276d565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120ba836114b2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061210b82611fdb565b61214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214190613c55565b60405180910390fd5b6000612155836114b2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121c457508373ffffffffffffffffffffffffffffffffffffffff166121ac8461097d565b73ffffffffffffffffffffffffffffffffffffffff16145b806121d557506121d48185611d4d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121fe826114b2565b73ffffffffffffffffffffffffffffffffffffffff1614612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b90613d55565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90613bb5565b60405180910390fd5b6122cf8383836127d7565b6122da600082612047565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461232a9190614034565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123819190613f53565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6124548282604051806020016040528060008152506128eb565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125298484846121de565b61253584848484612946565b612574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256b90613b35565b60405180910390fd5b50505050565b6060600b805461258990614154565b80601f01602080910402602001604051908101604052809291908181526020018280546125b590614154565b80156126025780601f106125d757610100808354040283529160200191612602565b820191906000526020600020905b8154815290600101906020018083116125e557829003601f168201915b5050505050905090565b60606000821415612654576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612768565b600082905060005b6000821461268657808061266f906141b7565b915050600a8261267f9190613fa9565b915061265c565b60008167ffffffffffffffff8111156126a2576126a161431c565b5b6040519080825280601f01601f1916602001820160405280156126d45781602001600182028036833780820191505090505b5090505b60008514612761576001826126ed9190614034565b9150600a856126fc9190614200565b60306127089190613f53565b60f81b81838151811061271e5761271d6142ed565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561275a9190613fa9565b94506126d8565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127e2838383611eec565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128255761282081612add565b612864565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612863576128628382612b26565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128a7576128a281612c93565b6128e6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146128e5576128e48282612d64565b5b5b505050565b6128f58383612de3565b6129026000848484612946565b612941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293890613b35565b60405180910390fd5b505050565b60006129678473ffffffffffffffffffffffffffffffffffffffff16611ed9565b15612ad0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612990611fd3565b8786866040518563ffffffff1660e01b81526004016129b29493929190613a26565b602060405180830381600087803b1580156129cc57600080fd5b505af19250505080156129fd57506040513d601f19601f820116820180604052508101906129fa9190613411565b60015b612a80573d8060008114612a2d576040519150601f19603f3d011682016040523d82523d6000602084013e612a32565b606091505b50600081511415612a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6f90613b35565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ad5565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b3384611564565b612b3d9190614034565b9050600060076000848152602001908152602001600020549050818114612c22576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612ca79190614034565b9050600060096000848152602001908152602001600020549050600060088381548110612cd757612cd66142ed565b5b906000526020600020015490508060088381548110612cf957612cf86142ed565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d4857612d476142be565b5b6001900381819060005260206000200160009055905550505050565b6000612d6f83611564565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4a90613cd5565b60405180910390fd5b612e5c81611fdb565b15612e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9390613b75565b60405180910390fd5b612ea8600083836127d7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ef89190613f53565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612fbd90614154565b90600052602060002090601f016020900481019282612fdf5760008555613026565b82601f10612ff857805160ff1916838001178555613026565b82800160010185558215613026579182015b8281111561302557825182559160200191906001019061300a565b5b5090506130339190613037565b5090565b5b80821115613050576000816000905550600101613038565b5090565b600061306761306284613e75565b613e50565b90508281526020810184848401111561308357613082614350565b5b61308e848285614112565b509392505050565b60006130a96130a484613ea6565b613e50565b9050828152602081018484840111156130c5576130c4614350565b5b6130d0848285614112565b509392505050565b6000813590506130e781614985565b92915050565b6000813590506130fc8161499c565b92915050565b6000815190506131118161499c565b92915050565b600081359050613126816149b3565b92915050565b60008151905061313b816149b3565b92915050565b600082601f8301126131565761315561434b565b5b8135613166848260208601613054565b91505092915050565b600082601f8301126131845761318361434b565b5b8135613194848260208601613096565b91505092915050565b6000813590506131ac816149ca565b92915050565b6000815190506131c1816149ca565b92915050565b6000602082840312156131dd576131dc61435a565b5b60006131eb848285016130d8565b91505092915050565b6000806040838503121561320b5761320a61435a565b5b6000613219858286016130d8565b925050602061322a858286016130d8565b9150509250929050565b60008060006060848603121561324d5761324c61435a565b5b600061325b868287016130d8565b935050602061326c868287016130d8565b925050604061327d8682870161319d565b9150509250925092565b600080600080608085870312156132a1576132a061435a565b5b60006132af878288016130d8565b94505060206132c0878288016130d8565b93505060406132d18782880161319d565b925050606085013567ffffffffffffffff8111156132f2576132f1614355565b5b6132fe87828801613141565b91505092959194509250565b600080604083850312156133215761332061435a565b5b600061332f858286016130d8565b9250506020613340858286016130ed565b9150509250929050565b600080604083850312156133615761336061435a565b5b600061336f858286016130d8565b92505060206133808582860161319d565b9150509250929050565b6000602082840312156133a05761339f61435a565b5b60006133ae848285016130ed565b91505092915050565b6000602082840312156133cd576133cc61435a565b5b60006133db84828501613102565b91505092915050565b6000602082840312156133fa576133f961435a565b5b600061340884828501613117565b91505092915050565b6000602082840312156134275761342661435a565b5b60006134358482850161312c565b91505092915050565b6000602082840312156134545761345361435a565b5b600082013567ffffffffffffffff81111561347257613471614355565b5b61347e8482850161316f565b91505092915050565b60006020828403121561349d5761349c61435a565b5b60006134ab8482850161319d565b91505092915050565b6000602082840312156134ca576134c961435a565b5b60006134d8848285016131b2565b91505092915050565b60006134ed8383613992565b60208301905092915050565b61350281614068565b82525050565b600061351382613ee7565b61351d8185613f15565b935061352883613ed7565b8060005b8381101561355957815161354088826134e1565b975061354b83613f08565b92505060018101905061352c565b5085935050505092915050565b61356f8161407a565b82525050565b600061358082613ef2565b61358a8185613f26565b935061359a818560208601614121565b6135a38161435f565b840191505092915050565b6135b7816140dc565b82525050565b60006135c882613efd565b6135d28185613f37565b93506135e2818560208601614121565b6135eb8161435f565b840191505092915050565b600061360182613efd565b61360b8185613f48565b935061361b818560208601614121565b80840191505092915050565b6000613634602b83613f37565b915061363f82614370565b604082019050919050565b6000613657603283613f37565b9150613662826143bf565b604082019050919050565b600061367a602683613f37565b91506136858261440e565b604082019050919050565b600061369d601c83613f37565b91506136a88261445d565b602082019050919050565b60006136c0601383613f37565b91506136cb82614486565b602082019050919050565b60006136e3602483613f37565b91506136ee826144af565b604082019050919050565b6000613706601983613f37565b9150613711826144fe565b602082019050919050565b6000613729600583613f37565b915061373482614527565b602082019050919050565b600061374c601a83613f37565b915061375782614550565b602082019050919050565b600061376f600983613f37565b915061377a82614579565b602082019050919050565b6000613792602c83613f37565b915061379d826145a2565b604082019050919050565b60006137b5603883613f37565b91506137c0826145f1565b604082019050919050565b60006137d8602a83613f37565b91506137e382614640565b604082019050919050565b60006137fb602983613f37565b91506138068261468f565b604082019050919050565b600061381e602083613f37565b9150613829826146de565b602082019050919050565b6000613841600883613f37565b915061384c82614707565b602082019050919050565b6000613864602c83613f37565b915061386f82614730565b604082019050919050565b6000613887602083613f37565b91506138928261477f565b602082019050919050565b60006138aa602983613f37565b91506138b5826147a8565b604082019050919050565b60006138cd602f83613f37565b91506138d8826147f7565b604082019050919050565b60006138f0601183613f37565b91506138fb82614846565b602082019050919050565b6000613913602183613f37565b915061391e8261486f565b604082019050919050565b6000613936600a83613f37565b9150613941826148be565b602082019050919050565b6000613959603183613f37565b9150613964826148e7565b604082019050919050565b600061397c602c83613f37565b915061398782614936565b604082019050919050565b61399b816140d2565b82525050565b6139aa816140d2565b82525050565b60006139bc82856135f6565b91506139c882846135f6565b91508190509392505050565b60006020820190506139e960008301846134f9565b92915050565b6000606082019050613a0460008301866134f9565b613a1160208301856134f9565b613a1e60408301846139a1565b949350505050565b6000608082019050613a3b60008301876134f9565b613a4860208301866134f9565b613a5560408301856139a1565b8181036060830152613a678184613575565b905095945050505050565b6000604082019050613a8760008301856134f9565b613a9460208301846139a1565b9392505050565b60006020820190508181036000830152613ab58184613508565b905092915050565b6000602082019050613ad26000830184613566565b92915050565b6000602082019050613aed60008301846135ae565b92915050565b60006020820190508181036000830152613b0d81846135bd565b905092915050565b60006020820190508181036000830152613b2e81613627565b9050919050565b60006020820190508181036000830152613b4e8161364a565b9050919050565b60006020820190508181036000830152613b6e8161366d565b9050919050565b60006020820190508181036000830152613b8e81613690565b9050919050565b60006020820190508181036000830152613bae816136b3565b9050919050565b60006020820190508181036000830152613bce816136d6565b9050919050565b60006020820190508181036000830152613bee816136f9565b9050919050565b60006020820190508181036000830152613c0e8161371c565b9050919050565b60006020820190508181036000830152613c2e8161373f565b9050919050565b60006020820190508181036000830152613c4e81613762565b9050919050565b60006020820190508181036000830152613c6e81613785565b9050919050565b60006020820190508181036000830152613c8e816137a8565b9050919050565b60006020820190508181036000830152613cae816137cb565b9050919050565b60006020820190508181036000830152613cce816137ee565b9050919050565b60006020820190508181036000830152613cee81613811565b9050919050565b60006020820190508181036000830152613d0e81613834565b9050919050565b60006020820190508181036000830152613d2e81613857565b9050919050565b60006020820190508181036000830152613d4e8161387a565b9050919050565b60006020820190508181036000830152613d6e8161389d565b9050919050565b60006020820190508181036000830152613d8e816138c0565b9050919050565b60006020820190508181036000830152613dae816138e3565b9050919050565b60006020820190508181036000830152613dce81613906565b9050919050565b60006020820190508181036000830152613dee81613929565b9050919050565b60006020820190508181036000830152613e0e8161394c565b9050919050565b60006020820190508181036000830152613e2e8161396f565b9050919050565b6000602082019050613e4a60008301846139a1565b92915050565b6000613e5a613e6b565b9050613e668282614186565b919050565b6000604051905090565b600067ffffffffffffffff821115613e9057613e8f61431c565b5b613e998261435f565b9050602081019050919050565b600067ffffffffffffffff821115613ec157613ec061431c565b5b613eca8261435f565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f5e826140d2565b9150613f69836140d2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f9e57613f9d614231565b5b828201905092915050565b6000613fb4826140d2565b9150613fbf836140d2565b925082613fcf57613fce614260565b5b828204905092915050565b6000613fe5826140d2565b9150613ff0836140d2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561402957614028614231565b5b828202905092915050565b600061403f826140d2565b915061404a836140d2565b92508282101561405d5761405c614231565b5b828203905092915050565b6000614073826140b2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006140e7826140ee565b9050919050565b60006140f982614100565b9050919050565b600061410b826140b2565b9050919050565b82818337600083830152505050565b60005b8381101561413f578082015181840152602081019050614124565b8381111561414e576000848401525b50505050565b6000600282049050600182168061416c57607f821691505b602082108114156141805761417f61428f565b5b50919050565b61418f8261435f565b810181811067ffffffffffffffff821117156141ae576141ad61431c565b5b80604052505050565b60006141c2826140d2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141f5576141f4614231565b5b600182019050919050565b600061420b826140d2565b9150614216836140d2565b92508261422657614225614260565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f78464354205472616e73666572206572726f7200000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061757365000000000000000000000000000000000000000000000000000000600082015250565b7f517565727920666f7220746865207a65726f2061646472657373000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565647320323000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61498e81614068565b811461499957600080fd5b50565b6149a58161407a565b81146149b057600080fd5b50565b6149bc81614086565b81146149c757600080fd5b50565b6149d3816140d2565b81146149de57600080fd5b5056fea26469706673582212204eb23b33d46446bd84dbb97fe17a042bd195a3689b094ac4202bc7415d53810764736f6c6343000807003368747470733a2f2f6170692e3078666163746f72792e696f2f616e696d617468657265756d2f000000000000000000000000d3799b05bf81f05358fac9e09760ba35876002b8000000000000000000000000000000000000000000000000000000000000000f

Deployed Bytecode

0x6080604052600436106101ee5760003560e01c806355f804b31161010d5780638da5cb5b116100a0578063b88d4fde1161006f578063b88d4fde146106cf578063c87b56dd146106f8578063e447d94714610735578063e985e9c514610772578063f2fde38b146107af576101ee565b80638da5cb5b1461062557806395795cba1461065057806395d89b411461067b578063a22cb465146106a6576101ee565b806370a08231116100dc57806370a08231146105b0578063715018a6146105ed578063839d715e14610604578063853828b61461061b576101ee565b806355f804b3146104f65780635c975abb1461051f5780635e38452d1461054a5780636352211e14610573576101ee565b806326a49e371161018557806342842e0e1161015457806342842e0e1461041657806342e3e8d81461043f578063438b63001461047c5780634f6ccce7146104b9576101ee565b806326a49e37146103695780632f745c59146103a65780633fc5edd5146103e357806340c10f19146103fa576101ee565b8063093d8c64116101c1578063093d8c64146102c1578063095ea7b3146102ec57806318160ddd1461031557806323b872dd14610340576101ee565b806301ffc9a7146101f357806302329a291461023057806306fdde0314610259578063081812fc14610284575b600080fd5b3480156101ff57600080fd5b5061021a600480360381019061021591906133e4565b6107d8565b6040516102279190613abd565b60405180910390f35b34801561023c57600080fd5b506102576004803603810190610252919061338a565b610852565b005b34801561026557600080fd5b5061026e6108eb565b60405161027b9190613af3565b60405180910390f35b34801561029057600080fd5b506102ab60048036038101906102a69190613487565b61097d565b6040516102b891906139d4565b60405180910390f35b3480156102cd57600080fd5b506102d6610a02565b6040516102e39190613e35565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e919061334a565b610a08565b005b34801561032157600080fd5b5061032a610b20565b6040516103379190613e35565b60405180910390f35b34801561034c57600080fd5b5061036760048036038101906103629190613234565b610b2d565b005b34801561037557600080fd5b50610390600480360381019061038b9190613487565b610b8d565b60405161039d9190613e35565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c8919061334a565b610ba9565b6040516103da9190613e35565b60405180910390f35b3480156103ef57600080fd5b506103f8610c4e565b005b610414600480360381019061040f919061334a565b610d79565b005b34801561042257600080fd5b5061043d60048036038101906104389190613234565b610f53565b005b34801561044b57600080fd5b5061046660048036038101906104619190613487565b610f73565b6040516104739190613e35565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e91906131c7565b610f8a565b6040516104b09190613a9b565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190613487565b611038565b6040516104ed9190613e35565b60405180910390f35b34801561050257600080fd5b5061051d6004803603810190610518919061343e565b6110a9565b005b34801561052b57600080fd5b5061053461113f565b6040516105419190613abd565b60405180910390f35b34801561055657600080fd5b50610571600480360381019061056c919061334a565b611152565b005b34801561057f57600080fd5b5061059a60048036038101906105959190613487565b6114b2565b6040516105a791906139d4565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d291906131c7565b611564565b6040516105e49190613e35565b60405180910390f35b3480156105f957600080fd5b5061060261161c565b005b34801561061057600080fd5b506106196116a4565b005b61062361183d565b005b34801561063157600080fd5b5061063a6118f9565b60405161064791906139d4565b60405180910390f35b34801561065c57600080fd5b50610665611923565b6040516106729190613ad8565b60405180910390f35b34801561068757600080fd5b5061069061193b565b60405161069d9190613af3565b60405180910390f35b3480156106b257600080fd5b506106cd60048036038101906106c8919061330a565b6119cd565b005b3480156106db57600080fd5b506106f660048036038101906106f19190613287565b611b4e565b005b34801561070457600080fd5b5061071f600480360381019061071a9190613487565b611bb0565b60405161072c9190613af3565b60405180910390f35b34801561074157600080fd5b5061075c600480360381019061075791906131c7565b611c57565b6040516107699190613e35565b60405180910390f35b34801561077e57600080fd5b50610799600480360381019061079491906131f4565b611d4d565b6040516107a69190613abd565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d191906131c7565b611de1565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084b575061084a82611ef1565b5b9050919050565b61085a611fd3565b73ffffffffffffffffffffffffffffffffffffffff166108786118f9565b73ffffffffffffffffffffffffffffffffffffffff16146108ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c590613d35565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b6060600080546108fa90614154565b80601f016020809104026020016040519081016040528092919081815260200182805461092690614154565b80156109735780601f1061094857610100808354040283529160200191610973565b820191906000526020600020905b81548152906001019060200180831161095657829003601f168201915b5050505050905090565b600061098882611fdb565b6109c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109be90613d15565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61270f81565b6000610a13826114b2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7b90613db5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610aa3611fd3565b73ffffffffffffffffffffffffffffffffffffffff161480610ad25750610ad181610acc611fd3565b611d4d565b5b610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0890613c75565b60405180910390fd5b610b1b8383612047565b505050565b6000600880549050905090565b610b3e610b38611fd3565b82612100565b610b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7490613df5565b60405180910390fd5b610b888383836121de565b505050565b6000662386f26fc1000082610ba29190613fda565b9050919050565b6000610bb483611564565b8210610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec90613b15565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000610c5933611564565b905060004290506000805b83811015610cf2576000610e10600c6000610c7f3386610ba9565b81526020019081526020016000205485610c999190614034565b610ca39190613fa9565b90506000811115610cd05783600c6000610cbd3386610ba9565b8152602001908152602001600020819055505b8083610cdc9190613f53565b9250508080610cea906141b7565b915050610c64565b5073a50f74f04420443519ad4908ddb82c02accab9d173ffffffffffffffffffffffffffffffffffffffff166340c10f1933836040518363ffffffff1660e01b8152600401610d42929190613a72565b600060405180830381600087803b158015610d5c57600080fd5b505af1158015610d70573d6000803e3d6000fd5b50505050505050565b600a60149054906101000a900460ff1615610dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc090613bf5565b60405180910390fd5b6014811115610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490613dd5565b60405180910390fd5b610e1681610b8d565b341015610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f90613d95565b60405180910390fd5b61270f81610e64610b20565b610e6e9190613f53565b1115610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea690613c35565b60405180910390fd5b61270f610eba610b20565b10610efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef190613cf5565b60405180910390fd5b600042905060005b82811015610f4d5781600c6000610f17610b20565b815260200190815260200160002081905550610f3a84610f35610b20565b61243a565b8080610f45906141b7565b915050610f02565b50505050565b610f6e83838360405180602001604052806000815250611b4e565b505050565b600061219882610f839190613fda565b9050919050565b60606000610f9783611564565b905060008167ffffffffffffffff811115610fb557610fb461431c565b5b604051908082528060200260200182016040528015610fe35781602001602082028036833780820191505090505b50905060005b8281101561102d57610ffb8582610ba9565b82828151811061100e5761100d6142ed565b5b6020026020010181815250508080611025906141b7565b915050610fe9565b508092505050919050565b6000611042610b20565b8210611083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107a90613e15565b60405180910390fd5b60088281548110611097576110966142ed565b5b90600052602060002001549050919050565b6110b1611fd3565b73ffffffffffffffffffffffffffffffffffffffff166110cf6118f9565b73ffffffffffffffffffffffffffffffffffffffff1614611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c90613d35565b60405180910390fd5b80600b908051906020019061113b929190612fb1565b5050565b600a60149054906101000a900460ff1681565b600a60149054906101000a900460ff16156111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990613bf5565b60405180910390fd5b60148111156111e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111dd90613dd5565b60405180910390fd5b61270f816111f2610b20565b6111fc9190613f53565b111561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123490613c35565b60405180910390fd5b61270f611248610b20565b10611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127f90613cf5565b60405180910390fd5b61129181610f73565b73a50f74f04420443519ad4908ddb82c02accab9d173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016112de91906139d4565b60206040518083038186803b1580156112f657600080fd5b505afa15801561130a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132e91906134b4565b101561136f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136690613d95565b60405180910390fd5b73a50f74f04420443519ad4908ddb82c02accab9d173ffffffffffffffffffffffffffffffffffffffff166323b872dd33306113aa85610f73565b6040518463ffffffff1660e01b81526004016113c8939291906139ef565b602060405180830381600087803b1580156113e257600080fd5b505af11580156113f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141a91906133b7565b611459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145090613b95565b60405180910390fd5b600042905060005b828110156114ac5781600c6000611476610b20565b81526020019081526020016000208190555061149984611494610b20565b61243a565b80806114a4906141b7565b915050611461565b50505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155290613cb5565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cc90613c95565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611624611fd3565b73ffffffffffffffffffffffffffffffffffffffff166116426118f9565b73ffffffffffffffffffffffffffffffffffffffff1614611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90613d35565b60405180910390fd5b6116a26000612458565b565b6116ac611fd3565b73ffffffffffffffffffffffffffffffffffffffff166116ca6118f9565b73ffffffffffffffffffffffffffffffffffffffff1614611720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171790613d35565b60405180910390fd5b73a50f74f04420443519ad4908ddb82c02accab9d173ffffffffffffffffffffffffffffffffffffffff166342966c6873a50f74f04420443519ad4908ddb82c02accab9d173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161179d91906139d4565b60206040518083038186803b1580156117b557600080fd5b505afa1580156117c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ed91906134b4565b6040518263ffffffff1660e01b81526004016118099190613e35565b600060405180830381600087803b15801561182357600080fd5b505af1158015611837573d6000803e3d6000fd5b50505050565b611845611fd3565b73ffffffffffffffffffffffffffffffffffffffff166118636118f9565b73ffffffffffffffffffffffffffffffffffffffff16146118b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b090613d35565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050506118f757600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73a50f74f04420443519ad4908ddb82c02accab9d181565b60606001805461194a90614154565b80601f016020809104026020016040519081016040528092919081815260200182805461197690614154565b80156119c35780601f10611998576101008083540402835291602001916119c3565b820191906000526020600020905b8154815290600101906020018083116119a657829003601f168201915b5050505050905090565b6119d5611fd3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a90613bd5565b60405180910390fd5b8060056000611a50611fd3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611afd611fd3565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b429190613abd565b60405180910390a35050565b611b5f611b59611fd3565b83612100565b611b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9590613df5565b60405180910390fd5b611baa8484848461251e565b50505050565b6060611bbb82611fdb565b611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf190613d75565b60405180910390fd5b6000611c0461257a565b90506000815111611c245760405180602001604052806000815250611c4f565b80611c2e8461260c565b604051602001611c3f9291906139b0565b6040516020818303038152906040525b915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf90613c15565b60405180910390fd5b6000611cd383611564565b905060004290506000805b83811015611d41576000610e10600c6000611cf93386610ba9565b81526020019081526020016000205485611d139190614034565b611d1d9190613fa9565b90508083611d2b9190613f53565b9250508080611d39906141b7565b915050611cde565b50809350505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611de9611fd3565b73ffffffffffffffffffffffffffffffffffffffff16611e076118f9565b73ffffffffffffffffffffffffffffffffffffffff1614611e5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5490613d35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec490613b55565b60405180910390fd5b611ed681612458565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611fbc57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611fcc5750611fcb8261276d565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166120ba836114b2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061210b82611fdb565b61214a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214190613c55565b60405180910390fd5b6000612155836114b2565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806121c457508373ffffffffffffffffffffffffffffffffffffffff166121ac8461097d565b73ffffffffffffffffffffffffffffffffffffffff16145b806121d557506121d48185611d4d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166121fe826114b2565b73ffffffffffffffffffffffffffffffffffffffff1614612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b90613d55565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bb90613bb5565b60405180910390fd5b6122cf8383836127d7565b6122da600082612047565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461232a9190614034565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123819190613f53565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6124548282604051806020016040528060008152506128eb565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125298484846121de565b61253584848484612946565b612574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256b90613b35565b60405180910390fd5b50505050565b6060600b805461258990614154565b80601f01602080910402602001604051908101604052809291908181526020018280546125b590614154565b80156126025780601f106125d757610100808354040283529160200191612602565b820191906000526020600020905b8154815290600101906020018083116125e557829003601f168201915b5050505050905090565b60606000821415612654576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612768565b600082905060005b6000821461268657808061266f906141b7565b915050600a8261267f9190613fa9565b915061265c565b60008167ffffffffffffffff8111156126a2576126a161431c565b5b6040519080825280601f01601f1916602001820160405280156126d45781602001600182028036833780820191505090505b5090505b60008514612761576001826126ed9190614034565b9150600a856126fc9190614200565b60306127089190613f53565b60f81b81838151811061271e5761271d6142ed565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561275a9190613fa9565b94506126d8565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6127e2838383611eec565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128255761282081612add565b612864565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612863576128628382612b26565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128a7576128a281612c93565b6128e6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146128e5576128e48282612d64565b5b5b505050565b6128f58383612de3565b6129026000848484612946565b612941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293890613b35565b60405180910390fd5b505050565b60006129678473ffffffffffffffffffffffffffffffffffffffff16611ed9565b15612ad0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612990611fd3565b8786866040518563ffffffff1660e01b81526004016129b29493929190613a26565b602060405180830381600087803b1580156129cc57600080fd5b505af19250505080156129fd57506040513d601f19601f820116820180604052508101906129fa9190613411565b60015b612a80573d8060008114612a2d576040519150601f19603f3d011682016040523d82523d6000602084013e612a32565b606091505b50600081511415612a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6f90613b35565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ad5565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b3384611564565b612b3d9190614034565b9050600060076000848152602001908152602001600020549050818114612c22576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612ca79190614034565b9050600060096000848152602001908152602001600020549050600060088381548110612cd757612cd66142ed565b5b906000526020600020015490508060088381548110612cf957612cf86142ed565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d4857612d476142be565b5b6001900381819060005260206000200160009055905550505050565b6000612d6f83611564565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e4a90613cd5565b60405180910390fd5b612e5c81611fdb565b15612e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9390613b75565b60405180910390fd5b612ea8600083836127d7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ef89190613f53565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612fbd90614154565b90600052602060002090601f016020900481019282612fdf5760008555613026565b82601f10612ff857805160ff1916838001178555613026565b82800160010185558215613026579182015b8281111561302557825182559160200191906001019061300a565b5b5090506130339190613037565b5090565b5b80821115613050576000816000905550600101613038565b5090565b600061306761306284613e75565b613e50565b90508281526020810184848401111561308357613082614350565b5b61308e848285614112565b509392505050565b60006130a96130a484613ea6565b613e50565b9050828152602081018484840111156130c5576130c4614350565b5b6130d0848285614112565b509392505050565b6000813590506130e781614985565b92915050565b6000813590506130fc8161499c565b92915050565b6000815190506131118161499c565b92915050565b600081359050613126816149b3565b92915050565b60008151905061313b816149b3565b92915050565b600082601f8301126131565761315561434b565b5b8135613166848260208601613054565b91505092915050565b600082601f8301126131845761318361434b565b5b8135613194848260208601613096565b91505092915050565b6000813590506131ac816149ca565b92915050565b6000815190506131c1816149ca565b92915050565b6000602082840312156131dd576131dc61435a565b5b60006131eb848285016130d8565b91505092915050565b6000806040838503121561320b5761320a61435a565b5b6000613219858286016130d8565b925050602061322a858286016130d8565b9150509250929050565b60008060006060848603121561324d5761324c61435a565b5b600061325b868287016130d8565b935050602061326c868287016130d8565b925050604061327d8682870161319d565b9150509250925092565b600080600080608085870312156132a1576132a061435a565b5b60006132af878288016130d8565b94505060206132c0878288016130d8565b93505060406132d18782880161319d565b925050606085013567ffffffffffffffff8111156132f2576132f1614355565b5b6132fe87828801613141565b91505092959194509250565b600080604083850312156133215761332061435a565b5b600061332f858286016130d8565b9250506020613340858286016130ed565b9150509250929050565b600080604083850312156133615761336061435a565b5b600061336f858286016130d8565b92505060206133808582860161319d565b9150509250929050565b6000602082840312156133a05761339f61435a565b5b60006133ae848285016130ed565b91505092915050565b6000602082840312156133cd576133cc61435a565b5b60006133db84828501613102565b91505092915050565b6000602082840312156133fa576133f961435a565b5b600061340884828501613117565b91505092915050565b6000602082840312156134275761342661435a565b5b60006134358482850161312c565b91505092915050565b6000602082840312156134545761345361435a565b5b600082013567ffffffffffffffff81111561347257613471614355565b5b61347e8482850161316f565b91505092915050565b60006020828403121561349d5761349c61435a565b5b60006134ab8482850161319d565b91505092915050565b6000602082840312156134ca576134c961435a565b5b60006134d8848285016131b2565b91505092915050565b60006134ed8383613992565b60208301905092915050565b61350281614068565b82525050565b600061351382613ee7565b61351d8185613f15565b935061352883613ed7565b8060005b8381101561355957815161354088826134e1565b975061354b83613f08565b92505060018101905061352c565b5085935050505092915050565b61356f8161407a565b82525050565b600061358082613ef2565b61358a8185613f26565b935061359a818560208601614121565b6135a38161435f565b840191505092915050565b6135b7816140dc565b82525050565b60006135c882613efd565b6135d28185613f37565b93506135e2818560208601614121565b6135eb8161435f565b840191505092915050565b600061360182613efd565b61360b8185613f48565b935061361b818560208601614121565b80840191505092915050565b6000613634602b83613f37565b915061363f82614370565b604082019050919050565b6000613657603283613f37565b9150613662826143bf565b604082019050919050565b600061367a602683613f37565b91506136858261440e565b604082019050919050565b600061369d601c83613f37565b91506136a88261445d565b602082019050919050565b60006136c0601383613f37565b91506136cb82614486565b602082019050919050565b60006136e3602483613f37565b91506136ee826144af565b604082019050919050565b6000613706601983613f37565b9150613711826144fe565b602082019050919050565b6000613729600583613f37565b915061373482614527565b602082019050919050565b600061374c601a83613f37565b915061375782614550565b602082019050919050565b600061376f600983613f37565b915061377a82614579565b602082019050919050565b6000613792602c83613f37565b915061379d826145a2565b604082019050919050565b60006137b5603883613f37565b91506137c0826145f1565b604082019050919050565b60006137d8602a83613f37565b91506137e382614640565b604082019050919050565b60006137fb602983613f37565b91506138068261468f565b604082019050919050565b600061381e602083613f37565b9150613829826146de565b602082019050919050565b6000613841600883613f37565b915061384c82614707565b602082019050919050565b6000613864602c83613f37565b915061386f82614730565b604082019050919050565b6000613887602083613f37565b91506138928261477f565b602082019050919050565b60006138aa602983613f37565b91506138b5826147a8565b604082019050919050565b60006138cd602f83613f37565b91506138d8826147f7565b604082019050919050565b60006138f0601183613f37565b91506138fb82614846565b602082019050919050565b6000613913602183613f37565b915061391e8261486f565b604082019050919050565b6000613936600a83613f37565b9150613941826148be565b602082019050919050565b6000613959603183613f37565b9150613964826148e7565b604082019050919050565b600061397c602c83613f37565b915061398782614936565b604082019050919050565b61399b816140d2565b82525050565b6139aa816140d2565b82525050565b60006139bc82856135f6565b91506139c882846135f6565b91508190509392505050565b60006020820190506139e960008301846134f9565b92915050565b6000606082019050613a0460008301866134f9565b613a1160208301856134f9565b613a1e60408301846139a1565b949350505050565b6000608082019050613a3b60008301876134f9565b613a4860208301866134f9565b613a5560408301856139a1565b8181036060830152613a678184613575565b905095945050505050565b6000604082019050613a8760008301856134f9565b613a9460208301846139a1565b9392505050565b60006020820190508181036000830152613ab58184613508565b905092915050565b6000602082019050613ad26000830184613566565b92915050565b6000602082019050613aed60008301846135ae565b92915050565b60006020820190508181036000830152613b0d81846135bd565b905092915050565b60006020820190508181036000830152613b2e81613627565b9050919050565b60006020820190508181036000830152613b4e8161364a565b9050919050565b60006020820190508181036000830152613b6e8161366d565b9050919050565b60006020820190508181036000830152613b8e81613690565b9050919050565b60006020820190508181036000830152613bae816136b3565b9050919050565b60006020820190508181036000830152613bce816136d6565b9050919050565b60006020820190508181036000830152613bee816136f9565b9050919050565b60006020820190508181036000830152613c0e8161371c565b9050919050565b60006020820190508181036000830152613c2e8161373f565b9050919050565b60006020820190508181036000830152613c4e81613762565b9050919050565b60006020820190508181036000830152613c6e81613785565b9050919050565b60006020820190508181036000830152613c8e816137a8565b9050919050565b60006020820190508181036000830152613cae816137cb565b9050919050565b60006020820190508181036000830152613cce816137ee565b9050919050565b60006020820190508181036000830152613cee81613811565b9050919050565b60006020820190508181036000830152613d0e81613834565b9050919050565b60006020820190508181036000830152613d2e81613857565b9050919050565b60006020820190508181036000830152613d4e8161387a565b9050919050565b60006020820190508181036000830152613d6e8161389d565b9050919050565b60006020820190508181036000830152613d8e816138c0565b9050919050565b60006020820190508181036000830152613dae816138e3565b9050919050565b60006020820190508181036000830152613dce81613906565b9050919050565b60006020820190508181036000830152613dee81613929565b9050919050565b60006020820190508181036000830152613e0e8161394c565b9050919050565b60006020820190508181036000830152613e2e8161396f565b9050919050565b6000602082019050613e4a60008301846139a1565b92915050565b6000613e5a613e6b565b9050613e668282614186565b919050565b6000604051905090565b600067ffffffffffffffff821115613e9057613e8f61431c565b5b613e998261435f565b9050602081019050919050565b600067ffffffffffffffff821115613ec157613ec061431c565b5b613eca8261435f565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f5e826140d2565b9150613f69836140d2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f9e57613f9d614231565b5b828201905092915050565b6000613fb4826140d2565b9150613fbf836140d2565b925082613fcf57613fce614260565b5b828204905092915050565b6000613fe5826140d2565b9150613ff0836140d2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561402957614028614231565b5b828202905092915050565b600061403f826140d2565b915061404a836140d2565b92508282101561405d5761405c614231565b5b828203905092915050565b6000614073826140b2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006140e7826140ee565b9050919050565b60006140f982614100565b9050919050565b600061410b826140b2565b9050919050565b82818337600083830152505050565b60005b8381101561413f578082015181840152602081019050614124565b8381111561414e576000848401525b50505050565b6000600282049050600182168061416c57607f821691505b602082108114156141805761417f61428f565b5b50919050565b61418f8261435f565b810181811067ffffffffffffffff821117156141ae576141ad61431c565b5b80604052505050565b60006141c2826140d2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141f5576141f4614231565b5b600182019050919050565b600061420b826140d2565b9150614216836140d2565b92508261422657614225614260565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f78464354205472616e73666572206572726f7200000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061757365000000000000000000000000000000000000000000000000000000600082015250565b7f517565727920666f7220746865207a65726f2061646472657373000000000000600082015250565b7f4d6178206c696d69740000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f53616c6520656e64000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565647320323000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61498e81614068565b811461499957600080fd5b50565b6149a58161407a565b81146149b057600080fd5b50565b6149bc81614086565b81146149c757600080fd5b50565b6149d3816140d2565b81146149de57600080fd5b5056fea26469706673582212204eb23b33d46446bd84dbb97fe17a042bd195a3689b094ac4202bc7415d53810764736f6c63430008070033

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

000000000000000000000000d3799b05bf81f05358fac9e09760ba35876002b8000000000000000000000000000000000000000000000000000000000000000f

-----Decoded View---------------
Arg [0] : _to (address): 0xD3799B05bf81F05358fac9e09760Ba35876002b8
Arg [1] : _count (uint256): 15

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000d3799b05bf81f05358fac9e09760ba35876002b8
Arg [1] : 000000000000000000000000000000000000000000000000000000000000000f


Deployed Bytecode Sourcemap

43220:4191:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37070:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45971:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24904:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26463:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43277:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25986:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37710:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27353:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45142:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37378:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46710:563;;;;;;;;;;;;;:::i;:::-;;43868:551;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27763:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45264:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45619:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37900:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45509:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43317:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44431:699;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24598:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24328:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2519:94;;;;;;;;;;;;;:::i;:::-;;47285:117;;;;;;;;;;;;;:::i;:::-;;46052:123;;;:::i;:::-;;1868:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43464:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25073:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26756:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28019:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25248:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46187:511;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27122:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2768:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37070:224;37172:4;37211:35;37196:50;;;:11;:50;;;;:90;;;;37250:36;37274:11;37250:23;:36::i;:::-;37196:90;37189:97;;37070:224;;;:::o;45971:73::-;2099:12;:10;:12::i;:::-;2088:23;;:7;:5;:7::i;:::-;:23;;;2080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46033:3:::1;46024:6;;:12;;;;;;;;;;;;;;;;;;45971:73:::0;:::o;24904:100::-;24958:13;24991:5;24984:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24904:100;:::o;26463:221::-;26539:7;26567:16;26575:7;26567;:16::i;:::-;26559:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26652:15;:24;26668:7;26652:24;;;;;;;;;;;;;;;;;;;;;26645:31;;26463:221;;;:::o;43277:36::-;43309:4;43277:36;:::o;25986:411::-;26067:13;26083:23;26098:7;26083:14;:23::i;:::-;26067:39;;26131:5;26125:11;;:2;:11;;;;26117:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26225:5;26209:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26234:37;26251:5;26258:12;:10;:12::i;:::-;26234:16;:37::i;:::-;26209:62;26187:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26368:21;26377:2;26381:7;26368:8;:21::i;:::-;26056:341;25986:411;;:::o;37710:113::-;37771:7;37798:10;:17;;;;37791:24;;37710:113;:::o;27353:339::-;27548:41;27567:12;:10;:12::i;:::-;27581:7;27548:18;:41::i;:::-;27540:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27656:28;27666:4;27672:2;27676:7;27656:9;:28::i;:::-;27353:339;;;:::o;45142:110::-;45191:7;45227:17;45218:6;:26;;;;:::i;:::-;45211:33;;45142:110;;;:::o;37378:256::-;37475:7;37511:23;37528:5;37511:16;:23::i;:::-;37503:5;:31;37495:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37600:12;:19;37613:5;37600:19;;;;;;;;;;;;;;;:26;37620:5;37600:26;;;;;;;;;;;;37593:33;;37378:256;;;;:::o;46710:563::-;46752:15;46770:21;46780:10;46770:9;:21::i;:::-;46752:39;;46802:15;46820;46802:33;;46846:16;46881:6;46877:338;46897:10;46893:1;:14;46877:338;;;46928:21;47017:4;46966:11;:47;46978:34;46998:10;47010:1;46978:19;:34::i;:::-;46966:47;;;;;;;;;;;;46953:10;:60;;;;:::i;:::-;46952:69;;;;:::i;:::-;46928:93;;47056:1;47040:13;:17;47036:118;;;47128:10;47078:11;:47;47090:34;47110:10;47122:1;47090:19;:34::i;:::-;47078:47;;;;;;;;;;;:60;;;;47036:118;47190:13;47179:8;:24;;;;:::i;:::-;47168:35;;46913:302;46909:3;;;;;:::i;:::-;;;;46877:338;;;;43506:42;47225:18;;;47244:10;47256:8;47225:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46741:532;;;46710:563::o;43868:551::-;43943:6;;;;;;;;;;;43942:7;43934:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;43988:2;43978:6;:12;;43970:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;44037:13;44043:6;44037:5;:13::i;:::-;44024:9;:26;;44016:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;43309:4;44107:6;44091:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:34;;44083:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;43309:4;44158:13;:11;:13::i;:::-;:24;44150:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;44216:15;44234;44216:33;;44274:6;44270:142;44290:6;44286:1;:10;44270:142;;;44346:10;44317:11;:26;44329:13;:11;:13::i;:::-;44317:26;;;;;;;;;;;:39;;;;44371:29;44381:3;44386:13;:11;:13::i;:::-;44371:9;:29::i;:::-;44298:3;;;;;:::i;:::-;;;;44270:142;;;;43923:496;43868:551;;:::o;27763:185::-;27901:39;27918:4;27924:2;27928:7;27901:39;;;;;;;;;;;;:16;:39::i;:::-;27763:185;;;:::o;45264:103::-;45319:7;45355:4;45346:6;:13;;;;:::i;:::-;45339:20;;45264:103;;;:::o;45619:340::-;45680:16;45709:15;45727:17;45737:6;45727:9;:17::i;:::-;45709:35;;45755:25;45797:10;45783:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45755:53;;45823:6;45819:107;45839:10;45835:1;:14;45819:107;;;45884:30;45904:6;45912:1;45884:19;:30::i;:::-;45870:8;45879:1;45870:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;45851:3;;;;;:::i;:::-;;;;45819:107;;;;45943:8;45936:15;;;;45619:340;;;:::o;37900:233::-;37975:7;38011:30;:28;:30::i;:::-;38003:5;:38;37995:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;38108:10;38119:5;38108:17;;;;;;;;:::i;:::-;;;;;;;;;;38101:24;;37900:233;;;:::o;45509:102::-;2099:12;:10;:12::i;:::-;2088:23;;:7;:5;:7::i;:::-;:23;;;2080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45596:7:::1;45580:13;:23;;;;;;;;;;;;:::i;:::-;;45509:102:::0;:::o;43317:25::-;;;;;;;;;;;;;:::o;44431:699::-;44505:6;;;;;;;;;;;44504:7;44496:25;;;;;;;;;;;;:::i;:::-;;;;;;;;;44550:2;44540:6;:12;;44532:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;43309:4;44602:6;44586:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:34;;44578:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;43309:4;44653:13;:11;:13::i;:::-;:24;44645:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;44748:19;44760:6;44748:11;:19::i;:::-;43506:42;44709:23;;;44733:10;44709:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;44701:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;43506:42;44808:26;;;44835:10;44855:4;44862:19;44874:6;44862:11;:19::i;:::-;44808:74;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44800:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;44927:15;44945;44927:33;;44985:6;44981:142;45001:6;44997:1;:10;44981:142;;;45057:10;45028:11;:26;45040:13;:11;:13::i;:::-;45028:26;;;;;;;;;;;:39;;;;45082:29;45092:3;45097:13;:11;:13::i;:::-;45082:9;:29::i;:::-;45009:3;;;;;:::i;:::-;;;;44981:142;;;;44485:645;44431:699;;:::o;24598:239::-;24670:7;24690:13;24706:7;:16;24714:7;24706:16;;;;;;;;;;;;;;;;;;;;;24690:32;;24758:1;24741:19;;:5;:19;;;;24733:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24824:5;24817:12;;;24598:239;;;:::o;24328:208::-;24400:7;24445:1;24428:19;;:5;:19;;;;24420:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24512:9;:16;24522:5;24512:16;;;;;;;;;;;;;;;;24505:23;;24328:208;;;:::o;2519:94::-;2099:12;:10;:12::i;:::-;2088:23;;:7;:5;:7::i;:::-;:23;;;2080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2584:21:::1;2602:1;2584:9;:21::i;:::-;2519:94::o:0;47285:117::-;2099:12;:10;:12::i;:::-;2088:23;;:7;:5;:7::i;:::-;:23;;;2080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43506:42:::1;47336:18;;;43506:42;47355:23;;;47387:4;47355:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47336:58;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;47285:117::o:0;46052:123::-;2099:12;:10;:12::i;:::-;2088:23;;:7;:5;:7::i;:::-;:23;;;2080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46127:10:::1;46119:24;;:47;46144:21;46119:47;;;;;;;;;;;;;;;;;;;;;;;46111:56;;;::::0;::::1;;46052:123::o:0;1868:87::-;1914:7;1941:6;;;;;;;;;;;1934:13;;1868:87;:::o;43464:85::-;43506:42;43464:85;:::o;25073:104::-;25129:13;25162:7;25155:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25073:104;:::o;26756:295::-;26871:12;:10;:12::i;:::-;26859:24;;:8;:24;;;;26851:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26971:8;26926:18;:32;26945:12;:10;:12::i;:::-;26926:32;;;;;;;;;;;;;;;:42;26959:8;26926:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27024:8;26995:48;;27010:12;:10;:12::i;:::-;26995:48;;;27034:8;26995:48;;;;;;:::i;:::-;;;;;;;;26756:295;;:::o;28019:328::-;28194:41;28213:12;:10;:12::i;:::-;28227:7;28194:18;:41::i;:::-;28186:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28300:39;28314:4;28320:2;28324:7;28333:5;28300:13;:39::i;:::-;28019:328;;;;:::o;25248:334::-;25321:13;25355:16;25363:7;25355;:16::i;:::-;25347:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;25436:21;25460:10;:8;:10::i;:::-;25436:34;;25512:1;25494:7;25488:21;:25;:86;;;;;;;;;;;;;;;;;25540:7;25549:18;:7;:16;:18::i;:::-;25523:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25488:86;25481:93;;;25248:334;;;:::o;46187:511::-;46249:7;46294:1;46276:20;;:6;:20;;;;46268:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;46338:15;46356:17;46366:6;46356:9;:17::i;:::-;46338:35;;46384:15;46402;46384:33;;46428:16;46463:6;46459:206;46479:10;46475:1;:14;46459:206;;;46510:21;46599:4;46548:11;:47;46560:34;46580:10;46592:1;46560:19;:34::i;:::-;46548:47;;;;;;;;;;;;46535:10;:60;;;;:::i;:::-;46534:69;;;;:::i;:::-;46510:93;;46640:13;46629:8;:24;;;;:::i;:::-;46618:35;;46495:170;46491:3;;;;;:::i;:::-;;;;46459:206;;;;46682:8;46675:15;;;;;46187:511;;;:::o;27122:164::-;27219:4;27243:18;:25;27262:5;27243:25;;;;;;;;;;;;;;;:35;27269:8;27243:35;;;;;;;;;;;;;;;;;;;;;;;;;27236:42;;27122:164;;;;:::o;2768:192::-;2099:12;:10;:12::i;:::-;2088:23;;:7;:5;:7::i;:::-;:23;;;2080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2877:1:::1;2857:22;;:8;:22;;;;2849:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2933:19;2943:8;2933:9;:19::i;:::-;2768:192:::0;:::o;13597:387::-;13657:4;13865:12;13932:7;13920:20;13912:28;;13975:1;13968:4;:8;13961:15;;;13597:387;;;:::o;35949:126::-;;;;:::o;23959:305::-;24061:4;24113:25;24098:40;;;:11;:40;;;;:105;;;;24170:33;24155:48;;;:11;:48;;;;24098:105;:158;;;;24220:36;24244:11;24220:23;:36::i;:::-;24098:158;24078:178;;23959:305;;;:::o;660:98::-;713:7;740:10;733:17;;660:98;:::o;29857:127::-;29922:4;29974:1;29946:30;;:7;:16;29954:7;29946:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29939:37;;29857:127;;;:::o;33839:174::-;33941:2;33914:15;:24;33930:7;33914:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33997:7;33993:2;33959:46;;33968:23;33983:7;33968:14;:23::i;:::-;33959:46;;;;;;;;;;;;33839:174;;:::o;30151:348::-;30244:4;30269:16;30277:7;30269;:16::i;:::-;30261:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30345:13;30361:23;30376:7;30361:14;:23::i;:::-;30345:39;;30414:5;30403:16;;:7;:16;;;:51;;;;30447:7;30423:31;;:20;30435:7;30423:11;:20::i;:::-;:31;;;30403:51;:87;;;;30458:32;30475:5;30482:7;30458:16;:32::i;:::-;30403:87;30395:96;;;30151:348;;;;:::o;33143:578::-;33302:4;33275:31;;:23;33290:7;33275:14;:23::i;:::-;:31;;;33267:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33385:1;33371:16;;:2;:16;;;;33363:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33441:39;33462:4;33468:2;33472:7;33441:20;:39::i;:::-;33545:29;33562:1;33566:7;33545:8;:29::i;:::-;33606:1;33587:9;:15;33597:4;33587:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33635:1;33618:9;:13;33628:2;33618:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33666:2;33647:7;:16;33655:7;33647:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33705:7;33701:2;33686:27;;33695:4;33686:27;;;;;;;;;;;;33143:578;;;:::o;30841:110::-;30917:26;30927:2;30931:7;30917:26;;;;;;;;;;;;:9;:26::i;:::-;30841:110;;:::o;2968:173::-;3024:16;3043:6;;;;;;;;;;;3024:25;;3069:8;3060:6;;:17;;;;;;;;;;;;;;;;;;3124:8;3093:40;;3114:8;3093:40;;;;;;;;;;;;3013:128;2968:173;:::o;29229:315::-;29386:28;29396:4;29402:2;29406:7;29386:9;:28::i;:::-;29433:48;29456:4;29462:2;29466:7;29475:5;29433:22;:48::i;:::-;29425:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29229:315;;;;:::o;45383:114::-;45443:13;45476;45469:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45383:114;:::o;11068:723::-;11124:13;11354:1;11345:5;:10;11341:53;;;11372:10;;;;;;;;;;;;;;;;;;;;;11341:53;11404:12;11419:5;11404:20;;11435:14;11460:78;11475:1;11467:4;:9;11460:78;;11493:8;;;;;:::i;:::-;;;;11524:2;11516:10;;;;;:::i;:::-;;;11460:78;;;11548:19;11580:6;11570:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11548:39;;11598:154;11614:1;11605:5;:10;11598:154;;11642:1;11632:11;;;;;:::i;:::-;;;11709:2;11701:5;:10;;;;:::i;:::-;11688:2;:24;;;;:::i;:::-;11675:39;;11658:6;11665;11658:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;11738:2;11729:11;;;;;:::i;:::-;;;11598:154;;;11776:6;11762:21;;;;;11068:723;;;;:::o;10593:157::-;10678:4;10717:25;10702:40;;;:11;:40;;;;10695:47;;10593:157;;;:::o;38746:589::-;38890:45;38917:4;38923:2;38927:7;38890:26;:45::i;:::-;38968:1;38952:18;;:4;:18;;;38948:187;;;38987:40;39019:7;38987:31;:40::i;:::-;38948:187;;;39057:2;39049:10;;:4;:10;;;39045:90;;39076:47;39109:4;39115:7;39076:32;:47::i;:::-;39045:90;38948:187;39163:1;39149:16;;:2;:16;;;39145:183;;;39182:45;39219:7;39182:36;:45::i;:::-;39145:183;;;39255:4;39249:10;;:2;:10;;;39245:83;;39276:40;39304:2;39308:7;39276:27;:40::i;:::-;39245:83;39145:183;38746:589;;;:::o;31178:321::-;31308:18;31314:2;31318:7;31308:5;:18::i;:::-;31359:54;31390:1;31394:2;31398:7;31407:5;31359:22;:54::i;:::-;31337:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31178:321;;;:::o;34578:799::-;34733:4;34754:15;:2;:13;;;:15::i;:::-;34750:620;;;34806:2;34790:36;;;34827:12;:10;:12::i;:::-;34841:4;34847:7;34856:5;34790:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34786:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35049:1;35032:6;:13;:18;35028:272;;;35075:60;;;;;;;;;;:::i;:::-;;;;;;;;35028:272;35250:6;35244:13;35235:6;35231:2;35227:15;35220:38;34786:529;34923:41;;;34913:51;;;:6;:51;;;;34906:58;;;;;34750:620;35354:4;35347:11;;34578:799;;;;;;;:::o;40058:164::-;40162:10;:17;;;;40135:15;:24;40151:7;40135:24;;;;;;;;;;;:44;;;;40190:10;40206:7;40190:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40058:164;:::o;40849:988::-;41115:22;41165:1;41140:22;41157:4;41140:16;:22::i;:::-;:26;;;;:::i;:::-;41115:51;;41177:18;41198:17;:26;41216:7;41198:26;;;;;;;;;;;;41177:47;;41345:14;41331:10;:28;41327:328;;41376:19;41398:12;:18;41411:4;41398:18;;;;;;;;;;;;;;;:34;41417:14;41398:34;;;;;;;;;;;;41376:56;;41482:11;41449:12;:18;41462:4;41449:18;;;;;;;;;;;;;;;:30;41468:10;41449:30;;;;;;;;;;;:44;;;;41599:10;41566:17;:30;41584:11;41566:30;;;;;;;;;;;:43;;;;41361:294;41327:328;41751:17;:26;41769:7;41751:26;;;;;;;;;;;41744:33;;;41795:12;:18;41808:4;41795:18;;;;;;;;;;;;;;;:34;41814:14;41795:34;;;;;;;;;;;41788:41;;;40930:907;;40849:988;;:::o;42132:1079::-;42385:22;42430:1;42410:10;:17;;;;:21;;;;:::i;:::-;42385:46;;42442:18;42463:15;:24;42479:7;42463:24;;;;;;;;;;;;42442:45;;42814:19;42836:10;42847:14;42836:26;;;;;;;;:::i;:::-;;;;;;;;;;42814:48;;42900:11;42875:10;42886;42875:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;43011:10;42980:15;:28;42996:11;42980:28;;;;;;;;;;;:41;;;;43152:15;:24;43168:7;43152:24;;;;;;;;;;;43145:31;;;43187:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42203:1008;;;42132:1079;:::o;39636:221::-;39721:14;39738:20;39755:2;39738:16;:20::i;:::-;39721:37;;39796:7;39769:12;:16;39782:2;39769:16;;;;;;;;;;;;;;;:24;39786:6;39769:24;;;;;;;;;;;:34;;;;39843:6;39814:17;:26;39832:7;39814:26;;;;;;;;;;;:35;;;;39710:147;39636:221;;:::o;31835:382::-;31929:1;31915:16;;:2;:16;;;;31907:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31988:16;31996:7;31988;:16::i;:::-;31987:17;31979:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32050:45;32079:1;32083:2;32087:7;32050:20;:45::i;:::-;32125:1;32108:9;:13;32118:2;32108:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32156:2;32137:7;:16;32145:7;32137:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32201:7;32197:2;32176:33;;32193:1;32176:33;;;;;;;;;;;;31835:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1179:5;1210:6;1204:13;1195:22;;1226:30;1250:5;1226:30;:::i;:::-;1125:137;;;;:::o;1268:::-;1313:5;1351:6;1338:20;1329:29;;1367:32;1393:5;1367:32;:::i;:::-;1268:137;;;;:::o;1411:141::-;1467:5;1498:6;1492:13;1483:22;;1514:32;1540:5;1514:32;:::i;:::-;1411:141;;;;:::o;1571:338::-;1626:5;1675:3;1668:4;1660:6;1656:17;1652:27;1642:122;;1683:79;;:::i;:::-;1642:122;1800:6;1787:20;1825:78;1899:3;1891:6;1884:4;1876:6;1872:17;1825:78;:::i;:::-;1816:87;;1632:277;1571:338;;;;:::o;1929:340::-;1985:5;2034:3;2027:4;2019:6;2015:17;2011:27;2001:122;;2042:79;;:::i;:::-;2001:122;2159:6;2146:20;2184:79;2259:3;2251:6;2244:4;2236:6;2232:17;2184:79;:::i;:::-;2175:88;;1991:278;1929:340;;;;:::o;2275:139::-;2321:5;2359:6;2346:20;2337:29;;2375:33;2402:5;2375:33;:::i;:::-;2275:139;;;;:::o;2420:143::-;2477:5;2508:6;2502:13;2493:22;;2524:33;2551:5;2524:33;:::i;:::-;2420:143;;;;:::o;2569:329::-;2628:6;2677:2;2665:9;2656:7;2652:23;2648:32;2645:119;;;2683:79;;:::i;:::-;2645:119;2803:1;2828:53;2873:7;2864:6;2853:9;2849:22;2828:53;:::i;:::-;2818:63;;2774:117;2569:329;;;;:::o;2904:474::-;2972:6;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;2904:474;;;;;:::o;3384:619::-;3461:6;3469;3477;3526:2;3514:9;3505:7;3501:23;3497:32;3494:119;;;3532:79;;:::i;:::-;3494:119;3652:1;3677:53;3722:7;3713:6;3702:9;3698:22;3677:53;:::i;:::-;3667:63;;3623:117;3779:2;3805:53;3850:7;3841:6;3830:9;3826:22;3805:53;:::i;:::-;3795:63;;3750:118;3907:2;3933:53;3978:7;3969:6;3958:9;3954:22;3933:53;:::i;:::-;3923:63;;3878:118;3384:619;;;;;:::o;4009:943::-;4104:6;4112;4120;4128;4177:3;4165:9;4156:7;4152:23;4148:33;4145:120;;;4184:79;;:::i;:::-;4145:120;4304:1;4329:53;4374:7;4365:6;4354:9;4350:22;4329:53;:::i;:::-;4319:63;;4275:117;4431:2;4457:53;4502:7;4493:6;4482:9;4478:22;4457:53;:::i;:::-;4447:63;;4402:118;4559:2;4585:53;4630:7;4621:6;4610:9;4606:22;4585:53;:::i;:::-;4575:63;;4530:118;4715:2;4704:9;4700:18;4687:32;4746:18;4738:6;4735:30;4732:117;;;4768:79;;:::i;:::-;4732:117;4873:62;4927:7;4918:6;4907:9;4903:22;4873:62;:::i;:::-;4863:72;;4658:287;4009:943;;;;;;;:::o;4958:468::-;5023:6;5031;5080:2;5068:9;5059:7;5055:23;5051:32;5048:119;;;5086:79;;:::i;:::-;5048:119;5206:1;5231:53;5276:7;5267:6;5256:9;5252:22;5231:53;:::i;:::-;5221:63;;5177:117;5333:2;5359:50;5401:7;5392:6;5381:9;5377:22;5359:50;:::i;:::-;5349:60;;5304:115;4958:468;;;;;:::o;5432:474::-;5500:6;5508;5557:2;5545:9;5536:7;5532:23;5528:32;5525:119;;;5563:79;;:::i;:::-;5525:119;5683:1;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5654:117;5810:2;5836:53;5881:7;5872:6;5861:9;5857:22;5836:53;:::i;:::-;5826:63;;5781:118;5432:474;;;;;:::o;5912:323::-;5968:6;6017:2;6005:9;5996:7;5992:23;5988:32;5985:119;;;6023:79;;:::i;:::-;5985:119;6143:1;6168:50;6210:7;6201:6;6190:9;6186:22;6168:50;:::i;:::-;6158:60;;6114:114;5912:323;;;;:::o;6241:345::-;6308:6;6357:2;6345:9;6336:7;6332:23;6328:32;6325:119;;;6363:79;;:::i;:::-;6325:119;6483:1;6508:61;6561:7;6552:6;6541:9;6537:22;6508:61;:::i;:::-;6498:71;;6454:125;6241:345;;;;:::o;6592:327::-;6650:6;6699:2;6687:9;6678:7;6674:23;6670:32;6667:119;;;6705:79;;:::i;:::-;6667:119;6825:1;6850:52;6894:7;6885:6;6874:9;6870:22;6850:52;:::i;:::-;6840:62;;6796:116;6592:327;;;;:::o;6925:349::-;6994:6;7043:2;7031:9;7022:7;7018:23;7014:32;7011:119;;;7049:79;;:::i;:::-;7011:119;7169:1;7194:63;7249:7;7240:6;7229:9;7225:22;7194:63;:::i;:::-;7184:73;;7140:127;6925:349;;;;:::o;7280:509::-;7349:6;7398:2;7386:9;7377:7;7373:23;7369:32;7366:119;;;7404:79;;:::i;:::-;7366:119;7552:1;7541:9;7537:17;7524:31;7582:18;7574:6;7571:30;7568:117;;;7604:79;;:::i;:::-;7568:117;7709:63;7764:7;7755:6;7744:9;7740:22;7709:63;:::i;:::-;7699:73;;7495:287;7280:509;;;;:::o;7795:329::-;7854:6;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;7795:329;;;;:::o;8130:351::-;8200:6;8249:2;8237:9;8228:7;8224:23;8220:32;8217:119;;;8255:79;;:::i;:::-;8217:119;8375:1;8400:64;8456:7;8447:6;8436:9;8432:22;8400:64;:::i;:::-;8390:74;;8346:128;8130:351;;;;:::o;8487:179::-;8556:10;8577:46;8619:3;8611:6;8577:46;:::i;:::-;8655:4;8650:3;8646:14;8632:28;;8487:179;;;;:::o;8672:118::-;8759:24;8777:5;8759:24;:::i;:::-;8754:3;8747:37;8672:118;;:::o;8826:732::-;8945:3;8974:54;9022:5;8974:54;:::i;:::-;9044:86;9123:6;9118:3;9044:86;:::i;:::-;9037:93;;9154:56;9204:5;9154:56;:::i;:::-;9233:7;9264:1;9249:284;9274:6;9271:1;9268:13;9249:284;;;9350:6;9344:13;9377:63;9436:3;9421:13;9377:63;:::i;:::-;9370:70;;9463:60;9516:6;9463:60;:::i;:::-;9453:70;;9309:224;9296:1;9293;9289:9;9284:14;;9249:284;;;9253:14;9549:3;9542:10;;8950:608;;;8826:732;;;;:::o;9564:109::-;9645:21;9660:5;9645:21;:::i;:::-;9640:3;9633:34;9564:109;;:::o;9679:360::-;9765:3;9793:38;9825:5;9793:38;:::i;:::-;9847:70;9910:6;9905:3;9847:70;:::i;:::-;9840:77;;9926:52;9971:6;9966:3;9959:4;9952:5;9948:16;9926:52;:::i;:::-;10003:29;10025:6;10003:29;:::i;:::-;9998:3;9994:39;9987:46;;9769:270;9679:360;;;;:::o;10045:157::-;10145:50;10189:5;10145:50;:::i;:::-;10140:3;10133:63;10045:157;;:::o;10208:364::-;10296:3;10324:39;10357:5;10324:39;:::i;:::-;10379:71;10443:6;10438:3;10379:71;:::i;:::-;10372:78;;10459:52;10504:6;10499:3;10492:4;10485:5;10481:16;10459:52;:::i;:::-;10536:29;10558:6;10536:29;:::i;:::-;10531:3;10527:39;10520:46;;10300:272;10208:364;;;;:::o;10578:377::-;10684:3;10712:39;10745:5;10712:39;:::i;:::-;10767:89;10849:6;10844:3;10767:89;:::i;:::-;10760:96;;10865:52;10910:6;10905:3;10898:4;10891:5;10887:16;10865:52;:::i;:::-;10942:6;10937:3;10933:16;10926:23;;10688:267;10578:377;;;;:::o;10961:366::-;11103:3;11124:67;11188:2;11183:3;11124:67;:::i;:::-;11117:74;;11200:93;11289:3;11200:93;:::i;:::-;11318:2;11313:3;11309:12;11302:19;;10961:366;;;:::o;11333:::-;11475:3;11496:67;11560:2;11555:3;11496:67;:::i;:::-;11489:74;;11572:93;11661:3;11572:93;:::i;:::-;11690:2;11685:3;11681:12;11674:19;;11333:366;;;:::o;11705:::-;11847:3;11868:67;11932:2;11927:3;11868:67;:::i;:::-;11861:74;;11944:93;12033:3;11944:93;:::i;:::-;12062:2;12057:3;12053:12;12046:19;;11705:366;;;:::o;12077:::-;12219:3;12240:67;12304:2;12299:3;12240:67;:::i;:::-;12233:74;;12316:93;12405:3;12316:93;:::i;:::-;12434:2;12429:3;12425:12;12418:19;;12077:366;;;:::o;12449:::-;12591:3;12612:67;12676:2;12671:3;12612:67;:::i;:::-;12605:74;;12688:93;12777:3;12688:93;:::i;:::-;12806:2;12801:3;12797:12;12790:19;;12449:366;;;:::o;12821:::-;12963:3;12984:67;13048:2;13043:3;12984:67;:::i;:::-;12977:74;;13060:93;13149:3;13060:93;:::i;:::-;13178:2;13173:3;13169:12;13162:19;;12821:366;;;:::o;13193:::-;13335:3;13356:67;13420:2;13415:3;13356:67;:::i;:::-;13349:74;;13432:93;13521:3;13432:93;:::i;:::-;13550:2;13545:3;13541:12;13534:19;;13193:366;;;:::o;13565:365::-;13707:3;13728:66;13792:1;13787:3;13728:66;:::i;:::-;13721:73;;13803:93;13892:3;13803:93;:::i;:::-;13921:2;13916:3;13912:12;13905:19;;13565:365;;;:::o;13936:366::-;14078:3;14099:67;14163:2;14158:3;14099:67;:::i;:::-;14092:74;;14175:93;14264:3;14175:93;:::i;:::-;14293:2;14288:3;14284:12;14277:19;;13936:366;;;:::o;14308:365::-;14450:3;14471:66;14535:1;14530:3;14471:66;:::i;:::-;14464:73;;14546:93;14635:3;14546:93;:::i;:::-;14664:2;14659:3;14655:12;14648:19;;14308:365;;;:::o;14679:366::-;14821:3;14842:67;14906:2;14901:3;14842:67;:::i;:::-;14835:74;;14918:93;15007:3;14918:93;:::i;:::-;15036:2;15031:3;15027:12;15020:19;;14679:366;;;:::o;15051:::-;15193:3;15214:67;15278:2;15273:3;15214:67;:::i;:::-;15207:74;;15290:93;15379:3;15290:93;:::i;:::-;15408:2;15403:3;15399:12;15392:19;;15051:366;;;:::o;15423:::-;15565:3;15586:67;15650:2;15645:3;15586:67;:::i;:::-;15579:74;;15662:93;15751:3;15662:93;:::i;:::-;15780:2;15775:3;15771:12;15764:19;;15423:366;;;:::o;15795:::-;15937:3;15958:67;16022:2;16017:3;15958:67;:::i;:::-;15951:74;;16034:93;16123:3;16034:93;:::i;:::-;16152:2;16147:3;16143:12;16136:19;;15795:366;;;:::o;16167:::-;16309:3;16330:67;16394:2;16389:3;16330:67;:::i;:::-;16323:74;;16406:93;16495:3;16406:93;:::i;:::-;16524:2;16519:3;16515:12;16508:19;;16167:366;;;:::o;16539:365::-;16681:3;16702:66;16766:1;16761:3;16702:66;:::i;:::-;16695:73;;16777:93;16866:3;16777:93;:::i;:::-;16895:2;16890:3;16886:12;16879:19;;16539:365;;;:::o;16910:366::-;17052:3;17073:67;17137:2;17132:3;17073:67;:::i;:::-;17066:74;;17149:93;17238:3;17149:93;:::i;:::-;17267:2;17262:3;17258:12;17251:19;;16910:366;;;:::o;17282:::-;17424:3;17445:67;17509:2;17504:3;17445:67;:::i;:::-;17438:74;;17521:93;17610:3;17521:93;:::i;:::-;17639:2;17634:3;17630:12;17623:19;;17282:366;;;:::o;17654:::-;17796:3;17817:67;17881:2;17876:3;17817:67;:::i;:::-;17810:74;;17893:93;17982:3;17893:93;:::i;:::-;18011:2;18006:3;18002:12;17995:19;;17654:366;;;:::o;18026:::-;18168:3;18189:67;18253:2;18248:3;18189:67;:::i;:::-;18182:74;;18265:93;18354:3;18265:93;:::i;:::-;18383:2;18378:3;18374:12;18367:19;;18026:366;;;:::o;18398:::-;18540:3;18561:67;18625:2;18620:3;18561:67;:::i;:::-;18554:74;;18637:93;18726:3;18637:93;:::i;:::-;18755:2;18750:3;18746:12;18739:19;;18398:366;;;:::o;18770:::-;18912:3;18933:67;18997:2;18992:3;18933:67;:::i;:::-;18926:74;;19009:93;19098:3;19009:93;:::i;:::-;19127:2;19122:3;19118:12;19111:19;;18770:366;;;:::o;19142:::-;19284:3;19305:67;19369:2;19364:3;19305:67;:::i;:::-;19298:74;;19381:93;19470:3;19381:93;:::i;:::-;19499:2;19494:3;19490:12;19483:19;;19142:366;;;:::o;19514:::-;19656:3;19677:67;19741:2;19736:3;19677:67;:::i;:::-;19670:74;;19753:93;19842:3;19753:93;:::i;:::-;19871:2;19866:3;19862:12;19855:19;;19514:366;;;:::o;19886:::-;20028:3;20049:67;20113:2;20108:3;20049:67;:::i;:::-;20042:74;;20125:93;20214:3;20125:93;:::i;:::-;20243:2;20238:3;20234:12;20227:19;;19886:366;;;:::o;20258:108::-;20335:24;20353:5;20335:24;:::i;:::-;20330:3;20323:37;20258:108;;:::o;20372:118::-;20459:24;20477:5;20459:24;:::i;:::-;20454:3;20447:37;20372:118;;:::o;20496:435::-;20676:3;20698:95;20789:3;20780:6;20698:95;:::i;:::-;20691:102;;20810:95;20901:3;20892:6;20810:95;:::i;:::-;20803:102;;20922:3;20915:10;;20496:435;;;;;:::o;20937:222::-;21030:4;21068:2;21057:9;21053:18;21045:26;;21081:71;21149:1;21138:9;21134:17;21125:6;21081:71;:::i;:::-;20937:222;;;;:::o;21165:442::-;21314:4;21352:2;21341:9;21337:18;21329:26;;21365:71;21433:1;21422:9;21418:17;21409:6;21365:71;:::i;:::-;21446:72;21514:2;21503:9;21499:18;21490:6;21446:72;:::i;:::-;21528;21596:2;21585:9;21581:18;21572:6;21528:72;:::i;:::-;21165:442;;;;;;:::o;21613:640::-;21808:4;21846:3;21835:9;21831:19;21823:27;;21860:71;21928:1;21917:9;21913:17;21904:6;21860:71;:::i;:::-;21941:72;22009:2;21998:9;21994:18;21985:6;21941:72;:::i;:::-;22023;22091:2;22080:9;22076:18;22067:6;22023:72;:::i;:::-;22142:9;22136:4;22132:20;22127:2;22116:9;22112:18;22105:48;22170:76;22241:4;22232:6;22170:76;:::i;:::-;22162:84;;21613:640;;;;;;;:::o;22259:332::-;22380:4;22418:2;22407:9;22403:18;22395:26;;22431:71;22499:1;22488:9;22484:17;22475:6;22431:71;:::i;:::-;22512:72;22580:2;22569:9;22565:18;22556:6;22512:72;:::i;:::-;22259:332;;;;;:::o;22597:373::-;22740:4;22778:2;22767:9;22763:18;22755:26;;22827:9;22821:4;22817:20;22813:1;22802:9;22798:17;22791:47;22855:108;22958:4;22949:6;22855:108;:::i;:::-;22847:116;;22597:373;;;;:::o;22976:210::-;23063:4;23101:2;23090:9;23086:18;23078:26;;23114:65;23176:1;23165:9;23161:17;23152:6;23114:65;:::i;:::-;22976:210;;;;:::o;23192:248::-;23298:4;23336:2;23325:9;23321:18;23313:26;;23349:84;23430:1;23419:9;23415:17;23406:6;23349:84;:::i;:::-;23192:248;;;;:::o;23446:313::-;23559:4;23597:2;23586:9;23582:18;23574:26;;23646:9;23640:4;23636:20;23632:1;23621:9;23617:17;23610:47;23674:78;23747:4;23738:6;23674:78;:::i;:::-;23666:86;;23446:313;;;;:::o;23765:419::-;23931:4;23969:2;23958:9;23954:18;23946:26;;24018:9;24012:4;24008:20;24004:1;23993:9;23989:17;23982:47;24046:131;24172:4;24046:131;:::i;:::-;24038:139;;23765:419;;;:::o;24190:::-;24356:4;24394:2;24383:9;24379:18;24371:26;;24443:9;24437:4;24433:20;24429:1;24418:9;24414:17;24407:47;24471:131;24597:4;24471:131;:::i;:::-;24463:139;;24190:419;;;:::o;24615:::-;24781:4;24819:2;24808:9;24804:18;24796:26;;24868:9;24862:4;24858:20;24854:1;24843:9;24839:17;24832:47;24896:131;25022:4;24896:131;:::i;:::-;24888:139;;24615:419;;;:::o;25040:::-;25206:4;25244:2;25233:9;25229:18;25221:26;;25293:9;25287:4;25283:20;25279:1;25268:9;25264:17;25257:47;25321:131;25447:4;25321:131;:::i;:::-;25313:139;;25040:419;;;:::o;25465:::-;25631:4;25669:2;25658:9;25654:18;25646:26;;25718:9;25712:4;25708:20;25704:1;25693:9;25689:17;25682:47;25746:131;25872:4;25746:131;:::i;:::-;25738:139;;25465:419;;;:::o;25890:::-;26056:4;26094:2;26083:9;26079:18;26071:26;;26143:9;26137:4;26133:20;26129:1;26118:9;26114:17;26107:47;26171:131;26297:4;26171:131;:::i;:::-;26163:139;;25890:419;;;:::o;26315:::-;26481:4;26519:2;26508:9;26504:18;26496:26;;26568:9;26562:4;26558:20;26554:1;26543:9;26539:17;26532:47;26596:131;26722:4;26596:131;:::i;:::-;26588:139;;26315:419;;;:::o;26740:::-;26906:4;26944:2;26933:9;26929:18;26921:26;;26993:9;26987:4;26983:20;26979:1;26968:9;26964:17;26957:47;27021:131;27147:4;27021:131;:::i;:::-;27013:139;;26740:419;;;:::o;27165:::-;27331:4;27369:2;27358:9;27354:18;27346:26;;27418:9;27412:4;27408:20;27404:1;27393:9;27389:17;27382:47;27446:131;27572:4;27446:131;:::i;:::-;27438:139;;27165:419;;;:::o;27590:::-;27756:4;27794:2;27783:9;27779:18;27771:26;;27843:9;27837:4;27833:20;27829:1;27818:9;27814:17;27807:47;27871:131;27997:4;27871:131;:::i;:::-;27863:139;;27590:419;;;:::o;28015:::-;28181:4;28219:2;28208:9;28204:18;28196:26;;28268:9;28262:4;28258:20;28254:1;28243:9;28239:17;28232:47;28296:131;28422:4;28296:131;:::i;:::-;28288:139;;28015:419;;;:::o;28440:::-;28606:4;28644:2;28633:9;28629:18;28621:26;;28693:9;28687:4;28683:20;28679:1;28668:9;28664:17;28657:47;28721:131;28847:4;28721:131;:::i;:::-;28713:139;;28440:419;;;:::o;28865:::-;29031:4;29069:2;29058:9;29054:18;29046:26;;29118:9;29112:4;29108:20;29104:1;29093:9;29089:17;29082:47;29146:131;29272:4;29146:131;:::i;:::-;29138:139;;28865:419;;;:::o;29290:::-;29456:4;29494:2;29483:9;29479:18;29471:26;;29543:9;29537:4;29533:20;29529:1;29518:9;29514:17;29507:47;29571:131;29697:4;29571:131;:::i;:::-;29563:139;;29290:419;;;:::o;29715:::-;29881:4;29919:2;29908:9;29904:18;29896:26;;29968:9;29962:4;29958:20;29954:1;29943:9;29939:17;29932:47;29996:131;30122:4;29996:131;:::i;:::-;29988:139;;29715:419;;;:::o;30140:::-;30306:4;30344:2;30333:9;30329:18;30321:26;;30393:9;30387:4;30383:20;30379:1;30368:9;30364:17;30357:47;30421:131;30547:4;30421:131;:::i;:::-;30413:139;;30140:419;;;:::o;30565:::-;30731:4;30769:2;30758:9;30754:18;30746:26;;30818:9;30812:4;30808:20;30804:1;30793:9;30789:17;30782:47;30846:131;30972:4;30846:131;:::i;:::-;30838:139;;30565:419;;;:::o;30990:::-;31156:4;31194:2;31183:9;31179:18;31171:26;;31243:9;31237:4;31233:20;31229:1;31218:9;31214:17;31207:47;31271:131;31397:4;31271:131;:::i;:::-;31263:139;;30990:419;;;:::o;31415:::-;31581:4;31619:2;31608:9;31604:18;31596:26;;31668:9;31662:4;31658:20;31654:1;31643:9;31639:17;31632:47;31696:131;31822:4;31696:131;:::i;:::-;31688:139;;31415:419;;;:::o;31840:::-;32006:4;32044:2;32033:9;32029:18;32021:26;;32093:9;32087:4;32083:20;32079:1;32068:9;32064:17;32057:47;32121:131;32247:4;32121:131;:::i;:::-;32113:139;;31840:419;;;:::o;32265:::-;32431:4;32469:2;32458:9;32454:18;32446:26;;32518:9;32512:4;32508:20;32504:1;32493:9;32489:17;32482:47;32546:131;32672:4;32546:131;:::i;:::-;32538:139;;32265:419;;;:::o;32690:::-;32856:4;32894:2;32883:9;32879:18;32871:26;;32943:9;32937:4;32933:20;32929:1;32918:9;32914:17;32907:47;32971:131;33097:4;32971:131;:::i;:::-;32963:139;;32690:419;;;:::o;33115:::-;33281:4;33319:2;33308:9;33304:18;33296:26;;33368:9;33362:4;33358:20;33354:1;33343:9;33339:17;33332:47;33396:131;33522:4;33396:131;:::i;:::-;33388:139;;33115:419;;;:::o;33540:::-;33706:4;33744:2;33733:9;33729:18;33721:26;;33793:9;33787:4;33783:20;33779:1;33768:9;33764:17;33757:47;33821:131;33947:4;33821:131;:::i;:::-;33813:139;;33540:419;;;:::o;33965:::-;34131:4;34169:2;34158:9;34154:18;34146:26;;34218:9;34212:4;34208:20;34204:1;34193:9;34189:17;34182:47;34246:131;34372:4;34246:131;:::i;:::-;34238:139;;33965:419;;;:::o;34390:222::-;34483:4;34521:2;34510:9;34506:18;34498:26;;34534:71;34602:1;34591:9;34587:17;34578:6;34534:71;:::i;:::-;34390:222;;;;:::o;34618:129::-;34652:6;34679:20;;:::i;:::-;34669:30;;34708:33;34736:4;34728:6;34708:33;:::i;:::-;34618:129;;;:::o;34753:75::-;34786:6;34819:2;34813:9;34803:19;;34753:75;:::o;34834:307::-;34895:4;34985:18;34977:6;34974:30;34971:56;;;35007:18;;:::i;:::-;34971:56;35045:29;35067:6;35045:29;:::i;:::-;35037:37;;35129:4;35123;35119:15;35111:23;;34834:307;;;:::o;35147:308::-;35209:4;35299:18;35291:6;35288:30;35285:56;;;35321:18;;:::i;:::-;35285:56;35359:29;35381:6;35359:29;:::i;:::-;35351:37;;35443:4;35437;35433:15;35425:23;;35147:308;;;:::o;35461:132::-;35528:4;35551:3;35543:11;;35581:4;35576:3;35572:14;35564:22;;35461:132;;;:::o;35599:114::-;35666:6;35700:5;35694:12;35684:22;;35599:114;;;:::o;35719:98::-;35770:6;35804:5;35798:12;35788:22;;35719:98;;;:::o;35823:99::-;35875:6;35909:5;35903:12;35893:22;;35823:99;;;:::o;35928:113::-;35998:4;36030;36025:3;36021:14;36013:22;;35928:113;;;:::o;36047:184::-;36146:11;36180:6;36175:3;36168:19;36220:4;36215:3;36211:14;36196:29;;36047:184;;;;:::o;36237:168::-;36320:11;36354:6;36349:3;36342:19;36394:4;36389:3;36385:14;36370:29;;36237:168;;;;:::o;36411:169::-;36495:11;36529:6;36524:3;36517:19;36569:4;36564:3;36560:14;36545:29;;36411:169;;;;:::o;36586:148::-;36688:11;36725:3;36710:18;;36586:148;;;;:::o;36740:305::-;36780:3;36799:20;36817:1;36799:20;:::i;:::-;36794:25;;36833:20;36851:1;36833:20;:::i;:::-;36828:25;;36987:1;36919:66;36915:74;36912:1;36909:81;36906:107;;;36993:18;;:::i;:::-;36906:107;37037:1;37034;37030:9;37023:16;;36740:305;;;;:::o;37051:185::-;37091:1;37108:20;37126:1;37108:20;:::i;:::-;37103:25;;37142:20;37160:1;37142:20;:::i;:::-;37137:25;;37181:1;37171:35;;37186:18;;:::i;:::-;37171:35;37228:1;37225;37221:9;37216:14;;37051:185;;;;:::o;37242:348::-;37282:7;37305:20;37323:1;37305:20;:::i;:::-;37300:25;;37339:20;37357:1;37339:20;:::i;:::-;37334:25;;37527:1;37459:66;37455:74;37452:1;37449:81;37444:1;37437:9;37430:17;37426:105;37423:131;;;37534:18;;:::i;:::-;37423:131;37582:1;37579;37575:9;37564:20;;37242:348;;;;:::o;37596:191::-;37636:4;37656:20;37674:1;37656:20;:::i;:::-;37651:25;;37690:20;37708:1;37690:20;:::i;:::-;37685:25;;37729:1;37726;37723:8;37720:34;;;37734:18;;:::i;:::-;37720:34;37779:1;37776;37772:9;37764:17;;37596:191;;;;:::o;37793:96::-;37830:7;37859:24;37877:5;37859:24;:::i;:::-;37848:35;;37793:96;;;:::o;37895:90::-;37929:7;37972:5;37965:13;37958:21;37947:32;;37895:90;;;:::o;37991:149::-;38027:7;38067:66;38060:5;38056:78;38045:89;;37991:149;;;:::o;38146:126::-;38183:7;38223:42;38216:5;38212:54;38201:65;;38146:126;;;:::o;38278:77::-;38315:7;38344:5;38333:16;;38278:77;;;:::o;38361:139::-;38424:9;38457:37;38488:5;38457:37;:::i;:::-;38444:50;;38361:139;;;:::o;38506:126::-;38556:9;38589:37;38620:5;38589:37;:::i;:::-;38576:50;;38506:126;;;:::o;38638:113::-;38688:9;38721:24;38739:5;38721:24;:::i;:::-;38708:37;;38638:113;;;:::o;38757:154::-;38841:6;38836:3;38831;38818:30;38903:1;38894:6;38889:3;38885:16;38878:27;38757:154;;;:::o;38917:307::-;38985:1;38995:113;39009:6;39006:1;39003:13;38995:113;;;39094:1;39089:3;39085:11;39079:18;39075:1;39070:3;39066:11;39059:39;39031:2;39028:1;39024:10;39019:15;;38995:113;;;39126:6;39123:1;39120:13;39117:101;;;39206:1;39197:6;39192:3;39188:16;39181:27;39117:101;38966:258;38917:307;;;:::o;39230:320::-;39274:6;39311:1;39305:4;39301:12;39291:22;;39358:1;39352:4;39348:12;39379:18;39369:81;;39435:4;39427:6;39423:17;39413:27;;39369:81;39497:2;39489:6;39486:14;39466:18;39463:38;39460:84;;;39516:18;;:::i;:::-;39460:84;39281:269;39230:320;;;:::o;39556:281::-;39639:27;39661:4;39639:27;:::i;:::-;39631:6;39627:40;39769:6;39757:10;39754:22;39733:18;39721:10;39718:34;39715:62;39712:88;;;39780:18;;:::i;:::-;39712:88;39820:10;39816:2;39809:22;39599:238;39556:281;;:::o;39843:233::-;39882:3;39905:24;39923:5;39905:24;:::i;:::-;39896:33;;39951:66;39944:5;39941:77;39938:103;;;40021:18;;:::i;:::-;39938:103;40068:1;40061:5;40057:13;40050:20;;39843:233;;;:::o;40082:176::-;40114:1;40131:20;40149:1;40131:20;:::i;:::-;40126:25;;40165:20;40183:1;40165:20;:::i;:::-;40160:25;;40204:1;40194:35;;40209:18;;:::i;:::-;40194:35;40250:1;40247;40243:9;40238:14;;40082:176;;;;:::o;40264:180::-;40312:77;40309:1;40302:88;40409:4;40406:1;40399:15;40433:4;40430:1;40423:15;40450:180;40498:77;40495:1;40488:88;40595:4;40592:1;40585:15;40619:4;40616:1;40609:15;40636:180;40684:77;40681:1;40674:88;40781:4;40778:1;40771:15;40805:4;40802:1;40795:15;40822:180;40870:77;40867:1;40860:88;40967:4;40964:1;40957:15;40991:4;40988:1;40981:15;41008:180;41056:77;41053:1;41046:88;41153:4;41150:1;41143:15;41177:4;41174:1;41167:15;41194:180;41242:77;41239:1;41232:88;41339:4;41336:1;41329:15;41363:4;41360:1;41353:15;41380:117;41489:1;41486;41479:12;41503:117;41612:1;41609;41602:12;41626:117;41735:1;41732;41725:12;41749:117;41858:1;41855;41848:12;41872:102;41913:6;41964:2;41960:7;41955:2;41948:5;41944:14;41940:28;41930:38;;41872:102;;;:::o;41980:230::-;42120:34;42116:1;42108:6;42104:14;42097:58;42189:13;42184:2;42176:6;42172:15;42165:38;41980:230;:::o;42216:237::-;42356:34;42352:1;42344:6;42340:14;42333:58;42425:20;42420:2;42412:6;42408:15;42401:45;42216:237;:::o;42459:225::-;42599:34;42595:1;42587:6;42583:14;42576:58;42668:8;42663:2;42655:6;42651:15;42644:33;42459:225;:::o;42690:178::-;42830:30;42826:1;42818:6;42814:14;42807:54;42690:178;:::o;42874:169::-;43014:21;43010:1;43002:6;42998:14;42991:45;42874:169;:::o;43049:223::-;43189:34;43185:1;43177:6;43173:14;43166:58;43258:6;43253:2;43245:6;43241:15;43234:31;43049:223;:::o;43278:175::-;43418:27;43414:1;43406:6;43402:14;43395:51;43278:175;:::o;43459:155::-;43599:7;43595:1;43587:6;43583:14;43576:31;43459:155;:::o;43620:176::-;43760:28;43756:1;43748:6;43744:14;43737:52;43620:176;:::o;43802:159::-;43942:11;43938:1;43930:6;43926:14;43919:35;43802:159;:::o;43967:231::-;44107:34;44103:1;44095:6;44091:14;44084:58;44176:14;44171:2;44163:6;44159:15;44152:39;43967:231;:::o;44204:243::-;44344:34;44340:1;44332:6;44328:14;44321:58;44413:26;44408:2;44400:6;44396:15;44389:51;44204:243;:::o;44453:229::-;44593:34;44589:1;44581:6;44577:14;44570:58;44662:12;44657:2;44649:6;44645:15;44638:37;44453:229;:::o;44688:228::-;44828:34;44824:1;44816:6;44812:14;44805:58;44897:11;44892:2;44884:6;44880:15;44873:36;44688:228;:::o;44922:182::-;45062:34;45058:1;45050:6;45046:14;45039:58;44922:182;:::o;45110:158::-;45250:10;45246:1;45238:6;45234:14;45227:34;45110:158;:::o;45274:231::-;45414:34;45410:1;45402:6;45398:14;45391:58;45483:14;45478:2;45470:6;45466:15;45459:39;45274:231;:::o;45511:182::-;45651:34;45647:1;45639:6;45635:14;45628:58;45511:182;:::o;45699:228::-;45839:34;45835:1;45827:6;45823:14;45816:58;45908:11;45903:2;45895:6;45891:15;45884:36;45699:228;:::o;45933:234::-;46073:34;46069:1;46061:6;46057:14;46050:58;46142:17;46137:2;46129:6;46125:15;46118:42;45933:234;:::o;46173:167::-;46313:19;46309:1;46301:6;46297:14;46290:43;46173:167;:::o;46346:220::-;46486:34;46482:1;46474:6;46470:14;46463:58;46555:3;46550:2;46542:6;46538:15;46531:28;46346:220;:::o;46572:160::-;46712:12;46708:1;46700:6;46696:14;46689:36;46572:160;:::o;46738:236::-;46878:34;46874:1;46866:6;46862:14;46855:58;46947:19;46942:2;46934:6;46930:15;46923:44;46738:236;:::o;46980:231::-;47120:34;47116:1;47108:6;47104:14;47097:58;47189:14;47184:2;47176:6;47172:15;47165:39;46980:231;:::o;47217:122::-;47290:24;47308:5;47290:24;:::i;:::-;47283:5;47280:35;47270:63;;47329:1;47326;47319:12;47270:63;47217:122;:::o;47345:116::-;47415:21;47430:5;47415:21;:::i;:::-;47408:5;47405:32;47395:60;;47451:1;47448;47441:12;47395:60;47345:116;:::o;47467:120::-;47539:23;47556:5;47539:23;:::i;:::-;47532:5;47529:34;47519:62;;47577:1;47574;47567:12;47519:62;47467:120;:::o;47593:122::-;47666:24;47684:5;47666:24;:::i;:::-;47659:5;47656:35;47646:63;;47705:1;47702;47695:12;47646:63;47593:122;:::o

Swarm Source

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