ETH Price: $2,418.82 (-1.20%)
Gas: 1.09 Gwei

Shiba Inu Yacht Club (SHIBAYC)
 

Overview

TokenID

205

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
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:
SHIBAYC

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

// 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/cryptography/MerkleProof.sol


// OpenZeppelin Contracts (last updated v4.6.0) (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.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */
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 Merkle 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 = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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);
}

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

        _afterTokenTransfer(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);

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: SHIBAYC.SOL



pragma solidity ^0.8.0;







contract SHIBAYC is Ownable, ERC721, ReentrancyGuard {
  uint256 public immutable maxPerAddressDuringMint;
  uint256 public immutable amountForOwners;
  uint256 public immutable amountForDev;
  uint256 public immutable amountForPublicSale;
  using Strings for uint256;
  bool setURI = false;
  string customURI;
  address private devAddress = 0xd46c27F1C444673eE8544Fd6991C5AD8C64B7222;

  uint public ownerStartID = 6418;
  uint private devStartID = 6664;
  uint private collectionSize = 6666;
  uint private maxBatchSize = 10;
  uint private _currentSupply = 0;

  uint public communitysupply = 0;

  bool revealed = false;
  string preRevealURI;

  struct SaleConfig {
    uint32 auctionSaleStartTime;
    uint32 auctionSaleStopTime;
    uint32 publicSaleStartTime;
    uint64 presalelistPrice;
    uint64 publicPrice;
  }

  using Counters for Counters.Counter;
  Counters.Counter private _tokenIdCounter;

  SaleConfig public saleConfig;

  mapping(address => bool) public allowlist;
  mapping(uint => string) public uris;

  constructor(
  ) ERC721("Shiba Inu Yacht Club", "SHIBAYC") {
    maxPerAddressDuringMint = 10;
    amountForPublicSale = 6416;
    amountForOwners = 247;
    amountForDev = 3;
  }

  function preSaleMint(uint256 quantity, bytes32[] calldata _merkleProof, bytes32 _merkleRoot) external payable  {
    uint256 _saleStartTime = uint256(saleConfig.auctionSaleStartTime);
    require(
      _saleStartTime != 0 && block.timestamp >= _saleStartTime,
      "Presale has not started yet"
    );

    require(
      block.timestamp < uint256(saleConfig.auctionSaleStopTime),
      "Presale has ended"
    );

    bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
    require(
        MerkleProof.verify(_merkleProof, _merkleRoot, leaf),
        "Not in the presale list"
    );

    require(
      totalSupply() + quantity <= amountForPublicSale,
      "not enough remaining reserved for auction to support desired mint amount"
    );
    require(
      balanceOf(msg.sender) + quantity <= maxPerAddressDuringMint,
      "can not mint this many"
    );
    
    uint256 totalCost = uint256(saleConfig.presalelistPrice)* quantity;
    require(
      msg.value >= totalCost,
      "Insufficient Ether Provided"
    );
    
    for (uint256 i = 0; i < quantity; i++) {
      _tokenIdCounter.increment();
      _safeMint(msg.sender, _tokenIdCounter.current());
      _currentSupply++;
      communitysupply++;
    }
    
  }

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


  function publicSaleMint(uint256 quantity)
    external
    payable
  {
    SaleConfig memory config = saleConfig;
    uint256 publicPrice = uint256(config.publicPrice);
    uint256 publicSaleStartTime = uint256(config.publicSaleStartTime);
    

    require(
      isPublicSaleOn(publicPrice, publicSaleStartTime),
      "public sale has not begun yet"
    );
    require(totalSupply() + quantity <= collectionSize, "reached max supply");
    require(
      balanceOf(msg.sender) + quantity <= maxPerAddressDuringMint,
      "can not mint this many"
    );
    uint256 totalCost = saleConfig.publicPrice * quantity;
    require(
      msg.value >= totalCost,
      "Insufficient Ether Provided"
    );

    for (uint256 i = 0; i < quantity; i++) {
      _tokenIdCounter.increment();
      _safeMint(msg.sender, _tokenIdCounter.current());
      _currentSupply++;
      communitysupply++;
    }
  }


  function isPublicSaleOn(
    uint256 publicPriceWei,
    uint256 publicSaleStartTime
  ) public view returns (bool) {
    return
      publicPriceWei != 0 &&
      block.timestamp >= publicSaleStartTime;
  }

  function endAuctionAndSetupNonAuctionSaleInfo(
    uint64 publicPriceWei,
    uint32 publicSaleStartTime
  ) external onlyOwner {
    saleConfig = SaleConfig(
      0,
      saleConfig.auctionSaleStopTime,
      publicSaleStartTime,
      0,
      publicPriceWei
    );
  }

  function setAuctionSaleTime(uint32 _startTimestamp, uint32 _endTimeStamp, uint64 mintPresalePriceWei) external onlyOwner {
   
    saleConfig = SaleConfig(
      _startTimestamp,
      _endTimeStamp,
      0,
      mintPresalePriceWei,
      0
    );

  }

  function seedAllowlist(address[] memory addresses)
    external
    onlyOwner
  {
    
    for (uint256 i = 0; i < addresses.length; i++) {
      allowlist[addresses[i]] = true;
    }
  }

  // For marketing etc.
  function ownerMint(uint quantity, uint _case , string calldata _uri) external onlyOwner {
    require(
      totalSupply() + quantity <= amountForOwners,
      "too many already minted before owner mint"
    );
    // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
    
    for (uint256 i = 0; i < quantity; i++) {
      
      if(_case == 10){
        setURI = true;
        customURI = _uri;
      } 
      _safeMint(msg.sender, ownerStartID);
      ownerStartID++;
      _currentSupply++;
    }
    
  }

  function devMint(string calldata uri) external  {
    require(
      msg.sender == devAddress,
      "Not Dev"
    );
    setURI = true;
    customURI = uri;
    _safeMint(msg.sender, devStartID);
    devStartID++;
    _currentSupply++;
  }

  // // metadata URI
  string private _baseTokenURI;

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

  function setBaseURI(string calldata baseURI) external onlyOwner {
    _baseTokenURI = baseURI;
  }

  function setPreRevealURI(string calldata _uri) external onlyOwner{
      preRevealURI = _uri;
  }

  function setrevealMode(bool _mode) external onlyOwner{
      revealed = _mode;
  }

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

    if(revealed == false){
        return preRevealURI;
    }
    else{
      if(bytes(uris[tokenId]).length != 0){
        return uris[tokenId];
      }
      else{
        string memory baseURI = _baseURI();
        return
        bytes(baseURI).length > 0
            ? string(abi.encodePacked(string(abi.encodePacked(baseURI, tokenId.toString())), ".json")) 
            : "";
      }
        
    }
  }

  function withdrawMoney() external onlyOwner nonReentrant {
    (bool success, ) = msg.sender.call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }

  function _afterTokenTransfer(
    address from,
    address to,
    uint256 tokenId
  ) internal override {

    if(from == address(0)){
      if(setURI){
        if(bytes(uris[tokenId]).length == 0){
          uris[tokenId] = customURI;
          setURI = false;
        }
      }

    }
  }

  

}

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":"allowlist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountForOwners","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountForPublicSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communitysupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"publicPriceWei","type":"uint64"},{"internalType":"uint32","name":"publicSaleStartTime","type":"uint32"}],"name":"endAuctionAndSetupNonAuctionSaleInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"publicPriceWei","type":"uint256"},{"internalType":"uint256","name":"publicSaleStartTime","type":"uint256"}],"name":"isPublicSaleOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerAddressDuringMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"quantity","type":"uint256"},{"internalType":"uint256","name":"_case","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerStartID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"preSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleConfig","outputs":[{"internalType":"uint32","name":"auctionSaleStartTime","type":"uint32"},{"internalType":"uint32","name":"auctionSaleStopTime","type":"uint32"},{"internalType":"uint32","name":"publicSaleStartTime","type":"uint32"},{"internalType":"uint64","name":"presalelistPrice","type":"uint64"},{"internalType":"uint64","name":"publicPrice","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"seedAllowlist","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":"uint32","name":"_startTimestamp","type":"uint32"},{"internalType":"uint32","name":"_endTimeStamp","type":"uint32"},{"internalType":"uint64","name":"mintPresalePriceWei","type":"uint64"}],"name":"setAuctionSaleTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setPreRevealURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_mode","type":"bool"}],"name":"setrevealMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uris","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6101006040526000600860006101000a81548160ff02191690831515021790555073d46c27f1c444673ee8544fd6991c5ad8c64b7222600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611912600b55611a08600c55611a0a600d55600a600e556000600f5560006010556000601160006101000a81548160ff021916908315150217905550348015620000be57600080fd5b506040518060400160405280601481526020017f536869626120496e7520596163687420436c75620000000000000000000000008152506040518060400160405280600781526020017f53484942415943000000000000000000000000000000000000000000000000008152506200014b6200013f620001b260201b60201c565b620001ba60201b60201c565b8160019080519060200190620001639291906200027e565b5080600290805190602001906200017c9291906200027e565b5050506001600781905550600a6080818152505061191060e0818152505060f760a08181525050600360c0818152505062000393565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200028c906200032e565b90600052602060002090601f016020900481019282620002b05760008555620002fc565b82601f10620002cb57805160ff1916838001178555620002fc565b82800160010185558215620002fc579182015b82811115620002fb578251825591602001919060010190620002de565b5b5090506200030b91906200030f565b5090565b5b808211156200032a57600081600090555060010162000310565b5090565b600060028204905060018216806200034757607f821691505b602082108114156200035e576200035d62000364565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60805160a05160c05160e051615409620003e9600039600081816116e701526122870152600061172101526000818161105b015261145701526000818161158c01528181611a9501526122fc01526154096000f3fe6080604052600436106102255760003560e01c80638bc35c2f11610123578063ac446002116100ab578063dbcad76f1161006f578063dbcad76f146107e8578063e32b6ed414610825578063e33f02b81461084e578063e985e9c51461086a578063f2fde38b146108a757610225565b8063ac44600214610726578063b3ab66b01461073d578063b88d4fde14610759578063c87b56dd14610782578063da5f084b146107bf57610225565b80639dc74e63116100f25780639dc74e631461063f578063a22cb4651461066a578063a34074b814610693578063a7cd52cb146106be578063a9138e8a146106fb57610225565b80638bc35c2f1461058f5780638da5cb5b146105ba57806390aa0b0f146105e557806395d89b411461061457610225565b80632a85db55116101b15780636f07beba116101755780636f07beba146104be57806370a08231146104e7578063715018a61461052457806374a9fe261461053b57806388c206f71461056657610225565b80632a85db55146103dd57806342842e0e1461040657806355f804b31461042f5780635620f578146104585780636352211e1461048157610225565b80631253c546116101f85780631253c546146102f85780631578da3b1461033557806318160ddd1461035e57806321c10add1461038957806323b872dd146103b457610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613aa9565b6108d0565b60405161025e9190614334565b60405180910390f35b34801561027357600080fd5b5061027c6109b2565b604051610289919061434f565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190613b50565b610a44565b6040516102c691906142cd565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f191906139f3565b610ac9565b005b34801561030457600080fd5b5061031f600480360381019061031a9190613b50565b610be1565b60405161032c919061434f565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190613ca5565b610c81565b005b34801561036a57600080fd5b50610373610e29565b60405161038091906146f1565b60405180910390f35b34801561039557600080fd5b5061039e610e33565b6040516103ab91906146f1565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d691906138dd565b610e39565b005b3480156103e957600080fd5b5061040460048036038101906103ff9190613b03565b610e99565b005b34801561041257600080fd5b5061042d600480360381019061042891906138dd565b610f2b565b005b34801561043b57600080fd5b5061045660048036038101906104519190613b03565b610f4b565b005b34801561046457600080fd5b5061047f600480360381019061047a9190613c31565b610fdd565b005b34801561048d57600080fd5b506104a860048036038101906104a39190613b50565b611166565b6040516104b591906142cd565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190613b03565b611218565b005b3480156104f357600080fd5b5061050e60048036038101906105099190613870565b611315565b60405161051b91906146f1565b60405180910390f35b34801561053057600080fd5b506105396113cd565b005b34801561054757600080fd5b50610550611455565b60405161055d91906146f1565b60405180910390f35b34801561057257600080fd5b5061058d60048036038101906105889190613a33565b611479565b005b34801561059b57600080fd5b506105a461158a565b6040516105b191906146f1565b60405180910390f35b3480156105c657600080fd5b506105cf6115ae565b6040516105dc91906142cd565b60405180910390f35b3480156105f157600080fd5b506105fa6115d7565b60405161060b95949392919061470c565b60405180910390f35b34801561062057600080fd5b50610629611653565b604051610636919061434f565b60405180910390f35b34801561064b57600080fd5b506106546116e5565b60405161066191906146f1565b60405180910390f35b34801561067657600080fd5b50610691600480360381019061068c91906139b3565b611709565b005b34801561069f57600080fd5b506106a861171f565b6040516106b591906146f1565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e09190613870565b611743565b6040516106f29190614334565b60405180910390f35b34801561070757600080fd5b50610710611763565b60405161071d91906146f1565b60405180910390f35b34801561073257600080fd5b5061073b611769565b005b61075760048036038101906107529190613b50565b6118ea565b005b34801561076557600080fd5b50610780600480360381019061077b9190613930565b611bf2565b005b34801561078e57600080fd5b506107a960048036038101906107a49190613b50565b611c54565b6040516107b6919061434f565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190613cf8565b611e93565b005b3480156107f457600080fd5b5061080f600480360381019061080a9190613bf1565b61204f565b60405161081c9190614334565b60405180910390f35b34801561083157600080fd5b5061084c60048036038101906108479190613a7c565b612069565b005b61086860048036038101906108639190613b7d565b612102565b005b34801561087657600080fd5b50610891600480360381019061088c919061389d565b61245b565b60405161089e9190614334565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c99190613870565b6124ef565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109ab57506109aa826125e7565b5b9050919050565b6060600180546109c190614a28565b80601f01602080910402602001604051908101604052809291908181526020018280546109ed90614a28565b8015610a3a5780601f10610a0f57610100808354040283529160200191610a3a565b820191906000526020600020905b815481529060010190602001808311610a1d57829003601f168201915b5050505050905090565b6000610a4f82612651565b610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8590614571565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ad482611166565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3c906145f1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b646126bd565b73ffffffffffffffffffffffffffffffffffffffff161480610b935750610b9281610b8d6126bd565b61245b565b5b610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990614491565b60405180910390fd5b610bdc83836126c5565b505050565b60166020528060005260406000206000915090508054610c0090614a28565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2c90614a28565b8015610c795780601f10610c4e57610100808354040283529160200191610c79565b820191906000526020600020905b815481529060010190602001808311610c5c57829003601f168201915b505050505081565b610c896126bd565b73ffffffffffffffffffffffffffffffffffffffff16610ca76115ae565b73ffffffffffffffffffffffffffffffffffffffff1614610cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf4906145b1565b60405180910390fd5b6040518060a001604052808463ffffffff1681526020018363ffffffff168152602001600063ffffffff1681526020018267ffffffffffffffff168152602001600067ffffffffffffffff16815250601460008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505050565b6000600f54905090565b60105481565b610e4a610e446126bd565b8261277e565b610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8090614651565b60405180910390fd5b610e9483838361285c565b505050565b610ea16126bd565b73ffffffffffffffffffffffffffffffffffffffff16610ebf6115ae565b73ffffffffffffffffffffffffffffffffffffffff1614610f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0c906145b1565b60405180910390fd5b818160129190610f269291906134de565b505050565b610f4683838360405180602001604052806000815250611bf2565b505050565b610f536126bd565b73ffffffffffffffffffffffffffffffffffffffff16610f716115ae565b73ffffffffffffffffffffffffffffffffffffffff1614610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe906145b1565b60405180910390fd5b818160179190610fd89291906134de565b505050565b610fe56126bd565b73ffffffffffffffffffffffffffffffffffffffff166110036115ae565b73ffffffffffffffffffffffffffffffffffffffff1614611059576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611050906145b1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000084611083610e29565b61108d919061482f565b11156110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590614411565b60405180910390fd5b60005b8481101561115f57600a841415611110576001600860006101000a81548160ff02191690831515021790555082826009919061110e9291906134de565b505b61111c33600b54612ac3565b600b600081548092919061112f90614a8b565b9190505550600f600081548092919061114790614a8b565b9190505550808061115790614a8b565b9150506110d1565b5050505050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561120f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611206906144d1565b60405180910390fd5b80915050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f906144f1565b60405180910390fd5b6001600860006101000a81548160ff0219169083151502179055508181600991906112d49291906134de565b506112e133600c54612ac3565b600c60008154809291906112f490614a8b565b9190505550600f600081548092919061130c90614a8b565b91905055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137d906144b1565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113d56126bd565b73ffffffffffffffffffffffffffffffffffffffff166113f36115ae565b73ffffffffffffffffffffffffffffffffffffffff1614611449576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611440906145b1565b60405180910390fd5b6114536000612ae1565b565b7f000000000000000000000000000000000000000000000000000000000000000081565b6114816126bd565b73ffffffffffffffffffffffffffffffffffffffff1661149f6115ae565b73ffffffffffffffffffffffffffffffffffffffff16146114f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ec906145b1565b60405180910390fd5b60005b81518110156115865760016015600084848151811061151a57611519614bb6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061157e90614a8b565b9150506114f8565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60148060000160009054906101000a900463ffffffff16908060000160049054906101000a900463ffffffff16908060000160089054906101000a900463ffffffff169080600001600c9054906101000a900467ffffffffffffffff16908060000160149054906101000a900467ffffffffffffffff16905085565b60606002805461166290614a28565b80601f016020809104026020016040519081016040528092919081815260200182805461168e90614a28565b80156116db5780601f106116b0576101008083540402835291602001916116db565b820191906000526020600020905b8154815290600101906020018083116116be57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b61171b6117146126bd565b8383612ba5565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60156020528060005260406000206000915054906101000a900460ff1681565b600b5481565b6117716126bd565b73ffffffffffffffffffffffffffffffffffffffff1661178f6115ae565b73ffffffffffffffffffffffffffffffffffffffff16146117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc906145b1565b60405180910390fd5b6002600754141561182b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611822906146d1565b60405180910390fd5b600260078190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611859906142b8565b60006040518083038185875af1925050503d8060008114611896576040519150601f19603f3d011682016040523d82523d6000602084013e61189b565b606091505b50509050806118df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d690614631565b60405180910390fd5b506001600781905550565b600060146040518060a00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201600c9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090506000816080015167ffffffffffffffff1690506000826040015163ffffffff1690506119fd828261204f565b611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3390614611565b60405180910390fd5b600d5484611a48610e29565b611a52919061482f565b1115611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a90614511565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000084611abe33611315565b611ac8919061482f565b1115611b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0090614691565b60405180910390fd5b600084601460000160149054906101000a900467ffffffffffffffff1667ffffffffffffffff16611b3a91906148b6565b905080341015611b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7690614671565b60405180910390fd5b60005b85811015611bea57611b946013612d12565b611ba733611ba26013612d28565b612ac3565b600f6000815480929190611bba90614a8b565b919050555060106000815480929190611bd290614a8b565b91905055508080611be290614a8b565b915050611b82565b505050505050565b611c03611bfd6126bd565b8361277e565b611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3990614651565b60405180910390fd5b611c4e84848484612d36565b50505050565b6060611c5f82612651565b611c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c95906145d1565b60405180910390fd5b60001515601160009054906101000a900460ff1615151415611d4c5760128054611cc790614a28565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf390614a28565b8015611d405780601f10611d1557610100808354040283529160200191611d40565b820191906000526020600020905b815481529060010190602001808311611d2357829003601f168201915b50505050509050611e8e565b6000601660008481526020019081526020016000208054611d6c90614a28565b905014611e1657601660008381526020019081526020016000208054611d9190614a28565b80601f0160208091040260200160405190810160405280929190818152602001828054611dbd90614a28565b8015611e0a5780601f10611ddf57610100808354040283529160200191611e0a565b820191906000526020600020905b815481529060010190602001808311611ded57829003601f168201915b50505050509050611e8e565b6000611e20612d92565b90506000815111611e405760405180602001604052806000815250611e8a565b80611e4a84612e24565b604051602001611e5b929190614272565b604051602081830303815290604052604051602001611e7a9190614296565b6040516020818303038152906040525b9150505b919050565b611e9b6126bd565b73ffffffffffffffffffffffffffffffffffffffff16611eb96115ae565b73ffffffffffffffffffffffffffffffffffffffff1614611f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f06906145b1565b60405180910390fd5b6040518060a00160405280600063ffffffff168152602001601460000160049054906101000a900463ffffffff1663ffffffff1681526020018263ffffffff168152602001600067ffffffffffffffff1681526020018367ffffffffffffffff16815250601460008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505050565b60008083141580156120615750814210155b905092915050565b6120716126bd565b73ffffffffffffffffffffffffffffffffffffffff1661208f6115ae565b73ffffffffffffffffffffffffffffffffffffffff16146120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc906145b1565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6000601460000160009054906101000a900463ffffffff1663ffffffff169050600081141580156121335750804210155b612172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216990614591565b60405180910390fd5b601460000160049054906101000a900463ffffffff1663ffffffff1642106121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c690614371565b60405180910390fd5b6000336040516020016121e29190614257565b604051602081830303815290604052805190602001209050612246858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508483612f85565b612285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227c90614551565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000866122af610e29565b6122b9919061482f565b11156122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f1906146b1565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008661232533611315565b61232f919061482f565b1115612370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236790614691565b60405180910390fd5b6000866014600001600c9054906101000a900467ffffffffffffffff1667ffffffffffffffff166123a191906148b6565b9050803410156123e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dd90614671565b60405180910390fd5b60005b87811015612451576123fb6013612d12565b61240e336124096013612d28565b612ac3565b600f600081548092919061242190614a8b565b91905055506010600081548092919061243990614a8b565b9190505550808061244990614a8b565b9150506123e9565b5050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124f76126bd565b73ffffffffffffffffffffffffffffffffffffffff166125156115ae565b73ffffffffffffffffffffffffffffffffffffffff161461256b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612562906145b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d2906143b1565b60405180910390fd5b6125e481612ae1565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661273883611166565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061278982612651565b6127c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bf90614471565b60405180910390fd5b60006127d383611166565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806128155750612814818561245b565b5b8061285357508373ffffffffffffffffffffffffffffffffffffffff1661283b84610a44565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661287c82611166565b73ffffffffffffffffffffffffffffffffffffffff16146128d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c9906143d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293990614431565b60405180910390fd5b61294d838383612f9c565b6129586000826126c5565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129a89190614910565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129ff919061482f565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612abe838383612fa1565b505050565b612add828260405180602001604052806000815250613063565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b90614451565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612d059190614334565b60405180910390a3505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b612d4184848461285c565b612d4d848484846130be565b612d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8390614391565b60405180910390fd5b50505050565b606060178054612da190614a28565b80601f0160208091040260200160405190810160405280929190818152602001828054612dcd90614a28565b8015612e1a5780601f10612def57610100808354040283529160200191612e1a565b820191906000526020600020905b815481529060010190602001808311612dfd57829003601f168201915b5050505050905090565b60606000821415612e6c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f80565b600082905060005b60008214612e9e578080612e8790614a8b565b915050600a82612e979190614885565b9150612e74565b60008167ffffffffffffffff811115612eba57612eb9614be5565b5b6040519080825280601f01601f191660200182016040528015612eec5781602001600182028036833780820191505090505b5090505b60008514612f7957600182612f059190614910565b9150600a85612f149190614af8565b6030612f20919061482f565b60f81b818381518110612f3657612f35614bb6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f729190614885565b9450612ef0565b8093505050505b919050565b600082612f928584613255565b1490509392505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561305e57600860009054906101000a900460ff161561305d57600060166000838152602001908152602001600020805461300b90614a28565b9050141561305c5760096016600083815260200190815260200160002090805461303490614a28565b61303f929190613564565b506000600860006101000a81548160ff0219169083151502179055505b5b5b505050565b61306d83836132ca565b61307a60008484846130be565b6130b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b090614391565b60405180910390fd5b505050565b60006130df8473ffffffffffffffffffffffffffffffffffffffff166134a4565b15613248578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131086126bd565b8786866040518563ffffffff1660e01b815260040161312a94939291906142e8565b602060405180830381600087803b15801561314457600080fd5b505af192505050801561317557506040513d601f19601f820116820180604052508101906131729190613ad6565b60015b6131f8573d80600081146131a5576040519150601f19603f3d011682016040523d82523d6000602084013e6131aa565b606091505b506000815114156131f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e790614391565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061324d565b600190505b949350505050565b60008082905060005b84518110156132bf57600085828151811061327c5761327b614bb6565b5b6020026020010151905080831161329e5761329783826134c7565b92506132ab565b6132a881846134c7565b92505b5080806132b790614a8b565b91505061325e565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561333a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333190614531565b60405180910390fd5b61334381612651565b15613383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337a906143f1565b60405180910390fd5b61338f60008383612f9c565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133df919061482f565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134a060008383612fa1565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b8280546134ea90614a28565b90600052602060002090601f01602090048101928261350c5760008555613553565b82601f1061352557803560ff1916838001178555613553565b82800160010185558215613553579182015b82811115613552578235825591602001919060010190613537565b5b50905061356091906135f1565b5090565b82805461357090614a28565b90600052602060002090601f01602090048101928261359257600085556135e0565b82601f106135a357805485556135e0565b828001600101855582156135e057600052602060002091601f016020900482015b828111156135df5782548255916001019190600101906135c4565b5b5090506135ed91906135f1565b5090565b5b8082111561360a5760008160009055506001016135f2565b5090565b600061362161361c84614784565b61475f565b9050808382526020820190508285602086028201111561364457613643614c1e565b5b60005b85811015613674578161365a88826136c0565b845260208401935060208301925050600181019050613647565b5050509392505050565b600061369161368c846147b0565b61475f565b9050828152602081018484840111156136ad576136ac614c23565b5b6136b88482856149e6565b509392505050565b6000813590506136cf81615332565b92915050565b600082601f8301126136ea576136e9614c19565b5b81356136fa84826020860161360e565b91505092915050565b60008083601f84011261371957613718614c19565b5b8235905067ffffffffffffffff81111561373657613735614c14565b5b60208301915083602082028301111561375257613751614c1e565b5b9250929050565b60008135905061376881615349565b92915050565b60008135905061377d81615360565b92915050565b60008135905061379281615377565b92915050565b6000815190506137a781615377565b92915050565b600082601f8301126137c2576137c1614c19565b5b81356137d284826020860161367e565b91505092915050565b60008083601f8401126137f1576137f0614c19565b5b8235905067ffffffffffffffff81111561380e5761380d614c14565b5b60208301915083600182028301111561382a57613829614c1e565b5b9250929050565b6000813590506138408161538e565b92915050565b600081359050613855816153a5565b92915050565b60008135905061386a816153bc565b92915050565b60006020828403121561388657613885614c2d565b5b6000613894848285016136c0565b91505092915050565b600080604083850312156138b4576138b3614c2d565b5b60006138c2858286016136c0565b92505060206138d3858286016136c0565b9150509250929050565b6000806000606084860312156138f6576138f5614c2d565b5b6000613904868287016136c0565b9350506020613915868287016136c0565b925050604061392686828701613831565b9150509250925092565b6000806000806080858703121561394a57613949614c2d565b5b6000613958878288016136c0565b9450506020613969878288016136c0565b935050604061397a87828801613831565b925050606085013567ffffffffffffffff81111561399b5761399a614c28565b5b6139a7878288016137ad565b91505092959194509250565b600080604083850312156139ca576139c9614c2d565b5b60006139d8858286016136c0565b92505060206139e985828601613759565b9150509250929050565b60008060408385031215613a0a57613a09614c2d565b5b6000613a18858286016136c0565b9250506020613a2985828601613831565b9150509250929050565b600060208284031215613a4957613a48614c2d565b5b600082013567ffffffffffffffff811115613a6757613a66614c28565b5b613a73848285016136d5565b91505092915050565b600060208284031215613a9257613a91614c2d565b5b6000613aa084828501613759565b91505092915050565b600060208284031215613abf57613abe614c2d565b5b6000613acd84828501613783565b91505092915050565b600060208284031215613aec57613aeb614c2d565b5b6000613afa84828501613798565b91505092915050565b60008060208385031215613b1a57613b19614c2d565b5b600083013567ffffffffffffffff811115613b3857613b37614c28565b5b613b44858286016137db565b92509250509250929050565b600060208284031215613b6657613b65614c2d565b5b6000613b7484828501613831565b91505092915050565b60008060008060608587031215613b9757613b96614c2d565b5b6000613ba587828801613831565b945050602085013567ffffffffffffffff811115613bc657613bc5614c28565b5b613bd287828801613703565b93509350506040613be58782880161376e565b91505092959194509250565b60008060408385031215613c0857613c07614c2d565b5b6000613c1685828601613831565b9250506020613c2785828601613831565b9150509250929050565b60008060008060608587031215613c4b57613c4a614c2d565b5b6000613c5987828801613831565b9450506020613c6a87828801613831565b935050604085013567ffffffffffffffff811115613c8b57613c8a614c28565b5b613c97878288016137db565b925092505092959194509250565b600080600060608486031215613cbe57613cbd614c2d565b5b6000613ccc86828701613846565b9350506020613cdd86828701613846565b9250506040613cee8682870161385b565b9150509250925092565b60008060408385031215613d0f57613d0e614c2d565b5b6000613d1d8582860161385b565b9250506020613d2e85828601613846565b9150509250929050565b613d4181614944565b82525050565b613d58613d5382614944565b614ad4565b82525050565b613d6781614956565b82525050565b6000613d78826147e1565b613d8281856147f7565b9350613d928185602086016149f5565b613d9b81614c32565b840191505092915050565b6000613db1826147ec565b613dbb8185614813565b9350613dcb8185602086016149f5565b613dd481614c32565b840191505092915050565b6000613dea826147ec565b613df48185614824565b9350613e048185602086016149f5565b80840191505092915050565b6000613e1d601183614813565b9150613e2882614c50565b602082019050919050565b6000613e40603283614813565b9150613e4b82614c79565b604082019050919050565b6000613e63602683614813565b9150613e6e82614cc8565b604082019050919050565b6000613e86602583614813565b9150613e9182614d17565b604082019050919050565b6000613ea9601c83614813565b9150613eb482614d66565b602082019050919050565b6000613ecc602983614813565b9150613ed782614d8f565b604082019050919050565b6000613eef602483614813565b9150613efa82614dde565b604082019050919050565b6000613f12601983614813565b9150613f1d82614e2d565b602082019050919050565b6000613f35602c83614813565b9150613f4082614e56565b604082019050919050565b6000613f58603883614813565b9150613f6382614ea5565b604082019050919050565b6000613f7b602a83614813565b9150613f8682614ef4565b604082019050919050565b6000613f9e602983614813565b9150613fa982614f43565b604082019050919050565b6000613fc1600783614813565b9150613fcc82614f92565b602082019050919050565b6000613fe4601283614813565b9150613fef82614fbb565b602082019050919050565b6000614007602083614813565b915061401282614fe4565b602082019050919050565b600061402a601783614813565b91506140358261500d565b602082019050919050565b600061404d602c83614813565b915061405882615036565b604082019050919050565b6000614070600583614824565b915061407b82615085565b600582019050919050565b6000614093601b83614813565b915061409e826150ae565b602082019050919050565b60006140b6602083614813565b91506140c1826150d7565b602082019050919050565b60006140d9602f83614813565b91506140e482615100565b604082019050919050565b60006140fc602183614813565b91506141078261514f565b604082019050919050565b600061411f601d83614813565b915061412a8261519e565b602082019050919050565b6000614142600083614808565b915061414d826151c7565b600082019050919050565b6000614165601083614813565b9150614170826151ca565b602082019050919050565b6000614188603183614813565b9150614193826151f3565b604082019050919050565b60006141ab601b83614813565b91506141b682615242565b602082019050919050565b60006141ce601683614813565b91506141d98261526b565b602082019050919050565b60006141f1604883614813565b91506141fc82615294565b606082019050919050565b6000614214601f83614813565b915061421f82615309565b602082019050919050565b614233816149b8565b82525050565b614242816149c2565b82525050565b614251816149d2565b82525050565b60006142638284613d47565b60148201915081905092915050565b600061427e8285613ddf565b915061428a8284613ddf565b91508190509392505050565b60006142a28284613ddf565b91506142ad82614063565b915081905092915050565b60006142c382614135565b9150819050919050565b60006020820190506142e26000830184613d38565b92915050565b60006080820190506142fd6000830187613d38565b61430a6020830186613d38565b614317604083018561422a565b81810360608301526143298184613d6d565b905095945050505050565b60006020820190506143496000830184613d5e565b92915050565b600060208201905081810360008301526143698184613da6565b905092915050565b6000602082019050818103600083015261438a81613e10565b9050919050565b600060208201905081810360008301526143aa81613e33565b9050919050565b600060208201905081810360008301526143ca81613e56565b9050919050565b600060208201905081810360008301526143ea81613e79565b9050919050565b6000602082019050818103600083015261440a81613e9c565b9050919050565b6000602082019050818103600083015261442a81613ebf565b9050919050565b6000602082019050818103600083015261444a81613ee2565b9050919050565b6000602082019050818103600083015261446a81613f05565b9050919050565b6000602082019050818103600083015261448a81613f28565b9050919050565b600060208201905081810360008301526144aa81613f4b565b9050919050565b600060208201905081810360008301526144ca81613f6e565b9050919050565b600060208201905081810360008301526144ea81613f91565b9050919050565b6000602082019050818103600083015261450a81613fb4565b9050919050565b6000602082019050818103600083015261452a81613fd7565b9050919050565b6000602082019050818103600083015261454a81613ffa565b9050919050565b6000602082019050818103600083015261456a8161401d565b9050919050565b6000602082019050818103600083015261458a81614040565b9050919050565b600060208201905081810360008301526145aa81614086565b9050919050565b600060208201905081810360008301526145ca816140a9565b9050919050565b600060208201905081810360008301526145ea816140cc565b9050919050565b6000602082019050818103600083015261460a816140ef565b9050919050565b6000602082019050818103600083015261462a81614112565b9050919050565b6000602082019050818103600083015261464a81614158565b9050919050565b6000602082019050818103600083015261466a8161417b565b9050919050565b6000602082019050818103600083015261468a8161419e565b9050919050565b600060208201905081810360008301526146aa816141c1565b9050919050565b600060208201905081810360008301526146ca816141e4565b9050919050565b600060208201905081810360008301526146ea81614207565b9050919050565b6000602082019050614706600083018461422a565b92915050565b600060a0820190506147216000830188614239565b61472e6020830187614239565b61473b6040830186614239565b6147486060830185614248565b6147556080830184614248565b9695505050505050565b600061476961477a565b90506147758282614a5a565b919050565b6000604051905090565b600067ffffffffffffffff82111561479f5761479e614be5565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147cb576147ca614be5565b5b6147d482614c32565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061483a826149b8565b9150614845836149b8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561487a57614879614b29565b5b828201905092915050565b6000614890826149b8565b915061489b836149b8565b9250826148ab576148aa614b58565b5b828204905092915050565b60006148c1826149b8565b91506148cc836149b8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561490557614904614b29565b5b828202905092915050565b600061491b826149b8565b9150614926836149b8565b92508282101561493957614938614b29565b5b828203905092915050565b600061494f82614998565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614a135780820151818401526020810190506149f8565b83811115614a22576000848401525b50505050565b60006002820490506001821680614a4057607f821691505b60208210811415614a5457614a53614b87565b5b50919050565b614a6382614c32565b810181811067ffffffffffffffff82111715614a8257614a81614be5565b5b80604052505050565b6000614a96826149b8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ac957614ac8614b29565b5b600182019050919050565b6000614adf82614ae6565b9050919050565b6000614af182614c43565b9050919050565b6000614b03826149b8565b9150614b0e836149b8565b925082614b1e57614b1d614b58565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f50726573616c652068617320656e646564000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206f60008201527f776e6572206d696e740000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f742044657600000000000000000000000000000000000000000000000000600082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4e6f7420696e207468652070726573616c65206c697374000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f50726573616c6520686173206e6f742073746172746564207965740000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742045746865722050726f76696465640000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f6e6f7420656e6f7567682072656d61696e696e6720726573657276656420666f60008201527f722061756374696f6e20746f20737570706f72742064657369726564206d696e60208201527f7420616d6f756e74000000000000000000000000000000000000000000000000604082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61533b81614944565b811461534657600080fd5b50565b61535281614956565b811461535d57600080fd5b50565b61536981614962565b811461537457600080fd5b50565b6153808161496c565b811461538b57600080fd5b50565b615397816149b8565b81146153a257600080fd5b50565b6153ae816149c2565b81146153b957600080fd5b50565b6153c5816149d2565b81146153d057600080fd5b5056fea2646970667358221220677cd99ccbb5eb321c7755779c62cd471dbdcf2b6e36188e2d4860fab1e87ef864736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102255760003560e01c80638bc35c2f11610123578063ac446002116100ab578063dbcad76f1161006f578063dbcad76f146107e8578063e32b6ed414610825578063e33f02b81461084e578063e985e9c51461086a578063f2fde38b146108a757610225565b8063ac44600214610726578063b3ab66b01461073d578063b88d4fde14610759578063c87b56dd14610782578063da5f084b146107bf57610225565b80639dc74e63116100f25780639dc74e631461063f578063a22cb4651461066a578063a34074b814610693578063a7cd52cb146106be578063a9138e8a146106fb57610225565b80638bc35c2f1461058f5780638da5cb5b146105ba57806390aa0b0f146105e557806395d89b411461061457610225565b80632a85db55116101b15780636f07beba116101755780636f07beba146104be57806370a08231146104e7578063715018a61461052457806374a9fe261461053b57806388c206f71461056657610225565b80632a85db55146103dd57806342842e0e1461040657806355f804b31461042f5780635620f578146104585780636352211e1461048157610225565b80631253c546116101f85780631253c546146102f85780631578da3b1461033557806318160ddd1461035e57806321c10add1461038957806323b872dd146103b457610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063095ea7b3146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190613aa9565b6108d0565b60405161025e9190614334565b60405180910390f35b34801561027357600080fd5b5061027c6109b2565b604051610289919061434f565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190613b50565b610a44565b6040516102c691906142cd565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f191906139f3565b610ac9565b005b34801561030457600080fd5b5061031f600480360381019061031a9190613b50565b610be1565b60405161032c919061434f565b60405180910390f35b34801561034157600080fd5b5061035c60048036038101906103579190613ca5565b610c81565b005b34801561036a57600080fd5b50610373610e29565b60405161038091906146f1565b60405180910390f35b34801561039557600080fd5b5061039e610e33565b6040516103ab91906146f1565b60405180910390f35b3480156103c057600080fd5b506103db60048036038101906103d691906138dd565b610e39565b005b3480156103e957600080fd5b5061040460048036038101906103ff9190613b03565b610e99565b005b34801561041257600080fd5b5061042d600480360381019061042891906138dd565b610f2b565b005b34801561043b57600080fd5b5061045660048036038101906104519190613b03565b610f4b565b005b34801561046457600080fd5b5061047f600480360381019061047a9190613c31565b610fdd565b005b34801561048d57600080fd5b506104a860048036038101906104a39190613b50565b611166565b6040516104b591906142cd565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190613b03565b611218565b005b3480156104f357600080fd5b5061050e60048036038101906105099190613870565b611315565b60405161051b91906146f1565b60405180910390f35b34801561053057600080fd5b506105396113cd565b005b34801561054757600080fd5b50610550611455565b60405161055d91906146f1565b60405180910390f35b34801561057257600080fd5b5061058d60048036038101906105889190613a33565b611479565b005b34801561059b57600080fd5b506105a461158a565b6040516105b191906146f1565b60405180910390f35b3480156105c657600080fd5b506105cf6115ae565b6040516105dc91906142cd565b60405180910390f35b3480156105f157600080fd5b506105fa6115d7565b60405161060b95949392919061470c565b60405180910390f35b34801561062057600080fd5b50610629611653565b604051610636919061434f565b60405180910390f35b34801561064b57600080fd5b506106546116e5565b60405161066191906146f1565b60405180910390f35b34801561067657600080fd5b50610691600480360381019061068c91906139b3565b611709565b005b34801561069f57600080fd5b506106a861171f565b6040516106b591906146f1565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e09190613870565b611743565b6040516106f29190614334565b60405180910390f35b34801561070757600080fd5b50610710611763565b60405161071d91906146f1565b60405180910390f35b34801561073257600080fd5b5061073b611769565b005b61075760048036038101906107529190613b50565b6118ea565b005b34801561076557600080fd5b50610780600480360381019061077b9190613930565b611bf2565b005b34801561078e57600080fd5b506107a960048036038101906107a49190613b50565b611c54565b6040516107b6919061434f565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190613cf8565b611e93565b005b3480156107f457600080fd5b5061080f600480360381019061080a9190613bf1565b61204f565b60405161081c9190614334565b60405180910390f35b34801561083157600080fd5b5061084c60048036038101906108479190613a7c565b612069565b005b61086860048036038101906108639190613b7d565b612102565b005b34801561087657600080fd5b50610891600480360381019061088c919061389d565b61245b565b60405161089e9190614334565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c99190613870565b6124ef565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109ab57506109aa826125e7565b5b9050919050565b6060600180546109c190614a28565b80601f01602080910402602001604051908101604052809291908181526020018280546109ed90614a28565b8015610a3a5780601f10610a0f57610100808354040283529160200191610a3a565b820191906000526020600020905b815481529060010190602001808311610a1d57829003601f168201915b5050505050905090565b6000610a4f82612651565b610a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8590614571565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ad482611166565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3c906145f1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b646126bd565b73ffffffffffffffffffffffffffffffffffffffff161480610b935750610b9281610b8d6126bd565b61245b565b5b610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc990614491565b60405180910390fd5b610bdc83836126c5565b505050565b60166020528060005260406000206000915090508054610c0090614a28565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2c90614a28565b8015610c795780601f10610c4e57610100808354040283529160200191610c79565b820191906000526020600020905b815481529060010190602001808311610c5c57829003601f168201915b505050505081565b610c896126bd565b73ffffffffffffffffffffffffffffffffffffffff16610ca76115ae565b73ffffffffffffffffffffffffffffffffffffffff1614610cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf4906145b1565b60405180910390fd5b6040518060a001604052808463ffffffff1681526020018363ffffffff168152602001600063ffffffff1681526020018267ffffffffffffffff168152602001600067ffffffffffffffff16815250601460008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550905050505050565b6000600f54905090565b60105481565b610e4a610e446126bd565b8261277e565b610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8090614651565b60405180910390fd5b610e9483838361285c565b505050565b610ea16126bd565b73ffffffffffffffffffffffffffffffffffffffff16610ebf6115ae565b73ffffffffffffffffffffffffffffffffffffffff1614610f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0c906145b1565b60405180910390fd5b818160129190610f269291906134de565b505050565b610f4683838360405180602001604052806000815250611bf2565b505050565b610f536126bd565b73ffffffffffffffffffffffffffffffffffffffff16610f716115ae565b73ffffffffffffffffffffffffffffffffffffffff1614610fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbe906145b1565b60405180910390fd5b818160179190610fd89291906134de565b505050565b610fe56126bd565b73ffffffffffffffffffffffffffffffffffffffff166110036115ae565b73ffffffffffffffffffffffffffffffffffffffff1614611059576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611050906145b1565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000f784611083610e29565b61108d919061482f565b11156110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590614411565b60405180910390fd5b60005b8481101561115f57600a841415611110576001600860006101000a81548160ff02191690831515021790555082826009919061110e9291906134de565b505b61111c33600b54612ac3565b600b600081548092919061112f90614a8b565b9190505550600f600081548092919061114790614a8b565b9190505550808061115790614a8b565b9150506110d1565b5050505050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561120f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611206906144d1565b60405180910390fd5b80915050919050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129f906144f1565b60405180910390fd5b6001600860006101000a81548160ff0219169083151502179055508181600991906112d49291906134de565b506112e133600c54612ac3565b600c60008154809291906112f490614a8b565b9190505550600f600081548092919061130c90614a8b565b91905055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137d906144b1565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113d56126bd565b73ffffffffffffffffffffffffffffffffffffffff166113f36115ae565b73ffffffffffffffffffffffffffffffffffffffff1614611449576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611440906145b1565b60405180910390fd5b6114536000612ae1565b565b7f00000000000000000000000000000000000000000000000000000000000000f781565b6114816126bd565b73ffffffffffffffffffffffffffffffffffffffff1661149f6115ae565b73ffffffffffffffffffffffffffffffffffffffff16146114f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ec906145b1565b60405180910390fd5b60005b81518110156115865760016015600084848151811061151a57611519614bb6565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061157e90614a8b565b9150506114f8565b5050565b7f000000000000000000000000000000000000000000000000000000000000000a81565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60148060000160009054906101000a900463ffffffff16908060000160049054906101000a900463ffffffff16908060000160089054906101000a900463ffffffff169080600001600c9054906101000a900467ffffffffffffffff16908060000160149054906101000a900467ffffffffffffffff16905085565b60606002805461166290614a28565b80601f016020809104026020016040519081016040528092919081815260200182805461168e90614a28565b80156116db5780601f106116b0576101008083540402835291602001916116db565b820191906000526020600020905b8154815290600101906020018083116116be57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000191081565b61171b6117146126bd565b8383612ba5565b5050565b7f000000000000000000000000000000000000000000000000000000000000000381565b60156020528060005260406000206000915054906101000a900460ff1681565b600b5481565b6117716126bd565b73ffffffffffffffffffffffffffffffffffffffff1661178f6115ae565b73ffffffffffffffffffffffffffffffffffffffff16146117e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117dc906145b1565b60405180910390fd5b6002600754141561182b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611822906146d1565b60405180910390fd5b600260078190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051611859906142b8565b60006040518083038185875af1925050503d8060008114611896576040519150601f19603f3d011682016040523d82523d6000602084013e61189b565b606091505b50509050806118df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d690614631565b60405180910390fd5b506001600781905550565b600060146040518060a00160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160008201600c9054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff168152505090506000816080015167ffffffffffffffff1690506000826040015163ffffffff1690506119fd828261204f565b611a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3390614611565b60405180910390fd5b600d5484611a48610e29565b611a52919061482f565b1115611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a90614511565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a84611abe33611315565b611ac8919061482f565b1115611b09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0090614691565b60405180910390fd5b600084601460000160149054906101000a900467ffffffffffffffff1667ffffffffffffffff16611b3a91906148b6565b905080341015611b7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7690614671565b60405180910390fd5b60005b85811015611bea57611b946013612d12565b611ba733611ba26013612d28565b612ac3565b600f6000815480929190611bba90614a8b565b919050555060106000815480929190611bd290614a8b565b91905055508080611be290614a8b565b915050611b82565b505050505050565b611c03611bfd6126bd565b8361277e565b611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3990614651565b60405180910390fd5b611c4e84848484612d36565b50505050565b6060611c5f82612651565b611c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c95906145d1565b60405180910390fd5b60001515601160009054906101000a900460ff1615151415611d4c5760128054611cc790614a28565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf390614a28565b8015611d405780601f10611d1557610100808354040283529160200191611d40565b820191906000526020600020905b815481529060010190602001808311611d2357829003601f168201915b50505050509050611e8e565b6000601660008481526020019081526020016000208054611d6c90614a28565b905014611e1657601660008381526020019081526020016000208054611d9190614a28565b80601f0160208091040260200160405190810160405280929190818152602001828054611dbd90614a28565b8015611e0a5780601f10611ddf57610100808354040283529160200191611e0a565b820191906000526020600020905b815481529060010190602001808311611ded57829003601f168201915b50505050509050611e8e565b6000611e20612d92565b90506000815111611e405760405180602001604052806000815250611e8a565b80611e4a84612e24565b604051602001611e5b929190614272565b604051602081830303815290604052604051602001611e7a9190614296565b6040516020818303038152906040525b9150505b919050565b611e9b6126bd565b73ffffffffffffffffffffffffffffffffffffffff16611eb96115ae565b73ffffffffffffffffffffffffffffffffffffffff1614611f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f06906145b1565b60405180910390fd5b6040518060a00160405280600063ffffffff168152602001601460000160049054906101000a900463ffffffff1663ffffffff1681526020018263ffffffff168152602001600067ffffffffffffffff1681526020018367ffffffffffffffff16815250601460008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055509050505050565b60008083141580156120615750814210155b905092915050565b6120716126bd565b73ffffffffffffffffffffffffffffffffffffffff1661208f6115ae565b73ffffffffffffffffffffffffffffffffffffffff16146120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc906145b1565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6000601460000160009054906101000a900463ffffffff1663ffffffff169050600081141580156121335750804210155b612172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216990614591565b60405180910390fd5b601460000160049054906101000a900463ffffffff1663ffffffff1642106121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c690614371565b60405180910390fd5b6000336040516020016121e29190614257565b604051602081830303815290604052805190602001209050612246858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508483612f85565b612285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227c90614551565b60405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000001910866122af610e29565b6122b9919061482f565b11156122fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f1906146b1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000a8661232533611315565b61232f919061482f565b1115612370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236790614691565b60405180910390fd5b6000866014600001600c9054906101000a900467ffffffffffffffff1667ffffffffffffffff166123a191906148b6565b9050803410156123e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dd90614671565b60405180910390fd5b60005b87811015612451576123fb6013612d12565b61240e336124096013612d28565b612ac3565b600f600081548092919061242190614a8b565b91905055506010600081548092919061243990614a8b565b9190505550808061244990614a8b565b9150506123e9565b5050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124f76126bd565b73ffffffffffffffffffffffffffffffffffffffff166125156115ae565b73ffffffffffffffffffffffffffffffffffffffff161461256b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612562906145b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d2906143b1565b60405180910390fd5b6125e481612ae1565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661273883611166565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061278982612651565b6127c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127bf90614471565b60405180910390fd5b60006127d383611166565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806128155750612814818561245b565b5b8061285357508373ffffffffffffffffffffffffffffffffffffffff1661283b84610a44565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661287c82611166565b73ffffffffffffffffffffffffffffffffffffffff16146128d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c9906143d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293990614431565b60405180910390fd5b61294d838383612f9c565b6129586000826126c5565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129a89190614910565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129ff919061482f565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612abe838383612fa1565b505050565b612add828260405180602001604052806000815250613063565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0b90614451565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612d059190614334565b60405180910390a3505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b612d4184848461285c565b612d4d848484846130be565b612d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8390614391565b60405180910390fd5b50505050565b606060178054612da190614a28565b80601f0160208091040260200160405190810160405280929190818152602001828054612dcd90614a28565b8015612e1a5780601f10612def57610100808354040283529160200191612e1a565b820191906000526020600020905b815481529060010190602001808311612dfd57829003601f168201915b5050505050905090565b60606000821415612e6c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f80565b600082905060005b60008214612e9e578080612e8790614a8b565b915050600a82612e979190614885565b9150612e74565b60008167ffffffffffffffff811115612eba57612eb9614be5565b5b6040519080825280601f01601f191660200182016040528015612eec5781602001600182028036833780820191505090505b5090505b60008514612f7957600182612f059190614910565b9150600a85612f149190614af8565b6030612f20919061482f565b60f81b818381518110612f3657612f35614bb6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f729190614885565b9450612ef0565b8093505050505b919050565b600082612f928584613255565b1490509392505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561305e57600860009054906101000a900460ff161561305d57600060166000838152602001908152602001600020805461300b90614a28565b9050141561305c5760096016600083815260200190815260200160002090805461303490614a28565b61303f929190613564565b506000600860006101000a81548160ff0219169083151502179055505b5b5b505050565b61306d83836132ca565b61307a60008484846130be565b6130b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b090614391565b60405180910390fd5b505050565b60006130df8473ffffffffffffffffffffffffffffffffffffffff166134a4565b15613248578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026131086126bd565b8786866040518563ffffffff1660e01b815260040161312a94939291906142e8565b602060405180830381600087803b15801561314457600080fd5b505af192505050801561317557506040513d601f19601f820116820180604052508101906131729190613ad6565b60015b6131f8573d80600081146131a5576040519150601f19603f3d011682016040523d82523d6000602084013e6131aa565b606091505b506000815114156131f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e790614391565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061324d565b600190505b949350505050565b60008082905060005b84518110156132bf57600085828151811061327c5761327b614bb6565b5b6020026020010151905080831161329e5761329783826134c7565b92506132ab565b6132a881846134c7565b92505b5080806132b790614a8b565b91505061325e565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561333a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333190614531565b60405180910390fd5b61334381612651565b15613383576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337a906143f1565b60405180910390fd5b61338f60008383612f9c565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133df919061482f565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46134a060008383612fa1565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b8280546134ea90614a28565b90600052602060002090601f01602090048101928261350c5760008555613553565b82601f1061352557803560ff1916838001178555613553565b82800160010185558215613553579182015b82811115613552578235825591602001919060010190613537565b5b50905061356091906135f1565b5090565b82805461357090614a28565b90600052602060002090601f01602090048101928261359257600085556135e0565b82601f106135a357805485556135e0565b828001600101855582156135e057600052602060002091601f016020900482015b828111156135df5782548255916001019190600101906135c4565b5b5090506135ed91906135f1565b5090565b5b8082111561360a5760008160009055506001016135f2565b5090565b600061362161361c84614784565b61475f565b9050808382526020820190508285602086028201111561364457613643614c1e565b5b60005b85811015613674578161365a88826136c0565b845260208401935060208301925050600181019050613647565b5050509392505050565b600061369161368c846147b0565b61475f565b9050828152602081018484840111156136ad576136ac614c23565b5b6136b88482856149e6565b509392505050565b6000813590506136cf81615332565b92915050565b600082601f8301126136ea576136e9614c19565b5b81356136fa84826020860161360e565b91505092915050565b60008083601f84011261371957613718614c19565b5b8235905067ffffffffffffffff81111561373657613735614c14565b5b60208301915083602082028301111561375257613751614c1e565b5b9250929050565b60008135905061376881615349565b92915050565b60008135905061377d81615360565b92915050565b60008135905061379281615377565b92915050565b6000815190506137a781615377565b92915050565b600082601f8301126137c2576137c1614c19565b5b81356137d284826020860161367e565b91505092915050565b60008083601f8401126137f1576137f0614c19565b5b8235905067ffffffffffffffff81111561380e5761380d614c14565b5b60208301915083600182028301111561382a57613829614c1e565b5b9250929050565b6000813590506138408161538e565b92915050565b600081359050613855816153a5565b92915050565b60008135905061386a816153bc565b92915050565b60006020828403121561388657613885614c2d565b5b6000613894848285016136c0565b91505092915050565b600080604083850312156138b4576138b3614c2d565b5b60006138c2858286016136c0565b92505060206138d3858286016136c0565b9150509250929050565b6000806000606084860312156138f6576138f5614c2d565b5b6000613904868287016136c0565b9350506020613915868287016136c0565b925050604061392686828701613831565b9150509250925092565b6000806000806080858703121561394a57613949614c2d565b5b6000613958878288016136c0565b9450506020613969878288016136c0565b935050604061397a87828801613831565b925050606085013567ffffffffffffffff81111561399b5761399a614c28565b5b6139a7878288016137ad565b91505092959194509250565b600080604083850312156139ca576139c9614c2d565b5b60006139d8858286016136c0565b92505060206139e985828601613759565b9150509250929050565b60008060408385031215613a0a57613a09614c2d565b5b6000613a18858286016136c0565b9250506020613a2985828601613831565b9150509250929050565b600060208284031215613a4957613a48614c2d565b5b600082013567ffffffffffffffff811115613a6757613a66614c28565b5b613a73848285016136d5565b91505092915050565b600060208284031215613a9257613a91614c2d565b5b6000613aa084828501613759565b91505092915050565b600060208284031215613abf57613abe614c2d565b5b6000613acd84828501613783565b91505092915050565b600060208284031215613aec57613aeb614c2d565b5b6000613afa84828501613798565b91505092915050565b60008060208385031215613b1a57613b19614c2d565b5b600083013567ffffffffffffffff811115613b3857613b37614c28565b5b613b44858286016137db565b92509250509250929050565b600060208284031215613b6657613b65614c2d565b5b6000613b7484828501613831565b91505092915050565b60008060008060608587031215613b9757613b96614c2d565b5b6000613ba587828801613831565b945050602085013567ffffffffffffffff811115613bc657613bc5614c28565b5b613bd287828801613703565b93509350506040613be58782880161376e565b91505092959194509250565b60008060408385031215613c0857613c07614c2d565b5b6000613c1685828601613831565b9250506020613c2785828601613831565b9150509250929050565b60008060008060608587031215613c4b57613c4a614c2d565b5b6000613c5987828801613831565b9450506020613c6a87828801613831565b935050604085013567ffffffffffffffff811115613c8b57613c8a614c28565b5b613c97878288016137db565b925092505092959194509250565b600080600060608486031215613cbe57613cbd614c2d565b5b6000613ccc86828701613846565b9350506020613cdd86828701613846565b9250506040613cee8682870161385b565b9150509250925092565b60008060408385031215613d0f57613d0e614c2d565b5b6000613d1d8582860161385b565b9250506020613d2e85828601613846565b9150509250929050565b613d4181614944565b82525050565b613d58613d5382614944565b614ad4565b82525050565b613d6781614956565b82525050565b6000613d78826147e1565b613d8281856147f7565b9350613d928185602086016149f5565b613d9b81614c32565b840191505092915050565b6000613db1826147ec565b613dbb8185614813565b9350613dcb8185602086016149f5565b613dd481614c32565b840191505092915050565b6000613dea826147ec565b613df48185614824565b9350613e048185602086016149f5565b80840191505092915050565b6000613e1d601183614813565b9150613e2882614c50565b602082019050919050565b6000613e40603283614813565b9150613e4b82614c79565b604082019050919050565b6000613e63602683614813565b9150613e6e82614cc8565b604082019050919050565b6000613e86602583614813565b9150613e9182614d17565b604082019050919050565b6000613ea9601c83614813565b9150613eb482614d66565b602082019050919050565b6000613ecc602983614813565b9150613ed782614d8f565b604082019050919050565b6000613eef602483614813565b9150613efa82614dde565b604082019050919050565b6000613f12601983614813565b9150613f1d82614e2d565b602082019050919050565b6000613f35602c83614813565b9150613f4082614e56565b604082019050919050565b6000613f58603883614813565b9150613f6382614ea5565b604082019050919050565b6000613f7b602a83614813565b9150613f8682614ef4565b604082019050919050565b6000613f9e602983614813565b9150613fa982614f43565b604082019050919050565b6000613fc1600783614813565b9150613fcc82614f92565b602082019050919050565b6000613fe4601283614813565b9150613fef82614fbb565b602082019050919050565b6000614007602083614813565b915061401282614fe4565b602082019050919050565b600061402a601783614813565b91506140358261500d565b602082019050919050565b600061404d602c83614813565b915061405882615036565b604082019050919050565b6000614070600583614824565b915061407b82615085565b600582019050919050565b6000614093601b83614813565b915061409e826150ae565b602082019050919050565b60006140b6602083614813565b91506140c1826150d7565b602082019050919050565b60006140d9602f83614813565b91506140e482615100565b604082019050919050565b60006140fc602183614813565b91506141078261514f565b604082019050919050565b600061411f601d83614813565b915061412a8261519e565b602082019050919050565b6000614142600083614808565b915061414d826151c7565b600082019050919050565b6000614165601083614813565b9150614170826151ca565b602082019050919050565b6000614188603183614813565b9150614193826151f3565b604082019050919050565b60006141ab601b83614813565b91506141b682615242565b602082019050919050565b60006141ce601683614813565b91506141d98261526b565b602082019050919050565b60006141f1604883614813565b91506141fc82615294565b606082019050919050565b6000614214601f83614813565b915061421f82615309565b602082019050919050565b614233816149b8565b82525050565b614242816149c2565b82525050565b614251816149d2565b82525050565b60006142638284613d47565b60148201915081905092915050565b600061427e8285613ddf565b915061428a8284613ddf565b91508190509392505050565b60006142a28284613ddf565b91506142ad82614063565b915081905092915050565b60006142c382614135565b9150819050919050565b60006020820190506142e26000830184613d38565b92915050565b60006080820190506142fd6000830187613d38565b61430a6020830186613d38565b614317604083018561422a565b81810360608301526143298184613d6d565b905095945050505050565b60006020820190506143496000830184613d5e565b92915050565b600060208201905081810360008301526143698184613da6565b905092915050565b6000602082019050818103600083015261438a81613e10565b9050919050565b600060208201905081810360008301526143aa81613e33565b9050919050565b600060208201905081810360008301526143ca81613e56565b9050919050565b600060208201905081810360008301526143ea81613e79565b9050919050565b6000602082019050818103600083015261440a81613e9c565b9050919050565b6000602082019050818103600083015261442a81613ebf565b9050919050565b6000602082019050818103600083015261444a81613ee2565b9050919050565b6000602082019050818103600083015261446a81613f05565b9050919050565b6000602082019050818103600083015261448a81613f28565b9050919050565b600060208201905081810360008301526144aa81613f4b565b9050919050565b600060208201905081810360008301526144ca81613f6e565b9050919050565b600060208201905081810360008301526144ea81613f91565b9050919050565b6000602082019050818103600083015261450a81613fb4565b9050919050565b6000602082019050818103600083015261452a81613fd7565b9050919050565b6000602082019050818103600083015261454a81613ffa565b9050919050565b6000602082019050818103600083015261456a8161401d565b9050919050565b6000602082019050818103600083015261458a81614040565b9050919050565b600060208201905081810360008301526145aa81614086565b9050919050565b600060208201905081810360008301526145ca816140a9565b9050919050565b600060208201905081810360008301526145ea816140cc565b9050919050565b6000602082019050818103600083015261460a816140ef565b9050919050565b6000602082019050818103600083015261462a81614112565b9050919050565b6000602082019050818103600083015261464a81614158565b9050919050565b6000602082019050818103600083015261466a8161417b565b9050919050565b6000602082019050818103600083015261468a8161419e565b9050919050565b600060208201905081810360008301526146aa816141c1565b9050919050565b600060208201905081810360008301526146ca816141e4565b9050919050565b600060208201905081810360008301526146ea81614207565b9050919050565b6000602082019050614706600083018461422a565b92915050565b600060a0820190506147216000830188614239565b61472e6020830187614239565b61473b6040830186614239565b6147486060830185614248565b6147556080830184614248565b9695505050505050565b600061476961477a565b90506147758282614a5a565b919050565b6000604051905090565b600067ffffffffffffffff82111561479f5761479e614be5565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147cb576147ca614be5565b5b6147d482614c32565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061483a826149b8565b9150614845836149b8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561487a57614879614b29565b5b828201905092915050565b6000614890826149b8565b915061489b836149b8565b9250826148ab576148aa614b58565b5b828204905092915050565b60006148c1826149b8565b91506148cc836149b8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561490557614904614b29565b5b828202905092915050565b600061491b826149b8565b9150614926836149b8565b92508282101561493957614938614b29565b5b828203905092915050565b600061494f82614998565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b83811015614a135780820151818401526020810190506149f8565b83811115614a22576000848401525b50505050565b60006002820490506001821680614a4057607f821691505b60208210811415614a5457614a53614b87565b5b50919050565b614a6382614c32565b810181811067ffffffffffffffff82111715614a8257614a81614be5565b5b80604052505050565b6000614a96826149b8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ac957614ac8614b29565b5b600182019050919050565b6000614adf82614ae6565b9050919050565b6000614af182614c43565b9050919050565b6000614b03826149b8565b9150614b0e836149b8565b925082614b1e57614b1d614b58565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f50726573616c652068617320656e646564000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f746f6f206d616e7920616c7265616479206d696e746564206265666f7265206f60008201527f776e6572206d696e740000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f742044657600000000000000000000000000000000000000000000000000600082015250565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4e6f7420696e207468652070726573616c65206c697374000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f50726573616c6520686173206e6f742073746172746564207965740000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f7075626c69632073616c6520686173206e6f7420626567756e20796574000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f496e73756666696369656e742045746865722050726f76696465640000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f6e6f7420656e6f7567682072656d61696e696e6720726573657276656420666f60008201527f722061756374696f6e20746f20737570706f72742064657369726564206d696e60208201527f7420616d6f756e74000000000000000000000000000000000000000000000000604082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b61533b81614944565b811461534657600080fd5b50565b61535281614956565b811461535d57600080fd5b50565b61536981614962565b811461537457600080fd5b50565b6153808161496c565b811461538b57600080fd5b50565b615397816149b8565b81146153a257600080fd5b50565b6153ae816149c2565b81146153b957600080fd5b50565b6153c5816149d2565b81146153d057600080fd5b5056fea2646970667358221220677cd99ccbb5eb321c7755779c62cd471dbdcf2b6e36188e2d4860fab1e87ef864736f6c63430008070033

