ETH Price: $2,326.49 (-0.86%)

Token

Lucky Geek (LG)
 

Overview

Max Total Supply

607 LG

Holders

107

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
5 LG
0x831a390f3e787cd0597d6c696cb9de80ffdf0dcd
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:
NftWhalesClub

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-03
*/

// File: contract/NWC.sol

/**
 *Submitted for verification at Etherscan.io on 2022-02-18
*/


// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/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



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



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



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/IERC721Metadata.sol



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

// File: Aotaverse/Aotaverse.sol


pragma solidity >=0.7.0 <0.9.0;

contract NftWhalesClub is ERC721, Ownable, ReentrancyGuard {
    using Strings for uint256;
    using Counters for Counters.Counter;

    Counters.Counter private supply;

    string public uriPrefix = "https://gateway.pinata.cloud/ipfs/QmWBrSrdCsYnvM3Vz4AHVEutefMVPQ7GzhLmk4HKH2zV4r/"; 
    string public hiddenMetadataUri;

    uint256 private cost = 0.0 ether; 
    uint256 public maxSupply = 2000;         
    uint256 public softCap = 1999;         
    uint256 public constant maxMintAmountPerTx = 5;
    uint256 private mode = 1; 

    bool public paused = true; 
    bool public revealed = true;
    //free mint whitelist
    bytes32 public merkleRoot = 0x26c3748ce9d764cec1b09a15ef3f60bd8e4276eb1aeec227ba7580e833987e9c;

    mapping(address => uint256) public ClaimedWhitelistTwo;
    mapping(address => uint256) public ClaimedFreeMint;
    mapping(address => uint256) public ClaimedWhitelistOne;

    address public immutable proxyRegistryAddress = address(0xa5409ec958C83C3f309868babACA7c86DCB077c1); 
    //Opensea Proxy Address: 0xa5409ec958C83C3f309868babACA7c86DCB077c1

    //
    address private constant withdrawTo = 0x6b0475d3c570D712E1904Be763F81653baE2d2b6;

    constructor() ERC721("Lucky Geek", "LG") ReentrancyGuard() {
        setHiddenMetadataUri("https://gateway.pinata.cloud/ipfs/QmZ8cSu3So2JPochN8izvXZsCFX7ANjfaTRARuBfT5Z9kw"); 
        supply.increment();
        _safeMint(msg.sender, supply.current()); 
    }

    //MODIFIERS
    modifier mintCompliance(uint256 _mintAmount) {
        require(_mintAmount > 0 && _mintAmount < maxMintAmountPerTx+1, "Invalid mint amount");
        require(supply.current() + _mintAmount < softCap+1, "Exceeds Soft Cap");
        _;
    }

    //MINT
    function mint(bytes32[] memory proof, uint256 _mintAmount) external payable mintCompliance(_mintAmount) nonReentrant {
        require(!paused, "The contract is paused!");
        require(msg.value >= cost * _mintAmount, "Insufficient funds");
        require(mode != 5, "Mode is post-sale");
        if(mode == 1) {
            require(ClaimedFreeMint[msg.sender] + _mintAmount < 2, "Exceeds free mint allowance");
        }

        else if(mode == 2) {
            require(ClaimedWhitelistTwo[msg.sender] + _mintAmount < 3, "Exceeds whitelist only two allowance");
        }
 
        else if(mode == 3) {
            require(ClaimedWhitelistOne[msg.sender] + _mintAmount < 2, "Exceeds whitelist only one allowance");
        }

        if(mode != 4) {
            bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
            require(MerkleProof.verify(proof, merkleRoot, leaf), "Verification failed");
        }  
        
        if (mode == 1) {
            ClaimedFreeMint[msg.sender] += _mintAmount;
        }
        else if(mode == 2) {
            ClaimedWhitelistTwo[msg.sender] += _mintAmount;
        }
        else if(mode == 3) {
            ClaimedWhitelistOne[msg.sender] += _mintAmount;
        }

        _mintLoop(msg.sender, _mintAmount); 
    }

    function mintForAddress(uint256 _mintAmount, address _receiver) external onlyOwner nonReentrant { 
        require(mode == 5, "Mode is not post-sale");
        require(supply.current() + _mintAmount < maxSupply + 1);
        _mintLoop(_receiver, _mintAmount);
    }

    //VIEWS
    function walletOfOwner(address _owner) external view returns (uint256[] memory) { 
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
        uint256 currentTokenId = 1;
        uint256 ownedTokenIndex = 0;

        while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
            address currentTokenOwner = ownerOf(currentTokenId);

            if (currentTokenOwner == _owner) {
                ownedTokenIds[ownedTokenIndex] = currentTokenId;
                ownedTokenIndex++;
            }
            currentTokenId++;
        }
        return ownedTokenIds;
    }

    function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { 
        require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token");

        if (revealed == false) {
            return hiddenMetadataUri;
        }

        return bytes(uriPrefix).length > 0
            ? string(abi.encodePacked(uriPrefix, _tokenId.toString(), ".json"))
            : "";
    }

    function totalSupply() external view returns (uint256) { 
        return supply.current();
    }

    function getMode() external view returns (uint256) { 
        return mode;
    }

    function getCost() external view returns (uint256) { 
        return cost;
    }

    //ONLY OWNER SET
    function setMaxSupply(uint256 _MS) external onlyOwner { 
        require(_MS > maxSupply, "New MS below previous MS");
        maxSupply = _MS;
    }

    function setSoftCap(uint256 _SC) external onlyOwner {
        require(_SC > softCap, "New SC below previous SC");
        softCap = _SC;
    }

    function setMerkleRoot(bytes32 _root) external onlyOwner { 
        merkleRoot = _root;
    }

    function togglemode() external onlyOwner { 
        
        if(mode == 1) {
            mode = 2;
            cost = 0 ether;
            merkleRoot = 0x6ac71b2ed1c4d5cbf072e1bb34bfa74f6ae4df93b2474b2beaa7a54ead22c094;
        }
        else if(mode == 2) {
            mode = 3;
            cost = 0 ether;
            merkleRoot = 0x364fec0193536f10e6198f8b8d04d0353f7ef1f7db93b9139b31c10bb7f2e0a4;
        }
        else if (mode == 3) {
            mode = 4; 
            cost = 0 ether;
            merkleRoot = bytes32(0x00);
        }
        else if (mode == 4) {
            mode = 5; 
            cost = 0 ether;
        }
        else {
            mode = 1;
            cost = 0.0 ether;
        }
    }
    
    function setRevealed(bool _state) external onlyOwner { 
        revealed = _state;
    }

    function setMode(uint256 _mode) external onlyOwner { 
        mode = _mode;
    }

    function setCost(uint256 _newCost) external onlyOwner { 
        require(_newCost > 0);
        cost = _newCost;
    }

    function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
        hiddenMetadataUri = _hiddenMetadataUri;
    }

    function setUriPrefix(string memory _uriPrefix) external onlyOwner { 
        uriPrefix = _uriPrefix;
    }

    function setPaused(bool _state) external onlyOwner { 
        paused = _state;
    }

    function _mintLoop(address _receiver, uint256 _mintAmount) internal { 
        for (uint256 i = 0; i < _mintAmount; i++) {
            supply.increment();
            _safeMint(_receiver, supply.current());
        }
    }

    function withdraw() external payable onlyOwner { 
        (bool os, ) = payable(withdrawTo).call{value: address(this).balance}("");
        require(os);
    }

    function isApprovedForAll(address _owner, address operator) public view override returns (bool) {
        OpenSeaProxyRegistry proxyRegistry = OpenSeaProxyRegistry(proxyRegistryAddress);
        if(address(proxyRegistry.proxies(_owner)) == operator) {
            return true;
        }
        return super.isApprovedForAll(_owner, operator);
    }

}

