ETH Price: $2,434.93 (-2.22%)

Token

Advent Worlds (ADVENT)
 

Overview

Max Total Supply

1,111 ADVENT

Holders

312

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 ADVENT
0x458DD01d504ab70748b8A48dd9596Bc9A79B2f30
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:
Advent_Worlds

Compiler Version
v0.8.13+commit.abaa5c0e

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-02
*/

// SPDX-License-Identifier: MIT

       /* Developed by Advent Robots https://adventrobots.com/
       
       ** Flattened file, Containing all extensions.
       ** Contract "Advent_Worlds" start at line 1353.
  

        pragma solidity ^0.8.0;
        OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
        @dev String operations.*/


        library Strings {
            bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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

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

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

        // File: gist-270e50cc401a88221663666c2f449393/Context.sol


    pragma solidity ^0.8.0;

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

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

        // File: gist-270e50cc401a88221663666c2f449393/Ownable.sol


        pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

        // File: gist-270e50cc401a88221663666c2f449393/Address.sol


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

        pragma solidity ^0.8.1;

        /**
        * @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
            * ====
            *
            * [IMPORTANT]
            * ====
            * You shouldn't rely on `isContract` to protect against flash loan attacks!
            *
            * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
            * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
            * constructor.
            * ====
            */
            function isContract(address account) internal view returns (bool) {
                // This method relies on extcodesize/address.code.length, which returns 0
                // for contracts in construction, since the code is only stored at the end
                // of the constructor execution.

                return account.code.length > 0;
            }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        // File: gist-270e50cc401a88221663666c2f449393/IERC721Receiver.sol


        // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

        pragma solidity ^0.8.0;

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

        // File: gist-270e50cc401a88221663666c2f449393/IERC165.sol


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

        pragma solidity ^0.8.0;

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

        // File: gist-270e50cc401a88221663666c2f449393/ERC165.sol


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

        pragma solidity ^0.8.0;


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

        // File: gist-270e50cc401a88221663666c2f449393/IERC721.sol


        // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

        pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

        // File: gist-270e50cc401a88221663666c2f449393/IERC721Enumerable.sol


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

        pragma solidity ^0.8.0;


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

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

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

        // File: gist-270e50cc401a88221663666c2f449393/IERC721Metadata.sol


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

        pragma solidity ^0.8.0;


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

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

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

        // File: gist-270e50cc401a88221663666c2f449393/ERC721A.sol


        // Creator: Chiru Labs

        pragma solidity ^0.8.0;









        /**
        * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
        * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
        *
        * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
        *
        * Does not support burning tokens to address(0).
        *
        * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply
        */
        contract ERC721A is
            Context,
            ERC165,
            IERC721,
            IERC721Metadata,
            IERC721Enumerable
        {
            using Address for address;
            using Strings for uint256;

            struct TokenOwnership {
                address addr;
                uint64 startTimestamp;
            }

            struct AddressData {
                uint128 balance;
                uint128 numberMinted;
            }

            uint256 internal currentIndex;

            // Token name
            string private _name;

            // Token symbol
            string private _symbol;

            // Mapping from token ID to ownership details
            // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
            mapping(uint256 => TokenOwnership) internal _ownerships;

            // Mapping owner address to address data
            mapping(address => AddressData) private _addressData;

            // 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;

            constructor(string memory name_, string memory symbol_) {
                _name = name_;
                _symbol = symbol_;
            }

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

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

            /**
            * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
            * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
            * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
            */
            function tokenOfOwnerByIndex(address owner, uint256 index)
                public
                view
                override
                returns (uint256)
            {
                require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
                uint256 numMintedSoFar = totalSupply();
                uint256 tokenIdsIdx;
                address currOwnershipAddr;

                // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar.
                unchecked {
                    for (uint256 i; i < numMintedSoFar; i++) {
                        TokenOwnership memory ownership = _ownerships[i];
                        if (ownership.addr != address(0)) {
                            currOwnershipAddr = ownership.addr;
                        }
                        if (currOwnershipAddr == owner) {
                            if (tokenIdsIdx == index) {
                                return i;
                            }
                            tokenIdsIdx++;
                        }
                    }
                }

                revert("ERC721A: unable to get token of owner by index");
            }

            /**
            * @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 ||
                    interfaceId == type(IERC721Enumerable).interfaceId ||
                    super.supportsInterface(interfaceId);
            }

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

            function _numberMinted(address owner) internal view returns (uint256) {
                require(
                    owner != address(0),
                    "ERC721A: number minted query for the zero address"
                );
                return uint256(_addressData[owner].numberMinted);
            }

            /**
            * Gas spent here starts off proportional to the maximum mint batch size.
            * It gradually moves to O(1) as tokens get transferred around in the collection over time.
            */
            function ownershipOf(uint256 tokenId)
                internal
                view
                returns (TokenOwnership memory)
            {
                require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

                unchecked {
                    for (uint256 curr = tokenId; curr >= 0; curr--) {
                        TokenOwnership memory ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }

                revert("ERC721A: unable to determine the owner of token");
            }

            /**
            * @dev See {IERC721-ownerOf}.
            */
            function ownerOf(uint256 tokenId) public view override returns (address) {
                return ownershipOf(tokenId).addr;
            }

            /**
            * @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 override {
                address owner = ERC721A.ownerOf(tokenId);
                require(to != owner, "ERC721A: approval to current owner");

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

                _approve(to, tokenId, owner);
            }

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

                return _tokenApprovals[tokenId];
            }

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

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

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

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

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

            /**
            * @dev See {IERC721-safeTransferFrom}.
            */
            function safeTransferFrom(
                address from,
                address to,
                uint256 tokenId,
                bytes memory _data
            ) public override {
                _transfer(from, to, tokenId);
                require(
                    _checkOnERC721Received(from, to, tokenId, _data),
                    "ERC721A: 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`),
            */
            function _exists(uint256 tokenId) internal view returns (bool) {
                return tokenId < currentIndex;
            }

            function _safeMint(address to, uint256 quantity) internal {
                _safeMint(to, quantity, "");
            }

            /**
            * @dev Safely mints `quantity` tokens and transfers them to `to`.
            *
            * Requirements:
            *
            * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
            * - `quantity` must be greater than 0.
            *
            * Emits a {Transfer} event.
            */
            function _safeMint(
                address to,
                uint256 quantity,
                bytes memory _data
            ) internal {
                _mint(to, quantity, _data, true);
            }

            /**
            * @dev Mints `quantity` tokens and transfers them to `to`.
            *
            * Requirements:
            *
            * - `to` cannot be the zero address.
            * - `quantity` must be greater than 0.
            *
            * Emits a {Transfer} event.
            */
            function _mint(
                address to,
                uint256 quantity,
                bytes memory _data,
                bool safe
            ) internal {
                uint256 startTokenId = currentIndex;
                require(to != address(0), "ERC721A: mint to the zero address");
                require(quantity != 0, "ERC721A: quantity must be greater than 0");

                _beforeTokenTransfers(address(0), to, startTokenId, quantity);

                // Overflows are incredibly unrealistic.
                // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1
                // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1
                unchecked {
                    _addressData[to].balance += uint128(quantity);
                    _addressData[to].numberMinted += uint128(quantity);

                    _ownerships[startTokenId].addr = to;
                    _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

                    uint256 updatedIndex = startTokenId;

                    for (uint256 i; i < quantity; i++) {
                        emit Transfer(address(0), to, updatedIndex);
                        if (safe) {
                            require(
                                _checkOnERC721Received(
                                    address(0),
                                    to,
                                    updatedIndex,
                                    _data
                                ),
                                "ERC721A: transfer to non ERC721Receiver implementer"
                            );
                        }

                        updatedIndex++;
                    }

                    currentIndex = updatedIndex;
                }

                _afterTokenTransfers(address(0), to, startTokenId, quantity);
            }

            /**
            * @dev Transfers `tokenId` from `from` to `to`.
            *
            * 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
            ) private {
                TokenOwnership memory prevOwnership = ownershipOf(tokenId);

                bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
                    getApproved(tokenId) == _msgSender() ||
                    isApprovedForAll(prevOwnership.addr, _msgSender()));

                require(
                    isApprovedOrOwner,
                    "ERC721A: transfer caller is not owner nor approved"
                );

                require(
                    prevOwnership.addr == from,
                    "ERC721A: transfer from incorrect owner"
                );
                require(to != address(0), "ERC721A: transfer to the zero address");

                _beforeTokenTransfers(from, to, tokenId, 1);

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

                // Underflow of the sender's balance is impossible because we check for
                // ownership above and the recipient's balance can't realistically overflow.
                // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
                unchecked {
                    _addressData[from].balance -= 1;
                    _addressData[to].balance += 1;

                    _ownerships[tokenId].addr = to;
                    _ownerships[tokenId].startTimestamp = uint64(block.timestamp);

                    // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
                    // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
                    uint256 nextTokenId = tokenId + 1;
                    if (_ownerships[nextTokenId].addr == address(0)) {
                        if (_exists(nextTokenId)) {
                            _ownerships[nextTokenId].addr = prevOwnership.addr;
                            _ownerships[nextTokenId].startTimestamp = prevOwnership
                                .startTimestamp;
                        }
                    }
                }

                emit Transfer(from, to, tokenId);
                _afterTokenTransfers(from, to, tokenId, 1);
            }

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

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

            /**
            * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
            *
            * startTokenId - the first token id to be transferred
            * quantity - the amount to be transferred
            *
            * 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`.
            */
            function _beforeTokenTransfers(
                address from,
                address to,
                uint256 startTokenId,
                uint256 quantity
            ) internal virtual {}

            /**
            * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
            * minting.
            *
            * startTokenId - the first token id to be transferred
            * quantity - the amount to be transferred
            *
            * Calling conditions:
            *
            * - when `from` and `to` are both non-zero.
            * - `from` and `to` are never both zero.
            */
            function _afterTokenTransfers(
                address from,
                address to,
                uint256 startTokenId,
                uint256 quantity
            ) internal virtual {}
        }
        // File: gist-270e50cc401a88221663666c2f449393/XrootDotDev.sol

        /*

        
        ************************************************************************

        Contract Advent_Worlds
            * Using  OpenZeppelin Contracts, utils/Strings.sol
            * Using  OpenZeppelin Contracts,  access/Ownable.sol
            * Using ERC-721A, Creator: Chiru Labs  */

    pragma solidity 0.8.13;

        contract Advent_Worlds is ERC721A, Ownable {
            using Strings for uint256;

            string public baseURI;
            string public baseExtension = ".json";
            string public notRevealedUri;

        // Max supply is 1111 NFTs
        // Max mint amount Per Tx is 3, and is modifiable functions
        // Max amount of NFTs an address can own is set to 3, It is also Modifiable
        // Cost is Modifiable
        // Public Supply is 1061 as 50 are reserved
            uint256 public cost = 0 ether;
            uint256 public maxSupply = 1111;
            uint256 public maxMintAmount = 3;
            uint256 public nftPerAddressLimit = 3;
       
       // Reserved Tokens Can minted once the rest of Supply is already minted    
            uint256 public ReservedNFT = 50;

       // Contract is pauseable
            bool public paused = false;
            bool public revealed = true;

        // Name and Symbol are not Modifiable once deployed.
        //BaseUri and Hidden MetaData URI Can be changed If required
            constructor(
                string memory _name,
                string memory _symbol,
                string memory _initBaseURI,
                string memory _initNotRevealedUri
            ) ERC721A(_name, _symbol) {
                setBaseURI(_initBaseURI);
                setNotRevealedURI(_initNotRevealedUri);
            }

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

    // public functions
        //Only whitelisted users can mint if onlyWhitelist is set to true.
        //public can mint after setonlywhitelist is set to false
            function mint(uint256 _mintAmount) public payable {
                require(!paused, "Contract is paused");
                uint256 supply = totalSupply();
                require(_mintAmount > 0, "Mint amount must be greater than 0");
                require(supply + _mintAmount <= maxSupply, "Mint amount must be equal to or below available tokens");
                 
                if (msg.sender != owner()) {
                    require(supply + _mintAmount <= maxSupply - ReservedNFT, "Mint amount must be equal to or below available tokens");
                    require(msg.value >= cost * _mintAmount, "Insufficient balance");
                    uint256 ownerTokenCount = balanceOf(msg.sender);
                    require (ownerTokenCount < nftPerAddressLimit, "Mint amount is exceeding Perwallet Token limit");
                    require(_mintAmount <= maxMintAmount, "Mint amount is greater than max mint amount");
                }
                _safeMint(msg.sender, _mintAmount);   
            }

            function walletOfOwner(address _owner)
                public
                view
                returns (uint256[] memory)
            {
                uint256 ownerTokenCount = balanceOf(_owner);
                uint256[] memory tokenIds = new uint256[](ownerTokenCount);
                for (uint256 i; i < ownerTokenCount; i++) {
                tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
                }
                return tokenIds;
            }

            function tokenURI(uint256 tokenId)
                public
                view
                virtual
                override
                returns (string memory)
            {
                require(
                _exists(tokenId),
                "ERC721Metadata: URI query for nonexistent token"
                );
                
                if(revealed == false) {
                    return notRevealedUri;
                }

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

        //only owner funtions
            function reveal() public onlyOwner {
                revealed = true;
            }
            
            function setNftPerAddressLimit(uint256 _limit) public onlyOwner {
                nftPerAddressLimit = _limit;
            }

            function setCost(uint256 _newCost) public onlyOwner {
                cost = _newCost;
            }

            function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
                maxMintAmount = _newmaxMintAmount;
            }
            
            function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
                notRevealedUri = _notRevealedURI;
            }

            function setBaseURI(string memory _newBaseURI) public onlyOwner {
                baseURI = _newBaseURI;
            }

            function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
                baseExtension = _newBaseExtension;
            }

            function pause(bool _state) public onlyOwner {
                paused = _state;
            }


            function seReservedNFT(uint256 _newreserve) public onlyOwner {
                    ReservedNFT = _newreserve;
             }
            

            function withdraw() public payable onlyOwner {
                (bool os, ) = payable(owner()).call{value: address(this).balance}("");
                require(os);
            }
            
            // to Airdrop tokens, Only owner Function
            function AirDrop(address _to, uint256 _mintAmount) public onlyOwner {
                require(!paused);
                require(_mintAmount > 0);
                _safeMint(_to, _mintAmount);
                }
            }

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"AirDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ReservedNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"_newreserve","type":"uint256"}],"name":"seReservedNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e0000000000000000000000000000000000000000000000000000008152506009908051906020019062000051929190620003a5565b506000600b55610457600c556003600d556003600e556032600f556000601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff021916908315150217905550348015620000af57600080fd5b506040516200556d3803806200556d8339818101604052810190620000d59190620005f2565b83838160019080519060200190620000ef929190620003a5565b50806002908051906020019062000108929190620003a5565b5050506200012b6200011f6200015760201b60201c565b6200015f60201b60201c565b6200013c826200022560201b60201c565b6200014d81620002d060201b60201c565b50505050620007c7565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002356200015760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200025b6200037b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ab9062000741565b60405180910390fd5b8060089080519060200190620002cc929190620003a5565b5050565b620002e06200015760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003066200037b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200035f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003569062000741565b60405180910390fd5b80600a908051906020019062000377929190620003a5565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003b39062000792565b90600052602060002090601f016020900481019282620003d7576000855562000423565b82601f10620003f257805160ff191683800117855562000423565b8280016001018555821562000423579182015b828111156200042257825182559160200191906001019062000405565b5b50905062000432919062000436565b5090565b5b808211156200045157600081600090555060010162000437565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004be8262000473565b810181811067ffffffffffffffff82111715620004e057620004df62000484565b5b80604052505050565b6000620004f562000455565b9050620005038282620004b3565b919050565b600067ffffffffffffffff82111562000526576200052562000484565b5b620005318262000473565b9050602081019050919050565b60005b838110156200055e57808201518184015260208101905062000541565b838111156200056e576000848401525b50505050565b60006200058b620005858462000508565b620004e9565b905082815260208101848484011115620005aa57620005a96200046e565b5b620005b78482856200053e565b509392505050565b600082601f830112620005d757620005d662000469565b5b8151620005e984826020860162000574565b91505092915050565b600080600080608085870312156200060f576200060e6200045f565b5b600085015167ffffffffffffffff81111562000630576200062f62000464565b5b6200063e87828801620005bf565b945050602085015167ffffffffffffffff81111562000662576200066162000464565b5b6200067087828801620005bf565b935050604085015167ffffffffffffffff81111562000694576200069362000464565b5b620006a287828801620005bf565b925050606085015167ffffffffffffffff811115620006c657620006c562000464565b5b620006d487828801620005bf565b91505092959194509250565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000729602083620006e0565b91506200073682620006f1565b602082019050919050565b600060208201905081810360008301526200075c816200071a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007ab57607f821691505b602082108103620007c157620007c062000763565b5b50919050565b614d9680620007d76000396000f3fe6080604052600436106102515760003560e01c80636c0360eb11610139578063b88d4fde116100b6578063d5abeb011161007a578063d5abeb0114610884578063d66dd219146108af578063da3ef23f146108d8578063e985e9c514610901578063f2c4ce1e1461093e578063f2fde38b1461096757610251565b8063b88d4fde1461079f578063ba7d2c76146107c8578063c6682862146107f3578063c87b56dd1461081e578063d0eb26b01461085b57610251565b80638da5cb5b116100fd5780638da5cb5b146106ed57806395d89b4114610718578063a0712d6814610743578063a22cb4651461075f578063a475b5dd1461078857610251565b80636c0360eb1461061a57806370a0823114610645578063715018a6146106825780637e5b0054146106995780637f00c7a6146106c457610251565b80632a2f3a6f116101d257806344a0d68a1161019657806344a0d68a146104f85780634f6ccce714610521578063518302271461055e57806355f804b3146105895780635c975abb146105b25780636352211e146105dd57610251565b80632a2f3a6f146104225780632f745c591461044b5780633ccfd60b1461048857806342842e0e14610492578063438b6300146104bb57610251565b8063095ea7b311610219578063095ea7b31461034f57806313faede61461037857806318160ddd146103a3578063239c70ae146103ce57806323b872dd146103f957610251565b806301ffc9a71461025657806302329a291461029357806306fdde03146102bc578063081812fc146102e7578063081c8c4414610324575b600080fd5b34801561026257600080fd5b5061027d600480360381019061027891906133c3565b610990565b60405161028a919061340b565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b59190613452565b610ada565b005b3480156102c857600080fd5b506102d1610b73565b6040516102de9190613518565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190613570565b610c05565b60405161031b91906135de565b60405180910390f35b34801561033057600080fd5b50610339610c8a565b6040516103469190613518565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190613625565b610d18565b005b34801561038457600080fd5b5061038d610e30565b60405161039a9190613674565b60405180910390f35b3480156103af57600080fd5b506103b8610e36565b6040516103c59190613674565b60405180910390f35b3480156103da57600080fd5b506103e3610e3f565b6040516103f09190613674565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b919061368f565b610e45565b005b34801561042e57600080fd5b5061044960048036038101906104449190613625565b610e55565b005b34801561045757600080fd5b50610472600480360381019061046d9190613625565b610f06565b60405161047f9190613674565b60405180910390f35b6104906110f6565b005b34801561049e57600080fd5b506104b960048036038101906104b4919061368f565b6111f2565b005b3480156104c757600080fd5b506104e260048036038101906104dd91906136e2565b611212565b6040516104ef91906137cd565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a9190613570565b6112c0565b005b34801561052d57600080fd5b5061054860048036038101906105439190613570565b611346565b6040516105559190613674565b60405180910390f35b34801561056a57600080fd5b50610573611399565b604051610580919061340b565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab9190613924565b6113ac565b005b3480156105be57600080fd5b506105c7611442565b6040516105d4919061340b565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190613570565b611455565b60405161061191906135de565b60405180910390f35b34801561062657600080fd5b5061062f61146b565b60405161063c9190613518565b60405180910390f35b34801561065157600080fd5b5061066c600480360381019061066791906136e2565b6114f9565b6040516106799190613674565b60405180910390f35b34801561068e57600080fd5b506106976115e1565b005b3480156106a557600080fd5b506106ae611669565b6040516106bb9190613674565b60405180910390f35b3480156106d057600080fd5b506106eb60048036038101906106e69190613570565b61166f565b005b3480156106f957600080fd5b506107026116f5565b60405161070f91906135de565b60405180910390f35b34801561072457600080fd5b5061072d61171f565b60405161073a9190613518565b60405180910390f35b61075d60048036038101906107589190613570565b6117b1565b005b34801561076b57600080fd5b506107866004803603810190610781919061396d565b611a2d565b005b34801561079457600080fd5b5061079d611bad565b005b3480156107ab57600080fd5b506107c660048036038101906107c19190613a4e565b611c46565b005b3480156107d457600080fd5b506107dd611ca2565b6040516107ea9190613674565b60405180910390f35b3480156107ff57600080fd5b50610808611ca8565b6040516108159190613518565b60405180910390f35b34801561082a57600080fd5b5061084560048036038101906108409190613570565b611d36565b6040516108529190613518565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d9190613570565b611e8e565b005b34801561089057600080fd5b50610899611f14565b6040516108a69190613674565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190613570565b611f1a565b005b3480156108e457600080fd5b506108ff60048036038101906108fa9190613924565b611fa0565b005b34801561090d57600080fd5b5061092860048036038101906109239190613ad1565b612036565b604051610935919061340b565b60405180910390f35b34801561094a57600080fd5b5061096560048036038101906109609190613924565b6120ca565b005b34801561097357600080fd5b5061098e600480360381019061098991906136e2565b612160565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a5b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ac357507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ad35750610ad282612257565b5b9050919050565b610ae26122c1565b73ffffffffffffffffffffffffffffffffffffffff16610b006116f5565b73ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d90613b5d565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060018054610b8290613bac565b80601f0160208091040260200160405190810160405280929190818152602001828054610bae90613bac565b8015610bfb5780601f10610bd057610100808354040283529160200191610bfb565b820191906000526020600020905b815481529060010190602001808311610bde57829003601f168201915b5050505050905090565b6000610c10826122c9565b610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4690613c4f565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600a8054610c9790613bac565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc390613bac565b8015610d105780601f10610ce557610100808354040283529160200191610d10565b820191906000526020600020905b815481529060010190602001808311610cf357829003601f168201915b505050505081565b6000610d2382611455565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90613ce1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610db26122c1565b73ffffffffffffffffffffffffffffffffffffffff161480610de15750610de081610ddb6122c1565b612036565b5b610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1790613d73565b60405180910390fd5b610e2b8383836122d6565b505050565b600b5481565b60008054905090565b600d5481565b610e50838383612388565b505050565b610e5d6122c1565b73ffffffffffffffffffffffffffffffffffffffff16610e7b6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec890613b5d565b60405180910390fd5b601060009054906101000a900460ff1615610eeb57600080fd5b60008111610ef857600080fd5b610f0282826128c6565b5050565b6000610f11836114f9565b8210610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990613e05565b60405180910390fd5b6000610f5c610e36565b905060008060005b838110156110b4576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461105657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110a65786840361109d5781955050505050506110f0565b83806001019450505b508080600101915050610f64565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e790613e97565b60405180910390fd5b92915050565b6110fe6122c1565b73ffffffffffffffffffffffffffffffffffffffff1661111c6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116990613b5d565b60405180910390fd5b600061117c6116f5565b73ffffffffffffffffffffffffffffffffffffffff164760405161119f90613ee8565b60006040518083038185875af1925050503d80600081146111dc576040519150601f19603f3d011682016040523d82523d6000602084013e6111e1565b606091505b50509050806111ef57600080fd5b50565b61120d83838360405180602001604052806000815250611c46565b505050565b6060600061121f836114f9565b905060008167ffffffffffffffff81111561123d5761123c6137f9565b5b60405190808252806020026020018201604052801561126b5781602001602082028036833780820191505090505b50905060005b828110156112b5576112838582610f06565b82828151811061129657611295613efd565b5b60200260200101818152505080806112ad90613f5b565b915050611271565b508092505050919050565b6112c86122c1565b73ffffffffffffffffffffffffffffffffffffffff166112e66116f5565b73ffffffffffffffffffffffffffffffffffffffff161461133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390613b5d565b60405180910390fd5b80600b8190555050565b6000611350610e36565b8210611391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138890614015565b60405180910390fd5b819050919050565b601060019054906101000a900460ff1681565b6113b46122c1565b73ffffffffffffffffffffffffffffffffffffffff166113d26116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90613b5d565b60405180910390fd5b806008908051906020019061143e92919061327a565b5050565b601060009054906101000a900460ff1681565b6000611460826128e4565b600001519050919050565b6008805461147890613bac565b80601f01602080910402602001604051908101604052809291908181526020018280546114a490613bac565b80156114f15780601f106114c6576101008083540402835291602001916114f1565b820191906000526020600020905b8154815290600101906020018083116114d457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611569576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611560906140a7565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6115e96122c1565b73ffffffffffffffffffffffffffffffffffffffff166116076116f5565b73ffffffffffffffffffffffffffffffffffffffff161461165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490613b5d565b60405180910390fd5b6116676000612a7e565b565b600f5481565b6116776122c1565b73ffffffffffffffffffffffffffffffffffffffff166116956116f5565b73ffffffffffffffffffffffffffffffffffffffff16146116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e290613b5d565b60405180910390fd5b80600d8190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461172e90613bac565b80601f016020809104026020016040519081016040528092919081815260200182805461175a90613bac565b80156117a75780601f1061177c576101008083540402835291602001916117a7565b820191906000526020600020905b81548152906001019060200180831161178a57829003601f168201915b5050505050905090565b601060009054906101000a900460ff1615611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f890614113565b60405180910390fd5b600061180b610e36565b905060008211611850576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611847906141a5565b60405180910390fd5b600c54828261185f91906141c5565b11156118a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118979061428d565b60405180910390fd5b6118a86116f5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a1f57600f54600c546118ea91906142ad565b82826118f691906141c5565b1115611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e9061428d565b60405180910390fd5b81600b5461194591906142e1565b341015611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e90614387565b60405180910390fd5b6000611992336114f9565b9050600e5481106119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90614419565b60405180910390fd5b600d54831115611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a14906144ab565b60405180910390fd5b505b611a2933836128c6565b5050565b611a356122c1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9990614517565b60405180910390fd5b8060066000611aaf6122c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b5c6122c1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ba1919061340b565b60405180910390a35050565b611bb56122c1565b73ffffffffffffffffffffffffffffffffffffffff16611bd36116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2090613b5d565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b611c51848484612388565b611c5d84848484612b44565b611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c93906145a9565b60405180910390fd5b50505050565b600e5481565b60098054611cb590613bac565b80601f0160208091040260200160405190810160405280929190818152602001828054611ce190613bac565b8015611d2e5780601f10611d0357610100808354040283529160200191611d2e565b820191906000526020600020905b815481529060010190602001808311611d1157829003601f168201915b505050505081565b6060611d41826122c9565b611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d779061463b565b60405180910390fd5b60001515601060019054906101000a900460ff16151503611e2d57600a8054611da890613bac565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd490613bac565b8015611e215780601f10611df657610100808354040283529160200191611e21565b820191906000526020600020905b815481529060010190602001808311611e0457829003601f168201915b50505050509050611e89565b6000611e37612ccb565b90506000815111611e575760405180602001604052806000815250611e85565b80611e6184612d5d565b6009604051602001611e759392919061472b565b6040516020818303038152906040525b9150505b919050565b611e966122c1565b73ffffffffffffffffffffffffffffffffffffffff16611eb46116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0190613b5d565b60405180910390fd5b80600e8190555050565b600c5481565b611f226122c1565b73ffffffffffffffffffffffffffffffffffffffff16611f406116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8d90613b5d565b60405180910390fd5b80600f8190555050565b611fa86122c1565b73ffffffffffffffffffffffffffffffffffffffff16611fc66116f5565b73ffffffffffffffffffffffffffffffffffffffff161461201c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201390613b5d565b60405180910390fd5b806009908051906020019061203292919061327a565b5050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120d26122c1565b73ffffffffffffffffffffffffffffffffffffffff166120f06116f5565b73ffffffffffffffffffffffffffffffffffffffff1614612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d90613b5d565b60405180910390fd5b80600a908051906020019061215c92919061327a565b5050565b6121686122c1565b73ffffffffffffffffffffffffffffffffffffffff166121866116f5565b73ffffffffffffffffffffffffffffffffffffffff16146121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d390613b5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361224b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612242906147ce565b60405180910390fd5b61225481612a7e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612393826128e4565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166123ba6122c1565b73ffffffffffffffffffffffffffffffffffffffff16148061241657506123df6122c1565b73ffffffffffffffffffffffffffffffffffffffff166123fe84610c05565b73ffffffffffffffffffffffffffffffffffffffff16145b806124325750612431826000015161242c6122c1565b612036565b5b905080612474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246b90614860565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146124e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dd906148f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254c90614984565b60405180910390fd5b6125628585856001612ebd565b61257260008484600001516122d6565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612856576127b5816122c9565b156128555782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128bf8585856001612ec3565b5050505050565b6128e0828260405180602001604052806000815250612ec9565b5050565b6128ec613300565b6128f5826122c9565b612934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292b90614a16565b60405180910390fd5b60008290505b60008110612a3d576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a2e578092505050612a79565b5080806001900391505061293a565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7090614aa8565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612b658473ffffffffffffffffffffffffffffffffffffffff16612edb565b15612cbe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b8e6122c1565b8786866040518563ffffffff1660e01b8152600401612bb09493929190614b1d565b6020604051808303816000875af1925050508015612bec57506040513d601f19601f82011682018060405250810190612be99190614b7e565b60015b612c6e573d8060008114612c1c576040519150601f19603f3d011682016040523d82523d6000602084013e612c21565b606091505b506000815103612c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5d906145a9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cc3565b600190505b949350505050565b606060088054612cda90613bac565b80601f0160208091040260200160405190810160405280929190818152602001828054612d0690613bac565b8015612d535780601f10612d2857610100808354040283529160200191612d53565b820191906000526020600020905b815481529060010190602001808311612d3657829003601f168201915b5050505050905090565b606060008203612da4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612eb8565b600082905060005b60008214612dd6578080612dbf90613f5b565b915050600a82612dcf9190614bda565b9150612dac565b60008167ffffffffffffffff811115612df257612df16137f9565b5b6040519080825280601f01601f191660200182016040528015612e245781602001600182028036833780820191505090505b5090505b60008514612eb157600182612e3d91906142ad565b9150600a85612e4c9190614c0b565b6030612e5891906141c5565b60f81b818381518110612e6e57612e6d613efd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612eaa9190614bda565b9450612e28565b8093505050505b919050565b50505050565b50505050565b612ed68383836001612efe565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6a90614cae565b60405180910390fd5b60008403612fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fad90614d40565b60405180910390fd5b612fc36000868387612ebd565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561325d57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613248576132086000888488612b44565b613247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323e906145a9565b60405180910390fd5b5b81806001019250508080600101915050613191565b5080600081905550506132736000868387612ec3565b5050505050565b82805461328690613bac565b90600052602060002090601f0160209004810192826132a857600085556132ef565b82601f106132c157805160ff19168380011785556132ef565b828001600101855582156132ef579182015b828111156132ee5782518255916020019190600101906132d3565b5b5090506132fc919061333a565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561335357600081600090555060010161333b565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133a08161336b565b81146133ab57600080fd5b50565b6000813590506133bd81613397565b92915050565b6000602082840312156133d9576133d8613361565b5b60006133e7848285016133ae565b91505092915050565b60008115159050919050565b613405816133f0565b82525050565b600060208201905061342060008301846133fc565b92915050565b61342f816133f0565b811461343a57600080fd5b50565b60008135905061344c81613426565b92915050565b60006020828403121561346857613467613361565b5b60006134768482850161343d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134b957808201518184015260208101905061349e565b838111156134c8576000848401525b50505050565b6000601f19601f8301169050919050565b60006134ea8261347f565b6134f4818561348a565b935061350481856020860161349b565b61350d816134ce565b840191505092915050565b6000602082019050818103600083015261353281846134df565b905092915050565b6000819050919050565b61354d8161353a565b811461355857600080fd5b50565b60008135905061356a81613544565b92915050565b60006020828403121561358657613585613361565b5b60006135948482850161355b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135c88261359d565b9050919050565b6135d8816135bd565b82525050565b60006020820190506135f360008301846135cf565b92915050565b613602816135bd565b811461360d57600080fd5b50565b60008135905061361f816135f9565b92915050565b6000806040838503121561363c5761363b613361565b5b600061364a85828601613610565b925050602061365b8582860161355b565b9150509250929050565b61366e8161353a565b82525050565b60006020820190506136896000830184613665565b92915050565b6000806000606084860312156136a8576136a7613361565b5b60006136b686828701613610565b93505060206136c786828701613610565b92505060406136d88682870161355b565b9150509250925092565b6000602082840312156136f8576136f7613361565b5b600061370684828501613610565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137448161353a565b82525050565b6000613756838361373b565b60208301905092915050565b6000602082019050919050565b600061377a8261370f565b613784818561371a565b935061378f8361372b565b8060005b838110156137c05781516137a7888261374a565b97506137b283613762565b925050600181019050613793565b5085935050505092915050565b600060208201905081810360008301526137e7818461376f565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613831826134ce565b810181811067ffffffffffffffff821117156138505761384f6137f9565b5b80604052505050565b6000613863613357565b905061386f8282613828565b919050565b600067ffffffffffffffff82111561388f5761388e6137f9565b5b613898826134ce565b9050602081019050919050565b82818337600083830152505050565b60006138c76138c284613874565b613859565b9050828152602081018484840111156138e3576138e26137f4565b5b6138ee8482856138a5565b509392505050565b600082601f83011261390b5761390a6137ef565b5b813561391b8482602086016138b4565b91505092915050565b60006020828403121561393a57613939613361565b5b600082013567ffffffffffffffff81111561395857613957613366565b5b613964848285016138f6565b91505092915050565b6000806040838503121561398457613983613361565b5b600061399285828601613610565b92505060206139a38582860161343d565b9150509250929050565b600067ffffffffffffffff8211156139c8576139c76137f9565b5b6139d1826134ce565b9050602081019050919050565b60006139f16139ec846139ad565b613859565b905082815260208101848484011115613a0d57613a0c6137f4565b5b613a188482856138a5565b509392505050565b600082601f830112613a3557613a346137ef565b5b8135613a458482602086016139de565b91505092915050565b60008060008060808587031215613a6857613a67613361565b5b6000613a7687828801613610565b9450506020613a8787828801613610565b9350506040613a988782880161355b565b925050606085013567ffffffffffffffff811115613ab957613ab8613366565b5b613ac587828801613a20565b91505092959194509250565b60008060408385031215613ae857613ae7613361565b5b6000613af685828601613610565b9250506020613b0785828601613610565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b4760208361348a565b9150613b5282613b11565b602082019050919050565b60006020820190508181036000830152613b7681613b3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bc457607f821691505b602082108103613bd757613bd6613b7d565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000613c39602d8361348a565b9150613c4482613bdd565b604082019050919050565b60006020820190508181036000830152613c6881613c2c565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ccb60228361348a565b9150613cd682613c6f565b604082019050919050565b60006020820190508181036000830152613cfa81613cbe565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613d5d60398361348a565b9150613d6882613d01565b604082019050919050565b60006020820190508181036000830152613d8c81613d50565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613def60228361348a565b9150613dfa82613d93565b604082019050919050565b60006020820190508181036000830152613e1e81613de2565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000613e81602e8361348a565b9150613e8c82613e25565b604082019050919050565b60006020820190508181036000830152613eb081613e74565b9050919050565b600081905092915050565b50565b6000613ed2600083613eb7565b9150613edd82613ec2565b600082019050919050565b6000613ef382613ec5565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f668261353a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f9857613f97613f2c565b5b600182019050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613fff60238361348a565b915061400a82613fa3565b604082019050919050565b6000602082019050818103600083015261402e81613ff2565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614091602b8361348a565b915061409c82614035565b604082019050919050565b600060208201905081810360008301526140c081614084565b9050919050565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b60006140fd60128361348a565b9150614108826140c7565b602082019050919050565b6000602082019050818103600083015261412c816140f0565b9050919050565b7f4d696e7420616d6f756e74206d7573742062652067726561746572207468616e60008201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b600061418f60228361348a565b915061419a82614133565b604082019050919050565b600060208201905081810360008301526141be81614182565b9050919050565b60006141d08261353a565b91506141db8361353a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142105761420f613f2c565b5b828201905092915050565b7f4d696e7420616d6f756e74206d75737420626520657175616c20746f206f722060008201527f62656c6f7720617661696c61626c6520746f6b656e7300000000000000000000602082015250565b600061427760368361348a565b91506142828261421b565b604082019050919050565b600060208201905081810360008301526142a68161426a565b9050919050565b60006142b88261353a565b91506142c38361353a565b9250828210156142d6576142d5613f2c565b5b828203905092915050565b60006142ec8261353a565b91506142f78361353a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143305761432f613f2c565b5b828202905092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b600061437160148361348a565b915061437c8261433b565b602082019050919050565b600060208201905081810360008301526143a081614364565b9050919050565b7f4d696e7420616d6f756e7420697320657863656564696e672050657277616c6c60008201527f657420546f6b656e206c696d6974000000000000000000000000000000000000602082015250565b6000614403602e8361348a565b915061440e826143a7565b604082019050919050565b60006020820190508181036000830152614432816143f6565b9050919050565b7f4d696e7420616d6f756e742069732067726561746572207468616e206d61782060008201527f6d696e7420616d6f756e74000000000000000000000000000000000000000000602082015250565b6000614495602b8361348a565b91506144a082614439565b604082019050919050565b600060208201905081810360008301526144c481614488565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000614501601a8361348a565b915061450c826144cb565b602082019050919050565b60006020820190508181036000830152614530816144f4565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b600061459360338361348a565b915061459e82614537565b604082019050919050565b600060208201905081810360008301526145c281614586565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614625602f8361348a565b9150614630826145c9565b604082019050919050565b6000602082019050818103600083015261465481614618565b9050919050565b600081905092915050565b60006146718261347f565b61467b818561465b565b935061468b81856020860161349b565b80840191505092915050565b60008190508160005260206000209050919050565b600081546146b981613bac565b6146c3818661465b565b945060018216600081146146de57600181146146ef57614722565b60ff19831686528186019350614722565b6146f885614697565b60005b8381101561471a578154818901526001820191506020810190506146fb565b838801955050505b50505092915050565b60006147378286614666565b91506147438285614666565b915061474f82846146ac565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147b860268361348a565b91506147c38261475c565b604082019050919050565b600060208201905081810360008301526147e7816147ab565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b600061484a60328361348a565b9150614855826147ee565b604082019050919050565b600060208201905081810360008301526148798161483d565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006148dc60268361348a565b91506148e782614880565b604082019050919050565b6000602082019050818103600083015261490b816148cf565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061496e60258361348a565b915061497982614912565b604082019050919050565b6000602082019050818103600083015261499d81614961565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614a00602a8361348a565b9150614a0b826149a4565b604082019050919050565b60006020820190508181036000830152614a2f816149f3565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b6000614a92602f8361348a565b9150614a9d82614a36565b604082019050919050565b60006020820190508181036000830152614ac181614a85565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614aef82614ac8565b614af98185614ad3565b9350614b0981856020860161349b565b614b12816134ce565b840191505092915050565b6000608082019050614b3260008301876135cf565b614b3f60208301866135cf565b614b4c6040830185613665565b8181036060830152614b5e8184614ae4565b905095945050505050565b600081519050614b7881613397565b92915050565b600060208284031215614b9457614b93613361565b5b6000614ba284828501614b69565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614be58261353a565b9150614bf08361353a565b925082614c0057614bff614bab565b5b828204905092915050565b6000614c168261353a565b9150614c218361353a565b925082614c3157614c30614bab565b5b828206905092915050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c9860218361348a565b9150614ca382614c3c565b604082019050919050565b60006020820190508181036000830152614cc781614c8b565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000614d2a60288361348a565b9150614d3582614cce565b604082019050919050565b60006020820190508181036000830152614d5981614d1d565b905091905056fea264697066735822122080468e56d82bef3ef8e112a67b0611770f6d8f6cf55225cfcb6fdf5a83bcd8f164736f6c634300080d0033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000d416476656e7420576f726c6473000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006414456454e5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5658786a624848374339517a566e74673263356435715247787447424c62565855717a34344e4b34776d68682f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5658786a624848374339517a566e74673263356435715247787447424c62565855717a34344e4b34776d68682f00000000000000000000

Deployed Bytecode

0x6080604052600436106102515760003560e01c80636c0360eb11610139578063b88d4fde116100b6578063d5abeb011161007a578063d5abeb0114610884578063d66dd219146108af578063da3ef23f146108d8578063e985e9c514610901578063f2c4ce1e1461093e578063f2fde38b1461096757610251565b8063b88d4fde1461079f578063ba7d2c76146107c8578063c6682862146107f3578063c87b56dd1461081e578063d0eb26b01461085b57610251565b80638da5cb5b116100fd5780638da5cb5b146106ed57806395d89b4114610718578063a0712d6814610743578063a22cb4651461075f578063a475b5dd1461078857610251565b80636c0360eb1461061a57806370a0823114610645578063715018a6146106825780637e5b0054146106995780637f00c7a6146106c457610251565b80632a2f3a6f116101d257806344a0d68a1161019657806344a0d68a146104f85780634f6ccce714610521578063518302271461055e57806355f804b3146105895780635c975abb146105b25780636352211e146105dd57610251565b80632a2f3a6f146104225780632f745c591461044b5780633ccfd60b1461048857806342842e0e14610492578063438b6300146104bb57610251565b8063095ea7b311610219578063095ea7b31461034f57806313faede61461037857806318160ddd146103a3578063239c70ae146103ce57806323b872dd146103f957610251565b806301ffc9a71461025657806302329a291461029357806306fdde03146102bc578063081812fc146102e7578063081c8c4414610324575b600080fd5b34801561026257600080fd5b5061027d600480360381019061027891906133c3565b610990565b60405161028a919061340b565b60405180910390f35b34801561029f57600080fd5b506102ba60048036038101906102b59190613452565b610ada565b005b3480156102c857600080fd5b506102d1610b73565b6040516102de9190613518565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190613570565b610c05565b60405161031b91906135de565b60405180910390f35b34801561033057600080fd5b50610339610c8a565b6040516103469190613518565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190613625565b610d18565b005b34801561038457600080fd5b5061038d610e30565b60405161039a9190613674565b60405180910390f35b3480156103af57600080fd5b506103b8610e36565b6040516103c59190613674565b60405180910390f35b3480156103da57600080fd5b506103e3610e3f565b6040516103f09190613674565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b919061368f565b610e45565b005b34801561042e57600080fd5b5061044960048036038101906104449190613625565b610e55565b005b34801561045757600080fd5b50610472600480360381019061046d9190613625565b610f06565b60405161047f9190613674565b60405180910390f35b6104906110f6565b005b34801561049e57600080fd5b506104b960048036038101906104b4919061368f565b6111f2565b005b3480156104c757600080fd5b506104e260048036038101906104dd91906136e2565b611212565b6040516104ef91906137cd565b60405180910390f35b34801561050457600080fd5b5061051f600480360381019061051a9190613570565b6112c0565b005b34801561052d57600080fd5b5061054860048036038101906105439190613570565b611346565b6040516105559190613674565b60405180910390f35b34801561056a57600080fd5b50610573611399565b604051610580919061340b565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab9190613924565b6113ac565b005b3480156105be57600080fd5b506105c7611442565b6040516105d4919061340b565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190613570565b611455565b60405161061191906135de565b60405180910390f35b34801561062657600080fd5b5061062f61146b565b60405161063c9190613518565b60405180910390f35b34801561065157600080fd5b5061066c600480360381019061066791906136e2565b6114f9565b6040516106799190613674565b60405180910390f35b34801561068e57600080fd5b506106976115e1565b005b3480156106a557600080fd5b506106ae611669565b6040516106bb9190613674565b60405180910390f35b3480156106d057600080fd5b506106eb60048036038101906106e69190613570565b61166f565b005b3480156106f957600080fd5b506107026116f5565b60405161070f91906135de565b60405180910390f35b34801561072457600080fd5b5061072d61171f565b60405161073a9190613518565b60405180910390f35b61075d60048036038101906107589190613570565b6117b1565b005b34801561076b57600080fd5b506107866004803603810190610781919061396d565b611a2d565b005b34801561079457600080fd5b5061079d611bad565b005b3480156107ab57600080fd5b506107c660048036038101906107c19190613a4e565b611c46565b005b3480156107d457600080fd5b506107dd611ca2565b6040516107ea9190613674565b60405180910390f35b3480156107ff57600080fd5b50610808611ca8565b6040516108159190613518565b60405180910390f35b34801561082a57600080fd5b5061084560048036038101906108409190613570565b611d36565b6040516108529190613518565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d9190613570565b611e8e565b005b34801561089057600080fd5b50610899611f14565b6040516108a69190613674565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190613570565b611f1a565b005b3480156108e457600080fd5b506108ff60048036038101906108fa9190613924565b611fa0565b005b34801561090d57600080fd5b5061092860048036038101906109239190613ad1565b612036565b604051610935919061340b565b60405180910390f35b34801561094a57600080fd5b5061096560048036038101906109609190613924565b6120ca565b005b34801561097357600080fd5b5061098e600480360381019061098991906136e2565b612160565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a5b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ac357507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ad35750610ad282612257565b5b9050919050565b610ae26122c1565b73ffffffffffffffffffffffffffffffffffffffff16610b006116f5565b73ffffffffffffffffffffffffffffffffffffffff1614610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d90613b5d565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b606060018054610b8290613bac565b80601f0160208091040260200160405190810160405280929190818152602001828054610bae90613bac565b8015610bfb5780601f10610bd057610100808354040283529160200191610bfb565b820191906000526020600020905b815481529060010190602001808311610bde57829003601f168201915b5050505050905090565b6000610c10826122c9565b610c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4690613c4f565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600a8054610c9790613bac565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc390613bac565b8015610d105780601f10610ce557610100808354040283529160200191610d10565b820191906000526020600020905b815481529060010190602001808311610cf357829003601f168201915b505050505081565b6000610d2382611455565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90613ce1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610db26122c1565b73ffffffffffffffffffffffffffffffffffffffff161480610de15750610de081610ddb6122c1565b612036565b5b610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1790613d73565b60405180910390fd5b610e2b8383836122d6565b505050565b600b5481565b60008054905090565b600d5481565b610e50838383612388565b505050565b610e5d6122c1565b73ffffffffffffffffffffffffffffffffffffffff16610e7b6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614610ed1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec890613b5d565b60405180910390fd5b601060009054906101000a900460ff1615610eeb57600080fd5b60008111610ef857600080fd5b610f0282826128c6565b5050565b6000610f11836114f9565b8210610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990613e05565b60405180910390fd5b6000610f5c610e36565b905060008060005b838110156110b4576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461105657806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110a65786840361109d5781955050505050506110f0565b83806001019450505b508080600101915050610f64565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e790613e97565b60405180910390fd5b92915050565b6110fe6122c1565b73ffffffffffffffffffffffffffffffffffffffff1661111c6116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116990613b5d565b60405180910390fd5b600061117c6116f5565b73ffffffffffffffffffffffffffffffffffffffff164760405161119f90613ee8565b60006040518083038185875af1925050503d80600081146111dc576040519150601f19603f3d011682016040523d82523d6000602084013e6111e1565b606091505b50509050806111ef57600080fd5b50565b61120d83838360405180602001604052806000815250611c46565b505050565b6060600061121f836114f9565b905060008167ffffffffffffffff81111561123d5761123c6137f9565b5b60405190808252806020026020018201604052801561126b5781602001602082028036833780820191505090505b50905060005b828110156112b5576112838582610f06565b82828151811061129657611295613efd565b5b60200260200101818152505080806112ad90613f5b565b915050611271565b508092505050919050565b6112c86122c1565b73ffffffffffffffffffffffffffffffffffffffff166112e66116f5565b73ffffffffffffffffffffffffffffffffffffffff161461133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390613b5d565b60405180910390fd5b80600b8190555050565b6000611350610e36565b8210611391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138890614015565b60405180910390fd5b819050919050565b601060019054906101000a900460ff1681565b6113b46122c1565b73ffffffffffffffffffffffffffffffffffffffff166113d26116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f90613b5d565b60405180910390fd5b806008908051906020019061143e92919061327a565b5050565b601060009054906101000a900460ff1681565b6000611460826128e4565b600001519050919050565b6008805461147890613bac565b80601f01602080910402602001604051908101604052809291908181526020018280546114a490613bac565b80156114f15780601f106114c6576101008083540402835291602001916114f1565b820191906000526020600020905b8154815290600101906020018083116114d457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611569576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611560906140a7565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6115e96122c1565b73ffffffffffffffffffffffffffffffffffffffff166116076116f5565b73ffffffffffffffffffffffffffffffffffffffff161461165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490613b5d565b60405180910390fd5b6116676000612a7e565b565b600f5481565b6116776122c1565b73ffffffffffffffffffffffffffffffffffffffff166116956116f5565b73ffffffffffffffffffffffffffffffffffffffff16146116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e290613b5d565b60405180910390fd5b80600d8190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461172e90613bac565b80601f016020809104026020016040519081016040528092919081815260200182805461175a90613bac565b80156117a75780601f1061177c576101008083540402835291602001916117a7565b820191906000526020600020905b81548152906001019060200180831161178a57829003601f168201915b5050505050905090565b601060009054906101000a900460ff1615611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f890614113565b60405180910390fd5b600061180b610e36565b905060008211611850576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611847906141a5565b60405180910390fd5b600c54828261185f91906141c5565b11156118a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118979061428d565b60405180910390fd5b6118a86116f5565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a1f57600f54600c546118ea91906142ad565b82826118f691906141c5565b1115611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192e9061428d565b60405180910390fd5b81600b5461194591906142e1565b341015611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e90614387565b60405180910390fd5b6000611992336114f9565b9050600e5481106119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90614419565b60405180910390fd5b600d54831115611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a14906144ab565b60405180910390fd5b505b611a2933836128c6565b5050565b611a356122c1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9990614517565b60405180910390fd5b8060066000611aaf6122c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b5c6122c1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ba1919061340b565b60405180910390a35050565b611bb56122c1565b73ffffffffffffffffffffffffffffffffffffffff16611bd36116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2090613b5d565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550565b611c51848484612388565b611c5d84848484612b44565b611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c93906145a9565b60405180910390fd5b50505050565b600e5481565b60098054611cb590613bac565b80601f0160208091040260200160405190810160405280929190818152602001828054611ce190613bac565b8015611d2e5780601f10611d0357610100808354040283529160200191611d2e565b820191906000526020600020905b815481529060010190602001808311611d1157829003601f168201915b505050505081565b6060611d41826122c9565b611d80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d779061463b565b60405180910390fd5b60001515601060019054906101000a900460ff16151503611e2d57600a8054611da890613bac565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd490613bac565b8015611e215780601f10611df657610100808354040283529160200191611e21565b820191906000526020600020905b815481529060010190602001808311611e0457829003601f168201915b50505050509050611e89565b6000611e37612ccb565b90506000815111611e575760405180602001604052806000815250611e85565b80611e6184612d5d565b6009604051602001611e759392919061472b565b6040516020818303038152906040525b9150505b919050565b611e966122c1565b73ffffffffffffffffffffffffffffffffffffffff16611eb46116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611f0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0190613b5d565b60405180910390fd5b80600e8190555050565b600c5481565b611f226122c1565b73ffffffffffffffffffffffffffffffffffffffff16611f406116f5565b73ffffffffffffffffffffffffffffffffffffffff1614611f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8d90613b5d565b60405180910390fd5b80600f8190555050565b611fa86122c1565b73ffffffffffffffffffffffffffffffffffffffff16611fc66116f5565b73ffffffffffffffffffffffffffffffffffffffff161461201c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201390613b5d565b60405180910390fd5b806009908051906020019061203292919061327a565b5050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120d26122c1565b73ffffffffffffffffffffffffffffffffffffffff166120f06116f5565b73ffffffffffffffffffffffffffffffffffffffff1614612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d90613b5d565b60405180910390fd5b80600a908051906020019061215c92919061327a565b5050565b6121686122c1565b73ffffffffffffffffffffffffffffffffffffffff166121866116f5565b73ffffffffffffffffffffffffffffffffffffffff16146121dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d390613b5d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361224b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612242906147ce565b60405180910390fd5b61225481612a7e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612393826128e4565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166123ba6122c1565b73ffffffffffffffffffffffffffffffffffffffff16148061241657506123df6122c1565b73ffffffffffffffffffffffffffffffffffffffff166123fe84610c05565b73ffffffffffffffffffffffffffffffffffffffff16145b806124325750612431826000015161242c6122c1565b612036565b5b905080612474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246b90614860565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146124e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dd906148f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254c90614984565b60405180910390fd5b6125628585856001612ebd565b61257260008484600001516122d6565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612856576127b5816122c9565b156128555782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128bf8585856001612ec3565b5050505050565b6128e0828260405180602001604052806000815250612ec9565b5050565b6128ec613300565b6128f5826122c9565b612934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292b90614a16565b60405180910390fd5b60008290505b60008110612a3d576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612a2e578092505050612a79565b5080806001900391505061293a565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7090614aa8565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612b658473ffffffffffffffffffffffffffffffffffffffff16612edb565b15612cbe578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b8e6122c1565b8786866040518563ffffffff1660e01b8152600401612bb09493929190614b1d565b6020604051808303816000875af1925050508015612bec57506040513d601f19601f82011682018060405250810190612be99190614b7e565b60015b612c6e573d8060008114612c1c576040519150601f19603f3d011682016040523d82523d6000602084013e612c21565b606091505b506000815103612c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5d906145a9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612cc3565b600190505b949350505050565b606060088054612cda90613bac565b80601f0160208091040260200160405190810160405280929190818152602001828054612d0690613bac565b8015612d535780601f10612d2857610100808354040283529160200191612d53565b820191906000526020600020905b815481529060010190602001808311612d3657829003601f168201915b5050505050905090565b606060008203612da4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612eb8565b600082905060005b60008214612dd6578080612dbf90613f5b565b915050600a82612dcf9190614bda565b9150612dac565b60008167ffffffffffffffff811115612df257612df16137f9565b5b6040519080825280601f01601f191660200182016040528015612e245781602001600182028036833780820191505090505b5090505b60008514612eb157600182612e3d91906142ad565b9150600a85612e4c9190614c0b565b6030612e5891906141c5565b60f81b818381518110612e6e57612e6d613efd565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612eaa9190614bda565b9450612e28565b8093505050505b919050565b50505050565b50505050565b612ed68383836001612efe565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6a90614cae565b60405180910390fd5b60008403612fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fad90614d40565b60405180910390fd5b612fc36000868387612ebd565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561325d57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613248576132086000888488612b44565b613247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323e906145a9565b60405180910390fd5b5b81806001019250508080600101915050613191565b5080600081905550506132736000868387612ec3565b5050505050565b82805461328690613bac565b90600052602060002090601f0160209004810192826132a857600085556132ef565b82601f106132c157805160ff19168380011785556132ef565b828001600101855582156132ef579182015b828111156132ee5782518255916020019190600101906132d3565b5b5090506132fc919061333a565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561335357600081600090555060010161333b565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6133a08161336b565b81146133ab57600080fd5b50565b6000813590506133bd81613397565b92915050565b6000602082840312156133d9576133d8613361565b5b60006133e7848285016133ae565b91505092915050565b60008115159050919050565b613405816133f0565b82525050565b600060208201905061342060008301846133fc565b92915050565b61342f816133f0565b811461343a57600080fd5b50565b60008135905061344c81613426565b92915050565b60006020828403121561346857613467613361565b5b60006134768482850161343d565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156134b957808201518184015260208101905061349e565b838111156134c8576000848401525b50505050565b6000601f19601f8301169050919050565b60006134ea8261347f565b6134f4818561348a565b935061350481856020860161349b565b61350d816134ce565b840191505092915050565b6000602082019050818103600083015261353281846134df565b905092915050565b6000819050919050565b61354d8161353a565b811461355857600080fd5b50565b60008135905061356a81613544565b92915050565b60006020828403121561358657613585613361565b5b60006135948482850161355b565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135c88261359d565b9050919050565b6135d8816135bd565b82525050565b60006020820190506135f360008301846135cf565b92915050565b613602816135bd565b811461360d57600080fd5b50565b60008135905061361f816135f9565b92915050565b6000806040838503121561363c5761363b613361565b5b600061364a85828601613610565b925050602061365b8582860161355b565b9150509250929050565b61366e8161353a565b82525050565b60006020820190506136896000830184613665565b92915050565b6000806000606084860312156136a8576136a7613361565b5b60006136b686828701613610565b93505060206136c786828701613610565b92505060406136d88682870161355b565b9150509250925092565b6000602082840312156136f8576136f7613361565b5b600061370684828501613610565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6137448161353a565b82525050565b6000613756838361373b565b60208301905092915050565b6000602082019050919050565b600061377a8261370f565b613784818561371a565b935061378f8361372b565b8060005b838110156137c05781516137a7888261374a565b97506137b283613762565b925050600181019050613793565b5085935050505092915050565b600060208201905081810360008301526137e7818461376f565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613831826134ce565b810181811067ffffffffffffffff821117156138505761384f6137f9565b5b80604052505050565b6000613863613357565b905061386f8282613828565b919050565b600067ffffffffffffffff82111561388f5761388e6137f9565b5b613898826134ce565b9050602081019050919050565b82818337600083830152505050565b60006138c76138c284613874565b613859565b9050828152602081018484840111156138e3576138e26137f4565b5b6138ee8482856138a5565b509392505050565b600082601f83011261390b5761390a6137ef565b5b813561391b8482602086016138b4565b91505092915050565b60006020828403121561393a57613939613361565b5b600082013567ffffffffffffffff81111561395857613957613366565b5b613964848285016138f6565b91505092915050565b6000806040838503121561398457613983613361565b5b600061399285828601613610565b92505060206139a38582860161343d565b9150509250929050565b600067ffffffffffffffff8211156139c8576139c76137f9565b5b6139d1826134ce565b9050602081019050919050565b60006139f16139ec846139ad565b613859565b905082815260208101848484011115613a0d57613a0c6137f4565b5b613a188482856138a5565b509392505050565b600082601f830112613a3557613a346137ef565b5b8135613a458482602086016139de565b91505092915050565b60008060008060808587031215613a6857613a67613361565b5b6000613a7687828801613610565b9450506020613a8787828801613610565b9350506040613a988782880161355b565b925050606085013567ffffffffffffffff811115613ab957613ab8613366565b5b613ac587828801613a20565b91505092959194509250565b60008060408385031215613ae857613ae7613361565b5b6000613af685828601613610565b9250506020613b0785828601613610565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b4760208361348a565b9150613b5282613b11565b602082019050919050565b60006020820190508181036000830152613b7681613b3a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bc457607f821691505b602082108103613bd757613bd6613b7d565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000613c39602d8361348a565b9150613c4482613bdd565b604082019050919050565b60006020820190508181036000830152613c6881613c2c565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ccb60228361348a565b9150613cd682613c6f565b604082019050919050565b60006020820190508181036000830152613cfa81613cbe565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000613d5d60398361348a565b9150613d6882613d01565b604082019050919050565b60006020820190508181036000830152613d8c81613d50565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613def60228361348a565b9150613dfa82613d93565b604082019050919050565b60006020820190508181036000830152613e1e81613de2565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000613e81602e8361348a565b9150613e8c82613e25565b604082019050919050565b60006020820190508181036000830152613eb081613e74565b9050919050565b600081905092915050565b50565b6000613ed2600083613eb7565b9150613edd82613ec2565b600082019050919050565b6000613ef382613ec5565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f668261353a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f9857613f97613f2c565b5b600182019050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613fff60238361348a565b915061400a82613fa3565b604082019050919050565b6000602082019050818103600083015261402e81613ff2565b9050919050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614091602b8361348a565b915061409c82614035565b604082019050919050565b600060208201905081810360008301526140c081614084565b9050919050565b7f436f6e7472616374206973207061757365640000000000000000000000000000600082015250565b60006140fd60128361348a565b9150614108826140c7565b602082019050919050565b6000602082019050818103600083015261412c816140f0565b9050919050565b7f4d696e7420616d6f756e74206d7573742062652067726561746572207468616e60008201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b600061418f60228361348a565b915061419a82614133565b604082019050919050565b600060208201905081810360008301526141be81614182565b9050919050565b60006141d08261353a565b91506141db8361353a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142105761420f613f2c565b5b828201905092915050565b7f4d696e7420616d6f756e74206d75737420626520657175616c20746f206f722060008201527f62656c6f7720617661696c61626c6520746f6b656e7300000000000000000000602082015250565b600061427760368361348a565b91506142828261421b565b604082019050919050565b600060208201905081810360008301526142a68161426a565b9050919050565b60006142b88261353a565b91506142c38361353a565b9250828210156142d6576142d5613f2c565b5b828203905092915050565b60006142ec8261353a565b91506142f78361353a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143305761432f613f2c565b5b828202905092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b600061437160148361348a565b915061437c8261433b565b602082019050919050565b600060208201905081810360008301526143a081614364565b9050919050565b7f4d696e7420616d6f756e7420697320657863656564696e672050657277616c6c60008201527f657420546f6b656e206c696d6974000000000000000000000000000000000000602082015250565b6000614403602e8361348a565b915061440e826143a7565b604082019050919050565b60006020820190508181036000830152614432816143f6565b9050919050565b7f4d696e7420616d6f756e742069732067726561746572207468616e206d61782060008201527f6d696e7420616d6f756e74000000000000000000000000000000000000000000602082015250565b6000614495602b8361348a565b91506144a082614439565b604082019050919050565b600060208201905081810360008301526144c481614488565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000614501601a8361348a565b915061450c826144cb565b602082019050919050565b60006020820190508181036000830152614530816144f4565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b600061459360338361348a565b915061459e82614537565b604082019050919050565b600060208201905081810360008301526145c281614586565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614625602f8361348a565b9150614630826145c9565b604082019050919050565b6000602082019050818103600083015261465481614618565b9050919050565b600081905092915050565b60006146718261347f565b61467b818561465b565b935061468b81856020860161349b565b80840191505092915050565b60008190508160005260206000209050919050565b600081546146b981613bac565b6146c3818661465b565b945060018216600081146146de57600181146146ef57614722565b60ff19831686528186019350614722565b6146f885614697565b60005b8381101561471a578154818901526001820191506020810190506146fb565b838801955050505b50505092915050565b60006147378286614666565b91506147438285614666565b915061474f82846146ac565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006147b860268361348a565b91506147c38261475c565b604082019050919050565b600060208201905081810360008301526147e7816147ab565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b600061484a60328361348a565b9150614855826147ee565b604082019050919050565b600060208201905081810360008301526148798161483d565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006148dc60268361348a565b91506148e782614880565b604082019050919050565b6000602082019050818103600083015261490b816148cf565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061496e60258361348a565b915061497982614912565b604082019050919050565b6000602082019050818103600083015261499d81614961565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b6000614a00602a8361348a565b9150614a0b826149a4565b604082019050919050565b60006020820190508181036000830152614a2f816149f3565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b6000614a92602f8361348a565b9150614a9d82614a36565b604082019050919050565b60006020820190508181036000830152614ac181614a85565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614aef82614ac8565b614af98185614ad3565b9350614b0981856020860161349b565b614b12816134ce565b840191505092915050565b6000608082019050614b3260008301876135cf565b614b3f60208301866135cf565b614b4c6040830185613665565b8181036060830152614b5e8184614ae4565b905095945050505050565b600081519050614b7881613397565b92915050565b600060208284031215614b9457614b93613361565b5b6000614ba284828501614b69565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614be58261353a565b9150614bf08361353a565b925082614c0057614bff614bab565b5b828204905092915050565b6000614c168261353a565b9150614c218361353a565b925082614c3157614c30614bab565b5b828206905092915050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c9860218361348a565b9150614ca382614c3c565b604082019050919050565b60006020820190508181036000830152614cc781614c8b565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000614d2a60288361348a565b9150614d3582614cce565b604082019050919050565b60006020820190508181036000830152614d5981614d1d565b905091905056fea264697066735822122080468e56d82bef3ef8e112a67b0611770f6d8f6cf55225cfcb6fdf5a83bcd8f164736f6c634300080d0033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000000000000d416476656e7420576f726c6473000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006414456454e5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5658786a624848374339517a566e74673263356435715247787447424c62565855717a34344e4b34776d68682f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5658786a624848374339517a566e74673263356435715247787447424c62565855717a34344e4b34776d68682f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Advent Worlds
Arg [1] : _symbol (string): ADVENT
Arg [2] : _initBaseURI (string): ipfs://QmVXxjbHH7C9QzVntg2c5d5qRGxtGBLbVXUqz44NK4wmhh/
Arg [3] : _initNotRevealedUri (string): ipfs://QmVXxjbHH7C9QzVntg2c5d5qRGxtGBLbVXUqz44NK4wmhh/

-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [5] : 416476656e7420576f726c647300000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [7] : 414456454e540000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d5658786a624848374339517a566e746732633564357152
Arg [10] : 47787447424c62565855717a34344e4b34776d68682f00000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [12] : 697066733a2f2f516d5658786a624848374339517a566e746732633564357152
Arg [13] : 47787447424c62565855717a34344e4b34776d68682f00000000000000000000


Deployed Bytecode Sourcemap

51634:5836:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34090:518;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56712:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36595:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38695:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51822:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38122:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52141:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31873:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52231:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40020:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57243:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32732:1256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56981:179;;;:::i;:::-;;40331:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54465:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55974:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32096:292;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52545:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56416:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52504:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36358:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51734:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34702:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5833:119;;;;;;;;;;;;;:::i;:::-;;52423:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56092:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5054:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36810:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53417:1032;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39177:367;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55719:85;;;;;;;;;;;;;:::i;:::-;;40657:443;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52278:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51770;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54955:717;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55832:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52185:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56825:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56552:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39645:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56258:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6144:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34090:518;34277:4;34358:25;34343:40;;;:11;:40;;;;:113;;;;34423:33;34408:48;;;:11;:48;;;;34343:113;:188;;;;34496:35;34481:50;;;:11;:50;;;;34343:188;:249;;;;34556:36;34580:11;34556:23;:36::i;:::-;34343:249;34315:277;;34090:518;;;:::o;56712:95::-;5339:12;:10;:12::i;:::-;5328:23;;:7;:5;:7::i;:::-;:23;;;5320:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56785:6:::1;56776;;:15;;;;;;;;;;;;;;;;;;56712:95:::0;:::o;36595:116::-;36649:13;36690:5;36683:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36595:116;:::o;38695:380::-;38831:7;38902:16;38910:7;38902;:16::i;:::-;38872:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;39035:15;:24;39051:7;39035:24;;;;;;;;;;;;;;;;;;;;;39028:31;;38695:380;;;:::o;51822:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38122:477::-;38203:13;38219:24;38235:7;38219:15;:24::i;:::-;38203:40;;38276:5;38270:11;;:2;:11;;;38262:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38387:5;38371:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;38396:37;38413:5;38420:12;:10;:12::i;:::-;38396:16;:37::i;:::-;38371:62;38341:193;;;;;;;;;;;;:::i;:::-;;;;;;;;;38555:28;38564:2;38568:7;38577:5;38555:8;:28::i;:::-;38184:415;38122:477;;:::o;52141:29::-;;;;:::o;31873:116::-;31926:7;31961:12;;31954:19;;31873:116;:::o;52231:32::-;;;;:::o;40020:210::-;40186:28;40196:4;40202:2;40206:7;40186:9;:28::i;:::-;40020:210;;;:::o;57243:212::-;5339:12;:10;:12::i;:::-;5328:23;;:7;:5;:7::i;:::-;:23;;;5320:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57339:6:::1;;;;;;;;;;;57338:7;57330:16;;;::::0;::::1;;57387:1;57373:11;:15;57365:24;;;::::0;::::1;;57408:27;57418:3;57423:11;57408:9;:27::i;:::-;57243:212:::0;;:::o;32732:1256::-;32889:7;32946:16;32956:5;32946:9;:16::i;:::-;32938:5;:24;32930:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33020:22;33045:13;:11;:13::i;:::-;33020:38;;33077:19;33115:25;33328:9;33323:554;33343:14;33339:1;:18;33323:554;;;33391:31;33425:11;:14;33437:1;33425:14;;;;;;;;;;;33391:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33496:1;33470:28;;:9;:14;;;:28;;;33466:127;;33551:9;:14;;;33531:34;;33466:127;33644:5;33623:26;;:17;:26;;;33619:235;;33701:5;33686:11;:20;33682:101;;33750:1;33743:8;;;;;;;;;33682:101;33813:13;;;;;;;33619:235;33364:513;33359:3;;;;;;;33323:554;;;;33916:56;;;;;;;;;;:::i;:::-;;;;;;;;32732:1256;;;;;:::o;56981:179::-;5339:12;:10;:12::i;:::-;5328:23;;:7;:5;:7::i;:::-;:23;;;5320:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57046:7:::1;57067;:5;:7::i;:::-;57059:21;;57088;57059:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57045:69;;;57141:2;57133:11;;;::::0;::::1;;57026:134;56981:179::o:0;40331:225::-;40501:39;40518:4;40524:2;40528:7;40501:39;;;;;;;;;;;;:16;:39::i;:::-;40331:225;;;:::o;54465:474::-;54576:16;54626:23;54652:17;54662:6;54652:9;:17::i;:::-;54626:43;;54688:25;54730:15;54716:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54688:58;;54770:9;54765:125;54785:15;54781:1;:19;54765:125;;;54840:30;54860:6;54868:1;54840:19;:30::i;:::-;54826:8;54835:1;54826:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;54802:3;;;;;:::i;:::-;;;;54765:125;;;;54915:8;54908:15;;;;54465:474;;;:::o;55974:102::-;5339:12;:10;:12::i;:::-;5328:23;;:7;:5;:7::i;:::-;:23;;;5320:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56052:8:::1;56045:4;:15;;;;55974:102:::0;:::o;32096:292::-;32231:7;32288:13;:11;:13::i;:::-;32280:5;:21;32272:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32367:5;32360:12;;32096:292;;;:::o;52545:27::-;;;;;;;;;;;;;:::o;56416:120::-;5339:12;:10;:12::i;:::-;5328:23;;:7;:5;:7::i;:::-;:23;;;5320:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56509:11:::1;56499:7;:21;;;;;;;;;;;;:::i;:::-;;56416:120:::0;:::o;52504:26::-;;;;;;;;;;;;;:::o;36358:140::-;36422:7;36457:20;36469:7;36457:11;:20::i;:::-;:25;;;36450:32;;36358:140;;;:::o;51734:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34702:306::-;34766:7;34841:1;34824:19;;:5;:19;;;34794:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;34964:12;:19;34977:5;34964:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;34956:36;;34949:43;;34702:306;;;:::o;5833:119::-;5339:12;:10;:12::i;:::-;5328:23;;:7;:5;:7::i;:::-;:23;;;5320:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5906:30:::1;5933:1;5906:18;:30::i;:::-;5833:119::o:0;52423:31::-;;;;:::o;56092:138::-;5339:12;:10;:12::i;:::-;5328:23;;:7;:5;:7::i;:::-;:23;;;5320:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56197:17:::1;56181:13;:33;;;;56092:138:::0;:::o;5054:103::-;5100:7;5135:6;;;;;;;;;;;5128:13;;5054:103;:::o;36810:120::-;36866:13;36907:7;36900:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36810:120;:::o;53417:1032::-;53495:6;;;;;;;;;;;53494:7;53486:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;53543:14;53560:13;:11;:13::i;:::-;53543:30;;53614:1;53600:11;:15;53592:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;53705:9;;53690:11;53681:6;:20;;;;:::i;:::-;:33;;53673:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;53829:7;:5;:7::i;:::-;53815:21;;:10;:21;;;53811:567;;53905:11;;53893:9;;:23;;;;:::i;:::-;53878:11;53869:6;:20;;;;:::i;:::-;:47;;53861:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;54026:11;54019:4;;:18;;;;:::i;:::-;54006:9;:31;;53998:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;54085:23;54111:21;54121:10;54111:9;:21::i;:::-;54085:47;;54182:18;;54164:15;:36;54155:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;54297:13;;54282:11;:28;;54274:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;53838:540;53811:567;54396:34;54406:10;54418:11;54396:9;:34::i;:::-;53467:982;53417:1032;:::o;39177:367::-;39339:12;:10;:12::i;:::-;39327:24;;:8;:24;;;39319:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;39448:8;39403:18;:32;39422:12;:10;:12::i;:::-;39403:32;;;;;;;;;;;;;;;:42;39436:8;39403:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;39509:8;39480:48;;39495:12;:10;:12::i;:::-;39480:48;;;39519:8;39480:48;;;;;;:::i;:::-;;;;;;;;39177:367;;:::o;55719:85::-;5339:12;:10;:12::i;:::-;5328:23;;:7;:5;:7::i;:::-;:23;;;5320:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55784:4:::1;55773:8;;:15;;;;;;;;;;;;;;;;;;55719:85::o:0;40657:443::-;40864:28;40874:4;40880:2;40884:7;40864:9;:28::i;:::-;40941:48;40964:4;40970:2;40974:7;40983:5;40941:22;:48::i;:::-;40911:173;;;;;;;;;;;;:::i;:::-;;;;;;;;;40657:443;;;;:::o;52278:37::-;;;;:::o;51770:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;54955:717::-;55113:13;55186:16;55194:7;55186;:16::i;:::-;55160:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;55341:5;55329:17;;:8;;;;;;;;;;;:17;;;55326:86;;55378:14;55371:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55326:86;55432:28;55463:10;:8;:10::i;:::-;55432:41;;55530:1;55505:14;55499:28;:32;:157;;;;;;;;;;;;;;;;;55579:14;55595:18;:7;:16;:18::i;:::-;55615:13;55562:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55499:157;55492:164;;;54955:717;;;;:::o;55832:126::-;5339:12;:10;:12::i;:::-;5328:23;;:7;:5;:7::i;:::-;:23;;;5320:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55936:6:::1;55915:18;:27;;;;55832:126:::0;:::o;52185:31::-;;;;:::o;56825:126::-;5339:12;:10;:12::i;:::-;5328:23;;:7;:5;:7::i;:::-;:23;;;5320:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56923:11:::1;56909;:25;;;;56825:126:::0;:::o;56552:144::-;5339:12;:10;:12::i;:::-;5328:23;;:7;:5;:7::i;:::-;:23;;;5320:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56663:17:::1;56647:13;:33;;;;;;;;;;;;:::i;:::-;;56552:144:::0;:::o;39645:278::-;39827:4;39872:18;:25;39891:5;39872:25;;;;;;;;;;;;;;;:35;39898:8;39872:35;;;;;;;;;;;;;;;;;;;;;;;;;39865:42;;39645:278;;;;:::o;56258:142::-;5339:12;:10;:12::i;:::-;5328:23;;:7;:5;:7::i;:::-;:23;;;5320:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56369:15:::1;56352:14;:32;;;;;;;;;;;;:::i;:::-;;56258:142:::0;:::o;6144:286::-;5339:12;:10;:12::i;:::-;5328:23;;:7;:5;:7::i;:::-;:23;;;5320:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6283:1:::1;6263:22;;:8;:22;;::::0;6233:134:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6386:28;6405:8;6386:18;:28::i;:::-;6144:286:::0;:::o;20972:271::-;21142:4;21202:25;21187:40;;;:11;:40;;;;21180:47;;20972:271;;;:::o;3530:114::-;3583:7;3618:10;3611:17;;3530:114;:::o;41413:127::-;41470:4;41512:12;;41502:7;:22;41495:29;;41413:127;;;:::o;47577:252::-;47759:2;47732:15;:24;47748:7;47732:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;47805:7;47801:2;47785:28;;47794:5;47785:28;;;;;;;;;;;;47577:252;;;:::o;44977:2438::-;45132:35;45170:20;45182:7;45170:11;:20::i;:::-;45132:58;;45211:22;45253:13;:18;;;45237:34;;:12;:10;:12::i;:::-;:34;;;:95;;;;45320:12;:10;:12::i;:::-;45296:36;;:20;45308:7;45296:11;:20::i;:::-;:36;;;45237:95;:170;;;;45357:50;45374:13;:18;;;45394:12;:10;:12::i;:::-;45357:16;:50::i;:::-;45237:170;45211:197;;45459:17;45429:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;45643:4;45621:26;;:13;:18;;;:26;;;45591:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;45770:1;45756:16;;:2;:16;;;45748:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;45835:43;45857:4;45863:2;45867:7;45876:1;45835:21;:43::i;:::-;45959:49;45976:1;45980:7;45989:13;:18;;;45959:8;:49::i;:::-;46374:1;46344:12;:18;46357:4;46344:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46426:1;46398:12;:16;46411:2;46398:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46480:2;46452:11;:20;46464:7;46452:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;46550:15;46505:11;:20;46517:7;46505:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;46842:19;46874:1;46864:7;:11;46842:33;;46943:1;46902:43;;:11;:24;46914:11;46902:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;46898:369;;46978:20;46986:11;46978:7;:20::i;:::-;46974:270;;;47063:13;:18;;;47031:11;:24;47043:11;47031:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;47154:13;:62;;;47112:11;:24;47124:11;47112:24;;;;;;;;;;;:39;;;:104;;;;;;;;;;;;;;;;;;46974:270;46898:369;46311:975;47330:7;47326:2;47311:27;;47320:4;47311:27;;;;;;;;;;;;47357:42;47378:4;47384:2;47388:7;47397:1;47357:20;:42::i;:::-;45113:2302;;44977:2438;;;:::o;41556:120::-;41633:27;41643:2;41647:8;41633:27;;;;;;;;;;;;:9;:27::i;:::-;41556:120;;:::o;35577:689::-;35689:21;;:::i;:::-;35752:16;35760:7;35752;:16::i;:::-;35744:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35874:12;35889:7;35874:22;;35869:285;35906:1;35898:4;:9;35869:285;;35944:31;35978:11;:17;35990:4;35978:17;;;;;;;;;;;35944:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36052:1;36026:28;;:9;:14;;;:28;;;36022:109;;36094:9;36087:16;;;;;;36022:109;35917:237;35909:6;;;;;;;;35869:285;;;;36193:57;;;;;;;;;;:::i;:::-;;;;;;;;35577:689;;;;:::o;6627:223::-;6709:16;6728:6;;;;;;;;;;;6709:25;;6762:8;6753:6;;:17;;;;;;;;;;;;;;;;;;6825:8;6794:40;;6815:8;6794:40;;;;;;;;;;;;6690:160;6627:223;:::o;48473:1225::-;48668:4;48697:15;:2;:13;;;:15::i;:::-;48693:990;;;48782:2;48766:36;;;48833:12;:10;:12::i;:::-;48876:4;48911:7;48949:5;48766:215;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;48737:867;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49217:1;49200:6;:13;:18;49196:385;;49251:125;;;;;;;;;;:::i;:::-;;;;;;;;49196:385;49515:6;49509:13;49500:6;49496:2;49492:15;49485:38;48737:867;49071:45;;;49061:55;;;:6;:55;;;;49054:62;;;;;48693:990;49659:4;49652:11;;48473:1225;;;;;;;:::o;53110:124::-;53170:13;53211:7;53204:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53110:124;:::o;589:875::-;645:13;899:1;890:5;:10;886:69;;925:10;;;;;;;;;;;;;;;;;;;;;886:69;973:12;988:5;973:20;;1012:14;1045:102;1060:1;1052:4;:9;1045:102;;1086:8;;;;;:::i;:::-;;;;1125:2;1117:10;;;;;:::i;:::-;;;1045:102;;;1165:19;1197:6;1187:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1165:39;;1223:186;1239:1;1230:5;:10;1223:186;;1275:1;1265:11;;;;;:::i;:::-;;;1350:2;1342:5;:10;;;;:::i;:::-;1329:2;:24;;;;:::i;:::-;1316:39;;1299:6;1306;1299:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1387:2;1378:11;;;;;:::i;:::-;;;1223:186;;;1441:6;1427:21;;;;;589:875;;;;:::o;50279:199::-;;;;;:::o;50983:198::-;;;;;:::o;42118:211::-;42281:32;42287:2;42291:8;42301:5;42308:4;42281:5;:32::i;:::-;42118:211;;;:::o;8336:366::-;8396:4;8685:1;8663:7;:19;;;:23;8656:30;;8336:366;;;:::o;42667:1977::-;42854:20;42877:12;;42854:35;;42930:1;42916:16;;:2;:16;;;42908:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43009:1;42997:8;:13;42989:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43076:61;43106:1;43110:2;43114:12;43128:8;43076:21;:61::i;:::-;43491:8;43455:12;:16;43468:2;43455:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43564:8;43523:12;:16;43536:2;43523:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43631:2;43598:11;:25;43610:12;43598:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;43706:15;43656:11;:25;43668:12;43656:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;43747:20;43770:12;43747:35;;43812:9;43807:670;43827:8;43823:1;:12;43807:670;;;43899:12;43895:2;43874:38;;43891:1;43874:38;;;;;;;;;;;;43943:4;43939:472;;;44022:242;44091:1;44132:2;44173:12;44224:5;44022:22;:242::i;:::-;43980:403;;;;;;;;;;;;:::i;:::-;;;;;;;;;43939:472;44439:14;;;;;;;43837:3;;;;;;;43807:670;;;;44516:12;44501;:27;;;;43422:1126;44568:60;44597:1;44601:2;44605:12;44619:8;44568:20;:60::i;:::-;42835:1809;42667:1977;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:329::-;6564:6;6613:2;6601:9;6592:7;6588:23;6584:32;6581:119;;;6619:79;;:::i;:::-;6581:119;6739:1;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6710:117;6505:329;;;;:::o;6840:114::-;6907:6;6941:5;6935:12;6925:22;;6840:114;;;:::o;6960:184::-;7059:11;7093:6;7088:3;7081:19;7133:4;7128:3;7124:14;7109:29;;6960:184;;;;:::o;7150:132::-;7217:4;7240:3;7232:11;;7270:4;7265:3;7261:14;7253:22;;7150:132;;;:::o;7288:108::-;7365:24;7383:5;7365:24;:::i;:::-;7360:3;7353:37;7288:108;;:::o;7402:179::-;7471:10;7492:46;7534:3;7526:6;7492:46;:::i;:::-;7570:4;7565:3;7561:14;7547:28;;7402:179;;;;:::o;7587:113::-;7657:4;7689;7684:3;7680:14;7672:22;;7587:113;;;:::o;7736:732::-;7855:3;7884:54;7932:5;7884:54;:::i;:::-;7954:86;8033:6;8028:3;7954:86;:::i;:::-;7947:93;;8064:56;8114:5;8064:56;:::i;:::-;8143:7;8174:1;8159:284;8184:6;8181:1;8178:13;8159:284;;;8260:6;8254:13;8287:63;8346:3;8331:13;8287:63;:::i;:::-;8280:70;;8373:60;8426:6;8373:60;:::i;:::-;8363:70;;8219:224;8206:1;8203;8199:9;8194:14;;8159:284;;;8163:14;8459:3;8452:10;;7860:608;;;7736:732;;;;:::o;8474:373::-;8617:4;8655:2;8644:9;8640:18;8632:26;;8704:9;8698:4;8694:20;8690:1;8679:9;8675:17;8668:47;8732:108;8835:4;8826:6;8732:108;:::i;:::-;8724:116;;8474:373;;;;:::o;8853:117::-;8962:1;8959;8952:12;8976:117;9085:1;9082;9075:12;9099:180;9147:77;9144:1;9137:88;9244:4;9241:1;9234:15;9268:4;9265:1;9258:15;9285:281;9368:27;9390:4;9368:27;:::i;:::-;9360:6;9356:40;9498:6;9486:10;9483:22;9462:18;9450:10;9447:34;9444:62;9441:88;;;9509:18;;:::i;:::-;9441:88;9549:10;9545:2;9538:22;9328:238;9285:281;;:::o;9572:129::-;9606:6;9633:20;;:::i;:::-;9623:30;;9662:33;9690:4;9682:6;9662:33;:::i;:::-;9572:129;;;:::o;9707:308::-;9769:4;9859:18;9851:6;9848:30;9845:56;;;9881:18;;:::i;:::-;9845:56;9919:29;9941:6;9919:29;:::i;:::-;9911:37;;10003:4;9997;9993:15;9985:23;;9707:308;;;:::o;10021:154::-;10105:6;10100:3;10095;10082:30;10167:1;10158:6;10153:3;10149:16;10142:27;10021:154;;;:::o;10181:412::-;10259:5;10284:66;10300:49;10342:6;10300:49;:::i;:::-;10284:66;:::i;:::-;10275:75;;10373:6;10366:5;10359:21;10411:4;10404:5;10400:16;10449:3;10440:6;10435:3;10431:16;10428:25;10425:112;;;10456:79;;:::i;:::-;10425:112;10546:41;10580:6;10575:3;10570;10546:41;:::i;:::-;10265:328;10181:412;;;;;:::o;10613:340::-;10669:5;10718:3;10711:4;10703:6;10699:17;10695:27;10685:122;;10726:79;;:::i;:::-;10685:122;10843:6;10830:20;10868:79;10943:3;10935:6;10928:4;10920:6;10916:17;10868:79;:::i;:::-;10859:88;;10675:278;10613:340;;;;:::o;10959:509::-;11028:6;11077:2;11065:9;11056:7;11052:23;11048:32;11045:119;;;11083:79;;:::i;:::-;11045:119;11231:1;11220:9;11216:17;11203:31;11261:18;11253:6;11250:30;11247:117;;;11283:79;;:::i;:::-;11247:117;11388:63;11443:7;11434:6;11423:9;11419:22;11388:63;:::i;:::-;11378:73;;11174:287;10959:509;;;;:::o;11474:468::-;11539:6;11547;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:53;11792:7;11783:6;11772:9;11768:22;11747:53;:::i;:::-;11737:63;;11693:117;11849:2;11875:50;11917:7;11908:6;11897:9;11893:22;11875:50;:::i;:::-;11865:60;;11820:115;11474:468;;;;;:::o;11948:307::-;12009:4;12099:18;12091:6;12088:30;12085:56;;;12121:18;;:::i;:::-;12085:56;12159:29;12181:6;12159:29;:::i;:::-;12151:37;;12243:4;12237;12233:15;12225:23;;11948:307;;;:::o;12261:410::-;12338:5;12363:65;12379:48;12420:6;12379:48;:::i;:::-;12363:65;:::i;:::-;12354:74;;12451:6;12444:5;12437:21;12489:4;12482:5;12478:16;12527:3;12518:6;12513:3;12509:16;12506:25;12503:112;;;12534:79;;:::i;:::-;12503:112;12624:41;12658:6;12653:3;12648;12624:41;:::i;:::-;12344:327;12261:410;;;;;:::o;12690:338::-;12745:5;12794:3;12787:4;12779:6;12775:17;12771:27;12761:122;;12802:79;;:::i;:::-;12761:122;12919:6;12906:20;12944:78;13018:3;13010:6;13003:4;12995:6;12991:17;12944:78;:::i;:::-;12935:87;;12751:277;12690:338;;;;:::o;13034:943::-;13129:6;13137;13145;13153;13202:3;13190:9;13181:7;13177:23;13173:33;13170:120;;;13209:79;;:::i;:::-;13170:120;13329:1;13354:53;13399:7;13390:6;13379:9;13375:22;13354:53;:::i;:::-;13344:63;;13300:117;13456:2;13482:53;13527:7;13518:6;13507:9;13503:22;13482:53;:::i;:::-;13472:63;;13427:118;13584:2;13610:53;13655:7;13646:6;13635:9;13631:22;13610:53;:::i;:::-;13600:63;;13555:118;13740:2;13729:9;13725:18;13712:32;13771:18;13763:6;13760:30;13757:117;;;13793:79;;:::i;:::-;13757:117;13898:62;13952:7;13943:6;13932:9;13928:22;13898:62;:::i;:::-;13888:72;;13683:287;13034:943;;;;;;;:::o;13983:474::-;14051:6;14059;14108:2;14096:9;14087:7;14083:23;14079:32;14076:119;;;14114:79;;:::i;:::-;14076:119;14234:1;14259:53;14304:7;14295:6;14284:9;14280:22;14259:53;:::i;:::-;14249:63;;14205:117;14361:2;14387:53;14432:7;14423:6;14412:9;14408:22;14387:53;:::i;:::-;14377:63;;14332:118;13983:474;;;;;:::o;14463:182::-;14603:34;14599:1;14591:6;14587:14;14580:58;14463:182;:::o;14651:366::-;14793:3;14814:67;14878:2;14873:3;14814:67;:::i;:::-;14807:74;;14890:93;14979:3;14890:93;:::i;:::-;15008:2;15003:3;14999:12;14992:19;;14651:366;;;:::o;15023:419::-;15189:4;15227:2;15216:9;15212:18;15204:26;;15276:9;15270:4;15266:20;15262:1;15251:9;15247:17;15240:47;15304:131;15430:4;15304:131;:::i;:::-;15296:139;;15023:419;;;:::o;15448:180::-;15496:77;15493:1;15486:88;15593:4;15590:1;15583:15;15617:4;15614:1;15607:15;15634:320;15678:6;15715:1;15709:4;15705:12;15695:22;;15762:1;15756:4;15752:12;15783:18;15773:81;;15839:4;15831:6;15827:17;15817:27;;15773:81;15901:2;15893:6;15890:14;15870:18;15867:38;15864:84;;15920:18;;:::i;:::-;15864:84;15685:269;15634:320;;;:::o;15960:232::-;16100:34;16096:1;16088:6;16084:14;16077:58;16169:15;16164:2;16156:6;16152:15;16145:40;15960:232;:::o;16198:366::-;16340:3;16361:67;16425:2;16420:3;16361:67;:::i;:::-;16354:74;;16437:93;16526:3;16437:93;:::i;:::-;16555:2;16550:3;16546:12;16539:19;;16198:366;;;:::o;16570:419::-;16736:4;16774:2;16763:9;16759:18;16751:26;;16823:9;16817:4;16813:20;16809:1;16798:9;16794:17;16787:47;16851:131;16977:4;16851:131;:::i;:::-;16843:139;;16570:419;;;:::o;16995:221::-;17135:34;17131:1;17123:6;17119:14;17112:58;17204:4;17199:2;17191:6;17187:15;17180:29;16995:221;:::o;17222:366::-;17364:3;17385:67;17449:2;17444:3;17385:67;:::i;:::-;17378:74;;17461:93;17550:3;17461:93;:::i;:::-;17579:2;17574:3;17570:12;17563:19;;17222:366;;;:::o;17594:419::-;17760:4;17798:2;17787:9;17783:18;17775:26;;17847:9;17841:4;17837:20;17833:1;17822:9;17818:17;17811:47;17875:131;18001:4;17875:131;:::i;:::-;17867:139;;17594:419;;;:::o;18019:244::-;18159:34;18155:1;18147:6;18143:14;18136:58;18228:27;18223:2;18215:6;18211:15;18204:52;18019:244;:::o;18269:366::-;18411:3;18432:67;18496:2;18491:3;18432:67;:::i;:::-;18425:74;;18508:93;18597:3;18508:93;:::i;:::-;18626:2;18621:3;18617:12;18610:19;;18269:366;;;:::o;18641:419::-;18807:4;18845:2;18834:9;18830:18;18822:26;;18894:9;18888:4;18884:20;18880:1;18869:9;18865:17;18858:47;18922:131;19048:4;18922:131;:::i;:::-;18914:139;;18641:419;;;:::o;19066:221::-;19206:34;19202:1;19194:6;19190:14;19183:58;19275:4;19270:2;19262:6;19258:15;19251:29;19066:221;:::o;19293:366::-;19435:3;19456:67;19520:2;19515:3;19456:67;:::i;:::-;19449:74;;19532:93;19621:3;19532:93;:::i;:::-;19650:2;19645:3;19641:12;19634:19;;19293:366;;;:::o;19665:419::-;19831:4;19869:2;19858:9;19854:18;19846:26;;19918:9;19912:4;19908:20;19904:1;19893:9;19889:17;19882:47;19946:131;20072:4;19946:131;:::i;:::-;19938:139;;19665:419;;;:::o;20090:233::-;20230:34;20226:1;20218:6;20214:14;20207:58;20299:16;20294:2;20286:6;20282:15;20275:41;20090:233;:::o;20329:366::-;20471:3;20492:67;20556:2;20551:3;20492:67;:::i;:::-;20485:74;;20568:93;20657:3;20568:93;:::i;:::-;20686:2;20681:3;20677:12;20670:19;;20329:366;;;:::o;20701:419::-;20867:4;20905:2;20894:9;20890:18;20882:26;;20954:9;20948:4;20944:20;20940:1;20929:9;20925:17;20918:47;20982:131;21108:4;20982:131;:::i;:::-;20974:139;;20701:419;;;:::o;21126:147::-;21227:11;21264:3;21249:18;;21126:147;;;;:::o;21279:114::-;;:::o;21399:398::-;21558:3;21579:83;21660:1;21655:3;21579:83;:::i;:::-;21572:90;;21671:93;21760:3;21671:93;:::i;:::-;21789:1;21784:3;21780:11;21773:18;;21399:398;;;:::o;21803:379::-;21987:3;22009:147;22152:3;22009:147;:::i;:::-;22002:154;;22173:3;22166:10;;21803:379;;;:::o;22188:180::-;22236:77;22233:1;22226:88;22333:4;22330:1;22323:15;22357:4;22354:1;22347:15;22374:180;22422:77;22419:1;22412:88;22519:4;22516:1;22509:15;22543:4;22540:1;22533:15;22560:233;22599:3;22622:24;22640:5;22622:24;:::i;:::-;22613:33;;22668:66;22661:5;22658:77;22655:103;;22738:18;;:::i;:::-;22655:103;22785:1;22778:5;22774:13;22767:20;;22560:233;;;:::o;22799:222::-;22939:34;22935:1;22927:6;22923:14;22916:58;23008:5;23003:2;22995:6;22991:15;22984:30;22799:222;:::o;23027:366::-;23169:3;23190:67;23254:2;23249:3;23190:67;:::i;:::-;23183:74;;23266:93;23355:3;23266:93;:::i;:::-;23384:2;23379:3;23375:12;23368:19;;23027:366;;;:::o;23399:419::-;23565:4;23603:2;23592:9;23588:18;23580:26;;23652:9;23646:4;23642:20;23638:1;23627:9;23623:17;23616:47;23680:131;23806:4;23680:131;:::i;:::-;23672:139;;23399:419;;;:::o;23824:230::-;23964:34;23960:1;23952:6;23948:14;23941:58;24033:13;24028:2;24020:6;24016:15;24009:38;23824:230;:::o;24060:366::-;24202:3;24223:67;24287:2;24282:3;24223:67;:::i;:::-;24216:74;;24299:93;24388:3;24299:93;:::i;:::-;24417:2;24412:3;24408:12;24401:19;;24060:366;;;:::o;24432:419::-;24598:4;24636:2;24625:9;24621:18;24613:26;;24685:9;24679:4;24675:20;24671:1;24660:9;24656:17;24649:47;24713:131;24839:4;24713:131;:::i;:::-;24705:139;;24432:419;;;:::o;24857:168::-;24997:20;24993:1;24985:6;24981:14;24974:44;24857:168;:::o;25031:366::-;25173:3;25194:67;25258:2;25253:3;25194:67;:::i;:::-;25187:74;;25270:93;25359:3;25270:93;:::i;:::-;25388:2;25383:3;25379:12;25372:19;;25031:366;;;:::o;25403:419::-;25569:4;25607:2;25596:9;25592:18;25584:26;;25656:9;25650:4;25646:20;25642:1;25631:9;25627:17;25620:47;25684:131;25810:4;25684:131;:::i;:::-;25676:139;;25403:419;;;:::o;25828:221::-;25968:34;25964:1;25956:6;25952:14;25945:58;26037:4;26032:2;26024:6;26020:15;26013:29;25828:221;:::o;26055:366::-;26197:3;26218:67;26282:2;26277:3;26218:67;:::i;:::-;26211:74;;26294:93;26383:3;26294:93;:::i;:::-;26412:2;26407:3;26403:12;26396:19;;26055:366;;;:::o;26427:419::-;26593:4;26631:2;26620:9;26616:18;26608:26;;26680:9;26674:4;26670:20;26666:1;26655:9;26651:17;26644:47;26708:131;26834:4;26708:131;:::i;:::-;26700:139;;26427:419;;;:::o;26852:305::-;26892:3;26911:20;26929:1;26911:20;:::i;:::-;26906:25;;26945:20;26963:1;26945:20;:::i;:::-;26940:25;;27099:1;27031:66;27027:74;27024:1;27021:81;27018:107;;;27105:18;;:::i;:::-;27018:107;27149:1;27146;27142:9;27135:16;;26852:305;;;;:::o;27163:241::-;27303:34;27299:1;27291:6;27287:14;27280:58;27372:24;27367:2;27359:6;27355:15;27348:49;27163:241;:::o;27410:366::-;27552:3;27573:67;27637:2;27632:3;27573:67;:::i;:::-;27566:74;;27649:93;27738:3;27649:93;:::i;:::-;27767:2;27762:3;27758:12;27751:19;;27410:366;;;:::o;27782:419::-;27948:4;27986:2;27975:9;27971:18;27963:26;;28035:9;28029:4;28025:20;28021:1;28010:9;28006:17;27999:47;28063:131;28189:4;28063:131;:::i;:::-;28055:139;;27782:419;;;:::o;28207:191::-;28247:4;28267:20;28285:1;28267:20;:::i;:::-;28262:25;;28301:20;28319:1;28301:20;:::i;:::-;28296:25;;28340:1;28337;28334:8;28331:34;;;28345:18;;:::i;:::-;28331:34;28390:1;28387;28383:9;28375:17;;28207:191;;;;:::o;28404:348::-;28444:7;28467:20;28485:1;28467:20;:::i;:::-;28462:25;;28501:20;28519:1;28501:20;:::i;:::-;28496:25;;28689:1;28621:66;28617:74;28614:1;28611:81;28606:1;28599:9;28592:17;28588:105;28585:131;;;28696:18;;:::i;:::-;28585:131;28744:1;28741;28737:9;28726:20;;28404:348;;;;:::o;28758:170::-;28898:22;28894:1;28886:6;28882:14;28875:46;28758:170;:::o;28934:366::-;29076:3;29097:67;29161:2;29156:3;29097:67;:::i;:::-;29090:74;;29173:93;29262:3;29173:93;:::i;:::-;29291:2;29286:3;29282:12;29275:19;;28934:366;;;:::o;29306:419::-;29472:4;29510:2;29499:9;29495:18;29487:26;;29559:9;29553:4;29549:20;29545:1;29534:9;29530:17;29523:47;29587:131;29713:4;29587:131;:::i;:::-;29579:139;;29306:419;;;:::o;29731:233::-;29871:34;29867:1;29859:6;29855:14;29848:58;29940:16;29935:2;29927:6;29923:15;29916:41;29731:233;:::o;29970:366::-;30112:3;30133:67;30197:2;30192:3;30133:67;:::i;:::-;30126:74;;30209:93;30298:3;30209:93;:::i;:::-;30327:2;30322:3;30318:12;30311:19;;29970:366;;;:::o;30342:419::-;30508:4;30546:2;30535:9;30531:18;30523:26;;30595:9;30589:4;30585:20;30581:1;30570:9;30566:17;30559:47;30623:131;30749:4;30623:131;:::i;:::-;30615:139;;30342:419;;;:::o;30767:230::-;30907:34;30903:1;30895:6;30891:14;30884:58;30976:13;30971:2;30963:6;30959:15;30952:38;30767:230;:::o;31003:366::-;31145:3;31166:67;31230:2;31225:3;31166:67;:::i;:::-;31159:74;;31242:93;31331:3;31242:93;:::i;:::-;31360:2;31355:3;31351:12;31344:19;;31003:366;;;:::o;31375:419::-;31541:4;31579:2;31568:9;31564:18;31556:26;;31628:9;31622:4;31618:20;31614:1;31603:9;31599:17;31592:47;31656:131;31782:4;31656:131;:::i;:::-;31648:139;;31375:419;;;:::o;31800:176::-;31940:28;31936:1;31928:6;31924:14;31917:52;31800:176;:::o;31982:366::-;32124:3;32145:67;32209:2;32204:3;32145:67;:::i;:::-;32138:74;;32221:93;32310:3;32221:93;:::i;:::-;32339:2;32334:3;32330:12;32323:19;;31982:366;;;:::o;32354:419::-;32520:4;32558:2;32547:9;32543:18;32535:26;;32607:9;32601:4;32597:20;32593:1;32582:9;32578:17;32571:47;32635:131;32761:4;32635:131;:::i;:::-;32627:139;;32354:419;;;:::o;32779:238::-;32919:34;32915:1;32907:6;32903:14;32896:58;32988:21;32983:2;32975:6;32971:15;32964:46;32779:238;:::o;33023:366::-;33165:3;33186:67;33250:2;33245:3;33186:67;:::i;:::-;33179:74;;33262:93;33351:3;33262:93;:::i;:::-;33380:2;33375:3;33371:12;33364:19;;33023:366;;;:::o;33395:419::-;33561:4;33599:2;33588:9;33584:18;33576:26;;33648:9;33642:4;33638:20;33634:1;33623:9;33619:17;33612:47;33676:131;33802:4;33676:131;:::i;:::-;33668:139;;33395:419;;;:::o;33820:234::-;33960:34;33956:1;33948:6;33944:14;33937:58;34029:17;34024:2;34016:6;34012:15;34005:42;33820:234;:::o;34060:366::-;34202:3;34223:67;34287:2;34282:3;34223:67;:::i;:::-;34216:74;;34299:93;34388:3;34299:93;:::i;:::-;34417:2;34412:3;34408:12;34401:19;;34060:366;;;:::o;34432:419::-;34598:4;34636:2;34625:9;34621:18;34613:26;;34685:9;34679:4;34675:20;34671:1;34660:9;34656:17;34649:47;34713:131;34839:4;34713:131;:::i;:::-;34705:139;;34432:419;;;:::o;34857:148::-;34959:11;34996:3;34981:18;;34857:148;;;;:::o;35011:377::-;35117:3;35145:39;35178:5;35145:39;:::i;:::-;35200:89;35282:6;35277:3;35200:89;:::i;:::-;35193:96;;35298:52;35343:6;35338:3;35331:4;35324:5;35320:16;35298:52;:::i;:::-;35375:6;35370:3;35366:16;35359:23;;35121:267;35011:377;;;;:::o;35394:141::-;35443:4;35466:3;35458:11;;35489:3;35486:1;35479:14;35523:4;35520:1;35510:18;35502:26;;35394:141;;;:::o;35565:845::-;35668:3;35705:5;35699:12;35734:36;35760:9;35734:36;:::i;:::-;35786:89;35868:6;35863:3;35786:89;:::i;:::-;35779:96;;35906:1;35895:9;35891:17;35922:1;35917:137;;;;36068:1;36063:341;;;;35884:520;;35917:137;36001:4;35997:9;35986;35982:25;35977:3;35970:38;36037:6;36032:3;36028:16;36021:23;;35917:137;;36063:341;36130:38;36162:5;36130:38;:::i;:::-;36190:1;36204:154;36218:6;36215:1;36212:13;36204:154;;;36292:7;36286:14;36282:1;36277:3;36273:11;36266:35;36342:1;36333:7;36329:15;36318:26;;36240:4;36237:1;36233:12;36228:17;;36204:154;;;36387:6;36382:3;36378:16;36371:23;;36070:334;;35884:520;;35672:738;;35565:845;;;;:::o;36416:589::-;36641:3;36663:95;36754:3;36745:6;36663:95;:::i;:::-;36656:102;;36775:95;36866:3;36857:6;36775:95;:::i;:::-;36768:102;;36887:92;36975:3;36966:6;36887:92;:::i;:::-;36880:99;;36996:3;36989:10;;36416:589;;;;;;:::o;37011:225::-;37151:34;37147:1;37139:6;37135:14;37128:58;37220:8;37215:2;37207:6;37203:15;37196:33;37011:225;:::o;37242:366::-;37384:3;37405:67;37469:2;37464:3;37405:67;:::i;:::-;37398:74;;37481:93;37570:3;37481:93;:::i;:::-;37599:2;37594:3;37590:12;37583:19;;37242:366;;;:::o;37614:419::-;37780:4;37818:2;37807:9;37803:18;37795:26;;37867:9;37861:4;37857:20;37853:1;37842:9;37838:17;37831:47;37895:131;38021:4;37895:131;:::i;:::-;37887:139;;37614:419;;;:::o;38039:237::-;38179:34;38175:1;38167:6;38163:14;38156:58;38248:20;38243:2;38235:6;38231:15;38224:45;38039:237;:::o;38282:366::-;38424:3;38445:67;38509:2;38504:3;38445:67;:::i;:::-;38438:74;;38521:93;38610:3;38521:93;:::i;:::-;38639:2;38634:3;38630:12;38623:19;;38282:366;;;:::o;38654:419::-;38820:4;38858:2;38847:9;38843:18;38835:26;;38907:9;38901:4;38897:20;38893:1;38882:9;38878:17;38871:47;38935:131;39061:4;38935:131;:::i;:::-;38927:139;;38654:419;;;:::o;39079:225::-;39219:34;39215:1;39207:6;39203:14;39196:58;39288:8;39283:2;39275:6;39271:15;39264:33;39079:225;:::o;39310:366::-;39452:3;39473:67;39537:2;39532:3;39473:67;:::i;:::-;39466:74;;39549:93;39638:3;39549:93;:::i;:::-;39667:2;39662:3;39658:12;39651:19;;39310:366;;;:::o;39682:419::-;39848:4;39886:2;39875:9;39871:18;39863:26;;39935:9;39929:4;39925:20;39921:1;39910:9;39906:17;39899:47;39963:131;40089:4;39963:131;:::i;:::-;39955:139;;39682:419;;;:::o;40107:224::-;40247:34;40243:1;40235:6;40231:14;40224:58;40316:7;40311:2;40303:6;40299:15;40292:32;40107:224;:::o;40337:366::-;40479:3;40500:67;40564:2;40559:3;40500:67;:::i;:::-;40493:74;;40576:93;40665:3;40576:93;:::i;:::-;40694:2;40689:3;40685:12;40678:19;;40337:366;;;:::o;40709:419::-;40875:4;40913:2;40902:9;40898:18;40890:26;;40962:9;40956:4;40952:20;40948:1;40937:9;40933:17;40926:47;40990:131;41116:4;40990:131;:::i;:::-;40982:139;;40709:419;;;:::o;41134:229::-;41274:34;41270:1;41262:6;41258:14;41251:58;41343:12;41338:2;41330:6;41326:15;41319:37;41134:229;:::o;41369:366::-;41511:3;41532:67;41596:2;41591:3;41532:67;:::i;:::-;41525:74;;41608:93;41697:3;41608:93;:::i;:::-;41726:2;41721:3;41717:12;41710:19;;41369:366;;;:::o;41741:419::-;41907:4;41945:2;41934:9;41930:18;41922:26;;41994:9;41988:4;41984:20;41980:1;41969:9;41965:17;41958:47;42022:131;42148:4;42022:131;:::i;:::-;42014:139;;41741:419;;;:::o;42166:234::-;42306:34;42302:1;42294:6;42290:14;42283:58;42375:17;42370:2;42362:6;42358:15;42351:42;42166:234;:::o;42406:366::-;42548:3;42569:67;42633:2;42628:3;42569:67;:::i;:::-;42562:74;;42645:93;42734:3;42645:93;:::i;:::-;42763:2;42758:3;42754:12;42747:19;;42406:366;;;:::o;42778:419::-;42944:4;42982:2;42971:9;42967:18;42959:26;;43031:9;43025:4;43021:20;43017:1;43006:9;43002:17;42995:47;43059:131;43185:4;43059:131;:::i;:::-;43051:139;;42778:419;;;:::o;43203:98::-;43254:6;43288:5;43282:12;43272:22;;43203:98;;;:::o;43307:168::-;43390:11;43424:6;43419:3;43412:19;43464:4;43459:3;43455:14;43440:29;;43307:168;;;;:::o;43481:360::-;43567:3;43595:38;43627:5;43595:38;:::i;:::-;43649:70;43712:6;43707:3;43649:70;:::i;:::-;43642:77;;43728:52;43773:6;43768:3;43761:4;43754:5;43750:16;43728:52;:::i;:::-;43805:29;43827:6;43805:29;:::i;:::-;43800:3;43796:39;43789:46;;43571:270;43481:360;;;;:::o;43847:640::-;44042:4;44080:3;44069:9;44065:19;44057:27;;44094:71;44162:1;44151:9;44147:17;44138:6;44094:71;:::i;:::-;44175:72;44243:2;44232:9;44228:18;44219:6;44175:72;:::i;:::-;44257;44325:2;44314:9;44310:18;44301:6;44257:72;:::i;:::-;44376:9;44370:4;44366:20;44361:2;44350:9;44346:18;44339:48;44404:76;44475:4;44466:6;44404:76;:::i;:::-;44396:84;;43847:640;;;;;;;:::o;44493:141::-;44549:5;44580:6;44574:13;44565:22;;44596:32;44622:5;44596:32;:::i;:::-;44493:141;;;;:::o;44640:349::-;44709:6;44758:2;44746:9;44737:7;44733:23;44729:32;44726:119;;;44764:79;;:::i;:::-;44726:119;44884:1;44909:63;44964:7;44955:6;44944:9;44940:22;44909:63;:::i;:::-;44899:73;;44855:127;44640:349;;;;:::o;44995:180::-;45043:77;45040:1;45033:88;45140:4;45137:1;45130:15;45164:4;45161:1;45154:15;45181:185;45221:1;45238:20;45256:1;45238:20;:::i;:::-;45233:25;;45272:20;45290:1;45272:20;:::i;:::-;45267:25;;45311:1;45301:35;;45316:18;;:::i;:::-;45301:35;45358:1;45355;45351:9;45346:14;;45181:185;;;;:::o;45372:176::-;45404:1;45421:20;45439:1;45421:20;:::i;:::-;45416:25;;45455:20;45473:1;45455:20;:::i;:::-;45450:25;;45494:1;45484:35;;45499:18;;:::i;:::-;45484:35;45540:1;45537;45533:9;45528:14;;45372:176;;;;:::o;45554:220::-;45694:34;45690:1;45682:6;45678:14;45671:58;45763:3;45758:2;45750:6;45746:15;45739:28;45554:220;:::o;45780:366::-;45922:3;45943:67;46007:2;46002:3;45943:67;:::i;:::-;45936:74;;46019:93;46108:3;46019:93;:::i;:::-;46137:2;46132:3;46128:12;46121:19;;45780:366;;;:::o;46152:419::-;46318:4;46356:2;46345:9;46341:18;46333:26;;46405:9;46399:4;46395:20;46391:1;46380:9;46376:17;46369:47;46433:131;46559:4;46433:131;:::i;:::-;46425:139;;46152:419;;;:::o;46577:227::-;46717:34;46713:1;46705:6;46701:14;46694:58;46786:10;46781:2;46773:6;46769:15;46762:35;46577:227;:::o;46810:366::-;46952:3;46973:67;47037:2;47032:3;46973:67;:::i;:::-;46966:74;;47049:93;47138:3;47049:93;:::i;:::-;47167:2;47162:3;47158:12;47151:19;;46810:366;;;:::o;47182:419::-;47348:4;47386:2;47375:9;47371:18;47363:26;;47435:9;47429:4;47425:20;47421:1;47410:9;47406:17;47399:47;47463:131;47589:4;47463:131;:::i;:::-;47455:139;;47182:419;;;:::o

Swarm Source

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