ETH Price: $3,314.24 (+1.19%)
Gas: 4 Gwei

Token

ThumbSelfLoathingGenesis (TSLG)
 

Overview

Max Total Supply

1,235 TSLG

Holders

365

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 TSLG
0x8023627afa6f626ce396c82b4ad5182f437be1c7
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:
SelfLoathing

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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/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/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: @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: ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.4;








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

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

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

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 1;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

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

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

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

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

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

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

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

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

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

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

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

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

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

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

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

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

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

    /**
     * @dev This is equivalent to _burn(tokenId, false)
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

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

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

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

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

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

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

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

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}
// File: ThumbsSLGenesis.sol


pragma solidity ^0.8.0;






contract SelfLoathing is ERC721A, Ownable {
    using Strings for uint256;
    mapping(address => uint256) public whitelistClaimed;
    mapping(address => uint256) public publicClaimed;

    string public hiddenMetadataUri;
    string public baseURI;
    string public baseExtension = ".json";
    bool public whitelistEnabled = true;
    bool public paused = true;
    bool public revealed;
    bytes32 public merkleRoot;
    uint256 public maxWhitelist = 4;
    uint256 public maxPublic = 2;
    uint256 public mintPerTx = 4;
    uint256 public maxSupply = 1235;
    uint256 public presaleCost = .12 ether;
    uint256 public publicCost = .14 ether;


    constructor(string memory _initBaseURI) ERC721A("ThumbSelfLoathingGenesis", "TSLG") {
        setBaseURI(_initBaseURI);
    }

    // whitelist mint
    function whitelistMint(uint256 quantity, bytes32[] calldata _merkleProof)
        public
        payable
    {
        uint256 supply = totalSupply();
        require(!paused, "The contract is paused!");
        require(quantity > 0, "Quantity Must Be Higher Than Zero");
        require(supply + quantity <= maxSupply, "Max Supply Reached");
        require(whitelistEnabled, "The whitelist sale is not enabled!");        
        require(
            whitelistClaimed[msg.sender] + quantity <= maxWhitelist,
            "You're not allowed to mint this Much!"
        );
        require(
            quantity <= maxPublic,
            "You're Not Allowed To Mint more than maxMint Amount"
        );
        require(msg.value >= presaleCost * quantity, "Not enough ether!");
        bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
        require(
            MerkleProof.verify(_merkleProof, merkleRoot, leaf),
            "Invalid proof!"
        );

        whitelistClaimed[msg.sender] += quantity;
        _safeMint(msg.sender, quantity);
    }

    // public mint
    function mint(uint256 quantity) external payable {
        uint256 supply = totalSupply();
        require(!paused, "The contract is paused!");
        require(!whitelistEnabled, "Public mint is disable!");
        require(quantity > 0, "Quantity Must Be Higher Than Zero!");
        require(supply + quantity <= maxSupply, "Max Supply Reached!");

        if (msg.sender != owner()) {
            require(
            publicClaimed[msg.sender] + quantity <= maxPublic,
                "You're not allowed to mint this Much!"
            );
            require(
                quantity <= maxPublic,
                "You're Not Allowed To Mint more than maxMint Amount"
            );
            require(msg.value >= publicCost * quantity, "Not enough ether!");
        }
        publicClaimed[msg.sender] += quantity;
        _safeMint(msg.sender, quantity);
    }

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

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

        if (!revealed) {
            return hiddenMetadataUri;
        }

        string memory currentBaseURI = _baseURI();

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

    function setMax(uint256 _whitelist, uint256 _public) public onlyOwner {
        maxWhitelist = _whitelist;
        maxPublic = _public;
    }

    function setMintPerTx(uint256 quantity) public onlyOwner {
        mintPerTx = quantity;
    }

    function setMaxSupply(uint256 _amount) public onlyOwner {
        maxSupply = _amount;
    }

    function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner {
        merkleRoot = _merkleRoot;
    }

    function setWhitelistEnabled(bool _state) public onlyOwner {
        whitelistEnabled = _state;
    }

    function flipSaleState() public onlyOwner {
        paused = !paused;
    }

    function setReveal(bool _state) public onlyOwner {
        revealed = _state;
    }

    function setPrice(uint256 _whitelistCost, uint256 _publicCost) public onlyOwner {
        presaleCost = _whitelistCost;
        publicCost = _publicCost;
    }

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

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

    function airdropNFTs(uint256 quantity, address _address) public onlyOwner {
        _safeMint(_address, quantity);
    }

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

    function withdraw() public onlyOwner {
        (bool hs, ) = payable(0xf8B8Ea28136911eeCAC2617e080089F623A6DCd6).call{value: address(this).balance * 90 / 100}("");
        require(hs);

        (bool ts, ) = payable(owner()).call{value: address(this).balance}("");
        require(ts);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"airdropNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleState","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":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPublic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPerTx","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":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"publicClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelist","type":"uint256"},{"internalType":"uint256","name":"_public","type":"uint256"}],"name":"setMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setMintPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelistCost","type":"uint256"},{"internalType":"uint256","name":"_publicCost","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setWhitelistEnabled","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":"address","name":"","type":"address"}],"name":"whitelistClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d90805190602001906200005192919062000382565b506001600e60006101000a81548160ff0219169083151502179055506001600e60016101000a81548160ff0219169083151502179055506004601055600260115560046012556104d36013556701aa535d3d0c00006014556701f161421c8e0000601555348015620000c257600080fd5b5060405162005476380380620054768339818101604052810190620000e89190620004b0565b6040518060400160405280601881526020017f5468756d6253656c664c6f617468696e6747656e6573697300000000000000008152506040518060400160405280600481526020017f54534c470000000000000000000000000000000000000000000000000000000081525081600290805190602001906200016c92919062000382565b5080600390805190602001906200018592919062000382565b5062000196620001d660201b60201c565b6000819055505050620001be620001b2620001df60201b60201c565b620001e760201b60201c565b620001cf81620002ad60201b60201c565b5062000708565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002bd620001df60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002e36200035860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200033c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003339062000528565b60405180910390fd5b80600c90805190602001906200035492919062000382565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200039090620005f0565b90600052602060002090601f016020900481019282620003b4576000855562000400565b82601f10620003cf57805160ff191683800117855562000400565b8280016001018555821562000400579182015b82811115620003ff578251825591602001919060010190620003e2565b5b5090506200040f919062000413565b5090565b5b808211156200042e57600081600090555060010162000414565b5090565b600062000449620004438462000573565b6200054a565b905082815260208101848484011115620004685762000467620006bf565b5b62000475848285620005ba565b509392505050565b600082601f830112620004955762000494620006ba565b5b8151620004a784826020860162000432565b91505092915050565b600060208284031215620004c957620004c8620006c9565b5b600082015167ffffffffffffffff811115620004ea57620004e9620006c4565b5b620004f8848285016200047d565b91505092915050565b600062000510602083620005a9565b91506200051d82620006df565b602082019050919050565b60006020820190508181036000830152620005438162000501565b9050919050565b60006200055662000569565b905062000564828262000626565b919050565b6000604051905090565b600067ffffffffffffffff8211156200059157620005906200068b565b5b6200059c82620006ce565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620005da578082015181840152602081019050620005bd565b83811115620005ea576000848401525b50505050565b600060028204905060018216806200060957607f821691505b6020821081141562000620576200061f6200065c565b5b50919050565b6200063182620006ce565b810181811067ffffffffffffffff821117156200065357620006526200068b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614d5e80620007186000396000f3fe6080604052600436106102885760003560e01c80636f8b44b01161015a578063b88d4fde116100c1578063d78e89bd1161007a578063d78e89bd14610966578063da3ef23f14610991578063db4bec44146109ba578063e985e9c5146109f7578063f2fde38b14610a34578063f7d9757714610a5d57610288565b8063b88d4fde14610863578063bf0d96c31461088c578063c6682862146108b7578063c87b56dd146108e2578063d2cab0561461091f578063d5abeb011461093b57610288565b80638da5cb5b116101135780638da5cb5b1461076057806395d89b411461078b578063a0712d68146107b6578063a22cb465146107d2578063a45ba8e7146107fb578063b5b1cd7c1461082657610288565b80636f8b44b01461066457806370a082311461068d578063715018a6146106ca5780637cb64759146106e15780637dc429751461070a5780638693da201461073557610288565b806334918dfd116101fe57806351830227116101b7578063518302271461055257806351fb012d1461057d57806355f804b3146105a85780635c975abb146105d15780636352211e146105fc5780636c0360eb1461063957610288565b806334918dfd146104805780633b91ceef146104975780633ccfd60b146104c057806342842e0e146104d7578063481fbef0146105005780634fdd43cb1461052957610288565b806318160ddd1161025057806318160ddd146103845780632137ef8e146103af57806323b872dd146103d85780632a23d07d146104015780632a3f300c1461042c5780632eb4a7ab1461045557610288565b806301ffc9a71461028d578063052d9e7e146102ca57806306fdde03146102f3578063081812fc1461031e578063095ea7b31461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613c56565b610a86565b6040516102c19190614250565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec9190613bfc565b610b68565b005b3480156102ff57600080fd5b50610308610c01565b6040516103159190614286565b60405180910390f35b34801561032a57600080fd5b5061034560048036038101906103409190613cf9565b610c93565b60405161035291906141e9565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d9190613bbc565b610d0f565b005b34801561039057600080fd5b50610399610e1a565b6040516103a69190614468565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d19190613d26565b610e31565b005b3480156103e457600080fd5b506103ff60048036038101906103fa9190613aa6565b610ebb565b005b34801561040d57600080fd5b50610416610ecb565b6040516104239190614468565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e9190613bfc565b610ed1565b005b34801561046157600080fd5b5061046a610f6a565b604051610477919061426b565b60405180910390f35b34801561048c57600080fd5b50610495610f70565b005b3480156104a357600080fd5b506104be60048036038101906104b99190613dc6565b611018565b005b3480156104cc57600080fd5b506104d56110a6565b005b3480156104e357600080fd5b506104fe60048036038101906104f99190613aa6565b611245565b005b34801561050c57600080fd5b5061052760048036038101906105229190613cf9565b611265565b005b34801561053557600080fd5b50610550600480360381019061054b9190613cb0565b6112eb565b005b34801561055e57600080fd5b50610567611381565b6040516105749190614250565b60405180910390f35b34801561058957600080fd5b50610592611394565b60405161059f9190614250565b60405180910390f35b3480156105b457600080fd5b506105cf60048036038101906105ca9190613cb0565b6113a7565b005b3480156105dd57600080fd5b506105e661143d565b6040516105f39190614250565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190613cf9565b611450565b60405161063091906141e9565b60405180910390f35b34801561064557600080fd5b5061064e611466565b60405161065b9190614286565b60405180910390f35b34801561067057600080fd5b5061068b60048036038101906106869190613cf9565b6114f4565b005b34801561069957600080fd5b506106b460048036038101906106af9190613a39565b61157a565b6040516106c19190614468565b60405180910390f35b3480156106d657600080fd5b506106df61164a565b005b3480156106ed57600080fd5b5061070860048036038101906107039190613c29565b6116d2565b005b34801561071657600080fd5b5061071f611758565b60405161072c9190614468565b60405180910390f35b34801561074157600080fd5b5061074a61175e565b6040516107579190614468565b60405180910390f35b34801561076c57600080fd5b50610775611764565b60405161078291906141e9565b60405180910390f35b34801561079757600080fd5b506107a061178e565b6040516107ad9190614286565b60405180910390f35b6107d060048036038101906107cb9190613cf9565b611820565b005b3480156107de57600080fd5b506107f960048036038101906107f49190613b7c565b611b22565b005b34801561080757600080fd5b50610810611c9a565b60405161081d9190614286565b60405180910390f35b34801561083257600080fd5b5061084d60048036038101906108489190613a39565b611d28565b60405161085a9190614468565b60405180910390f35b34801561086f57600080fd5b5061088a60048036038101906108859190613af9565b611d40565b005b34801561089857600080fd5b506108a1611dbc565b6040516108ae9190614468565b60405180910390f35b3480156108c357600080fd5b506108cc611dc2565b6040516108d99190614286565b60405180910390f35b3480156108ee57600080fd5b5061090960048036038101906109049190613cf9565b611e50565b6040516109169190614286565b60405180910390f35b61093960048036038101906109349190613d66565b611fa1565b005b34801561094757600080fd5b50610950612322565b60405161095d9190614468565b60405180910390f35b34801561097257600080fd5b5061097b612328565b6040516109889190614468565b60405180910390f35b34801561099d57600080fd5b506109b860048036038101906109b39190613cb0565b61232e565b005b3480156109c657600080fd5b506109e160048036038101906109dc9190613a39565b6123c4565b6040516109ee9190614468565b60405180910390f35b348015610a0357600080fd5b50610a1e6004803603810190610a199190613a66565b6123dc565b604051610a2b9190614250565b60405180910390f35b348015610a4057600080fd5b50610a5b6004803603810190610a569190613a39565b612470565b005b348015610a6957600080fd5b50610a846004803603810190610a7f9190613dc6565b612568565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b5157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b615750610b60826125f6565b5b9050919050565b610b70612660565b73ffffffffffffffffffffffffffffffffffffffff16610b8e611764565b73ffffffffffffffffffffffffffffffffffffffff1614610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb90614348565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b606060028054610c1090614742565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3c90614742565b8015610c895780601f10610c5e57610100808354040283529160200191610c89565b820191906000526020600020905b815481529060010190602001808311610c6c57829003601f168201915b5050505050905090565b6000610c9e82612668565b610cd4576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d1a82611450565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d82576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610da1612660565b73ffffffffffffffffffffffffffffffffffffffff1614158015610dd35750610dd181610dcc612660565b6123dc565b155b15610e0a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e158383836126b6565b505050565b6000610e24612768565b6001546000540303905090565b610e39612660565b73ffffffffffffffffffffffffffffffffffffffff16610e57611764565b73ffffffffffffffffffffffffffffffffffffffff1614610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490614348565b60405180910390fd5b610eb78183612771565b5050565b610ec683838361278f565b505050565b60145481565b610ed9612660565b73ffffffffffffffffffffffffffffffffffffffff16610ef7611764565b73ffffffffffffffffffffffffffffffffffffffff1614610f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4490614348565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b600f5481565b610f78612660565b73ffffffffffffffffffffffffffffffffffffffff16610f96611764565b73ffffffffffffffffffffffffffffffffffffffff1614610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe390614348565b60405180910390fd5b600e60019054906101000a900460ff1615600e60016101000a81548160ff021916908315150217905550565b611020612660565b73ffffffffffffffffffffffffffffffffffffffff1661103e611764565b73ffffffffffffffffffffffffffffffffffffffff1614611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90614348565b60405180910390fd5b81601081905550806011819055505050565b6110ae612660565b73ffffffffffffffffffffffffffffffffffffffff166110cc611764565b73ffffffffffffffffffffffffffffffffffffffff1614611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111990614348565b60405180910390fd5b600073f8b8ea28136911eecac2617e080089f623a6dcd673ffffffffffffffffffffffffffffffffffffffff166064605a4761115e91906145f4565b61116891906145c3565b604051611174906141d4565b60006040518083038185875af1925050503d80600081146111b1576040519150601f19603f3d011682016040523d82523d6000602084013e6111b6565b606091505b50509050806111c457600080fd5b60006111ce611764565b73ffffffffffffffffffffffffffffffffffffffff16476040516111f1906141d4565b60006040518083038185875af1925050503d806000811461122e576040519150601f19603f3d011682016040523d82523d6000602084013e611233565b606091505b505090508061124157600080fd5b5050565b61126083838360405180602001604052806000815250611d40565b505050565b61126d612660565b73ffffffffffffffffffffffffffffffffffffffff1661128b611764565b73ffffffffffffffffffffffffffffffffffffffff16146112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d890614348565b60405180910390fd5b8060128190555050565b6112f3612660565b73ffffffffffffffffffffffffffffffffffffffff16611311611764565b73ffffffffffffffffffffffffffffffffffffffff1614611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e90614348565b60405180910390fd5b80600b908051906020019061137d92919061379f565b5050565b600e60029054906101000a900460ff1681565b600e60009054906101000a900460ff1681565b6113af612660565b73ffffffffffffffffffffffffffffffffffffffff166113cd611764565b73ffffffffffffffffffffffffffffffffffffffff1614611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a90614348565b60405180910390fd5b80600c908051906020019061143992919061379f565b5050565b600e60019054906101000a900460ff1681565b600061145b82612c45565b600001519050919050565b600c805461147390614742565b80601f016020809104026020016040519081016040528092919081815260200182805461149f90614742565b80156114ec5780601f106114c1576101008083540402835291602001916114ec565b820191906000526020600020905b8154815290600101906020018083116114cf57829003601f168201915b505050505081565b6114fc612660565b73ffffffffffffffffffffffffffffffffffffffff1661151a611764565b73ffffffffffffffffffffffffffffffffffffffff1614611570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156790614348565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e2576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611652612660565b73ffffffffffffffffffffffffffffffffffffffff16611670611764565b73ffffffffffffffffffffffffffffffffffffffff16146116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90614348565b60405180910390fd5b6116d06000612ed4565b565b6116da612660565b73ffffffffffffffffffffffffffffffffffffffff166116f8611764565b73ffffffffffffffffffffffffffffffffffffffff161461174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590614348565b60405180910390fd5b80600f8190555050565b60115481565b60155481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461179d90614742565b80601f01602080910402602001604051908101604052809291908181526020018280546117c990614742565b80156118165780601f106117eb57610100808354040283529160200191611816565b820191906000526020600020905b8154815290600101906020018083116117f957829003601f168201915b5050505050905090565b600061182a610e1a565b9050600e60019054906101000a900460ff161561187c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187390614368565b60405180910390fd5b600e60009054906101000a900460ff16156118cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c3906143c8565b60405180910390fd5b6000821161190f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611906906143a8565b60405180910390fd5b601354828261191e919061456d565b111561195f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195690614448565b60405180910390fd5b611967611764565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611abe5760115482600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e7919061456d565b1115611a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1f906142c8565b60405180910390fd5b601154821115611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a64906143e8565b60405180910390fd5b81601554611a7b91906145f4565b341015611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab4906142a8565b60405180910390fd5b5b81600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b0d919061456d565b92505081905550611b1e3383612771565b5050565b611b2a612660565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b8f576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611b9c612660565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c49612660565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c8e9190614250565b60405180910390a35050565b600b8054611ca790614742565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd390614742565b8015611d205780601f10611cf557610100808354040283529160200191611d20565b820191906000526020600020905b815481529060010190602001808311611d0357829003601f168201915b505050505081565b600a6020528060005260406000206000915090505481565b611d4b84848461278f565b611d6a8373ffffffffffffffffffffffffffffffffffffffff16612f9a565b8015611d7f5750611d7d84848484612fbd565b155b15611db6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60105481565b600d8054611dcf90614742565b80601f0160208091040260200160405190810160405280929190818152602001828054611dfb90614742565b8015611e485780601f10611e1d57610100808354040283529160200191611e48565b820191906000526020600020905b815481529060010190602001808311611e2b57829003601f168201915b505050505081565b6060611e5b82612668565b611e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9190614388565b60405180910390fd5b600e60029054906101000a900460ff16611f4057600b8054611ebb90614742565b80601f0160208091040260200160405190810160405280929190818152602001828054611ee790614742565b8015611f345780601f10611f0957610100808354040283529160200191611f34565b820191906000526020600020905b815481529060010190602001808311611f1757829003601f168201915b50505050509050611f9c565b6000611f4a61311d565b90506000815111611f6a5760405180602001604052806000815250611f98565b80611f74846131af565b600d604051602001611f88939291906141a3565b6040516020818303038152906040525b9150505b919050565b6000611fab610e1a565b9050600e60019054906101000a900460ff1615611ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff490614368565b60405180910390fd5b60008411612040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203790614328565b60405180910390fd5b601354848261204f919061456d565b1115612090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208790614428565b60405180910390fd5b600e60009054906101000a900460ff166120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690614408565b60405180910390fd5b60105484600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461212d919061456d565b111561216e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612165906142c8565b60405180910390fd5b6011548411156121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa906143e8565b60405180910390fd5b836014546121c191906145f4565b341015612203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fa906142a8565b60405180910390fd5b6000336040516020016122169190614188565b60405160208183030381529060405280519060200120905061227c848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f5483613310565b6122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b2906142e8565b60405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461230a919061456d565b9250508190555061231b3386612771565b5050505050565b60135481565b60125481565b612336612660565b73ffffffffffffffffffffffffffffffffffffffff16612354611764565b73ffffffffffffffffffffffffffffffffffffffff16146123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a190614348565b60405180910390fd5b80600d90805190602001906123c092919061379f565b5050565b60096020528060005260406000206000915090505481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612478612660565b73ffffffffffffffffffffffffffffffffffffffff16612496611764565b73ffffffffffffffffffffffffffffffffffffffff16146124ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e390614348565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561255c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255390614308565b60405180910390fd5b61256581612ed4565b50565b612570612660565b73ffffffffffffffffffffffffffffffffffffffff1661258e611764565b73ffffffffffffffffffffffffffffffffffffffff16146125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db90614348565b60405180910390fd5b81601481905550806015819055505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600081612673612768565b11158015612682575060005482105b80156126af575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b61278b828260405180602001604052806000815250613327565b5050565b600061279a82612c45565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612805576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612826612660565b73ffffffffffffffffffffffffffffffffffffffff16148061285557506128548561284f612660565b6123dc565b5b8061289a5750612863612660565b73ffffffffffffffffffffffffffffffffffffffff1661288284610c93565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806128d3576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561293a576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129478585856001613339565b612953600084876126b6565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612bd3576000548214612bd257878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c3e858585600161333f565b5050505050565b612c4d613825565b600082905080612c5b612768565b11158015612c6a575060005481105b15612e9d576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612e9b57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d7f578092505050612ecf565b5b600115612e9a57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e95578092505050612ecf565b612d80565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fe3612660565b8786866040518563ffffffff1660e01b81526004016130059493929190614204565b602060405180830381600087803b15801561301f57600080fd5b505af192505050801561305057506040513d601f19601f8201168201806040525081019061304d9190613c83565b60015b6130ca573d8060008114613080576040519150601f19603f3d011682016040523d82523d6000602084013e613085565b606091505b506000815114156130c2576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c805461312c90614742565b80601f016020809104026020016040519081016040528092919081815260200182805461315890614742565b80156131a55780601f1061317a576101008083540402835291602001916131a5565b820191906000526020600020905b81548152906001019060200180831161318857829003601f168201915b5050505050905090565b606060008214156131f7576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061330b565b600082905060005b60008214613229578080613212906147a5565b915050600a8261322291906145c3565b91506131ff565b60008167ffffffffffffffff811115613245576132446148ff565b5b6040519080825280601f01601f1916602001820160405280156132775781602001600182028036833780820191505090505b5090505b6000851461330457600182613290919061464e565b9150600a8561329f9190614812565b60306132ab919061456d565b60f81b8183815181106132c1576132c06148d0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132fd91906145c3565b945061327b565b8093505050505b919050565b60008261331d8584613345565b1490509392505050565b61333483838360016133ba565b505050565b50505050565b50505050565b60008082905060005b84518110156133af57600085828151811061336c5761336b6148d0565b5b6020026020010151905080831161338e576133878382613788565b925061339b565b6133988184613788565b92505b5080806133a7906147a5565b91505061334e565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613427576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613462576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61346f6000868387613339565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561363957506136388773ffffffffffffffffffffffffffffffffffffffff16612f9a565b5b156136ff575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136ae6000888480600101955088612fbd565b6136e4576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561363f5782600054146136fa57600080fd5b61376b565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613700575b816000819055505050613781600086838761333f565b5050505050565b600082600052816020526040600020905092915050565b8280546137ab90614742565b90600052602060002090601f0160209004810192826137cd5760008555613814565b82601f106137e657805160ff1916838001178555613814565b82800160010185558215613814579182015b828111156138135782518255916020019190600101906137f8565b5b5090506138219190613868565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613881576000816000905550600101613869565b5090565b6000613898613893846144a8565b614483565b9050828152602081018484840111156138b4576138b361493d565b5b6138bf848285614700565b509392505050565b60006138da6138d5846144d9565b614483565b9050828152602081018484840111156138f6576138f561493d565b5b613901848285614700565b509392505050565b60008135905061391881614cb5565b92915050565b60008083601f84011261393457613933614933565b5b8235905067ffffffffffffffff8111156139515761395061492e565b5b60208301915083602082028301111561396d5761396c614938565b5b9250929050565b60008135905061398381614ccc565b92915050565b60008135905061399881614ce3565b92915050565b6000813590506139ad81614cfa565b92915050565b6000815190506139c281614cfa565b92915050565b600082601f8301126139dd576139dc614933565b5b81356139ed848260208601613885565b91505092915050565b600082601f830112613a0b57613a0a614933565b5b8135613a1b8482602086016138c7565b91505092915050565b600081359050613a3381614d11565b92915050565b600060208284031215613a4f57613a4e614947565b5b6000613a5d84828501613909565b91505092915050565b60008060408385031215613a7d57613a7c614947565b5b6000613a8b85828601613909565b9250506020613a9c85828601613909565b9150509250929050565b600080600060608486031215613abf57613abe614947565b5b6000613acd86828701613909565b9350506020613ade86828701613909565b9250506040613aef86828701613a24565b9150509250925092565b60008060008060808587031215613b1357613b12614947565b5b6000613b2187828801613909565b9450506020613b3287828801613909565b9350506040613b4387828801613a24565b925050606085013567ffffffffffffffff811115613b6457613b63614942565b5b613b70878288016139c8565b91505092959194509250565b60008060408385031215613b9357613b92614947565b5b6000613ba185828601613909565b9250506020613bb285828601613974565b9150509250929050565b60008060408385031215613bd357613bd2614947565b5b6000613be185828601613909565b9250506020613bf285828601613a24565b9150509250929050565b600060208284031215613c1257613c11614947565b5b6000613c2084828501613974565b91505092915050565b600060208284031215613c3f57613c3e614947565b5b6000613c4d84828501613989565b91505092915050565b600060208284031215613c6c57613c6b614947565b5b6000613c7a8482850161399e565b91505092915050565b600060208284031215613c9957613c98614947565b5b6000613ca7848285016139b3565b91505092915050565b600060208284031215613cc657613cc5614947565b5b600082013567ffffffffffffffff811115613ce457613ce3614942565b5b613cf0848285016139f6565b91505092915050565b600060208284031215613d0f57613d0e614947565b5b6000613d1d84828501613a24565b91505092915050565b60008060408385031215613d3d57613d3c614947565b5b6000613d4b85828601613a24565b9250506020613d5c85828601613909565b9150509250929050565b600080600060408486031215613d7f57613d7e614947565b5b6000613d8d86828701613a24565b935050602084013567ffffffffffffffff811115613dae57613dad614942565b5b613dba8682870161391e565b92509250509250925092565b60008060408385031215613ddd57613ddc614947565b5b6000613deb85828601613a24565b9250506020613dfc85828601613a24565b9150509250929050565b613e0f81614682565b82525050565b613e26613e2182614682565b6147ee565b82525050565b613e3581614694565b82525050565b613e44816146a0565b82525050565b6000613e558261451f565b613e5f8185614535565b9350613e6f81856020860161470f565b613e788161494c565b840191505092915050565b6000613e8e8261452a565b613e988185614551565b9350613ea881856020860161470f565b613eb18161494c565b840191505092915050565b6000613ec78261452a565b613ed18185614562565b9350613ee181856020860161470f565b80840191505092915050565b60008154613efa81614742565b613f048186614562565b94506001821660008114613f1f5760018114613f3057613f63565b60ff19831686528186019350613f63565b613f398561450a565b60005b83811015613f5b57815481890152600182019150602081019050613f3c565b838801955050505b50505092915050565b6000613f79601183614551565b9150613f848261496a565b602082019050919050565b6000613f9c602583614551565b9150613fa782614993565b604082019050919050565b6000613fbf600e83614551565b9150613fca826149e2565b602082019050919050565b6000613fe2602683614551565b9150613fed82614a0b565b604082019050919050565b6000614005602183614551565b915061401082614a5a565b604082019050919050565b6000614028602083614551565b915061403382614aa9565b602082019050919050565b600061404b601783614551565b915061405682614ad2565b602082019050919050565b600061406e602f83614551565b915061407982614afb565b604082019050919050565b6000614091602283614551565b915061409c82614b4a565b604082019050919050565b60006140b4601783614551565b91506140bf82614b99565b602082019050919050565b60006140d7603383614551565b91506140e282614bc2565b604082019050919050565b60006140fa600083614546565b915061410582614c11565b600082019050919050565b600061411d602283614551565b915061412882614c14565b604082019050919050565b6000614140601283614551565b915061414b82614c63565b602082019050919050565b6000614163601383614551565b915061416e82614c8c565b602082019050919050565b614182816146f6565b82525050565b60006141948284613e15565b60148201915081905092915050565b60006141af8286613ebc565b91506141bb8285613ebc565b91506141c78284613eed565b9150819050949350505050565b60006141df826140ed565b9150819050919050565b60006020820190506141fe6000830184613e06565b92915050565b60006080820190506142196000830187613e06565b6142266020830186613e06565b6142336040830185614179565b81810360608301526142458184613e4a565b905095945050505050565b60006020820190506142656000830184613e2c565b92915050565b60006020820190506142806000830184613e3b565b92915050565b600060208201905081810360008301526142a08184613e83565b905092915050565b600060208201905081810360008301526142c181613f6c565b9050919050565b600060208201905081810360008301526142e181613f8f565b9050919050565b6000602082019050818103600083015261430181613fb2565b9050919050565b6000602082019050818103600083015261432181613fd5565b9050919050565b6000602082019050818103600083015261434181613ff8565b9050919050565b600060208201905081810360008301526143618161401b565b9050919050565b600060208201905081810360008301526143818161403e565b9050919050565b600060208201905081810360008301526143a181614061565b9050919050565b600060208201905081810360008301526143c181614084565b9050919050565b600060208201905081810360008301526143e1816140a7565b9050919050565b60006020820190508181036000830152614401816140ca565b9050919050565b6000602082019050818103600083015261442181614110565b9050919050565b6000602082019050818103600083015261444181614133565b9050919050565b6000602082019050818103600083015261446181614156565b9050919050565b600060208201905061447d6000830184614179565b92915050565b600061448d61449e565b90506144998282614774565b919050565b6000604051905090565b600067ffffffffffffffff8211156144c3576144c26148ff565b5b6144cc8261494c565b9050602081019050919050565b600067ffffffffffffffff8211156144f4576144f36148ff565b5b6144fd8261494c565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614578826146f6565b9150614583836146f6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145b8576145b7614843565b5b828201905092915050565b60006145ce826146f6565b91506145d9836146f6565b9250826145e9576145e8614872565b5b828204905092915050565b60006145ff826146f6565b915061460a836146f6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561464357614642614843565b5b828202905092915050565b6000614659826146f6565b9150614664836146f6565b92508282101561467757614676614843565b5b828203905092915050565b600061468d826146d6565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561472d578082015181840152602081019050614712565b8381111561473c576000848401525b50505050565b6000600282049050600182168061475a57607f821691505b6020821081141561476e5761476d6148a1565b5b50919050565b61477d8261494c565b810181811067ffffffffffffffff8211171561479c5761479b6148ff565b5b80604052505050565b60006147b0826146f6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147e3576147e2614843565b5b600182019050919050565b60006147f982614800565b9050919050565b600061480b8261495d565b9050919050565b600061481d826146f6565b9150614828836146f6565b92508261483857614837614872565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4e6f7420656e6f75676820657468657221000000000000000000000000000000600082015250565b7f596f75277265206e6f7420616c6c6f77656420746f206d696e7420746869732060008201527f4d75636821000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642070726f6f6621000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5175616e74697479204d75737420426520486967686572205468616e205a657260008201527f6f00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f5175616e74697479204d75737420426520486967686572205468616e205a657260008201527f6f21000000000000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e742069732064697361626c6521000000000000000000600082015250565b7f596f75277265204e6f7420416c6c6f77656420546f204d696e74206d6f72652060008201527f7468616e206d61784d696e7420416d6f756e7400000000000000000000000000602082015250565b50565b7f5468652077686974656c6973742073616c65206973206e6f7420656e61626c6560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d617820537570706c7920526561636865640000000000000000000000000000600082015250565b7f4d617820537570706c7920526561636865642100000000000000000000000000600082015250565b614cbe81614682565b8114614cc957600080fd5b50565b614cd581614694565b8114614ce057600080fd5b50565b614cec816146a0565b8114614cf757600080fd5b50565b614d03816146aa565b8114614d0e57600080fd5b50565b614d1a816146f6565b8114614d2557600080fd5b5056fea26469706673582212203934262fd7489b9bb90e4e5601acd0bc181742073fd9d902a7d395dd78d609f864736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102885760003560e01c80636f8b44b01161015a578063b88d4fde116100c1578063d78e89bd1161007a578063d78e89bd14610966578063da3ef23f14610991578063db4bec44146109ba578063e985e9c5146109f7578063f2fde38b14610a34578063f7d9757714610a5d57610288565b8063b88d4fde14610863578063bf0d96c31461088c578063c6682862146108b7578063c87b56dd146108e2578063d2cab0561461091f578063d5abeb011461093b57610288565b80638da5cb5b116101135780638da5cb5b1461076057806395d89b411461078b578063a0712d68146107b6578063a22cb465146107d2578063a45ba8e7146107fb578063b5b1cd7c1461082657610288565b80636f8b44b01461066457806370a082311461068d578063715018a6146106ca5780637cb64759146106e15780637dc429751461070a5780638693da201461073557610288565b806334918dfd116101fe57806351830227116101b7578063518302271461055257806351fb012d1461057d57806355f804b3146105a85780635c975abb146105d15780636352211e146105fc5780636c0360eb1461063957610288565b806334918dfd146104805780633b91ceef146104975780633ccfd60b146104c057806342842e0e146104d7578063481fbef0146105005780634fdd43cb1461052957610288565b806318160ddd1161025057806318160ddd146103845780632137ef8e146103af57806323b872dd146103d85780632a23d07d146104015780632a3f300c1461042c5780632eb4a7ab1461045557610288565b806301ffc9a71461028d578063052d9e7e146102ca57806306fdde03146102f3578063081812fc1461031e578063095ea7b31461035b575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190613c56565b610a86565b6040516102c19190614250565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec9190613bfc565b610b68565b005b3480156102ff57600080fd5b50610308610c01565b6040516103159190614286565b60405180910390f35b34801561032a57600080fd5b5061034560048036038101906103409190613cf9565b610c93565b60405161035291906141e9565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d9190613bbc565b610d0f565b005b34801561039057600080fd5b50610399610e1a565b6040516103a69190614468565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d19190613d26565b610e31565b005b3480156103e457600080fd5b506103ff60048036038101906103fa9190613aa6565b610ebb565b005b34801561040d57600080fd5b50610416610ecb565b6040516104239190614468565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e9190613bfc565b610ed1565b005b34801561046157600080fd5b5061046a610f6a565b604051610477919061426b565b60405180910390f35b34801561048c57600080fd5b50610495610f70565b005b3480156104a357600080fd5b506104be60048036038101906104b99190613dc6565b611018565b005b3480156104cc57600080fd5b506104d56110a6565b005b3480156104e357600080fd5b506104fe60048036038101906104f99190613aa6565b611245565b005b34801561050c57600080fd5b5061052760048036038101906105229190613cf9565b611265565b005b34801561053557600080fd5b50610550600480360381019061054b9190613cb0565b6112eb565b005b34801561055e57600080fd5b50610567611381565b6040516105749190614250565b60405180910390f35b34801561058957600080fd5b50610592611394565b60405161059f9190614250565b60405180910390f35b3480156105b457600080fd5b506105cf60048036038101906105ca9190613cb0565b6113a7565b005b3480156105dd57600080fd5b506105e661143d565b6040516105f39190614250565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190613cf9565b611450565b60405161063091906141e9565b60405180910390f35b34801561064557600080fd5b5061064e611466565b60405161065b9190614286565b60405180910390f35b34801561067057600080fd5b5061068b60048036038101906106869190613cf9565b6114f4565b005b34801561069957600080fd5b506106b460048036038101906106af9190613a39565b61157a565b6040516106c19190614468565b60405180910390f35b3480156106d657600080fd5b506106df61164a565b005b3480156106ed57600080fd5b5061070860048036038101906107039190613c29565b6116d2565b005b34801561071657600080fd5b5061071f611758565b60405161072c9190614468565b60405180910390f35b34801561074157600080fd5b5061074a61175e565b6040516107579190614468565b60405180910390f35b34801561076c57600080fd5b50610775611764565b60405161078291906141e9565b60405180910390f35b34801561079757600080fd5b506107a061178e565b6040516107ad9190614286565b60405180910390f35b6107d060048036038101906107cb9190613cf9565b611820565b005b3480156107de57600080fd5b506107f960048036038101906107f49190613b7c565b611b22565b005b34801561080757600080fd5b50610810611c9a565b60405161081d9190614286565b60405180910390f35b34801561083257600080fd5b5061084d60048036038101906108489190613a39565b611d28565b60405161085a9190614468565b60405180910390f35b34801561086f57600080fd5b5061088a60048036038101906108859190613af9565b611d40565b005b34801561089857600080fd5b506108a1611dbc565b6040516108ae9190614468565b60405180910390f35b3480156108c357600080fd5b506108cc611dc2565b6040516108d99190614286565b60405180910390f35b3480156108ee57600080fd5b5061090960048036038101906109049190613cf9565b611e50565b6040516109169190614286565b60405180910390f35b61093960048036038101906109349190613d66565b611fa1565b005b34801561094757600080fd5b50610950612322565b60405161095d9190614468565b60405180910390f35b34801561097257600080fd5b5061097b612328565b6040516109889190614468565b60405180910390f35b34801561099d57600080fd5b506109b860048036038101906109b39190613cb0565b61232e565b005b3480156109c657600080fd5b506109e160048036038101906109dc9190613a39565b6123c4565b6040516109ee9190614468565b60405180910390f35b348015610a0357600080fd5b50610a1e6004803603810190610a199190613a66565b6123dc565b604051610a2b9190614250565b60405180910390f35b348015610a4057600080fd5b50610a5b6004803603810190610a569190613a39565b612470565b005b348015610a6957600080fd5b50610a846004803603810190610a7f9190613dc6565b612568565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b5157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b615750610b60826125f6565b5b9050919050565b610b70612660565b73ffffffffffffffffffffffffffffffffffffffff16610b8e611764565b73ffffffffffffffffffffffffffffffffffffffff1614610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb90614348565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b606060028054610c1090614742565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3c90614742565b8015610c895780601f10610c5e57610100808354040283529160200191610c89565b820191906000526020600020905b815481529060010190602001808311610c6c57829003601f168201915b5050505050905090565b6000610c9e82612668565b610cd4576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d1a82611450565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d82576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610da1612660565b73ffffffffffffffffffffffffffffffffffffffff1614158015610dd35750610dd181610dcc612660565b6123dc565b155b15610e0a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e158383836126b6565b505050565b6000610e24612768565b6001546000540303905090565b610e39612660565b73ffffffffffffffffffffffffffffffffffffffff16610e57611764565b73ffffffffffffffffffffffffffffffffffffffff1614610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490614348565b60405180910390fd5b610eb78183612771565b5050565b610ec683838361278f565b505050565b60145481565b610ed9612660565b73ffffffffffffffffffffffffffffffffffffffff16610ef7611764565b73ffffffffffffffffffffffffffffffffffffffff1614610f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4490614348565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b600f5481565b610f78612660565b73ffffffffffffffffffffffffffffffffffffffff16610f96611764565b73ffffffffffffffffffffffffffffffffffffffff1614610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe390614348565b60405180910390fd5b600e60019054906101000a900460ff1615600e60016101000a81548160ff021916908315150217905550565b611020612660565b73ffffffffffffffffffffffffffffffffffffffff1661103e611764565b73ffffffffffffffffffffffffffffffffffffffff1614611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90614348565b60405180910390fd5b81601081905550806011819055505050565b6110ae612660565b73ffffffffffffffffffffffffffffffffffffffff166110cc611764565b73ffffffffffffffffffffffffffffffffffffffff1614611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111990614348565b60405180910390fd5b600073f8b8ea28136911eecac2617e080089f623a6dcd673ffffffffffffffffffffffffffffffffffffffff166064605a4761115e91906145f4565b61116891906145c3565b604051611174906141d4565b60006040518083038185875af1925050503d80600081146111b1576040519150601f19603f3d011682016040523d82523d6000602084013e6111b6565b606091505b50509050806111c457600080fd5b60006111ce611764565b73ffffffffffffffffffffffffffffffffffffffff16476040516111f1906141d4565b60006040518083038185875af1925050503d806000811461122e576040519150601f19603f3d011682016040523d82523d6000602084013e611233565b606091505b505090508061124157600080fd5b5050565b61126083838360405180602001604052806000815250611d40565b505050565b61126d612660565b73ffffffffffffffffffffffffffffffffffffffff1661128b611764565b73ffffffffffffffffffffffffffffffffffffffff16146112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d890614348565b60405180910390fd5b8060128190555050565b6112f3612660565b73ffffffffffffffffffffffffffffffffffffffff16611311611764565b73ffffffffffffffffffffffffffffffffffffffff1614611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135e90614348565b60405180910390fd5b80600b908051906020019061137d92919061379f565b5050565b600e60029054906101000a900460ff1681565b600e60009054906101000a900460ff1681565b6113af612660565b73ffffffffffffffffffffffffffffffffffffffff166113cd611764565b73ffffffffffffffffffffffffffffffffffffffff1614611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141a90614348565b60405180910390fd5b80600c908051906020019061143992919061379f565b5050565b600e60019054906101000a900460ff1681565b600061145b82612c45565b600001519050919050565b600c805461147390614742565b80601f016020809104026020016040519081016040528092919081815260200182805461149f90614742565b80156114ec5780601f106114c1576101008083540402835291602001916114ec565b820191906000526020600020905b8154815290600101906020018083116114cf57829003601f168201915b505050505081565b6114fc612660565b73ffffffffffffffffffffffffffffffffffffffff1661151a611764565b73ffffffffffffffffffffffffffffffffffffffff1614611570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156790614348565b60405180910390fd5b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e2576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b611652612660565b73ffffffffffffffffffffffffffffffffffffffff16611670611764565b73ffffffffffffffffffffffffffffffffffffffff16146116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90614348565b60405180910390fd5b6116d06000612ed4565b565b6116da612660565b73ffffffffffffffffffffffffffffffffffffffff166116f8611764565b73ffffffffffffffffffffffffffffffffffffffff161461174e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174590614348565b60405180910390fd5b80600f8190555050565b60115481565b60155481565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461179d90614742565b80601f01602080910402602001604051908101604052809291908181526020018280546117c990614742565b80156118165780601f106117eb57610100808354040283529160200191611816565b820191906000526020600020905b8154815290600101906020018083116117f957829003601f168201915b5050505050905090565b600061182a610e1a565b9050600e60019054906101000a900460ff161561187c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187390614368565b60405180910390fd5b600e60009054906101000a900460ff16156118cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c3906143c8565b60405180910390fd5b6000821161190f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611906906143a8565b60405180910390fd5b601354828261191e919061456d565b111561195f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195690614448565b60405180910390fd5b611967611764565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611abe5760115482600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119e7919061456d565b1115611a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1f906142c8565b60405180910390fd5b601154821115611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a64906143e8565b60405180910390fd5b81601554611a7b91906145f4565b341015611abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab4906142a8565b60405180910390fd5b5b81600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b0d919061456d565b92505081905550611b1e3383612771565b5050565b611b2a612660565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b8f576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611b9c612660565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c49612660565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c8e9190614250565b60405180910390a35050565b600b8054611ca790614742565b80601f0160208091040260200160405190810160405280929190818152602001828054611cd390614742565b8015611d205780601f10611cf557610100808354040283529160200191611d20565b820191906000526020600020905b815481529060010190602001808311611d0357829003601f168201915b505050505081565b600a6020528060005260406000206000915090505481565b611d4b84848461278f565b611d6a8373ffffffffffffffffffffffffffffffffffffffff16612f9a565b8015611d7f5750611d7d84848484612fbd565b155b15611db6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60105481565b600d8054611dcf90614742565b80601f0160208091040260200160405190810160405280929190818152602001828054611dfb90614742565b8015611e485780601f10611e1d57610100808354040283529160200191611e48565b820191906000526020600020905b815481529060010190602001808311611e2b57829003601f168201915b505050505081565b6060611e5b82612668565b611e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9190614388565b60405180910390fd5b600e60029054906101000a900460ff16611f4057600b8054611ebb90614742565b80601f0160208091040260200160405190810160405280929190818152602001828054611ee790614742565b8015611f345780601f10611f0957610100808354040283529160200191611f34565b820191906000526020600020905b815481529060010190602001808311611f1757829003601f168201915b50505050509050611f9c565b6000611f4a61311d565b90506000815111611f6a5760405180602001604052806000815250611f98565b80611f74846131af565b600d604051602001611f88939291906141a3565b6040516020818303038152906040525b9150505b919050565b6000611fab610e1a565b9050600e60019054906101000a900460ff1615611ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff490614368565b60405180910390fd5b60008411612040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203790614328565b60405180910390fd5b601354848261204f919061456d565b1115612090576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208790614428565b60405180910390fd5b600e60009054906101000a900460ff166120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690614408565b60405180910390fd5b60105484600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461212d919061456d565b111561216e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612165906142c8565b60405180910390fd5b6011548411156121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa906143e8565b60405180910390fd5b836014546121c191906145f4565b341015612203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fa906142a8565b60405180910390fd5b6000336040516020016122169190614188565b60405160208183030381529060405280519060200120905061227c848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600f5483613310565b6122bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b2906142e8565b60405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461230a919061456d565b9250508190555061231b3386612771565b5050505050565b60135481565b60125481565b612336612660565b73ffffffffffffffffffffffffffffffffffffffff16612354611764565b73ffffffffffffffffffffffffffffffffffffffff16146123aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a190614348565b60405180910390fd5b80600d90805190602001906123c092919061379f565b5050565b60096020528060005260406000206000915090505481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612478612660565b73ffffffffffffffffffffffffffffffffffffffff16612496611764565b73ffffffffffffffffffffffffffffffffffffffff16146124ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e390614348565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561255c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255390614308565b60405180910390fd5b61256581612ed4565b50565b612570612660565b73ffffffffffffffffffffffffffffffffffffffff1661258e611764565b73ffffffffffffffffffffffffffffffffffffffff16146125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db90614348565b60405180910390fd5b81601481905550806015819055505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600081612673612768565b11158015612682575060005482105b80156126af575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b61278b828260405180602001604052806000815250613327565b5050565b600061279a82612c45565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612805576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16612826612660565b73ffffffffffffffffffffffffffffffffffffffff16148061285557506128548561284f612660565b6123dc565b5b8061289a5750612863612660565b73ffffffffffffffffffffffffffffffffffffffff1661288284610c93565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806128d3576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561293a576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129478585856001613339565b612953600084876126b6565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612bd3576000548214612bd257878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c3e858585600161333f565b5050505050565b612c4d613825565b600082905080612c5b612768565b11158015612c6a575060005481105b15612e9d576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612e9b57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d7f578092505050612ecf565b5b600115612e9a57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e95578092505050612ecf565b612d80565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fe3612660565b8786866040518563ffffffff1660e01b81526004016130059493929190614204565b602060405180830381600087803b15801561301f57600080fd5b505af192505050801561305057506040513d601f19601f8201168201806040525081019061304d9190613c83565b60015b6130ca573d8060008114613080576040519150601f19603f3d011682016040523d82523d6000602084013e613085565b606091505b506000815114156130c2576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c805461312c90614742565b80601f016020809104026020016040519081016040528092919081815260200182805461315890614742565b80156131a55780601f1061317a576101008083540402835291602001916131a5565b820191906000526020600020905b81548152906001019060200180831161318857829003601f168201915b5050505050905090565b606060008214156131f7576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061330b565b600082905060005b60008214613229578080613212906147a5565b915050600a8261322291906145c3565b91506131ff565b60008167ffffffffffffffff811115613245576132446148ff565b5b6040519080825280601f01601f1916602001820160405280156132775781602001600182028036833780820191505090505b5090505b6000851461330457600182613290919061464e565b9150600a8561329f9190614812565b60306132ab919061456d565b60f81b8183815181106132c1576132c06148d0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132fd91906145c3565b945061327b565b8093505050505b919050565b60008261331d8584613345565b1490509392505050565b61333483838360016133ba565b505050565b50505050565b50505050565b60008082905060005b84518110156133af57600085828151811061336c5761336b6148d0565b5b6020026020010151905080831161338e576133878382613788565b925061339b565b6133988184613788565b92505b5080806133a7906147a5565b91505061334e565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613427576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613462576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61346f6000868387613339565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561363957506136388773ffffffffffffffffffffffffffffffffffffffff16612f9a565b5b156136ff575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46136ae6000888480600101955088612fbd565b6136e4576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082141561363f5782600054146136fa57600080fd5b61376b565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613700575b816000819055505050613781600086838761333f565b5050505050565b600082600052816020526040600020905092915050565b8280546137ab90614742565b90600052602060002090601f0160209004810192826137cd5760008555613814565b82601f106137e657805160ff1916838001178555613814565b82800160010185558215613814579182015b828111156138135782518255916020019190600101906137f8565b5b5090506138219190613868565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613881576000816000905550600101613869565b5090565b6000613898613893846144a8565b614483565b9050828152602081018484840111156138b4576138b361493d565b5b6138bf848285614700565b509392505050565b60006138da6138d5846144d9565b614483565b9050828152602081018484840111156138f6576138f561493d565b5b613901848285614700565b509392505050565b60008135905061391881614cb5565b92915050565b60008083601f84011261393457613933614933565b5b8235905067ffffffffffffffff8111156139515761395061492e565b5b60208301915083602082028301111561396d5761396c614938565b5b9250929050565b60008135905061398381614ccc565b92915050565b60008135905061399881614ce3565b92915050565b6000813590506139ad81614cfa565b92915050565b6000815190506139c281614cfa565b92915050565b600082601f8301126139dd576139dc614933565b5b81356139ed848260208601613885565b91505092915050565b600082601f830112613a0b57613a0a614933565b5b8135613a1b8482602086016138c7565b91505092915050565b600081359050613a3381614d11565b92915050565b600060208284031215613a4f57613a4e614947565b5b6000613a5d84828501613909565b91505092915050565b60008060408385031215613a7d57613a7c614947565b5b6000613a8b85828601613909565b9250506020613a9c85828601613909565b9150509250929050565b600080600060608486031215613abf57613abe614947565b5b6000613acd86828701613909565b9350506020613ade86828701613909565b9250506040613aef86828701613a24565b9150509250925092565b60008060008060808587031215613b1357613b12614947565b5b6000613b2187828801613909565b9450506020613b3287828801613909565b9350506040613b4387828801613a24565b925050606085013567ffffffffffffffff811115613b6457613b63614942565b5b613b70878288016139c8565b91505092959194509250565b60008060408385031215613b9357613b92614947565b5b6000613ba185828601613909565b9250506020613bb285828601613974565b9150509250929050565b60008060408385031215613bd357613bd2614947565b5b6000613be185828601613909565b9250506020613bf285828601613a24565b9150509250929050565b600060208284031215613c1257613c11614947565b5b6000613c2084828501613974565b91505092915050565b600060208284031215613c3f57613c3e614947565b5b6000613c4d84828501613989565b91505092915050565b600060208284031215613c6c57613c6b614947565b5b6000613c7a8482850161399e565b91505092915050565b600060208284031215613c9957613c98614947565b5b6000613ca7848285016139b3565b91505092915050565b600060208284031215613cc657613cc5614947565b5b600082013567ffffffffffffffff811115613ce457613ce3614942565b5b613cf0848285016139f6565b91505092915050565b600060208284031215613d0f57613d0e614947565b5b6000613d1d84828501613a24565b91505092915050565b60008060408385031215613d3d57613d3c614947565b5b6000613d4b85828601613a24565b9250506020613d5c85828601613909565b9150509250929050565b600080600060408486031215613d7f57613d7e614947565b5b6000613d8d86828701613a24565b935050602084013567ffffffffffffffff811115613dae57613dad614942565b5b613dba8682870161391e565b92509250509250925092565b60008060408385031215613ddd57613ddc614947565b5b6000613deb85828601613a24565b9250506020613dfc85828601613a24565b9150509250929050565b613e0f81614682565b82525050565b613e26613e2182614682565b6147ee565b82525050565b613e3581614694565b82525050565b613e44816146a0565b82525050565b6000613e558261451f565b613e5f8185614535565b9350613e6f81856020860161470f565b613e788161494c565b840191505092915050565b6000613e8e8261452a565b613e988185614551565b9350613ea881856020860161470f565b613eb18161494c565b840191505092915050565b6000613ec78261452a565b613ed18185614562565b9350613ee181856020860161470f565b80840191505092915050565b60008154613efa81614742565b613f048186614562565b94506001821660008114613f1f5760018114613f3057613f63565b60ff19831686528186019350613f63565b613f398561450a565b60005b83811015613f5b57815481890152600182019150602081019050613f3c565b838801955050505b50505092915050565b6000613f79601183614551565b9150613f848261496a565b602082019050919050565b6000613f9c602583614551565b9150613fa782614993565b604082019050919050565b6000613fbf600e83614551565b9150613fca826149e2565b602082019050919050565b6000613fe2602683614551565b9150613fed82614a0b565b604082019050919050565b6000614005602183614551565b915061401082614a5a565b604082019050919050565b6000614028602083614551565b915061403382614aa9565b602082019050919050565b600061404b601783614551565b915061405682614ad2565b602082019050919050565b600061406e602f83614551565b915061407982614afb565b604082019050919050565b6000614091602283614551565b915061409c82614b4a565b604082019050919050565b60006140b4601783614551565b91506140bf82614b99565b602082019050919050565b60006140d7603383614551565b91506140e282614bc2565b604082019050919050565b60006140fa600083614546565b915061410582614c11565b600082019050919050565b600061411d602283614551565b915061412882614c14565b604082019050919050565b6000614140601283614551565b915061414b82614c63565b602082019050919050565b6000614163601383614551565b915061416e82614c8c565b602082019050919050565b614182816146f6565b82525050565b60006141948284613e15565b60148201915081905092915050565b60006141af8286613ebc565b91506141bb8285613ebc565b91506141c78284613eed565b9150819050949350505050565b60006141df826140ed565b9150819050919050565b60006020820190506141fe6000830184613e06565b92915050565b60006080820190506142196000830187613e06565b6142266020830186613e06565b6142336040830185614179565b81810360608301526142458184613e4a565b905095945050505050565b60006020820190506142656000830184613e2c565b92915050565b60006020820190506142806000830184613e3b565b92915050565b600060208201905081810360008301526142a08184613e83565b905092915050565b600060208201905081810360008301526142c181613f6c565b9050919050565b600060208201905081810360008301526142e181613f8f565b9050919050565b6000602082019050818103600083015261430181613fb2565b9050919050565b6000602082019050818103600083015261432181613fd5565b9050919050565b6000602082019050818103600083015261434181613ff8565b9050919050565b600060208201905081810360008301526143618161401b565b9050919050565b600060208201905081810360008301526143818161403e565b9050919050565b600060208201905081810360008301526143a181614061565b9050919050565b600060208201905081810360008301526143c181614084565b9050919050565b600060208201905081810360008301526143e1816140a7565b9050919050565b60006020820190508181036000830152614401816140ca565b9050919050565b6000602082019050818103600083015261442181614110565b9050919050565b6000602082019050818103600083015261444181614133565b9050919050565b6000602082019050818103600083015261446181614156565b9050919050565b600060208201905061447d6000830184614179565b92915050565b600061448d61449e565b90506144998282614774565b919050565b6000604051905090565b600067ffffffffffffffff8211156144c3576144c26148ff565b5b6144cc8261494c565b9050602081019050919050565b600067ffffffffffffffff8211156144f4576144f36148ff565b5b6144fd8261494c565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614578826146f6565b9150614583836146f6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145b8576145b7614843565b5b828201905092915050565b60006145ce826146f6565b91506145d9836146f6565b9250826145e9576145e8614872565b5b828204905092915050565b60006145ff826146f6565b915061460a836146f6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561464357614642614843565b5b828202905092915050565b6000614659826146f6565b9150614664836146f6565b92508282101561467757614676614843565b5b828203905092915050565b600061468d826146d6565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561472d578082015181840152602081019050614712565b8381111561473c576000848401525b50505050565b6000600282049050600182168061475a57607f821691505b6020821081141561476e5761476d6148a1565b5b50919050565b61477d8261494c565b810181811067ffffffffffffffff8211171561479c5761479b6148ff565b5b80604052505050565b60006147b0826146f6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147e3576147e2614843565b5b600182019050919050565b60006147f982614800565b9050919050565b600061480b8261495d565b9050919050565b600061481d826146f6565b9150614828836146f6565b92508261483857614837614872565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4e6f7420656e6f75676820657468657221000000000000000000000000000000600082015250565b7f596f75277265206e6f7420616c6c6f77656420746f206d696e7420746869732060008201527f4d75636821000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c69642070726f6f6621000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5175616e74697479204d75737420426520486967686572205468616e205a657260008201527f6f00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f5175616e74697479204d75737420426520486967686572205468616e205a657260008201527f6f21000000000000000000000000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e742069732064697361626c6521000000000000000000600082015250565b7f596f75277265204e6f7420416c6c6f77656420546f204d696e74206d6f72652060008201527f7468616e206d61784d696e7420416d6f756e7400000000000000000000000000602082015250565b50565b7f5468652077686974656c6973742073616c65206973206e6f7420656e61626c6560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d617820537570706c7920526561636865640000000000000000000000000000600082015250565b7f4d617820537570706c7920526561636865642100000000000000000000000000600082015250565b614cbe81614682565b8114614cc957600080fd5b50565b614cd581614694565b8114614ce057600080fd5b50565b614cec816146a0565b8114614cf757600080fd5b50565b614d03816146aa565b8114614d0e57600080fd5b50565b614d1a816146f6565b8114614d2557600080fd5b5056fea26469706673582212203934262fd7489b9bb90e4e5601acd0bc181742073fd9d902a7d395dd78d609f864736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _initBaseURI (string):

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

47491:5483:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29677:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51668:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32790:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34293:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33856:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28926:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52385:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35158:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48076:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51864:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47898:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51779:77;;;;;;;;;;;;;:::i;:::-;;51198:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52674:297;;;;;;;;;;;;;:::i;:::-;;35399:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51350:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52127:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47871:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47797:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52273:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47839:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32598:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47725:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51454:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30046:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7415:103;;;;;;;;;;;;;:::i;:::-;;51556:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47968:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48121:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6764:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32959:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49440:887;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34569:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47687:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47630:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35655:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47930:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47753:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50468:722;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48327:1085;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48038:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48003:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52515:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47572:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34927:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7673:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51957:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29677:305;29779:4;29831:25;29816:40;;;:11;:40;;;;:105;;;;29888:33;29873:48;;;:11;:48;;;;29816:105;:158;;;;29938:36;29962:11;29938:23;:36::i;:::-;29816:158;29796:178;;29677:305;;;:::o;51668:103::-;6995:12;:10;:12::i;:::-;6984:23;;:7;:5;:7::i;:::-;:23;;;6976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51757:6:::1;51738:16;;:25;;;;;;;;;;;;;;;;;;51668:103:::0;:::o;32790:100::-;32844:13;32877:5;32870:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32790:100;:::o;34293:204::-;34361:7;34386:16;34394:7;34386;:16::i;:::-;34381:64;;34411:34;;;;;;;;;;;;;;34381:64;34465:15;:24;34481:7;34465:24;;;;;;;;;;;;;;;;;;;;;34458:31;;34293:204;;;:::o;33856:371::-;33929:13;33945:24;33961:7;33945:15;:24::i;:::-;33929:40;;33990:5;33984:11;;:2;:11;;;33980:48;;;34004:24;;;;;;;;;;;;;;33980:48;34061:5;34045:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;34071:37;34088:5;34095:12;:10;:12::i;:::-;34071:16;:37::i;:::-;34070:38;34045:63;34041:138;;;34132:35;;;;;;;;;;;;;;34041:138;34191:28;34200:2;34204:7;34213:5;34191:8;:28::i;:::-;33918:309;33856:371;;:::o;28926:303::-;28970:7;29195:15;:13;:15::i;:::-;29180:12;;29164:13;;:28;:46;29157:53;;28926:303;:::o;52385:122::-;6995:12;:10;:12::i;:::-;6984:23;;:7;:5;:7::i;:::-;:23;;;6976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52470:29:::1;52480:8;52490;52470:9;:29::i;:::-;52385:122:::0;;:::o;35158:170::-;35292:28;35302:4;35308:2;35312:7;35292:9;:28::i;:::-;35158:170;;;:::o;48076:38::-;;;;:::o;51864:85::-;6995:12;:10;:12::i;:::-;6984:23;;:7;:5;:7::i;:::-;:23;;;6976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51935:6:::1;51924:8;;:17;;;;;;;;;;;;;;;;;;51864:85:::0;:::o;47898:25::-;;;;:::o;51779:77::-;6995:12;:10;:12::i;:::-;6984:23;;:7;:5;:7::i;:::-;:23;;;6976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51842:6:::1;;;;;;;;;;;51841:7;51832:6;;:16;;;;;;;;;;;;;;;;;;51779:77::o:0;51198:144::-;6995:12;:10;:12::i;:::-;6984:23;;:7;:5;:7::i;:::-;:23;;;6976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51294:10:::1;51279:12;:25;;;;51327:7;51315:9;:19;;;;51198:144:::0;;:::o;52674:297::-;6995:12;:10;:12::i;:::-;6984:23;;:7;:5;:7::i;:::-;:23;;;6976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52723:7:::1;52744:42;52736:56;;52829:3;52824:2;52800:21;:26;;;;:::i;:::-;:32;;;;:::i;:::-;52736:101;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52722:115;;;52856:2;52848:11;;;::::0;::::1;;52873:7;52894;:5;:7::i;:::-;52886:21;;52915;52886:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52872:69;;;52960:2;52952:11;;;::::0;::::1;;52711:260;;52674:297::o:0;35399:185::-;35537:39;35554:4;35560:2;35564:7;35537:39;;;;;;;;;;;;:16;:39::i;:::-;35399:185;;;:::o;51350:96::-;6995:12;:10;:12::i;:::-;6984:23;;:7;:5;:7::i;:::-;:23;;;6976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51430:8:::1;51418:9;:20;;;;51350:96:::0;:::o;52127:138::-;6995:12;:10;:12::i;:::-;6984:23;;:7;:5;:7::i;:::-;:23;;;6976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52239:18:::1;52219:17;:38;;;;;;;;;;;;:::i;:::-;;52127:138:::0;:::o;47871:20::-;;;;;;;;;;;;;:::o;47797:35::-;;;;;;;;;;;;;:::o;52273:104::-;6995:12;:10;:12::i;:::-;6984:23;;:7;:5;:7::i;:::-;:23;;;6976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52358:11:::1;52348:7;:21;;;;;;;;;;;;:::i;:::-;;52273:104:::0;:::o;47839:25::-;;;;;;;;;;;;;:::o;32598:125::-;32662:7;32689:21;32702:7;32689:12;:21::i;:::-;:26;;;32682:33;;32598:125;;;:::o;47725:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51454:94::-;6995:12;:10;:12::i;:::-;6984:23;;:7;:5;:7::i;:::-;:23;;;6976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51533:7:::1;51521:9;:19;;;;51454:94:::0;:::o;30046:206::-;30110:7;30151:1;30134:19;;:5;:19;;;30130:60;;;30162:28;;;;;;;;;;;;;;30130:60;30216:12;:19;30229:5;30216:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;30208:36;;30201:43;;30046:206;;;:::o;7415:103::-;6995:12;:10;:12::i;:::-;6984:23;;:7;:5;:7::i;:::-;:23;;;6976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7480:30:::1;7507:1;7480:18;:30::i;:::-;7415:103::o:0;51556:104::-;6995:12;:10;:12::i;:::-;6984:23;;:7;:5;:7::i;:::-;:23;;;6976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51641:11:::1;51628:10;:24;;;;51556:104:::0;:::o;47968:28::-;;;;:::o;48121:37::-;;;;:::o;6764:87::-;6810:7;6837:6;;;;;;;;;;;6830:13;;6764:87;:::o;32959:104::-;33015:13;33048:7;33041:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32959:104;:::o;49440:887::-;49500:14;49517:13;:11;:13::i;:::-;49500:30;;49550:6;;;;;;;;;;;49549:7;49541:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;49604:16;;;;;;;;;;;49603:17;49595:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;49678:1;49667:8;:12;49659:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;49758:9;;49746:8;49737:6;:17;;;;:::i;:::-;:30;;49729:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;49822:7;:5;:7::i;:::-;49808:21;;:10;:21;;;49804:426;;49908:9;;49896:8;49868:13;:25;49882:10;49868:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;:49;;49846:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;50043:9;;50031:8;:21;;50005:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;50188:8;50175:10;;:21;;;;:::i;:::-;50162:9;:34;;50154:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;49804:426;50269:8;50240:13;:25;50254:10;50240:25;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;50288:31;50298:10;50310:8;50288:9;:31::i;:::-;49489:838;49440:887;:::o;34569:287::-;34680:12;:10;:12::i;:::-;34668:24;;:8;:24;;;34664:54;;;34701:17;;;;;;;;;;;;;;34664:54;34776:8;34731:18;:32;34750:12;:10;:12::i;:::-;34731:32;;;;;;;;;;;;;;;:42;34764:8;34731:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34829:8;34800:48;;34815:12;:10;:12::i;:::-;34800:48;;;34839:8;34800:48;;;;;;:::i;:::-;;;;;;;;34569:287;;:::o;47687:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47630:48::-;;;;;;;;;;;;;;;;;:::o;35655:369::-;35822:28;35832:4;35838:2;35842:7;35822:9;:28::i;:::-;35865:15;:2;:13;;;:15::i;:::-;:76;;;;;35885:56;35916:4;35922:2;35926:7;35935:5;35885:30;:56::i;:::-;35884:57;35865:76;35861:156;;;35965:40;;;;;;;;;;;;;;35861:156;35655:369;;;;:::o;47930:31::-;;;;:::o;47753:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50468:722::-;50586:13;50639:16;50647:7;50639;:16::i;:::-;50617:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;50748:8;;;;;;;;;;;50743:66;;50780:17;50773:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50743:66;50821:28;50852:10;:8;:10::i;:::-;50821:41;;50926:1;50901:14;50895:28;:32;:287;;;;;;;;;;;;;;;;;51019:14;51060:18;:7;:16;:18::i;:::-;51105:13;50976:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50895:287;50875:307;;;50468:722;;;;:::o;48327:1085::-;48450:14;48467:13;:11;:13::i;:::-;48450:30;;48500:6;;;;;;;;;;;48499:7;48491:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;48564:1;48553:8;:12;48545:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;48643:9;;48631:8;48622:6;:17;;;;:::i;:::-;:30;;48614:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;48694:16;;;;;;;;;;;48686:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;48833:12;;48821:8;48790:16;:28;48807:10;48790:28;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;:55;;48768:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;48955:9;;48943:8;:21;;48921:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;49089:8;49075:11;;:22;;;;:::i;:::-;49062:9;:35;;49054:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;49130:12;49172:10;49155:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;49145:39;;;;;;49130:54;;49217:50;49236:12;;49217:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49250:10;;49262:4;49217:18;:50::i;:::-;49195:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;49354:8;49322:16;:28;49339:10;49322:28;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;49373:31;49383:10;49395:8;49373:9;:31::i;:::-;48439:973;;48327:1085;;;:::o;48038:31::-;;;;:::o;48003:28::-;;;;:::o;52515:151::-;6995:12;:10;:12::i;:::-;6984:23;;:7;:5;:7::i;:::-;:23;;;6976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52641:17:::1;52625:13;:33;;;;;;;;;;;;:::i;:::-;;52515:151:::0;:::o;47572:51::-;;;;;;;;;;;;;;;;;:::o;34927:164::-;35024:4;35048:18;:25;35067:5;35048:25;;;;;;;;;;;;;;;:35;35074:8;35048:35;;;;;;;;;;;;;;;;;;;;;;;;;35041:42;;34927:164;;;;:::o;7673:201::-;6995:12;:10;:12::i;:::-;6984:23;;:7;:5;:7::i;:::-;:23;;;6976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7782:1:::1;7762:22;;:8;:22;;;;7754:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7838:28;7857:8;7838:18;:28::i;:::-;7673:201:::0;:::o;51957:162::-;6995:12;:10;:12::i;:::-;6984:23;;:7;:5;:7::i;:::-;:23;;;6976:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52062:14:::1;52048:11;:28;;;;52100:11;52087:10;:24;;;;51957:162:::0;;:::o;19571:157::-;19656:4;19695:25;19680:40;;;:11;:40;;;;19673:47;;19571:157;;;:::o;5488:98::-;5541:7;5568:10;5561:17;;5488:98;:::o;36279:174::-;36336:4;36379:7;36360:15;:13;:15::i;:::-;:26;;:53;;;;;36400:13;;36390:7;:23;36360:53;:85;;;;;36418:11;:20;36430:7;36418:20;;;;;;;;;;;:27;;;;;;;;;;;;36417:28;36360:85;36353:92;;36279:174;;;:::o;44436:196::-;44578:2;44551:15;:24;44567:7;44551:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44616:7;44612:2;44596:28;;44605:5;44596:28;;;;;;;;;;;;44436:196;;;:::o;28700:92::-;28756:7;28783:1;28776:8;;28700:92;:::o;36461:104::-;36530:27;36540:2;36544:8;36530:27;;;;;;;;;;;;:9;:27::i;:::-;36461:104;;:::o;39379:2130::-;39494:35;39532:21;39545:7;39532:12;:21::i;:::-;39494:59;;39592:4;39570:26;;:13;:18;;;:26;;;39566:67;;39605:28;;;;;;;;;;;;;;39566:67;39646:22;39688:4;39672:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;39709:36;39726:4;39732:12;:10;:12::i;:::-;39709:16;:36::i;:::-;39672:73;:126;;;;39786:12;:10;:12::i;:::-;39762:36;;:20;39774:7;39762:11;:20::i;:::-;:36;;;39672:126;39646:153;;39817:17;39812:66;;39843:35;;;;;;;;;;;;;;39812:66;39907:1;39893:16;;:2;:16;;;39889:52;;;39918:23;;;;;;;;;;;;;;39889:52;39954:43;39976:4;39982:2;39986:7;39995:1;39954:21;:43::i;:::-;40062:35;40079:1;40083:7;40092:4;40062:8;:35::i;:::-;40423:1;40393:12;:18;40406:4;40393:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40467:1;40439:12;:16;40452:2;40439:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40485:31;40519:11;:20;40531:7;40519:20;;;;;;;;;;;40485:54;;40570:2;40554:8;:13;;;:18;;;;;;;;;;;;;;;;;;40620:15;40587:8;:23;;;:49;;;;;;;;;;;;;;;;;;40888:19;40920:1;40910:7;:11;40888:33;;40936:31;40970:11;:24;40982:11;40970:24;;;;;;;;;;;40936:58;;41038:1;41013:27;;:8;:13;;;;;;;;;;;;:27;;;41009:384;;;41223:13;;41208:11;:28;41204:174;;41277:4;41261:8;:13;;;:20;;;;;;;;;;;;;;;;;;41330:13;:28;;;41304:8;:23;;;:54;;;;;;;;;;;;;;;;;;41204:174;41009:384;40368:1036;;;41440:7;41436:2;41421:27;;41430:4;41421:27;;;;;;;;;;;;41459:42;41480:4;41486:2;41490:7;41499:1;41459:20;:42::i;:::-;39483:2026;;39379:2130;;;:::o;31427:1109::-;31489:21;;:::i;:::-;31523:12;31538:7;31523:22;;31606:4;31587:15;:13;:15::i;:::-;:23;;:47;;;;;31621:13;;31614:4;:20;31587:47;31583:886;;;31655:31;31689:11;:17;31701:4;31689:17;;;;;;;;;;;31655:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31730:9;:16;;;31725:729;;31801:1;31775:28;;:9;:14;;;:28;;;31771:101;;31839:9;31832:16;;;;;;31771:101;32174:261;32181:4;32174:261;;;32214:6;;;;;;;;32259:11;:17;32271:4;32259:17;;;;;;;;;;;32247:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32333:1;32307:28;;:9;:14;;;:28;;;32303:109;;32375:9;32368:16;;;;;;32303:109;32174:261;;;31725:729;31636:833;31583:886;32497:31;;;;;;;;;;;;;;31427:1109;;;;:::o;8034:191::-;8108:16;8127:6;;;;;;;;;;;8108:25;;8153:8;8144:6;;:17;;;;;;;;;;;;;;;;;;8208:8;8177:40;;8198:8;8177:40;;;;;;;;;;;;8097:128;8034:191;:::o;9465:326::-;9525:4;9782:1;9760:7;:19;;;:23;9753:30;;9465:326;;;:::o;45124:667::-;45287:4;45324:2;45308:36;;;45345:12;:10;:12::i;:::-;45359:4;45365:7;45374:5;45308:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45304:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45559:1;45542:6;:13;:18;45538:235;;;45588:40;;;;;;;;;;;;;;45538:235;45731:6;45725:13;45716:6;45712:2;45708:15;45701:38;45304:480;45437:45;;;45427:55;;;:6;:55;;;;45420:62;;;45124:667;;;;;;:::o;50352:108::-;50412:13;50445:7;50438:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50352:108;:::o;3050:723::-;3106:13;3336:1;3327:5;:10;3323:53;;;3354:10;;;;;;;;;;;;;;;;;;;;;3323:53;3386:12;3401:5;3386:20;;3417:14;3442:78;3457:1;3449:4;:9;3442:78;;3475:8;;;;;:::i;:::-;;;;3506:2;3498:10;;;;;:::i;:::-;;;3442:78;;;3530:19;3562:6;3552:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3530:39;;3580:154;3596:1;3587:5;:10;3580:154;;3624:1;3614:11;;;;;:::i;:::-;;;3691:2;3683:5;:10;;;;:::i;:::-;3670:2;:24;;;;:::i;:::-;3657:39;;3640:6;3647;3640:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3720:2;3711:11;;;;;:::i;:::-;;;3580:154;;;3758:6;3744:21;;;;;3050:723;;;;:::o;1220:190::-;1345:4;1398;1369:25;1382:5;1389:4;1369:12;:25::i;:::-;:33;1362:40;;1220:190;;;;;:::o;36928:163::-;37051:32;37057:2;37061:8;37071:5;37078:4;37051:5;:32::i;:::-;36928:163;;;:::o;46439:159::-;;;;;:::o;47257:158::-;;;;;:::o;1771:675::-;1854:7;1874:20;1897:4;1874:27;;1917:9;1912:497;1936:5;:12;1932:1;:16;1912:497;;;1970:20;1993:5;1999:1;1993:8;;;;;;;;:::i;:::-;;;;;;;;1970:31;;2036:12;2020;:28;2016:382;;2163:42;2178:12;2192;2163:14;:42::i;:::-;2148:57;;2016:382;;;2340:42;2355:12;2369;2340:14;:42::i;:::-;2325:57;;2016:382;1955:454;1950:3;;;;;:::i;:::-;;;;1912:497;;;;2426:12;2419:19;;;1771:675;;;;:::o;37350:1775::-;37489:20;37512:13;;37489:36;;37554:1;37540:16;;:2;:16;;;37536:48;;;37565:19;;;;;;;;;;;;;;37536:48;37611:1;37599:8;:13;37595:44;;;37621:18;;;;;;;;;;;;;;37595:44;37652:61;37682:1;37686:2;37690:12;37704:8;37652:21;:61::i;:::-;38025:8;37990:12;:16;38003:2;37990:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38089:8;38049:12;:16;38062:2;38049:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38148:2;38115:11;:25;38127:12;38115:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;38215:15;38165:11;:25;38177:12;38165:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;38248:20;38271:12;38248:35;;38298:11;38327:8;38312:12;:23;38298:37;;38356:4;:23;;;;;38364:15;:2;:13;;;:15::i;:::-;38356:23;38352:641;;;38400:314;38456:12;38452:2;38431:38;;38448:1;38431:38;;;;;;;;;;;;38497:69;38536:1;38540:2;38544:14;;;;;;38560:5;38497:30;:69::i;:::-;38492:174;;38602:40;;;;;;;;;;;;;;38492:174;38709:3;38693:12;:19;;38400:314;;38795:12;38778:13;;:29;38774:43;;38809:8;;;38774:43;38352:641;;;38858:120;38914:14;;;;;;38910:2;38889:40;;38906:1;38889:40;;;;;;;;;;;;38973:3;38957:12;:19;;38858:120;;38352:641;39023:12;39007:13;:28;;;;37965:1082;;39057:60;39086:1;39090:2;39094:12;39108:8;39057:20;:60::i;:::-;37478:1647;37350:1775;;;;:::o;2454:224::-;2522:13;2585:1;2579:4;2572:15;2614:1;2608:4;2601:15;2655:4;2649;2639:21;2630:30;;2454:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2868:139;;;;:::o;3013:329::-;3072:6;3121:2;3109:9;3100:7;3096:23;3092:32;3089:119;;;3127:79;;:::i;:::-;3089:119;3247:1;3272:53;3317:7;3308:6;3297:9;3293:22;3272:53;:::i;:::-;3262:63;;3218:117;3013:329;;;;:::o;3348:474::-;3416:6;3424;3473:2;3461:9;3452:7;3448:23;3444:32;3441:119;;;3479:79;;:::i;:::-;3441:119;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:53;3797:7;3788:6;3777:9;3773:22;3752:53;:::i;:::-;3742:63;;3697:118;3348:474;;;;;:::o;3828:619::-;3905:6;3913;3921;3970:2;3958:9;3949:7;3945:23;3941:32;3938:119;;;3976:79;;:::i;:::-;3938:119;4096:1;4121:53;4166:7;4157:6;4146:9;4142:22;4121:53;:::i;:::-;4111:63;;4067:117;4223:2;4249:53;4294:7;4285:6;4274:9;4270:22;4249:53;:::i;:::-;4239:63;;4194:118;4351:2;4377:53;4422:7;4413:6;4402:9;4398:22;4377:53;:::i;:::-;4367:63;;4322:118;3828:619;;;;;:::o;4453:943::-;4548:6;4556;4564;4572;4621:3;4609:9;4600:7;4596:23;4592:33;4589:120;;;4628:79;;:::i;:::-;4589:120;4748:1;4773:53;4818:7;4809:6;4798:9;4794:22;4773:53;:::i;:::-;4763:63;;4719:117;4875:2;4901:53;4946:7;4937:6;4926:9;4922:22;4901:53;:::i;:::-;4891:63;;4846:118;5003:2;5029:53;5074:7;5065:6;5054:9;5050:22;5029:53;:::i;:::-;5019:63;;4974:118;5159:2;5148:9;5144:18;5131:32;5190:18;5182:6;5179:30;5176:117;;;5212:79;;:::i;:::-;5176:117;5317:62;5371:7;5362:6;5351:9;5347:22;5317:62;:::i;:::-;5307:72;;5102:287;4453:943;;;;;;;:::o;5402:468::-;5467:6;5475;5524:2;5512:9;5503:7;5499:23;5495:32;5492:119;;;5530:79;;:::i;:::-;5492:119;5650:1;5675:53;5720:7;5711:6;5700:9;5696:22;5675:53;:::i;:::-;5665:63;;5621:117;5777:2;5803:50;5845:7;5836:6;5825:9;5821:22;5803:50;:::i;:::-;5793:60;;5748:115;5402:468;;;;;:::o;5876:474::-;5944:6;5952;6001:2;5989:9;5980:7;5976:23;5972:32;5969:119;;;6007:79;;:::i;:::-;5969:119;6127:1;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6098:117;6254:2;6280:53;6325:7;6316:6;6305:9;6301:22;6280:53;:::i;:::-;6270:63;;6225:118;5876:474;;;;;:::o;6356:323::-;6412:6;6461:2;6449:9;6440:7;6436:23;6432:32;6429:119;;;6467:79;;:::i;:::-;6429:119;6587:1;6612:50;6654:7;6645:6;6634:9;6630:22;6612:50;:::i;:::-;6602:60;;6558:114;6356:323;;;;:::o;6685:329::-;6744:6;6793:2;6781:9;6772:7;6768:23;6764:32;6761:119;;;6799:79;;:::i;:::-;6761:119;6919:1;6944:53;6989:7;6980:6;6969:9;6965:22;6944:53;:::i;:::-;6934:63;;6890:117;6685:329;;;;:::o;7020:327::-;7078:6;7127:2;7115:9;7106:7;7102:23;7098:32;7095:119;;;7133:79;;:::i;:::-;7095:119;7253:1;7278:52;7322:7;7313:6;7302:9;7298:22;7278:52;:::i;:::-;7268:62;;7224:116;7020:327;;;;:::o;7353:349::-;7422:6;7471:2;7459:9;7450:7;7446:23;7442:32;7439:119;;;7477:79;;:::i;:::-;7439:119;7597:1;7622:63;7677:7;7668:6;7657:9;7653:22;7622:63;:::i;:::-;7612:73;;7568:127;7353:349;;;;:::o;7708:509::-;7777:6;7826:2;7814:9;7805:7;7801:23;7797:32;7794:119;;;7832:79;;:::i;:::-;7794:119;7980:1;7969:9;7965:17;7952:31;8010:18;8002:6;7999:30;7996:117;;;8032:79;;:::i;:::-;7996:117;8137:63;8192:7;8183:6;8172:9;8168:22;8137:63;:::i;:::-;8127:73;;7923:287;7708:509;;;;:::o;8223:329::-;8282:6;8331:2;8319:9;8310:7;8306:23;8302:32;8299:119;;;8337:79;;:::i;:::-;8299:119;8457:1;8482:53;8527:7;8518:6;8507:9;8503:22;8482:53;:::i;:::-;8472:63;;8428:117;8223:329;;;;:::o;8558:474::-;8626:6;8634;8683:2;8671:9;8662:7;8658:23;8654:32;8651:119;;;8689:79;;:::i;:::-;8651:119;8809:1;8834:53;8879:7;8870:6;8859:9;8855:22;8834:53;:::i;:::-;8824:63;;8780:117;8936:2;8962:53;9007:7;8998:6;8987:9;8983:22;8962:53;:::i;:::-;8952:63;;8907:118;8558:474;;;;;:::o;9038:704::-;9133:6;9141;9149;9198:2;9186:9;9177:7;9173:23;9169:32;9166:119;;;9204:79;;:::i;:::-;9166:119;9324:1;9349:53;9394:7;9385:6;9374:9;9370:22;9349:53;:::i;:::-;9339:63;;9295:117;9479:2;9468:9;9464:18;9451:32;9510:18;9502:6;9499:30;9496:117;;;9532:79;;:::i;:::-;9496:117;9645:80;9717:7;9708:6;9697:9;9693:22;9645:80;:::i;:::-;9627:98;;;;9422:313;9038:704;;;;;:::o;9748:474::-;9816:6;9824;9873:2;9861:9;9852:7;9848:23;9844:32;9841:119;;;9879:79;;:::i;:::-;9841:119;9999:1;10024:53;10069:7;10060:6;10049:9;10045:22;10024:53;:::i;:::-;10014:63;;9970:117;10126:2;10152:53;10197:7;10188:6;10177:9;10173:22;10152:53;:::i;:::-;10142:63;;10097:118;9748:474;;;;;:::o;10228:118::-;10315:24;10333:5;10315:24;:::i;:::-;10310:3;10303:37;10228:118;;:::o;10352:157::-;10457:45;10477:24;10495:5;10477:24;:::i;:::-;10457:45;:::i;:::-;10452:3;10445:58;10352:157;;:::o;10515:109::-;10596:21;10611:5;10596:21;:::i;:::-;10591:3;10584:34;10515:109;;:::o;10630:118::-;10717:24;10735:5;10717:24;:::i;:::-;10712:3;10705:37;10630:118;;:::o;10754:360::-;10840:3;10868:38;10900:5;10868:38;:::i;:::-;10922:70;10985:6;10980:3;10922:70;:::i;:::-;10915:77;;11001:52;11046:6;11041:3;11034:4;11027:5;11023:16;11001:52;:::i;:::-;11078:29;11100:6;11078:29;:::i;:::-;11073:3;11069:39;11062:46;;10844:270;10754:360;;;;:::o;11120:364::-;11208:3;11236:39;11269:5;11236:39;:::i;:::-;11291:71;11355:6;11350:3;11291:71;:::i;:::-;11284:78;;11371:52;11416:6;11411:3;11404:4;11397:5;11393:16;11371:52;:::i;:::-;11448:29;11470:6;11448:29;:::i;:::-;11443:3;11439:39;11432:46;;11212:272;11120:364;;;;:::o;11490:377::-;11596:3;11624:39;11657:5;11624:39;:::i;:::-;11679:89;11761:6;11756:3;11679:89;:::i;:::-;11672:96;;11777:52;11822:6;11817:3;11810:4;11803:5;11799:16;11777:52;:::i;:::-;11854:6;11849:3;11845:16;11838:23;;11600:267;11490:377;;;;:::o;11897:845::-;12000:3;12037:5;12031:12;12066:36;12092:9;12066:36;:::i;:::-;12118:89;12200:6;12195:3;12118:89;:::i;:::-;12111:96;;12238:1;12227:9;12223:17;12254:1;12249:137;;;;12400:1;12395:341;;;;12216:520;;12249:137;12333:4;12329:9;12318;12314:25;12309:3;12302:38;12369:6;12364:3;12360:16;12353:23;;12249:137;;12395:341;12462:38;12494:5;12462:38;:::i;:::-;12522:1;12536:154;12550:6;12547:1;12544:13;12536:154;;;12624:7;12618:14;12614:1;12609:3;12605:11;12598:35;12674:1;12665:7;12661:15;12650:26;;12572:4;12569:1;12565:12;12560:17;;12536:154;;;12719:6;12714:3;12710:16;12703:23;;12402:334;;12216:520;;12004:738;;11897:845;;;;:::o;12748:366::-;12890:3;12911:67;12975:2;12970:3;12911:67;:::i;:::-;12904:74;;12987:93;13076:3;12987:93;:::i;:::-;13105:2;13100:3;13096:12;13089:19;;12748:366;;;:::o;13120:::-;13262:3;13283:67;13347:2;13342:3;13283:67;:::i;:::-;13276:74;;13359:93;13448:3;13359:93;:::i;:::-;13477:2;13472:3;13468:12;13461:19;;13120:366;;;:::o;13492:::-;13634:3;13655:67;13719:2;13714:3;13655:67;:::i;:::-;13648:74;;13731:93;13820:3;13731:93;:::i;:::-;13849:2;13844:3;13840:12;13833:19;;13492:366;;;:::o;13864:::-;14006:3;14027:67;14091:2;14086:3;14027:67;:::i;:::-;14020:74;;14103:93;14192:3;14103:93;:::i;:::-;14221:2;14216:3;14212:12;14205:19;;13864:366;;;:::o;14236:::-;14378:3;14399:67;14463:2;14458:3;14399:67;:::i;:::-;14392:74;;14475:93;14564:3;14475:93;:::i;:::-;14593:2;14588:3;14584:12;14577:19;;14236:366;;;:::o;14608:::-;14750:3;14771:67;14835:2;14830:3;14771:67;:::i;:::-;14764:74;;14847:93;14936:3;14847:93;:::i;:::-;14965:2;14960:3;14956:12;14949:19;;14608:366;;;:::o;14980:::-;15122:3;15143:67;15207:2;15202:3;15143:67;:::i;:::-;15136:74;;15219:93;15308:3;15219:93;:::i;:::-;15337:2;15332:3;15328:12;15321:19;;14980:366;;;:::o;15352:::-;15494:3;15515:67;15579:2;15574:3;15515:67;:::i;:::-;15508:74;;15591:93;15680:3;15591:93;:::i;:::-;15709:2;15704:3;15700:12;15693:19;;15352:366;;;:::o;15724:::-;15866:3;15887:67;15951:2;15946:3;15887:67;:::i;:::-;15880:74;;15963:93;16052:3;15963:93;:::i;:::-;16081:2;16076:3;16072:12;16065:19;;15724:366;;;:::o;16096:::-;16238:3;16259:67;16323:2;16318:3;16259:67;:::i;:::-;16252:74;;16335:93;16424:3;16335:93;:::i;:::-;16453:2;16448:3;16444:12;16437:19;;16096:366;;;:::o;16468:::-;16610:3;16631:67;16695:2;16690:3;16631:67;:::i;:::-;16624:74;;16707:93;16796:3;16707:93;:::i;:::-;16825:2;16820:3;16816:12;16809:19;;16468:366;;;:::o;16840:398::-;16999:3;17020:83;17101:1;17096:3;17020:83;:::i;:::-;17013:90;;17112:93;17201:3;17112:93;:::i;:::-;17230:1;17225:3;17221:11;17214:18;;16840:398;;;:::o;17244:366::-;17386:3;17407:67;17471:2;17466:3;17407:67;:::i;:::-;17400:74;;17483:93;17572:3;17483:93;:::i;:::-;17601:2;17596:3;17592:12;17585:19;;17244:366;;;:::o;17616:::-;17758:3;17779:67;17843:2;17838:3;17779:67;:::i;:::-;17772:74;;17855:93;17944:3;17855:93;:::i;:::-;17973:2;17968:3;17964:12;17957:19;;17616:366;;;:::o;17988:::-;18130:3;18151:67;18215:2;18210:3;18151:67;:::i;:::-;18144:74;;18227:93;18316:3;18227:93;:::i;:::-;18345:2;18340:3;18336:12;18329:19;;17988:366;;;:::o;18360:118::-;18447:24;18465:5;18447:24;:::i;:::-;18442:3;18435:37;18360:118;;:::o;18484:256::-;18596:3;18611:75;18682:3;18673:6;18611:75;:::i;:::-;18711:2;18706:3;18702:12;18695:19;;18731:3;18724:10;;18484:256;;;;:::o;18746:589::-;18971:3;18993:95;19084:3;19075:6;18993:95;:::i;:::-;18986:102;;19105:95;19196:3;19187:6;19105:95;:::i;:::-;19098:102;;19217:92;19305:3;19296:6;19217:92;:::i;:::-;19210:99;;19326:3;19319:10;;18746:589;;;;;;:::o;19341:379::-;19525:3;19547:147;19690:3;19547:147;:::i;:::-;19540:154;;19711:3;19704:10;;19341:379;;;:::o;19726:222::-;19819:4;19857:2;19846:9;19842:18;19834:26;;19870:71;19938:1;19927:9;19923:17;19914:6;19870:71;:::i;:::-;19726:222;;;;:::o;19954:640::-;20149:4;20187:3;20176:9;20172:19;20164:27;;20201:71;20269:1;20258:9;20254:17;20245:6;20201:71;:::i;:::-;20282:72;20350:2;20339:9;20335:18;20326:6;20282:72;:::i;:::-;20364;20432:2;20421:9;20417:18;20408:6;20364:72;:::i;:::-;20483:9;20477:4;20473:20;20468:2;20457:9;20453:18;20446:48;20511:76;20582:4;20573:6;20511:76;:::i;:::-;20503:84;;19954:640;;;;;;;:::o;20600:210::-;20687:4;20725:2;20714:9;20710:18;20702:26;;20738:65;20800:1;20789:9;20785:17;20776:6;20738:65;:::i;:::-;20600:210;;;;:::o;20816:222::-;20909:4;20947:2;20936:9;20932:18;20924:26;;20960:71;21028:1;21017:9;21013:17;21004:6;20960:71;:::i;:::-;20816:222;;;;:::o;21044:313::-;21157:4;21195:2;21184:9;21180:18;21172:26;;21244:9;21238:4;21234:20;21230:1;21219:9;21215:17;21208:47;21272:78;21345:4;21336:6;21272:78;:::i;:::-;21264:86;;21044:313;;;;:::o;21363:419::-;21529:4;21567:2;21556:9;21552:18;21544:26;;21616:9;21610:4;21606:20;21602:1;21591:9;21587:17;21580:47;21644:131;21770:4;21644:131;:::i;:::-;21636:139;;21363:419;;;:::o;21788:::-;21954:4;21992:2;21981:9;21977:18;21969:26;;22041:9;22035:4;22031:20;22027:1;22016:9;22012:17;22005:47;22069:131;22195:4;22069:131;:::i;:::-;22061:139;;21788:419;;;:::o;22213:::-;22379:4;22417:2;22406:9;22402:18;22394:26;;22466:9;22460:4;22456:20;22452:1;22441:9;22437:17;22430:47;22494:131;22620:4;22494:131;:::i;:::-;22486:139;;22213:419;;;:::o;22638:::-;22804:4;22842:2;22831:9;22827:18;22819:26;;22891:9;22885:4;22881:20;22877:1;22866:9;22862:17;22855:47;22919:131;23045:4;22919:131;:::i;:::-;22911:139;;22638:419;;;:::o;23063:::-;23229:4;23267:2;23256:9;23252:18;23244:26;;23316:9;23310:4;23306:20;23302:1;23291:9;23287:17;23280:47;23344:131;23470:4;23344:131;:::i;:::-;23336:139;;23063:419;;;:::o;23488:::-;23654:4;23692:2;23681:9;23677:18;23669:26;;23741:9;23735:4;23731:20;23727:1;23716:9;23712:17;23705:47;23769:131;23895:4;23769:131;:::i;:::-;23761:139;;23488:419;;;:::o;23913:::-;24079:4;24117:2;24106:9;24102:18;24094:26;;24166:9;24160:4;24156:20;24152:1;24141:9;24137:17;24130:47;24194:131;24320:4;24194:131;:::i;:::-;24186:139;;23913:419;;;:::o;24338:::-;24504:4;24542:2;24531:9;24527:18;24519:26;;24591:9;24585:4;24581:20;24577:1;24566:9;24562:17;24555:47;24619:131;24745:4;24619:131;:::i;:::-;24611:139;;24338:419;;;:::o;24763:::-;24929:4;24967:2;24956:9;24952:18;24944:26;;25016:9;25010:4;25006:20;25002:1;24991:9;24987:17;24980:47;25044:131;25170:4;25044:131;:::i;:::-;25036:139;;24763:419;;;:::o;25188:::-;25354:4;25392:2;25381:9;25377:18;25369:26;;25441:9;25435:4;25431:20;25427:1;25416:9;25412:17;25405:47;25469:131;25595:4;25469:131;:::i;:::-;25461:139;;25188:419;;;:::o;25613:::-;25779:4;25817:2;25806:9;25802:18;25794:26;;25866:9;25860:4;25856:20;25852:1;25841:9;25837:17;25830:47;25894:131;26020:4;25894:131;:::i;:::-;25886:139;;25613:419;;;:::o;26038:::-;26204:4;26242:2;26231:9;26227:18;26219:26;;26291:9;26285:4;26281:20;26277:1;26266:9;26262:17;26255:47;26319:131;26445:4;26319:131;:::i;:::-;26311:139;;26038:419;;;:::o;26463:::-;26629:4;26667:2;26656:9;26652:18;26644:26;;26716:9;26710:4;26706:20;26702:1;26691:9;26687:17;26680:47;26744:131;26870:4;26744:131;:::i;:::-;26736:139;;26463:419;;;:::o;26888:::-;27054:4;27092:2;27081:9;27077:18;27069:26;;27141:9;27135:4;27131:20;27127:1;27116:9;27112:17;27105:47;27169:131;27295:4;27169:131;:::i;:::-;27161:139;;26888:419;;;:::o;27313:222::-;27406:4;27444:2;27433:9;27429:18;27421:26;;27457:71;27525:1;27514:9;27510:17;27501:6;27457:71;:::i;:::-;27313:222;;;;:::o;27541:129::-;27575:6;27602:20;;:::i;:::-;27592:30;;27631:33;27659:4;27651:6;27631:33;:::i;:::-;27541:129;;;:::o;27676:75::-;27709:6;27742:2;27736:9;27726:19;;27676:75;:::o;27757:307::-;27818:4;27908:18;27900:6;27897:30;27894:56;;;27930:18;;:::i;:::-;27894:56;27968:29;27990:6;27968:29;:::i;:::-;27960:37;;28052:4;28046;28042:15;28034:23;;27757:307;;;:::o;28070:308::-;28132:4;28222:18;28214:6;28211:30;28208:56;;;28244:18;;:::i;:::-;28208:56;28282:29;28304:6;28282:29;:::i;:::-;28274:37;;28366:4;28360;28356:15;28348:23;;28070:308;;;:::o;28384:141::-;28433:4;28456:3;28448:11;;28479:3;28476:1;28469:14;28513:4;28510:1;28500:18;28492:26;;28384:141;;;:::o;28531:98::-;28582:6;28616:5;28610:12;28600:22;;28531:98;;;:::o;28635:99::-;28687:6;28721:5;28715:12;28705:22;;28635:99;;;:::o;28740:168::-;28823:11;28857:6;28852:3;28845:19;28897:4;28892:3;28888:14;28873:29;;28740:168;;;;:::o;28914:147::-;29015:11;29052:3;29037:18;;28914:147;;;;:::o;29067:169::-;29151:11;29185:6;29180:3;29173:19;29225:4;29220:3;29216:14;29201:29;;29067:169;;;;:::o;29242:148::-;29344:11;29381:3;29366:18;;29242:148;;;;:::o;29396:305::-;29436:3;29455:20;29473:1;29455:20;:::i;:::-;29450:25;;29489:20;29507:1;29489:20;:::i;:::-;29484:25;;29643:1;29575:66;29571:74;29568:1;29565:81;29562:107;;;29649:18;;:::i;:::-;29562:107;29693:1;29690;29686:9;29679:16;;29396:305;;;;:::o;29707:185::-;29747:1;29764:20;29782:1;29764:20;:::i;:::-;29759:25;;29798:20;29816:1;29798:20;:::i;:::-;29793:25;;29837:1;29827:35;;29842:18;;:::i;:::-;29827:35;29884:1;29881;29877:9;29872:14;;29707:185;;;;:::o;29898:348::-;29938:7;29961:20;29979:1;29961:20;:::i;:::-;29956:25;;29995:20;30013:1;29995:20;:::i;:::-;29990:25;;30183:1;30115:66;30111:74;30108:1;30105:81;30100:1;30093:9;30086:17;30082:105;30079:131;;;30190:18;;:::i;:::-;30079:131;30238:1;30235;30231:9;30220:20;;29898:348;;;;:::o;30252:191::-;30292:4;30312:20;30330:1;30312:20;:::i;:::-;30307:25;;30346:20;30364:1;30346:20;:::i;:::-;30341:25;;30385:1;30382;30379:8;30376:34;;;30390:18;;:::i;:::-;30376:34;30435:1;30432;30428:9;30420:17;;30252:191;;;;:::o;30449:96::-;30486:7;30515:24;30533:5;30515:24;:::i;:::-;30504:35;;30449:96;;;:::o;30551:90::-;30585:7;30628:5;30621:13;30614:21;30603:32;;30551:90;;;:::o;30647:77::-;30684:7;30713:5;30702:16;;30647:77;;;:::o;30730:149::-;30766:7;30806:66;30799:5;30795:78;30784:89;;30730:149;;;:::o;30885:126::-;30922:7;30962:42;30955:5;30951:54;30940:65;;30885:126;;;:::o;31017:77::-;31054:7;31083:5;31072:16;;31017:77;;;:::o;31100:154::-;31184:6;31179:3;31174;31161:30;31246:1;31237:6;31232:3;31228:16;31221:27;31100:154;;;:::o;31260:307::-;31328:1;31338:113;31352:6;31349:1;31346:13;31338:113;;;31437:1;31432:3;31428:11;31422:18;31418:1;31413:3;31409:11;31402:39;31374:2;31371:1;31367:10;31362:15;;31338:113;;;31469:6;31466:1;31463:13;31460:101;;;31549:1;31540:6;31535:3;31531:16;31524:27;31460:101;31309:258;31260:307;;;:::o;31573:320::-;31617:6;31654:1;31648:4;31644:12;31634:22;;31701:1;31695:4;31691:12;31722:18;31712:81;;31778:4;31770:6;31766:17;31756:27;;31712:81;31840:2;31832:6;31829:14;31809:18;31806:38;31803:84;;;31859:18;;:::i;:::-;31803:84;31624:269;31573:320;;;:::o;31899:281::-;31982:27;32004:4;31982:27;:::i;:::-;31974:6;31970:40;32112:6;32100:10;32097:22;32076:18;32064:10;32061:34;32058:62;32055:88;;;32123:18;;:::i;:::-;32055:88;32163:10;32159:2;32152:22;31942:238;31899:281;;:::o;32186:233::-;32225:3;32248:24;32266:5;32248:24;:::i;:::-;32239:33;;32294:66;32287:5;32284:77;32281:103;;;32364:18;;:::i;:::-;32281:103;32411:1;32404:5;32400:13;32393:20;;32186:233;;;:::o;32425:100::-;32464:7;32493:26;32513:5;32493:26;:::i;:::-;32482:37;;32425:100;;;:::o;32531:94::-;32570:7;32599:20;32613:5;32599:20;:::i;:::-;32588:31;;32531:94;;;:::o;32631:176::-;32663:1;32680:20;32698:1;32680:20;:::i;:::-;32675:25;;32714:20;32732:1;32714:20;:::i;:::-;32709:25;;32753:1;32743:35;;32758:18;;:::i;:::-;32743:35;32799:1;32796;32792:9;32787:14;;32631:176;;;;:::o;32813:180::-;32861:77;32858:1;32851:88;32958:4;32955:1;32948:15;32982:4;32979:1;32972:15;32999:180;33047:77;33044:1;33037:88;33144:4;33141:1;33134:15;33168:4;33165:1;33158:15;33185:180;33233:77;33230:1;33223:88;33330:4;33327:1;33320:15;33354:4;33351:1;33344:15;33371:180;33419:77;33416:1;33409:88;33516:4;33513:1;33506:15;33540:4;33537:1;33530:15;33557:180;33605:77;33602:1;33595:88;33702:4;33699:1;33692:15;33726:4;33723:1;33716:15;33743:117;33852:1;33849;33842:12;33866:117;33975:1;33972;33965:12;33989:117;34098:1;34095;34088:12;34112:117;34221:1;34218;34211:12;34235:117;34344:1;34341;34334:12;34358:117;34467:1;34464;34457:12;34481:102;34522:6;34573:2;34569:7;34564:2;34557:5;34553:14;34549:28;34539:38;;34481:102;;;:::o;34589:94::-;34622:8;34670:5;34666:2;34662:14;34641:35;;34589:94;;;:::o;34689:167::-;34829:19;34825:1;34817:6;34813:14;34806:43;34689:167;:::o;34862:224::-;35002:34;34998:1;34990:6;34986:14;34979:58;35071:7;35066:2;35058:6;35054:15;35047:32;34862:224;:::o;35092:164::-;35232:16;35228:1;35220:6;35216:14;35209:40;35092:164;:::o;35262:225::-;35402:34;35398:1;35390:6;35386:14;35379:58;35471:8;35466:2;35458:6;35454:15;35447:33;35262:225;:::o;35493:220::-;35633:34;35629:1;35621:6;35617:14;35610:58;35702:3;35697:2;35689:6;35685:15;35678:28;35493:220;:::o;35719:182::-;35859:34;35855:1;35847:6;35843:14;35836:58;35719:182;:::o;35907:173::-;36047:25;36043:1;36035:6;36031:14;36024:49;35907:173;:::o;36086:234::-;36226:34;36222:1;36214:6;36210:14;36203:58;36295:17;36290:2;36282:6;36278:15;36271:42;36086:234;:::o;36326:221::-;36466:34;36462:1;36454:6;36450:14;36443:58;36535:4;36530:2;36522:6;36518:15;36511:29;36326:221;:::o;36553:173::-;36693:25;36689:1;36681:6;36677:14;36670:49;36553:173;:::o;36732:238::-;36872:34;36868:1;36860:6;36856:14;36849:58;36941:21;36936:2;36928:6;36924:15;36917:46;36732:238;:::o;36976:114::-;;:::o;37096:221::-;37236:34;37232:1;37224:6;37220:14;37213:58;37305:4;37300:2;37292:6;37288:15;37281:29;37096:221;:::o;37323:168::-;37463:20;37459:1;37451:6;37447:14;37440:44;37323:168;:::o;37497:169::-;37637:21;37633:1;37625:6;37621:14;37614:45;37497:169;:::o;37672:122::-;37745:24;37763:5;37745:24;:::i;:::-;37738:5;37735:35;37725:63;;37784:1;37781;37774:12;37725:63;37672:122;:::o;37800:116::-;37870:21;37885:5;37870:21;:::i;:::-;37863:5;37860:32;37850:60;;37906:1;37903;37896:12;37850:60;37800:116;:::o;37922:122::-;37995:24;38013:5;37995:24;:::i;:::-;37988:5;37985:35;37975:63;;38034:1;38031;38024:12;37975:63;37922:122;:::o;38050:120::-;38122:23;38139:5;38122:23;:::i;:::-;38115:5;38112:34;38102:62;;38160:1;38157;38150:12;38102:62;38050:120;:::o;38176:122::-;38249:24;38267:5;38249:24;:::i;:::-;38242:5;38239:35;38229:63;;38288:1;38285;38278:12;38229:63;38176:122;:::o

Swarm Source

ipfs://3934262fd7489b9bb90e4e5601acd0bc181742073fd9d902a7d395dd78d609f8
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.