contract OwnableDelegateProxy {}
contract OpenSeaProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ClaimedFreeMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ClaimedWhitelistOne","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ClaimedWhitelistTwo","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxyRegistryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MS","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_root","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mode","type":"uint256"}],"name":"setMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_SC","type":"uint256"}],"name":"setSoftCap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"softCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"togglemode","outputs":[],"stateMutability":"nonpayable","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":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60a060405260405180608001604052806051815260200162006244605191396009908051906020019062000035929190620008b7565b506000600b556107d0600c556107cf600d556001600e556001600f60006101000a81548160ff0219169083151502179055506001600f60016101000a81548160ff0219169083151502179055507f26c3748ce9d764cec1b09a15ef3f60bd8e4276eb1aeec227ba7580e833987e9c60001b60105573a5409ec958c83c3f309868babaca7c86dcb077c173ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200010057600080fd5b506040518060400160405280600a81526020017f4c75636b79204765656b000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f4c47000000000000000000000000000000000000000000000000000000000000815250816000908051906020019062000185929190620008b7565b5080600190805190602001906200019e929190620008b7565b505050620001c1620001b56200023860201b60201c565b6200024060201b60201c565b6001600781905550620001f3604051806080016040528060508152602001620061f4605091396200030660201b60201c565b6200020a6008620003b160201b620027981760201c565b6200023233620002266008620003c760201b620027ae1760201c565b620003d560201b60201c565b62000e43565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003166200023860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200033c620003fb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000395576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200038c9062000b69565b60405180910390fd5b80600a9080519060200190620003ad929190620008b7565b5050565b6001816000016000828254019250508190555050565b600081600001549050919050565b620003f78282604051806020016040528060008152506200042560201b60201c565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200043783836200049360201b60201c565b6200044c60008484846200067960201b60201c565b6200048e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004859062000b03565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000506576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004fd9062000b47565b60405180910390fd5b62000517816200083360201b60201c565b156200055a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005519062000b25565b60405180910390fd5b6200056e600083836200089f60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005c0919062000bb8565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620006a78473ffffffffffffffffffffffffffffffffffffffff16620008a460201b620027bc1760201c565b1562000826578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006d96200023860201b60201c565b8786866040518563ffffffff1660e01b8152600401620006fd949392919062000aaf565b602060405180830381600087803b1580156200071857600080fd5b505af19250505080156200074c57506040513d601f19601f820116820180604052508101906200074991906200097e565b60015b620007d5573d80600081146200077f576040519150601f19603f3d011682016040523d82523d6000602084013e62000784565b606091505b50600081511415620007cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c49062000b03565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506200082b565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b600080823b905060008111915050919050565b828054620008c59062000cb5565b90600052602060002090601f016020900481019282620008e9576000855562000935565b82601f106200090457805160ff191683800117855562000935565b8280016001018555821562000935579182015b828111156200093457825182559160200191906001019062000917565b5b50905062000944919062000948565b5090565b5b808211156200096357600081600090555060010162000949565b5090565b600081519050620009788162000e29565b92915050565b60006020828403121562000997576200099662000d49565b5b6000620009a78482850162000967565b91505092915050565b620009bb8162000c15565b82525050565b6000620009ce8262000b8b565b620009da818562000b96565b9350620009ec81856020860162000c7f565b620009f78162000d4e565b840191505092915050565b600062000a1160328362000ba7565b915062000a1e8262000d5f565b604082019050919050565b600062000a38601c8362000ba7565b915062000a458262000dae565b602082019050919050565b600062000a5f60208362000ba7565b915062000a6c8262000dd7565b602082019050919050565b600062000a8660208362000ba7565b915062000a938262000e00565b602082019050919050565b62000aa98162000c75565b82525050565b600060808201905062000ac66000830187620009b0565b62000ad56020830186620009b0565b62000ae4604083018562000a9e565b818103606083015262000af88184620009c1565b905095945050505050565b6000602082019050818103600083015262000b1e8162000a02565b9050919050565b6000602082019050818103600083015262000b408162000a29565b9050919050565b6000602082019050818103600083015262000b628162000a50565b9050919050565b6000602082019050818103600083015262000b848162000a77565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000bc58262000c75565b915062000bd28362000c75565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c0a5762000c0962000ceb565b5b828201905092915050565b600062000c228262000c55565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000c9f57808201518184015260208101905062000c82565b8381111562000caf576000848401525b50505050565b6000600282049050600182168062000cce57607f821691505b6020821081141562000ce55762000ce462000d1a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b62000e348162000c29565b811462000e4057600080fd5b50565b60805160601c61538b62000e696000396000818161223c0152612452015261538b6000f3fe6080604052600436106102725760003560e01c806370a082311161014f578063b1111da6116100c1578063d5cf5c721161007a578063d5cf5c7214610938578063d72dd3b414610961578063e0a808531461098a578063e985e9c5146109b3578063efbd73f4146109f0578063f2fde38b14610a1957610272565b8063b1111da61461083a578063b88d4fde14610851578063bd3e19d41461087a578063c87b56dd146108a5578063cd7c0326146108e2578063d5abeb011461090d57610272565b8063906a26e011610113578063906a26e014610728578063929f3c5c1461075357806394354fd01461079057806395d89b41146107bb578063a22cb465146107e6578063a45ba8e71461080f57610272565b806370a0823114610657578063715018a6146106945780637cb64759146106ab5780637ec4a659146106d45780638da5cb5b146106fd57610272565b8063438b6300116101e857806351830227116101ac57806351830227146105335780635c975abb1461055e57806362b99ad4146105895780636352211e146105b457806366bc0b75146105f15780636f8b44b01461062e57610272565b8063438b63001461045d57806344a0d68a1461049a57806345de0d9b146104c35780634b4fd03b146104df5780634fdd43cb1461050a57610272565b806318160ddd1161023a57806318160ddd1461036e57806322eb0e6b1461039957806323b872dd146103d65780632eb4a7ab146103ff5780633ccfd60b1461042a57806342842e0e1461043457610272565b806301ffc9a71461027757806306fdde03146102b4578063081812fc146102df578063095ea7b31461031c57806316c38b3c14610345575b600080fd5b34801561028357600080fd5b5061029e600480360381019061029991906139d1565b610a42565b6040516102ab9190614270565b60405180910390f35b3480156102c057600080fd5b506102c9610b24565b6040516102d691906142a6565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613aa1565b610bb6565b60405161031391906141e7565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e91906138db565b610c3b565b005b34801561035157600080fd5b5061036c60048036038101906103679190613977565b610d53565b005b34801561037a57600080fd5b50610383610dec565b6040516103909190614668565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190613758565b610dfd565b6040516103cd9190614668565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f891906137c5565b610e15565b005b34801561040b57600080fd5b50610414610e75565b604051610421919061428b565b60405180910390f35b610432610e7b565b005b34801561044057600080fd5b5061045b600480360381019061045691906137c5565b610f84565b005b34801561046957600080fd5b50610484600480360381019061047f9190613758565b610fa4565b604051610491919061424e565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc9190613aa1565b6110af565b005b6104dd60048036038101906104d8919061391b565b611142565b005b3480156104eb57600080fd5b506104f46116d5565b6040516105019190614668565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c9190613a58565b6116df565b005b34801561053f57600080fd5b50610548611775565b6040516105559190614270565b60405180910390f35b34801561056a57600080fd5b50610573611788565b6040516105809190614270565b60405180910390f35b34801561059557600080fd5b5061059e61179b565b6040516105ab91906142a6565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190613aa1565b611829565b6040516105e891906141e7565b60405180910390f35b3480156105fd57600080fd5b5061061860048036038101906106139190613758565b6118db565b6040516106259190614668565b60405180910390f35b34801561063a57600080fd5b5061065560048036038101906106509190613aa1565b6118f3565b005b34801561066357600080fd5b5061067e60048036038101906106799190613758565b6119bd565b60405161068b9190614668565b60405180910390f35b3480156106a057600080fd5b506106a9611a75565b005b3480156106b757600080fd5b506106d260048036038101906106cd91906139a4565b611afd565b005b3480156106e057600080fd5b506106fb60048036038101906106f69190613a58565b611b83565b005b34801561070957600080fd5b50610712611c19565b60405161071f91906141e7565b60405180910390f35b34801561073457600080fd5b5061073d611c43565b60405161074a9190614668565b60405180910390f35b34801561075f57600080fd5b5061077a60048036038101906107759190613758565b611c49565b6040516107879190614668565b60405180910390f35b34801561079c57600080fd5b506107a5611c61565b6040516107b29190614668565b60405180910390f35b3480156107c757600080fd5b506107d0611c66565b6040516107dd91906142a6565b60405180910390f35b3480156107f257600080fd5b5061080d6004803603810190610808919061389b565b611cf8565b005b34801561081b57600080fd5b50610824611e79565b60405161083191906142a6565b60405180910390f35b34801561084657600080fd5b5061084f611f07565b005b34801561085d57600080fd5b5061087860048036038101906108739190613818565b612077565b005b34801561088657600080fd5b5061088f6120d9565b60405161089c9190614668565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c79190613aa1565b6120e3565b6040516108d991906142a6565b60405180910390f35b3480156108ee57600080fd5b506108f761223a565b60405161090491906141e7565b60405180910390f35b34801561091957600080fd5b5061092261225e565b60405161092f9190614668565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a9190613aa1565b612264565b005b34801561096d57600080fd5b5061098860048036038101906109839190613aa1565b61232e565b005b34801561099657600080fd5b506109b160048036038101906109ac9190613977565b6123b4565b005b3480156109bf57600080fd5b506109da60048036038101906109d59190613785565b61244d565b6040516109e79190614270565b60405180910390f35b3480156109fc57600080fd5b50610a176004803603810190610a129190613ace565b61254d565b005b348015610a2557600080fd5b50610a406004803603810190610a3b9190613758565b6126a0565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b1d5750610b1c826127cf565b5b9050919050565b606060008054610b33906149b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5f906149b9565b8015610bac5780601f10610b8157610100808354040283529160200191610bac565b820191906000526020600020905b815481529060010190602001808311610b8f57829003601f168201915b5050505050905090565b6000610bc182612839565b610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf7906144c8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c4682611829565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae90614568565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cd66128a5565b73ffffffffffffffffffffffffffffffffffffffff161480610d055750610d0481610cff6128a5565b61244d565b5b610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614428565b60405180910390fd5b610d4e83836128ad565b505050565b610d5b6128a5565b73ffffffffffffffffffffffffffffffffffffffff16610d79611c19565b73ffffffffffffffffffffffffffffffffffffffff1614610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc6906144e8565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000610df860086127ae565b905090565b60126020528060005260406000206000915090505481565b610e26610e206128a5565b82612966565b610e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5c906145c8565b60405180910390fd5b610e70838383612a44565b505050565b60105481565b610e836128a5565b73ffffffffffffffffffffffffffffffffffffffff16610ea1611c19565b73ffffffffffffffffffffffffffffffffffffffff1614610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee906144e8565b60405180910390fd5b6000736b0475d3c570d712e1904be763f81653bae2d2b673ffffffffffffffffffffffffffffffffffffffff1647604051610f31906141d2565b60006040518083038185875af1925050503d8060008114610f6e576040519150601f19603f3d011682016040523d82523d6000602084013e610f73565b606091505b5050905080610f8157600080fd5b50565b610f9f83838360405180602001604052806000815250612077565b505050565b60606000610fb1836119bd565b905060008167ffffffffffffffff811115610fcf57610fce614b80565b5b604051908082528060200260200182016040528015610ffd5781602001602082028036833780820191505090505b50905060006001905060005b838110801561101a5750600c548211155b156110a357600061102a83611829565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561108f578284838151811061107457611073614b51565b5b602002602001018181525050818061108b90614a1c565b9250505b828061109a90614a1c565b93505050611009565b82945050505050919050565b6110b76128a5565b73ffffffffffffffffffffffffffffffffffffffff166110d5611c19565b73ffffffffffffffffffffffffffffffffffffffff161461112b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611122906144e8565b60405180910390fd5b6000811161113857600080fd5b80600b8190555050565b8060008111801561115f57506001600561115c91906147d2565b81105b61119e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611195906145e8565b60405180910390fd5b6001600d546111ad91906147d2565b816111b860086127ae565b6111c291906147d2565b10611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990614588565b60405180910390fd5b60026007541415611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f90614648565b60405180910390fd5b6002600781905550600f60009054906101000a900460ff16156112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129790614508565b60405180910390fd5b81600b546112ae9190614859565b3410156112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e790614408565b60405180910390fd5b6005600e541415611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d906144a8565b60405180910390fd5b6001600e5414156113d357600282601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461138e91906147d2565b106113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c590614628565b60405180910390fd5b61150b565b6002600e54141561147057600382601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461142b91906147d2565b1061146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146290614328565b60405180910390fd5b61150a565b6003600e54141561150957600282601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114c891906147d2565b10611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ff90614608565b60405180910390fd5b5b5b5b6004600e541461158e57600033604051602001611528919061415c565b60405160208183030381529060405280519060200120905061154d8460105483612ca0565b61158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158390614388565b60405180910390fd5b505b6001600e5414156115f45781601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115e891906147d2565b925050819055506116be565b6002600e54141561165a5781601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461164e91906147d2565b925050819055506116bd565b6003600e5414156116bc5781601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b491906147d2565b925050819055505b5b5b6116c83383612cb7565b6001600781905550505050565b6000600e54905090565b6116e76128a5565b73ffffffffffffffffffffffffffffffffffffffff16611705611c19565b73ffffffffffffffffffffffffffffffffffffffff161461175b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611752906144e8565b60405180910390fd5b80600a90805190602001906117719291906134a4565b5050565b600f60019054906101000a900460ff1681565b600f60009054906101000a900460ff1681565b600980546117a8906149b9565b80601f01602080910402602001604051908101604052809291908181526020018280546117d4906149b9565b80156118215780601f106117f657610100808354040283529160200191611821565b820191906000526020600020905b81548152906001019060200180831161180457829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990614468565b60405180910390fd5b80915050919050565b60116020528060005260406000206000915090505481565b6118fb6128a5565b73ffffffffffffffffffffffffffffffffffffffff16611919611c19565b73ffffffffffffffffffffffffffffffffffffffff161461196f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611966906144e8565b60405180910390fd5b600c5481116119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa906143a8565b60405180910390fd5b80600c8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2590614448565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a7d6128a5565b73ffffffffffffffffffffffffffffffffffffffff16611a9b611c19565b73ffffffffffffffffffffffffffffffffffffffff1614611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae8906144e8565b60405180910390fd5b611afb6000612cf7565b565b611b056128a5565b73ffffffffffffffffffffffffffffffffffffffff16611b23611c19565b73ffffffffffffffffffffffffffffffffffffffff1614611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b70906144e8565b60405180910390fd5b8060108190555050565b611b8b6128a5565b73ffffffffffffffffffffffffffffffffffffffff16611ba9611c19565b73ffffffffffffffffffffffffffffffffffffffff1614611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf6906144e8565b60405180910390fd5b8060099080519060200190611c159291906134a4565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b60136020528060005260406000206000915090505481565b600581565b606060018054611c75906149b9565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca1906149b9565b8015611cee5780601f10611cc357610100808354040283529160200191611cee565b820191906000526020600020905b815481529060010190602001808311611cd157829003601f168201915b5050505050905090565b611d006128a5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590614368565b60405180910390fd5b8060056000611d7b6128a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e286128a5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e6d9190614270565b60405180910390a35050565b600a8054611e86906149b9565b80601f0160208091040260200160405190810160405280929190818152602001828054611eb2906149b9565b8015611eff5780601f10611ed457610100808354040283529160200191611eff565b820191906000526020600020905b815481529060010190602001808311611ee257829003601f168201915b505050505081565b611f0f6128a5565b73ffffffffffffffffffffffffffffffffffffffff16611f2d611c19565b73ffffffffffffffffffffffffffffffffffffffff1614611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a906144e8565b60405180910390fd5b6001600e541415611fcd576002600e819055506000600b819055507f6ac71b2ed1c4d5cbf072e1bb34bfa74f6ae4df93b2474b2beaa7a54ead22c09460001b601081905550612075565b6002600e541415612017576003600e819055506000600b819055507f364fec0193536f10e6198f8b8d04d0353f7ef1f7db93b9139b31c10bb7f2e0a460001b601081905550612074565b6003600e541415612041576004600e819055506000600b819055506000801b601081905550612073565b6004600e541415612061576005600e819055506000600b81905550612072565b6001600e819055506000600b819055505b5b5b5b565b6120886120826128a5565b83612966565b6120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be906145c8565b60405180910390fd5b6120d384848484612dbd565b50505050565b6000600b54905090565b60606120ee82612839565b61212d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212490614548565b60405180910390fd5b60001515600f60019054906101000a900460ff16151514156121db57600a8054612156906149b9565b80601f0160208091040260200160405190810160405280929190818152602001828054612182906149b9565b80156121cf5780601f106121a4576101008083540402835291602001916121cf565b820191906000526020600020905b8154815290600101906020018083116121b257829003601f168201915b50505050509050612235565b6000600980546121ea906149b9565b9050116122065760405180602001604052806000815250612232565b600961221183612e19565b6040516020016122229291906141a3565b6040516020818303038152906040525b90505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5481565b61226c6128a5565b73ffffffffffffffffffffffffffffffffffffffff1661228a611c19565b73ffffffffffffffffffffffffffffffffffffffff16146122e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d7906144e8565b60405180910390fd5b600d548111612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b906145a8565b60405180910390fd5b80600d8190555050565b6123366128a5565b73ffffffffffffffffffffffffffffffffffffffff16612354611c19565b73ffffffffffffffffffffffffffffffffffffffff16146123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a1906144e8565b60405180910390fd5b80600e8190555050565b6123bc6128a5565b73ffffffffffffffffffffffffffffffffffffffff166123da611c19565b73ffffffffffffffffffffffffffffffffffffffff1614612430576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612427906144e8565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b6000807f000000000000000000000000000000000000000000000000000000000000000090508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016124c391906141e7565b60206040518083038186803b1580156124db57600080fd5b505afa1580156124ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125139190613a2b565b73ffffffffffffffffffffffffffffffffffffffff161415612539576001915050612547565b6125438484612f7a565b9150505b92915050565b6125556128a5565b73ffffffffffffffffffffffffffffffffffffffff16612573611c19565b73ffffffffffffffffffffffffffffffffffffffff16146125c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c0906144e8565b60405180910390fd5b6002600754141561260f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260690614648565b60405180910390fd5b60026007819055506005600e541461265c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612653906143e8565b60405180910390fd5b6001600c5461266b91906147d2565b8261267660086127ae565b61268091906147d2565b1061268a57600080fd5b6126948183612cb7565b60016007819055505050565b6126a86128a5565b73ffffffffffffffffffffffffffffffffffffffff166126c6611c19565b73ffffffffffffffffffffffffffffffffffffffff161461271c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612713906144e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561278c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612783906142e8565b60405180910390fd5b61279581612cf7565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661292083611829565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061297182612839565b6129b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a7906143c8565b60405180910390fd5b60006129bb83611829565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a2a57508373ffffffffffffffffffffffffffffffffffffffff16612a1284610bb6565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a3b5750612a3a818561244d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612a6482611829565b73ffffffffffffffffffffffffffffffffffffffff1614612aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab190614528565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2190614348565b60405180910390fd5b612b3583838361300e565b612b406000826128ad565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b9091906148b3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612be791906147d2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600082612cad8584613013565b1490509392505050565b60005b81811015612cf257612ccc6008612798565b612cdf83612cda60086127ae565b6130c6565b8080612cea90614a1c565b915050612cba565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612dc8848484612a44565b612dd4848484846130e4565b612e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0a906142c8565b60405180910390fd5b50505050565b60606000821415612e61576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f75565b600082905060005b60008214612e93578080612e7c90614a1c565b915050600a82612e8c9190614828565b9150612e69565b60008167ffffffffffffffff811115612eaf57612eae614b80565b5b6040519080825280601f01601f191660200182016040528015612ee15781602001600182028036833780820191505090505b5090505b60008514612f6e57600182612efa91906148b3565b9150600a85612f099190614a93565b6030612f1591906147d2565b60f81b818381518110612f2b57612f2a614b51565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f679190614828565b9450612ee5565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b60008082905060005b84518110156130bb57600085828151811061303a57613039614b51565b5b6020026020010151905080831161307b57828160405160200161305e929190614177565b6040516020818303038152906040528051906020012092506130a7565b808360405160200161308e929190614177565b6040516020818303038152906040528051906020012092505b5080806130b390614a1c565b91505061301c565b508091505092915050565b6130e082826040518060200160405280600081525061327b565b5050565b60006131058473ffffffffffffffffffffffffffffffffffffffff166127bc565b1561326e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261312e6128a5565b8786866040518563ffffffff1660e01b81526004016131509493929190614202565b602060405180830381600087803b15801561316a57600080fd5b505af192505050801561319b57506040513d601f19601f8201168201806040525081019061319891906139fe565b60015b61321e573d80600081146131cb576040519150601f19603f3d011682016040523d82523d6000602084013e6131d0565b606091505b50600081511415613216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320d906142c8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613273565b600190505b949350505050565b61328583836132d6565b61329260008484846130e4565b6132d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c8906142c8565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333d90614488565b60405180910390fd5b61334f81612839565b1561338f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338690614308565b60405180910390fd5b61339b6000838361300e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133eb91906147d2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546134b0906149b9565b90600052602060002090601f0160209004810192826134d25760008555613519565b82601f106134eb57805160ff1916838001178555613519565b82800160010185558215613519579182015b828111156135185782518255916020019190600101906134fd565b5b509050613526919061352a565b5090565b5b8082111561354357600081600090555060010161352b565b5090565b600061355a613555846146a8565b614683565b9050808382526020820190508285602086028201111561357d5761357c614bb4565b5b60005b858110156135ad57816135938882613693565b845260208401935060208301925050600181019050613580565b5050509392505050565b60006135ca6135c5846146d4565b614683565b9050828152602081018484840111156135e6576135e5614bb9565b5b6135f1848285614977565b509392505050565b600061360c61360784614705565b614683565b90508281526020810184848401111561362857613627614bb9565b5b613633848285614977565b509392505050565b60008135905061364a816152cb565b92915050565b600082601f83011261366557613664614baf565b5b8135613675848260208601613547565b91505092915050565b60008135905061368d816152e2565b92915050565b6000813590506136a2816152f9565b92915050565b6000813590506136b781615310565b92915050565b6000815190506136cc81615310565b92915050565b600082601f8301126136e7576136e6614baf565b5b81356136f78482602086016135b7565b91505092915050565b60008151905061370f81615327565b92915050565b600082601f83011261372a57613729614baf565b5b813561373a8482602086016135f9565b91505092915050565b6000813590506137528161533e565b92915050565b60006020828403121561376e5761376d614bc3565b5b600061377c8482850161363b565b91505092915050565b6000806040838503121561379c5761379b614bc3565b5b60006137aa8582860161363b565b92505060206137bb8582860161363b565b9150509250929050565b6000806000606084860312156137de576137dd614bc3565b5b60006137ec8682870161363b565b93505060206137fd8682870161363b565b925050604061380e86828701613743565b9150509250925092565b6000806000806080858703121561383257613831614bc3565b5b60006138408782880161363b565b94505060206138518782880161363b565b935050604061386287828801613743565b925050606085013567ffffffffffffffff81111561388357613882614bbe565b5b61388f878288016136d2565b91505092959194509250565b600080604083850312156138b2576138b1614bc3565b5b60006138c08582860161363b565b92505060206138d18582860161367e565b9150509250929050565b600080604083850312156138f2576138f1614bc3565b5b60006139008582860161363b565b925050602061391185828601613743565b9150509250929050565b6000806040838503121561393257613931614bc3565b5b600083013567ffffffffffffffff8111156139505761394f614bbe565b5b61395c85828601613650565b925050602061396d85828601613743565b9150509250929050565b60006020828403121561398d5761398c614bc3565b5b600061399b8482850161367e565b91505092915050565b6000602082840312156139ba576139b9614bc3565b5b60006139c884828501613693565b91505092915050565b6000602082840312156139e7576139e6614bc3565b5b60006139f5848285016136a8565b91505092915050565b600060208284031215613a1457613a13614bc3565b5b6000613a22848285016136bd565b91505092915050565b600060208284031215613a4157613a40614bc3565b5b6000613a4f84828501613700565b91505092915050565b600060208284031215613a6e57613a6d614bc3565b5b600082013567ffffffffffffffff811115613a8c57613a8b614bbe565b5b613a9884828501613715565b91505092915050565b600060208284031215613ab757613ab6614bc3565b5b6000613ac584828501613743565b91505092915050565b60008060408385031215613ae557613ae4614bc3565b5b6000613af385828601613743565b9250506020613b048582860161363b565b9150509250929050565b6000613b1a838361413e565b60208301905092915050565b613b2f816148e7565b82525050565b613b46613b41826148e7565b614a65565b82525050565b6000613b578261475b565b613b618185614789565b9350613b6c83614736565b8060005b83811015613b9d578151613b848882613b0e565b9750613b8f8361477c565b925050600181019050613b70565b5085935050505092915050565b613bb3816148f9565b82525050565b613bc281614905565b82525050565b613bd9613bd482614905565b614a77565b82525050565b6000613bea82614766565b613bf4818561479a565b9350613c04818560208601614986565b613c0d81614bc8565b840191505092915050565b6000613c2382614771565b613c2d81856147b6565b9350613c3d818560208601614986565b613c4681614bc8565b840191505092915050565b6000613c5c82614771565b613c6681856147c7565b9350613c76818560208601614986565b80840191505092915050565b60008154613c8f816149b9565b613c9981866147c7565b94506001821660008114613cb45760018114613cc557613cf8565b60ff19831686528186019350613cf8565b613cce85614746565b60005b83811015613cf057815481890152600182019150602081019050613cd1565b838801955050505b50505092915050565b6000613d0e6032836147b6565b9150613d1982614be6565b604082019050919050565b6000613d316026836147b6565b9150613d3c82614c35565b604082019050919050565b6000613d54601c836147b6565b9150613d5f82614c84565b602082019050919050565b6000613d776024836147b6565b9150613d8282614cad565b604082019050919050565b6000613d9a6024836147b6565b9150613da582614cfc565b604082019050919050565b6000613dbd6019836147b6565b9150613dc882614d4b565b602082019050919050565b6000613de06013836147b6565b9150613deb82614d74565b602082019050919050565b6000613e036018836147b6565b9150613e0e82614d9d565b602082019050919050565b6000613e26602c836147b6565b9150613e3182614dc6565b604082019050919050565b6000613e496015836147b6565b9150613e5482614e15565b602082019050919050565b6000613e6c6012836147b6565b9150613e7782614e3e565b602082019050919050565b6000613e8f6038836147b6565b9150613e9a82614e67565b604082019050919050565b6000613eb2602a836147b6565b9150613ebd82614eb6565b604082019050919050565b6000613ed56029836147b6565b9150613ee082614f05565b604082019050919050565b6000613ef86020836147b6565b9150613f0382614f54565b602082019050919050565b6000613f1b6011836147b6565b9150613f2682614f7d565b602082019050919050565b6000613f3e602c836147b6565b9150613f4982614fa6565b604082019050919050565b6000613f616005836147c7565b9150613f6c82614ff5565b600582019050919050565b6000613f846020836147b6565b9150613f8f8261501e565b602082019050919050565b6000613fa76017836147b6565b9150613fb282615047565b602082019050919050565b6000613fca6029836147b6565b9150613fd582615070565b604082019050919050565b6000613fed602f836147b6565b9150613ff8826150bf565b604082019050919050565b60006140106021836147b6565b915061401b8261510e565b604082019050919050565b60006140336010836147b6565b915061403e8261515d565b602082019050919050565b60006140566000836147ab565b915061406182615186565b600082019050919050565b60006140796018836147b6565b915061408482615189565b602082019050919050565b600061409c6031836147b6565b91506140a7826151b2565b604082019050919050565b60006140bf6013836147b6565b91506140ca82615201565b602082019050919050565b60006140e26024836147b6565b91506140ed8261522a565b604082019050919050565b6000614105601b836147b6565b915061411082615279565b602082019050919050565b6000614128601f836147b6565b9150614133826152a2565b602082019050919050565b6141478161496d565b82525050565b6141568161496d565b82525050565b60006141688284613b35565b60148201915081905092915050565b60006141838285613bc8565b6020820191506141938284613bc8565b6020820191508190509392505050565b60006141af8285613c82565b91506141bb8284613c51565b91506141c682613f54565b91508190509392505050565b60006141dd82614049565b9150819050919050565b60006020820190506141fc6000830184613b26565b92915050565b60006080820190506142176000830187613b26565b6142246020830186613b26565b614231604083018561414d565b81810360608301526142438184613bdf565b905095945050505050565b600060208201905081810360008301526142688184613b4c565b905092915050565b60006020820190506142856000830184613baa565b92915050565b60006020820190506142a06000830184613bb9565b92915050565b600060208201905081810360008301526142c08184613c18565b905092915050565b600060208201905081810360008301526142e181613d01565b9050919050565b6000602082019050818103600083015261430181613d24565b9050919050565b6000602082019050818103600083015261432181613d47565b9050919050565b6000602082019050818103600083015261434181613d6a565b9050919050565b6000602082019050818103600083015261436181613d8d565b9050919050565b6000602082019050818103600083015261438181613db0565b9050919050565b600060208201905081810360008301526143a181613dd3565b9050919050565b600060208201905081810360008301526143c181613df6565b9050919050565b600060208201905081810360008301526143e181613e19565b9050919050565b6000602082019050818103600083015261440181613e3c565b9050919050565b6000602082019050818103600083015261442181613e5f565b9050919050565b6000602082019050818103600083015261444181613e82565b9050919050565b6000602082019050818103600083015261446181613ea5565b9050919050565b6000602082019050818103600083015261448181613ec8565b9050919050565b600060208201905081810360008301526144a181613eeb565b9050919050565b600060208201905081810360008301526144c181613f0e565b9050919050565b600060208201905081810360008301526144e181613f31565b9050919050565b6000602082019050818103600083015261450181613f77565b9050919050565b6000602082019050818103600083015261452181613f9a565b9050919050565b6000602082019050818103600083015261454181613fbd565b9050919050565b6000602082019050818103600083015261456181613fe0565b9050919050565b6000602082019050818103600083015261458181614003565b9050919050565b600060208201905081810360008301526145a181614026565b9050919050565b600060208201905081810360008301526145c18161406c565b9050919050565b600060208201905081810360008301526145e18161408f565b9050919050565b60006020820190508181036000830152614601816140b2565b9050919050565b60006020820190508181036000830152614621816140d5565b9050919050565b60006020820190508181036000830152614641816140f8565b9050919050565b600060208201905081810360008301526146618161411b565b9050919050565b600060208201905061467d600083018461414d565b92915050565b600061468d61469e565b905061469982826149eb565b919050565b6000604051905090565b600067ffffffffffffffff8211156146c3576146c2614b80565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156146ef576146ee614b80565b5b6146f882614bc8565b9050602081019050919050565b600067ffffffffffffffff8211156147205761471f614b80565b5b61472982614bc8565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006147dd8261496d565b91506147e88361496d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561481d5761481c614ac4565b5b828201905092915050565b60006148338261496d565b915061483e8361496d565b92508261484e5761484d614af3565b5b828204905092915050565b60006148648261496d565b915061486f8361496d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148a8576148a7614ac4565b5b828202905092915050565b60006148be8261496d565b91506148c98361496d565b9250828210156148dc576148db614ac4565b5b828203905092915050565b60006148f28261494d565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000614946826148e7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156149a4578082015181840152602081019050614989565b838111156149b3576000848401525b50505050565b600060028204905060018216806149d157607f821691505b602082108114156149e5576149e4614b22565b5b50919050565b6149f482614bc8565b810181811067ffffffffffffffff82111715614a1357614a12614b80565b5b80604052505050565b6000614a278261496d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a5a57614a59614ac4565b5b600182019050919050565b6000614a7082614a81565b9050919050565b6000819050919050565b6000614a8c82614bd9565b9050919050565b6000614a9e8261496d565b9150614aa98361496d565b925082614ab957614ab8614af3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f457863656564732077686974656c697374206f6e6c792074776f20616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f566572696669636174696f6e206661696c656400000000000000000000000000600082015250565b7f4e6577204d532062656c6f772070726576696f7573204d530000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d6f6465206973206e6f7420706f73742d73616c650000000000000000000000600082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4d6f646520697320706f73742d73616c65000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565647320536f66742043617000000000000000000000000000000000600082015250565b50565b7f4e65772053432062656c6f772070726576696f75732053430000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7400000000000000000000000000600082015250565b7f457863656564732077686974656c697374206f6e6c79206f6e6520616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f457863656564732066726565206d696e7420616c6c6f77616e63650000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6152d4816148e7565b81146152df57600080fd5b50565b6152eb816148f9565b81146152f657600080fd5b50565b61530281614905565b811461530d57600080fd5b50565b6153198161490f565b811461532457600080fd5b50565b6153308161493b565b811461533b57600080fd5b50565b6153478161496d565b811461535257600080fd5b5056fea2646970667358221220874c16cb83bde514c6df7a88a03b5ba23ea15207e3f6f29be5862e770282cbf264736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5a3863537533536f324a506f63684e38697a76585a7343465837414e6a66615452415275426654355a396b7768747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d5742725372644373596e764d33567a3441485645757465664d56505137477a684c6d6b34484b48327a5634722f

