ETH Price: $3,223.17 (-2.08%)

Token

Spooky Brat fractional NFT (Fractional NFT)
 

Overview

Max Total Supply

534 Fractional NFT

Holders

38

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
lutao.eth
Balance
2 Fractional NFT
0x02f1625751308dd98e4897c7ee68225eac3145f4
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:
initialNFT

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 2022-07-27
*/

// SPDX-License-Identifier: MIT




// OpenZeppelin Contracts v4.4.0 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}


























// OpenZeppelin Contracts v4.4.0 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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










// OpenZeppelin Contracts v4.4.0 (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;
//    function createNewToken(address _to,uint256 _id) external;

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

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








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









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

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

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









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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

pragma solidity ^0.8.0;

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

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
















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

pragma solidity ^0.8.0;

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

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

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

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

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





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

pragma solidity ^0.8.0;


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



// OpenZeppelin Contracts v4.4.0 (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 {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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








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








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






pragma solidity ^0.8.0;


contract initialNFT is ERC721Enumerable{
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    uint8 public offOn;
    uint public NFTNum;
    address public owner;
    mapping(address => uint256[]) public user;
    mapping(uint256 => address) public NFTAddr;
    mapping(address =>bool) public addrState;
    event _setOff(uint8 _num);
    event _setAddmin(address _addr,bool _state);

    constructor() ERC721("Spooky Brat fractional NFT", "Fractional NFT"){
            owner=msg.sender;
        }


    modifier  onlyOwner{
        require(msg.sender==owner,"no owner");
        _;
    }

    modifier  onlyAdmin{
        require(isAdmin(msg.sender),"onlyAdmin");
        _;
    }

    function isAdmin(address _addr) public view returns(bool){
        return addrState[_addr];
    }

    function setAddmin(address _addr,bool _state) public onlyOwner {
        addrState[_addr]=_state;
        emit _setAddmin(_addr,_state);

    }


    function setOff(uint8 _num) public onlyOwner {
        offOn=_num;
        emit _setOff(_num);
    }



    function createNewToken(address _to,address _conAddr ,string memory _tokenURI) public onlyAdmin  returns(uint256){
        require ( offOn==1,"Current activity is not open.");
        _tokenIds.increment();
        uint256 newItemId = _tokenIds.current();
        NFTAddr[newItemId]=_conAddr;
        // _safeMint(_to, newItemId);
        _mint(_to, newItemId);
       _setTokenURI( newItemId,_tokenURI);
       user[_to].push(newItemId);
       NFTNum++;

    return newItemId;
    }


    
    function setBurn(uint _tokenId) public onlyAdmin returns(uint){
        require ( offOn==1,"Current activity is not open.");
        _burn(_tokenId);

        return _tokenId;
    }






    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @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 override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }


 






    function getUser(address _addr) external view returns (uint256[] memory) {
        return user[_addr];
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override {
        super._beforeTokenTransfer(from, to, tokenId);

        // if (from != address(0) && to != address(0)&& to !=ownerOf(tokenId)) {
        //     user[to].push(tokenId);

        // }

        if (from != address(0) && to != address(0)) {
            uint256[] memory u = user[ownerOf(tokenId)];
            for (uint256 i = 0; i < u.length; i++) {
                if (u[i] == tokenId) {
                    user[ownerOf(tokenId)][i] = u[u.length - 1];
                    user[ownerOf(tokenId)].pop();
                    user[to].push(tokenId);
                }
            }
        }



    }





}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_state","type":"bool"}],"name":"_setAddmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_num","type":"uint8"}],"name":"_setOff","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"NFTAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFTNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addrState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_conAddr","type":"address"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"createNewToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"getUser","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"offOn","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":"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":"_addr","type":"address"},{"internalType":"bool","name":"_state","type":"bool"}],"name":"setAddmin","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":"uint256","name":"_tokenId","type":"uint256"}],"name":"setBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_num","type":"uint8"}],"name":"setOff","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":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"user","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280601a81526020017f53706f6f6b792042726174206672616374696f6e616c204e46540000000000008152506040518060400160405280600e81526020017f4672616374696f6e616c204e4654000000000000000000000000000000000000815250816000908051906020019062000096929190620000f9565b508060019080519060200190620000af929190620000f9565b50505033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200020e565b8280546200010790620001a9565b90600052602060002090601f0160209004810192826200012b576000855562000177565b82601f106200014657805160ff191683800117855562000177565b8280016001018555821562000177579182015b828111156200017657825182559160200191906001019062000159565b5b5090506200018691906200018a565b5090565b5b80821115620001a55760008160009055506001016200018b565b5090565b60006002820490506001821680620001c257607f821691505b60208210811415620001d957620001d8620001df565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6142e4806200021e6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a22cb46511610097578063b9df928711610071578063b9df928714610551578063c5466c8a14610581578063c87b56dd146105b1578063e985e9c5146105e1576101c4565b8063a22cb465146104fd578063b35b762d14610519578063b88d4fde14610535576101c4565b806370a08231116100d357806370a08231146104735780638da5cb5b146104a357806395d89b41146104c1578063a1b5bc16146104df576101c4565b80636352211e146103e357806366c4b782146104135780636f77926b14610443576101c4565b80631cf475df116101665780632ef6d831116101405780632ef6d831146103495780632f745c591461036757806342842e0e146103975780634f6ccce7146103b3576101c4565b80631cf475df146102e157806323b872dd146102fd57806324d7806c14610319576101c4565b8063081812fc116101a2578063081812fc14610247578063095ea7b31461027757806314feaa9d1461029357806318160ddd146102c3576101c4565b806301ffc9a7146101c957806306184efe146101f957806306fdde0314610229575b600080fd5b6101e360048036038101906101de9190612f27565b610611565b6040516101f091906134f4565b60405180910390f35b610213600480360381019061020e9190612d62565b61068b565b60405161022091906137d1565b60405180910390f35b610231610831565b60405161023e919061350f565b60405180910390f35b610261600480360381019061025c9190612f81565b6108c3565b60405161026e9190613442565b60405180910390f35b610291600480360381019061028c9190612ee7565b610948565b005b6102ad60048036038101906102a89190612ee7565b610a60565b6040516102ba91906137d1565b60405180910390f35b6102cb610a91565b6040516102d891906137d1565b60405180910390f35b6102fb60048036038101906102f69190612fae565b610a9e565b005b61031760048036038101906103129190612dd1565b610b83565b005b610333600480360381019061032e9190612cf5565b610be3565b60405161034091906134f4565b60405180910390f35b610351610c39565b60405161035e91906137d1565b60405180910390f35b610381600480360381019061037c9190612ee7565b610c3f565b60405161038e91906137d1565b60405180910390f35b6103b160048036038101906103ac9190612dd1565b610ce4565b005b6103cd60048036038101906103c89190612f81565b610d04565b6040516103da91906137d1565b60405180910390f35b6103fd60048036038101906103f89190612f81565b610d75565b60405161040a9190613442565b60405180910390f35b61042d60048036038101906104289190612f81565b610e27565b60405161043a91906137d1565b60405180910390f35b61045d60048036038101906104589190612cf5565b610ed7565b60405161046a91906134d2565b60405180910390f35b61048d60048036038101906104889190612cf5565b610f6e565b60405161049a91906137d1565b60405180910390f35b6104ab611026565b6040516104b89190613442565b60405180910390f35b6104c961104c565b6040516104d6919061350f565b60405180910390f35b6104e76110de565b6040516104f491906137ec565b60405180910390f35b61051760048036038101906105129190612ea7565b6110f1565b005b610533600480360381019061052e9190612ea7565b611107565b005b61054f600480360381019061054a9190612e24565b61122b565b005b61056b60048036038101906105669190612cf5565b61128d565b60405161057891906134f4565b60405180910390f35b61059b60048036038101906105969190612f81565b6112ad565b6040516105a89190613442565b60405180910390f35b6105cb60048036038101906105c69190612f81565b6112e0565b6040516105d8919061350f565b60405180910390f35b6105fb60048036038101906105f69190612d22565b611432565b60405161060891906134f4565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106845750610683826114c6565b5b9050919050565b600061069633610be3565b6106d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cc90613531565b60405180910390fd5b6001600b60009054906101000a900460ff1660ff161461072a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610721906136b1565b60405180910390fd5b610734600a6115a8565b6000610740600a6115be565b905083600f600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061079e85826115cc565b6107a8818461179a565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055600c600081548092919061082190613aeb565b9190505550809150509392505050565b60606000805461084090613a88565b80601f016020809104026020016040519081016040528092919081815260200182805461086c90613a88565b80156108b95780601f1061088e576101008083540402835291602001916108b9565b820191906000526020600020905b81548152906001019060200180831161089c57829003601f168201915b5050505050905090565b60006108ce8261180e565b61090d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090490613711565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061095382610d75565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb90613771565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109e361187a565b73ffffffffffffffffffffffffffffffffffffffff161480610a125750610a1181610a0c61187a565b611432565b5b610a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4890613611565b60405180910390fd5b610a5b8383611882565b505050565b600e6020528160005260406000208181548110610a7c57600080fd5b90600052602060002001600091509150505481565b6000600880549050905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2590613631565b60405180910390fd5b80600b60006101000a81548160ff021916908360ff1602179055507f29660c7020d8fdcbcb7a31670ff5a5a8b454fb626bb0a49719be56291371dec081604051610b7891906137ec565b60405180910390a150565b610b94610b8e61187a565b8261193b565b610bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bca90613791565b60405180910390fd5b610bde838383611a19565b505050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c5481565b6000610c4a83610f6e565b8210610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8290613551565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cff8383836040518060200160405280600081525061122b565b505050565b6000610d0e610a91565b8210610d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d46906137b1565b60405180910390fd5b60088281548110610d6357610d62613c21565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590613671565b60405180910390fd5b80915050919050565b6000610e3233610be3565b610e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6890613531565b60405180910390fd5b6001600b60009054906101000a900460ff1660ff1614610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd906136b1565b60405180910390fd5b610ecf82611c75565b819050919050565b6060600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610f6257602002820191906000526020600020905b815481526020019060010190808311610f4e575b50505050509050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd690613651565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606001805461105b90613a88565b80601f016020809104026020016040519081016040528092919081815260200182805461108790613a88565b80156110d45780601f106110a9576101008083540402835291602001916110d4565b820191906000526020600020905b8154815290600101906020018083116110b757829003601f168201915b5050505050905090565b600b60009054906101000a900460ff1681565b6111036110fc61187a565b8383611cc8565b5050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e90613631565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6112c333335242cf1dc9e751659fa2f3f5072e29d83150f1602f5cafbe6aeee5828260405161121f9291906134a9565b60405180910390a15050565b61123c61123661187a565b8361193b565b61127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127290613791565b60405180910390fd5b61128784848484611e35565b50505050565b60106020528060005260406000206000915054906101000a900460ff1681565b600f6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606112eb8261180e565b61132a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611321906136f1565b60405180910390fd5b600060116000848152602001908152602001600020805461134a90613a88565b80601f016020809104026020016040519081016040528092919081815260200182805461137690613a88565b80156113c35780601f10611398576101008083540402835291602001916113c3565b820191906000526020600020905b8154815290600101906020018083116113a657829003601f168201915b5050505050905060006113d4611e91565b90506000815114156113ea57819250505061142d565b60008251111561141f57808260405160200161140792919061341e565b6040516020818303038152906040529250505061142d565b61142884611ea8565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061159157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806115a157506115a082611f4f565b5b9050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561163c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611633906136d1565b60405180910390fd5b6116458161180e565b15611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167c90613591565b60405180910390fd5b61169160008383611fb9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116e1919061390a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6117a38261180e565b6117e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d990613691565b60405180910390fd5b80601160008481526020019081526020016000209080519060200190611809929190612ab4565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118f583610d75565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119468261180e565b611985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197c906135f1565b60405180910390fd5b600061199083610d75565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119ff57508373ffffffffffffffffffffffffffffffffffffffff166119e7846108c3565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a105750611a0f8185611432565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a3982610d75565b73ffffffffffffffffffffffffffffffffffffffff1614611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690613731565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af6906135b1565b60405180910390fd5b611b0a838383611fb9565b611b15600082611882565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b659190613991565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bbc919061390a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611c7e81612279565b6000601160008381526020019081526020016000208054611c9e90613a88565b905014611cc557601160008281526020019081526020016000206000611cc49190612b3a565b5b50565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2e906135d1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e2891906134f4565b60405180910390a3505050565b611e40848484611a19565b611e4c8484848461238a565b611e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8290613571565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060611eb38261180e565b611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee990613751565b60405180910390fd5b6000611efc611e91565b90506000815111611f1c5760405180602001604052806000815250611f47565b80611f2684612521565b604051602001611f3792919061341e565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611fc4838383612682565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561202e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612274576000600e600061204284610d75565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156120c657602002820191906000526020600020905b8154815260200190600101908083116120b2575b5050505050905060005b815181101561227157828282815181106120ed576120ec613c21565b5b6020026020010151141561225e57816001835161210a9190613991565b8151811061211b5761211a613c21565b5b6020026020010151600e600061213086610d75565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061217c5761217b613c21565b5b9060005260206000200181905550600e600061219785610d75565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806121e1576121e0613bf2565b5b60019003818190600052602060002001600090559055600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208390806001815401808255809150506001900390600052602060002001600090919091909150555b808061226990613aeb565b9150506120d0565b50505b505050565b600061228482610d75565b905061229281600084611fb9565b61229d600083611882565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122ed9190613991565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006123ab8473ffffffffffffffffffffffffffffffffffffffff16612796565b15612514578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123d461187a565b8786866040518563ffffffff1660e01b81526004016123f6949392919061345d565b602060405180830381600087803b15801561241057600080fd5b505af192505050801561244157506040513d601f19601f8201168201806040525081019061243e9190612f54565b60015b6124c4573d8060008114612471576040519150601f19603f3d011682016040523d82523d6000602084013e612476565b606091505b506000815114156124bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b390613571565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612519565b600190505b949350505050565b60606000821415612569576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061267d565b600082905060005b6000821461259b57808061258490613aeb565b915050600a826125949190613960565b9150612571565b60008167ffffffffffffffff8111156125b7576125b6613c50565b5b6040519080825280601f01601f1916602001820160405280156125e95781602001600182028036833780820191505090505b5090505b60008514612676576001826126029190613991565b9150600a856126119190613b34565b603061261d919061390a565b60f81b81838151811061263357612632613c21565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561266f9190613960565b94506125ed565b8093505050505b919050565b61268d8383836127a9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126d0576126cb816127ae565b61270f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461270e5761270d83826127f7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127525761274d81612964565b612791565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127905761278f8282612a35565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161280484610f6e565b61280e9190613991565b90506000600760008481526020019081526020016000205490508181146128f3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129789190613991565b90506000600960008481526020019081526020016000205490506000600883815481106129a8576129a7613c21565b5b9060005260206000200154905080600883815481106129ca576129c9613c21565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612a1957612a18613bf2565b5b6001900381819060005260206000200160009055905550505050565b6000612a4083610f6e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612ac090613a88565b90600052602060002090601f016020900481019282612ae25760008555612b29565b82601f10612afb57805160ff1916838001178555612b29565b82800160010185558215612b29579182015b82811115612b28578251825591602001919060010190612b0d565b5b509050612b369190612b7a565b5090565b508054612b4690613a88565b6000825580601f10612b585750612b77565b601f016020900490600052602060002090810190612b769190612b7a565b5b50565b5b80821115612b93576000816000905550600101612b7b565b5090565b6000612baa612ba58461382c565b613807565b905082815260208101848484011115612bc657612bc5613c84565b5b612bd1848285613a46565b509392505050565b6000612bec612be78461385d565b613807565b905082815260208101848484011115612c0857612c07613c84565b5b612c13848285613a46565b509392505050565b600081359050612c2a8161423b565b92915050565b600081359050612c3f81614252565b92915050565b600081359050612c5481614269565b92915050565b600081519050612c6981614269565b92915050565b600082601f830112612c8457612c83613c7f565b5b8135612c94848260208601612b97565b91505092915050565b600082601f830112612cb257612cb1613c7f565b5b8135612cc2848260208601612bd9565b91505092915050565b600081359050612cda81614280565b92915050565b600081359050612cef81614297565b92915050565b600060208284031215612d0b57612d0a613c8e565b5b6000612d1984828501612c1b565b91505092915050565b60008060408385031215612d3957612d38613c8e565b5b6000612d4785828601612c1b565b9250506020612d5885828601612c1b565b9150509250929050565b600080600060608486031215612d7b57612d7a613c8e565b5b6000612d8986828701612c1b565b9350506020612d9a86828701612c1b565b925050604084013567ffffffffffffffff811115612dbb57612dba613c89565b5b612dc786828701612c9d565b9150509250925092565b600080600060608486031215612dea57612de9613c8e565b5b6000612df886828701612c1b565b9350506020612e0986828701612c1b565b9250506040612e1a86828701612ccb565b9150509250925092565b60008060008060808587031215612e3e57612e3d613c8e565b5b6000612e4c87828801612c1b565b9450506020612e5d87828801612c1b565b9350506040612e6e87828801612ccb565b925050606085013567ffffffffffffffff811115612e8f57612e8e613c89565b5b612e9b87828801612c6f565b91505092959194509250565b60008060408385031215612ebe57612ebd613c8e565b5b6000612ecc85828601612c1b565b9250506020612edd85828601612c30565b9150509250929050565b60008060408385031215612efe57612efd613c8e565b5b6000612f0c85828601612c1b565b9250506020612f1d85828601612ccb565b9150509250929050565b600060208284031215612f3d57612f3c613c8e565b5b6000612f4b84828501612c45565b91505092915050565b600060208284031215612f6a57612f69613c8e565b5b6000612f7884828501612c5a565b91505092915050565b600060208284031215612f9757612f96613c8e565b5b6000612fa584828501612ccb565b91505092915050565b600060208284031215612fc457612fc3613c8e565b5b6000612fd284828501612ce0565b91505092915050565b6000612fe783836133f1565b60208301905092915050565b612ffc816139c5565b82525050565b600061300d8261389e565b61301781856138cc565b93506130228361388e565b8060005b8381101561305357815161303a8882612fdb565b9750613045836138bf565b925050600181019050613026565b5085935050505092915050565b613069816139d7565b82525050565b600061307a826138a9565b61308481856138dd565b9350613094818560208601613a55565b61309d81613c93565b840191505092915050565b60006130b3826138b4565b6130bd81856138ee565b93506130cd818560208601613a55565b6130d681613c93565b840191505092915050565b60006130ec826138b4565b6130f681856138ff565b9350613106818560208601613a55565b80840191505092915050565b600061311f6009836138ee565b915061312a82613ca4565b602082019050919050565b6000613142602b836138ee565b915061314d82613ccd565b604082019050919050565b60006131656032836138ee565b915061317082613d1c565b604082019050919050565b6000613188601c836138ee565b915061319382613d6b565b602082019050919050565b60006131ab6024836138ee565b91506131b682613d94565b604082019050919050565b60006131ce6019836138ee565b91506131d982613de3565b602082019050919050565b60006131f1602c836138ee565b91506131fc82613e0c565b604082019050919050565b60006132146038836138ee565b915061321f82613e5b565b604082019050919050565b60006132376008836138ee565b915061324282613eaa565b602082019050919050565b600061325a602a836138ee565b915061326582613ed3565b604082019050919050565b600061327d6029836138ee565b915061328882613f22565b604082019050919050565b60006132a0602e836138ee565b91506132ab82613f71565b604082019050919050565b60006132c3601d836138ee565b91506132ce82613fc0565b602082019050919050565b60006132e66020836138ee565b91506132f182613fe9565b602082019050919050565b60006133096031836138ee565b915061331482614012565b604082019050919050565b600061332c602c836138ee565b915061333782614061565b604082019050919050565b600061334f6029836138ee565b915061335a826140b0565b604082019050919050565b6000613372602f836138ee565b915061337d826140ff565b604082019050919050565b60006133956021836138ee565b91506133a08261414e565b604082019050919050565b60006133b86031836138ee565b91506133c38261419d565b604082019050919050565b60006133db602c836138ee565b91506133e6826141ec565b604082019050919050565b6133fa81613a2f565b82525050565b61340981613a2f565b82525050565b61341881613a39565b82525050565b600061342a82856130e1565b915061343682846130e1565b91508190509392505050565b60006020820190506134576000830184612ff3565b92915050565b60006080820190506134726000830187612ff3565b61347f6020830186612ff3565b61348c6040830185613400565b818103606083015261349e818461306f565b905095945050505050565b60006040820190506134be6000830185612ff3565b6134cb6020830184613060565b9392505050565b600060208201905081810360008301526134ec8184613002565b905092915050565b60006020820190506135096000830184613060565b92915050565b6000602082019050818103600083015261352981846130a8565b905092915050565b6000602082019050818103600083015261354a81613112565b9050919050565b6000602082019050818103600083015261356a81613135565b9050919050565b6000602082019050818103600083015261358a81613158565b9050919050565b600060208201905081810360008301526135aa8161317b565b9050919050565b600060208201905081810360008301526135ca8161319e565b9050919050565b600060208201905081810360008301526135ea816131c1565b9050919050565b6000602082019050818103600083015261360a816131e4565b9050919050565b6000602082019050818103600083015261362a81613207565b9050919050565b6000602082019050818103600083015261364a8161322a565b9050919050565b6000602082019050818103600083015261366a8161324d565b9050919050565b6000602082019050818103600083015261368a81613270565b9050919050565b600060208201905081810360008301526136aa81613293565b9050919050565b600060208201905081810360008301526136ca816132b6565b9050919050565b600060208201905081810360008301526136ea816132d9565b9050919050565b6000602082019050818103600083015261370a816132fc565b9050919050565b6000602082019050818103600083015261372a8161331f565b9050919050565b6000602082019050818103600083015261374a81613342565b9050919050565b6000602082019050818103600083015261376a81613365565b9050919050565b6000602082019050818103600083015261378a81613388565b9050919050565b600060208201905081810360008301526137aa816133ab565b9050919050565b600060208201905081810360008301526137ca816133ce565b9050919050565b60006020820190506137e66000830184613400565b92915050565b6000602082019050613801600083018461340f565b92915050565b6000613811613822565b905061381d8282613aba565b919050565b6000604051905090565b600067ffffffffffffffff82111561384757613846613c50565b5b61385082613c93565b9050602081019050919050565b600067ffffffffffffffff82111561387857613877613c50565b5b61388182613c93565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061391582613a2f565b915061392083613a2f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561395557613954613b65565b5b828201905092915050565b600061396b82613a2f565b915061397683613a2f565b92508261398657613985613b94565b5b828204905092915050565b600061399c82613a2f565b91506139a783613a2f565b9250828210156139ba576139b9613b65565b5b828203905092915050565b60006139d082613a0f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613a73578082015181840152602081019050613a58565b83811115613a82576000848401525b50505050565b60006002820490506001821680613aa057607f821691505b60208210811415613ab457613ab3613bc3565b5b50919050565b613ac382613c93565b810181811067ffffffffffffffff82111715613ae257613ae1613c50565b5b80604052505050565b6000613af682613a2f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b2957613b28613b65565b5b600182019050919050565b6000613b3f82613a2f565b9150613b4a83613a2f565b925082613b5a57613b59613b94565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f6f6e6c7941646d696e0000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f6e6f206f776e6572000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f43757272656e74206163746976697479206973206e6f74206f70656e2e000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614244816139c5565b811461424f57600080fd5b50565b61425b816139d7565b811461426657600080fd5b50565b614272816139e3565b811461427d57600080fd5b50565b61428981613a2f565b811461429457600080fd5b50565b6142a081613a39565b81146142ab57600080fd5b5056fea264697066735822122063df341ba3efabfaa4e8280e345f360d3310392a1a97d2e04097b41176f96e9764736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101c45760003560e01c80636352211e116100f9578063a22cb46511610097578063b9df928711610071578063b9df928714610551578063c5466c8a14610581578063c87b56dd146105b1578063e985e9c5146105e1576101c4565b8063a22cb465146104fd578063b35b762d14610519578063b88d4fde14610535576101c4565b806370a08231116100d357806370a08231146104735780638da5cb5b146104a357806395d89b41146104c1578063a1b5bc16146104df576101c4565b80636352211e146103e357806366c4b782146104135780636f77926b14610443576101c4565b80631cf475df116101665780632ef6d831116101405780632ef6d831146103495780632f745c591461036757806342842e0e146103975780634f6ccce7146103b3576101c4565b80631cf475df146102e157806323b872dd146102fd57806324d7806c14610319576101c4565b8063081812fc116101a2578063081812fc14610247578063095ea7b31461027757806314feaa9d1461029357806318160ddd146102c3576101c4565b806301ffc9a7146101c957806306184efe146101f957806306fdde0314610229575b600080fd5b6101e360048036038101906101de9190612f27565b610611565b6040516101f091906134f4565b60405180910390f35b610213600480360381019061020e9190612d62565b61068b565b60405161022091906137d1565b60405180910390f35b610231610831565b60405161023e919061350f565b60405180910390f35b610261600480360381019061025c9190612f81565b6108c3565b60405161026e9190613442565b60405180910390f35b610291600480360381019061028c9190612ee7565b610948565b005b6102ad60048036038101906102a89190612ee7565b610a60565b6040516102ba91906137d1565b60405180910390f35b6102cb610a91565b6040516102d891906137d1565b60405180910390f35b6102fb60048036038101906102f69190612fae565b610a9e565b005b61031760048036038101906103129190612dd1565b610b83565b005b610333600480360381019061032e9190612cf5565b610be3565b60405161034091906134f4565b60405180910390f35b610351610c39565b60405161035e91906137d1565b60405180910390f35b610381600480360381019061037c9190612ee7565b610c3f565b60405161038e91906137d1565b60405180910390f35b6103b160048036038101906103ac9190612dd1565b610ce4565b005b6103cd60048036038101906103c89190612f81565b610d04565b6040516103da91906137d1565b60405180910390f35b6103fd60048036038101906103f89190612f81565b610d75565b60405161040a9190613442565b60405180910390f35b61042d60048036038101906104289190612f81565b610e27565b60405161043a91906137d1565b60405180910390f35b61045d60048036038101906104589190612cf5565b610ed7565b60405161046a91906134d2565b60405180910390f35b61048d60048036038101906104889190612cf5565b610f6e565b60405161049a91906137d1565b60405180910390f35b6104ab611026565b6040516104b89190613442565b60405180910390f35b6104c961104c565b6040516104d6919061350f565b60405180910390f35b6104e76110de565b6040516104f491906137ec565b60405180910390f35b61051760048036038101906105129190612ea7565b6110f1565b005b610533600480360381019061052e9190612ea7565b611107565b005b61054f600480360381019061054a9190612e24565b61122b565b005b61056b60048036038101906105669190612cf5565b61128d565b60405161057891906134f4565b60405180910390f35b61059b60048036038101906105969190612f81565b6112ad565b6040516105a89190613442565b60405180910390f35b6105cb60048036038101906105c69190612f81565b6112e0565b6040516105d8919061350f565b60405180910390f35b6105fb60048036038101906105f69190612d22565b611432565b60405161060891906134f4565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106845750610683826114c6565b5b9050919050565b600061069633610be3565b6106d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cc90613531565b60405180910390fd5b6001600b60009054906101000a900460ff1660ff161461072a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610721906136b1565b60405180910390fd5b610734600a6115a8565b6000610740600a6115be565b905083600f600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061079e85826115cc565b6107a8818461179a565b600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190915055600c600081548092919061082190613aeb565b9190505550809150509392505050565b60606000805461084090613a88565b80601f016020809104026020016040519081016040528092919081815260200182805461086c90613a88565b80156108b95780601f1061088e576101008083540402835291602001916108b9565b820191906000526020600020905b81548152906001019060200180831161089c57829003601f168201915b5050505050905090565b60006108ce8261180e565b61090d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090490613711565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061095382610d75565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bb90613771565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109e361187a565b73ffffffffffffffffffffffffffffffffffffffff161480610a125750610a1181610a0c61187a565b611432565b5b610a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4890613611565b60405180910390fd5b610a5b8383611882565b505050565b600e6020528160005260406000208181548110610a7c57600080fd5b90600052602060002001600091509150505481565b6000600880549050905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2590613631565b60405180910390fd5b80600b60006101000a81548160ff021916908360ff1602179055507f29660c7020d8fdcbcb7a31670ff5a5a8b454fb626bb0a49719be56291371dec081604051610b7891906137ec565b60405180910390a150565b610b94610b8e61187a565b8261193b565b610bd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bca90613791565b60405180910390fd5b610bde838383611a19565b505050565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600c5481565b6000610c4a83610f6e565b8210610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8290613551565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cff8383836040518060200160405280600081525061122b565b505050565b6000610d0e610a91565b8210610d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d46906137b1565b60405180910390fd5b60088281548110610d6357610d62613c21565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590613671565b60405180910390fd5b80915050919050565b6000610e3233610be3565b610e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6890613531565b60405180910390fd5b6001600b60009054906101000a900460ff1660ff1614610ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebd906136b1565b60405180910390fd5b610ecf82611c75565b819050919050565b6060600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610f6257602002820191906000526020600020905b815481526020019060010190808311610f4e575b50505050509050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd690613651565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606001805461105b90613a88565b80601f016020809104026020016040519081016040528092919081815260200182805461108790613a88565b80156110d45780601f106110a9576101008083540402835291602001916110d4565b820191906000526020600020905b8154815290600101906020018083116110b757829003601f168201915b5050505050905090565b600b60009054906101000a900460ff1681565b6111036110fc61187a565b8383611cc8565b5050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118e90613631565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6112c333335242cf1dc9e751659fa2f3f5072e29d83150f1602f5cafbe6aeee5828260405161121f9291906134a9565b60405180910390a15050565b61123c61123661187a565b8361193b565b61127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127290613791565b60405180910390fd5b61128784848484611e35565b50505050565b60106020528060005260406000206000915054906101000a900460ff1681565b600f6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606112eb8261180e565b61132a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611321906136f1565b60405180910390fd5b600060116000848152602001908152602001600020805461134a90613a88565b80601f016020809104026020016040519081016040528092919081815260200182805461137690613a88565b80156113c35780601f10611398576101008083540402835291602001916113c3565b820191906000526020600020905b8154815290600101906020018083116113a657829003601f168201915b5050505050905060006113d4611e91565b90506000815114156113ea57819250505061142d565b60008251111561141f57808260405160200161140792919061341e565b6040516020818303038152906040529250505061142d565b61142884611ea8565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061159157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806115a157506115a082611f4f565b5b9050919050565b6001816000016000828254019250508190555050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561163c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611633906136d1565b60405180910390fd5b6116458161180e565b15611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167c90613591565b60405180910390fd5b61169160008383611fb9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116e1919061390a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6117a38261180e565b6117e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d990613691565b60405180910390fd5b80601160008481526020019081526020016000209080519060200190611809929190612ab4565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118f583610d75565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006119468261180e565b611985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197c906135f1565b60405180910390fd5b600061199083610d75565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119ff57508373ffffffffffffffffffffffffffffffffffffffff166119e7846108c3565b73ffffffffffffffffffffffffffffffffffffffff16145b80611a105750611a0f8185611432565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a3982610d75565b73ffffffffffffffffffffffffffffffffffffffff1614611a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8690613731565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af6906135b1565b60405180910390fd5b611b0a838383611fb9565b611b15600082611882565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b659190613991565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bbc919061390a565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611c7e81612279565b6000601160008381526020019081526020016000208054611c9e90613a88565b905014611cc557601160008281526020019081526020016000206000611cc49190612b3a565b5b50565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2e906135d1565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e2891906134f4565b60405180910390a3505050565b611e40848484611a19565b611e4c8484848461238a565b611e8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8290613571565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b6060611eb38261180e565b611ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee990613751565b60405180910390fd5b6000611efc611e91565b90506000815111611f1c5760405180602001604052806000815250611f47565b80611f2684612521565b604051602001611f3792919061341e565b6040516020818303038152906040525b915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611fc4838383612682565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561202e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612274576000600e600061204284610d75565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156120c657602002820191906000526020600020905b8154815260200190600101908083116120b2575b5050505050905060005b815181101561227157828282815181106120ed576120ec613c21565b5b6020026020010151141561225e57816001835161210a9190613991565b8151811061211b5761211a613c21565b5b6020026020010151600e600061213086610d75565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061217c5761217b613c21565b5b9060005260206000200181905550600e600061219785610d75565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806121e1576121e0613bf2565b5b60019003818190600052602060002001600090559055600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208390806001815401808255809150506001900390600052602060002001600090919091909150555b808061226990613aeb565b9150506120d0565b50505b505050565b600061228482610d75565b905061229281600084611fb9565b61229d600083611882565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122ed9190613991565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006123ab8473ffffffffffffffffffffffffffffffffffffffff16612796565b15612514578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123d461187a565b8786866040518563ffffffff1660e01b81526004016123f6949392919061345d565b602060405180830381600087803b15801561241057600080fd5b505af192505050801561244157506040513d601f19601f8201168201806040525081019061243e9190612f54565b60015b6124c4573d8060008114612471576040519150601f19603f3d011682016040523d82523d6000602084013e612476565b606091505b506000815114156124bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b390613571565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612519565b600190505b949350505050565b60606000821415612569576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061267d565b600082905060005b6000821461259b57808061258490613aeb565b915050600a826125949190613960565b9150612571565b60008167ffffffffffffffff8111156125b7576125b6613c50565b5b6040519080825280601f01601f1916602001820160405280156125e95781602001600182028036833780820191505090505b5090505b60008514612676576001826126029190613991565b9150600a856126119190613b34565b603061261d919061390a565b60f81b81838151811061263357612632613c21565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561266f9190613960565b94506125ed565b8093505050505b919050565b61268d8383836127a9565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126d0576126cb816127ae565b61270f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461270e5761270d83826127f7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127525761274d81612964565b612791565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146127905761278f8282612a35565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161280484610f6e565b61280e9190613991565b90506000600760008481526020019081526020016000205490508181146128f3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506129789190613991565b90506000600960008481526020019081526020016000205490506000600883815481106129a8576129a7613c21565b5b9060005260206000200154905080600883815481106129ca576129c9613c21565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612a1957612a18613bf2565b5b6001900381819060005260206000200160009055905550505050565b6000612a4083610f6e565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054612ac090613a88565b90600052602060002090601f016020900481019282612ae25760008555612b29565b82601f10612afb57805160ff1916838001178555612b29565b82800160010185558215612b29579182015b82811115612b28578251825591602001919060010190612b0d565b5b509050612b369190612b7a565b5090565b508054612b4690613a88565b6000825580601f10612b585750612b77565b601f016020900490600052602060002090810190612b769190612b7a565b5b50565b5b80821115612b93576000816000905550600101612b7b565b5090565b6000612baa612ba58461382c565b613807565b905082815260208101848484011115612bc657612bc5613c84565b5b612bd1848285613a46565b509392505050565b6000612bec612be78461385d565b613807565b905082815260208101848484011115612c0857612c07613c84565b5b612c13848285613a46565b509392505050565b600081359050612c2a8161423b565b92915050565b600081359050612c3f81614252565b92915050565b600081359050612c5481614269565b92915050565b600081519050612c6981614269565b92915050565b600082601f830112612c8457612c83613c7f565b5b8135612c94848260208601612b97565b91505092915050565b600082601f830112612cb257612cb1613c7f565b5b8135612cc2848260208601612bd9565b91505092915050565b600081359050612cda81614280565b92915050565b600081359050612cef81614297565b92915050565b600060208284031215612d0b57612d0a613c8e565b5b6000612d1984828501612c1b565b91505092915050565b60008060408385031215612d3957612d38613c8e565b5b6000612d4785828601612c1b565b9250506020612d5885828601612c1b565b9150509250929050565b600080600060608486031215612d7b57612d7a613c8e565b5b6000612d8986828701612c1b565b9350506020612d9a86828701612c1b565b925050604084013567ffffffffffffffff811115612dbb57612dba613c89565b5b612dc786828701612c9d565b9150509250925092565b600080600060608486031215612dea57612de9613c8e565b5b6000612df886828701612c1b565b9350506020612e0986828701612c1b565b9250506040612e1a86828701612ccb565b9150509250925092565b60008060008060808587031215612e3e57612e3d613c8e565b5b6000612e4c87828801612c1b565b9450506020612e5d87828801612c1b565b9350506040612e6e87828801612ccb565b925050606085013567ffffffffffffffff811115612e8f57612e8e613c89565b5b612e9b87828801612c6f565b91505092959194509250565b60008060408385031215612ebe57612ebd613c8e565b5b6000612ecc85828601612c1b565b9250506020612edd85828601612c30565b9150509250929050565b60008060408385031215612efe57612efd613c8e565b5b6000612f0c85828601612c1b565b9250506020612f1d85828601612ccb565b9150509250929050565b600060208284031215612f3d57612f3c613c8e565b5b6000612f4b84828501612c45565b91505092915050565b600060208284031215612f6a57612f69613c8e565b5b6000612f7884828501612c5a565b91505092915050565b600060208284031215612f9757612f96613c8e565b5b6000612fa584828501612ccb565b91505092915050565b600060208284031215612fc457612fc3613c8e565b5b6000612fd284828501612ce0565b91505092915050565b6000612fe783836133f1565b60208301905092915050565b612ffc816139c5565b82525050565b600061300d8261389e565b61301781856138cc565b93506130228361388e565b8060005b8381101561305357815161303a8882612fdb565b9750613045836138bf565b925050600181019050613026565b5085935050505092915050565b613069816139d7565b82525050565b600061307a826138a9565b61308481856138dd565b9350613094818560208601613a55565b61309d81613c93565b840191505092915050565b60006130b3826138b4565b6130bd81856138ee565b93506130cd818560208601613a55565b6130d681613c93565b840191505092915050565b60006130ec826138b4565b6130f681856138ff565b9350613106818560208601613a55565b80840191505092915050565b600061311f6009836138ee565b915061312a82613ca4565b602082019050919050565b6000613142602b836138ee565b915061314d82613ccd565b604082019050919050565b60006131656032836138ee565b915061317082613d1c565b604082019050919050565b6000613188601c836138ee565b915061319382613d6b565b602082019050919050565b60006131ab6024836138ee565b91506131b682613d94565b604082019050919050565b60006131ce6019836138ee565b91506131d982613de3565b602082019050919050565b60006131f1602c836138ee565b91506131fc82613e0c565b604082019050919050565b60006132146038836138ee565b915061321f82613e5b565b604082019050919050565b60006132376008836138ee565b915061324282613eaa565b602082019050919050565b600061325a602a836138ee565b915061326582613ed3565b604082019050919050565b600061327d6029836138ee565b915061328882613f22565b604082019050919050565b60006132a0602e836138ee565b91506132ab82613f71565b604082019050919050565b60006132c3601d836138ee565b91506132ce82613fc0565b602082019050919050565b60006132e66020836138ee565b91506132f182613fe9565b602082019050919050565b60006133096031836138ee565b915061331482614012565b604082019050919050565b600061332c602c836138ee565b915061333782614061565b604082019050919050565b600061334f6029836138ee565b915061335a826140b0565b604082019050919050565b6000613372602f836138ee565b915061337d826140ff565b604082019050919050565b60006133956021836138ee565b91506133a08261414e565b604082019050919050565b60006133b86031836138ee565b91506133c38261419d565b604082019050919050565b60006133db602c836138ee565b91506133e6826141ec565b604082019050919050565b6133fa81613a2f565b82525050565b61340981613a2f565b82525050565b61341881613a39565b82525050565b600061342a82856130e1565b915061343682846130e1565b91508190509392505050565b60006020820190506134576000830184612ff3565b92915050565b60006080820190506134726000830187612ff3565b61347f6020830186612ff3565b61348c6040830185613400565b818103606083015261349e818461306f565b905095945050505050565b60006040820190506134be6000830185612ff3565b6134cb6020830184613060565b9392505050565b600060208201905081810360008301526134ec8184613002565b905092915050565b60006020820190506135096000830184613060565b92915050565b6000602082019050818103600083015261352981846130a8565b905092915050565b6000602082019050818103600083015261354a81613112565b9050919050565b6000602082019050818103600083015261356a81613135565b9050919050565b6000602082019050818103600083015261358a81613158565b9050919050565b600060208201905081810360008301526135aa8161317b565b9050919050565b600060208201905081810360008301526135ca8161319e565b9050919050565b600060208201905081810360008301526135ea816131c1565b9050919050565b6000602082019050818103600083015261360a816131e4565b9050919050565b6000602082019050818103600083015261362a81613207565b9050919050565b6000602082019050818103600083015261364a8161322a565b9050919050565b6000602082019050818103600083015261366a8161324d565b9050919050565b6000602082019050818103600083015261368a81613270565b9050919050565b600060208201905081810360008301526136aa81613293565b9050919050565b600060208201905081810360008301526136ca816132b6565b9050919050565b600060208201905081810360008301526136ea816132d9565b9050919050565b6000602082019050818103600083015261370a816132fc565b9050919050565b6000602082019050818103600083015261372a8161331f565b9050919050565b6000602082019050818103600083015261374a81613342565b9050919050565b6000602082019050818103600083015261376a81613365565b9050919050565b6000602082019050818103600083015261378a81613388565b9050919050565b600060208201905081810360008301526137aa816133ab565b9050919050565b600060208201905081810360008301526137ca816133ce565b9050919050565b60006020820190506137e66000830184613400565b92915050565b6000602082019050613801600083018461340f565b92915050565b6000613811613822565b905061381d8282613aba565b919050565b6000604051905090565b600067ffffffffffffffff82111561384757613846613c50565b5b61385082613c93565b9050602081019050919050565b600067ffffffffffffffff82111561387857613877613c50565b5b61388182613c93565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061391582613a2f565b915061392083613a2f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561395557613954613b65565b5b828201905092915050565b600061396b82613a2f565b915061397683613a2f565b92508261398657613985613b94565b5b828204905092915050565b600061399c82613a2f565b91506139a783613a2f565b9250828210156139ba576139b9613b65565b5b828203905092915050565b60006139d082613a0f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015613a73578082015181840152602081019050613a58565b83811115613a82576000848401525b50505050565b60006002820490506001821680613aa057607f821691505b60208210811415613ab457613ab3613bc3565b5b50919050565b613ac382613c93565b810181811067ffffffffffffffff82111715613ae257613ae1613c50565b5b80604052505050565b6000613af682613a2f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613b2957613b28613b65565b5b600182019050919050565b6000613b3f82613a2f565b9150613b4a83613a2f565b925082613b5a57613b59613b94565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f6f6e6c7941646d696e0000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f6e6f206f776e6572000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f43757272656e74206163746976697479206973206e6f74206f70656e2e000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614244816139c5565b811461424f57600080fd5b50565b61425b816139d7565b811461426657600080fd5b50565b614272816139e3565b811461427d57600080fd5b50565b61428981613a2f565b811461429457600080fd5b50565b6142a081613a39565b81146142ab57600080fd5b5056fea264697066735822122063df341ba3efabfaa4e8280e345f360d3310392a1a97d2e04097b41176f96e9764736f6c63430008070033

