ETH Price: $3,457.44 (-1.85%)
Gas: 3 Gwei

Token

LHHSNFT (LHHS)
 

Overview

Max Total Supply

763 LHHS

Holders

55

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
rockroll.eth
Balance
1 LHHS
0x6659b3ac47dc9b7b0a0211a4bdfdc4d4831bd8f0
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:
LHHS

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-20
*/

/**
 *Submitted for verification at Etherscan.io on 2022-04-20
*/

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (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: @openzeppelin/contracts/token/ERC721/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: @openzeppelin/contracts/utils/introspection/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: @openzeppelin/contracts/utils/introspection/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: @openzeppelin/contracts/token/ERC721/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: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/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: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: contracts/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.4;









error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintedQueryForZeroAddress();
error BurnedQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerIndexOutOfBounds();
error OwnerQueryForNonexistentToken();
error TokenIndexOutOfBounds();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @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..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**128 - 1 (max value of uint128).
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
    }

    // Compiler will pack the following 
    // _currentIndex and _burnCounter into a single 256bit word.
    
    // The tokenId of the next token to be minted.
    uint128 internal _currentIndex;

    // The number of tokens burned.
    uint128 internal _burnCounter;

    // 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) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex times
        unchecked {
            return _currentIndex - _burnCounter;    
        }
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     * 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 tokenByIndex(uint256 index) public view override returns (uint256) {
        uint256 numMintedSoFar = _currentIndex;
        uint256 tokenIdsIdx;

        // 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.burned) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }
        revert TokenIndexOutOfBounds();
    }

    /**
     * @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) {
        if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds();
        uint256 numMintedSoFar = _currentIndex;
        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.burned) {
                    continue;
                }
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }

        // Execution should never reach this point.
        revert();
    }

    /**
     * @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) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert MintedQueryForZeroAddress();
        return uint256(_addressData[owner].numberMinted);
    }

    function _numberBurned(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert BurnedQueryForZeroAddress();
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * 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) {
        uint256 curr = tokenId;

        unchecked {
            if (curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant: 
                    // There will always be an ownership that has an address and is not burned 
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        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);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public override {
        if (operator == _msgSender()) revert ApproveToCaller();

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

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (!_checkOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @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 && !_ownerships[tokenId].burned;
    }

    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;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _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 > 3.4e38 (2**128) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(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 && !_checkOnERC721Received(address(0), to, updatedIndex, _data)) {
                    revert TransferToNonERC721ReceiverImplementer();
                }
                updatedIndex++;
            }

            _currentIndex = uint128(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 ||
            isApprovedForAll(prevOwnership.addr, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();
        if (to == address(0)) revert TransferToZeroAddress();

        _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**128.
        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)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

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

        _beforeTokenTransfers(prevOwnership.addr, address(0), 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**128.
        unchecked {
            _addressData[prevOwnership.addr].balance -= 1;
            _addressData[prevOwnership.addr].numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            _ownerships[tokenId].addr = prevOwnership.addr;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);
            _ownerships[tokenId].burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn 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)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(prevOwnership.addr, address(0), tokenId);
        _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked { 
            _burnCounter++;
        }
    }

    /**
     * @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 TransferToNonERC721ReceiverImplementer();
                } 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.
     * And also called before burning one token.
     *
     * 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`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    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.
     * And also called after one token has been burned.
     *
     * 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` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}
// File: @openzeppelin/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: contracts/lhhs.sol


pragma solidity ^0.8.2;



contract LHHS is ERC721A, Ownable {
    enum Status {
        Waiting,
        Started,
        Finished
    }

    Status public status;
    string public baseURI;
    uint256 public team_mint = 666;
    uint256 public constant MAX_MINT_PER_ADDR = 10;
    uint256 public constant MAX_SUPPLY = 6666;
    uint256 public constant PRICE = 0.0066 * 10**18; // 0.0066 ETH
     
    event Minted(address minter, uint256 amount);
    event StatusChanged(Status status);
    event BaseURIChanged(string newBaseURI);

    constructor(string memory initBaseURI) ERC721A("LHHSNFT", "LHHS") {
        baseURI = initBaseURI;
    }

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

    function mint(uint256 quantity) external payable {
        require(status == Status.Started, "LHHS: Hai mei kai shi.");
        require(tx.origin == msg.sender, "LHHS: Bu yun xu he yue diao yong.");
        require(
            numberMinted(msg.sender) + quantity <= MAX_MINT_PER_ADDR,
            "LHHS: Zui duo lia."
        );
        require(
            totalSupply() + quantity <= MAX_SUPPLY,
            "LHHS: Mei zhe me duo le."
        );

        _safeMint(msg.sender, quantity);
        refundIfOver(PRICE * quantity);

        emit Minted(msg.sender, quantity);
    }
    /*giveaway
    **/
    function giveaway(uint256 numberOfTokens) external onlyOwner {
        require(team_mint > 0, "NFTS_FOR_THE_TEAM_HAS_BEEN_MINTED");
        require(numberOfTokens <= team_mint, "EXCEEDS_MAX_MINT_FOR_TEAM");

        team_mint -= numberOfTokens;
        _safeMint(msg.sender, numberOfTokens);
    }
    /*giveaway-end
    **/

    function numberMinted(address owner) public view returns (uint256) {
        return _numberMinted(owner);
    }
    function refundIfOver(uint256 price) private {
        require(msg.value >= price, "LHHS: Mei duo gei ETH.");
        if (msg.value > price) {
            payable(msg.sender).transfer(msg.value - price);
        }
    }

    function setStatus(Status _status) external onlyOwner {
        status = _status;
        emit StatusChanged(status);
    }

    function setBaseURI(string calldata newBaseURI) external onlyOwner {
        baseURI = newBaseURI;
        emit BaseURIChanged(newBaseURI);
    }

    function withdraw(address payable recipient) external onlyOwner {
        uint256 balance = address(this).balance;
        (bool success, ) = recipient.call{value: balance}("");
        require(success, "LHHS: Wan le, quan wan le.");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"MintedQueryForZeroAddress","type":"error"},{"inputs":[],"name":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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":false,"internalType":"string","name":"newBaseURI","type":"string"}],"name":"BaseURIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Minted","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":false,"internalType":"enum LHHS.Status","name":"status","type":"uint8"}],"name":"StatusChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_MINT_PER_ADDR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"giveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum LHHS.Status","name":"_status","type":"uint8"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"enum LHHS.Status","name":"","type":"uint8"}],"stateMutability":"view","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":[],"name":"team_mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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 payable","name":"recipient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405261029a6009553480156200001757600080fd5b50604051620045d1380380620045d183398181016040528101906200003d91906200030d565b6040518060400160405280600781526020017f4c4848534e4654000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4c484853000000000000000000000000000000000000000000000000000000008152508160019080519060200190620000c1929190620001eb565b508060029080519060200190620000da929190620001eb565b505050620000fd620000f16200011d60201b60201c565b6200012560201b60201c565b806008908051906020019062000115929190620001eb565b5050620004c2565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001f990620003e7565b90600052602060002090601f0160209004810192826200021d576000855562000269565b82601f106200023857805160ff191683800117855562000269565b8280016001018555821562000269579182015b82811115620002685782518255916020019190600101906200024b565b5b5090506200027891906200027c565b5090565b5b80821115620002975760008160009055506001016200027d565b5090565b6000620002b2620002ac846200037b565b62000352565b905082815260208101848484011115620002cb57600080fd5b620002d8848285620003b1565b509392505050565b600082601f830112620002f257600080fd5b8151620003048482602086016200029b565b91505092915050565b6000602082840312156200032057600080fd5b600082015167ffffffffffffffff8111156200033b57600080fd5b6200034984828501620002e0565b91505092915050565b60006200035e62000371565b90506200036c82826200041d565b919050565b6000604051905090565b600067ffffffffffffffff82111562000399576200039862000482565b5b620003a482620004b1565b9050602081019050919050565b60005b83811015620003d1578082015181840152602081019050620003b4565b83811115620003e1576000848401525b50505050565b600060028204905060018216806200040057607f821691505b6020821081141562000417576200041662000453565b5b50919050565b6200042882620004b1565b810181811067ffffffffffffffff821117156200044a576200044962000482565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6140ff80620004d26000396000f3fe6080604052600436106101d85760003560e01c806355f804b31161010257806395d89b4111610095578063c87b56dd11610064578063c87b56dd1461069d578063dc33e681146106da578063e985e9c514610717578063f2fde38b14610754576101d8565b806395d89b4114610604578063a0712d681461062f578063a22cb4651461064b578063b88d4fde14610674576101d8565b8063715018a6116100d1578063715018a61461056e578063799b31e8146105855780638d859f3e146105ae5780638da5cb5b146105d9576101d8565b806355f804b3146104a05780636352211e146104c95780636c0360eb1461050657806370a0823114610531576101d8565b806323b872dd1161017a57806342842e0e1161014957806342842e0e146103e65780634f423a9d1461040f5780634f6ccce71461043a57806351cff8d914610477576101d8565b806323b872dd1461032c5780632e49d78b146103555780632f745c591461037e57806332cb6b0c146103bb576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806316154862146102ab57806318160ddd146102d6578063200d2ed214610301576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff919061338e565b61077d565b60405161021191906137cd565b60405180910390f35b34801561022657600080fd5b5061022f6108c7565b60405161023c9190613827565b60405180910390f35b34801561025157600080fd5b5061026c6004803603810190610267919061344e565b610959565b604051610279919061373d565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190613352565b6109d5565b005b3480156102b757600080fd5b506102c0610ae0565b6040516102cd9190613989565b60405180910390f35b3480156102e257600080fd5b506102eb610ae5565b6040516102f89190613989565b60405180910390f35b34801561030d57600080fd5b50610316610b3a565b60405161032391906137e8565b60405180910390f35b34801561033857600080fd5b50610353600480360381019061034e919061324c565b610b4d565b005b34801561036157600080fd5b5061037c600480360381019061037791906133e0565b610b5d565b005b34801561038a57600080fd5b506103a560048036038101906103a09190613352565b610c72565b6040516103b29190613989565b60405180910390f35b3480156103c757600080fd5b506103d0610e79565b6040516103dd9190613989565b60405180910390f35b3480156103f257600080fd5b5061040d6004803603810190610408919061324c565b610e7f565b005b34801561041b57600080fd5b50610424610e9f565b6040516104319190613989565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c919061344e565b610ea5565b60405161046e9190613989565b60405180910390f35b34801561048357600080fd5b5061049e600480360381019061049991906131e7565b611016565b005b3480156104ac57600080fd5b506104c760048036038101906104c29190613409565b611148565b005b3480156104d557600080fd5b506104f060048036038101906104eb919061344e565b611213565b6040516104fd919061373d565b60405180910390f35b34801561051257600080fd5b5061051b611229565b6040516105289190613827565b60405180910390f35b34801561053d57600080fd5b50610558600480360381019061055391906131be565b6112b7565b6040516105659190613989565b60405180910390f35b34801561057a57600080fd5b50610583611387565b005b34801561059157600080fd5b506105ac60048036038101906105a7919061344e565b61140f565b005b3480156105ba57600080fd5b506105c361153b565b6040516105d09190613989565b60405180910390f35b3480156105e557600080fd5b506105ee611546565b6040516105fb919061373d565b60405180910390f35b34801561061057600080fd5b50610619611570565b6040516106269190613827565b60405180910390f35b6106496004803603810190610644919061344e565b611602565b005b34801561065757600080fd5b50610672600480360381019061066d9190613316565b611841565b005b34801561068057600080fd5b5061069b6004803603810190610696919061329b565b6119b9565b005b3480156106a957600080fd5b506106c460048036038101906106bf919061344e565b611a0c565b6040516106d19190613827565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc91906131be565b611aab565b60405161070e9190613989565b60405180910390f35b34801561072357600080fd5b5061073e60048036038101906107399190613210565b611abd565b60405161074b91906137cd565b60405180910390f35b34801561076057600080fd5b5061077b600480360381019061077691906131be565b611b51565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108b057507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108c057506108bf82611c49565b5b9050919050565b6060600180546108d690613c4a565b80601f016020809104026020016040519081016040528092919081815260200182805461090290613c4a565b801561094f5780601f106109245761010080835404028352916020019161094f565b820191906000526020600020905b81548152906001019060200180831161093257829003601f168201915b5050505050905090565b600061096482611cb3565b61099a576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109e082611213565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a48576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a67611d1b565b73ffffffffffffffffffffffffffffffffffffffff1614158015610a995750610a9781610a92611d1b565b611abd565b155b15610ad0576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610adb838383611d23565b505050565b600a81565b60008060109054906101000a90046fffffffffffffffffffffffffffffffff1660008054906101000a90046fffffffffffffffffffffffffffffffff16036fffffffffffffffffffffffffffffffff16905090565b600760149054906101000a900460ff1681565b610b58838383611dd5565b505050565b610b65611d1b565b73ffffffffffffffffffffffffffffffffffffffff16610b83611546565b73ffffffffffffffffffffffffffffffffffffffff1614610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd0906138c9565b60405180910390fd5b80600760146101000a81548160ff02191690836002811115610c24577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055507fafa725e7f44cadb687a7043853fa1a7e7b8f0da74ce87ec546e9420f04da8c1e600760149054906101000a900460ff16604051610c6791906137e8565b60405180910390a150565b6000610c7d836112b7565b8210610cb5576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008060005b83811015610e6d576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015115610dcc5750610e60565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e0c57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e5e5786841415610e55578195505050505050610e73565b83806001019450505b505b8080600101915050610cef565b50600080fd5b92915050565b611a0a81565b610e9a838383604051806020016040528060008152506119b9565b505050565b60095481565b60008060008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1690506000805b82811015610fde576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151610fd05785831415610fc75781945050505050611011565b82806001019350505b508080600101915050610edd565b506040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b61101e611d1b565b73ffffffffffffffffffffffffffffffffffffffff1661103c611546565b73ffffffffffffffffffffffffffffffffffffffff1614611092576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611089906138c9565b60405180910390fd5b600047905060008273ffffffffffffffffffffffffffffffffffffffff16826040516110bd90613728565b60006040518083038185875af1925050503d80600081146110fa576040519150601f19603f3d011682016040523d82523d6000602084013e6110ff565b606091505b5050905080611143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113a906138a9565b60405180910390fd5b505050565b611150611d1b565b73ffffffffffffffffffffffffffffffffffffffff1661116e611546565b73ffffffffffffffffffffffffffffffffffffffff16146111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb906138c9565b60405180910390fd5b8181600891906111d5929190612f93565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf68282604051611207929190613803565b60405180910390a15050565b600061121e826122f2565b600001519050919050565b6008805461123690613c4a565b80601f016020809104026020016040519081016040528092919081815260200182805461126290613c4a565b80156112af5780601f10611284576101008083540402835291602001916112af565b820191906000526020600020905b81548152906001019060200180831161129257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561131f576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61138f611d1b565b73ffffffffffffffffffffffffffffffffffffffff166113ad611546565b73ffffffffffffffffffffffffffffffffffffffff1614611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fa906138c9565b60405180910390fd5b61140d600061259a565b565b611417611d1b565b73ffffffffffffffffffffffffffffffffffffffff16611435611546565b73ffffffffffffffffffffffffffffffffffffffff161461148b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611482906138c9565b60405180910390fd5b6000600954116114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790613869565b60405180910390fd5b600954811115611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150c90613909565b60405180910390fd5b80600960008282546115279190613b29565b925050819055506115383382612660565b50565b661772aa3f84800081565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461157f90613c4a565b80601f01602080910402602001604051908101604052809291908181526020018280546115ab90613c4a565b80156115f85780601f106115cd576101008083540402835291602001916115f8565b820191906000526020600020905b8154815290600101906020018083116115db57829003601f168201915b5050505050905090565b6001600281111561163c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600760149054906101000a900460ff166002811115611684577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b146116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb90613969565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990613889565b60405180910390fd5b600a8161173e33611aab565b6117489190613a48565b1115611789576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611780906138e9565b60405180910390fd5b611a0a81611795610ae5565b61179f9190613a48565b11156117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d790613929565b60405180910390fd5b6117ea3382612660565b61180581661772aa3f8480006118009190613acf565b61267e565b7f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe33826040516118369291906137a4565b60405180910390a150565b611849611d1b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118ae576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660006118bb611d1b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611968611d1b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119ad91906137cd565b60405180910390a35050565b6119c4848484611dd5565b6119d08484848461271f565b611a06576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060611a1782611cb3565b611a4d576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611a576128ad565b9050600081511415611a785760405180602001604052806000815250611aa3565b80611a828461293f565b604051602001611a93929190613704565b6040516020818303038152906040525b915050919050565b6000611ab682612aec565b9050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b59611d1b565b73ffffffffffffffffffffffffffffffffffffffff16611b77611546565b73ffffffffffffffffffffffffffffffffffffffff1614611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc4906138c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613849565b60405180910390fd5b611c468161259a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1682108015611d14575060036000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611de0826122f2565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611e07611d1b565b73ffffffffffffffffffffffffffffffffffffffff161480611e3a5750611e398260000151611e34611d1b565b611abd565b5b80611e7f5750611e48611d1b565b73ffffffffffffffffffffffffffffffffffffffff16611e6784610959565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611eb8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611f21576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f88576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f958585856001612bbc565b611fa56000848460000151611d23565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156122825760008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168110156122815782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122eb8585856001612bc2565b5050505050565b6122fa613019565b600082905060008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16811015612563576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161256157600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612445578092505050612595565b5b60011561256057818060019003925050600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461255b578092505050612595565b612446565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61267a828260405180602001604052806000815250612bc8565b5050565b803410156126c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b890613949565b60405180910390fd5b8034111561271c573373ffffffffffffffffffffffffffffffffffffffff166108fc82346126ef9190613b29565b9081150290604051600060405180830381858888f1935050505015801561271a573d6000803e3d6000fd5b505b50565b60006127408473ffffffffffffffffffffffffffffffffffffffff16612bda565b156128a0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612769611d1b565b8786866040518563ffffffff1660e01b815260040161278b9493929190613758565b602060405180830381600087803b1580156127a557600080fd5b505af19250505080156127d657506040513d601f19601f820116820180604052508101906127d391906133b7565b60015b612850573d8060008114612806576040519150601f19603f3d011682016040523d82523d6000602084013e61280b565b606091505b50600081511415612848576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128a5565b600190505b949350505050565b6060600880546128bc90613c4a565b80601f01602080910402602001604051908101604052809291908181526020018280546128e890613c4a565b80156129355780601f1061290a57610100808354040283529160200191612935565b820191906000526020600020905b81548152906001019060200180831161291857829003601f168201915b5050505050905090565b60606000821415612987576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ae7565b600082905060005b600082146129b95780806129a290613cad565b915050600a826129b29190613a9e565b915061298f565b60008167ffffffffffffffff8111156129fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612a2d5781602001600182028036833780820191505090505b5090505b60008514612ae057600182612a469190613b29565b9150600a85612a559190613cf6565b6030612a619190613a48565b60f81b818381518110612a9d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ad99190613a9e565b9450612a31565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b54576040517f35ebb31900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b612bd58383836001612bfd565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612c98576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612cd3576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ce06000868387612bbc565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612f4557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4838015612ef95750612ef7600088848861271f565b155b15612f30576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81806001019250508080600101915050612e7e565b50806000806101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050612f8c6000868387612bc2565b5050505050565b828054612f9f90613c4a565b90600052602060002090601f016020900481019282612fc15760008555613008565b82601f10612fda57803560ff1916838001178555613008565b82800160010185558215613008579182015b82811115613007578235825591602001919060010190612fec565b5b509050613015919061305c565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561307557600081600090555060010161305d565b5090565b600061308c613087846139c9565b6139a4565b9050828152602081018484840111156130a457600080fd5b6130af848285613c08565b509392505050565b6000813590506130c681614046565b92915050565b6000813590506130db8161405d565b92915050565b6000813590506130f081614074565b92915050565b6000813590506131058161408b565b92915050565b60008151905061311a8161408b565b92915050565b600082601f83011261313157600080fd5b8135613141848260208601613079565b91505092915050565b600081359050613159816140a2565b92915050565b60008083601f84011261317157600080fd5b8235905067ffffffffffffffff81111561318a57600080fd5b6020830191508360018202830111156131a257600080fd5b9250929050565b6000813590506131b8816140b2565b92915050565b6000602082840312156131d057600080fd5b60006131de848285016130b7565b91505092915050565b6000602082840312156131f957600080fd5b6000613207848285016130cc565b91505092915050565b6000806040838503121561322357600080fd5b6000613231858286016130b7565b9250506020613242858286016130b7565b9150509250929050565b60008060006060848603121561326157600080fd5b600061326f868287016130b7565b9350506020613280868287016130b7565b9250506040613291868287016131a9565b9150509250925092565b600080600080608085870312156132b157600080fd5b60006132bf878288016130b7565b94505060206132d0878288016130b7565b93505060406132e1878288016131a9565b925050606085013567ffffffffffffffff8111156132fe57600080fd5b61330a87828801613120565b91505092959194509250565b6000806040838503121561332957600080fd5b6000613337858286016130b7565b9250506020613348858286016130e1565b9150509250929050565b6000806040838503121561336557600080fd5b6000613373858286016130b7565b9250506020613384858286016131a9565b9150509250929050565b6000602082840312156133a057600080fd5b60006133ae848285016130f6565b91505092915050565b6000602082840312156133c957600080fd5b60006133d78482850161310b565b91505092915050565b6000602082840312156133f257600080fd5b60006134008482850161314a565b91505092915050565b6000806020838503121561341c57600080fd5b600083013567ffffffffffffffff81111561343657600080fd5b6134428582860161315f565b92509250509250929050565b60006020828403121561346057600080fd5b600061346e848285016131a9565b91505092915050565b61348081613b5d565b82525050565b61348f81613b81565b82525050565b60006134a0826139fa565b6134aa8185613a10565b93506134ba818560208601613c17565b6134c381613e12565b840191505092915050565b6134d781613bf6565b82525050565b60006134e98385613a2c565b93506134f6838584613c08565b6134ff83613e12565b840190509392505050565b600061351582613a05565b61351f8185613a2c565b935061352f818560208601613c17565b61353881613e12565b840191505092915050565b600061354e82613a05565b6135588185613a3d565b9350613568818560208601613c17565b80840191505092915050565b6000613581602683613a2c565b915061358c82613e23565b604082019050919050565b60006135a4602183613a2c565b91506135af82613e72565b604082019050919050565b60006135c7602183613a2c565b91506135d282613ec1565b604082019050919050565b60006135ea601a83613a2c565b91506135f582613f10565b602082019050919050565b600061360d602083613a2c565b915061361882613f39565b602082019050919050565b6000613630601283613a2c565b915061363b82613f62565b602082019050919050565b6000613653601983613a2c565b915061365e82613f8b565b602082019050919050565b6000613676601883613a2c565b915061368182613fb4565b602082019050919050565b6000613699600083613a21565b91506136a482613fdd565b600082019050919050565b60006136bc601683613a2c565b91506136c782613fe0565b602082019050919050565b60006136df601683613a2c565b91506136ea82614009565b602082019050919050565b6136fe81613bec565b82525050565b60006137108285613543565b915061371c8284613543565b91508190509392505050565b60006137338261368c565b9150819050919050565b60006020820190506137526000830184613477565b92915050565b600060808201905061376d6000830187613477565b61377a6020830186613477565b61378760408301856136f5565b81810360608301526137998184613495565b905095945050505050565b60006040820190506137b96000830185613477565b6137c660208301846136f5565b9392505050565b60006020820190506137e26000830184613486565b92915050565b60006020820190506137fd60008301846134ce565b92915050565b6000602082019050818103600083015261381e8184866134dd565b90509392505050565b60006020820190508181036000830152613841818461350a565b905092915050565b6000602082019050818103600083015261386281613574565b9050919050565b6000602082019050818103600083015261388281613597565b9050919050565b600060208201905081810360008301526138a2816135ba565b9050919050565b600060208201905081810360008301526138c2816135dd565b9050919050565b600060208201905081810360008301526138e281613600565b9050919050565b6000602082019050818103600083015261390281613623565b9050919050565b6000602082019050818103600083015261392281613646565b9050919050565b6000602082019050818103600083015261394281613669565b9050919050565b60006020820190508181036000830152613962816136af565b9050919050565b60006020820190508181036000830152613982816136d2565b9050919050565b600060208201905061399e60008301846136f5565b92915050565b60006139ae6139bf565b90506139ba8282613c7c565b919050565b6000604051905090565b600067ffffffffffffffff8211156139e4576139e3613de3565b5b6139ed82613e12565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a5382613bec565b9150613a5e83613bec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a9357613a92613d27565b5b828201905092915050565b6000613aa982613bec565b9150613ab483613bec565b925082613ac457613ac3613d56565b5b828204905092915050565b6000613ada82613bec565b9150613ae583613bec565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b1e57613b1d613d27565b5b828202905092915050565b6000613b3482613bec565b9150613b3f83613bec565b925082821015613b5257613b51613d27565b5b828203905092915050565b6000613b6882613bcc565b9050919050565b6000613b7a82613bcc565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050613bc782614032565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613c0182613bb9565b9050919050565b82818337600083830152505050565b60005b83811015613c35578082015181840152602081019050613c1a565b83811115613c44576000848401525b50505050565b60006002820490506001821680613c6257607f821691505b60208210811415613c7657613c75613db4565b5b50919050565b613c8582613e12565b810181811067ffffffffffffffff82111715613ca457613ca3613de3565b5b80604052505050565b6000613cb882613bec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ceb57613cea613d27565b5b600182019050919050565b6000613d0182613bec565b9150613d0c83613bec565b925082613d1c57613d1b613d56565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e4654535f464f525f5448455f5445414d5f4841535f4245454e5f4d494e544560008201527f4400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c4848533a2042752079756e20787520686520797565206469616f20796f6e6760008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c4848533a2057616e206c652c207175616e2077616e206c652e000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4c4848533a205a75692064756f206c69612e0000000000000000000000000000600082015250565b7f455843454544535f4d41585f4d494e545f464f525f5445414d00000000000000600082015250565b7f4c4848533a204d6569207a6865206d652064756f206c652e0000000000000000600082015250565b50565b7f4c4848533a204d65692064756f20676569204554482e00000000000000000000600082015250565b7f4c4848533a20486169206d6569206b6169207368692e00000000000000000000600082015250565b6003811061404357614042613d85565b5b50565b61404f81613b5d565b811461405a57600080fd5b50565b61406681613b6f565b811461407157600080fd5b50565b61407d81613b81565b811461408857600080fd5b50565b61409481613b8d565b811461409f57600080fd5b50565b600381106140af57600080fd5b50565b6140bb81613bec565b81146140c657600080fd5b5056fea26469706673582212206418991f6ea266fa0d0ea35abcfb27e7fd921589579d0e2edc117508faa03dd964736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d4e52364434447a6873535553587163334133586172665a7664644e574e59745659416d3837317172474343542f00000000000000000000