Deployed Bytecode

0x6080604052600436106102725760003560e01c806370a082311161014f578063b1111da6116100c1578063d5cf5c721161007a578063d5cf5c7214610938578063d72dd3b414610961578063e0a808531461098a578063e985e9c5146109b3578063efbd73f4146109f0578063f2fde38b14610a1957610272565b8063b1111da61461083a578063b88d4fde14610851578063bd3e19d41461087a578063c87b56dd146108a5578063cd7c0326146108e2578063d5abeb011461090d57610272565b8063906a26e011610113578063906a26e014610728578063929f3c5c1461075357806394354fd01461079057806395d89b41146107bb578063a22cb465146107e6578063a45ba8e71461080f57610272565b806370a0823114610657578063715018a6146106945780637cb64759146106ab5780637ec4a659146106d45780638da5cb5b146106fd57610272565b8063438b6300116101e857806351830227116101ac57806351830227146105335780635c975abb1461055e57806362b99ad4146105895780636352211e146105b457806366bc0b75146105f15780636f8b44b01461062e57610272565b8063438b63001461045d57806344a0d68a1461049a57806345de0d9b146104c35780634b4fd03b146104df5780634fdd43cb1461050a57610272565b806318160ddd1161023a57806318160ddd1461036e57806322eb0e6b1461039957806323b872dd146103d65780632eb4a7ab146103ff5780633ccfd60b1461042a57806342842e0e1461043457610272565b806301ffc9a71461027757806306fdde03146102b4578063081812fc146102df578063095ea7b31461031c57806316c38b3c14610345575b600080fd5b34801561028357600080fd5b5061029e600480360381019061029991906139d1565b610a42565b6040516102ab9190614270565b60405180910390f35b3480156102c057600080fd5b506102c9610b24565b6040516102d691906142a6565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613aa1565b610bb6565b60405161031391906141e7565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e91906138db565b610c3b565b005b34801561035157600080fd5b5061036c60048036038101906103679190613977565b610d53565b005b34801561037a57600080fd5b50610383610dec565b6040516103909190614668565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb9190613758565b610dfd565b6040516103cd9190614668565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f891906137c5565b610e15565b005b34801561040b57600080fd5b50610414610e75565b604051610421919061428b565b60405180910390f35b610432610e7b565b005b34801561044057600080fd5b5061045b600480360381019061045691906137c5565b610f84565b005b34801561046957600080fd5b50610484600480360381019061047f9190613758565b610fa4565b604051610491919061424e565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc9190613aa1565b6110af565b005b6104dd60048036038101906104d8919061391b565b611142565b005b3480156104eb57600080fd5b506104f46116d5565b6040516105019190614668565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c9190613a58565b6116df565b005b34801561053f57600080fd5b50610548611775565b6040516105559190614270565b60405180910390f35b34801561056a57600080fd5b50610573611788565b6040516105809190614270565b60405180910390f35b34801561059557600080fd5b5061059e61179b565b6040516105ab91906142a6565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d69190613aa1565b611829565b6040516105e891906141e7565b60405180910390f35b3480156105fd57600080fd5b5061061860048036038101906106139190613758565b6118db565b6040516106259190614668565b60405180910390f35b34801561063a57600080fd5b5061065560048036038101906106509190613aa1565b6118f3565b005b34801561066357600080fd5b5061067e60048036038101906106799190613758565b6119bd565b60405161068b9190614668565b60405180910390f35b3480156106a057600080fd5b506106a9611a75565b005b3480156106b757600080fd5b506106d260048036038101906106cd91906139a4565b611afd565b005b3480156106e057600080fd5b506106fb60048036038101906106f69190613a58565b611b83565b005b34801561070957600080fd5b50610712611c19565b60405161071f91906141e7565b60405180910390f35b34801561073457600080fd5b5061073d611c43565b60405161074a9190614668565b60405180910390f35b34801561075f57600080fd5b5061077a60048036038101906107759190613758565b611c49565b6040516107879190614668565b60405180910390f35b34801561079c57600080fd5b506107a5611c61565b6040516107b29190614668565b60405180910390f35b3480156107c757600080fd5b506107d0611c66565b6040516107dd91906142a6565b60405180910390f35b3480156107f257600080fd5b5061080d6004803603810190610808919061389b565b611cf8565b005b34801561081b57600080fd5b50610824611e79565b60405161083191906142a6565b60405180910390f35b34801561084657600080fd5b5061084f611f07565b005b34801561085d57600080fd5b5061087860048036038101906108739190613818565b612077565b005b34801561088657600080fd5b5061088f6120d9565b60405161089c9190614668565b60405180910390f35b3480156108b157600080fd5b506108cc60048036038101906108c79190613aa1565b6120e3565b6040516108d991906142a6565b60405180910390f35b3480156108ee57600080fd5b506108f761223a565b60405161090491906141e7565b60405180910390f35b34801561091957600080fd5b5061092261225e565b60405161092f9190614668565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a9190613aa1565b612264565b005b34801561096d57600080fd5b5061098860048036038101906109839190613aa1565b61232e565b005b34801561099657600080fd5b506109b160048036038101906109ac9190613977565b6123b4565b005b3480156109bf57600080fd5b506109da60048036038101906109d59190613785565b61244d565b6040516109e79190614270565b60405180910390f35b3480156109fc57600080fd5b50610a176004803603810190610a129190613ace565b61254d565b005b348015610a2557600080fd5b50610a406004803603810190610a3b9190613758565b6126a0565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b1d5750610b1c826127cf565b5b9050919050565b606060008054610b33906149b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5f906149b9565b8015610bac5780601f10610b8157610100808354040283529160200191610bac565b820191906000526020600020905b815481529060010190602001808311610b8f57829003601f168201915b5050505050905090565b6000610bc182612839565b610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf7906144c8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c4682611829565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae90614568565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cd66128a5565b73ffffffffffffffffffffffffffffffffffffffff161480610d055750610d0481610cff6128a5565b61244d565b5b610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614428565b60405180910390fd5b610d4e83836128ad565b505050565b610d5b6128a5565b73ffffffffffffffffffffffffffffffffffffffff16610d79611c19565b73ffffffffffffffffffffffffffffffffffffffff1614610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc6906144e8565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b6000610df860086127ae565b905090565b60126020528060005260406000206000915090505481565b610e26610e206128a5565b82612966565b610e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5c906145c8565b60405180910390fd5b610e70838383612a44565b505050565b60105481565b610e836128a5565b73ffffffffffffffffffffffffffffffffffffffff16610ea1611c19565b73ffffffffffffffffffffffffffffffffffffffff1614610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee906144e8565b60405180910390fd5b6000736b0475d3c570d712e1904be763f81653bae2d2b673ffffffffffffffffffffffffffffffffffffffff1647604051610f31906141d2565b60006040518083038185875af1925050503d8060008114610f6e576040519150601f19603f3d011682016040523d82523d6000602084013e610f73565b606091505b5050905080610f8157600080fd5b50565b610f9f83838360405180602001604052806000815250612077565b505050565b60606000610fb1836119bd565b905060008167ffffffffffffffff811115610fcf57610fce614b80565b5b604051908082528060200260200182016040528015610ffd5781602001602082028036833780820191505090505b50905060006001905060005b838110801561101a5750600c548211155b156110a357600061102a83611829565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561108f578284838151811061107457611073614b51565b5b602002602001018181525050818061108b90614a1c565b9250505b828061109a90614a1c565b93505050611009565b82945050505050919050565b6110b76128a5565b73ffffffffffffffffffffffffffffffffffffffff166110d5611c19565b73ffffffffffffffffffffffffffffffffffffffff161461112b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611122906144e8565b60405180910390fd5b6000811161113857600080fd5b80600b8190555050565b8060008111801561115f57506001600561115c91906147d2565b81105b61119e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611195906145e8565b60405180910390fd5b6001600d546111ad91906147d2565b816111b860086127ae565b6111c291906147d2565b10611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f990614588565b60405180910390fd5b60026007541415611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123f90614648565b60405180910390fd5b6002600781905550600f60009054906101000a900460ff16156112a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129790614508565b60405180910390fd5b81600b546112ae9190614859565b3410156112f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e790614408565b60405180910390fd5b6005600e541415611336576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132d906144a8565b60405180910390fd5b6001600e5414156113d357600282601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461138e91906147d2565b106113ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c590614628565b60405180910390fd5b61150b565b6002600e54141561147057600382601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461142b91906147d2565b1061146b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146290614328565b60405180910390fd5b61150a565b6003600e54141561150957600282601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114c891906147d2565b10611508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ff90614608565b60405180910390fd5b5b5b5b6004600e541461158e57600033604051602001611528919061415c565b60405160208183030381529060405280519060200120905061154d8460105483612ca0565b61158c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158390614388565b60405180910390fd5b505b6001600e5414156115f45781601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115e891906147d2565b925050819055506116be565b6002600e54141561165a5781601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461164e91906147d2565b925050819055506116bd565b6003600e5414156116bc5781601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b491906147d2565b925050819055505b5b5b6116c83383612cb7565b6001600781905550505050565b6000600e54905090565b6116e76128a5565b73ffffffffffffffffffffffffffffffffffffffff16611705611c19565b73ffffffffffffffffffffffffffffffffffffffff161461175b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611752906144e8565b60405180910390fd5b80600a90805190602001906117719291906134a4565b5050565b600f60019054906101000a900460ff1681565b600f60009054906101000a900460ff1681565b600980546117a8906149b9565b80601f01602080910402602001604051908101604052809291908181526020018280546117d4906149b9565b80156118215780601f106117f657610100808354040283529160200191611821565b820191906000526020600020905b81548152906001019060200180831161180457829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990614468565b60405180910390fd5b80915050919050565b60116020528060005260406000206000915090505481565b6118fb6128a5565b73ffffffffffffffffffffffffffffffffffffffff16611919611c19565b73ffffffffffffffffffffffffffffffffffffffff161461196f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611966906144e8565b60405180910390fd5b600c5481116119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa906143a8565b60405180910390fd5b80600c8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2590614448565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a7d6128a5565b73ffffffffffffffffffffffffffffffffffffffff16611a9b611c19565b73ffffffffffffffffffffffffffffffffffffffff1614611af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae8906144e8565b60405180910390fd5b611afb6000612cf7565b565b611b056128a5565b73ffffffffffffffffffffffffffffffffffffffff16611b23611c19565b73ffffffffffffffffffffffffffffffffffffffff1614611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b70906144e8565b60405180910390fd5b8060108190555050565b611b8b6128a5565b73ffffffffffffffffffffffffffffffffffffffff16611ba9611c19565b73ffffffffffffffffffffffffffffffffffffffff1614611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf6906144e8565b60405180910390fd5b8060099080519060200190611c159291906134a4565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d5481565b60136020528060005260406000206000915090505481565b600581565b606060018054611c75906149b9565b80601f0160208091040260200160405190810160405280929190818152602001828054611ca1906149b9565b8015611cee5780601f10611cc357610100808354040283529160200191611cee565b820191906000526020600020905b815481529060010190602001808311611cd157829003601f168201915b5050505050905090565b611d006128a5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590614368565b60405180910390fd5b8060056000611d7b6128a5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e286128a5565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e6d9190614270565b60405180910390a35050565b600a8054611e86906149b9565b80601f0160208091040260200160405190810160405280929190818152602001828054611eb2906149b9565b8015611eff5780601f10611ed457610100808354040283529160200191611eff565b820191906000526020600020905b815481529060010190602001808311611ee257829003601f168201915b505050505081565b611f0f6128a5565b73ffffffffffffffffffffffffffffffffffffffff16611f2d611c19565b73ffffffffffffffffffffffffffffffffffffffff1614611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a906144e8565b60405180910390fd5b6001600e541415611fcd576002600e819055506000600b819055507f6ac71b2ed1c4d5cbf072e1bb34bfa74f6ae4df93b2474b2beaa7a54ead22c09460001b601081905550612075565b6002600e541415612017576003600e819055506000600b819055507f364fec0193536f10e6198f8b8d04d0353f7ef1f7db93b9139b31c10bb7f2e0a460001b601081905550612074565b6003600e541415612041576004600e819055506000600b819055506000801b601081905550612073565b6004600e541415612061576005600e819055506000600b81905550612072565b6001600e819055506000600b819055505b5b5b5b565b6120886120826128a5565b83612966565b6120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be906145c8565b60405180910390fd5b6120d384848484612dbd565b50505050565b6000600b54905090565b60606120ee82612839565b61212d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212490614548565b60405180910390fd5b60001515600f60019054906101000a900460ff16151514156121db57600a8054612156906149b9565b80601f0160208091040260200160405190810160405280929190818152602001828054612182906149b9565b80156121cf5780601f106121a4576101008083540402835291602001916121cf565b820191906000526020600020905b8154815290600101906020018083116121b257829003601f168201915b50505050509050612235565b6000600980546121ea906149b9565b9050116122065760405180602001604052806000815250612232565b600961221183612e19565b6040516020016122229291906141a3565b6040516020818303038152906040525b90505b919050565b7f000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c181565b600c5481565b61226c6128a5565b73ffffffffffffffffffffffffffffffffffffffff1661228a611c19565b73ffffffffffffffffffffffffffffffffffffffff16146122e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d7906144e8565b60405180910390fd5b600d548111612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b906145a8565b60405180910390fd5b80600d8190555050565b6123366128a5565b73ffffffffffffffffffffffffffffffffffffffff16612354611c19565b73ffffffffffffffffffffffffffffffffffffffff16146123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a1906144e8565b60405180910390fd5b80600e8190555050565b6123bc6128a5565b73ffffffffffffffffffffffffffffffffffffffff166123da611c19565b73ffffffffffffffffffffffffffffffffffffffff1614612430576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612427906144e8565b60405180910390fd5b80600f60016101000a81548160ff02191690831515021790555050565b6000807f000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016124c391906141e7565b60206040518083038186803b1580156124db57600080fd5b505afa1580156124ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125139190613a2b565b73ffffffffffffffffffffffffffffffffffffffff161415612539576001915050612547565b6125438484612f7a565b9150505b92915050565b6125556128a5565b73ffffffffffffffffffffffffffffffffffffffff16612573611c19565b73ffffffffffffffffffffffffffffffffffffffff16146125c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c0906144e8565b60405180910390fd5b6002600754141561260f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260690614648565b60405180910390fd5b60026007819055506005600e541461265c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612653906143e8565b60405180910390fd5b6001600c5461266b91906147d2565b8261267660086127ae565b61268091906147d2565b1061268a57600080fd5b6126948183612cb7565b60016007819055505050565b6126a86128a5565b73ffffffffffffffffffffffffffffffffffffffff166126c6611c19565b73ffffffffffffffffffffffffffffffffffffffff161461271c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612713906144e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561278c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612783906142e8565b60405180910390fd5b61279581612cf7565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661292083611829565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061297182612839565b6129b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a7906143c8565b60405180910390fd5b60006129bb83611829565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a2a57508373ffffffffffffffffffffffffffffffffffffffff16612a1284610bb6565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a3b5750612a3a818561244d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612a6482611829565b73ffffffffffffffffffffffffffffffffffffffff1614612aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab190614528565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2190614348565b60405180910390fd5b612b3583838361300e565b612b406000826128ad565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b9091906148b3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612be791906147d2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600082612cad8584613013565b1490509392505050565b60005b81811015612cf257612ccc6008612798565b612cdf83612cda60086127ae565b6130c6565b8080612cea90614a1c565b915050612cba565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612dc8848484612a44565b612dd4848484846130e4565b612e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0a906142c8565b60405180910390fd5b50505050565b60606000821415612e61576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f75565b600082905060005b60008214612e93578080612e7c90614a1c565b915050600a82612e8c9190614828565b9150612e69565b60008167ffffffffffffffff811115612eaf57612eae614b80565b5b6040519080825280601f01601f191660200182016040528015612ee15781602001600182028036833780820191505090505b5090505b60008514612f6e57600182612efa91906148b3565b9150600a85612f099190614a93565b6030612f1591906147d2565b60f81b818381518110612f2b57612f2a614b51565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f679190614828565b9450612ee5565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b60008082905060005b84518110156130bb57600085828151811061303a57613039614b51565b5b6020026020010151905080831161307b57828160405160200161305e929190614177565b6040516020818303038152906040528051906020012092506130a7565b808360405160200161308e929190614177565b6040516020818303038152906040528051906020012092505b5080806130b390614a1c565b91505061301c565b508091505092915050565b6130e082826040518060200160405280600081525061327b565b5050565b60006131058473ffffffffffffffffffffffffffffffffffffffff166127bc565b1561326e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261312e6128a5565b8786866040518563ffffffff1660e01b81526004016131509493929190614202565b602060405180830381600087803b15801561316a57600080fd5b505af192505050801561319b57506040513d601f19601f8201168201806040525081019061319891906139fe565b60015b61321e573d80600081146131cb576040519150601f19603f3d011682016040523d82523d6000602084013e6131d0565b606091505b50600081511415613216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320d906142c8565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613273565b600190505b949350505050565b61328583836132d6565b61329260008484846130e4565b6132d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c8906142c8565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613346576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333d90614488565b60405180910390fd5b61334f81612839565b1561338f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338690614308565b60405180910390fd5b61339b6000838361300e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133eb91906147d2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546134b0906149b9565b90600052602060002090601f0160209004810192826134d25760008555613519565b82601f106134eb57805160ff1916838001178555613519565b82800160010185558215613519579182015b828111156135185782518255916020019190600101906134fd565b5b509050613526919061352a565b5090565b5b8082111561354357600081600090555060010161352b565b5090565b600061355a613555846146a8565b614683565b9050808382526020820190508285602086028201111561357d5761357c614bb4565b5b60005b858110156135ad57816135938882613693565b845260208401935060208301925050600181019050613580565b5050509392505050565b60006135ca6135c5846146d4565b614683565b9050828152602081018484840111156135e6576135e5614bb9565b5b6135f1848285614977565b509392505050565b600061360c61360784614705565b614683565b90508281526020810184848401111561362857613627614bb9565b5b613633848285614977565b509392505050565b60008135905061364a816152cb565b92915050565b600082601f83011261366557613664614baf565b5b8135613675848260208601613547565b91505092915050565b60008135905061368d816152e2565b92915050565b6000813590506136a2816152f9565b92915050565b6000813590506136b781615310565b92915050565b6000815190506136cc81615310565b92915050565b600082601f8301126136e7576136e6614baf565b5b81356136f78482602086016135b7565b91505092915050565b60008151905061370f81615327565b92915050565b600082601f83011261372a57613729614baf565b5b813561373a8482602086016135f9565b91505092915050565b6000813590506137528161533e565b92915050565b60006020828403121561376e5761376d614bc3565b5b600061377c8482850161363b565b91505092915050565b6000806040838503121561379c5761379b614bc3565b5b60006137aa8582860161363b565b92505060206137bb8582860161363b565b9150509250929050565b6000806000606084860312156137de576137dd614bc3565b5b60006137ec8682870161363b565b93505060206137fd8682870161363b565b925050604061380e86828701613743565b9150509250925092565b6000806000806080858703121561383257613831614bc3565b5b60006138408782880161363b565b94505060206138518782880161363b565b935050604061386287828801613743565b925050606085013567ffffffffffffffff81111561388357613882614bbe565b5b61388f878288016136d2565b91505092959194509250565b600080604083850312156138b2576138b1614bc3565b5b60006138c08582860161363b565b92505060206138d18582860161367e565b9150509250929050565b600080604083850312156138f2576138f1614bc3565b5b60006139008582860161363b565b925050602061391185828601613743565b9150509250929050565b6000806040838503121561393257613931614bc3565b5b600083013567ffffffffffffffff8111156139505761394f614bbe565b5b61395c85828601613650565b925050602061396d85828601613743565b9150509250929050565b60006020828403121561398d5761398c614bc3565b5b600061399b8482850161367e565b91505092915050565b6000602082840312156139ba576139b9614bc3565b5b60006139c884828501613693565b91505092915050565b6000602082840312156139e7576139e6614bc3565b5b60006139f5848285016136a8565b91505092915050565b600060208284031215613a1457613a13614bc3565b5b6000613a22848285016136bd565b91505092915050565b600060208284031215613a4157613a40614bc3565b5b6000613a4f84828501613700565b91505092915050565b600060208284031215613a6e57613a6d614bc3565b5b600082013567ffffffffffffffff811115613a8c57613a8b614bbe565b5b613a9884828501613715565b91505092915050565b600060208284031215613ab757613ab6614bc3565b5b6000613ac584828501613743565b91505092915050565b60008060408385031215613ae557613ae4614bc3565b5b6000613af385828601613743565b9250506020613b048582860161363b565b9150509250929050565b6000613b1a838361413e565b60208301905092915050565b613b2f816148e7565b82525050565b613b46613b41826148e7565b614a65565b82525050565b6000613b578261475b565b613b618185614789565b9350613b6c83614736565b8060005b83811015613b9d578151613b848882613b0e565b9750613b8f8361477c565b925050600181019050613b70565b5085935050505092915050565b613bb3816148f9565b82525050565b613bc281614905565b82525050565b613bd9613bd482614905565b614a77565b82525050565b6000613bea82614766565b613bf4818561479a565b9350613c04818560208601614986565b613c0d81614bc8565b840191505092915050565b6000613c2382614771565b613c2d81856147b6565b9350613c3d818560208601614986565b613c4681614bc8565b840191505092915050565b6000613c5c82614771565b613c6681856147c7565b9350613c76818560208601614986565b80840191505092915050565b60008154613c8f816149b9565b613c9981866147c7565b94506001821660008114613cb45760018114613cc557613cf8565b60ff19831686528186019350613cf8565b613cce85614746565b60005b83811015613cf057815481890152600182019150602081019050613cd1565b838801955050505b50505092915050565b6000613d0e6032836147b6565b9150613d1982614be6565b604082019050919050565b6000613d316026836147b6565b9150613d3c82614c35565b604082019050919050565b6000613d54601c836147b6565b9150613d5f82614c84565b602082019050919050565b6000613d776024836147b6565b9150613d8282614cad565b604082019050919050565b6000613d9a6024836147b6565b9150613da582614cfc565b604082019050919050565b6000613dbd6019836147b6565b9150613dc882614d4b565b602082019050919050565b6000613de06013836147b6565b9150613deb82614d74565b602082019050919050565b6000613e036018836147b6565b9150613e0e82614d9d565b602082019050919050565b6000613e26602c836147b6565b9150613e3182614dc6565b604082019050919050565b6000613e496015836147b6565b9150613e5482614e15565b602082019050919050565b6000613e6c6012836147b6565b9150613e7782614e3e565b602082019050919050565b6000613e8f6038836147b6565b9150613e9a82614e67565b604082019050919050565b6000613eb2602a836147b6565b9150613ebd82614eb6565b604082019050919050565b6000613ed56029836147b6565b9150613ee082614f05565b604082019050919050565b6000613ef86020836147b6565b9150613f0382614f54565b602082019050919050565b6000613f1b6011836147b6565b9150613f2682614f7d565b602082019050919050565b6000613f3e602c836147b6565b9150613f4982614fa6565b604082019050919050565b6000613f616005836147c7565b9150613f6c82614ff5565b600582019050919050565b6000613f846020836147b6565b9150613f8f8261501e565b602082019050919050565b6000613fa76017836147b6565b9150613fb282615047565b602082019050919050565b6000613fca6029836147b6565b9150613fd582615070565b604082019050919050565b6000613fed602f836147b6565b9150613ff8826150bf565b604082019050919050565b60006140106021836147b6565b915061401b8261510e565b604082019050919050565b60006140336010836147b6565b915061403e8261515d565b602082019050919050565b60006140566000836147ab565b915061406182615186565b600082019050919050565b60006140796018836147b6565b915061408482615189565b602082019050919050565b600061409c6031836147b6565b91506140a7826151b2565b604082019050919050565b60006140bf6013836147b6565b91506140ca82615201565b602082019050919050565b60006140e26024836147b6565b91506140ed8261522a565b604082019050919050565b6000614105601b836147b6565b915061411082615279565b602082019050919050565b6000614128601f836147b6565b9150614133826152a2565b602082019050919050565b6141478161496d565b82525050565b6141568161496d565b82525050565b60006141688284613b35565b60148201915081905092915050565b60006141838285613bc8565b6020820191506141938284613bc8565b6020820191508190509392505050565b60006141af8285613c82565b91506141bb8284613c51565b91506141c682613f54565b91508190509392505050565b60006141dd82614049565b9150819050919050565b60006020820190506141fc6000830184613b26565b92915050565b60006080820190506142176000830187613b26565b6142246020830186613b26565b614231604083018561414d565b81810360608301526142438184613bdf565b905095945050505050565b600060208201905081810360008301526142688184613b4c565b905092915050565b60006020820190506142856000830184613baa565b92915050565b60006020820190506142a06000830184613bb9565b92915050565b600060208201905081810360008301526142c08184613c18565b905092915050565b600060208201905081810360008301526142e181613d01565b9050919050565b6000602082019050818103600083015261430181613d24565b9050919050565b6000602082019050818103600083015261432181613d47565b9050919050565b6000602082019050818103600083015261434181613d6a565b9050919050565b6000602082019050818103600083015261436181613d8d565b9050919050565b6000602082019050818103600083015261438181613db0565b9050919050565b600060208201905081810360008301526143a181613dd3565b9050919050565b600060208201905081810360008301526143c181613df6565b9050919050565b600060208201905081810360008301526143e181613e19565b9050919050565b6000602082019050818103600083015261440181613e3c565b9050919050565b6000602082019050818103600083015261442181613e5f565b9050919050565b6000602082019050818103600083015261444181613e82565b9050919050565b6000602082019050818103600083015261446181613ea5565b9050919050565b6000602082019050818103600083015261448181613ec8565b9050919050565b600060208201905081810360008301526144a181613eeb565b9050919050565b600060208201905081810360008301526144c181613f0e565b9050919050565b600060208201905081810360008301526144e181613f31565b9050919050565b6000602082019050818103600083015261450181613f77565b9050919050565b6000602082019050818103600083015261452181613f9a565b9050919050565b6000602082019050818103600083015261454181613fbd565b9050919050565b6000602082019050818103600083015261456181613fe0565b9050919050565b6000602082019050818103600083015261458181614003565b9050919050565b600060208201905081810360008301526145a181614026565b9050919050565b600060208201905081810360008301526145c18161406c565b9050919050565b600060208201905081810360008301526145e18161408f565b9050919050565b60006020820190508181036000830152614601816140b2565b9050919050565b60006020820190508181036000830152614621816140d5565b9050919050565b60006020820190508181036000830152614641816140f8565b9050919050565b600060208201905081810360008301526146618161411b565b9050919050565b600060208201905061467d600083018461414d565b92915050565b600061468d61469e565b905061469982826149eb565b919050565b6000604051905090565b600067ffffffffffffffff8211156146c3576146c2614b80565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156146ef576146ee614b80565b5b6146f882614bc8565b9050602081019050919050565b600067ffffffffffffffff8211156147205761471f614b80565b5b61472982614bc8565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006147dd8261496d565b91506147e88361496d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561481d5761481c614ac4565b5b828201905092915050565b60006148338261496d565b915061483e8361496d565b92508261484e5761484d614af3565b5b828204905092915050565b60006148648261496d565b915061486f8361496d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148a8576148a7614ac4565b5b828202905092915050565b60006148be8261496d565b91506148c98361496d565b9250828210156148dc576148db614ac4565b5b828203905092915050565b60006148f28261494d565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000614946826148e7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156149a4578082015181840152602081019050614989565b838111156149b3576000848401525b50505050565b600060028204905060018216806149d157607f821691505b602082108114156149e5576149e4614b22565b5b50919050565b6149f482614bc8565b810181811067ffffffffffffffff82111715614a1357614a12614b80565b5b80604052505050565b6000614a278261496d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a5a57614a59614ac4565b5b600182019050919050565b6000614a7082614a81565b9050919050565b6000819050919050565b6000614a8c82614bd9565b9050919050565b6000614a9e8261496d565b9150614aa98361496d565b925082614ab957614ab8614af3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f457863656564732077686974656c697374206f6e6c792074776f20616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f566572696669636174696f6e206661696c656400000000000000000000000000600082015250565b7f4e6577204d532062656c6f772070726576696f7573204d530000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d6f6465206973206e6f7420706f73742d73616c650000000000000000000000600082015250565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4d6f646520697320706f73742d73616c65000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565647320536f66742043617000000000000000000000000000000000600082015250565b50565b7f4e65772053432062656c6f772070726576696f75732053430000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7400000000000000000000000000600082015250565b7f457863656564732077686974656c697374206f6e6c79206f6e6520616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f457863656564732066726565206d696e7420616c6c6f77616e63650000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6152d4816148e7565b81146152df57600080fd5b50565b6152eb816148f9565b81146152f657600080fd5b50565b61530281614905565b811461530d57600080fd5b50565b6153198161490f565b811461532457600080fd5b50565b6153308161493b565b811461533b57600080fd5b50565b6153478161496d565b811461535257600080fd5b5056fea2646970667358221220874c16cb83bde514c6df7a88a03b5ba23ea15207e3f6f29be5862e770282cbf264736f6c63430008070033