Deployed Bytecode Sourcemap

42778:4428:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36591:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43905:496;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23149:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24708:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24231:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42984:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37231:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43790:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25458:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43526:99;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42932:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36899:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25868:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37421:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22843:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44417:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46324:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22573:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42957:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23318:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42907:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25001:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43633:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26124:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43081:40;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43032:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44812:679;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25227:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36591:224;36693:4;36732:35;36717:50;;;:11;:50;;;;:90;;;;36771:36;36795:11;36771:23;:36::i;:::-;36717:90;36710:97;;36591:224;;;:::o;43905:496::-;44010:7;43466:19;43474:10;43466:7;:19::i;:::-;43458:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;44046:1:::1;44039:5;;;;;;;;;;;:8;;;44029:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44091:21;:9;:19;:21::i;:::-;44123:17;44143:19;:9;:17;:19::i;:::-;44123:39;;44192:8;44173:7;:18;44181:9;44173:18;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;44250:21;44256:3;44261:9;44250:5;:21::i;:::-;44281:34;44295:9;44305;44281:12;:34::i;:::-;44325:4;:9;44330:3;44325:9;;;;;;;;;;;;;;;44340;44325:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44360:6;;:8;;;;;;;;;:::i;:::-;;;;;;44384:9;44377:16;;;43905:496:::0;;;;;:::o;23149:100::-;23203:13;23236:5;23229:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23149:100;:::o;24708:221::-;24784:7;24812:16;24820:7;24812;:16::i;:::-;24804:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24897:15;:24;24913:7;24897:24;;;;;;;;;;;;;;;;;;;;;24890:31;;24708:221;;;:::o;24231:411::-;24312:13;24328:23;24343:7;24328:14;:23::i;:::-;24312:39;;24376:5;24370:11;;:2;:11;;;;24362:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24470:5;24454:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24479:37;24496:5;24503:12;:10;:12::i;:::-;24479:16;:37::i;:::-;24454:62;24432:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24613:21;24622:2;24626:7;24613:8;:21::i;:::-;24301:341;24231:411;;:::o;42984:41::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37231:113::-;37292:7;37319:10;:17;;;;37312:24;;37231:113;:::o;43790:103::-;43383:5;;;;;;;;;;;43371:17;;:10;:17;;;43363:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;43852:4:::1;43846:5;;:10;;;;;;;;;;;;;;;;;;43872:13;43880:4;43872:13;;;;;;:::i;:::-;;;;;;;;43790:103:::0;:::o;25458:339::-;25653:41;25672:12;:10;:12::i;:::-;25686:7;25653:18;:41::i;:::-;25645:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25761:28;25771:4;25777:2;25781:7;25761:9;:28::i;:::-;25458:339;;;:::o;43526:99::-;43578:4;43601:9;:16;43611:5;43601:16;;;;;;;;;;;;;;;;;;;;;;;;;43594:23;;43526:99;;;:::o;42932:18::-;;;;:::o;36899:256::-;36996:7;37032:23;37049:5;37032:16;:23::i;:::-;37024:5;:31;37016:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37121:12;:19;37134:5;37121:19;;;;;;;;;;;;;;;:26;37141:5;37121:26;;;;;;;;;;;;37114:33;;36899:256;;;;:::o;25868:185::-;26006:39;26023:4;26029:2;26033:7;26006:39;;;;;;;;;;;;:16;:39::i;:::-;25868:185;;;:::o;37421:233::-;37496:7;37532:30;:28;:30::i;:::-;37524:5;:38;37516:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37629:10;37640:5;37629:17;;;;;;;;:::i;:::-;;;;;;;;;;37622:24;;37421:233;;;:::o;22843:239::-;22915:7;22935:13;22951:7;:16;22959:7;22951:16;;;;;;;;;;;;;;;;;;;;;22935:32;;23003:1;22986:19;;:5;:19;;;;22978:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23069:5;23062:12;;;22843:239;;;:::o;44417:186::-;44474:4;43466:19;43474:10;43466:7;:19::i;:::-;43458:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;44507:1:::1;44500:5;;;;;;;;;;;:8;;;44490:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44552:15;44558:8;44552:5;:15::i;:::-;44587:8;44580:15;;44417:186:::0;;;:::o;46324:110::-;46379:16;46415:4;:11;46420:5;46415:11;;;;;;;;;;;;;;;46408:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46324:110;;;:::o;22573:208::-;22645:7;22690:1;22673:19;;:5;:19;;;;22665:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22757:9;:16;22767:5;22757:16;;;;;;;;;;;;;;;;22750:23;;22573:208;;;:::o;42957:20::-;;;;;;;;;;;;;:::o;23318:104::-;23374:13;23407:7;23400:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23318:104;:::o;42907:18::-;;;;;;;;;;;;;:::o;25001:155::-;25096:52;25115:12;:10;:12::i;:::-;25129:8;25139;25096:18;:52::i;:::-;25001:155;;:::o;43633:147::-;43383:5;;;;;;;;;;;43371:17;;:10;:17;;;43363:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;43724:6:::1;43707:9;:16;43717:5;43707:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;43746:24;43757:5;43763:6;43746:24;;;;;;;:::i;:::-;;;;;;;;43633:147:::0;;:::o;26124:328::-;26299:41;26318:12;:10;:12::i;:::-;26332:7;26299:18;:41::i;:::-;26291:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26405:39;26419:4;26425:2;26429:7;26438:5;26405:13;:39::i;:::-;26124:328;;;;:::o;43081:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;43032:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;44812:679::-;44885:13;44919:16;44927:7;44919;:16::i;:::-;44911:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;45002:23;45028:10;:19;45039:7;45028:19;;;;;;;;;;;45002:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45058:18;45079:10;:8;:10::i;:::-;45058:31;;45187:1;45171:4;45165:18;:23;45161:72;;;45212:9;45205:16;;;;;;45161:72;45363:1;45343:9;45337:23;:27;45333:108;;;45412:4;45418:9;45395:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45381:48;;;;;;45333:108;45460:23;45475:7;45460:14;:23::i;:::-;45453:30;;;;44812:679;;;;:::o;25227:164::-;25324:4;25348:18;:25;25367:5;25348:25;;;;;;;;;;;;;;;:35;25374:8;25348:35;;;;;;;;;;;;;;;;;;;;;;;;;25341:42;;25227:164;;;;:::o;22204:305::-;22306:4;22358:25;22343:40;;;:11;:40;;;;:105;;;;22415:33;22400:48;;;:11;:48;;;;22343:105;:158;;;;22465:36;22489:11;22465:23;:36::i;:::-;22343:158;22323:178;;22204:305;;;:::o;978:127::-;1085:1;1067:7;:14;;;:19;;;;;;;;;;;978:127;:::o;856:114::-;921:7;948;:14;;;941:21;;856:114;;;:::o;29940:382::-;30034:1;30020:16;;:2;:16;;;;30012:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30093:16;30101:7;30093;:16::i;:::-;30092:17;30084:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30155:45;30184:1;30188:2;30192:7;30155:20;:45::i;:::-;30230:1;30213:9;:13;30223:2;30213:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30261:2;30242:7;:16;30250:7;30242:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30306:7;30302:2;30281:33;;30298:1;30281:33;;;;;;;;;;;;29940:382;;:::o;45647:217::-;45747:16;45755:7;45747;:16::i;:::-;45739:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;45847:9;45825:10;:19;45836:7;45825:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;45647:217;;:::o;27962:127::-;28027:4;28079:1;28051:30;;:7;:16;28059:7;28051:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28044:37;;27962:127;;;:::o;17602:98::-;17655:7;17682:10;17675:17;;17602:98;:::o;31944:174::-;32046:2;32019:15;:24;32035:7;32019:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32102:7;32098:2;32064:46;;32073:23;32088:7;32073:14;:23::i;:::-;32064:46;;;;;;;;;;;;31944:174;;:::o;28256:348::-;28349:4;28374:16;28382:7;28374;:16::i;:::-;28366:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28450:13;28466:23;28481:7;28466:14;:23::i;:::-;28450:39;;28519:5;28508:16;;:7;:16;;;:51;;;;28552:7;28528:31;;:20;28540:7;28528:11;:20::i;:::-;:31;;;28508:51;:87;;;;28563:32;28580:5;28587:7;28563:16;:32::i;:::-;28508:87;28500:96;;;28256:348;;;;:::o;31248:578::-;31407:4;31380:31;;:23;31395:7;31380:14;:23::i;:::-;:31;;;31372:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31490:1;31476:16;;:2;:16;;;;31468:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31546:39;31567:4;31573:2;31577:7;31546:20;:39::i;:::-;31650:29;31667:1;31671:7;31650:8;:29::i;:::-;31711:1;31692:9;:15;31702:4;31692:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31740:1;31723:9;:13;31733:2;31723:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31771:2;31752:7;:16;31760:7;31752:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31810:7;31806:2;31791:27;;31800:4;31791:27;;;;;;;;;;;;31248:578;;;:::o;46093:206::-;46162:20;46174:7;46162:11;:20::i;:::-;46236:1;46205:10;:19;46216:7;46205:19;;;;;;;;;;;46199:33;;;;;:::i;:::-;;;:38;46195:97;;46261:10;:19;46272:7;46261:19;;;;;;;;;;;;46254:26;;;;:::i;:::-;46195:97;46093:206;:::o;32260:315::-;32415:8;32406:17;;:5;:17;;;;32398:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32502:8;32464:18;:25;32483:5;32464:25;;;;;;;;;;;;;;;:35;32490:8;32464:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32548:8;32526:41;;32541:5;32526:41;;;32558:8;32526:41;;;;;;:::i;:::-;;;;;;;;32260:315;;;:::o;27334:::-;27491:28;27501:4;27507:2;27511:7;27491:9;:28::i;:::-;27538:48;27561:4;27567:2;27571:7;27580:5;27538:22;:48::i;:::-;27530:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27334:315;;;;:::o;24075:94::-;24126:13;24152:9;;;;;;;;;;;;;;24075:94;:::o;23493:334::-;23566:13;23600:16;23608:7;23600;:16::i;:::-;23592:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23681:21;23705:10;:8;:10::i;:::-;23681:34;;23757:1;23739:7;23733:21;:25;:86;;;;;;;;;;;;;;;;;23785:7;23794:18;:7;:16;:18::i;:::-;23768:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23733:86;23726:93;;;23493:334;;;:::o;20718:157::-;20803:4;20842:25;20827:40;;;:11;:40;;;;20820:47;;20718:157;;;:::o;46442:751::-;46578:45;46605:4;46611:2;46615:7;46578:26;:45::i;:::-;46796:1;46780:18;;:4;:18;;;;:38;;;;;46816:1;46802:16;;:2;:16;;;;46780:38;46776:404;;;46835:18;46856:4;:22;46861:16;46869:7;46861;:16::i;:::-;46856:22;;;;;;;;;;;;;;;46835:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46898:9;46893:276;46917:1;:8;46913:1;:12;46893:276;;;46963:7;46955:1;46957;46955:4;;;;;;;;:::i;:::-;;;;;;;;:15;46951:203;;;47023:1;47036;47025;:8;:12;;;;:::i;:::-;47023:15;;;;;;;;:::i;:::-;;;;;;;;46995:4;:22;47000:16;47008:7;47000;:16::i;:::-;46995:22;;;;;;;;;;;;;;;47018:1;46995:25;;;;;;;;:::i;:::-;;;;;;;;;:43;;;;47061:4;:22;47066:16;47074:7;47066;:16::i;:::-;47061:22;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;47112:4;:8;47117:2;47112:8;;;;;;;;;;;;;;;47126:7;47112:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46951:203;46927:3;;;;;:::i;:::-;;;;46893:276;;;;46820:360;46776:404;46442:751;;;:::o;30551:360::-;30611:13;30627:23;30642:7;30627:14;:23::i;:::-;30611:39;;30663:48;30684:5;30699:1;30703:7;30663:20;:48::i;:::-;30752:29;30769:1;30773:7;30752:8;:29::i;:::-;30814:1;30794:9;:16;30804:5;30794:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;30833:7;:16;30841:7;30833:16;;;;;;;;;;;;30826:23;;;;;;;;;;;30895:7;30891:1;30867:36;;30876:5;30867:36;;;;;;;;;;;;30600:311;30551:360;:::o;33140:799::-;33295:4;33316:15;:2;:13;;;:15::i;:::-;33312:620;;;33368:2;33352:36;;;33389:12;:10;:12::i;:::-;33403:4;33409:7;33418:5;33352:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33348:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33611:1;33594:6;:13;:18;33590:272;;;33637:60;;;;;;;;;;:::i;:::-;;;;;;;;33590:272;33812:6;33806:13;33797:6;33793:2;33789:15;33782:38;33348:529;33485:41;;;33475:51;;;:6;:51;;;;33468:58;;;;;33312:620;33916:4;33909:11;;33140:799;;;;;;;:::o;18155:723::-;18211:13;18441:1;18432:5;:10;18428:53;;;18459:10;;;;;;;;;;;;;;;;;;;;;18428:53;18491:12;18506:5;18491:20;;18522:14;18547:78;18562:1;18554:4;:9;18547:78;;18580:8;;;;;:::i;:::-;;;;18611:2;18603:10;;;;;:::i;:::-;;;18547:78;;;18635:19;18667:6;18657:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18635:39;;18685:154;18701:1;18692:5;:10;18685:154;;18729:1;18719:11;;;;;:::i;:::-;;;18796:2;18788:5;:10;;;;:::i;:::-;18775:2;:24;;;;:::i;:::-;18762:39;;18745:6;18752;18745:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18825:2;18816:11;;;;;:::i;:::-;;;18685:154;;;18863:6;18849:21;;;;;18155:723;;;;:::o;38267:589::-;38411:45;38438:4;38444:2;38448:7;38411:26;:45::i;:::-;38489:1;38473:18;;:4;:18;;;38469:187;;;38508:40;38540:7;38508:31;:40::i;:::-;38469:187;;;38578:2;38570:10;;:4;:10;;;38566:90;;38597:47;38630:4;38636:7;38597:32;:47::i;:::-;38566:90;38469:187;38684:1;38670:16;;:2;:16;;;38666:183;;;38703:45;38740:7;38703:36;:45::i;:::-;38666:183;;;38776:4;38770:10;;:2;:10;;;38766:83;;38797:40;38825:2;38829:7;38797:27;:40::i;:::-;38766:83;38666:183;38267:589;;;:::o;9644:387::-;9704:4;9912:12;9979:7;9967:20;9959:28;;10022:1;10015:4;:8;10008:15;;;9644:387;;;:::o;34511:126::-;;;;:::o;39579:164::-;39683:10;:17;;;;39656:15;:24;39672:7;39656:24;;;;;;;;;;;:44;;;;39711:10;39727:7;39711:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39579:164;:::o;40370:988::-;40636:22;40686:1;40661:22;40678:4;40661:16;:22::i;:::-;:26;;;;:::i;:::-;40636:51;;40698:18;40719:17;:26;40737:7;40719:26;;;;;;;;;;;;40698:47;;40866:14;40852:10;:28;40848:328;;40897:19;40919:12;:18;40932:4;40919:18;;;;;;;;;;;;;;;:34;40938:14;40919:34;;;;;;;;;;;;40897:56;;41003:11;40970:12;:18;40983:4;40970:18;;;;;;;;;;;;;;;:30;40989:10;40970:30;;;;;;;;;;;:44;;;;41120:10;41087:17;:30;41105:11;41087:30;;;;;;;;;;;:43;;;;40882:294;40848:328;41272:17;:26;41290:7;41272:26;;;;;;;;;;;41265:33;;;41316:12;:18;41329:4;41316:18;;;;;;;;;;;;;;;:34;41335:14;41316:34;;;;;;;;;;;41309:41;;;40451:907;;40370:988;;:::o;41653:1079::-;41906:22;41951:1;41931:10;:17;;;;:21;;;;:::i;:::-;41906:46;;41963:18;41984:15;:24;42000:7;41984:24;;;;;;;;;;;;41963:45;;42335:19;42357:10;42368:14;42357:26;;;;;;;;:::i;:::-;;;;;;;;;;42335:48;;42421:11;42396:10;42407;42396:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42532:10;42501:15;:28;42517:11;42501:28;;;;;;;;;;;:41;;;;42673:15;:24;42689:7;42673:24;;;;;;;;;;;42666:31;;;42708:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41724:1008;;;41653:1079;:::o;39157:221::-;39242:14;39259:20;39276:2;39259:16;:20::i;:::-;39242:37;;39317:7;39290:12;:16;39303:2;39290:16;;;;;;;;;;;;;;;:24;39307:6;39290:24;;;;;;;;;;;:34;;;;39364:6;39335:17;:26;39353:7;39335:26;;;;;;;;;;;:35;;;;39231:147;39157:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::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::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:135::-;2321:5;2359:6;2346:20;2337:29;;2375:31;2400:5;2375:31;:::i;:::-;2277:135;;;;:::o;2418:329::-;2477:6;2526:2;2514:9;2505:7;2501:23;2497:32;2494:119;;;2532:79;;:::i;:::-;2494:119;2652:1;2677:53;2722:7;2713:6;2702:9;2698:22;2677:53;:::i;:::-;2667:63;;2623:117;2418:329;;;;:::o;2753:474::-;2821:6;2829;2878:2;2866:9;2857:7;2853:23;2849:32;2846:119;;;2884:79;;:::i;:::-;2846:119;3004:1;3029:53;3074:7;3065:6;3054:9;3050:22;3029:53;:::i;:::-;3019:63;;2975:117;3131:2;3157:53;3202:7;3193:6;3182:9;3178:22;3157:53;:::i;:::-;3147:63;;3102:118;2753:474;;;;;:::o;3233:799::-;3320:6;3328;3336;3385:2;3373:9;3364:7;3360:23;3356:32;3353:119;;;3391:79;;:::i;:::-;3353:119;3511:1;3536:53;3581:7;3572:6;3561:9;3557:22;3536:53;:::i;:::-;3526:63;;3482:117;3638:2;3664:53;3709:7;3700:6;3689:9;3685:22;3664:53;:::i;:::-;3654:63;;3609:118;3794:2;3783:9;3779:18;3766:32;3825:18;3817:6;3814:30;3811:117;;;3847:79;;:::i;:::-;3811:117;3952:63;4007:7;3998:6;3987:9;3983:22;3952:63;:::i;:::-;3942:73;;3737:288;3233:799;;;;;:::o;4038:619::-;4115:6;4123;4131;4180:2;4168:9;4159:7;4155:23;4151:32;4148:119;;;4186:79;;:::i;:::-;4148:119;4306:1;4331:53;4376:7;4367:6;4356:9;4352:22;4331:53;:::i;:::-;4321:63;;4277:117;4433:2;4459:53;4504:7;4495:6;4484:9;4480:22;4459:53;:::i;:::-;4449:63;;4404:118;4561:2;4587:53;4632:7;4623:6;4612:9;4608:22;4587:53;:::i;:::-;4577:63;;4532:118;4038:619;;;;;:::o;4663:943::-;4758:6;4766;4774;4782;4831:3;4819:9;4810:7;4806:23;4802:33;4799:120;;;4838:79;;:::i;:::-;4799:120;4958:1;4983:53;5028:7;5019:6;5008:9;5004:22;4983:53;:::i;:::-;4973:63;;4929:117;5085:2;5111:53;5156:7;5147:6;5136:9;5132:22;5111:53;:::i;:::-;5101:63;;5056:118;5213:2;5239:53;5284:7;5275:6;5264:9;5260:22;5239:53;:::i;:::-;5229:63;;5184:118;5369:2;5358:9;5354:18;5341:32;5400:18;5392:6;5389:30;5386:117;;;5422:79;;:::i;:::-;5386:117;5527:62;5581:7;5572:6;5561:9;5557:22;5527:62;:::i;:::-;5517:72;;5312:287;4663:943;;;;;;;:::o;5612:468::-;5677:6;5685;5734:2;5722:9;5713:7;5709:23;5705:32;5702:119;;;5740:79;;:::i;:::-;5702:119;5860:1;5885:53;5930:7;5921:6;5910:9;5906:22;5885:53;:::i;:::-;5875:63;;5831:117;5987:2;6013:50;6055:7;6046:6;6035:9;6031:22;6013:50;:::i;:::-;6003:60;;5958:115;5612:468;;;;;:::o;6086:474::-;6154:6;6162;6211:2;6199:9;6190:7;6186:23;6182:32;6179:119;;;6217:79;;:::i;:::-;6179:119;6337:1;6362:53;6407:7;6398:6;6387:9;6383:22;6362:53;:::i;:::-;6352:63;;6308:117;6464:2;6490:53;6535:7;6526:6;6515:9;6511:22;6490:53;:::i;:::-;6480:63;;6435:118;6086:474;;;;;:::o;6566:327::-;6624:6;6673:2;6661:9;6652:7;6648:23;6644:32;6641:119;;;6679:79;;:::i;:::-;6641:119;6799:1;6824:52;6868:7;6859:6;6848:9;6844:22;6824:52;:::i;:::-;6814:62;;6770:116;6566:327;;;;:::o;6899:349::-;6968:6;7017:2;7005:9;6996:7;6992:23;6988:32;6985:119;;;7023:79;;:::i;:::-;6985:119;7143:1;7168:63;7223:7;7214:6;7203:9;7199:22;7168:63;:::i;:::-;7158:73;;7114:127;6899:349;;;;:::o;7254:329::-;7313:6;7362:2;7350:9;7341:7;7337:23;7333:32;7330:119;;;7368:79;;:::i;:::-;7330:119;7488:1;7513:53;7558:7;7549:6;7538:9;7534:22;7513:53;:::i;:::-;7503:63;;7459:117;7254:329;;;;:::o;7589:325::-;7646:6;7695:2;7683:9;7674:7;7670:23;7666:32;7663:119;;;7701:79;;:::i;:::-;7663:119;7821:1;7846:51;7889:7;7880:6;7869:9;7865:22;7846:51;:::i;:::-;7836:61;;7792:115;7589:325;;;;:::o;7920:179::-;7989:10;8010:46;8052:3;8044:6;8010:46;:::i;:::-;8088:4;8083:3;8079:14;8065:28;;7920:179;;;;:::o;8105:118::-;8192:24;8210:5;8192:24;:::i;:::-;8187:3;8180:37;8105:118;;:::o;8259:732::-;8378:3;8407:54;8455:5;8407:54;:::i;:::-;8477:86;8556:6;8551:3;8477:86;:::i;:::-;8470:93;;8587:56;8637:5;8587:56;:::i;:::-;8666:7;8697:1;8682:284;8707:6;8704:1;8701:13;8682:284;;;8783:6;8777:13;8810:63;8869:3;8854:13;8810:63;:::i;:::-;8803:70;;8896:60;8949:6;8896:60;:::i;:::-;8886:70;;8742:224;8729:1;8726;8722:9;8717:14;;8682:284;;;8686:14;8982:3;8975:10;;8383:608;;;8259:732;;;;:::o;8997:109::-;9078:21;9093:5;9078:21;:::i;:::-;9073:3;9066:34;8997:109;;:::o;9112:360::-;9198:3;9226:38;9258:5;9226:38;:::i;:::-;9280:70;9343:6;9338:3;9280:70;:::i;:::-;9273:77;;9359:52;9404:6;9399:3;9392:4;9385:5;9381:16;9359:52;:::i;:::-;9436:29;9458:6;9436:29;:::i;:::-;9431:3;9427:39;9420:46;;9202:270;9112:360;;;;:::o;9478:364::-;9566:3;9594:39;9627:5;9594:39;:::i;:::-;9649:71;9713:6;9708:3;9649:71;:::i;:::-;9642:78;;9729:52;9774:6;9769:3;9762:4;9755:5;9751:16;9729:52;:::i;:::-;9806:29;9828:6;9806:29;:::i;:::-;9801:3;9797:39;9790:46;;9570:272;9478:364;;;;:::o;9848:377::-;9954:3;9982:39;10015:5;9982:39;:::i;:::-;10037:89;10119:6;10114:3;10037:89;:::i;:::-;10030:96;;10135:52;10180:6;10175:3;10168:4;10161:5;10157:16;10135:52;:::i;:::-;10212:6;10207:3;10203:16;10196:23;;9958:267;9848:377;;;;:::o;10231:365::-;10373:3;10394:66;10458:1;10453:3;10394:66;:::i;:::-;10387:73;;10469:93;10558:3;10469:93;:::i;:::-;10587:2;10582:3;10578:12;10571:19;;10231:365;;;:::o;10602:366::-;10744:3;10765:67;10829:2;10824:3;10765:67;:::i;:::-;10758:74;;10841:93;10930:3;10841:93;:::i;:::-;10959:2;10954:3;10950:12;10943:19;;10602:366;;;:::o;10974:::-;11116:3;11137:67;11201:2;11196:3;11137:67;:::i;:::-;11130:74;;11213:93;11302:3;11213:93;:::i;:::-;11331:2;11326:3;11322:12;11315:19;;10974:366;;;:::o;11346:::-;11488:3;11509:67;11573:2;11568:3;11509:67;:::i;:::-;11502:74;;11585:93;11674:3;11585:93;:::i;:::-;11703:2;11698:3;11694:12;11687:19;;11346:366;;;:::o;11718:::-;11860:3;11881:67;11945:2;11940:3;11881:67;:::i;:::-;11874:74;;11957:93;12046:3;11957:93;:::i;:::-;12075:2;12070:3;12066:12;12059:19;;11718:366;;;:::o;12090:::-;12232:3;12253:67;12317:2;12312:3;12253:67;:::i;:::-;12246:74;;12329:93;12418:3;12329:93;:::i;:::-;12447:2;12442:3;12438:12;12431:19;;12090:366;;;:::o;12462:::-;12604:3;12625:67;12689:2;12684:3;12625:67;:::i;:::-;12618:74;;12701:93;12790:3;12701:93;:::i;:::-;12819:2;12814:3;12810:12;12803:19;;12462:366;;;:::o;12834:::-;12976:3;12997:67;13061:2;13056:3;12997:67;:::i;:::-;12990:74;;13073:93;13162:3;13073:93;:::i;:::-;13191:2;13186:3;13182:12;13175:19;;12834:366;;;:::o;13206:365::-;13348:3;13369:66;13433:1;13428:3;13369:66;:::i;:::-;13362:73;;13444:93;13533:3;13444:93;:::i;:::-;13562:2;13557:3;13553:12;13546:19;;13206:365;;;:::o;13577:366::-;13719:3;13740:67;13804:2;13799:3;13740:67;:::i;:::-;13733:74;;13816:93;13905:3;13816:93;:::i;:::-;13934:2;13929:3;13925:12;13918:19;;13577:366;;;:::o;13949:::-;14091:3;14112:67;14176:2;14171:3;14112:67;:::i;:::-;14105:74;;14188:93;14277:3;14188:93;:::i;:::-;14306:2;14301:3;14297:12;14290:19;;13949:366;;;:::o;14321:::-;14463:3;14484:67;14548:2;14543:3;14484:67;:::i;:::-;14477:74;;14560:93;14649:3;14560:93;:::i;:::-;14678:2;14673:3;14669:12;14662:19;;14321:366;;;:::o;14693:::-;14835:3;14856:67;14920:2;14915:3;14856:67;:::i;:::-;14849:74;;14932:93;15021:3;14932:93;:::i;:::-;15050:2;15045:3;15041:12;15034:19;;14693:366;;;:::o;15065:::-;15207:3;15228:67;15292:2;15287:3;15228:67;:::i;:::-;15221:74;;15304:93;15393:3;15304:93;:::i;:::-;15422:2;15417:3;15413:12;15406:19;;15065:366;;;:::o;15437:::-;15579:3;15600:67;15664:2;15659:3;15600:67;:::i;:::-;15593:74;;15676:93;15765:3;15676:93;:::i;:::-;15794:2;15789:3;15785:12;15778:19;;15437:366;;;:::o;15809:::-;15951:3;15972:67;16036:2;16031:3;15972:67;:::i;:::-;15965:74;;16048:93;16137:3;16048:93;:::i;:::-;16166:2;16161:3;16157:12;16150:19;;15809:366;;;:::o;16181:::-;16323:3;16344:67;16408:2;16403:3;16344:67;:::i;:::-;16337:74;;16420:93;16509:3;16420:93;:::i;:::-;16538:2;16533:3;16529:12;16522:19;;16181:366;;;:::o;16553:::-;16695:3;16716:67;16780:2;16775:3;16716:67;:::i;:::-;16709:74;;16792:93;16881:3;16792:93;:::i;:::-;16910:2;16905:3;16901:12;16894:19;;16553:366;;;:::o;16925:::-;17067:3;17088:67;17152:2;17147:3;17088:67;:::i;:::-;17081:74;;17164:93;17253:3;17164:93;:::i;:::-;17282:2;17277:3;17273:12;17266:19;;16925:366;;;:::o;17297:::-;17439:3;17460:67;17524:2;17519:3;17460:67;:::i;:::-;17453:74;;17536:93;17625:3;17536:93;:::i;:::-;17654:2;17649:3;17645:12;17638:19;;17297:366;;;:::o;17669:::-;17811:3;17832:67;17896:2;17891:3;17832:67;:::i;:::-;17825:74;;17908:93;17997:3;17908:93;:::i;:::-;18026:2;18021:3;18017:12;18010:19;;17669:366;;;:::o;18041:108::-;18118:24;18136:5;18118:24;:::i;:::-;18113:3;18106:37;18041:108;;:::o;18155:118::-;18242:24;18260:5;18242:24;:::i;:::-;18237:3;18230:37;18155:118;;:::o;18279:112::-;18362:22;18378:5;18362:22;:::i;:::-;18357:3;18350:35;18279:112;;:::o;18397:435::-;18577:3;18599:95;18690:3;18681:6;18599:95;:::i;:::-;18592:102;;18711:95;18802:3;18793:6;18711:95;:::i;:::-;18704:102;;18823:3;18816:10;;18397:435;;;;;:::o;18838:222::-;18931:4;18969:2;18958:9;18954:18;18946:26;;18982:71;19050:1;19039:9;19035:17;19026:6;18982:71;:::i;:::-;18838:222;;;;:::o;19066:640::-;19261:4;19299:3;19288:9;19284:19;19276:27;;19313:71;19381:1;19370:9;19366:17;19357:6;19313:71;:::i;:::-;19394:72;19462:2;19451:9;19447:18;19438:6;19394:72;:::i;:::-;19476;19544:2;19533:9;19529:18;19520:6;19476:72;:::i;:::-;19595:9;19589:4;19585:20;19580:2;19569:9;19565:18;19558:48;19623:76;19694:4;19685:6;19623:76;:::i;:::-;19615:84;;19066:640;;;;;;;:::o;19712:320::-;19827:4;19865:2;19854:9;19850:18;19842:26;;19878:71;19946:1;19935:9;19931:17;19922:6;19878:71;:::i;:::-;19959:66;20021:2;20010:9;20006:18;19997:6;19959:66;:::i;:::-;19712:320;;;;;:::o;20038:373::-;20181:4;20219:2;20208:9;20204:18;20196:26;;20268:9;20262:4;20258:20;20254:1;20243:9;20239:17;20232:47;20296:108;20399:4;20390:6;20296:108;:::i;:::-;20288:116;;20038:373;;;;:::o;20417:210::-;20504:4;20542:2;20531:9;20527:18;20519:26;;20555:65;20617:1;20606:9;20602:17;20593:6;20555:65;:::i;:::-;20417:210;;;;:::o;20633:313::-;20746:4;20784:2;20773:9;20769:18;20761:26;;20833:9;20827:4;20823:20;20819:1;20808:9;20804:17;20797:47;20861:78;20934:4;20925:6;20861:78;:::i;:::-;20853:86;;20633:313;;;;:::o;20952:419::-;21118:4;21156:2;21145:9;21141:18;21133:26;;21205:9;21199:4;21195:20;21191:1;21180:9;21176:17;21169:47;21233:131;21359:4;21233:131;:::i;:::-;21225:139;;20952:419;;;:::o;21377:::-;21543:4;21581:2;21570:9;21566:18;21558:26;;21630:9;21624:4;21620:20;21616:1;21605:9;21601:17;21594:47;21658:131;21784:4;21658:131;:::i;:::-;21650:139;;21377:419;;;:::o;21802:::-;21968:4;22006:2;21995:9;21991:18;21983:26;;22055:9;22049:4;22045:20;22041:1;22030:9;22026:17;22019:47;22083:131;22209:4;22083:131;:::i;:::-;22075:139;;21802:419;;;:::o;22227:::-;22393:4;22431:2;22420:9;22416:18;22408:26;;22480:9;22474:4;22470:20;22466:1;22455:9;22451:17;22444:47;22508:131;22634:4;22508:131;:::i;:::-;22500:139;;22227:419;;;:::o;22652:::-;22818:4;22856:2;22845:9;22841:18;22833:26;;22905:9;22899:4;22895:20;22891:1;22880:9;22876:17;22869:47;22933:131;23059:4;22933:131;:::i;:::-;22925:139;;22652:419;;;:::o;23077:::-;23243:4;23281:2;23270:9;23266:18;23258:26;;23330:9;23324:4;23320:20;23316:1;23305:9;23301:17;23294:47;23358:131;23484:4;23358:131;:::i;:::-;23350:139;;23077:419;;;:::o;23502:::-;23668:4;23706:2;23695:9;23691:18;23683:26;;23755:9;23749:4;23745:20;23741:1;23730:9;23726:17;23719:47;23783:131;23909:4;23783:131;:::i;:::-;23775:139;;23502:419;;;:::o;23927:::-;24093:4;24131:2;24120:9;24116:18;24108:26;;24180:9;24174:4;24170:20;24166:1;24155:9;24151:17;24144:47;24208:131;24334:4;24208:131;:::i;:::-;24200:139;;23927:419;;;:::o;24352:::-;24518:4;24556:2;24545:9;24541:18;24533:26;;24605:9;24599:4;24595:20;24591:1;24580:9;24576:17;24569:47;24633:131;24759:4;24633:131;:::i;:::-;24625:139;;24352:419;;;:::o;24777:::-;24943:4;24981:2;24970:9;24966:18;24958:26;;25030:9;25024:4;25020:20;25016:1;25005:9;25001:17;24994:47;25058:131;25184:4;25058:131;:::i;:::-;25050:139;;24777:419;;;:::o;25202:::-;25368:4;25406:2;25395:9;25391:18;25383:26;;25455:9;25449:4;25445:20;25441:1;25430:9;25426:17;25419:47;25483:131;25609:4;25483:131;:::i;:::-;25475:139;;25202:419;;;:::o;25627:::-;25793:4;25831:2;25820:9;25816:18;25808:26;;25880:9;25874:4;25870:20;25866:1;25855:9;25851:17;25844:47;25908:131;26034:4;25908:131;:::i;:::-;25900:139;;25627:419;;;:::o;26052:::-;26218:4;26256:2;26245:9;26241:18;26233:26;;26305:9;26299:4;26295:20;26291:1;26280:9;26276:17;26269:47;26333:131;26459:4;26333:131;:::i;:::-;26325:139;;26052:419;;;:::o;26477:::-;26643:4;26681:2;26670:9;26666:18;26658:26;;26730:9;26724:4;26720:20;26716:1;26705:9;26701:17;26694:47;26758:131;26884:4;26758:131;:::i;:::-;26750:139;;26477:419;;;:::o;26902:::-;27068:4;27106:2;27095:9;27091:18;27083:26;;27155:9;27149:4;27145:20;27141:1;27130:9;27126:17;27119:47;27183:131;27309:4;27183:131;:::i;:::-;27175:139;;26902:419;;;:::o;27327:::-;27493:4;27531:2;27520:9;27516:18;27508:26;;27580:9;27574:4;27570:20;27566:1;27555:9;27551:17;27544:47;27608:131;27734:4;27608:131;:::i;:::-;27600:139;;27327:419;;;:::o;27752:::-;27918:4;27956:2;27945:9;27941:18;27933:26;;28005:9;27999:4;27995:20;27991:1;27980:9;27976:17;27969:47;28033:131;28159:4;28033:131;:::i;:::-;28025:139;;27752:419;;;:::o;28177:::-;28343:4;28381:2;28370:9;28366:18;28358:26;;28430:9;28424:4;28420:20;28416:1;28405:9;28401:17;28394:47;28458:131;28584:4;28458:131;:::i;:::-;28450:139;;28177:419;;;:::o;28602:::-;28768:4;28806:2;28795:9;28791:18;28783:26;;28855:9;28849:4;28845:20;28841:1;28830:9;28826:17;28819:47;28883:131;29009:4;28883:131;:::i;:::-;28875:139;;28602:419;;;:::o;29027:::-;29193:4;29231:2;29220:9;29216:18;29208:26;;29280:9;29274:4;29270:20;29266:1;29255:9;29251:17;29244:47;29308:131;29434:4;29308:131;:::i;:::-;29300:139;;29027:419;;;:::o;29452:::-;29618:4;29656:2;29645:9;29641:18;29633:26;;29705:9;29699:4;29695:20;29691:1;29680:9;29676:17;29669:47;29733:131;29859:4;29733:131;:::i;:::-;29725:139;;29452:419;;;:::o;29877:222::-;29970:4;30008:2;29997:9;29993:18;29985:26;;30021:71;30089:1;30078:9;30074:17;30065:6;30021:71;:::i;:::-;29877:222;;;;:::o;30105:214::-;30194:4;30232:2;30221:9;30217:18;30209:26;;30245:67;30309:1;30298:9;30294:17;30285:6;30245:67;:::i;:::-;30105:214;;;;:::o;30325:129::-;30359:6;30386:20;;:::i;:::-;30376:30;;30415:33;30443:4;30435:6;30415:33;:::i;:::-;30325:129;;;:::o;30460:75::-;30493:6;30526:2;30520:9;30510:19;;30460:75;:::o;30541:307::-;30602:4;30692:18;30684:6;30681:30;30678:56;;;30714:18;;:::i;:::-;30678:56;30752:29;30774:6;30752:29;:::i;:::-;30744:37;;30836:4;30830;30826:15;30818:23;;30541:307;;;:::o;30854:308::-;30916:4;31006:18;30998:6;30995:30;30992:56;;;31028:18;;:::i;:::-;30992:56;31066:29;31088:6;31066:29;:::i;:::-;31058:37;;31150:4;31144;31140:15;31132:23;;30854:308;;;:::o;31168:132::-;31235:4;31258:3;31250:11;;31288:4;31283:3;31279:14;31271:22;;31168:132;;;:::o;31306:114::-;31373:6;31407:5;31401:12;31391:22;;31306:114;;;:::o;31426:98::-;31477:6;31511:5;31505:12;31495:22;;31426:98;;;:::o;31530:99::-;31582:6;31616:5;31610:12;31600:22;;31530:99;;;:::o;31635:113::-;31705:4;31737;31732:3;31728:14;31720:22;;31635:113;;;:::o;31754:184::-;31853:11;31887:6;31882:3;31875:19;31927:4;31922:3;31918:14;31903:29;;31754:184;;;;:::o;31944:168::-;32027:11;32061:6;32056:3;32049:19;32101:4;32096:3;32092:14;32077:29;;31944:168;;;;:::o;32118:169::-;32202:11;32236:6;32231:3;32224:19;32276:4;32271:3;32267:14;32252:29;;32118:169;;;;:::o;32293:148::-;32395:11;32432:3;32417:18;;32293:148;;;;:::o;32447:305::-;32487:3;32506:20;32524:1;32506:20;:::i;:::-;32501:25;;32540:20;32558:1;32540:20;:::i;:::-;32535:25;;32694:1;32626:66;32622:74;32619:1;32616:81;32613:107;;;32700:18;;:::i;:::-;32613:107;32744:1;32741;32737:9;32730:16;;32447:305;;;;:::o;32758:185::-;32798:1;32815:20;32833:1;32815:20;:::i;:::-;32810:25;;32849:20;32867:1;32849:20;:::i;:::-;32844:25;;32888:1;32878:35;;32893:18;;:::i;:::-;32878:35;32935:1;32932;32928:9;32923:14;;32758:185;;;;:::o;32949:191::-;32989:4;33009:20;33027:1;33009:20;:::i;:::-;33004:25;;33043:20;33061:1;33043:20;:::i;:::-;33038:25;;33082:1;33079;33076:8;33073:34;;;33087:18;;:::i;:::-;33073:34;33132:1;33129;33125:9;33117:17;;32949:191;;;;:::o;33146:96::-;33183:7;33212:24;33230:5;33212:24;:::i;:::-;33201:35;;33146:96;;;:::o;33248:90::-;33282:7;33325:5;33318:13;33311:21;33300:32;;33248:90;;;:::o;33344:149::-;33380:7;33420:66;33413:5;33409:78;33398:89;;33344:149;;;:::o;33499:126::-;33536:7;33576:42;33569:5;33565:54;33554:65;;33499:126;;;:::o;33631:77::-;33668:7;33697:5;33686:16;;33631:77;;;:::o;33714:86::-;33749:7;33789:4;33782:5;33778:16;33767:27;;33714:86;;;:::o;33806:154::-;33890:6;33885:3;33880;33867:30;33952:1;33943:6;33938:3;33934:16;33927:27;33806:154;;;:::o;33966:307::-;34034:1;34044:113;34058:6;34055:1;34052:13;34044:113;;;34143:1;34138:3;34134:11;34128:18;34124:1;34119:3;34115:11;34108:39;34080:2;34077:1;34073:10;34068:15;;34044:113;;;34175:6;34172:1;34169:13;34166:101;;;34255:1;34246:6;34241:3;34237:16;34230:27;34166:101;34015:258;33966:307;;;:::o;34279:320::-;34323:6;34360:1;34354:4;34350:12;34340:22;;34407:1;34401:4;34397:12;34428:18;34418:81;;34484:4;34476:6;34472:17;34462:27;;34418:81;34546:2;34538:6;34535:14;34515:18;34512:38;34509:84;;;34565:18;;:::i;:::-;34509:84;34330:269;34279:320;;;:::o;34605:281::-;34688:27;34710:4;34688:27;:::i;:::-;34680:6;34676:40;34818:6;34806:10;34803:22;34782:18;34770:10;34767:34;34764:62;34761:88;;;34829:18;;:::i;:::-;34761:88;34869:10;34865:2;34858:22;34648:238;34605:281;;:::o;34892:233::-;34931:3;34954:24;34972:5;34954:24;:::i;:::-;34945:33;;35000:66;34993:5;34990:77;34987:103;;;35070:18;;:::i;:::-;34987:103;35117:1;35110:5;35106:13;35099:20;;34892:233;;;:::o;35131:176::-;35163:1;35180:20;35198:1;35180:20;:::i;:::-;35175:25;;35214:20;35232:1;35214:20;:::i;:::-;35209:25;;35253:1;35243:35;;35258:18;;:::i;:::-;35243:35;35299:1;35296;35292:9;35287:14;;35131:176;;;;:::o;35313:180::-;35361:77;35358:1;35351:88;35458:4;35455:1;35448:15;35482:4;35479:1;35472:15;35499:180;35547:77;35544:1;35537:88;35644:4;35641:1;35634:15;35668:4;35665:1;35658:15;35685:180;35733:77;35730:1;35723:88;35830:4;35827:1;35820:15;35854:4;35851:1;35844:15;35871:180;35919:77;35916:1;35909:88;36016:4;36013:1;36006:15;36040:4;36037:1;36030:15;36057:180;36105:77;36102:1;36095:88;36202:4;36199:1;36192:15;36226:4;36223:1;36216:15;36243:180;36291:77;36288:1;36281:88;36388:4;36385:1;36378:15;36412:4;36409:1;36402:15;36429:117;36538:1;36535;36528:12;36552:117;36661:1;36658;36651:12;36675:117;36784:1;36781;36774:12;36798:117;36907:1;36904;36897:12;36921:102;36962:6;37013:2;37009:7;37004:2;36997:5;36993:14;36989:28;36979:38;;36921:102;;;:::o;37029:159::-;37169:11;37165:1;37157:6;37153:14;37146:35;37029:159;:::o;37194:230::-;37334:34;37330:1;37322:6;37318:14;37311:58;37403:13;37398:2;37390:6;37386:15;37379:38;37194:230;:::o;37430:237::-;37570:34;37566:1;37558:6;37554:14;37547:58;37639:20;37634:2;37626:6;37622:15;37615:45;37430:237;:::o;37673:178::-;37813:30;37809:1;37801:6;37797:14;37790:54;37673:178;:::o;37857:223::-;37997:34;37993:1;37985:6;37981:14;37974:58;38066:6;38061:2;38053:6;38049:15;38042:31;37857:223;:::o;38086:175::-;38226:27;38222:1;38214:6;38210:14;38203:51;38086:175;:::o;38267:231::-;38407:34;38403:1;38395:6;38391:14;38384:58;38476:14;38471:2;38463:6;38459:15;38452:39;38267:231;:::o;38504:243::-;38644:34;38640:1;38632:6;38628:14;38621:58;38713:26;38708:2;38700:6;38696:15;38689:51;38504:243;:::o;38753:158::-;38893:10;38889:1;38881:6;38877:14;38870:34;38753:158;:::o;38917:229::-;39057:34;39053:1;39045:6;39041:14;39034:58;39126:12;39121:2;39113:6;39109:15;39102:37;38917:229;:::o;39152:228::-;39292:34;39288:1;39280:6;39276:14;39269:58;39361:11;39356:2;39348:6;39344:15;39337:36;39152:228;:::o;39386:233::-;39526:34;39522:1;39514:6;39510:14;39503:58;39595:16;39590:2;39582:6;39578:15;39571:41;39386:233;:::o;39625:179::-;39765:31;39761:1;39753:6;39749:14;39742:55;39625:179;:::o;39810:182::-;39950:34;39946:1;39938:6;39934:14;39927:58;39810:182;:::o;39998:236::-;40138:34;40134:1;40126:6;40122:14;40115:58;40207:19;40202:2;40194:6;40190:15;40183:44;39998:236;:::o;40240:231::-;40380:34;40376:1;40368:6;40364:14;40357:58;40449:14;40444:2;40436:6;40432:15;40425:39;40240:231;:::o;40477:228::-;40617:34;40613:1;40605:6;40601:14;40594:58;40686:11;40681:2;40673:6;40669:15;40662:36;40477:228;:::o;40711:234::-;40851:34;40847:1;40839:6;40835:14;40828:58;40920:17;40915:2;40907:6;40903:15;40896:42;40711:234;:::o;40951:220::-;41091:34;41087:1;41079:6;41075:14;41068:58;41160:3;41155:2;41147:6;41143:15;41136:28;40951:220;:::o;41177:236::-;41317:34;41313:1;41305:6;41301:14;41294:58;41386:19;41381:2;41373:6;41369:15;41362:44;41177:236;:::o;41419:231::-;41559:34;41555:1;41547:6;41543:14;41536:58;41628:14;41623:2;41615:6;41611:15;41604:39;41419:231;:::o;41656:122::-;41729:24;41747:5;41729:24;:::i;:::-;41722:5;41719:35;41709:63;;41768:1;41765;41758:12;41709:63;41656:122;:::o;41784:116::-;41854:21;41869:5;41854:21;:::i;:::-;41847:5;41844:32;41834:60;;41890:1;41887;41880:12;41834:60;41784:116;:::o;41906:120::-;41978:23;41995:5;41978:23;:::i;:::-;41971:5;41968:34;41958:62;;42016:1;42013;42006:12;41958:62;41906:120;:::o;42032:122::-;42105:24;42123:5;42105:24;:::i;:::-;42098:5;42095:35;42085:63;;42144:1;42141;42134:12;42085:63;42032:122;:::o;42160:118::-;42231:22;42247:5;42231:22;:::i;:::-;42224:5;42221:33;42211:61;;42268:1;42265;42258:12;42211:61;42160:118;:::o

Swarm Source

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