Deployed Bytecode

0x6080604052600436106101d85760003560e01c806355f804b31161010257806395d89b4111610095578063c87b56dd11610064578063c87b56dd1461069d578063dc33e681146106da578063e985e9c514610717578063f2fde38b14610754576101d8565b806395d89b4114610604578063a0712d681461062f578063a22cb4651461064b578063b88d4fde14610674576101d8565b8063715018a6116100d1578063715018a61461056e578063799b31e8146105855780638d859f3e146105ae5780638da5cb5b146105d9576101d8565b806355f804b3146104a05780636352211e146104c95780636c0360eb1461050657806370a0823114610531576101d8565b806323b872dd1161017a57806342842e0e1161014957806342842e0e146103e65780634f423a9d1461040f5780634f6ccce71461043a57806351cff8d914610477576101d8565b806323b872dd1461032c5780632e49d78b146103555780632f745c591461037e57806332cb6b0c146103bb576101d8565b8063095ea7b3116101b6578063095ea7b31461028257806316154862146102ab57806318160ddd146102d6578063200d2ed214610301576101d8565b806301ffc9a7146101dd57806306fdde031461021a578063081812fc14610245575b600080fd5b3480156101e957600080fd5b5061020460048036038101906101ff919061338e565b61077d565b60405161021191906137cd565b60405180910390f35b34801561022657600080fd5b5061022f6108c7565b60405161023c9190613827565b60405180910390f35b34801561025157600080fd5b5061026c6004803603810190610267919061344e565b610959565b604051610279919061373d565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190613352565b6109d5565b005b3480156102b757600080fd5b506102c0610ae0565b6040516102cd9190613989565b60405180910390f35b3480156102e257600080fd5b506102eb610ae5565b6040516102f89190613989565b60405180910390f35b34801561030d57600080fd5b50610316610b3a565b60405161032391906137e8565b60405180910390f35b34801561033857600080fd5b50610353600480360381019061034e919061324c565b610b4d565b005b34801561036157600080fd5b5061037c600480360381019061037791906133e0565b610b5d565b005b34801561038a57600080fd5b506103a560048036038101906103a09190613352565b610c72565b6040516103b29190613989565b60405180910390f35b3480156103c757600080fd5b506103d0610e79565b6040516103dd9190613989565b60405180910390f35b3480156103f257600080fd5b5061040d6004803603810190610408919061324c565b610e7f565b005b34801561041b57600080fd5b50610424610e9f565b6040516104319190613989565b60405180910390f35b34801561044657600080fd5b50610461600480360381019061045c919061344e565b610ea5565b60405161046e9190613989565b60405180910390f35b34801561048357600080fd5b5061049e600480360381019061049991906131e7565b611016565b005b3480156104ac57600080fd5b506104c760048036038101906104c29190613409565b611148565b005b3480156104d557600080fd5b506104f060048036038101906104eb919061344e565b611213565b6040516104fd919061373d565b60405180910390f35b34801561051257600080fd5b5061051b611229565b6040516105289190613827565b60405180910390f35b34801561053d57600080fd5b50610558600480360381019061055391906131be565b6112b7565b6040516105659190613989565b60405180910390f35b34801561057a57600080fd5b50610583611387565b005b34801561059157600080fd5b506105ac60048036038101906105a7919061344e565b61140f565b005b3480156105ba57600080fd5b506105c361153b565b6040516105d09190613989565b60405180910390f35b3480156105e557600080fd5b506105ee611546565b6040516105fb919061373d565b60405180910390f35b34801561061057600080fd5b50610619611570565b6040516106269190613827565b60405180910390f35b6106496004803603810190610644919061344e565b611602565b005b34801561065757600080fd5b50610672600480360381019061066d9190613316565b611841565b005b34801561068057600080fd5b5061069b6004803603810190610696919061329b565b6119b9565b005b3480156106a957600080fd5b506106c460048036038101906106bf919061344e565b611a0c565b6040516106d19190613827565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc91906131be565b611aab565b60405161070e9190613989565b60405180910390f35b34801561072357600080fd5b5061073e60048036038101906107399190613210565b611abd565b60405161074b91906137cd565b60405180910390f35b34801561076057600080fd5b5061077b600480360381019061077691906131be565b611b51565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108b057507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108c057506108bf82611c49565b5b9050919050565b6060600180546108d690613c4a565b80601f016020809104026020016040519081016040528092919081815260200182805461090290613c4a565b801561094f5780601f106109245761010080835404028352916020019161094f565b820191906000526020600020905b81548152906001019060200180831161093257829003601f168201915b5050505050905090565b600061096482611cb3565b61099a576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109e082611213565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a48576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a67611d1b565b73ffffffffffffffffffffffffffffffffffffffff1614158015610a995750610a9781610a92611d1b565b611abd565b155b15610ad0576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610adb838383611d23565b505050565b600a81565b60008060109054906101000a90046fffffffffffffffffffffffffffffffff1660008054906101000a90046fffffffffffffffffffffffffffffffff16036fffffffffffffffffffffffffffffffff16905090565b600760149054906101000a900460ff1681565b610b58838383611dd5565b505050565b610b65611d1b565b73ffffffffffffffffffffffffffffffffffffffff16610b83611546565b73ffffffffffffffffffffffffffffffffffffffff1614610bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd0906138c9565b60405180910390fd5b80600760146101000a81548160ff02191690836002811115610c24577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b02179055507fafa725e7f44cadb687a7043853fa1a7e7b8f0da74ce87ec546e9420f04da8c1e600760149054906101000a900460ff16604051610c6791906137e8565b60405180910390a150565b6000610c7d836112b7565b8210610cb5576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008060005b83811015610e6d576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015115610dcc5750610e60565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610e0c57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e5e5786841415610e55578195505050505050610e73565b83806001019450505b505b8080600101915050610cef565b50600080fd5b92915050565b611a0a81565b610e9a838383604051806020016040528060008152506119b9565b505050565b60095481565b60008060008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1690506000805b82811015610fde576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151610fd05785831415610fc75781945050505050611011565b82806001019350505b508080600101915050610edd565b506040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b61101e611d1b565b73ffffffffffffffffffffffffffffffffffffffff1661103c611546565b73ffffffffffffffffffffffffffffffffffffffff1614611092576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611089906138c9565b60405180910390fd5b600047905060008273ffffffffffffffffffffffffffffffffffffffff16826040516110bd90613728565b60006040518083038185875af1925050503d80600081146110fa576040519150601f19603f3d011682016040523d82523d6000602084013e6110ff565b606091505b5050905080611143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113a906138a9565b60405180910390fd5b505050565b611150611d1b565b73ffffffffffffffffffffffffffffffffffffffff1661116e611546565b73ffffffffffffffffffffffffffffffffffffffff16146111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb906138c9565b60405180910390fd5b8181600891906111d5929190612f93565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf68282604051611207929190613803565b60405180910390a15050565b600061121e826122f2565b600001519050919050565b6008805461123690613c4a565b80601f016020809104026020016040519081016040528092919081815260200182805461126290613c4a565b80156112af5780601f10611284576101008083540402835291602001916112af565b820191906000526020600020905b81548152906001019060200180831161129257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561131f576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61138f611d1b565b73ffffffffffffffffffffffffffffffffffffffff166113ad611546565b73ffffffffffffffffffffffffffffffffffffffff1614611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fa906138c9565b60405180910390fd5b61140d600061259a565b565b611417611d1b565b73ffffffffffffffffffffffffffffffffffffffff16611435611546565b73ffffffffffffffffffffffffffffffffffffffff161461148b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611482906138c9565b60405180910390fd5b6000600954116114d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c790613869565b60405180910390fd5b600954811115611515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150c90613909565b60405180910390fd5b80600960008282546115279190613b29565b925050819055506115383382612660565b50565b661772aa3f84800081565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461157f90613c4a565b80601f01602080910402602001604051908101604052809291908181526020018280546115ab90613c4a565b80156115f85780601f106115cd576101008083540402835291602001916115f8565b820191906000526020600020905b8154815290600101906020018083116115db57829003601f168201915b5050505050905090565b6001600281111561163c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600760149054906101000a900460ff166002811115611684577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b146116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb90613969565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990613889565b60405180910390fd5b600a8161173e33611aab565b6117489190613a48565b1115611789576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611780906138e9565b60405180910390fd5b611a0a81611795610ae5565b61179f9190613a48565b11156117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d790613929565b60405180910390fd5b6117ea3382612660565b61180581661772aa3f8480006118009190613acf565b61267e565b7f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe33826040516118369291906137a4565b60405180910390a150565b611849611d1b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118ae576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660006118bb611d1b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611968611d1b565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119ad91906137cd565b60405180910390a35050565b6119c4848484611dd5565b6119d08484848461271f565b611a06576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060611a1782611cb3565b611a4d576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611a576128ad565b9050600081511415611a785760405180602001604052806000815250611aa3565b80611a828461293f565b604051602001611a93929190613704565b6040516020818303038152906040525b915050919050565b6000611ab682612aec565b9050919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b59611d1b565b73ffffffffffffffffffffffffffffffffffffffff16611b77611546565b73ffffffffffffffffffffffffffffffffffffffff1614611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc4906138c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3490613849565b60405180910390fd5b611c468161259a565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1682108015611d14575060036000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000611de0826122f2565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16611e07611d1b565b73ffffffffffffffffffffffffffffffffffffffff161480611e3a5750611e398260000151611e34611d1b565b611abd565b5b80611e7f5750611e48611d1b565b73ffffffffffffffffffffffffffffffffffffffff16611e6784610959565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611eb8576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614611f21576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f88576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f958585856001612bbc565b611fa56000848460000151611d23565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156122825760008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168110156122815782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122eb8585856001612bc2565b5050505050565b6122fa613019565b600082905060008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16811015612563576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161256157600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612445578092505050612595565b5b60011561256057818060019003925050600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461255b578092505050612595565b612446565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61267a828260405180602001604052806000815250612bc8565b5050565b803410156126c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b890613949565b60405180910390fd5b8034111561271c573373ffffffffffffffffffffffffffffffffffffffff166108fc82346126ef9190613b29565b9081150290604051600060405180830381858888f1935050505015801561271a573d6000803e3d6000fd5b505b50565b60006127408473ffffffffffffffffffffffffffffffffffffffff16612bda565b156128a0578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612769611d1b565b8786866040518563ffffffff1660e01b815260040161278b9493929190613758565b602060405180830381600087803b1580156127a557600080fd5b505af19250505080156127d657506040513d601f19601f820116820180604052508101906127d391906133b7565b60015b612850573d8060008114612806576040519150601f19603f3d011682016040523d82523d6000602084013e61280b565b606091505b50600081511415612848576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128a5565b600190505b949350505050565b6060600880546128bc90613c4a565b80601f01602080910402602001604051908101604052809291908181526020018280546128e890613c4a565b80156129355780601f1061290a57610100808354040283529160200191612935565b820191906000526020600020905b81548152906001019060200180831161291857829003601f168201915b5050505050905090565b60606000821415612987576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ae7565b600082905060005b600082146129b95780806129a290613cad565b915050600a826129b29190613a9e565b915061298f565b60008167ffffffffffffffff8111156129fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612a2d5781602001600182028036833780820191505090505b5090505b60008514612ae057600182612a469190613b29565b9150600a85612a559190613cf6565b6030612a619190613a48565b60f81b818381518110612a9d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612ad99190613a9e565b9450612a31565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b54576040517f35ebb31900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b612bd58383836001612bfd565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612c98576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612cd3576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ce06000868387612bbc565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015612f4557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4838015612ef95750612ef7600088848861271f565b155b15612f30576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81806001019250508080600101915050612e7e565b50806000806101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050612f8c6000868387612bc2565b5050505050565b828054612f9f90613c4a565b90600052602060002090601f016020900481019282612fc15760008555613008565b82601f10612fda57803560ff1916838001178555613008565b82800160010185558215613008579182015b82811115613007578235825591602001919060010190612fec565b5b509050613015919061305c565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561307557600081600090555060010161305d565b5090565b600061308c613087846139c9565b6139a4565b9050828152602081018484840111156130a457600080fd5b6130af848285613c08565b509392505050565b6000813590506130c681614046565b92915050565b6000813590506130db8161405d565b92915050565b6000813590506130f081614074565b92915050565b6000813590506131058161408b565b92915050565b60008151905061311a8161408b565b92915050565b600082601f83011261313157600080fd5b8135613141848260208601613079565b91505092915050565b600081359050613159816140a2565b92915050565b60008083601f84011261317157600080fd5b8235905067ffffffffffffffff81111561318a57600080fd5b6020830191508360018202830111156131a257600080fd5b9250929050565b6000813590506131b8816140b2565b92915050565b6000602082840312156131d057600080fd5b60006131de848285016130b7565b91505092915050565b6000602082840312156131f957600080fd5b6000613207848285016130cc565b91505092915050565b6000806040838503121561322357600080fd5b6000613231858286016130b7565b9250506020613242858286016130b7565b9150509250929050565b60008060006060848603121561326157600080fd5b600061326f868287016130b7565b9350506020613280868287016130b7565b9250506040613291868287016131a9565b9150509250925092565b600080600080608085870312156132b157600080fd5b60006132bf878288016130b7565b94505060206132d0878288016130b7565b93505060406132e1878288016131a9565b925050606085013567ffffffffffffffff8111156132fe57600080fd5b61330a87828801613120565b91505092959194509250565b6000806040838503121561332957600080fd5b6000613337858286016130b7565b9250506020613348858286016130e1565b9150509250929050565b6000806040838503121561336557600080fd5b6000613373858286016130b7565b9250506020613384858286016131a9565b9150509250929050565b6000602082840312156133a057600080fd5b60006133ae848285016130f6565b91505092915050565b6000602082840312156133c957600080fd5b60006133d78482850161310b565b91505092915050565b6000602082840312156133f257600080fd5b60006134008482850161314a565b91505092915050565b6000806020838503121561341c57600080fd5b600083013567ffffffffffffffff81111561343657600080fd5b6134428582860161315f565b92509250509250929050565b60006020828403121561346057600080fd5b600061346e848285016131a9565b91505092915050565b61348081613b5d565b82525050565b61348f81613b81565b82525050565b60006134a0826139fa565b6134aa8185613a10565b93506134ba818560208601613c17565b6134c381613e12565b840191505092915050565b6134d781613bf6565b82525050565b60006134e98385613a2c565b93506134f6838584613c08565b6134ff83613e12565b840190509392505050565b600061351582613a05565b61351f8185613a2c565b935061352f818560208601613c17565b61353881613e12565b840191505092915050565b600061354e82613a05565b6135588185613a3d565b9350613568818560208601613c17565b80840191505092915050565b6000613581602683613a2c565b915061358c82613e23565b604082019050919050565b60006135a4602183613a2c565b91506135af82613e72565b604082019050919050565b60006135c7602183613a2c565b91506135d282613ec1565b604082019050919050565b60006135ea601a83613a2c565b91506135f582613f10565b602082019050919050565b600061360d602083613a2c565b915061361882613f39565b602082019050919050565b6000613630601283613a2c565b915061363b82613f62565b602082019050919050565b6000613653601983613a2c565b915061365e82613f8b565b602082019050919050565b6000613676601883613a2c565b915061368182613fb4565b602082019050919050565b6000613699600083613a21565b91506136a482613fdd565b600082019050919050565b60006136bc601683613a2c565b91506136c782613fe0565b602082019050919050565b60006136df601683613a2c565b91506136ea82614009565b602082019050919050565b6136fe81613bec565b82525050565b60006137108285613543565b915061371c8284613543565b91508190509392505050565b60006137338261368c565b9150819050919050565b60006020820190506137526000830184613477565b92915050565b600060808201905061376d6000830187613477565b61377a6020830186613477565b61378760408301856136f5565b81810360608301526137998184613495565b905095945050505050565b60006040820190506137b96000830185613477565b6137c660208301846136f5565b9392505050565b60006020820190506137e26000830184613486565b92915050565b60006020820190506137fd60008301846134ce565b92915050565b6000602082019050818103600083015261381e8184866134dd565b90509392505050565b60006020820190508181036000830152613841818461350a565b905092915050565b6000602082019050818103600083015261386281613574565b9050919050565b6000602082019050818103600083015261388281613597565b9050919050565b600060208201905081810360008301526138a2816135ba565b9050919050565b600060208201905081810360008301526138c2816135dd565b9050919050565b600060208201905081810360008301526138e281613600565b9050919050565b6000602082019050818103600083015261390281613623565b9050919050565b6000602082019050818103600083015261392281613646565b9050919050565b6000602082019050818103600083015261394281613669565b9050919050565b60006020820190508181036000830152613962816136af565b9050919050565b60006020820190508181036000830152613982816136d2565b9050919050565b600060208201905061399e60008301846136f5565b92915050565b60006139ae6139bf565b90506139ba8282613c7c565b919050565b6000604051905090565b600067ffffffffffffffff8211156139e4576139e3613de3565b5b6139ed82613e12565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613a5382613bec565b9150613a5e83613bec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613a9357613a92613d27565b5b828201905092915050565b6000613aa982613bec565b9150613ab483613bec565b925082613ac457613ac3613d56565b5b828204905092915050565b6000613ada82613bec565b9150613ae583613bec565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b1e57613b1d613d27565b5b828202905092915050565b6000613b3482613bec565b9150613b3f83613bec565b925082821015613b5257613b51613d27565b5b828203905092915050565b6000613b6882613bcc565b9050919050565b6000613b7a82613bcc565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050613bc782614032565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000613c0182613bb9565b9050919050565b82818337600083830152505050565b60005b83811015613c35578082015181840152602081019050613c1a565b83811115613c44576000848401525b50505050565b60006002820490506001821680613c6257607f821691505b60208210811415613c7657613c75613db4565b5b50919050565b613c8582613e12565b810181811067ffffffffffffffff82111715613ca457613ca3613de3565b5b80604052505050565b6000613cb882613bec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ceb57613cea613d27565b5b600182019050919050565b6000613d0182613bec565b9150613d0c83613bec565b925082613d1c57613d1b613d56565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e4654535f464f525f5448455f5445414d5f4841535f4245454e5f4d494e544560008201527f4400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c4848533a2042752079756e20787520686520797565206469616f20796f6e6760008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c4848533a2057616e206c652c207175616e2077616e206c652e000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4c4848533a205a75692064756f206c69612e0000000000000000000000000000600082015250565b7f455843454544535f4d41585f4d494e545f464f525f5445414d00000000000000600082015250565b7f4c4848533a204d6569207a6865206d652064756f206c652e0000000000000000600082015250565b50565b7f4c4848533a204d65692064756f20676569204554482e00000000000000000000600082015250565b7f4c4848533a20486169206d6569206b6169207368692e00000000000000000000600082015250565b6003811061404357614042613d85565b5b50565b61404f81613b5d565b811461405a57600080fd5b50565b61406681613b6f565b811461407157600080fd5b50565b61407d81613b81565b811461408857600080fd5b50565b61409481613b8d565b811461409f57600080fd5b50565b600381106140af57600080fd5b50565b6140bb81613bec565b81146140c657600080fd5b5056fea26469706673582212206418991f6ea266fa0d0ea35abcfb27e7fd921589579d0e2edc117508faa03dd964736f6c63430008040033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d4e52364434447a6873535553587163334133586172665a7664644e574e59745659416d3837317172474343542f00000000000000000000