Deployed Bytecode Sourcemap

41613:7404:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29417:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30362:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31921:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31444:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48159:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46101:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42429:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32811:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42265:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48488:161;;;:::i;:::-;;33221:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44983:684;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47767:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43379:1306;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46207:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47896:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42204:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42171:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41795:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30056:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42368:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46409:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29786:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11052:94;;;;;;;;;;;;;:::i;:::-;;46722:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48042:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10401:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42039:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42486:54;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42084:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30531:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32214:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41912:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46825:741;;;;;;;;;;;;;:::i;:::-;;33477:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46297:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45675:418;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42549:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41992:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46569:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47676:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47578:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48657:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44693:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11301:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29417:305;29519:4;29571:25;29556:40;;;:11;:40;;;;:105;;;;29628:33;29613:48;;;:11;:48;;;;29556:105;:158;;;;29678:36;29702:11;29678:23;:36::i;:::-;29556:158;29536:178;;29417:305;;;:::o;30362:100::-;30416:13;30449:5;30442:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30362:100;:::o;31921:221::-;31997:7;32025:16;32033:7;32025;:16::i;:::-;32017:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32110:15;:24;32126:7;32110:24;;;;;;;;;;;;;;;;;;;;;32103:31;;31921:221;;;:::o;31444:411::-;31525:13;31541:23;31556:7;31541:14;:23::i;:::-;31525:39;;31589:5;31583:11;;:2;:11;;;;31575:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31683:5;31667:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31692:37;31709:5;31716:12;:10;:12::i;:::-;31692:16;:37::i;:::-;31667:62;31645:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;31826:21;31835:2;31839:7;31826:8;:21::i;:::-;31514:341;31444:411;;:::o;48159:86::-;10632:12;:10;:12::i;:::-;10621:23;;:7;:5;:7::i;:::-;:23;;;10613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48231:6:::1;48222;;:15;;;;;;;;;;;;;;;;;;48159:86:::0;:::o;46101:98::-;46147:7;46175:16;:6;:14;:16::i;:::-;46168:23;;46101:98;:::o;42429:50::-;;;;;;;;;;;;;;;;;:::o;32811:339::-;33006:41;33025:12;:10;:12::i;:::-;33039:7;33006:18;:41::i;:::-;32998:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33114:28;33124:4;33130:2;33134:7;33114:9;:28::i;:::-;32811:339;;;:::o;42265:94::-;;;;:::o;48488:161::-;10632:12;:10;:12::i;:::-;10621:23;;:7;:5;:7::i;:::-;:23;;;10613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48548:7:::1;42777:42;48561:24;;48593:21;48561:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48547:72;;;48638:2;48630:11;;;::::0;::::1;;48535:114;48488:161::o:0;33221:185::-;33359:39;33376:4;33382:2;33386:7;33359:39;;;;;;;;;;;;:16;:39::i;:::-;33221:185;;;:::o;44983:684::-;45045:16;45075:23;45101:17;45111:6;45101:9;:17::i;:::-;45075:43;;45129:30;45176:15;45162:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45129:63;;45203:22;45228:1;45203:26;;45240:23;45280:349;45305:15;45287;:33;:64;;;;;45342:9;;45324:14;:27;;45287:64;45280:349;;;45368:25;45396:23;45404:14;45396:7;:23::i;:::-;45368:51;;45461:6;45440:27;;:17;:27;;;45436:151;;;45521:14;45488:13;45502:15;45488:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;45554:17;;;;;:::i;:::-;;;;45436:151;45601:16;;;;;:::i;:::-;;;;45353:276;45280:349;;;45646:13;45639:20;;;;;;44983:684;;;:::o;47767:121::-;10632:12;:10;:12::i;:::-;10621:23;;:7;:5;:7::i;:::-;:23;;;10613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47852:1:::1;47841:8;:12;47833:21;;;::::0;::::1;;47872:8;47865:4;:15;;;;47767:121:::0;:::o;43379:1306::-;43470:11;43194:1;43180:11;:15;:53;;;;;43232:1;42129;43213:20;;;;:::i;:::-;43199:11;:34;43180:53;43172:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;43317:1;43309:7;;:9;;;;:::i;:::-;43295:11;43276:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:42;43268:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;4082:1:::1;4680:7;;:19;;4672:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4082:1;4813:7;:18;;;;43516:6:::2;;;;;;;;;;;43515:7;43507:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;43589:11;43582:4;;:18;;;;:::i;:::-;43569:9;:31;;43561:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43650:1;43642:4;;:9;;43634:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;43695:1;43687:4;;:9;43684:439;;;43765:1;43751:11;43721:15;:27;43737:10;43721:27;;;;;;;;;;;;;;;;:41;;;;:::i;:::-;:45;43713:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;43684:439;;;43838:1;43830:4;;:9;43827:296;;;43912:1;43898:11;43864:19;:31;43884:10;43864:31;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;:49;43856:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;43827:296;;;43995:1;43987:4;;:9;43984:139;;;44069:1;44055:11;44021:19;:31;44041:10;44021:31;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;:49;44013:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;43984:139;43827:296;43684:439;44146:1;44138:4;;:9;44135:185;;44164:12;44206:10;44189:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;44179:39;;;;;;44164:54;;44241:43;44260:5;44267:10;;44279:4;44241:18;:43::i;:::-;44233:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;44149:171;44135:185;44354:1;44346:4;;:9;44342:288;;;44403:11;44372:15;:27;44388:10;44372:27;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;44342:288;;;44452:1;44444:4;;:9;44441:189;;;44505:11;44470:19;:31;44490:10;44470:31;;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;;;;;44441:189;;;44554:1;44546:4;;:9;44543:87;;;44607:11;44572:19;:31;44592:10;44572:31;;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;;;;;44543:87;44441:189;44342:288;44642:34;44652:10;44664:11;44642:9;:34::i;:::-;4038:1:::1;4992:7;:22;;;;43379:1306:::0;;;:::o;46207:82::-;46249:7;46277:4;;46270:11;;46207:82;:::o;47896:138::-;10632:12;:10;:12::i;:::-;10621:23;;:7;:5;:7::i;:::-;:23;;;10613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48008:18:::1;47988:17;:38;;;;;;;;;;;;:::i;:::-;;47896:138:::0;:::o;42204:27::-;;;;;;;;;;;;;:::o;42171:25::-;;;;;;;;;;;;;:::o;41795:109::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30056:239::-;30128:7;30148:13;30164:7;:16;30172:7;30164:16;;;;;;;;;;;;;;;;;;;;;30148:32;;30216:1;30199:19;;:5;:19;;;;30191:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30282:5;30275:12;;;30056:239;;;:::o;42368:54::-;;;;;;;;;;;;;;;;;:::o;46409:152::-;10632:12;:10;:12::i;:::-;10621:23;;:7;:5;:7::i;:::-;:23;;;10613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46489:9:::1;;46483:3;:15;46475:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;46550:3;46538:9;:15;;;;46409:152:::0;:::o;29786:208::-;29858:7;29903:1;29886:19;;:5;:19;;;;29878:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29970:9;:16;29980:5;29970:16;;;;;;;;;;;;;;;;29963:23;;29786:208;;;:::o;11052:94::-;10632:12;:10;:12::i;:::-;10621:23;;:7;:5;:7::i;:::-;:23;;;10613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11117:21:::1;11135:1;11117:9;:21::i;:::-;11052:94::o:0;46722:95::-;10632:12;:10;:12::i;:::-;10621:23;;:7;:5;:7::i;:::-;:23;;;10613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46804:5:::1;46791:10;:18;;;;46722:95:::0;:::o;48042:109::-;10632:12;:10;:12::i;:::-;10621:23;;:7;:5;:7::i;:::-;:23;;;10613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48133:10:::1;48121:9;:22;;;;;;;;;;;;:::i;:::-;;48042:109:::0;:::o;10401:87::-;10447:7;10474:6;;;;;;;;;;;10467:13;;10401:87;:::o;42039:29::-;;;;:::o;42486:54::-;;;;;;;;;;;;;;;;;:::o;42084:46::-;42129:1;42084:46;:::o;30531:104::-;30587:13;30620:7;30613:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30531:104;:::o;32214:295::-;32329:12;:10;:12::i;:::-;32317:24;;:8;:24;;;;32309:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32429:8;32384:18;:32;32403:12;:10;:12::i;:::-;32384:32;;;;;;;;;;;;;;;:42;32417:8;32384:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;32482:8;32453:48;;32468:12;:10;:12::i;:::-;32453:48;;;32492:8;32453:48;;;;;;:::i;:::-;;;;;;;;32214:295;;:::o;41912:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46825:741::-;10632:12;:10;:12::i;:::-;10621:23;;:7;:5;:7::i;:::-;:23;;;10613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46899:1:::1;46891:4;;:9;46888:671;;;46924:1;46917:4;:8;;;;46947:7;46940:4;:14;;;;46982:66;46969:79;;:10;:79;;;;46888:671;;;47086:1;47078:4;;:9;47075:484;;;47111:1;47104:4;:8;;;;47134:7;47127:4;:14;;;;47169:66;47156:79;;:10;:79;;;;47075:484;;;47274:1;47266:4;;:9;47262:297;;;47299:1;47292:4;:8;;;;47323:7;47316:4;:14;;;;47366:4;47358:13:::0;::::1;47345:10;:26;;;;47262:297;;;47410:1;47402:4;;:9;47398:161;;;47435:1;47428:4;:8;;;;47459:7;47452:4;:14;;;;47398:161;;;47515:1;47508:4;:8;;;;47538:9;47531:4;:16;;;;47398:161;47262:297;47075:484;46888:671;46825:741::o:0;33477:328::-;33652:41;33671:12;:10;:12::i;:::-;33685:7;33652:18;:41::i;:::-;33644:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33758:39;33772:4;33778:2;33782:7;33791:5;33758:13;:39::i;:::-;33477:328;;;;:::o;46297:82::-;46339:7;46367:4;;46360:11;;46297:82;:::o;45675:418::-;45749:13;45784:17;45792:8;45784:7;:17::i;:::-;45776:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;45882:5;45870:17;;:8;;;;;;;;;;;:17;;;45866:74;;;45911:17;45904:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45866:74;45985:1;45965:9;45959:23;;;;;:::i;:::-;;;:27;:126;;;;;;;;;;;;;;;;;46026:9;46037:19;:8;:17;:19::i;:::-;46009:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45959:126;45952:133;;45675:418;;;;:::o;42549:99::-;;;:::o;41992:31::-;;;;:::o;46569:145::-;10632:12;:10;:12::i;:::-;10621:23;;:7;:5;:7::i;:::-;:23;;;10613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46646:7:::1;;46640:3;:13;46632:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;46703:3;46693:7;:13;;;;46569:145:::0;:::o;47676:83::-;10632:12;:10;:12::i;:::-;10621:23;;:7;:5;:7::i;:::-;:23;;;10613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47746:5:::1;47739:4;:12;;;;47676:83:::0;:::o;47578:90::-;10632:12;:10;:12::i;:::-;10621:23;;:7;:5;:7::i;:::-;:23;;;10613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47654:6:::1;47643:8;;:17;;;;;;;;;;;;;;;;;;47578:90:::0;:::o;48657:355::-;48747:4;48764:34;48822:20;48764:79;;48899:8;48857:50;;48865:13;:21;;;48887:6;48865:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48857:50;;;48854:93;;;48931:4;48924:11;;;;;48854:93;48964:40;48987:6;48995:8;48964:22;:40::i;:::-;48957:47;;;48657:355;;;;;:::o;44693:269::-;10632:12;:10;:12::i;:::-;10621:23;;:7;:5;:7::i;:::-;:23;;;10613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4082:1:::1;4680:7;;:19;;4672:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;4082:1;4813:7;:18;;;;44817:1:::2;44809:4;;:9;44801:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;44908:1;44896:9;;:13;;;;:::i;:::-;44882:11;44863:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:46;44855:55;;;::::0;::::2;;44921:33;44931:9;44942:11;44921:9;:33::i;:::-;4038:1:::1;4992:7;:22;;;;44693:269:::0;;:::o;11301:192::-;10632:12;:10;:12::i;:::-;10621:23;;:7;:5;:7::i;:::-;:23;;;10613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11410:1:::1;11390:22;;:8;:22;;;;11382:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11466:19;11476:8;11466:9;:19::i;:::-;11301:192:::0;:::o;6023:127::-;6130:1;6112:7;:14;;;:19;;;;;;;;;;;6023:127;:::o;5901:114::-;5966:7;5993;:14;;;5986:21;;5901:114;;;:::o;12447:387::-;12507:4;12715:12;12782:7;12770:20;12762:28;;12825:1;12818:4;:8;12811:15;;;12447:387;;;:::o;22387:157::-;22472:4;22511:25;22496:40;;;:11;:40;;;;22489:47;;22387:157;;;:::o;35315:127::-;35380:4;35432:1;35404:30;;:7;:16;35412:7;35404:16;;;;;;;;;;;;;;;;;;;;;:30;;;;35397:37;;35315:127;;;:::o;9189:98::-;9242:7;9269:10;9262:17;;9189:98;:::o;39297:174::-;39399:2;39372:15;:24;39388:7;39372:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;39455:7;39451:2;39417:46;;39426:23;39441:7;39426:14;:23::i;:::-;39417:46;;;;;;;;;;;;39297:174;;:::o;35609:348::-;35702:4;35727:16;35735:7;35727;:16::i;:::-;35719:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35803:13;35819:23;35834:7;35819:14;:23::i;:::-;35803:39;;35872:5;35861:16;;:7;:16;;;:51;;;;35905:7;35881:31;;:20;35893:7;35881:11;:20::i;:::-;:31;;;35861:51;:87;;;;35916:32;35933:5;35940:7;35916:16;:32::i;:::-;35861:87;35853:96;;;35609:348;;;;:::o;38601:578::-;38760:4;38733:31;;:23;38748:7;38733:14;:23::i;:::-;:31;;;38725:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;38843:1;38829:16;;:2;:16;;;;38821:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38899:39;38920:4;38926:2;38930:7;38899:20;:39::i;:::-;39003:29;39020:1;39024:7;39003:8;:29::i;:::-;39064:1;39045:9;:15;39055:4;39045:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39093:1;39076:9;:13;39086:2;39076:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39124:2;39105:7;:16;39113:7;39105:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39163:7;39159:2;39144:27;;39153:4;39144:27;;;;;;;;;;;;38601:578;;;:::o;1010:190::-;1135:4;1188;1159:25;1172:5;1179:4;1159:12;:25::i;:::-;:33;1152:40;;1010:190;;;;;:::o;48253:227::-;48338:9;48333:140;48357:11;48353:1;:15;48333:140;;;48390:18;:6;:16;:18::i;:::-;48423:38;48433:9;48444:16;:6;:14;:16::i;:::-;48423:9;:38::i;:::-;48370:3;;;;;:::i;:::-;;;;48333:140;;;;48253:227;;:::o;11501:173::-;11557:16;11576:6;;;;;;;;;;;11557:25;;11602:8;11593:6;;:17;;;;;;;;;;;;;;;;;;11657:8;11626:40;;11647:8;11626:40;;;;;;;;;;;;11546:128;11501:173;:::o;34687:315::-;34844:28;34854:4;34860:2;34864:7;34844:9;:28::i;:::-;34891:48;34914:4;34920:2;34924:7;34933:5;34891:22;:48::i;:::-;34883:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;34687:315;;;;:::o;6805:723::-;6861:13;7091:1;7082:5;:10;7078:53;;;7109:10;;;;;;;;;;;;;;;;;;;;;7078:53;7141:12;7156:5;7141:20;;7172:14;7197:78;7212:1;7204:4;:9;7197:78;;7230:8;;;;;:::i;:::-;;;;7261:2;7253:10;;;;;:::i;:::-;;;7197:78;;;7285:19;7317:6;7307:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7285:39;;7335:154;7351:1;7342:5;:10;7335:154;;7379:1;7369:11;;;;;:::i;:::-;;;7446:2;7438:5;:10;;;;:::i;:::-;7425:2;:24;;;;:::i;:::-;7412:39;;7395:6;7402;7395:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7475:2;7466:11;;;;;:::i;:::-;;;7335:154;;;7513:6;7499:21;;;;;6805:723;;;;:::o;32580:164::-;32677:4;32701:18;:25;32720:5;32701:25;;;;;;;;;;;;;;;:35;32727:8;32701:35;;;;;;;;;;;;;;;;;;;;;;;;;32694:42;;32580:164;;;;:::o;41407:126::-;;;;:::o;1562:701::-;1645:7;1665:20;1688:4;1665:27;;1708:9;1703:523;1727:5;:12;1723:1;:16;1703:523;;;1761:20;1784:5;1790:1;1784:8;;;;;;;;:::i;:::-;;;;;;;;1761:31;;1827:12;1811;:28;1807:408;;1981:12;1995;1964:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1954:55;;;;;;1939:70;;1807:408;;;2171:12;2185;2154:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2144:55;;;;;;2129:70;;1807:408;1746:480;1741:3;;;;;:::i;:::-;;;;1703:523;;;;2243:12;2236:19;;;1562:701;;;;:::o;36299:110::-;36375:26;36385:2;36389:7;36375:26;;;;;;;;;;;;:9;:26::i;:::-;36299:110;;:::o;40036:799::-;40191:4;40212:15;:2;:13;;;:15::i;:::-;40208:620;;;40264:2;40248:36;;;40285:12;:10;:12::i;:::-;40299:4;40305:7;40314:5;40248:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40244:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40507:1;40490:6;:13;:18;40486:272;;;40533:60;;;;;;;;;;:::i;:::-;;;;;;;;40486:272;40708:6;40702:13;40693:6;40689:2;40685:15;40678:38;40244:529;40381:41;;;40371:51;;;:6;:51;;;;40364:58;;;;;40208:620;40812:4;40805:11;;40036:799;;;;;;;:::o;36636:321::-;36766:18;36772:2;36776:7;36766:5;:18::i;:::-;36817:54;36848:1;36852:2;36856:7;36865:5;36817:22;:54::i;:::-;36795:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;36636:321;;;:::o;37293:382::-;37387:1;37373:16;;:2;:16;;;;37365:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37446:16;37454:7;37446;:16::i;:::-;37445:17;37437:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37508:45;37537:1;37541:2;37545:7;37508:20;:45::i;:::-;37583:1;37566:9;:13;37576:2;37566:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37614:2;37595:7;:16;37603:7;37595:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37659:7;37655:2;37634:33;;37651:1;37634:33;;;;;;;;;;;;37293:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:139::-;2309:5;2347:6;2334:20;2325:29;;2363:33;2390:5;2363:33;:::i;:::-;2263:139;;;;:::o;2408:137::-;2453:5;2491:6;2478:20;2469:29;;2507:32;2533:5;2507:32;:::i;:::-;2408:137;;;;:::o;2551:141::-;2607:5;2638:6;2632:13;2623:22;;2654:32;2680:5;2654:32;:::i;:::-;2551:141;;;;:::o;2711:338::-;2766:5;2815:3;2808:4;2800:6;2796:17;2792:27;2782:122;;2823:79;;:::i;:::-;2782:122;2940:6;2927:20;2965:78;3039:3;3031:6;3024:4;3016:6;3012:17;2965:78;:::i;:::-;2956:87;;2772:277;2711:338;;;;:::o;3055:201::-;3141:5;3172:6;3166:13;3157:22;;3188:62;3244:5;3188:62;:::i;:::-;3055:201;;;;:::o;3276:340::-;3332:5;3381:3;3374:4;3366:6;3362:17;3358:27;3348:122;;3389:79;;:::i;:::-;3348:122;3506:6;3493:20;3531:79;3606:3;3598:6;3591:4;3583:6;3579:17;3531:79;:::i;:::-;3522:88;;3338:278;3276:340;;;;:::o;3622:139::-;3668:5;3706:6;3693:20;3684:29;;3722:33;3749:5;3722:33;:::i;:::-;3622:139;;;;:::o;3767:329::-;3826:6;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;3767:329;;;;:::o;4102:474::-;4170:6;4178;4227:2;4215:9;4206:7;4202:23;4198:32;4195:119;;;4233:79;;:::i;:::-;4195:119;4353:1;4378:53;4423:7;4414:6;4403:9;4399:22;4378:53;:::i;:::-;4368:63;;4324:117;4480:2;4506:53;4551:7;4542:6;4531:9;4527:22;4506:53;:::i;:::-;4496:63;;4451:118;4102:474;;;;;:::o;4582:619::-;4659:6;4667;4675;4724:2;4712:9;4703:7;4699:23;4695:32;4692:119;;;4730:79;;:::i;:::-;4692:119;4850:1;4875:53;4920:7;4911:6;4900:9;4896:22;4875:53;:::i;:::-;4865:63;;4821:117;4977:2;5003:53;5048:7;5039:6;5028:9;5024:22;5003:53;:::i;:::-;4993:63;;4948:118;5105:2;5131:53;5176:7;5167:6;5156:9;5152:22;5131:53;:::i;:::-;5121:63;;5076:118;4582:619;;;;;:::o;5207:943::-;5302:6;5310;5318;5326;5375:3;5363:9;5354:7;5350:23;5346:33;5343:120;;;5382:79;;:::i;:::-;5343:120;5502:1;5527:53;5572:7;5563:6;5552:9;5548:22;5527:53;:::i;:::-;5517:63;;5473:117;5629:2;5655:53;5700:7;5691:6;5680:9;5676:22;5655:53;:::i;:::-;5645:63;;5600:118;5757:2;5783:53;5828:7;5819:6;5808:9;5804:22;5783:53;:::i;:::-;5773:63;;5728:118;5913:2;5902:9;5898:18;5885:32;5944:18;5936:6;5933:30;5930:117;;;5966:79;;:::i;:::-;5930:117;6071:62;6125:7;6116:6;6105:9;6101:22;6071:62;:::i;:::-;6061:72;;5856:287;5207:943;;;;;;;:::o;6156:468::-;6221:6;6229;6278:2;6266:9;6257:7;6253:23;6249:32;6246:119;;;6284:79;;:::i;:::-;6246:119;6404:1;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6375:117;6531:2;6557:50;6599:7;6590:6;6579:9;6575:22;6557:50;:::i;:::-;6547:60;;6502:115;6156:468;;;;;:::o;6630:474::-;6698:6;6706;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6881:1;6906:53;6951:7;6942:6;6931:9;6927:22;6906:53;:::i;:::-;6896:63;;6852:117;7008:2;7034:53;7079:7;7070:6;7059:9;7055:22;7034:53;:::i;:::-;7024:63;;6979:118;6630:474;;;;;:::o;7110:684::-;7203:6;7211;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7414:1;7403:9;7399:17;7386:31;7444:18;7436:6;7433:30;7430:117;;;7466:79;;:::i;:::-;7430:117;7571:78;7641:7;7632:6;7621:9;7617:22;7571:78;:::i;:::-;7561:88;;7357:302;7698:2;7724:53;7769:7;7760:6;7749:9;7745:22;7724:53;:::i;:::-;7714:63;;7669:118;7110:684;;;;;:::o;7800:323::-;7856:6;7905:2;7893:9;7884:7;7880:23;7876:32;7873:119;;;7911:79;;:::i;:::-;7873:119;8031:1;8056:50;8098:7;8089:6;8078:9;8074:22;8056:50;:::i;:::-;8046:60;;8002:114;7800:323;;;;:::o;8129:329::-;8188:6;8237:2;8225:9;8216:7;8212:23;8208:32;8205:119;;;8243:79;;:::i;:::-;8205:119;8363:1;8388:53;8433:7;8424:6;8413:9;8409:22;8388:53;:::i;:::-;8378:63;;8334:117;8129:329;;;;:::o;8464:327::-;8522:6;8571:2;8559:9;8550:7;8546:23;8542:32;8539:119;;;8577:79;;:::i;:::-;8539:119;8697:1;8722:52;8766:7;8757:6;8746:9;8742:22;8722:52;:::i;:::-;8712:62;;8668:116;8464:327;;;;:::o;8797:349::-;8866:6;8915:2;8903:9;8894:7;8890:23;8886:32;8883:119;;;8921:79;;:::i;:::-;8883:119;9041:1;9066:63;9121:7;9112:6;9101:9;9097:22;9066:63;:::i;:::-;9056:73;;9012:127;8797:349;;;;:::o;9152:409::-;9251:6;9300:2;9288:9;9279:7;9275:23;9271:32;9268:119;;;9306:79;;:::i;:::-;9268:119;9426:1;9451:93;9536:7;9527:6;9516:9;9512:22;9451:93;:::i;:::-;9441:103;;9397:157;9152:409;;;;:::o;9567:509::-;9636:6;9685:2;9673:9;9664:7;9660:23;9656:32;9653:119;;;9691:79;;:::i;:::-;9653:119;9839:1;9828:9;9824:17;9811:31;9869:18;9861:6;9858:30;9855:117;;;9891:79;;:::i;:::-;9855:117;9996:63;10051:7;10042:6;10031:9;10027:22;9996:63;:::i;:::-;9986:73;;9782:287;9567:509;;;;:::o;10082:329::-;10141:6;10190:2;10178:9;10169:7;10165:23;10161:32;10158:119;;;10196:79;;:::i;:::-;10158:119;10316:1;10341:53;10386:7;10377:6;10366:9;10362:22;10341:53;:::i;:::-;10331:63;;10287:117;10082:329;;;;:::o;10417:474::-;10485:6;10493;10542:2;10530:9;10521:7;10517:23;10513:32;10510:119;;;10548:79;;:::i;:::-;10510:119;10668:1;10693:53;10738:7;10729:6;10718:9;10714:22;10693:53;:::i;:::-;10683:63;;10639:117;10795:2;10821:53;10866:7;10857:6;10846:9;10842:22;10821:53;:::i;:::-;10811:63;;10766:118;10417:474;;;;;:::o;10897:179::-;10966:10;10987:46;11029:3;11021:6;10987:46;:::i;:::-;11065:4;11060:3;11056:14;11042:28;;10897:179;;;;:::o;11082:118::-;11169:24;11187:5;11169:24;:::i;:::-;11164:3;11157:37;11082:118;;:::o;11206:157::-;11311:45;11331:24;11349:5;11331:24;:::i;:::-;11311:45;:::i;:::-;11306:3;11299:58;11206:157;;:::o;11399:732::-;11518:3;11547:54;11595:5;11547:54;:::i;:::-;11617:86;11696:6;11691:3;11617:86;:::i;:::-;11610:93;;11727:56;11777:5;11727:56;:::i;:::-;11806:7;11837:1;11822:284;11847:6;11844:1;11841:13;11822:284;;;11923:6;11917:13;11950:63;12009:3;11994:13;11950:63;:::i;:::-;11943:70;;12036:60;12089:6;12036:60;:::i;:::-;12026:70;;11882:224;11869:1;11866;11862:9;11857:14;;11822:284;;;11826:14;12122:3;12115:10;;11523:608;;;11399:732;;;;:::o;12137:109::-;12218:21;12233:5;12218:21;:::i;:::-;12213:3;12206:34;12137:109;;:::o;12252:118::-;12339:24;12357:5;12339:24;:::i;:::-;12334:3;12327:37;12252:118;;:::o;12376:157::-;12481:45;12501:24;12519:5;12501:24;:::i;:::-;12481:45;:::i;:::-;12476:3;12469:58;12376:157;;:::o;12539:360::-;12625:3;12653:38;12685:5;12653:38;:::i;:::-;12707:70;12770:6;12765:3;12707:70;:::i;:::-;12700:77;;12786:52;12831:6;12826:3;12819:4;12812:5;12808:16;12786:52;:::i;:::-;12863:29;12885:6;12863:29;:::i;:::-;12858:3;12854:39;12847:46;;12629:270;12539:360;;;;:::o;12905:364::-;12993:3;13021:39;13054:5;13021:39;:::i;:::-;13076:71;13140:6;13135:3;13076:71;:::i;:::-;13069:78;;13156:52;13201:6;13196:3;13189:4;13182:5;13178:16;13156:52;:::i;:::-;13233:29;13255:6;13233:29;:::i;:::-;13228:3;13224:39;13217:46;;12997:272;12905:364;;;;:::o;13275:377::-;13381:3;13409:39;13442:5;13409:39;:::i;:::-;13464:89;13546:6;13541:3;13464:89;:::i;:::-;13457:96;;13562:52;13607:6;13602:3;13595:4;13588:5;13584:16;13562:52;:::i;:::-;13639:6;13634:3;13630:16;13623:23;;13385:267;13275:377;;;;:::o;13682:845::-;13785:3;13822:5;13816:12;13851:36;13877:9;13851:36;:::i;:::-;13903:89;13985:6;13980:3;13903:89;:::i;:::-;13896:96;;14023:1;14012:9;14008:17;14039:1;14034:137;;;;14185:1;14180:341;;;;14001:520;;14034:137;14118:4;14114:9;14103;14099:25;14094:3;14087:38;14154:6;14149:3;14145:16;14138:23;;14034:137;;14180:341;14247:38;14279:5;14247:38;:::i;:::-;14307:1;14321:154;14335:6;14332:1;14329:13;14321:154;;;14409:7;14403:14;14399:1;14394:3;14390:11;14383:35;14459:1;14450:7;14446:15;14435:26;;14357:4;14354:1;14350:12;14345:17;;14321:154;;;14504:6;14499:3;14495:16;14488:23;;14187:334;;14001:520;;13789:738;;13682:845;;;;:::o;14533:366::-;14675:3;14696:67;14760:2;14755:3;14696:67;:::i;:::-;14689:74;;14772:93;14861:3;14772:93;:::i;:::-;14890:2;14885:3;14881:12;14874:19;;14533:366;;;:::o;14905:::-;15047:3;15068:67;15132:2;15127:3;15068:67;:::i;:::-;15061:74;;15144:93;15233:3;15144:93;:::i;:::-;15262:2;15257:3;15253:12;15246:19;;14905:366;;;:::o;15277:::-;15419:3;15440:67;15504:2;15499:3;15440:67;:::i;:::-;15433:74;;15516:93;15605:3;15516:93;:::i;:::-;15634:2;15629:3;15625:12;15618:19;;15277:366;;;:::o;15649:::-;15791:3;15812:67;15876:2;15871:3;15812:67;:::i;:::-;15805:74;;15888:93;15977:3;15888:93;:::i;:::-;16006:2;16001:3;15997:12;15990:19;;15649:366;;;:::o;16021:::-;16163:3;16184:67;16248:2;16243:3;16184:67;:::i;:::-;16177:74;;16260:93;16349:3;16260:93;:::i;:::-;16378:2;16373:3;16369:12;16362:19;;16021:366;;;:::o;16393:::-;16535:3;16556:67;16620:2;16615:3;16556:67;:::i;:::-;16549:74;;16632:93;16721:3;16632:93;:::i;:::-;16750:2;16745:3;16741:12;16734:19;;16393:366;;;:::o;16765:::-;16907:3;16928:67;16992:2;16987:3;16928:67;:::i;:::-;16921:74;;17004:93;17093:3;17004:93;:::i;:::-;17122:2;17117:3;17113:12;17106:19;;16765:366;;;:::o;17137:::-;17279:3;17300:67;17364:2;17359:3;17300:67;:::i;:::-;17293:74;;17376:93;17465:3;17376:93;:::i;:::-;17494:2;17489:3;17485:12;17478:19;;17137:366;;;:::o;17509:::-;17651:3;17672:67;17736:2;17731:3;17672:67;:::i;:::-;17665:74;;17748:93;17837:3;17748:93;:::i;:::-;17866:2;17861:3;17857:12;17850:19;;17509:366;;;:::o;17881:::-;18023:3;18044:67;18108:2;18103:3;18044:67;:::i;:::-;18037:74;;18120:93;18209:3;18120:93;:::i;:::-;18238:2;18233:3;18229:12;18222:19;;17881:366;;;:::o;18253:::-;18395:3;18416:67;18480:2;18475:3;18416:67;:::i;:::-;18409:74;;18492:93;18581:3;18492:93;:::i;:::-;18610:2;18605:3;18601:12;18594:19;;18253:366;;;:::o;18625:::-;18767:3;18788:67;18852:2;18847:3;18788:67;:::i;:::-;18781:74;;18864:93;18953:3;18864:93;:::i;:::-;18982:2;18977:3;18973:12;18966:19;;18625:366;;;:::o;18997:::-;19139:3;19160:67;19224:2;19219:3;19160:67;:::i;:::-;19153:74;;19236:93;19325:3;19236:93;:::i;:::-;19354:2;19349:3;19345:12;19338:19;;18997:366;;;:::o;19369:::-;19511:3;19532:67;19596:2;19591:3;19532:67;:::i;:::-;19525:74;;19608:93;19697:3;19608:93;:::i;:::-;19726:2;19721:3;19717:12;19710:19;;19369:366;;;:::o;19741:::-;19883:3;19904:67;19968:2;19963:3;19904:67;:::i;:::-;19897:74;;19980:93;20069:3;19980:93;:::i;:::-;20098:2;20093:3;20089:12;20082:19;;19741:366;;;:::o;20113:::-;20255:3;20276:67;20340:2;20335:3;20276:67;:::i;:::-;20269:74;;20352:93;20441:3;20352:93;:::i;:::-;20470:2;20465:3;20461:12;20454:19;;20113:366;;;:::o;20485:::-;20627:3;20648:67;20712:2;20707:3;20648:67;:::i;:::-;20641:74;;20724:93;20813:3;20724:93;:::i;:::-;20842:2;20837:3;20833:12;20826:19;;20485:366;;;:::o;20857:400::-;21017:3;21038:84;21120:1;21115:3;21038:84;:::i;:::-;21031:91;;21131:93;21220:3;21131:93;:::i;:::-;21249:1;21244:3;21240:11;21233:18;;20857:400;;;:::o;21263:366::-;21405:3;21426:67;21490:2;21485:3;21426:67;:::i;:::-;21419:74;;21502:93;21591:3;21502:93;:::i;:::-;21620:2;21615:3;21611:12;21604:19;;21263:366;;;:::o;21635:::-;21777:3;21798:67;21862:2;21857:3;21798:67;:::i;:::-;21791:74;;21874:93;21963:3;21874:93;:::i;:::-;21992:2;21987:3;21983:12;21976:19;;21635:366;;;:::o;22007:::-;22149:3;22170:67;22234:2;22229:3;22170:67;:::i;:::-;22163:74;;22246:93;22335:3;22246:93;:::i;:::-;22364:2;22359:3;22355:12;22348:19;;22007:366;;;:::o;22379:::-;22521:3;22542:67;22606:2;22601:3;22542:67;:::i;:::-;22535:74;;22618:93;22707:3;22618:93;:::i;:::-;22736:2;22731:3;22727:12;22720:19;;22379:366;;;:::o;22751:::-;22893:3;22914:67;22978:2;22973:3;22914:67;:::i;:::-;22907:74;;22990:93;23079:3;22990:93;:::i;:::-;23108:2;23103:3;23099:12;23092:19;;22751:366;;;:::o;23123:::-;23265:3;23286:67;23350:2;23345:3;23286:67;:::i;:::-;23279:74;;23362:93;23451:3;23362:93;:::i;:::-;23480:2;23475:3;23471:12;23464:19;;23123:366;;;:::o;23495:398::-;23654:3;23675:83;23756:1;23751:3;23675:83;:::i;:::-;23668:90;;23767:93;23856:3;23767:93;:::i;:::-;23885:1;23880:3;23876:11;23869:18;;23495:398;;;:::o;23899:366::-;24041:3;24062:67;24126:2;24121:3;24062:67;:::i;:::-;24055:74;;24138:93;24227:3;24138:93;:::i;:::-;24256:2;24251:3;24247:12;24240:19;;23899:366;;;:::o;24271:::-;24413:3;24434:67;24498:2;24493:3;24434:67;:::i;:::-;24427:74;;24510:93;24599:3;24510:93;:::i;:::-;24628:2;24623:3;24619:12;24612:19;;24271:366;;;:::o;24643:::-;24785:3;24806:67;24870:2;24865:3;24806:67;:::i;:::-;24799:74;;24882:93;24971:3;24882:93;:::i;:::-;25000:2;24995:3;24991:12;24984:19;;24643:366;;;:::o;25015:::-;25157:3;25178:67;25242:2;25237:3;25178:67;:::i;:::-;25171:74;;25254:93;25343:3;25254:93;:::i;:::-;25372:2;25367:3;25363:12;25356:19;;25015:366;;;:::o;25387:::-;25529:3;25550:67;25614:2;25609:3;25550:67;:::i;:::-;25543:74;;25626:93;25715:3;25626:93;:::i;:::-;25744:2;25739:3;25735:12;25728:19;;25387:366;;;:::o;25759:::-;25901:3;25922:67;25986:2;25981:3;25922:67;:::i;:::-;25915:74;;25998:93;26087:3;25998:93;:::i;:::-;26116:2;26111:3;26107:12;26100:19;;25759:366;;;:::o;26131:108::-;26208:24;26226:5;26208:24;:::i;:::-;26203:3;26196:37;26131:108;;:::o;26245:118::-;26332:24;26350:5;26332:24;:::i;:::-;26327:3;26320:37;26245:118;;:::o;26369:256::-;26481:3;26496:75;26567:3;26558:6;26496:75;:::i;:::-;26596:2;26591:3;26587:12;26580:19;;26616:3;26609:10;;26369:256;;;;:::o;26631:397::-;26771:3;26786:75;26857:3;26848:6;26786:75;:::i;:::-;26886:2;26881:3;26877:12;26870:19;;26899:75;26970:3;26961:6;26899:75;:::i;:::-;26999:2;26994:3;26990:12;26983:19;;27019:3;27012:10;;26631:397;;;;;:::o;27034:695::-;27312:3;27334:92;27422:3;27413:6;27334:92;:::i;:::-;27327:99;;27443:95;27534:3;27525:6;27443:95;:::i;:::-;27436:102;;27555:148;27699:3;27555:148;:::i;:::-;27548:155;;27720:3;27713:10;;27034:695;;;;;:::o;27735:379::-;27919:3;27941:147;28084:3;27941:147;:::i;:::-;27934:154;;28105:3;28098:10;;27735:379;;;:::o;28120:222::-;28213:4;28251:2;28240:9;28236:18;28228:26;;28264:71;28332:1;28321:9;28317:17;28308:6;28264:71;:::i;:::-;28120:222;;;;:::o;28348:640::-;28543:4;28581:3;28570:9;28566:19;28558:27;;28595:71;28663:1;28652:9;28648:17;28639:6;28595:71;:::i;:::-;28676:72;28744:2;28733:9;28729:18;28720:6;28676:72;:::i;:::-;28758;28826:2;28815:9;28811:18;28802:6;28758:72;:::i;:::-;28877:9;28871:4;28867:20;28862:2;28851:9;28847:18;28840:48;28905:76;28976:4;28967:6;28905:76;:::i;:::-;28897:84;;28348:640;;;;;;;:::o;28994:373::-;29137:4;29175:2;29164:9;29160:18;29152:26;;29224:9;29218:4;29214:20;29210:1;29199:9;29195:17;29188:47;29252:108;29355:4;29346:6;29252:108;:::i;:::-;29244:116;;28994:373;;;;:::o;29373:210::-;29460:4;29498:2;29487:9;29483:18;29475:26;;29511:65;29573:1;29562:9;29558:17;29549:6;29511:65;:::i;:::-;29373:210;;;;:::o;29589:222::-;29682:4;29720:2;29709:9;29705:18;29697:26;;29733:71;29801:1;29790:9;29786:17;29777:6;29733:71;:::i;:::-;29589:222;;;;:::o;29817:313::-;29930:4;29968:2;29957:9;29953:18;29945:26;;30017:9;30011:4;30007:20;30003:1;29992:9;29988:17;29981:47;30045:78;30118:4;30109:6;30045:78;:::i;:::-;30037:86;;29817:313;;;;:::o;30136:419::-;30302:4;30340:2;30329:9;30325:18;30317:26;;30389:9;30383:4;30379:20;30375:1;30364:9;30360:17;30353:47;30417:131;30543:4;30417:131;:::i;:::-;30409:139;;30136:419;;;:::o;30561:::-;30727:4;30765:2;30754:9;30750:18;30742:26;;30814:9;30808:4;30804:20;30800:1;30789:9;30785:17;30778:47;30842:131;30968:4;30842:131;:::i;:::-;30834:139;;30561:419;;;:::o;30986:::-;31152:4;31190:2;31179:9;31175:18;31167:26;;31239:9;31233:4;31229:20;31225:1;31214:9;31210:17;31203:47;31267:131;31393:4;31267:131;:::i;:::-;31259:139;;30986:419;;;:::o;31411:::-;31577:4;31615:2;31604:9;31600:18;31592:26;;31664:9;31658:4;31654:20;31650:1;31639:9;31635:17;31628:47;31692:131;31818:4;31692:131;:::i;:::-;31684:139;;31411:419;;;:::o;31836:::-;32002:4;32040:2;32029:9;32025:18;32017:26;;32089:9;32083:4;32079:20;32075:1;32064:9;32060:17;32053:47;32117:131;32243:4;32117:131;:::i;:::-;32109:139;;31836:419;;;:::o;32261:::-;32427:4;32465:2;32454:9;32450:18;32442:26;;32514:9;32508:4;32504:20;32500:1;32489:9;32485:17;32478:47;32542:131;32668:4;32542:131;:::i;:::-;32534:139;;32261:419;;;:::o;32686:::-;32852:4;32890:2;32879:9;32875:18;32867:26;;32939:9;32933:4;32929:20;32925:1;32914:9;32910:17;32903:47;32967:131;33093:4;32967:131;:::i;:::-;32959:139;;32686:419;;;:::o;33111:::-;33277:4;33315:2;33304:9;33300:18;33292:26;;33364:9;33358:4;33354:20;33350:1;33339:9;33335:17;33328:47;33392:131;33518:4;33392:131;:::i;:::-;33384:139;;33111:419;;;:::o;33536:::-;33702:4;33740:2;33729:9;33725:18;33717:26;;33789:9;33783:4;33779:20;33775:1;33764:9;33760:17;33753:47;33817:131;33943:4;33817:131;:::i;:::-;33809:139;;33536:419;;;:::o;33961:::-;34127:4;34165:2;34154:9;34150:18;34142:26;;34214:9;34208:4;34204:20;34200:1;34189:9;34185:17;34178:47;34242:131;34368:4;34242:131;:::i;:::-;34234:139;;33961:419;;;:::o;34386:::-;34552:4;34590:2;34579:9;34575:18;34567:26;;34639:9;34633:4;34629:20;34625:1;34614:9;34610:17;34603:47;34667:131;34793:4;34667:131;:::i;:::-;34659:139;;34386:419;;;:::o;34811:::-;34977:4;35015:2;35004:9;35000:18;34992:26;;35064:9;35058:4;35054:20;35050:1;35039:9;35035:17;35028:47;35092:131;35218:4;35092:131;:::i;:::-;35084:139;;34811:419;;;:::o;35236:::-;35402:4;35440:2;35429:9;35425:18;35417:26;;35489:9;35483:4;35479:20;35475:1;35464:9;35460:17;35453:47;35517:131;35643:4;35517:131;:::i;:::-;35509:139;;35236:419;;;:::o;35661:::-;35827:4;35865:2;35854:9;35850:18;35842:26;;35914:9;35908:4;35904:20;35900:1;35889:9;35885:17;35878:47;35942:131;36068:4;35942:131;:::i;:::-;35934:139;;35661:419;;;:::o;36086:::-;36252:4;36290:2;36279:9;36275:18;36267:26;;36339:9;36333:4;36329:20;36325:1;36314:9;36310:17;36303:47;36367:131;36493:4;36367:131;:::i;:::-;36359:139;;36086:419;;;:::o;36511:::-;36677:4;36715:2;36704:9;36700:18;36692:26;;36764:9;36758:4;36754:20;36750:1;36739:9;36735:17;36728:47;36792:131;36918:4;36792:131;:::i;:::-;36784:139;;36511:419;;;:::o;36936:::-;37102:4;37140:2;37129:9;37125:18;37117:26;;37189:9;37183:4;37179:20;37175:1;37164:9;37160:17;37153:47;37217:131;37343:4;37217:131;:::i;:::-;37209:139;;36936:419;;;:::o;37361:::-;37527:4;37565:2;37554:9;37550:18;37542:26;;37614:9;37608:4;37604:20;37600:1;37589:9;37585:17;37578:47;37642:131;37768:4;37642:131;:::i;:::-;37634:139;;37361:419;;;:::o;37786:::-;37952:4;37990:2;37979:9;37975:18;37967:26;;38039:9;38033:4;38029:20;38025:1;38014:9;38010:17;38003:47;38067:131;38193:4;38067:131;:::i;:::-;38059:139;;37786:419;;;:::o;38211:::-;38377:4;38415:2;38404:9;38400:18;38392:26;;38464:9;38458:4;38454:20;38450:1;38439:9;38435:17;38428:47;38492:131;38618:4;38492:131;:::i;:::-;38484:139;;38211:419;;;:::o;38636:::-;38802:4;38840:2;38829:9;38825:18;38817:26;;38889:9;38883:4;38879:20;38875:1;38864:9;38860:17;38853:47;38917:131;39043:4;38917:131;:::i;:::-;38909:139;;38636:419;;;:::o;39061:::-;39227:4;39265:2;39254:9;39250:18;39242:26;;39314:9;39308:4;39304:20;39300:1;39289:9;39285:17;39278:47;39342:131;39468:4;39342:131;:::i;:::-;39334:139;;39061:419;;;:::o;39486:::-;39652:4;39690:2;39679:9;39675:18;39667:26;;39739:9;39733:4;39729:20;39725:1;39714:9;39710:17;39703:47;39767:131;39893:4;39767:131;:::i;:::-;39759:139;;39486:419;;;:::o;39911:::-;40077:4;40115:2;40104:9;40100:18;40092:26;;40164:9;40158:4;40154:20;40150:1;40139:9;40135:17;40128:47;40192:131;40318:4;40192:131;:::i;:::-;40184:139;;39911:419;;;:::o;40336:::-;40502:4;40540:2;40529:9;40525:18;40517:26;;40589:9;40583:4;40579:20;40575:1;40564:9;40560:17;40553:47;40617:131;40743:4;40617:131;:::i;:::-;40609:139;;40336:419;;;:::o;40761:::-;40927:4;40965:2;40954:9;40950:18;40942:26;;41014:9;41008:4;41004:20;41000:1;40989:9;40985:17;40978:47;41042:131;41168:4;41042:131;:::i;:::-;41034:139;;40761:419;;;:::o;41186:::-;41352:4;41390:2;41379:9;41375:18;41367:26;;41439:9;41433:4;41429:20;41425:1;41414:9;41410:17;41403:47;41467:131;41593:4;41467:131;:::i;:::-;41459:139;;41186:419;;;:::o;41611:::-;41777:4;41815:2;41804:9;41800:18;41792:26;;41864:9;41858:4;41854:20;41850:1;41839:9;41835:17;41828:47;41892:131;42018:4;41892:131;:::i;:::-;41884:139;;41611:419;;;:::o;42036:::-;42202:4;42240:2;42229:9;42225:18;42217:26;;42289:9;42283:4;42279:20;42275:1;42264:9;42260:17;42253:47;42317:131;42443:4;42317:131;:::i;:::-;42309:139;;42036:419;;;:::o;42461:222::-;42554:4;42592:2;42581:9;42577:18;42569:26;;42605:71;42673:1;42662:9;42658:17;42649:6;42605:71;:::i;:::-;42461:222;;;;:::o;42689:129::-;42723:6;42750:20;;:::i;:::-;42740:30;;42779:33;42807:4;42799:6;42779:33;:::i;:::-;42689:129;;;:::o;42824:75::-;42857:6;42890:2;42884:9;42874:19;;42824:75;:::o;42905:311::-;42982:4;43072:18;43064:6;43061:30;43058:56;;;43094:18;;:::i;:::-;43058:56;43144:4;43136:6;43132:17;43124:25;;43204:4;43198;43194:15;43186:23;;42905:311;;;:::o;43222:307::-;43283:4;43373:18;43365:6;43362:30;43359:56;;;43395:18;;:::i;:::-;43359:56;43433:29;43455:6;43433:29;:::i;:::-;43425:37;;43517:4;43511;43507:15;43499:23;;43222:307;;;:::o;43535:308::-;43597:4;43687:18;43679:6;43676:30;43673:56;;;43709:18;;:::i;:::-;43673:56;43747:29;43769:6;43747:29;:::i;:::-;43739:37;;43831:4;43825;43821:15;43813:23;;43535:308;;;:::o;43849:132::-;43916:4;43939:3;43931:11;;43969:4;43964:3;43960:14;43952:22;;43849:132;;;:::o;43987:141::-;44036:4;44059:3;44051:11;;44082:3;44079:1;44072:14;44116:4;44113:1;44103:18;44095:26;;43987:141;;;:::o;44134:114::-;44201:6;44235:5;44229:12;44219:22;;44134:114;;;:::o;44254:98::-;44305:6;44339:5;44333:12;44323:22;;44254:98;;;:::o;44358:99::-;44410:6;44444:5;44438:12;44428:22;;44358:99;;;:::o;44463:113::-;44533:4;44565;44560:3;44556:14;44548:22;;44463:113;;;:::o;44582:184::-;44681:11;44715:6;44710:3;44703:19;44755:4;44750:3;44746:14;44731:29;;44582:184;;;;:::o;44772:168::-;44855:11;44889:6;44884:3;44877:19;44929:4;44924:3;44920:14;44905:29;;44772:168;;;;:::o;44946:147::-;45047:11;45084:3;45069:18;;44946:147;;;;:::o;45099:169::-;45183:11;45217:6;45212:3;45205:19;45257:4;45252:3;45248:14;45233:29;;45099:169;;;;:::o;45274:148::-;45376:11;45413:3;45398:18;;45274:148;;;;:::o;45428:305::-;45468:3;45487:20;45505:1;45487:20;:::i;:::-;45482:25;;45521:20;45539:1;45521:20;:::i;:::-;45516:25;;45675:1;45607:66;45603:74;45600:1;45597:81;45594:107;;;45681:18;;:::i;:::-;45594:107;45725:1;45722;45718:9;45711:16;;45428:305;;;;:::o;45739:185::-;45779:1;45796:20;45814:1;45796:20;:::i;:::-;45791:25;;45830:20;45848:1;45830:20;:::i;:::-;45825:25;;45869:1;45859:35;;45874:18;;:::i;:::-;45859:35;45916:1;45913;45909:9;45904:14;;45739:185;;;;:::o;45930:348::-;45970:7;45993:20;46011:1;45993:20;:::i;:::-;45988:25;;46027:20;46045:1;46027:20;:::i;:::-;46022:25;;46215:1;46147:66;46143:74;46140:1;46137:81;46132:1;46125:9;46118:17;46114:105;46111:131;;;46222:18;;:::i;:::-;46111:131;46270:1;46267;46263:9;46252:20;;45930:348;;;;:::o;46284:191::-;46324:4;46344:20;46362:1;46344:20;:::i;:::-;46339:25;;46378:20;46396:1;46378:20;:::i;:::-;46373:25;;46417:1;46414;46411:8;46408:34;;;46422:18;;:::i;:::-;46408:34;46467:1;46464;46460:9;46452:17;;46284:191;;;;:::o;46481:96::-;46518:7;46547:24;46565:5;46547:24;:::i;:::-;46536:35;;46481:96;;;:::o;46583:90::-;46617:7;46660:5;46653:13;46646:21;46635:32;;46583:90;;;:::o;46679:77::-;46716:7;46745:5;46734:16;;46679:77;;;:::o;46762:149::-;46798:7;46838:66;46831:5;46827:78;46816:89;;46762:149;;;:::o;46917:125::-;46983:7;47012:24;47030:5;47012:24;:::i;:::-;47001:35;;46917:125;;;:::o;47048:126::-;47085:7;47125:42;47118:5;47114:54;47103:65;;47048:126;;;:::o;47180:77::-;47217:7;47246:5;47235:16;;47180:77;;;:::o;47263:154::-;47347:6;47342:3;47337;47324:30;47409:1;47400:6;47395:3;47391:16;47384:27;47263:154;;;:::o;47423:307::-;47491:1;47501:113;47515:6;47512:1;47509:13;47501:113;;;47600:1;47595:3;47591:11;47585:18;47581:1;47576:3;47572:11;47565:39;47537:2;47534:1;47530:10;47525:15;;47501:113;;;47632:6;47629:1;47626:13;47623:101;;;47712:1;47703:6;47698:3;47694:16;47687:27;47623:101;47472:258;47423:307;;;:::o;47736:320::-;47780:6;47817:1;47811:4;47807:12;47797:22;;47864:1;47858:4;47854:12;47885:18;47875:81;;47941:4;47933:6;47929:17;47919:27;;47875:81;48003:2;47995:6;47992:14;47972:18;47969:38;47966:84;;;48022:18;;:::i;:::-;47966:84;47787:269;47736:320;;;:::o;48062:281::-;48145:27;48167:4;48145:27;:::i;:::-;48137:6;48133:40;48275:6;48263:10;48260:22;48239:18;48227:10;48224:34;48221:62;48218:88;;;48286:18;;:::i;:::-;48218:88;48326:10;48322:2;48315:22;48105:238;48062:281;;:::o;48349:233::-;48388:3;48411:24;48429:5;48411:24;:::i;:::-;48402:33;;48457:66;48450:5;48447:77;48444:103;;;48527:18;;:::i;:::-;48444:103;48574:1;48567:5;48563:13;48556:20;;48349:233;;;:::o;48588:100::-;48627:7;48656:26;48676:5;48656:26;:::i;:::-;48645:37;;48588:100;;;:::o;48694:79::-;48733:7;48762:5;48751:16;;48694:79;;;:::o;48779:94::-;48818:7;48847:20;48861:5;48847:20;:::i;:::-;48836:31;;48779:94;;;:::o;48879:176::-;48911:1;48928:20;48946:1;48928:20;:::i;:::-;48923:25;;48962:20;48980:1;48962:20;:::i;:::-;48957:25;;49001:1;48991:35;;49006:18;;:::i;:::-;48991:35;49047:1;49044;49040:9;49035:14;;48879:176;;;;:::o;49061:180::-;49109:77;49106:1;49099:88;49206:4;49203:1;49196:15;49230:4;49227:1;49220:15;49247:180;49295:77;49292:1;49285:88;49392:4;49389:1;49382:15;49416:4;49413:1;49406:15;49433:180;49481:77;49478:1;49471:88;49578:4;49575:1;49568:15;49602:4;49599:1;49592:15;49619:180;49667:77;49664:1;49657:88;49764:4;49761:1;49754:15;49788:4;49785:1;49778:15;49805:180;49853:77;49850:1;49843:88;49950:4;49947:1;49940:15;49974:4;49971:1;49964:15;49991:117;50100:1;50097;50090:12;50114:117;50223:1;50220;50213:12;50237:117;50346:1;50343;50336:12;50360:117;50469:1;50466;50459:12;50483:117;50592:1;50589;50582:12;50606:102;50647:6;50698:2;50694:7;50689:2;50682:5;50678:14;50674:28;50664:38;;50606:102;;;:::o;50714:94::-;50747:8;50795:5;50791:2;50787:14;50766:35;;50714:94;;;:::o;50814:237::-;50954:34;50950:1;50942:6;50938:14;50931:58;51023:20;51018:2;51010:6;51006:15;50999:45;50814:237;:::o;51057:225::-;51197:34;51193:1;51185:6;51181:14;51174:58;51266:8;51261:2;51253:6;51249:15;51242:33;51057:225;:::o;51288:178::-;51428:30;51424:1;51416:6;51412:14;51405:54;51288:178;:::o;51472:223::-;51612:34;51608:1;51600:6;51596:14;51589:58;51681:6;51676:2;51668:6;51664:15;51657:31;51472:223;:::o;51701:::-;51841:34;51837:1;51829:6;51825:14;51818:58;51910:6;51905:2;51897:6;51893:15;51886:31;51701:223;:::o;51930:175::-;52070:27;52066:1;52058:6;52054:14;52047:51;51930:175;:::o;52111:169::-;52251:21;52247:1;52239:6;52235:14;52228:45;52111:169;:::o;52286:174::-;52426:26;52422:1;52414:6;52410:14;52403:50;52286:174;:::o;52466:231::-;52606:34;52602:1;52594:6;52590:14;52583:58;52675:14;52670:2;52662:6;52658:15;52651:39;52466:231;:::o;52703:171::-;52843:23;52839:1;52831:6;52827:14;52820:47;52703:171;:::o;52880:168::-;53020:20;53016:1;53008:6;53004:14;52997:44;52880:168;:::o;53054:243::-;53194:34;53190:1;53182:6;53178:14;53171:58;53263:26;53258:2;53250:6;53246:15;53239:51;53054:243;:::o;53303:229::-;53443:34;53439:1;53431:6;53427:14;53420:58;53512:12;53507:2;53499:6;53495:15;53488:37;53303:229;:::o;53538:228::-;53678:34;53674:1;53666:6;53662:14;53655:58;53747:11;53742:2;53734:6;53730:15;53723:36;53538:228;:::o;53772:182::-;53912:34;53908:1;53900:6;53896:14;53889:58;53772:182;:::o;53960:167::-;54100:19;54096:1;54088:6;54084:14;54077:43;53960:167;:::o;54133:231::-;54273:34;54269:1;54261:6;54257:14;54250:58;54342:14;54337:2;54329:6;54325:15;54318:39;54133:231;:::o;54370:155::-;54510:7;54506:1;54498:6;54494:14;54487:31;54370:155;:::o;54531:182::-;54671:34;54667:1;54659:6;54655:14;54648:58;54531:182;:::o;54719:173::-;54859:25;54855:1;54847:6;54843:14;54836:49;54719:173;:::o;54898:228::-;55038:34;55034:1;55026:6;55022:14;55015:58;55107:11;55102:2;55094:6;55090:15;55083:36;54898:228;:::o;55132:234::-;55272:34;55268:1;55260:6;55256:14;55249:58;55341:17;55336:2;55328:6;55324:15;55317:42;55132:234;:::o;55372:220::-;55512:34;55508:1;55500:6;55496:14;55489:58;55581:3;55576:2;55568:6;55564:15;55557:28;55372:220;:::o;55598:166::-;55738:18;55734:1;55726:6;55722:14;55715:42;55598:166;:::o;55770:114::-;;:::o;55890:174::-;56030:26;56026:1;56018:6;56014:14;56007:50;55890:174;:::o;56070:236::-;56210:34;56206:1;56198:6;56194:14;56187:58;56279:19;56274:2;56266:6;56262:15;56255:44;56070:236;:::o;56312:169::-;56452:21;56448:1;56440:6;56436:14;56429:45;56312:169;:::o;56487:223::-;56627:34;56623:1;56615:6;56611:14;56604:58;56696:6;56691:2;56683:6;56679:15;56672:31;56487:223;:::o;56716:177::-;56856:29;56852:1;56844:6;56840:14;56833:53;56716:177;:::o;56899:181::-;57039:33;57035:1;57027:6;57023:14;57016:57;56899:181;:::o;57086:122::-;57159:24;57177:5;57159:24;:::i;:::-;57152:5;57149:35;57139:63;;57198:1;57195;57188:12;57139:63;57086:122;:::o;57214:116::-;57284:21;57299:5;57284:21;:::i;:::-;57277:5;57274:32;57264:60;;57320:1;57317;57310:12;57264:60;57214:116;:::o;57336:122::-;57409:24;57427:5;57409:24;:::i;:::-;57402:5;57399:35;57389:63;;57448:1;57445;57438:12;57389:63;57336:122;:::o;57464:120::-;57536:23;57553:5;57536:23;:::i;:::-;57529:5;57526:34;57516:62;;57574:1;57571;57564:12;57516:62;57464:120;:::o;57590:180::-;57692:53;57739:5;57692:53;:::i;:::-;57685:5;57682:64;57672:92;;57760:1;57757;57750:12;57672:92;57590:180;:::o;57776:122::-;57849:24;57867:5;57849:24;:::i;:::-;57842:5;57839:35;57829:63;;57888:1;57885;57878:12;57829:63;57776:122;:::o

Swarm Source

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