Deployed Bytecode Sourcemap

44238:7125:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28526:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29471:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31031:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30554:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45264:35;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48383:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46843:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44821:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31781:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50009:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32191:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49903:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48880:590;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29165:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49476:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28895:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43354:103;;;;;;;;;;;;;:::i;:::-;;44349:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48654:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44296:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42703:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45183:28;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;29640:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44436:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31324:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44394:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45218:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44638:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50858:181;;;;;;;;;;;;;:::i;:::-;;46938:927;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32447:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50204:648;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48093:284;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47873:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50114:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45497:1274;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31550:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43612:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28526:305;28628:4;28680:25;28665:40;;;:11;:40;;;;:105;;;;28737:33;28722:48;;;:11;:48;;;;28665:105;:158;;;;28787:36;28811:11;28787:23;:36::i;:::-;28665:158;28645:178;;28526:305;;;:::o;29471:100::-;29525:13;29558:5;29551:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29471:100;:::o;31031:221::-;31107:7;31135:16;31143:7;31135;:16::i;:::-;31127:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31220:15;:24;31236:7;31220:24;;;;;;;;;;;;;;;;;;;;;31213:31;;31031:221;;;:::o;30554:411::-;30635:13;30651:23;30666:7;30651:14;:23::i;:::-;30635:39;;30699:5;30693:11;;:2;:11;;;;30685:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30793:5;30777:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30802:37;30819:5;30826:12;:10;:12::i;:::-;30802:16;:37::i;:::-;30777:62;30755:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;30936:21;30945:2;30949:7;30936:8;:21::i;:::-;30624:341;30554:411;;:::o;45264:35::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48383:265::-;42934:12;:10;:12::i;:::-;42923:23;;:7;:5;:7::i;:::-;:23;;;42915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48529:111:::1;;;;;;;;48548:15;48529:111;;;;;;48572:13;48529:111;;;;;;48594:1;48529:111;;;;;;48604:19;48529:111;;;;;;48632:1;48529:111;;;;::::0;48516:10:::1;:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48383:265:::0;;;:::o;46843:87::-;46887:7;46910:14;;46903:21;;46843:87;:::o;44821:31::-;;;;:::o;31781:339::-;31976:41;31995:12;:10;:12::i;:::-;32009:7;31976:18;:41::i;:::-;31968:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32084:28;32094:4;32100:2;32104:7;32084:9;:28::i;:::-;31781:339;;;:::o;50009:99::-;42934:12;:10;:12::i;:::-;42923:23;;:7;:5;:7::i;:::-;:23;;;42915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50098:4:::1;;50083:12;:19;;;;;;;:::i;:::-;;50009:99:::0;;:::o;32191:185::-;32329:39;32346:4;32352:2;32356:7;32329:39;;;;;;;;;;;;:16;:39::i;:::-;32191:185;;;:::o;49903:100::-;42934:12;:10;:12::i;:::-;42923:23;;:7;:5;:7::i;:::-;:23;;;42915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49990:7:::1;;49974:13;:23;;;;;;;:::i;:::-;;49903:100:::0;;:::o;48880:590::-;42934:12;:10;:12::i;:::-;42923:23;;:7;:5;:7::i;:::-;:23;;;42915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49019:15:::1;49007:8;48991:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;48975:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;49232:9;49227:232;49251:8;49247:1;:12;49227:232;;;49295:2;49286:5;:11;49283:76;;;49318:4;49309:6;;:13;;;;;;;;;;;;;;;;;;49345:4;;49333:9;:16;;;;;;;:::i;:::-;;49283:76;49368:35;49378:10;49390:12;;49368:9;:35::i;:::-;49412:12;;:14;;;;;;;;;:::i;:::-;;;;;;49435;;:16;;;;;;;;;:::i;:::-;;;;;;49261:3;;;;;:::i;:::-;;;;49227:232;;;;48880:590:::0;;;;:::o;29165:239::-;29237:7;29257:13;29273:7;:16;29281:7;29273:16;;;;;;;;;;;;;;;;;;;;;29257:32;;29325:1;29308:19;;:5;:19;;;;29300:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29391:5;29384:12;;;29165:239;;;:::o;49476:250::-;49561:10;;;;;;;;;;;49547:24;;:10;:24;;;49531:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;49612:4;49603:6;;:13;;;;;;;;;;;;;;;;;;49635:3;;49623:9;:15;;;;;;;:::i;:::-;;49645:33;49655:10;49667;;49645:9;:33::i;:::-;49685:10;;:12;;;;;;;;;:::i;:::-;;;;;;49704:14;;:16;;;;;;;;;:::i;:::-;;;;;;49476:250;;:::o;28895:208::-;28967:7;29012:1;28995:19;;:5;:19;;;;28987:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29079:9;:16;29089:5;29079:16;;;;;;;;;;;;;;;;29072:23;;28895:208;;;:::o;43354:103::-;42934:12;:10;:12::i;:::-;42923:23;;:7;:5;:7::i;:::-;:23;;;42915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43419:30:::1;43446:1;43419:18;:30::i;:::-;43354:103::o:0;44349:40::-;;;:::o;48654:195::-;42934:12;:10;:12::i;:::-;42923:23;;:7;:5;:7::i;:::-;:23;;;42915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48755:9:::1;48750:94;48774:9;:16;48770:1;:20;48750:94;;;48832:4;48806:9;:23;48816:9;48826:1;48816:12;;;;;;;;:::i;:::-;;;;;;;;48806:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;48792:3;;;;;:::i;:::-;;;;48750:94;;;;48654:195:::0;:::o;44296:48::-;;;:::o;42703:87::-;42749:7;42776:6;;;;;;;;;;;42769:13;;42703:87;:::o;45183:28::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29640:104::-;29696:13;29729:7;29722:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29640:104;:::o;44436:44::-;;;:::o;31324:155::-;31419:52;31438:12;:10;:12::i;:::-;31452:8;31462;31419:18;:52::i;:::-;31324:155;;:::o;44394:37::-;;;:::o;45218:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;44638:31::-;;;;:::o;50858:181::-;42934:12;:10;:12::i;:::-;42923:23;;:7;:5;:7::i;:::-;:23;;;42915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25279:1:::1;25877:7;;:19;;25869:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;25279:1;26010:7;:18;;;;50923:12:::2;50941:10;:15;;50964:21;50941:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50922:68;;;51005:7;50997:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;50915:124;25235:1:::1;26189:7;:22;;;;50858:181::o:0;46938:927::-;47017:24;47044:10;47017:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47061:19;47091:6;:18;;;47083:27;;47061:49;;47117:27;47155:6;:26;;;47147:35;;47117:65;;47213:48;47228:11;47241:19;47213:14;:48::i;:::-;47197:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;47351:14;;47339:8;47323:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;47315:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;47447:23;47435:8;47411:21;47421:10;47411:9;:21::i;:::-;:32;;;;:::i;:::-;:59;;47395:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;47517:17;47562:8;47537:10;:22;;;;;;;;;;;;:33;;;;;;:::i;:::-;47517:53;;47606:9;47593;:22;;47577:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;47674:9;47669:191;47693:8;47689:1;:12;47669:191;;;47717:27;:15;:25;:27::i;:::-;47753:48;47763:10;47775:25;:15;:23;:25::i;:::-;47753:9;:48::i;:::-;47810:14;;:16;;;;;;;;;:::i;:::-;;;;;;47835:15;;:17;;;;;;;;;:::i;:::-;;;;;;47703:3;;;;;:::i;:::-;;;;47669:191;;;;47010:855;;;;46938:927;:::o;32447:328::-;32622:41;32641:12;:10;:12::i;:::-;32655:7;32622:18;:41::i;:::-;32614:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32728:39;32742:4;32748:2;32752:7;32761:5;32728:13;:39::i;:::-;32447:328;;;;:::o;50204:648::-;50302:13;50343:16;50351:7;50343;:16::i;:::-;50327:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;50448:5;50436:17;;:8;;;;;;;;;;;:17;;;50433:414;;;50472:12;50465:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50433:414;50545:1;50520:4;:13;50525:7;50520:13;;;;;;;;;;;50514:27;;;;;:::i;:::-;;;:32;50511:319;;50565:4;:13;50570:7;50565:13;;;;;;;;;;;50558:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50511:319;50611:21;50635:10;:8;:10::i;:::-;50611:34;;50696:1;50678:7;50672:21;:25;:148;;;;;;;;;;;;;;;;;50761:7;50770:18;:7;:16;:18::i;:::-;50744:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50720:80;;;;;;;;:::i;:::-;;;;;;;;;;;;;50672:148;50656:164;;;50204:648;;;;:::o;48093:284::-;42934:12;:10;:12::i;:::-;42923:23;;:7;:5;:7::i;:::-;:23;;;42915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48244:127:::1;;;;;;;;48263:1;48244:127;;;;;;48273:10;:30;;;;;;;;;;;;48244:127;;;;;;48312:19;48244:127;;;;;;48340:1;48244:127;;;;;;48350:14;48244:127;;;;::::0;48231:10:::1;:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48093:284:::0;;:::o;47873:214::-;47986:4;48031:1;48013:14;:19;;:68;;;;;48062:19;48043:15;:38;;48013:68;47999:82;;47873:214;;;;:::o;50114:84::-;42934:12;:10;:12::i;:::-;42923:23;;:7;:5;:7::i;:::-;:23;;;42915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50187:5:::1;50176:8;;:16;;;;;;;;;;;;;;;;;;50114:84:::0;:::o;45497:1274::-;45615:22;45648:10;:31;;;;;;;;;;;;45640:40;;45615:65;;45721:1;45703:14;:19;;:56;;;;;45745:14;45726:15;:33;;45703:56;45687:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;45855:10;:30;;;;;;;;;;;;45847:39;;45829:15;:57;45813:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;45930:12;45972:10;45955:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;45945:39;;;;;;45930:54;;46009:51;46028:12;;46009:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46042:11;46055:4;46009:18;:51::i;:::-;45991:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;46156:19;46144:8;46128:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:47;;46112:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;46324:23;46312:8;46288:21;46298:10;46288:9;:21::i;:::-;:32;;;;:::i;:::-;:59;;46272:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;46400:17;46458:8;46428:10;:27;;;;;;;;;;;;46420:36;;:46;;;;:::i;:::-;46400:66;;46502:9;46489;:22;;46473:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;46574:9;46569:191;46593:8;46589:1;:12;46569:191;;;46617:27;:15;:25;:27::i;:::-;46653:48;46663:10;46675:25;:15;:23;:25::i;:::-;46653:9;:48::i;:::-;46710:14;;:16;;;;;;;;;:::i;:::-;;;;;;46735:15;;:17;;;;;;;;;:::i;:::-;;;;;;46603:3;;;;;:::i;:::-;;;;46569:191;;;;45608:1163;;;45497:1274;;;;:::o;31550:164::-;31647:4;31671:18;:25;31690:5;31671:25;;;;;;;;;;;;;;;:35;31697:8;31671:35;;;;;;;;;;;;;;;;;;;;;;;;;31664:42;;31550:164;;;;:::o;43612:201::-;42934:12;:10;:12::i;:::-;42923:23;;:7;:5;:7::i;:::-;:23;;;42915:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43721:1:::1;43701:22;;:8;:22;;;;43693:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43777:28;43796:8;43777:18;:28::i;:::-;43612:201:::0;:::o;17613:157::-;17698:4;17737:25;17722:40;;;:11;:40;;;;17715:47;;17613:157;;;:::o;34285:127::-;34350:4;34402:1;34374:30;;:7;:16;34382:7;34374:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34367:37;;34285:127;;;:::o;26905:98::-;26958:7;26985:10;26978:17;;26905:98;:::o;38431:174::-;38533:2;38506:15;:24;38522:7;38506:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38589:7;38585:2;38551:46;;38560:23;38575:7;38560:14;:23::i;:::-;38551:46;;;;;;;;;;;;38431:174;;:::o;34579:348::-;34672:4;34697:16;34705:7;34697;:16::i;:::-;34689:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34773:13;34789:23;34804:7;34789:14;:23::i;:::-;34773:39;;34842:5;34831:16;;:7;:16;;;:52;;;;34851:32;34868:5;34875:7;34851:16;:32::i;:::-;34831:52;:87;;;;34911:7;34887:31;;:20;34899:7;34887:11;:20::i;:::-;:31;;;34831:87;34823:96;;;34579:348;;;;:::o;37688:625::-;37847:4;37820:31;;:23;37835:7;37820:14;:23::i;:::-;:31;;;37812:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37926:1;37912:16;;:2;:16;;;;37904:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37982:39;38003:4;38009:2;38013:7;37982:20;:39::i;:::-;38086:29;38103:1;38107:7;38086:8;:29::i;:::-;38147:1;38128:9;:15;38138:4;38128:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38176:1;38159:9;:13;38169:2;38159:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38207:2;38188:7;:16;38196:7;38188:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38246:7;38242:2;38227:27;;38236:4;38227:27;;;;;;;;;;;;38267:38;38287:4;38293:2;38297:7;38267:19;:38::i;:::-;37688:625;;;:::o;35269:110::-;35345:26;35355:2;35359:7;35345:26;;;;;;;;;;;;:9;:26::i;:::-;35269:110;;:::o;43973:191::-;44047:16;44066:6;;;;;;;;;;;44047:25;;44092:8;44083:6;;:17;;;;;;;;;;;;;;;;;;44147:8;44116:40;;44137:8;44116:40;;;;;;;;;;;;44036:128;43973:191;:::o;38747:315::-;38902:8;38893:17;;:5;:17;;;;38885:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38989:8;38951:18;:25;38970:5;38951:25;;;;;;;;;;;;;;;:35;38977:8;38951:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39035:8;39013:41;;39028:5;39013:41;;;39045:8;39013:41;;;;;;:::i;:::-;;;;;;;;38747:315;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;33657:315::-;33814:28;33824:4;33830:2;33834:7;33814:9;:28::i;:::-;33861:48;33884:4;33890:2;33894:7;33903:5;33861:22;:48::i;:::-;33853:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33657:315;;;;:::o;49789:108::-;49849:13;49878;49871:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49789:108;:::o;4515:723::-;4571:13;4801:1;4792:5;:10;4788:53;;;4819:10;;;;;;;;;;;;;;;;;;;;;4788:53;4851:12;4866:5;4851:20;;4882:14;4907:78;4922:1;4914:4;:9;4907:78;;4940:8;;;;;:::i;:::-;;;;4971:2;4963:10;;;;;:::i;:::-;;;4907:78;;;4995:19;5027:6;5017:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4995:39;;5045:154;5061:1;5052:5;:10;5045:154;;5089:1;5079:11;;;;;:::i;:::-;;;5156:2;5148:5;:10;;;;:::i;:::-;5135:2;:24;;;;:::i;:::-;5122:39;;5105:6;5112;5105:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5185:2;5176:11;;;;;:::i;:::-;;;5045:154;;;5223:6;5209:21;;;;;4515:723;;;;:::o;2685:190::-;2810:4;2863;2834:25;2847:5;2854:4;2834:12;:25::i;:::-;:33;2827:40;;2685:190;;;;;:::o;40998:126::-;;;;:::o;51045:307::-;51183:1;51167:18;;:4;:18;;;51164:183;;;51198:6;;;;;;;;;;;51195:143;;;51250:1;51225:4;:13;51230:7;51225:13;;;;;;;;;;;51219:27;;;;;:::i;:::-;;;:32;51216:113;;;51281:9;51265:4;:13;51270:7;51265:13;;;;;;;;;;;:25;;;;;;:::i;:::-;;;;;;:::i;:::-;;51312:5;51303:6;;:14;;;;;;;;;;;;;;;;;;51216:113;51195:143;51164:183;51045:307;;;:::o;35606:321::-;35736:18;35742:2;35746:7;35736:5;:18::i;:::-;35787:54;35818:1;35822:2;35826:7;35835:5;35787:22;:54::i;:::-;35765:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;35606:321;;;:::o;39627:799::-;39782:4;39803:15;:2;:13;;;:15::i;:::-;39799:620;;;39855:2;39839:36;;;39876:12;:10;:12::i;:::-;39890:4;39896:7;39905:5;39839:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39835:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40098:1;40081:6;:13;:18;40077:272;;;40124:60;;;;;;;;;;:::i;:::-;;;;;;;;40077:272;40299:6;40293:13;40284:6;40280:2;40276:15;40269:38;39835:529;39972:41;;;39962:51;;;:6;:51;;;;39955:58;;;;;39799:620;40403:4;40396:11;;39627:799;;;;;;;:::o;3236:675::-;3319:7;3339:20;3362:4;3339:27;;3382:9;3377:497;3401:5;:12;3397:1;:16;3377:497;;;3435:20;3458:5;3464:1;3458:8;;;;;;;;:::i;:::-;;;;;;;;3435:31;;3501:12;3485;:28;3481:382;;3628:42;3643:12;3657;3628:14;:42::i;:::-;3613:57;;3481:382;;;3805:42;3820:12;3834;3805:14;:42::i;:::-;3790:57;;3481:382;3420:454;3415:3;;;;;:::i;:::-;;;;3377:497;;;;3891:12;3884:19;;;3236:675;;;;:::o;36263:439::-;36357:1;36343:16;;:2;:16;;;;36335:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36416:16;36424:7;36416;:16::i;:::-;36415:17;36407:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36478:45;36507:1;36511:2;36515:7;36478:20;:45::i;:::-;36553:1;36536:9;:13;36546:2;36536:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36584:2;36565:7;:16;36573:7;36565:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36629:7;36625:2;36604:33;;36621:1;36604:33;;;;;;;;;;;;36650:44;36678:1;36682:2;36686:7;36650:19;:44::i;:::-;36263:439;;:::o;7507:326::-;7567:4;7824:1;7802:7;:19;;;:23;7795:30;;7507:326;;;:::o;3919:224::-;3987:13;4050:1;4044:4;4037:15;4079:1;4073:4;4066:15;4120:4;4114;4104:21;4095:30;;3919:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::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:139::-;1214:5;1252:6;1239:20;1230:29;;1268:33;1295:5;1268:33;:::i;:::-;1168:139;;;;:::o;1330:370::-;1401:5;1450:3;1443:4;1435:6;1431:17;1427:27;1417:122;;1458:79;;:::i;:::-;1417:122;1575:6;1562:20;1600:94;1690:3;1682:6;1675:4;1667:6;1663:17;1600:94;:::i;:::-;1591:103;;1407:293;1330:370;;;;:::o;1723:568::-;1796:8;1806:6;1856:3;1849:4;1841:6;1837:17;1833:27;1823:122;;1864:79;;:::i;:::-;1823:122;1977:6;1964:20;1954:30;;2007:18;1999:6;1996:30;1993:117;;;2029:79;;:::i;:::-;1993:117;2143:4;2135:6;2131:17;2119:29;;2197:3;2189:4;2181:6;2177:17;2167:8;2163:32;2160:41;2157:128;;;2204:79;;:::i;:::-;2157:128;1723:568;;;;;:::o;2297:133::-;2340:5;2378:6;2365:20;2356:29;;2394:30;2418:5;2394:30;:::i;:::-;2297:133;;;;:::o;2436:139::-;2482:5;2520:6;2507:20;2498:29;;2536:33;2563:5;2536:33;:::i;:::-;2436:139;;;;:::o;2581:137::-;2626:5;2664:6;2651:20;2642:29;;2680:32;2706:5;2680:32;:::i;:::-;2581:137;;;;:::o;2724:141::-;2780:5;2811:6;2805:13;2796:22;;2827:32;2853:5;2827:32;:::i;:::-;2724:141;;;;:::o;2884:338::-;2939:5;2988:3;2981:4;2973:6;2969:17;2965:27;2955:122;;2996:79;;:::i;:::-;2955:122;3113:6;3100:20;3138:78;3212:3;3204:6;3197:4;3189:6;3185:17;3138:78;:::i;:::-;3129:87;;2945:277;2884:338;;;;:::o;3242:553::-;3300:8;3310:6;3360:3;3353:4;3345:6;3341:17;3337:27;3327:122;;3368:79;;:::i;:::-;3327:122;3481:6;3468:20;3458:30;;3511:18;3503:6;3500:30;3497:117;;;3533:79;;:::i;:::-;3497:117;3647:4;3639:6;3635:17;3623:29;;3701:3;3693:4;3685:6;3681:17;3671:8;3667:32;3664:41;3661:128;;;3708:79;;:::i;:::-;3661:128;3242:553;;;;;:::o;3801:139::-;3847:5;3885:6;3872:20;3863:29;;3901:33;3928:5;3901:33;:::i;:::-;3801:139;;;;:::o;3946:137::-;3991:5;4029:6;4016:20;4007:29;;4045:32;4071:5;4045:32;:::i;:::-;3946:137;;;;:::o;4089:::-;4134:5;4172:6;4159:20;4150:29;;4188:32;4214:5;4188:32;:::i;:::-;4089:137;;;;:::o;4232:329::-;4291:6;4340:2;4328:9;4319:7;4315:23;4311:32;4308:119;;;4346:79;;:::i;:::-;4308:119;4466:1;4491:53;4536:7;4527:6;4516:9;4512:22;4491:53;:::i;:::-;4481:63;;4437:117;4232:329;;;;:::o;4567:474::-;4635:6;4643;4692:2;4680:9;4671:7;4667:23;4663:32;4660:119;;;4698:79;;:::i;:::-;4660:119;4818:1;4843:53;4888:7;4879:6;4868:9;4864:22;4843:53;:::i;:::-;4833:63;;4789:117;4945:2;4971:53;5016:7;5007:6;4996:9;4992:22;4971:53;:::i;:::-;4961:63;;4916:118;4567:474;;;;;:::o;5047:619::-;5124:6;5132;5140;5189:2;5177:9;5168:7;5164:23;5160:32;5157:119;;;5195:79;;:::i;:::-;5157:119;5315:1;5340:53;5385:7;5376:6;5365:9;5361:22;5340:53;:::i;:::-;5330:63;;5286:117;5442:2;5468:53;5513:7;5504:6;5493:9;5489:22;5468:53;:::i;:::-;5458:63;;5413:118;5570:2;5596:53;5641:7;5632:6;5621:9;5617:22;5596:53;:::i;:::-;5586:63;;5541:118;5047:619;;;;;:::o;5672:943::-;5767:6;5775;5783;5791;5840:3;5828:9;5819:7;5815:23;5811:33;5808:120;;;5847:79;;:::i;:::-;5808:120;5967:1;5992:53;6037:7;6028:6;6017:9;6013:22;5992:53;:::i;:::-;5982:63;;5938:117;6094:2;6120:53;6165:7;6156:6;6145:9;6141:22;6120:53;:::i;:::-;6110:63;;6065:118;6222:2;6248:53;6293:7;6284:6;6273:9;6269:22;6248:53;:::i;:::-;6238:63;;6193:118;6378:2;6367:9;6363:18;6350:32;6409:18;6401:6;6398:30;6395:117;;;6431:79;;:::i;:::-;6395:117;6536:62;6590:7;6581:6;6570:9;6566:22;6536:62;:::i;:::-;6526:72;;6321:287;5672:943;;;;;;;:::o;6621:468::-;6686:6;6694;6743:2;6731:9;6722:7;6718:23;6714:32;6711:119;;;6749:79;;:::i;:::-;6711:119;6869:1;6894:53;6939:7;6930:6;6919:9;6915:22;6894:53;:::i;:::-;6884:63;;6840:117;6996:2;7022:50;7064:7;7055:6;7044:9;7040:22;7022:50;:::i;:::-;7012:60;;6967:115;6621:468;;;;;:::o;7095:474::-;7163:6;7171;7220:2;7208:9;7199:7;7195:23;7191:32;7188:119;;;7226:79;;:::i;:::-;7188:119;7346:1;7371:53;7416:7;7407:6;7396:9;7392:22;7371:53;:::i;:::-;7361:63;;7317:117;7473:2;7499:53;7544:7;7535:6;7524:9;7520:22;7499:53;:::i;:::-;7489:63;;7444:118;7095:474;;;;;:::o;7575:539::-;7659:6;7708:2;7696:9;7687:7;7683:23;7679:32;7676:119;;;7714:79;;:::i;:::-;7676:119;7862:1;7851:9;7847:17;7834:31;7892:18;7884:6;7881:30;7878:117;;;7914:79;;:::i;:::-;7878:117;8019:78;8089:7;8080:6;8069:9;8065:22;8019:78;:::i;:::-;8009:88;;7805:302;7575:539;;;;:::o;8120:323::-;8176:6;8225:2;8213:9;8204:7;8200:23;8196:32;8193:119;;;8231:79;;:::i;:::-;8193:119;8351:1;8376:50;8418:7;8409:6;8398:9;8394:22;8376:50;:::i;:::-;8366:60;;8322:114;8120:323;;;;:::o;8449:327::-;8507:6;8556:2;8544:9;8535:7;8531:23;8527:32;8524:119;;;8562:79;;:::i;:::-;8524:119;8682:1;8707:52;8751:7;8742:6;8731:9;8727:22;8707:52;:::i;:::-;8697:62;;8653:116;8449:327;;;;:::o;8782:349::-;8851:6;8900:2;8888:9;8879:7;8875:23;8871:32;8868:119;;;8906:79;;:::i;:::-;8868:119;9026:1;9051:63;9106:7;9097:6;9086:9;9082:22;9051:63;:::i;:::-;9041:73;;8997:127;8782:349;;;;:::o;9137:529::-;9208:6;9216;9265:2;9253:9;9244:7;9240:23;9236:32;9233:119;;;9271:79;;:::i;:::-;9233:119;9419:1;9408:9;9404:17;9391:31;9449:18;9441:6;9438:30;9435:117;;;9471:79;;:::i;:::-;9435:117;9584:65;9641:7;9632:6;9621:9;9617:22;9584:65;:::i;:::-;9566:83;;;;9362:297;9137:529;;;;;:::o;9672:329::-;9731:6;9780:2;9768:9;9759:7;9755:23;9751:32;9748:119;;;9786:79;;:::i;:::-;9748:119;9906:1;9931:53;9976:7;9967:6;9956:9;9952:22;9931:53;:::i;:::-;9921:63;;9877:117;9672:329;;;;:::o;10007:849::-;10111:6;10119;10127;10135;10184:2;10172:9;10163:7;10159:23;10155:32;10152:119;;;10190:79;;:::i;:::-;10152:119;10310:1;10335:53;10380:7;10371:6;10360:9;10356:22;10335:53;:::i;:::-;10325:63;;10281:117;10465:2;10454:9;10450:18;10437:32;10496:18;10488:6;10485:30;10482:117;;;10518:79;;:::i;:::-;10482:117;10631:80;10703:7;10694:6;10683:9;10679:22;10631:80;:::i;:::-;10613:98;;;;10408:313;10760:2;10786:53;10831:7;10822:6;10811:9;10807:22;10786:53;:::i;:::-;10776:63;;10731:118;10007:849;;;;;;;:::o;10862:474::-;10930:6;10938;10987:2;10975:9;10966:7;10962:23;10958:32;10955:119;;;10993:79;;:::i;:::-;10955:119;11113:1;11138:53;11183:7;11174:6;11163:9;11159:22;11138:53;:::i;:::-;11128:63;;11084:117;11240:2;11266:53;11311:7;11302:6;11291:9;11287:22;11266:53;:::i;:::-;11256:63;;11211:118;10862:474;;;;;:::o;11342:819::-;11431:6;11439;11447;11455;11504:2;11492:9;11483:7;11479:23;11475:32;11472:119;;;11510:79;;:::i;:::-;11472:119;11630:1;11655:53;11700:7;11691:6;11680:9;11676:22;11655:53;:::i;:::-;11645:63;;11601:117;11757:2;11783:53;11828:7;11819:6;11808:9;11804:22;11783:53;:::i;:::-;11773:63;;11728:118;11913:2;11902:9;11898:18;11885:32;11944:18;11936:6;11933:30;11930:117;;;11966:79;;:::i;:::-;11930:117;12079:65;12136:7;12127:6;12116:9;12112:22;12079:65;:::i;:::-;12061:83;;;;11856:298;11342:819;;;;;;;:::o;12167:613::-;12241:6;12249;12257;12306:2;12294:9;12285:7;12281:23;12277:32;12274:119;;;12312:79;;:::i;:::-;12274:119;12432:1;12457:52;12501:7;12492:6;12481:9;12477:22;12457:52;:::i;:::-;12447:62;;12403:116;12558:2;12584:52;12628:7;12619:6;12608:9;12604:22;12584:52;:::i;:::-;12574:62;;12529:117;12685:2;12711:52;12755:7;12746:6;12735:9;12731:22;12711:52;:::i;:::-;12701:62;;12656:117;12167:613;;;;;:::o;12786:470::-;12852:6;12860;12909:2;12897:9;12888:7;12884:23;12880:32;12877:119;;;12915:79;;:::i;:::-;12877:119;13035:1;13060:52;13104:7;13095:6;13084:9;13080:22;13060:52;:::i;:::-;13050:62;;13006:116;13161:2;13187:52;13231:7;13222:6;13211:9;13207:22;13187:52;:::i;:::-;13177:62;;13132:117;12786:470;;;;;:::o;13262:118::-;13349:24;13367:5;13349:24;:::i;:::-;13344:3;13337:37;13262:118;;:::o;13386:157::-;13491:45;13511:24;13529:5;13511:24;:::i;:::-;13491:45;:::i;:::-;13486:3;13479:58;13386:157;;:::o;13549:109::-;13630:21;13645:5;13630:21;:::i;:::-;13625:3;13618:34;13549:109;;:::o;13664:360::-;13750:3;13778:38;13810:5;13778:38;:::i;:::-;13832:70;13895:6;13890:3;13832:70;:::i;:::-;13825:77;;13911:52;13956:6;13951:3;13944:4;13937:5;13933:16;13911:52;:::i;:::-;13988:29;14010:6;13988:29;:::i;:::-;13983:3;13979:39;13972:46;;13754:270;13664:360;;;;:::o;14030:364::-;14118:3;14146:39;14179:5;14146:39;:::i;:::-;14201:71;14265:6;14260:3;14201:71;:::i;:::-;14194:78;;14281:52;14326:6;14321:3;14314:4;14307:5;14303:16;14281:52;:::i;:::-;14358:29;14380:6;14358:29;:::i;:::-;14353:3;14349:39;14342:46;;14122:272;14030:364;;;;:::o;14400:377::-;14506:3;14534:39;14567:5;14534:39;:::i;:::-;14589:89;14671:6;14666:3;14589:89;:::i;:::-;14582:96;;14687:52;14732:6;14727:3;14720:4;14713:5;14709:16;14687:52;:::i;:::-;14764:6;14759:3;14755:16;14748:23;;14510:267;14400:377;;;;:::o;14783:366::-;14925:3;14946:67;15010:2;15005:3;14946:67;:::i;:::-;14939:74;;15022:93;15111:3;15022:93;:::i;:::-;15140:2;15135:3;15131:12;15124:19;;14783:366;;;:::o;15155:::-;15297:3;15318:67;15382:2;15377:3;15318:67;:::i;:::-;15311:74;;15394:93;15483:3;15394:93;:::i;:::-;15512:2;15507:3;15503:12;15496:19;;15155:366;;;:::o;15527:::-;15669:3;15690:67;15754:2;15749:3;15690:67;:::i;:::-;15683:74;;15766:93;15855:3;15766:93;:::i;:::-;15884:2;15879:3;15875:12;15868:19;;15527:366;;;:::o;15899:::-;16041:3;16062:67;16126:2;16121:3;16062:67;:::i;:::-;16055:74;;16138:93;16227:3;16138:93;:::i;:::-;16256:2;16251:3;16247:12;16240:19;;15899:366;;;:::o;16271:::-;16413:3;16434:67;16498:2;16493:3;16434:67;:::i;:::-;16427:74;;16510:93;16599:3;16510:93;:::i;:::-;16628:2;16623:3;16619:12;16612:19;;16271:366;;;:::o;16643:::-;16785:3;16806:67;16870:2;16865:3;16806:67;:::i;:::-;16799:74;;16882:93;16971:3;16882:93;:::i;:::-;17000:2;16995:3;16991:12;16984:19;;16643:366;;;:::o;17015:::-;17157:3;17178:67;17242:2;17237:3;17178:67;:::i;:::-;17171:74;;17254:93;17343:3;17254:93;:::i;:::-;17372:2;17367:3;17363:12;17356:19;;17015:366;;;:::o;17387:::-;17529:3;17550:67;17614:2;17609:3;17550:67;:::i;:::-;17543:74;;17626:93;17715:3;17626:93;:::i;:::-;17744:2;17739:3;17735:12;17728:19;;17387:366;;;:::o;17759:::-;17901:3;17922:67;17986:2;17981:3;17922:67;:::i;:::-;17915:74;;17998:93;18087:3;17998:93;:::i;:::-;18116:2;18111:3;18107:12;18100:19;;17759:366;;;:::o;18131:::-;18273:3;18294:67;18358:2;18353:3;18294:67;:::i;:::-;18287:74;;18370:93;18459:3;18370:93;:::i;:::-;18488:2;18483:3;18479:12;18472:19;;18131:366;;;:::o;18503:::-;18645:3;18666:67;18730:2;18725:3;18666:67;:::i;:::-;18659:74;;18742:93;18831:3;18742:93;:::i;:::-;18860:2;18855:3;18851:12;18844:19;;18503:366;;;:::o;18875:::-;19017:3;19038:67;19102:2;19097:3;19038:67;:::i;:::-;19031:74;;19114:93;19203:3;19114:93;:::i;:::-;19232:2;19227:3;19223:12;19216:19;;18875:366;;;:::o;19247:365::-;19389:3;19410:66;19474:1;19469:3;19410:66;:::i;:::-;19403:73;;19485:93;19574:3;19485:93;:::i;:::-;19603:2;19598:3;19594:12;19587:19;;19247:365;;;:::o;19618:366::-;19760:3;19781:67;19845:2;19840:3;19781:67;:::i;:::-;19774:74;;19857:93;19946:3;19857:93;:::i;:::-;19975:2;19970:3;19966:12;19959:19;;19618:366;;;:::o;19990:::-;20132:3;20153:67;20217:2;20212:3;20153:67;:::i;:::-;20146:74;;20229:93;20318:3;20229:93;:::i;:::-;20347:2;20342:3;20338:12;20331:19;;19990:366;;;:::o;20362:::-;20504:3;20525:67;20589:2;20584:3;20525:67;:::i;:::-;20518:74;;20601:93;20690:3;20601:93;:::i;:::-;20719:2;20714:3;20710:12;20703:19;;20362:366;;;:::o;20734:::-;20876:3;20897:67;20961:2;20956:3;20897:67;:::i;:::-;20890:74;;20973:93;21062:3;20973:93;:::i;:::-;21091:2;21086:3;21082:12;21075:19;;20734:366;;;:::o;21106:400::-;21266:3;21287:84;21369:1;21364:3;21287:84;:::i;:::-;21280:91;;21380:93;21469:3;21380:93;:::i;:::-;21498:1;21493:3;21489:11;21482:18;;21106:400;;;:::o;21512:366::-;21654:3;21675:67;21739:2;21734:3;21675:67;:::i;:::-;21668:74;;21751:93;21840:3;21751:93;:::i;:::-;21869:2;21864:3;21860:12;21853:19;;21512:366;;;:::o;21884:::-;22026:3;22047:67;22111:2;22106:3;22047:67;:::i;:::-;22040:74;;22123:93;22212:3;22123:93;:::i;:::-;22241:2;22236:3;22232:12;22225:19;;21884:366;;;:::o;22256:::-;22398:3;22419:67;22483:2;22478:3;22419:67;:::i;:::-;22412:74;;22495:93;22584:3;22495:93;:::i;:::-;22613:2;22608:3;22604:12;22597:19;;22256:366;;;:::o;22628:::-;22770:3;22791:67;22855:2;22850:3;22791:67;:::i;:::-;22784:74;;22867:93;22956:3;22867:93;:::i;:::-;22985:2;22980:3;22976:12;22969:19;;22628:366;;;:::o;23000:::-;23142:3;23163:67;23227:2;23222:3;23163:67;:::i;:::-;23156:74;;23239:93;23328:3;23239:93;:::i;:::-;23357:2;23352:3;23348:12;23341:19;;23000:366;;;:::o;23372:398::-;23531:3;23552:83;23633:1;23628:3;23552:83;:::i;:::-;23545:90;;23644:93;23733:3;23644:93;:::i;:::-;23762:1;23757:3;23753:11;23746:18;;23372:398;;;:::o;23776:366::-;23918:3;23939:67;24003:2;23998:3;23939:67;:::i;:::-;23932:74;;24015:93;24104:3;24015:93;:::i;:::-;24133:2;24128:3;24124:12;24117:19;;23776:366;;;:::o;24148:::-;24290:3;24311:67;24375:2;24370:3;24311:67;:::i;:::-;24304:74;;24387:93;24476:3;24387:93;:::i;:::-;24505:2;24500:3;24496:12;24489:19;;24148:366;;;:::o;24520:::-;24662:3;24683:67;24747:2;24742:3;24683:67;:::i;:::-;24676:74;;24759:93;24848:3;24759:93;:::i;:::-;24877:2;24872:3;24868:12;24861:19;;24520:366;;;:::o;24892:::-;25034:3;25055:67;25119:2;25114:3;25055:67;:::i;:::-;25048:74;;25131:93;25220:3;25131:93;:::i;:::-;25249:2;25244:3;25240:12;25233:19;;24892:366;;;:::o;25264:::-;25406:3;25427:67;25491:2;25486:3;25427:67;:::i;:::-;25420:74;;25503:93;25592:3;25503:93;:::i;:::-;25621:2;25616:3;25612:12;25605:19;;25264:366;;;:::o;25636:::-;25778:3;25799:67;25863:2;25858:3;25799:67;:::i;:::-;25792:74;;25875:93;25964:3;25875:93;:::i;:::-;25993:2;25988:3;25984:12;25977:19;;25636:366;;;:::o;26008:118::-;26095:24;26113:5;26095:24;:::i;:::-;26090:3;26083:37;26008:118;;:::o;26132:115::-;26217:23;26234:5;26217:23;:::i;:::-;26212:3;26205:36;26132:115;;:::o;26253:::-;26338:23;26355:5;26338:23;:::i;:::-;26333:3;26326:36;26253:115;;:::o;26374:256::-;26486:3;26501:75;26572:3;26563:6;26501:75;:::i;:::-;26601:2;26596:3;26592:12;26585:19;;26621:3;26614:10;;26374:256;;;;:::o;26636:435::-;26816:3;26838:95;26929:3;26920:6;26838:95;:::i;:::-;26831:102;;26950:95;27041:3;27032:6;26950:95;:::i;:::-;26943:102;;27062:3;27055:10;;26636:435;;;;;:::o;27077:541::-;27310:3;27332:95;27423:3;27414:6;27332:95;:::i;:::-;27325:102;;27444:148;27588:3;27444:148;:::i;:::-;27437:155;;27609:3;27602:10;;27077:541;;;;:::o;27624:379::-;27808:3;27830:147;27973:3;27830:147;:::i;:::-;27823:154;;27994:3;27987:10;;27624:379;;;:::o;28009:222::-;28102:4;28140:2;28129:9;28125:18;28117:26;;28153:71;28221:1;28210:9;28206:17;28197:6;28153:71;:::i;:::-;28009:222;;;;:::o;28237:640::-;28432:4;28470:3;28459:9;28455:19;28447:27;;28484:71;28552:1;28541:9;28537:17;28528:6;28484:71;:::i;:::-;28565:72;28633:2;28622:9;28618:18;28609:6;28565:72;:::i;:::-;28647;28715:2;28704:9;28700:18;28691:6;28647:72;:::i;:::-;28766:9;28760:4;28756:20;28751:2;28740:9;28736:18;28729:48;28794:76;28865:4;28856:6;28794:76;:::i;:::-;28786:84;;28237:640;;;;;;;:::o;28883:210::-;28970:4;29008:2;28997:9;28993:18;28985:26;;29021:65;29083:1;29072:9;29068:17;29059:6;29021:65;:::i;:::-;28883:210;;;;:::o;29099:313::-;29212:4;29250:2;29239:9;29235:18;29227:26;;29299:9;29293:4;29289:20;29285:1;29274:9;29270:17;29263:47;29327:78;29400:4;29391:6;29327:78;:::i;:::-;29319:86;;29099:313;;;;:::o;29418:419::-;29584:4;29622:2;29611:9;29607:18;29599:26;;29671:9;29665:4;29661:20;29657:1;29646:9;29642:17;29635:47;29699:131;29825:4;29699:131;:::i;:::-;29691:139;;29418:419;;;:::o;29843:::-;30009:4;30047:2;30036:9;30032:18;30024:26;;30096:9;30090:4;30086:20;30082:1;30071:9;30067:17;30060:47;30124:131;30250:4;30124:131;:::i;:::-;30116:139;;29843:419;;;:::o;30268:::-;30434:4;30472:2;30461:9;30457:18;30449:26;;30521:9;30515:4;30511:20;30507:1;30496:9;30492:17;30485:47;30549:131;30675:4;30549:131;:::i;:::-;30541:139;;30268:419;;;:::o;30693:::-;30859:4;30897:2;30886:9;30882:18;30874:26;;30946:9;30940:4;30936:20;30932:1;30921:9;30917:17;30910:47;30974:131;31100:4;30974:131;:::i;:::-;30966:139;;30693:419;;;:::o;31118:::-;31284:4;31322:2;31311:9;31307:18;31299:26;;31371:9;31365:4;31361:20;31357:1;31346:9;31342:17;31335:47;31399:131;31525:4;31399:131;:::i;:::-;31391:139;;31118:419;;;:::o;31543:::-;31709:4;31747:2;31736:9;31732:18;31724:26;;31796:9;31790:4;31786:20;31782:1;31771:9;31767:17;31760:47;31824:131;31950:4;31824:131;:::i;:::-;31816:139;;31543:419;;;:::o;31968:::-;32134:4;32172:2;32161:9;32157:18;32149:26;;32221:9;32215:4;32211:20;32207:1;32196:9;32192:17;32185:47;32249:131;32375:4;32249:131;:::i;:::-;32241:139;;31968:419;;;:::o;32393:::-;32559:4;32597:2;32586:9;32582:18;32574:26;;32646:9;32640:4;32636:20;32632:1;32621:9;32617:17;32610:47;32674:131;32800:4;32674:131;:::i;:::-;32666:139;;32393:419;;;:::o;32818:::-;32984:4;33022:2;33011:9;33007:18;32999:26;;33071:9;33065:4;33061:20;33057:1;33046:9;33042:17;33035:47;33099:131;33225:4;33099:131;:::i;:::-;33091:139;;32818:419;;;:::o;33243:::-;33409:4;33447:2;33436:9;33432:18;33424:26;;33496:9;33490:4;33486:20;33482:1;33471:9;33467:17;33460:47;33524:131;33650:4;33524:131;:::i;:::-;33516:139;;33243:419;;;:::o;33668:::-;33834:4;33872:2;33861:9;33857:18;33849:26;;33921:9;33915:4;33911:20;33907:1;33896:9;33892:17;33885:47;33949:131;34075:4;33949:131;:::i;:::-;33941:139;;33668:419;;;:::o;34093:::-;34259:4;34297:2;34286:9;34282:18;34274:26;;34346:9;34340:4;34336:20;34332:1;34321:9;34317:17;34310:47;34374:131;34500:4;34374:131;:::i;:::-;34366:139;;34093:419;;;:::o;34518:::-;34684:4;34722:2;34711:9;34707:18;34699:26;;34771:9;34765:4;34761:20;34757:1;34746:9;34742:17;34735:47;34799:131;34925:4;34799:131;:::i;:::-;34791:139;;34518:419;;;:::o;34943:::-;35109:4;35147:2;35136:9;35132:18;35124:26;;35196:9;35190:4;35186:20;35182:1;35171:9;35167:17;35160:47;35224:131;35350:4;35224:131;:::i;:::-;35216:139;;34943:419;;;:::o;35368:::-;35534:4;35572:2;35561:9;35557:18;35549:26;;35621:9;35615:4;35611:20;35607:1;35596:9;35592:17;35585:47;35649:131;35775:4;35649:131;:::i;:::-;35641:139;;35368:419;;;:::o;35793:::-;35959:4;35997:2;35986:9;35982:18;35974:26;;36046:9;36040:4;36036:20;36032:1;36021:9;36017:17;36010:47;36074:131;36200:4;36074:131;:::i;:::-;36066:139;;35793:419;;;:::o;36218:::-;36384:4;36422:2;36411:9;36407:18;36399:26;;36471:9;36465:4;36461:20;36457:1;36446:9;36442:17;36435:47;36499:131;36625:4;36499:131;:::i;:::-;36491:139;;36218:419;;;:::o;36643:::-;36809:4;36847:2;36836:9;36832:18;36824:26;;36896:9;36890:4;36886:20;36882:1;36871:9;36867:17;36860:47;36924:131;37050:4;36924:131;:::i;:::-;36916:139;;36643:419;;;:::o;37068:::-;37234:4;37272:2;37261:9;37257:18;37249:26;;37321:9;37315:4;37311:20;37307:1;37296:9;37292:17;37285:47;37349:131;37475:4;37349:131;:::i;:::-;37341:139;;37068:419;;;:::o;37493:::-;37659:4;37697:2;37686:9;37682:18;37674:26;;37746:9;37740:4;37736:20;37732:1;37721:9;37717:17;37710:47;37774:131;37900:4;37774:131;:::i;:::-;37766:139;;37493:419;;;:::o;37918:::-;38084:4;38122:2;38111:9;38107:18;38099:26;;38171:9;38165:4;38161:20;38157:1;38146:9;38142:17;38135:47;38199:131;38325:4;38199:131;:::i;:::-;38191:139;;37918:419;;;:::o;38343:::-;38509:4;38547:2;38536:9;38532:18;38524:26;;38596:9;38590:4;38586:20;38582:1;38571:9;38567:17;38560:47;38624:131;38750:4;38624:131;:::i;:::-;38616:139;;38343:419;;;:::o;38768:::-;38934:4;38972:2;38961:9;38957:18;38949:26;;39021:9;39015:4;39011:20;39007:1;38996:9;38992:17;38985:47;39049:131;39175:4;39049:131;:::i;:::-;39041:139;;38768:419;;;:::o;39193:::-;39359:4;39397:2;39386:9;39382:18;39374:26;;39446:9;39440:4;39436:20;39432:1;39421:9;39417:17;39410:47;39474:131;39600:4;39474:131;:::i;:::-;39466:139;;39193:419;;;:::o;39618:::-;39784:4;39822:2;39811:9;39807:18;39799:26;;39871:9;39865:4;39861:20;39857:1;39846:9;39842:17;39835:47;39899:131;40025:4;39899:131;:::i;:::-;39891:139;;39618:419;;;:::o;40043:::-;40209:4;40247:2;40236:9;40232:18;40224:26;;40296:9;40290:4;40286:20;40282:1;40271:9;40267:17;40260:47;40324:131;40450:4;40324:131;:::i;:::-;40316:139;;40043:419;;;:::o;40468:::-;40634:4;40672:2;40661:9;40657:18;40649:26;;40721:9;40715:4;40711:20;40707:1;40696:9;40692:17;40685:47;40749:131;40875:4;40749:131;:::i;:::-;40741:139;;40468:419;;;:::o;40893:::-;41059:4;41097:2;41086:9;41082:18;41074:26;;41146:9;41140:4;41136:20;41132:1;41121:9;41117:17;41110:47;41174:131;41300:4;41174:131;:::i;:::-;41166:139;;40893:419;;;:::o;41318:222::-;41411:4;41449:2;41438:9;41434:18;41426:26;;41462:71;41530:1;41519:9;41515:17;41506:6;41462:71;:::i;:::-;41318:222;;;;:::o;41546:644::-;41741:4;41779:3;41768:9;41764:19;41756:27;;41793:69;41859:1;41848:9;41844:17;41835:6;41793:69;:::i;:::-;41872:70;41938:2;41927:9;41923:18;41914:6;41872:70;:::i;:::-;41952;42018:2;42007:9;42003:18;41994:6;41952:70;:::i;:::-;42032;42098:2;42087:9;42083:18;42074:6;42032:70;:::i;:::-;42112:71;42178:3;42167:9;42163:19;42154:6;42112:71;:::i;:::-;41546:644;;;;;;;;:::o;42196:129::-;42230:6;42257:20;;:::i;:::-;42247:30;;42286:33;42314:4;42306:6;42286:33;:::i;:::-;42196:129;;;:::o;42331:75::-;42364:6;42397:2;42391:9;42381:19;;42331:75;:::o;42412:311::-;42489:4;42579:18;42571:6;42568:30;42565:56;;;42601:18;;:::i;:::-;42565:56;42651:4;42643:6;42639:17;42631:25;;42711:4;42705;42701:15;42693:23;;42412:311;;;:::o;42729:307::-;42790:4;42880:18;42872:6;42869:30;42866:56;;;42902:18;;:::i;:::-;42866:56;42940:29;42962:6;42940:29;:::i;:::-;42932:37;;43024:4;43018;43014:15;43006:23;;42729:307;;;:::o;43042:98::-;43093:6;43127:5;43121:12;43111:22;;43042:98;;;:::o;43146:99::-;43198:6;43232:5;43226:12;43216:22;;43146:99;;;:::o;43251:168::-;43334:11;43368:6;43363:3;43356:19;43408:4;43403:3;43399:14;43384:29;;43251:168;;;;:::o;43425:147::-;43526:11;43563:3;43548:18;;43425:147;;;;:::o;43578:169::-;43662:11;43696:6;43691:3;43684:19;43736:4;43731:3;43727:14;43712:29;;43578:169;;;;:::o;43753:148::-;43855:11;43892:3;43877:18;;43753:148;;;;:::o;43907:305::-;43947:3;43966:20;43984:1;43966:20;:::i;:::-;43961:25;;44000:20;44018:1;44000:20;:::i;:::-;43995:25;;44154:1;44086:66;44082:74;44079:1;44076:81;44073:107;;;44160:18;;:::i;:::-;44073:107;44204:1;44201;44197:9;44190:16;;43907:305;;;;:::o;44218:185::-;44258:1;44275:20;44293:1;44275:20;:::i;:::-;44270:25;;44309:20;44327:1;44309:20;:::i;:::-;44304:25;;44348:1;44338:35;;44353:18;;:::i;:::-;44338:35;44395:1;44392;44388:9;44383:14;;44218:185;;;;:::o;44409:348::-;44449:7;44472:20;44490:1;44472:20;:::i;:::-;44467:25;;44506:20;44524:1;44506:20;:::i;:::-;44501:25;;44694:1;44626:66;44622:74;44619:1;44616:81;44611:1;44604:9;44597:17;44593:105;44590:131;;;44701:18;;:::i;:::-;44590:131;44749:1;44746;44742:9;44731:20;;44409:348;;;;:::o;44763:191::-;44803:4;44823:20;44841:1;44823:20;:::i;:::-;44818:25;;44857:20;44875:1;44857:20;:::i;:::-;44852:25;;44896:1;44893;44890:8;44887:34;;;44901:18;;:::i;:::-;44887:34;44946:1;44943;44939:9;44931:17;;44763:191;;;;:::o;44960:96::-;44997:7;45026:24;45044:5;45026:24;:::i;:::-;45015:35;;44960:96;;;:::o;45062:90::-;45096:7;45139:5;45132:13;45125:21;45114:32;;45062:90;;;:::o;45158:77::-;45195:7;45224:5;45213:16;;45158:77;;;:::o;45241:149::-;45277:7;45317:66;45310:5;45306:78;45295:89;;45241:149;;;:::o;45396:126::-;45433:7;45473:42;45466:5;45462:54;45451:65;;45396:126;;;:::o;45528:77::-;45565:7;45594:5;45583:16;;45528:77;;;:::o;45611:93::-;45647:7;45687:10;45680:5;45676:22;45665:33;;45611:93;;;:::o;45710:101::-;45746:7;45786:18;45779:5;45775:30;45764:41;;45710:101;;;:::o;45817:154::-;45901:6;45896:3;45891;45878:30;45963:1;45954:6;45949:3;45945:16;45938:27;45817:154;;;:::o;45977:307::-;46045:1;46055:113;46069:6;46066:1;46063:13;46055:113;;;46154:1;46149:3;46145:11;46139:18;46135:1;46130:3;46126:11;46119:39;46091:2;46088:1;46084:10;46079:15;;46055:113;;;46186:6;46183:1;46180:13;46177:101;;;46266:1;46257:6;46252:3;46248:16;46241:27;46177:101;46026:258;45977:307;;;:::o;46290:320::-;46334:6;46371:1;46365:4;46361:12;46351:22;;46418:1;46412:4;46408:12;46439:18;46429:81;;46495:4;46487:6;46483:17;46473:27;;46429:81;46557:2;46549:6;46546:14;46526:18;46523:38;46520:84;;;46576:18;;:::i;:::-;46520:84;46341:269;46290:320;;;:::o;46616:281::-;46699:27;46721:4;46699:27;:::i;:::-;46691:6;46687:40;46829:6;46817:10;46814:22;46793:18;46781:10;46778:34;46775:62;46772:88;;;46840:18;;:::i;:::-;46772:88;46880:10;46876:2;46869:22;46659:238;46616:281;;:::o;46903:233::-;46942:3;46965:24;46983:5;46965:24;:::i;:::-;46956:33;;47011:66;47004:5;47001:77;46998:103;;;47081:18;;:::i;:::-;46998:103;47128:1;47121:5;47117:13;47110:20;;46903:233;;;:::o;47142:100::-;47181:7;47210:26;47230:5;47210:26;:::i;:::-;47199:37;;47142:100;;;:::o;47248:94::-;47287:7;47316:20;47330:5;47316:20;:::i;:::-;47305:31;;47248:94;;;:::o;47348:176::-;47380:1;47397:20;47415:1;47397:20;:::i;:::-;47392:25;;47431:20;47449:1;47431:20;:::i;:::-;47426:25;;47470:1;47460:35;;47475:18;;:::i;:::-;47460:35;47516:1;47513;47509:9;47504:14;;47348:176;;;;:::o;47530:180::-;47578:77;47575:1;47568:88;47675:4;47672:1;47665:15;47699:4;47696:1;47689:15;47716:180;47764:77;47761:1;47754:88;47861:4;47858:1;47851:15;47885:4;47882:1;47875:15;47902:180;47950:77;47947:1;47940:88;48047:4;48044:1;48037:15;48071:4;48068:1;48061:15;48088:180;48136:77;48133:1;48126:88;48233:4;48230:1;48223:15;48257:4;48254:1;48247:15;48274:180;48322:77;48319:1;48312:88;48419:4;48416:1;48409:15;48443:4;48440:1;48433:15;48460:117;48569:1;48566;48559:12;48583:117;48692:1;48689;48682:12;48706:117;48815:1;48812;48805:12;48829:117;48938:1;48935;48928:12;48952:117;49061:1;49058;49051:12;49075:117;49184:1;49181;49174:12;49198:102;49239:6;49290:2;49286:7;49281:2;49274:5;49270:14;49266:28;49256:38;;49198:102;;;:::o;49306:94::-;49339:8;49387:5;49383:2;49379:14;49358:35;;49306:94;;;:::o;49406:167::-;49546:19;49542:1;49534:6;49530:14;49523:43;49406:167;:::o;49579:237::-;49719:34;49715:1;49707:6;49703:14;49696:58;49788:20;49783:2;49775:6;49771:15;49764:45;49579:237;:::o;49822:225::-;49962:34;49958:1;49950:6;49946:14;49939:58;50031:8;50026:2;50018:6;50014:15;50007:33;49822:225;:::o;50053:224::-;50193:34;50189:1;50181:6;50177:14;50170:58;50262:7;50257:2;50249:6;50245:15;50238:32;50053:224;:::o;50283:178::-;50423:30;50419:1;50411:6;50407:14;50400:54;50283:178;:::o;50467:228::-;50607:34;50603:1;50595:6;50591:14;50584:58;50676:11;50671:2;50663:6;50659:15;50652:36;50467:228;:::o;50701:223::-;50841:34;50837:1;50829:6;50825:14;50818:58;50910:6;50905:2;50897:6;50893:15;50886:31;50701:223;:::o;50930:175::-;51070:27;51066:1;51058:6;51054:14;51047:51;50930:175;:::o;51111:231::-;51251:34;51247:1;51239:6;51235:14;51228:58;51320:14;51315:2;51307:6;51303:15;51296:39;51111:231;:::o;51348:243::-;51488:34;51484:1;51476:6;51472:14;51465:58;51557:26;51552:2;51544:6;51540:15;51533:51;51348:243;:::o;51597:229::-;51737:34;51733:1;51725:6;51721:14;51714:58;51806:12;51801:2;51793:6;51789:15;51782:37;51597:229;:::o;51832:228::-;51972:34;51968:1;51960:6;51956:14;51949:58;52041:11;52036:2;52028:6;52024:15;52017:36;51832:228;:::o;52066:157::-;52206:9;52202:1;52194:6;52190:14;52183:33;52066:157;:::o;52229:168::-;52369:20;52365:1;52357:6;52353:14;52346:44;52229:168;:::o;52403:182::-;52543:34;52539:1;52531:6;52527:14;52520:58;52403:182;:::o;52591:173::-;52731:25;52727:1;52719:6;52715:14;52708:49;52591:173;:::o;52770:231::-;52910:34;52906:1;52898:6;52894:14;52887:58;52979:14;52974:2;52966:6;52962:15;52955:39;52770:231;:::o;53007:155::-;53147:7;53143:1;53135:6;53131:14;53124:31;53007:155;:::o;53168:177::-;53308:29;53304:1;53296:6;53292:14;53285:53;53168:177;:::o;53351:182::-;53491:34;53487:1;53479:6;53475:14;53468:58;53351:182;:::o;53539:234::-;53679:34;53675:1;53667:6;53663:14;53656:58;53748:17;53743:2;53735:6;53731:15;53724:42;53539:234;:::o;53779:220::-;53919:34;53915:1;53907:6;53903:14;53896:58;53988:3;53983:2;53975:6;53971:15;53964:28;53779:220;:::o;54005:179::-;54145:31;54141:1;54133:6;54129:14;54122:55;54005:179;:::o;54190:114::-;;:::o;54310:166::-;54450:18;54446:1;54438:6;54434:14;54427:42;54310:166;:::o;54482:236::-;54622:34;54618:1;54610:6;54606:14;54599:58;54691:19;54686:2;54678:6;54674:15;54667:44;54482:236;:::o;54724:177::-;54864:29;54860:1;54852:6;54848:14;54841:53;54724:177;:::o;54907:172::-;55047:24;55043:1;55035:6;55031:14;55024:48;54907:172;:::o;55085:296::-;55225:34;55221:1;55213:6;55209:14;55202:58;55294:34;55289:2;55281:6;55277:15;55270:59;55363:10;55358:2;55350:6;55346:15;55339:35;55085:296;:::o;55387:181::-;55527:33;55523:1;55515:6;55511:14;55504:57;55387:181;:::o;55574:122::-;55647:24;55665:5;55647:24;:::i;:::-;55640:5;55637:35;55627:63;;55686:1;55683;55676:12;55627:63;55574:122;:::o;55702:116::-;55772:21;55787:5;55772:21;:::i;:::-;55765:5;55762:32;55752:60;;55808:1;55805;55798:12;55752:60;55702:116;:::o;55824:122::-;55897:24;55915:5;55897:24;:::i;:::-;55890:5;55887:35;55877:63;;55936:1;55933;55926:12;55877:63;55824:122;:::o;55952:120::-;56024:23;56041:5;56024:23;:::i;:::-;56017:5;56014:34;56004:62;;56062:1;56059;56052:12;56004:62;55952:120;:::o;56078:122::-;56151:24;56169:5;56151:24;:::i;:::-;56144:5;56141:35;56131:63;;56190:1;56187;56180:12;56131:63;56078:122;:::o;56206:120::-;56278:23;56295:5;56278:23;:::i;:::-;56271:5;56268:34;56258:62;;56316:1;56313;56306:12;56258:62;56206:120;:::o;56332:::-;56404:23;56421:5;56404:23;:::i;:::-;56397:5;56394:34;56384:62;;56442:1;56439;56432:12;56384:62;56332:120;:::o

Swarm Source

ipfs://677cd99ccbb5eb321c7755779c62cd471dbdcf2b6e36188e2d4860fab1e87ef8
Loading...
Loading
Loading...
Loading
[ 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.