-----Decoded View---------------
Arg [0] : initBaseURI (string): ipfs://QmNR6D4DzhsSUSXqc3A3XarfZvddNWNYtVYAm871qrGCCT/

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [2] : 697066733a2f2f516d4e52364434447a6873535553587163334133586172665a
Arg [3] : 7664644e574e59745659416d3837317172474343542f00000000000000000000


Deployed Bytecode Sourcemap

46396:2607:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27342:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29952:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31455:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31018:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46611:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24579:280;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46519:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32312:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48467:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26165:1105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46664:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32553:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46574:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25152:713;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48757:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48601:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29761:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46546:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27778:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45515:103;;;;;;;;;;;;;:::i;:::-;;47776:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46712:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44864:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30121:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47149:596;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31731:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32809:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30296:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48116:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32081:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45773:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27342:372;27444:4;27496:25;27481:40;;;:11;:40;;;;:105;;;;27553:33;27538:48;;;:11;:48;;;;27481:105;:172;;;;27618:35;27603:50;;;:11;:50;;;;27481:172;:225;;;;27670:36;27694:11;27670:23;:36::i;:::-;27481:225;27461:245;;27342:372;;;:::o;29952:100::-;30006:13;30039:5;30032:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29952:100;:::o;31455:204::-;31523:7;31548:16;31556:7;31548;:16::i;:::-;31543:64;;31573:34;;;;;;;;;;;;;;31543:64;31627:15;:24;31643:7;31627:24;;;;;;;;;;;;;;;;;;;;;31620:31;;31455:204;;;:::o;31018:371::-;31091:13;31107:24;31123:7;31107:15;:24::i;:::-;31091:40;;31152:5;31146:11;;:2;:11;;;31142:48;;;31166:24;;;;;;;;;;;;;;31142:48;31223:5;31207:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;31233:37;31250:5;31257:12;:10;:12::i;:::-;31233:16;:37::i;:::-;31232:38;31207:63;31203:138;;;31294:35;;;;;;;;;;;;;;31203:138;31353:28;31362:2;31366:7;31375:5;31353:8;:28::i;:::-;31018:371;;;:::o;46611:46::-;46655:2;46611:46;:::o;24579:280::-;24632:7;24824:12;;;;;;;;;;;24808:13;;;;;;;;;;:28;24801:35;;;;24579:280;:::o;46519:20::-;;;;;;;;;;;;;:::o;32312:170::-;32446:28;32456:4;32462:2;32466:7;32446:9;:28::i;:::-;32312:170;;;:::o;48467:126::-;45095:12;:10;:12::i;:::-;45084:23;;:7;:5;:7::i;:::-;:23;;;45076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48541:7:::1;48532:6;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48564:21;48578:6;;;;;;;;;;;48564:21;;;;;;:::i;:::-;;;;;;;;48467:126:::0;:::o;26165:1105::-;26254:7;26287:16;26297:5;26287:9;:16::i;:::-;26278:5;:25;26274:61;;26312:23;;;;;;;;;;;;;;26274:61;26346:22;26371:13;;;;;;;;;;;26346:38;;;;26395:19;26425:25;26626:9;26621:557;26641:14;26637:1;:18;26621:557;;;26681:31;26715:11;:14;26727:1;26715:14;;;;;;;;;;;26681:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26752:9;:16;;;26748:73;;;26793:8;;;26748:73;26869:1;26843:28;;:9;:14;;;:28;;;26839:111;;26916:9;:14;;;26896:34;;26839:111;26993:5;26972:26;;:17;:26;;;26968:195;;;27042:5;27027:11;:20;27023:85;;;27083:1;27076:8;;;;;;;;;27023:85;27130:13;;;;;;;26968:195;26621:557;;26657:3;;;;;;;26621:557;;;;27254:8;;;26165:1105;;;;;:::o;46664:41::-;46701:4;46664:41;:::o;32553:185::-;32691:39;32708:4;32714:2;32718:7;32691:39;;;;;;;;;;;;:16;:39::i;:::-;32553:185;;;:::o;46574:30::-;;;;:::o;25152:713::-;25219:7;25239:22;25264:13;;;;;;;;;;25239:38;;;;25288:19;25483:9;25478:328;25498:14;25494:1;:18;25478:328;;;25538:31;25572:11;:14;25584:1;25572:14;;;;;;;;;;;25538:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25610:9;:16;;;25605:186;;25670:5;25655:11;:20;25651:85;;;25711:1;25704:8;;;;;;;;25651:85;25758:13;;;;;;;25605:186;25478:328;25514:3;;;;;;;25478:328;;;;25834:23;;;;;;;;;;;;;;25152:713;;;;:::o;48757:243::-;45095:12;:10;:12::i;:::-;45084:23;;:7;:5;:7::i;:::-;:23;;;45076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48832:15:::1;48850:21;48832:39;;48883:12;48901:9;:14;;48923:7;48901:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48882:53;;;48954:7;48946:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;45155:1;;48757:243:::0;:::o;48601:148::-;45095:12;:10;:12::i;:::-;45084:23;;:7;:5;:7::i;:::-;:23;;;45076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48689:10:::1;;48679:7;:20;;;;;;;:::i;:::-;;48715:26;48730:10;;48715:26;;;;;;;:::i;:::-;;;;;;;;48601:148:::0;;:::o;29761:124::-;29825:7;29852:20;29864:7;29852:11;:20::i;:::-;:25;;;29845:32;;29761:124;;;:::o;46546:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27778:206::-;27842:7;27883:1;27866:19;;:5;:19;;;27862:60;;;27894:28;;;;;;;;;;;;;;27862:60;27948:12;:19;27961:5;27948:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;27940:36;;27933:43;;27778:206;;;:::o;45515:103::-;45095:12;:10;:12::i;:::-;45084:23;;:7;:5;:7::i;:::-;:23;;;45076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45580:30:::1;45607:1;45580:18;:30::i;:::-;45515:103::o:0;47776:303::-;45095:12;:10;:12::i;:::-;45084:23;;:7;:5;:7::i;:::-;:23;;;45076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47868:1:::1;47856:9;;:13;47848:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;47944:9;;47926:14;:27;;47918:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;48009:14;47996:9;;:27;;;;;;;:::i;:::-;;;;;;;;48034:37;48044:10;48056:14;48034:9;:37::i;:::-;47776:303:::0;:::o;46712:47::-;46744:15;46712:47;:::o;44864:87::-;44910:7;44937:6;;;;;;;;;;;44930:13;;44864:87;:::o;30121:104::-;30177:13;30210:7;30203:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30121:104;:::o;47149:596::-;47227:14;47217:24;;;;;;;;;;;;;;;;:6;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;47209:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;47300:10;47287:23;;:9;:23;;;47279:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;46655:2;47408:8;47381:24;47394:10;47381:12;:24::i;:::-;:35;;;;:::i;:::-;:56;;47359:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;46701:4;47532:8;47516:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;47494:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;47619:31;47629:10;47641:8;47619:9;:31::i;:::-;47661:30;47682:8;46744:15;47674:16;;;;:::i;:::-;47661:12;:30::i;:::-;47709:28;47716:10;47728:8;47709:28;;;;;;;:::i;:::-;;;;;;;;47149:596;:::o;31731:279::-;31834:12;:10;:12::i;:::-;31822:24;;:8;:24;;;31818:54;;;31855:17;;;;;;;;;;;;;;31818:54;31930:8;31885:18;:32;31904:12;:10;:12::i;:::-;31885:32;;;;;;;;;;;;;;;:42;31918:8;31885:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;31983:8;31954:48;;31969:12;:10;:12::i;:::-;31954:48;;;31993:8;31954:48;;;;;;:::i;:::-;;;;;;;;31731:279;;:::o;32809:342::-;32976:28;32986:4;32992:2;32996:7;32976:9;:28::i;:::-;33020:48;33043:4;33049:2;33053:7;33062:5;33020:22;:48::i;:::-;33015:129;;33092:40;;;;;;;;;;;;;;33015:129;32809:342;;;;:::o;30296:318::-;30369:13;30400:16;30408:7;30400;:16::i;:::-;30395:59;;30425:29;;;;;;;;;;;;;;30395:59;30467:21;30491:10;:8;:10::i;:::-;30467:34;;30544:1;30525:7;30519:21;:26;;:87;;;;;;;;;;;;;;;;;30572:7;30581:18;:7;:16;:18::i;:::-;30555:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30519:87;30512:94;;;30296:318;;;:::o;48116:113::-;48174:7;48201:20;48215:5;48201:13;:20::i;:::-;48194:27;;48116:113;;;:::o;32081:164::-;32178:4;32202:18;:25;32221:5;32202:25;;;;;;;;;;;;;;;:35;32228:8;32202:35;;;;;;;;;;;;;;;;;;;;;;;;;32195:42;;32081:164;;;;:::o;45773:201::-;45095:12;:10;:12::i;:::-;45084:23;;:7;:5;:7::i;:::-;:23;;;45076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45882:1:::1;45862:22;;:8;:22;;;;45854:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;45938:28;45957:8;45938:18;:28::i;:::-;45773:201:::0;:::o;13511:157::-;13596:4;13635:25;13620:40;;;:11;:40;;;;13613:47;;13511:157;;;:::o;33406:144::-;33463:4;33497:13;;;;;;;;;;;33487:23;;:7;:23;:55;;;;;33515:11;:20;33527:7;33515:20;;;;;;;;;;;:27;;;;;;;;;;;;33514:28;33487:55;33480:62;;33406:144;;;:::o;21109:98::-;21162:7;21189:10;21182:17;;21109:98;:::o;40622:196::-;40764:2;40737:15;:24;40753:7;40737:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40802:7;40798:2;40782:28;;40791:5;40782:28;;;;;;;;;;;;40622:196;;;:::o;36123:2112::-;36238:35;36276:20;36288:7;36276:11;:20::i;:::-;36238:58;;36309:22;36351:13;:18;;;36335:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;36386:50;36403:13;:18;;;36423:12;:10;:12::i;:::-;36386:16;:50::i;:::-;36335:101;:154;;;;36477:12;:10;:12::i;:::-;36453:36;;:20;36465:7;36453:11;:20::i;:::-;:36;;;36335:154;36309:181;;36508:17;36503:66;;36534:35;;;;;;;;;;;;;;36503:66;36606:4;36584:26;;:13;:18;;;:26;;;36580:67;;36619:28;;;;;;;;;;;;;;36580:67;36676:1;36662:16;;:2;:16;;;36658:52;;;36687:23;;;;;;;;;;;;;;36658:52;36723:43;36745:4;36751:2;36755:7;36764:1;36723:21;:43::i;:::-;36831:49;36848:1;36852:7;36861:13;:18;;;36831:8;:49::i;:::-;37206:1;37176:12;:18;37189:4;37176:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37250:1;37222:12;:16;37235:2;37222:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37296:2;37268:11;:20;37280:7;37268:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;37358:15;37313:11;:20;37325:7;37313:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;37626:19;37658:1;37648:7;:11;37626:33;;37719:1;37678:43;;:11;:24;37690:11;37678:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;37674:445;;;37903:13;;;;;;;;;;37889:27;;:11;:27;37885:219;;;37973:13;:18;;;37941:11;:24;37953:11;37941:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;38056:13;:28;;;38014:11;:24;38026:11;38014:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;37885:219;37674:445;36123:2112;38166:7;38162:2;38147:27;;38156:4;38147:27;;;;;;;;;;;;38185:42;38206:4;38212:2;38216:7;38225:1;38185:20;:42::i;:::-;36123:2112;;;;;:::o;28616:1083::-;28677:21;;:::i;:::-;28711:12;28726:7;28711:22;;28782:13;;;;;;;;;;28775:20;;:4;:20;28771:861;;;28816:31;28850:11;:17;28862:4;28850:17;;;;;;;;;;;28816:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28891:9;:16;;;28886:731;;28962:1;28936:28;;:9;:14;;;:28;;;28932:101;;29000:9;28993:16;;;;;;28932:101;29337:261;29344:4;29337:261;;;29377:6;;;;;;;;29422:11;:17;29434:4;29422:17;;;;;;;;;;;29410:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29496:1;29470:28;;:9;:14;;;:28;;;29466:109;;29538:9;29531:16;;;;;;29466:109;29337:261;;;28886:731;28771:861;;29660:31;;;;;;;;;;;;;;28616:1083;;;;:::o;46134:191::-;46208:16;46227:6;;;;;;;;;;;46208:25;;46253:8;46244:6;;:17;;;;;;;;;;;;;;;;;;46308:8;46277:40;;46298:8;46277:40;;;;;;;;;;;;46134:191;;:::o;33558:104::-;33627:27;33637:2;33641:8;33627:27;;;;;;;;;;;;:9;:27::i;:::-;33558:104;;:::o;48235:224::-;48312:5;48299:9;:18;;48291:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;48371:5;48359:9;:17;48355:97;;;48401:10;48393:28;;:47;48434:5;48422:9;:17;;;;:::i;:::-;48393:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48355:97;48235:224;:::o;41383:790::-;41538:4;41559:15;:2;:13;;;:15::i;:::-;41555:611;;;41611:2;41595:36;;;41632:12;:10;:12::i;:::-;41646:4;41652:7;41661:5;41595:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41591:520;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41858:1;41841:6;:13;:18;41837:259;;;41891:40;;;;;;;;;;;;;;41837:259;42046:6;42040:13;42031:6;42027:2;42023:15;42016:38;41591:520;41728:45;;;41718:55;;;:6;:55;;;;41711:62;;;;;41555:611;42150:4;42143:11;;41383:790;;;;;;;:::o;47041:100::-;47093:13;47126:7;47119:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47041:100;:::o;436:723::-;492:13;722:1;713:5;:10;709:53;;;740:10;;;;;;;;;;;;;;;;;;;;;709:53;772:12;787:5;772:20;;803:14;828:78;843:1;835:4;:9;828:78;;861:8;;;;;:::i;:::-;;;;892:2;884:10;;;;;:::i;:::-;;;828:78;;;916:19;948:6;938:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;916:39;;966:154;982:1;973:5;:10;966:154;;1010:1;1000:11;;;;;:::i;:::-;;;1077:2;1069:5;:10;;;;:::i;:::-;1056:2;:24;;;;:::i;:::-;1043:39;;1026:6;1033;1026:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1106:2;1097:11;;;;;:::i;:::-;;;966:154;;;1144:6;1130:21;;;;;436:723;;;;:::o;27992:207::-;28053:7;28094:1;28077:19;;:5;:19;;;28073:59;;;28105:27;;;;;;;;;;;;;;28073:59;28158:12;:19;28171:5;28158:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;28150:41;;28143:48;;27992:207;;;:::o;42821:159::-;;;;;:::o;43639:158::-;;;;;:::o;34025:163::-;34148:32;34154:2;34158:8;34168:5;34175:4;34148:5;:32::i;:::-;34025:163;;;:::o;3428:326::-;3488:4;3745:1;3723:7;:19;;;:23;3716:30;;3428:326;;;:::o;34447:1422::-;34586:20;34609:13;;;;;;;;;;;34586:36;;;;34651:1;34637:16;;:2;:16;;;34633:48;;;34662:19;;;;;;;;;;;;;;34633:48;34708:1;34696:8;:13;34692:44;;;34718:18;;;;;;;;;;;;;;34692:44;34749:61;34779:1;34783:2;34787:12;34801:8;34749:21;:61::i;:::-;35123:8;35088:12;:16;35101:2;35088:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35187:8;35147:12;:16;35160:2;35147:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35246:2;35213:11;:25;35225:12;35213:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;35313:15;35263:11;:25;35275:12;35263:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;35346:20;35369:12;35346:35;;35403:9;35398:328;35418:8;35414:1;:12;35398:328;;;35482:12;35478:2;35457:38;;35474:1;35457:38;;;;;;;;;;;;35518:4;:68;;;;;35527:59;35558:1;35562:2;35566:12;35580:5;35527:22;:59::i;:::-;35526:60;35518:68;35514:164;;;35618:40;;;;;;;;;;;;;;35514:164;35696:14;;;;;;;35428:3;;;;;;;35398:328;;;;35766:12;35742:13;;:37;;;;;;;;;;;;;;;;;;34447:1422;35801:60;35830:1;35834:2;35838:12;35852:8;35801:20;:60::i;:::-;34447:1422;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:139::-;402:5;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;501:155::-;555:5;593:6;580:20;571:29;;609:41;644:5;609:41;:::i;:::-;561:95;;;;:::o;662:133::-;705:5;743:6;730:20;721:29;;759:30;783:5;759:30;:::i;:::-;711:84;;;;:::o;801:137::-;846:5;884:6;871:20;862:29;;900:32;926:5;900:32;:::i;:::-;852:86;;;;:::o;944:141::-;1000:5;1031:6;1025:13;1016:22;;1047:32;1073:5;1047:32;:::i;:::-;1006:79;;;;:::o;1104:271::-;1159:5;1208:3;1201:4;1193:6;1189:17;1185:27;1175:2;;1226:1;1223;1216:12;1175:2;1266:6;1253:20;1291:78;1365:3;1357:6;1350:4;1342:6;1338:17;1291:78;:::i;:::-;1282:87;;1165:210;;;;;:::o;1381:161::-;1438:5;1476:6;1463:20;1454:29;;1492:44;1530:5;1492:44;:::i;:::-;1444:98;;;;:::o;1562:352::-;1620:8;1630:6;1680:3;1673:4;1665:6;1661:17;1657:27;1647:2;;1698:1;1695;1688:12;1647:2;1734:6;1721:20;1711:30;;1764:18;1756:6;1753:30;1750:2;;;1796:1;1793;1786:12;1750:2;1833:4;1825:6;1821:17;1809:29;;1887:3;1879:4;1871:6;1867:17;1857:8;1853:32;1850:41;1847:2;;;1904:1;1901;1894:12;1847:2;1637:277;;;;;:::o;1920:139::-;1966:5;2004:6;1991:20;1982:29;;2020:33;2047:5;2020:33;:::i;:::-;1972:87;;;;:::o;2065:262::-;2124:6;2173:2;2161:9;2152:7;2148:23;2144:32;2141:2;;;2189:1;2186;2179:12;2141:2;2232:1;2257:53;2302:7;2293:6;2282:9;2278:22;2257:53;:::i;:::-;2247:63;;2203:117;2131:196;;;;:::o;2333:278::-;2400:6;2449:2;2437:9;2428:7;2424:23;2420:32;2417:2;;;2465:1;2462;2455:12;2417:2;2508:1;2533:61;2586:7;2577:6;2566:9;2562:22;2533:61;:::i;:::-;2523:71;;2479:125;2407:204;;;;:::o;2617:407::-;2685:6;2693;2742:2;2730:9;2721:7;2717:23;2713:32;2710:2;;;2758:1;2755;2748:12;2710:2;2801:1;2826:53;2871:7;2862:6;2851:9;2847:22;2826:53;:::i;:::-;2816:63;;2772:117;2928:2;2954:53;2999:7;2990:6;2979:9;2975:22;2954:53;:::i;:::-;2944:63;;2899:118;2700:324;;;;;:::o;3030:552::-;3107:6;3115;3123;3172:2;3160:9;3151:7;3147:23;3143:32;3140:2;;;3188:1;3185;3178:12;3140:2;3231:1;3256:53;3301:7;3292:6;3281:9;3277:22;3256:53;:::i;:::-;3246:63;;3202:117;3358:2;3384:53;3429:7;3420:6;3409:9;3405:22;3384:53;:::i;:::-;3374:63;;3329:118;3486:2;3512:53;3557:7;3548:6;3537:9;3533:22;3512:53;:::i;:::-;3502:63;;3457:118;3130:452;;;;;:::o;3588:809::-;3683:6;3691;3699;3707;3756:3;3744:9;3735:7;3731:23;3727:33;3724:2;;;3773:1;3770;3763:12;3724:2;3816:1;3841:53;3886:7;3877:6;3866:9;3862:22;3841:53;:::i;:::-;3831:63;;3787:117;3943:2;3969:53;4014:7;4005:6;3994:9;3990:22;3969:53;:::i;:::-;3959:63;;3914:118;4071:2;4097:53;4142:7;4133:6;4122:9;4118:22;4097:53;:::i;:::-;4087:63;;4042:118;4227:2;4216:9;4212:18;4199:32;4258:18;4250:6;4247:30;4244:2;;;4290:1;4287;4280:12;4244:2;4318:62;4372:7;4363:6;4352:9;4348:22;4318:62;:::i;:::-;4308:72;;4170:220;3714:683;;;;;;;:::o;4403:401::-;4468:6;4476;4525:2;4513:9;4504:7;4500:23;4496:32;4493:2;;;4541:1;4538;4531:12;4493:2;4584:1;4609:53;4654:7;4645:6;4634:9;4630:22;4609:53;:::i;:::-;4599:63;;4555:117;4711:2;4737:50;4779:7;4770:6;4759:9;4755:22;4737:50;:::i;:::-;4727:60;;4682:115;4483:321;;;;;:::o;4810:407::-;4878:6;4886;4935:2;4923:9;4914:7;4910:23;4906:32;4903:2;;;4951:1;4948;4941:12;4903:2;4994:1;5019:53;5064:7;5055:6;5044:9;5040:22;5019:53;:::i;:::-;5009:63;;4965:117;5121:2;5147:53;5192:7;5183:6;5172:9;5168:22;5147:53;:::i;:::-;5137:63;;5092:118;4893:324;;;;;:::o;5223:260::-;5281:6;5330:2;5318:9;5309:7;5305:23;5301:32;5298:2;;;5346:1;5343;5336:12;5298:2;5389:1;5414:52;5458:7;5449:6;5438:9;5434:22;5414:52;:::i;:::-;5404:62;;5360:116;5288:195;;;;:::o;5489:282::-;5558:6;5607:2;5595:9;5586:7;5582:23;5578:32;5575:2;;;5623:1;5620;5613:12;5575:2;5666:1;5691:63;5746:7;5737:6;5726:9;5722:22;5691:63;:::i;:::-;5681:73;;5637:127;5565:206;;;;:::o;5777:284::-;5847:6;5896:2;5884:9;5875:7;5871:23;5867:32;5864:2;;;5912:1;5909;5902:12;5864:2;5955:1;5980:64;6036:7;6027:6;6016:9;6012:22;5980:64;:::i;:::-;5970:74;;5926:128;5854:207;;;;:::o;6067:395::-;6138:6;6146;6195:2;6183:9;6174:7;6170:23;6166:32;6163:2;;;6211:1;6208;6201:12;6163:2;6282:1;6271:9;6267:17;6254:31;6312:18;6304:6;6301:30;6298:2;;;6344:1;6341;6334:12;6298:2;6380:65;6437:7;6428:6;6417:9;6413:22;6380:65;:::i;:::-;6362:83;;;;6225:230;6153:309;;;;;:::o;6468:262::-;6527:6;6576:2;6564:9;6555:7;6551:23;6547:32;6544:2;;;6592:1;6589;6582:12;6544:2;6635:1;6660:53;6705:7;6696:6;6685:9;6681:22;6660:53;:::i;:::-;6650:63;;6606:117;6534:196;;;;:::o;6736:118::-;6823:24;6841:5;6823:24;:::i;:::-;6818:3;6811:37;6801:53;;:::o;6860:109::-;6941:21;6956:5;6941:21;:::i;:::-;6936:3;6929:34;6919:50;;:::o;6975:360::-;7061:3;7089:38;7121:5;7089:38;:::i;:::-;7143:70;7206:6;7201:3;7143:70;:::i;:::-;7136:77;;7222:52;7267:6;7262:3;7255:4;7248:5;7244:16;7222:52;:::i;:::-;7299:29;7321:6;7299:29;:::i;:::-;7294:3;7290:39;7283:46;;7065:270;;;;;:::o;7341:149::-;7437:46;7477:5;7437:46;:::i;:::-;7432:3;7425:59;7415:75;;:::o;7520:304::-;7618:3;7639:71;7703:6;7698:3;7639:71;:::i;:::-;7632:78;;7720:43;7756:6;7751:3;7744:5;7720:43;:::i;:::-;7788:29;7810:6;7788:29;:::i;:::-;7783:3;7779:39;7772:46;;7622:202;;;;;:::o;7830:364::-;7918:3;7946:39;7979:5;7946:39;:::i;:::-;8001:71;8065:6;8060:3;8001:71;:::i;:::-;7994:78;;8081:52;8126:6;8121:3;8114:4;8107:5;8103:16;8081:52;:::i;:::-;8158:29;8180:6;8158:29;:::i;:::-;8153:3;8149:39;8142:46;;7922:272;;;;;:::o;8200:377::-;8306:3;8334:39;8367:5;8334:39;:::i;:::-;8389:89;8471:6;8466:3;8389:89;:::i;:::-;8382:96;;8487:52;8532:6;8527:3;8520:4;8513:5;8509:16;8487:52;:::i;:::-;8564:6;8559:3;8555:16;8548:23;;8310:267;;;;;:::o;8583:366::-;8725:3;8746:67;8810:2;8805:3;8746:67;:::i;:::-;8739:74;;8822:93;8911:3;8822:93;:::i;:::-;8940:2;8935:3;8931:12;8924:19;;8729:220;;;:::o;8955:366::-;9097:3;9118:67;9182:2;9177:3;9118:67;:::i;:::-;9111:74;;9194:93;9283:3;9194:93;:::i;:::-;9312:2;9307:3;9303:12;9296:19;;9101:220;;;:::o;9327:366::-;9469:3;9490:67;9554:2;9549:3;9490:67;:::i;:::-;9483:74;;9566:93;9655:3;9566:93;:::i;:::-;9684:2;9679:3;9675:12;9668:19;;9473:220;;;:::o;9699:366::-;9841:3;9862:67;9926:2;9921:3;9862:67;:::i;:::-;9855:74;;9938:93;10027:3;9938:93;:::i;:::-;10056:2;10051:3;10047:12;10040:19;;9845:220;;;:::o;10071:366::-;10213:3;10234:67;10298:2;10293:3;10234:67;:::i;:::-;10227:74;;10310:93;10399:3;10310:93;:::i;:::-;10428:2;10423:3;10419:12;10412:19;;10217:220;;;:::o;10443:366::-;10585:3;10606:67;10670:2;10665:3;10606:67;:::i;:::-;10599:74;;10682:93;10771:3;10682:93;:::i;:::-;10800:2;10795:3;10791:12;10784:19;;10589:220;;;:::o;10815:366::-;10957:3;10978:67;11042:2;11037:3;10978:67;:::i;:::-;10971:74;;11054:93;11143:3;11054:93;:::i;:::-;11172:2;11167:3;11163:12;11156:19;;10961:220;;;:::o;11187:366::-;11329:3;11350:67;11414:2;11409:3;11350:67;:::i;:::-;11343:74;;11426:93;11515:3;11426:93;:::i;:::-;11544:2;11539:3;11535:12;11528:19;;11333:220;;;:::o;11559:398::-;11718:3;11739:83;11820:1;11815:3;11739:83;:::i;:::-;11732:90;;11831:93;11920:3;11831:93;:::i;:::-;11949:1;11944:3;11940:11;11933:18;;11722:235;;;:::o;11963:366::-;12105:3;12126:67;12190:2;12185:3;12126:67;:::i;:::-;12119:74;;12202:93;12291:3;12202:93;:::i;:::-;12320:2;12315:3;12311:12;12304:19;;12109:220;;;:::o;12335:366::-;12477:3;12498:67;12562:2;12557:3;12498:67;:::i;:::-;12491:74;;12574:93;12663:3;12574:93;:::i;:::-;12692:2;12687:3;12683:12;12676:19;;12481:220;;;:::o;12707:118::-;12794:24;12812:5;12794:24;:::i;:::-;12789:3;12782:37;12772:53;;:::o;12831:435::-;13011:3;13033:95;13124:3;13115:6;13033:95;:::i;:::-;13026:102;;13145:95;13236:3;13227:6;13145:95;:::i;:::-;13138:102;;13257:3;13250:10;;13015:251;;;;;:::o;13272:379::-;13456:3;13478:147;13621:3;13478:147;:::i;:::-;13471:154;;13642:3;13635:10;;13460:191;;;:::o;13657:222::-;13750:4;13788:2;13777:9;13773:18;13765:26;;13801:71;13869:1;13858:9;13854:17;13845:6;13801:71;:::i;:::-;13755:124;;;;:::o;13885:640::-;14080:4;14118:3;14107:9;14103:19;14095:27;;14132:71;14200:1;14189:9;14185:17;14176:6;14132:71;:::i;:::-;14213:72;14281:2;14270:9;14266:18;14257:6;14213:72;:::i;:::-;14295;14363:2;14352:9;14348:18;14339:6;14295:72;:::i;:::-;14414:9;14408:4;14404:20;14399:2;14388:9;14384:18;14377:48;14442:76;14513:4;14504:6;14442:76;:::i;:::-;14434:84;;14085:440;;;;;;;:::o;14531:332::-;14652:4;14690:2;14679:9;14675:18;14667:26;;14703:71;14771:1;14760:9;14756:17;14747:6;14703:71;:::i;:::-;14784:72;14852:2;14841:9;14837:18;14828:6;14784:72;:::i;:::-;14657:206;;;;;:::o;14869:210::-;14956:4;14994:2;14983:9;14979:18;14971:26;;15007:65;15069:1;15058:9;15054:17;15045:6;15007:65;:::i;:::-;14961:118;;;;:::o;15085:240::-;15187:4;15225:2;15214:9;15210:18;15202:26;;15238:80;15315:1;15304:9;15300:17;15291:6;15238:80;:::i;:::-;15192:133;;;;:::o;15331:333::-;15454:4;15492:2;15481:9;15477:18;15469:26;;15541:9;15535:4;15531:20;15527:1;15516:9;15512:17;15505:47;15569:88;15652:4;15643:6;15635;15569:88;:::i;:::-;15561:96;;15459:205;;;;;:::o;15670:313::-;15783:4;15821:2;15810:9;15806:18;15798:26;;15870:9;15864:4;15860:20;15856:1;15845:9;15841:17;15834:47;15898:78;15971:4;15962:6;15898:78;:::i;:::-;15890:86;;15788:195;;;;:::o;15989:419::-;16155:4;16193:2;16182:9;16178:18;16170:26;;16242:9;16236:4;16232:20;16228:1;16217:9;16213:17;16206:47;16270:131;16396:4;16270:131;:::i;:::-;16262:139;;16160:248;;;:::o;16414:419::-;16580:4;16618:2;16607:9;16603:18;16595:26;;16667:9;16661:4;16657:20;16653:1;16642:9;16638:17;16631:47;16695:131;16821:4;16695:131;:::i;:::-;16687:139;;16585:248;;;:::o;16839:419::-;17005:4;17043:2;17032:9;17028:18;17020:26;;17092:9;17086:4;17082:20;17078:1;17067:9;17063:17;17056:47;17120:131;17246:4;17120:131;:::i;:::-;17112:139;;17010:248;;;:::o;17264:419::-;17430:4;17468:2;17457:9;17453:18;17445:26;;17517:9;17511:4;17507:20;17503:1;17492:9;17488:17;17481:47;17545:131;17671:4;17545:131;:::i;:::-;17537:139;;17435:248;;;:::o;17689:419::-;17855:4;17893:2;17882:9;17878:18;17870:26;;17942:9;17936:4;17932:20;17928:1;17917:9;17913:17;17906:47;17970:131;18096:4;17970:131;:::i;:::-;17962:139;;17860:248;;;:::o;18114:419::-;18280:4;18318:2;18307:9;18303:18;18295:26;;18367:9;18361:4;18357:20;18353:1;18342:9;18338:17;18331:47;18395:131;18521:4;18395:131;:::i;:::-;18387:139;;18285:248;;;:::o;18539:419::-;18705:4;18743:2;18732:9;18728:18;18720:26;;18792:9;18786:4;18782:20;18778:1;18767:9;18763:17;18756:47;18820:131;18946:4;18820:131;:::i;:::-;18812:139;;18710:248;;;:::o;18964:419::-;19130:4;19168:2;19157:9;19153:18;19145:26;;19217:9;19211:4;19207:20;19203:1;19192:9;19188:17;19181:47;19245:131;19371:4;19245:131;:::i;:::-;19237:139;;19135:248;;;:::o;19389:419::-;19555:4;19593:2;19582:9;19578:18;19570:26;;19642:9;19636:4;19632:20;19628:1;19617:9;19613:17;19606:47;19670:131;19796:4;19670:131;:::i;:::-;19662:139;;19560:248;;;:::o;19814:419::-;19980:4;20018:2;20007:9;20003:18;19995:26;;20067:9;20061:4;20057:20;20053:1;20042:9;20038:17;20031:47;20095:131;20221:4;20095:131;:::i;:::-;20087:139;;19985:248;;;:::o;20239:222::-;20332:4;20370:2;20359:9;20355:18;20347:26;;20383:71;20451:1;20440:9;20436:17;20427:6;20383:71;:::i;:::-;20337:124;;;;:::o;20467:129::-;20501:6;20528:20;;:::i;:::-;20518:30;;20557:33;20585:4;20577:6;20557:33;:::i;:::-;20508:88;;;:::o;20602:75::-;20635:6;20668:2;20662:9;20652:19;;20642:35;:::o;20683:307::-;20744:4;20834:18;20826:6;20823:30;20820:2;;;20856:18;;:::i;:::-;20820:2;20894:29;20916:6;20894:29;:::i;:::-;20886:37;;20978:4;20972;20968:15;20960:23;;20749:241;;;:::o;20996:98::-;21047:6;21081:5;21075:12;21065:22;;21054:40;;;:::o;21100:99::-;21152:6;21186:5;21180:12;21170:22;;21159:40;;;:::o;21205:168::-;21288:11;21322:6;21317:3;21310:19;21362:4;21357:3;21353:14;21338:29;;21300:73;;;;:::o;21379:147::-;21480:11;21517:3;21502:18;;21492:34;;;;:::o;21532:169::-;21616:11;21650:6;21645:3;21638:19;21690:4;21685:3;21681:14;21666:29;;21628:73;;;;:::o;21707:148::-;21809:11;21846:3;21831:18;;21821:34;;;;:::o;21861:305::-;21901:3;21920:20;21938:1;21920:20;:::i;:::-;21915:25;;21954:20;21972:1;21954:20;:::i;:::-;21949:25;;22108:1;22040:66;22036:74;22033:1;22030:81;22027:2;;;22114:18;;:::i;:::-;22027:2;22158:1;22155;22151:9;22144:16;;21905:261;;;;:::o;22172:185::-;22212:1;22229:20;22247:1;22229:20;:::i;:::-;22224:25;;22263:20;22281:1;22263:20;:::i;:::-;22258:25;;22302:1;22292:2;;22307:18;;:::i;:::-;22292:2;22349:1;22346;22342:9;22337:14;;22214:143;;;;:::o;22363:348::-;22403:7;22426:20;22444:1;22426:20;:::i;:::-;22421:25;;22460:20;22478:1;22460:20;:::i;:::-;22455:25;;22648:1;22580:66;22576:74;22573:1;22570:81;22565:1;22558:9;22551:17;22547:105;22544:2;;;22655:18;;:::i;:::-;22544:2;22703:1;22700;22696:9;22685:20;;22411:300;;;;:::o;22717:191::-;22757:4;22777:20;22795:1;22777:20;:::i;:::-;22772:25;;22811:20;22829:1;22811:20;:::i;:::-;22806:25;;22850:1;22847;22844:8;22841:2;;;22855:18;;:::i;:::-;22841:2;22900:1;22897;22893:9;22885:17;;22762:146;;;;:::o;22914:96::-;22951:7;22980:24;22998:5;22980:24;:::i;:::-;22969:35;;22959:51;;;:::o;23016:104::-;23061:7;23090:24;23108:5;23090:24;:::i;:::-;23079:35;;23069:51;;;:::o;23126:90::-;23160:7;23203:5;23196:13;23189:21;23178:32;;23168:48;;;:::o;23222:149::-;23258:7;23298:66;23291:5;23287:78;23276:89;;23266:105;;;:::o;23377:133::-;23425:7;23454:5;23443:16;;23460:44;23498:5;23460:44;:::i;:::-;23433:77;;;:::o;23516:126::-;23553:7;23593:42;23586:5;23582:54;23571:65;;23561:81;;;:::o;23648:77::-;23685:7;23714:5;23703:16;;23693:32;;;:::o;23731:133::-;23790:9;23823:35;23852:5;23823:35;:::i;:::-;23810:48;;23800:64;;;:::o;23870:154::-;23954:6;23949:3;23944;23931:30;24016:1;24007:6;24002:3;23998:16;23991:27;23921:103;;;:::o;24030:307::-;24098:1;24108:113;24122:6;24119:1;24116:13;24108:113;;;24207:1;24202:3;24198:11;24192:18;24188:1;24183:3;24179:11;24172:39;24144:2;24141:1;24137:10;24132:15;;24108:113;;;24239:6;24236:1;24233:13;24230:2;;;24319:1;24310:6;24305:3;24301:16;24294:27;24230:2;24079:258;;;;:::o;24343:320::-;24387:6;24424:1;24418:4;24414:12;24404:22;;24471:1;24465:4;24461:12;24492:18;24482:2;;24548:4;24540:6;24536:17;24526:27;;24482:2;24610;24602:6;24599:14;24579:18;24576:38;24573:2;;;24629:18;;:::i;:::-;24573:2;24394:269;;;;:::o;24669:281::-;24752:27;24774:4;24752:27;:::i;:::-;24744:6;24740:40;24882:6;24870:10;24867:22;24846:18;24834:10;24831:34;24828:62;24825:2;;;24893:18;;:::i;:::-;24825:2;24933:10;24929:2;24922:22;24712:238;;;:::o;24956:233::-;24995:3;25018:24;25036:5;25018:24;:::i;:::-;25009:33;;25064:66;25057:5;25054:77;25051:2;;;25134:18;;:::i;:::-;25051:2;25181:1;25174:5;25170:13;25163:20;;24999:190;;;:::o;25195:176::-;25227:1;25244:20;25262:1;25244:20;:::i;:::-;25239:25;;25278:20;25296:1;25278:20;:::i;:::-;25273:25;;25317:1;25307:2;;25322:18;;:::i;:::-;25307:2;25363:1;25360;25356:9;25351:14;;25229:142;;;;:::o;25377:180::-;25425:77;25422:1;25415:88;25522:4;25519:1;25512:15;25546:4;25543:1;25536:15;25563:180;25611:77;25608:1;25601:88;25708:4;25705:1;25698:15;25732:4;25729:1;25722:15;25749:180;25797:77;25794:1;25787:88;25894:4;25891:1;25884:15;25918:4;25915:1;25908:15;25935:180;25983:77;25980:1;25973:88;26080:4;26077:1;26070:15;26104:4;26101:1;26094:15;26121:180;26169:77;26166:1;26159:88;26266:4;26263:1;26256:15;26290:4;26287:1;26280:15;26307:102;26348:6;26399:2;26395:7;26390:2;26383:5;26379:14;26375:28;26365:38;;26355:54;;;:::o;26415:225::-;26555:34;26551:1;26543:6;26539:14;26532:58;26624:8;26619:2;26611:6;26607:15;26600:33;26521:119;:::o;26646:220::-;26786:34;26782:1;26774:6;26770:14;26763:58;26855:3;26850:2;26842:6;26838:15;26831:28;26752:114;:::o;26872:220::-;27012:34;27008:1;27000:6;26996:14;26989:58;27081:3;27076:2;27068:6;27064:15;27057:28;26978:114;:::o;27098:176::-;27238:28;27234:1;27226:6;27222:14;27215:52;27204:70;:::o;27280:182::-;27420:34;27416:1;27408:6;27404:14;27397:58;27386:76;:::o;27468:168::-;27608:20;27604:1;27596:6;27592:14;27585:44;27574:62;:::o;27642:175::-;27782:27;27778:1;27770:6;27766:14;27759:51;27748:69;:::o;27823:174::-;27963:26;27959:1;27951:6;27947:14;27940:50;27929:68;:::o;28003:114::-;28109:8;:::o;28123:172::-;28263:24;28259:1;28251:6;28247:14;28240:48;28229:66;:::o;28301:172::-;28441:24;28437:1;28429:6;28425:14;28418:48;28407:66;:::o;28479:116::-;28563:1;28556:5;28553:12;28543:2;;28569:18;;:::i;:::-;28543:2;28533:62;:::o;28601:122::-;28674:24;28692:5;28674:24;:::i;:::-;28667:5;28664:35;28654:2;;28713:1;28710;28703:12;28654:2;28644:79;:::o;28729:138::-;28810:32;28836:5;28810:32;:::i;:::-;28803:5;28800:43;28790:2;;28857:1;28854;28847:12;28790:2;28780:87;:::o;28873:116::-;28943:21;28958:5;28943:21;:::i;:::-;28936:5;28933:32;28923:2;;28979:1;28976;28969:12;28923:2;28913:76;:::o;28995:120::-;29067:23;29084:5;29067:23;:::i;:::-;29060:5;29057:34;29047:2;;29105:1;29102;29095:12;29047:2;29037:78;:::o;29121:110::-;29205:1;29198:5;29195:12;29185:2;;29221:1;29218;29211:12;29185:2;29175:56;:::o;29237:122::-;29310:24;29328:5;29310:24;:::i;:::-;29303:5;29300:35;29290:2;;29349:1;29346;29339:12;29290:2;29280:79;:::o

Swarm Source

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