ETH Price: $2,609.45 (-1.43%)

Token

Thicc Frens Genesis (THICCNFT)
 

Overview

Max Total Supply

0 THICCNFT

Holders

42

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
Thicc Frens: Deployer
Balance
81 THICCNFT
0x3fc9d279c54983b6a696b5aa3a319e150ff34238
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:
THICCNFT

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

        _afterTokenTransfer(address(0), to, tokenId);
    }

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

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

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

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

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

        _afterTokenTransfer(owner, address(0), tokenId);
    }

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

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

// File: contracts/THICCNFT.sol


pragma solidity 0.8.4;




contract THICCNFT is ERC721, Ownable {
    using Strings for uint256;
    using Address for address;

    uint64 private _maxSupply = 5555;

    uint8 private _totalNftMinted = 155;
    uint8 private _reserve = 155;
    uint8 private _totalOwnerMinted;

    uint8 public _mintPerWhiteList = 5;
    uint8 public _mintPerUser = 5;
    uint8 private _mintPerOwner= 5;

    address private _owner;
    string private baseURI;
    string private _baseExtension = ".json";
    
    bool private revealed = false;
    string private notRevealedUri;
    bool public isMintEnabled;
    bool public isWhiteListEnable;

    struct Details {
        address users;
        uint256[] tokenIds;
    }

    uint256 private mintPriceForUser = 0.069 ether ;
    uint256 private mintPriceForWhiteListUser = 0.0420 ether ;
    
    mapping(address => Details) private _userTokenIds;
    mapping(address => bool) public _ownerAddress;

    mapping(address => bool) public whitelistedAddresses;


    constructor(string memory _initNotRevealedUri) ERC721("Thicc Frens Genesis", "THICCNFT") {
        _owner = msg.sender;
        isWhiteListEnable = true;
        _ownerAddress[msg.sender]=true;
        setNotRevealedURI(_initNotRevealedUri);
        


    }
    modifier zeroAddress(address _account) {
        require(_account != address(0), "address can't be zero address");
        _;
    }
    

    // only owner
    // This function is used to update the presale supply.
    function setMaxWhiteListSupply(uint8 _amount) external onlyOwner {
        _mintPerWhiteList = _amount;
    }

    // This function is used to update the public supply.
    function setMaxPublicSupply(uint8 _amount) external onlyOwner {
        _mintPerUser = _amount;
    }
    // This function is used to update the public supply.
    function setMaxOwnerSupply(uint8 _amount) external onlyOwner {
        _mintPerOwner = _amount;
    }

    // please pass the value in wei.
    function setMintPriceForUser(uint256 _price) external onlyOwner {
        require(_price > 0, "Price must greater then zero. ");
        mintPriceForUser = _price;
    }

    // please pass the value in wei.
    function setMintPriceForWhiteListUser(uint256 _price) external onlyOwner {
        require(_price > 0, "Price must greater then zero. ");
        mintPriceForWhiteListUser = _price;
    }

    // Here we can pass address in array format.
    function setWhiteListUserInBatch(address[] memory _account)
        external
        onlyOwner
        returns (bool)
    {
        require(_account.length <= 100,"Array length must be less then 100" );
        for (uint256 i = 0; i < _account.length; i++) {
            address userAddress = _account[i];
            whitelistedAddresses[userAddress] = true;
        }
        return true;
    }

    // Here we can pass address in array format.
    function setOwnerWhiteList(address[] memory _account)
        external
        onlyOwner
        returns (bool)
    {
        require(_account.length <= 100,"Array length must be less then 100" );
        for (uint256 i = 0; i < _account.length; i++) {
            address userAddress = _account[i];
            _ownerAddress[userAddress] = true;
        }
        return true;
    }

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

    function setMaxSupply(uint64 _setValidTokenIds) external onlyOwner {
        _maxSupply = _setValidTokenIds;
    }

    function removeWhiteListUser(address _account) external onlyOwner zeroAddress(_account) {
        require(whitelistedAddresses[_account] == true);
        whitelistedAddresses[_account] = false;
    }
    function removeOwnerWhiteList(address _account) external onlyOwner zeroAddress(_account) {

        _ownerAddress[_account] = false;
    }

    function toggleWhiteList() external onlyOwner {
        isWhiteListEnable = !isWhiteListEnable;
    }

    function mintEnabled() external onlyOwner {
        isMintEnabled = !isMintEnabled;
    }

    function reveal() external onlyOwner {
        revealed = true;
    }

    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedUri = _notRevealedURI;
    }
    function totalMintNft() external view onlyOwner returns(uint256){
        return _totalNftMinted;
    }
    function OwnerTotalMintNft() external view onlyOwner returns(uint256){
        return _totalOwnerMinted;
    }
    // internal
    
    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }

    function ownerMint(uint256 _quantity) internal {
        address user = msg.sender;
        require(_ownerAddress[user], " You are not owner.");
        uint256 checkToken= _userTokenIds[msg.sender].tokenIds.length;
        checkToken= checkToken+_quantity;
        require(checkToken <=_mintPerOwner,"Mint limit exceeded.");
        uint256 supply = _totalOwnerMinted;
        require((supply + _quantity) <= _reserve, "All _reserve NFTs are minted");
        for (uint256 i = 1; i <= _quantity; i++) {
            uint256 ids = supply + i;
            _safeMint(user, ids);
            _totalOwnerMinted++;
            Details storage newDetails = _userTokenIds[user];
            newDetails.users = user;
            newDetails.tokenIds.push(ids);
        }
    }

    // public functions
    function mint(uint256 _quantity) external payable {
        require(_quantity >= 1 && _quantity <= 5   ,"Invalid argument.");
        require(isMintEnabled, "minting not enabled");
        address user = msg.sender;
        require(user != address(0), "address can't be zero address");

        if (_ownerAddress[user]) {
            ownerMint(_quantity);
        } else {
            uint256 supply = _totalNftMinted;
            require((supply + _quantity) <= _maxSupply, "All NFTs are minted");

            if (isWhiteListEnable) {
                require(
                    _quantity <= _mintPerWhiteList,
                    "Please enter valid tokenIds."
                );
                require(
                    whitelistedAddresses[msg.sender],
                    "You are not whiteListed."
                );
                uint256 checkToken= _userTokenIds[msg.sender].tokenIds.length;
                checkToken= checkToken+_quantity;

                require(
                    checkToken <=
                        _mintPerWhiteList,
                    "Your mint limit exceed."
                );
                uint256 mintFee = estimateFee(_quantity);
                require(
                    msg.value >= mintFee,
                    "Please enter asking price for mint NFT."
                );
                Address.sendValue(payable(_owner), mintFee);
                for (uint256 i = 1; i <= _quantity; i++) {
                    uint256 ids = supply + i;
                    _safeMint(user, ids);
                    _totalNftMinted++;
                    Details storage newDetails = _userTokenIds[user];
                    newDetails.users = user;
                    newDetails.tokenIds.push(ids);
                }
            } else {
                require(
                    _quantity <= _mintPerUser,
                    "Please enter valid tokenIds."
                );

                uint256 checkToken= _userTokenIds[msg.sender].tokenIds.length;
                checkToken= checkToken+_quantity;
                require(
                    checkToken <= _mintPerUser,
                    "Your mint limit exceed."
                );
                uint256 mintFee = estimateFee(_quantity);
                require(msg.value >= mintFee, "Please enter minting price.");
                Address.sendValue(payable(_owner), mintFee);
                for (uint256 j = 1; j <= _quantity; j++) {
                    uint256 ids = supply + j;
                    _safeMint(user, ids);
                    _totalNftMinted++;
                    Details storage newDetails = _userTokenIds[user];
                    newDetails.users = user;
                    newDetails.tokenIds.push(ids);
                }
            }
        }
    }
    function estimateFee(uint256 tokenId) public view returns (uint256) {
        if (isWhiteListEnable) {
            return mintPriceForWhiteListUser * tokenId;
        } else {
            return mintPriceForUser * tokenId;
        }
    }

    function owner() public view virtual override returns (address) {
        return _owner;
    }

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

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

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

    function getUserTokenIds() external view returns (uint256[] memory) {
        Details memory d=  _userTokenIds[msg.sender];
        return d.tokenIds;

    }

    // check which price is set for nft.
    function currentNftPrice() external view returns (uint256) {
        if (isWhiteListEnable) {
            return mintPriceForWhiteListUser;
        }
        return mintPriceForUser;
    }
    function checkReveal() external view returns(bool){
        return revealed;
    }
    function checkNonRevealUrl() external view returns(string memory){
        return notRevealedUri;
    }
    function gerBaseUri() external view returns(string memory){
        return baseURI;
    }
    // This function is gives total number of NFT minted.
    function getTotalMintedNFT() external view returns(uint256){
        uint256 userMint =  _totalNftMinted - 155 ;
        uint8 ownerMinted=_totalOwnerMinted;
        return userMint + ownerMinted;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"OwnerTotalMintNft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintPerUser","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintPerWhiteList","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_ownerAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkNonRevealUrl","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkReveal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentNftPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"estimateFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gerBaseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalMintedNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUserTokenIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":"isMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhiteListEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeOwnerWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeWhiteListUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_amount","type":"uint8"}],"name":"setMaxOwnerSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_amount","type":"uint8"}],"name":"setMaxPublicSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_setValidTokenIds","type":"uint64"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_amount","type":"uint8"}],"name":"setMaxWhiteListSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setMintPriceForUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setMintPriceForWhiteListUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_account","type":"address[]"}],"name":"setOwnerWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_account","type":"address[]"}],"name":"setWhiteListUserInBatch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"toggleWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMintNft","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":"whitelistedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040526115b3600660146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550609b6006601c6101000a81548160ff021916908360ff160217905550609b6006601d6101000a81548160ff021916908360ff16021790555060056006601f6101000a81548160ff021916908360ff1602179055506005600760006101000a81548160ff021916908360ff1602179055506005600760016101000a81548160ff021916908360ff1602179055506040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060099080519060200190620001089291906200049c565b506000600a60006101000a81548160ff02191690831515021790555066f5232269808000600d55669536c708910000600e553480156200014757600080fd5b50604051620066573803806200665783398181016040528101906200016d9190620005be565b6040518060400160405280601381526020017f5468696363204672656e732047656e65736973000000000000000000000000008152506040518060400160405280600881526020017f54484943434e46540000000000000000000000000000000000000000000000008152508160009080519060200190620001f19291906200049c565b5080600190805190602001906200020a9291906200049c565b5050506200022d62000221620002f960201b60201c565b6200030160201b60201c565b33600760026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60016101000a81548160ff0219169083151502179055506001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002f281620003c760201b60201c565b50620007f6565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003d7620002f960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003fd6200047260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000456576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200044d906200062a565b60405180910390fd5b80600b90805190602001906200046e9291906200049c565b5050565b6000600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620004aa90620006f2565b90600052602060002090601f016020900481019282620004ce57600085556200051a565b82601f10620004e957805160ff19168380011785556200051a565b828001600101855582156200051a579182015b8281111562000519578251825591602001919060010190620004fc565b5b5090506200052991906200052d565b5090565b5b80821115620005485760008160009055506001016200052e565b5090565b6000620005636200055d8462000675565b6200064c565b9050828152602081018484840111156200057c57600080fd5b62000589848285620006bc565b509392505050565b600082601f830112620005a357600080fd5b8151620005b58482602086016200054c565b91505092915050565b600060208284031215620005d157600080fd5b600082015167ffffffffffffffff811115620005ec57600080fd5b620005fa8482850162000591565b91505092915050565b600062000612602083620006ab565b91506200061f82620007cd565b602082019050919050565b60006020820190508181036000830152620006458162000603565b9050919050565b6000620006586200066b565b905062000666828262000728565b919050565b6000604051905090565b600067ffffffffffffffff8211156200069357620006926200078d565b5b6200069e82620007bc565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620006dc578082015181840152602081019050620006bf565b83811115620006ec576000848401525b50505050565b600060028204905060018216806200070b57607f821691505b602082108114156200072257620007216200075e565b5b50919050565b6200073382620007bc565b810181811067ffffffffffffffff821117156200075557620007546200078d565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b615e5180620008066000396000f3fe6080604052600436106102885760003560e01c80638da5cb5b1161015a578063bd3e8ba5116100c1578063e985e9c51161007a578063e985e9c514610999578063f07bd601146109d6578063f2c4ce1e14610a13578063f2fde38b14610a3c578063f3d9582114610a65578063f5bfa26f14610a9057610288565b8063bd3e8ba514610899578063c87b56dd146108c4578063caa5c2aa14610901578063cef8cb871461092c578063d123973014610957578063dd9526db1461096e57610288565b8063a22cb46511610113578063a22cb465146107b1578063a475b5dd146107da578063acca7295146107f1578063b299ed931461081a578063b5ed1e3114610845578063b88d4fde1461087057610288565b80638da5cb5b146106ae57806394dadfe9146106d957806395d89b41146107165780639950126b146107415780639c4f3d0a1461076c578063a0712d681461079557610288565b8063346de50a116101fe5780636352211e116101b75780636352211e146105a057806370a08231146105dd578063715018a61461061a5780637fbc62321461063157806383b256281461065c5780638884e86b1461068557610288565b8063346de50a146104a657806342842e0e146104d15780634746ebdf146104fa57806355f804b314610523578063583698511461054c57806363430b381461058957610288565b8063127e8e4d11610250578063127e8e4d14610398578063139fc94e146103d557806323b872dd1461040057806327076078146104295780632b8d294d1461045457806330533fdf1461047d57610288565b806301ffc9a71461028d57806306c933d8146102ca57806306fdde0314610307578063081812fc14610332578063095ea7b31461036f575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af919061443b565b610ab9565b6040516102c19190614c7e565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec9190614253565b610b9b565b6040516102fe9190614c7e565b60405180910390f35b34801561031357600080fd5b5061031c610bbb565b6040516103299190614c99565b60405180910390f35b34801561033e57600080fd5b50610359600480360381019061035491906144ce565b610c4d565b6040516103669190614bf5565b60405180910390f35b34801561037b57600080fd5b50610396600480360381019061039191906143be565b610cd2565b005b3480156103a457600080fd5b506103bf60048036038101906103ba91906144ce565b610dea565b6040516103cc91906150bb565b60405180910390f35b3480156103e157600080fd5b506103ea610e2c565b6040516103f791906150bb565b60405180910390f35b34801561040c57600080fd5b50610427600480360381019061042291906142b8565b610e56565b005b34801561043557600080fd5b5061043e610eb6565b60405161044b9190614c5c565b60405180910390f35b34801561046057600080fd5b5061047b600480360381019061047691906144ce565b610fbf565b005b34801561048957600080fd5b506104a4600480360381019061049f9190614520565b611088565b005b3480156104b257600080fd5b506104bb611122565b6040516104c89190614c7e565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f391906142b8565b611135565b005b34801561050657600080fd5b50610521600480360381019061051c91906144ce565b611155565b005b34801561052f57600080fd5b5061054a6004803603810190610545919061448d565b61121e565b005b34801561055857600080fd5b50610573600480360381019061056e91906143fa565b6112b4565b6040516105809190614c7e565b60405180910390f35b34801561059557600080fd5b5061059e61143e565b005b3480156105ac57600080fd5b506105c760048036038101906105c291906144ce565b6114e6565b6040516105d49190614bf5565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190614253565b611598565b60405161061191906150bb565b60405180910390f35b34801561062657600080fd5b5061062f611650565b005b34801561063d57600080fd5b506106466116d8565b60405161065391906150d6565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e9190614253565b6116eb565b005b34801561069157600080fd5b506106ac60048036038101906106a79190614520565b611834565b005b3480156106ba57600080fd5b506106c36118ce565b6040516106d09190614bf5565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb91906143fa565b6118f8565b60405161070d9190614c7e565b60405180910390f35b34801561072257600080fd5b5061072b611a82565b6040516107389190614c99565b60405180910390f35b34801561074d57600080fd5b50610756611b14565b6040516107639190614c99565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e91906144f7565b611ba6565b005b6107af60048036038101906107aa91906144ce565b611c4e565b005b3480156107bd57600080fd5b506107d860048036038101906107d39190614382565b612443565b005b3480156107e657600080fd5b506107ef612459565b005b3480156107fd57600080fd5b5061081860048036038101906108139190614253565b6124f2565b005b34801561082657600080fd5b5061082f612698565b60405161083c91906150d6565b60405180910390f35b34801561085157600080fd5b5061085a6126ab565b6040516108679190614c99565b60405180910390f35b34801561087c57600080fd5b5061089760048036038101906108929190614307565b61273d565b005b3480156108a557600080fd5b506108ae61279f565b6040516108bb91906150bb565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e691906144ce565b612835565b6040516108f89190614c99565b60405180910390f35b34801561090d57600080fd5b5061091661298e565b6040516109239190614c7e565b60405180910390f35b34801561093857600080fd5b506109416129a5565b60405161094e91906150bb565b60405180910390f35b34801561096357600080fd5b5061096c6129f3565b005b34801561097a57600080fd5b50610983612a9b565b6040516109909190614c7e565b60405180910390f35b3480156109a557600080fd5b506109c060048036038101906109bb919061427c565b612aae565b6040516109cd9190614c7e565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f89190614253565b612b42565b604051610a0a9190614c7e565b60405180910390f35b348015610a1f57600080fd5b50610a3a6004803603810190610a35919061448d565b612b62565b005b348015610a4857600080fd5b50610a636004803603810190610a5e9190614253565b612bf8565b005b348015610a7157600080fd5b50610a7a612cf0565b604051610a8791906150bb565b60405180910390f35b348015610a9c57600080fd5b50610ab76004803603810190610ab29190614520565b612d86565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b945750610b9382612e20565b5b9050919050565b60116020528060005260406000206000915054906101000a900460ff1681565b606060008054610bca90615460565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf690615460565b8015610c435780601f10610c1857610100808354040283529160200191610c43565b820191906000526020600020905b815481529060010190602001808311610c2657829003601f168201915b5050505050905090565b6000610c5882612e8a565b610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90614fbb565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cdd826114e6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d459061505b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d6d612ef6565b73ffffffffffffffffffffffffffffffffffffffff161480610d9c5750610d9b81610d96612ef6565b612aae565b5b610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd290614edb565b60405180910390fd5b610de58383612efe565b505050565b6000600c60019054906101000a900460ff1615610e165781600e54610e0f91906152c7565b9050610e27565b81600d54610e2491906152c7565b90505b919050565b6000600c60019054906101000a900460ff1615610e4d57600e549050610e53565b600d5490505b90565b610e67610e61612ef6565b82612fb7565b610ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9d9061507b565b60405180910390fd5b610eb1838383613095565b505050565b60606000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805480602002602001604051908101604052809291908181526020018280548015610fa957602002820191906000526020600020905b815481526020019060010190808311610f95575b5050505050815250509050806020015191505090565b610fc7612ef6565b73ffffffffffffffffffffffffffffffffffffffff16610fe56118ce565b73ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103290614fdb565b60405180910390fd5b6000811161107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614ddb565b60405180910390fd5b80600d8190555050565b611090612ef6565b73ffffffffffffffffffffffffffffffffffffffff166110ae6118ce565b73ffffffffffffffffffffffffffffffffffffffff1614611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90614fdb565b60405180910390fd5b80600760016101000a81548160ff021916908360ff16021790555050565b600c60009054906101000a900460ff1681565b6111508383836040518060200160405280600081525061273d565b505050565b61115d612ef6565b73ffffffffffffffffffffffffffffffffffffffff1661117b6118ce565b73ffffffffffffffffffffffffffffffffffffffff16146111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c890614fdb565b60405180910390fd5b60008111611214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b90614ddb565b60405180910390fd5b80600e8190555050565b611226612ef6565b73ffffffffffffffffffffffffffffffffffffffff166112446118ce565b73ffffffffffffffffffffffffffffffffffffffff161461129a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129190614fdb565b60405180910390fd5b80600890805190602001906112b0929190613fb7565b5050565b60006112be612ef6565b73ffffffffffffffffffffffffffffffffffffffff166112dc6118ce565b73ffffffffffffffffffffffffffffffffffffffff1614611332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132990614fdb565b60405180910390fd5b606482511115611377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136e90614f3b565b60405180910390fd5b60005b82518110156114345760008382815181106113be577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061142c906154c3565b91505061137a565b5060019050919050565b611446612ef6565b73ffffffffffffffffffffffffffffffffffffffff166114646118ce565b73ffffffffffffffffffffffffffffffffffffffff16146114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b190614fdb565b60405180910390fd5b600c60019054906101000a900460ff1615600c60016101000a81548160ff021916908315150217905550565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158690614f1b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160090614efb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611658612ef6565b73ffffffffffffffffffffffffffffffffffffffff166116766118ce565b73ffffffffffffffffffffffffffffffffffffffff16146116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c390614fdb565b60405180910390fd5b6116d660006132fc565b565b600760009054906101000a900460ff1681565b6116f3612ef6565b73ffffffffffffffffffffffffffffffffffffffff166117116118ce565b73ffffffffffffffffffffffffffffffffffffffff1614611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e90614fdb565b60405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf90614e3b565b60405180910390fd5b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61183c612ef6565b73ffffffffffffffffffffffffffffffffffffffff1661185a6118ce565b73ffffffffffffffffffffffffffffffffffffffff16146118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a790614fdb565b60405180910390fd5b806006601f6101000a81548160ff021916908360ff16021790555050565b6000600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611902612ef6565b73ffffffffffffffffffffffffffffffffffffffff166119206118ce565b73ffffffffffffffffffffffffffffffffffffffff1614611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d90614fdb565b60405180910390fd5b6064825111156119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b290614f3b565b60405180910390fd5b60005b8251811015611a78576000838281518110611a02577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080611a70906154c3565b9150506119be565b5060019050919050565b606060018054611a9190615460565b80601f0160208091040260200160405190810160405280929190818152602001828054611abd90615460565b8015611b0a5780601f10611adf57610100808354040283529160200191611b0a565b820191906000526020600020905b815481529060010190602001808311611aed57829003601f168201915b5050505050905090565b606060088054611b2390615460565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4f90615460565b8015611b9c5780601f10611b7157610100808354040283529160200191611b9c565b820191906000526020600020905b815481529060010190602001808311611b7f57829003601f168201915b5050505050905090565b611bae612ef6565b73ffffffffffffffffffffffffffffffffffffffff16611bcc6118ce565b73ffffffffffffffffffffffffffffffffffffffff1614611c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1990614fdb565b60405180910390fd5b80600660146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60018110158015611c60575060058111155b611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9690614e5b565b60405180910390fd5b600c60009054906101000a900460ff16611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614d3b565b60405180910390fd5b6000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5a90614e3b565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611dc357611dbe826133c2565b61243f565b60006006601c9054906101000a900460ff1660ff169050600660149054906101000a900467ffffffffffffffff1667ffffffffffffffff168382611e079190615240565b1115611e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3f9061509b565b60405180910390fd5b600c60019054906101000a900460ff1615612195576006601f9054906101000a900460ff1660ff16831115611eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea990614cbb565b60405180910390fd5b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3590614cdb565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018054905090508381611f949190615240565b90506006601f9054906101000a900460ff1660ff16811115611feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe290614d7b565b60405180910390fd5b6000611ff685610dea565b90508034101561203b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120329061503b565b60405180910390fd5b612067600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826136a4565b6000600190505b85811161218d57600081856120839190615240565b905061208f8682613798565b6006601c81819054906101000a900460ff16809291906120ae9061550c565b91906101000a81548160ff021916908360ff160217905550506000600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050868160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060010182908060018154018082558091505060019003906000526020600020016000909190919091505550508080612185906154c3565b91505061206e565b50505061243d565b600760009054906101000a900460ff1660ff168311156121ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e190614cbb565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180549050905083816122409190615240565b9050600760009054906101000a900460ff1660ff16811115612297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228e90614d7b565b60405180910390fd5b60006122a285610dea565b9050803410156122e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122de90614ffb565b60405180910390fd5b612313600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826136a4565b6000600190505b858111612439576000818561232f9190615240565b905061233b8682613798565b6006601c81819054906101000a900460ff168092919061235a9061550c565b91906101000a81548160ff021916908360ff160217905550506000600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050868160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060010182908060018154018082558091505060019003906000526020600020016000909190919091505550508080612431906154c3565b91505061231a565b5050505b505b5050565b61245561244e612ef6565b83836137b6565b5050565b612461612ef6565b73ffffffffffffffffffffffffffffffffffffffff1661247f6118ce565b73ffffffffffffffffffffffffffffffffffffffff16146124d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cc90614fdb565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b6124fa612ef6565b73ffffffffffffffffffffffffffffffffffffffff166125186118ce565b73ffffffffffffffffffffffffffffffffffffffff161461256e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256590614fdb565b60405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d690614e3b565b60405180910390fd5b60011515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461263c57600080fd5b6000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6006601f9054906101000a900460ff1681565b6060600b80546126ba90615460565b80601f01602080910402602001604051908101604052809291908181526020018280546126e690615460565b80156127335780601f1061270857610100808354040283529160200191612733565b820191906000526020600020905b81548152906001019060200180831161271657829003601f168201915b5050505050905090565b61274e612748612ef6565b83612fb7565b61278d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127849061507b565b60405180910390fd5b61279984848484613923565b50505050565b60006127a9612ef6565b73ffffffffffffffffffffffffffffffffffffffff166127c76118ce565b73ffffffffffffffffffffffffffffffffffffffff161461281d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281490614fdb565b60405180910390fd5b6006601e9054906101000a900460ff1660ff16905090565b606061284082612e8a565b61287f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128769061501b565b60405180910390fd5b60001515600a60009054906101000a900460ff161515141561292d57600b80546128a890615460565b80601f01602080910402602001604051908101604052809291908181526020018280546128d490615460565b80156129215780601f106128f657610100808354040283529160200191612921565b820191906000526020600020905b81548152906001019060200180831161290457829003601f168201915b50505050509050612989565b600061293761397f565b905060008151116129575760405180602001604052806000815250612985565b8061296184613a11565b600960405160200161297593929190614baf565b6040516020818303038152906040525b9150505b919050565b6000600a60009054906101000a900460ff16905090565b600080609b6006601c9054906101000a900460ff166129c49190615355565b60ff16905060006006601e9054906101000a900460ff1690508060ff16826129ec9190615240565b9250505090565b6129fb612ef6565b73ffffffffffffffffffffffffffffffffffffffff16612a196118ce565b73ffffffffffffffffffffffffffffffffffffffff1614612a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6690614fdb565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b600c60019054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b612b6a612ef6565b73ffffffffffffffffffffffffffffffffffffffff16612b886118ce565b73ffffffffffffffffffffffffffffffffffffffff1614612bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd590614fdb565b60405180910390fd5b80600b9080519060200190612bf4929190613fb7565b5050565b612c00612ef6565b73ffffffffffffffffffffffffffffffffffffffff16612c1e6118ce565b73ffffffffffffffffffffffffffffffffffffffff1614612c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6b90614fdb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdb90614d5b565b60405180910390fd5b612ced816132fc565b50565b6000612cfa612ef6565b73ffffffffffffffffffffffffffffffffffffffff16612d186118ce565b73ffffffffffffffffffffffffffffffffffffffff1614612d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6590614fdb565b60405180910390fd5b6006601c9054906101000a900460ff1660ff16905090565b612d8e612ef6565b73ffffffffffffffffffffffffffffffffffffffff16612dac6118ce565b73ffffffffffffffffffffffffffffffffffffffff1614612e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df990614fdb565b60405180910390fd5b80600760006101000a81548160ff021916908360ff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612f71836114e6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612fc282612e8a565b613001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff890614ebb565b60405180910390fd5b600061300c836114e6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061304e575061304d8185612aae565b5b8061308c57508373ffffffffffffffffffffffffffffffffffffffff1661307484610c4d565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166130b5826114e6565b73ffffffffffffffffffffffffffffffffffffffff161461310b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310290614d9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561317b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317290614dfb565b60405180910390fd5b613186838383613bbe565b613191600082612efe565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131e19190615321565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132389190615240565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46132f7838383613bc3565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000339050601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344a90614f5b565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180549050905082816134a99190615240565b9050600760019054906101000a900460ff1660ff16811115613500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f790614cfb565b60405180910390fd5b60006006601e9054906101000a900460ff1660ff1690506006601d9054906101000a900460ff1660ff1684826135369190615240565b1115613577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356e90614f7b565b60405180910390fd5b6000600190505b84811161369d57600081836135939190615240565b905061359f8582613798565b6006601e81819054906101000a900460ff16809291906135be9061550c565b91906101000a81548160ff021916908360ff160217905550506000600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060010182908060018154018082558091505060019003906000526020600020016000909190919091505550508080613695906154c3565b91505061357e565b5050505050565b804710156136e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136de90614e9b565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161370d90614be0565b60006040518083038185875af1925050503d806000811461374a576040519150601f19603f3d011682016040523d82523d6000602084013e61374f565b606091505b5050905080613793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378a90614e7b565b60405180910390fd5b505050565b6137b2828260405180602001604052806000815250613bc8565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381c90614e1b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516139169190614c7e565b60405180910390a3505050565b61392e848484613095565b61393a84848484613c23565b613979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397090614d1b565b60405180910390fd5b50505050565b60606008805461398e90615460565b80601f01602080910402602001604051908101604052809291908181526020018280546139ba90615460565b8015613a075780601f106139dc57610100808354040283529160200191613a07565b820191906000526020600020905b8154815290600101906020018083116139ea57829003601f168201915b5050505050905090565b60606000821415613a59576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613bb9565b600082905060005b60008214613a8b578080613a74906154c3565b915050600a82613a849190615296565b9150613a61565b60008167ffffffffffffffff811115613acd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015613aff5781602001600182028036833780820191505090505b5090505b60008514613bb257600182613b189190615321565b9150600a85613b279190615536565b6030613b339190615240565b60f81b818381518110613b6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613bab9190615296565b9450613b03565b8093505050505b919050565b505050565b505050565b613bd28383613dba565b613bdf6000848484613c23565b613c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c1590614d1b565b60405180910390fd5b505050565b6000613c448473ffffffffffffffffffffffffffffffffffffffff16613f94565b15613dad578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613c6d612ef6565b8786866040518563ffffffff1660e01b8152600401613c8f9493929190614c10565b602060405180830381600087803b158015613ca957600080fd5b505af1925050508015613cda57506040513d601f19601f82011682018060405250810190613cd79190614464565b60015b613d5d573d8060008114613d0a576040519150601f19603f3d011682016040523d82523d6000602084013e613d0f565b606091505b50600081511415613d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d4c90614d1b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613db2565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e2190614f9b565b60405180910390fd5b613e3381612e8a565b15613e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e6a90614dbb565b60405180910390fd5b613e7f60008383613bbe565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ecf9190615240565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613f9060008383613bc3565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613fc390615460565b90600052602060002090601f016020900481019282613fe5576000855561402c565b82601f10613ffe57805160ff191683800117855561402c565b8280016001018555821561402c579182015b8281111561402b578251825591602001919060010190614010565b5b509050614039919061403d565b5090565b5b8082111561405657600081600090555060010161403e565b5090565b600061406d61406884615116565b6150f1565b9050808382526020820190508285602086028201111561408c57600080fd5b60005b858110156140bc57816140a28882614142565b84526020840193506020830192505060018101905061408f565b5050509392505050565b60006140d96140d484615142565b6150f1565b9050828152602081018484840111156140f157600080fd5b6140fc84828561541e565b509392505050565b600061411761411284615173565b6150f1565b90508281526020810184848401111561412f57600080fd5b61413a84828561541e565b509392505050565b60008135905061415181615d91565b92915050565b600082601f83011261416857600080fd5b813561417884826020860161405a565b91505092915050565b60008135905061419081615da8565b92915050565b6000813590506141a581615dbf565b92915050565b6000815190506141ba81615dbf565b92915050565b600082601f8301126141d157600080fd5b81356141e18482602086016140c6565b91505092915050565b600082601f8301126141fb57600080fd5b813561420b848260208601614104565b91505092915050565b60008135905061422381615dd6565b92915050565b60008135905061423881615ded565b92915050565b60008135905061424d81615e04565b92915050565b60006020828403121561426557600080fd5b600061427384828501614142565b91505092915050565b6000806040838503121561428f57600080fd5b600061429d85828601614142565b92505060206142ae85828601614142565b9150509250929050565b6000806000606084860312156142cd57600080fd5b60006142db86828701614142565b93505060206142ec86828701614142565b92505060406142fd86828701614214565b9150509250925092565b6000806000806080858703121561431d57600080fd5b600061432b87828801614142565b945050602061433c87828801614142565b935050604061434d87828801614214565b925050606085013567ffffffffffffffff81111561436a57600080fd5b614376878288016141c0565b91505092959194509250565b6000806040838503121561439557600080fd5b60006143a385828601614142565b92505060206143b485828601614181565b9150509250929050565b600080604083850312156143d157600080fd5b60006143df85828601614142565b92505060206143f085828601614214565b9150509250929050565b60006020828403121561440c57600080fd5b600082013567ffffffffffffffff81111561442657600080fd5b61443284828501614157565b91505092915050565b60006020828403121561444d57600080fd5b600061445b84828501614196565b91505092915050565b60006020828403121561447657600080fd5b6000614484848285016141ab565b91505092915050565b60006020828403121561449f57600080fd5b600082013567ffffffffffffffff8111156144b957600080fd5b6144c5848285016141ea565b91505092915050565b6000602082840312156144e057600080fd5b60006144ee84828501614214565b91505092915050565b60006020828403121561450957600080fd5b600061451784828501614229565b91505092915050565b60006020828403121561453257600080fd5b60006145408482850161423e565b91505092915050565b60006145558383614b82565b60208301905092915050565b61456a81615389565b82525050565b600061457b826151c9565b61458581856151f7565b9350614590836151a4565b8060005b838110156145c15781516145a88882614549565b97506145b3836151ea565b925050600181019050614594565b5085935050505092915050565b6145d78161539b565b82525050565b60006145e8826151d4565b6145f28185615208565b935061460281856020860161542d565b61460b81615623565b840191505092915050565b6000614621826151df565b61462b8185615224565b935061463b81856020860161542d565b61464481615623565b840191505092915050565b600061465a826151df565b6146648185615235565b935061467481856020860161542d565b80840191505092915050565b6000815461468d81615460565b6146978186615235565b945060018216600081146146b257600181146146c3576146f6565b60ff198316865281860193506146f6565b6146cc856151b4565b60005b838110156146ee578154818901526001820191506020810190506146cf565b838801955050505b50505092915050565b600061470c601c83615224565b915061471782615634565b602082019050919050565b600061472f601883615224565b915061473a8261565d565b602082019050919050565b6000614752601483615224565b915061475d82615686565b602082019050919050565b6000614775603283615224565b9150614780826156af565b604082019050919050565b6000614798601383615224565b91506147a3826156fe565b602082019050919050565b60006147bb602683615224565b91506147c682615727565b604082019050919050565b60006147de601783615224565b91506147e982615776565b602082019050919050565b6000614801602583615224565b915061480c8261579f565b604082019050919050565b6000614824601c83615224565b915061482f826157ee565b602082019050919050565b6000614847601e83615224565b915061485282615817565b602082019050919050565b600061486a602483615224565b915061487582615840565b604082019050919050565b600061488d601983615224565b91506148988261588f565b602082019050919050565b60006148b0601d83615224565b91506148bb826158b8565b602082019050919050565b60006148d3601183615224565b91506148de826158e1565b602082019050919050565b60006148f6603a83615224565b91506149018261590a565b604082019050919050565b6000614919601d83615224565b915061492482615959565b602082019050919050565b600061493c602c83615224565b915061494782615982565b604082019050919050565b600061495f603883615224565b915061496a826159d1565b604082019050919050565b6000614982602a83615224565b915061498d82615a20565b604082019050919050565b60006149a5602983615224565b91506149b082615a6f565b604082019050919050565b60006149c8602283615224565b91506149d382615abe565b604082019050919050565b60006149eb601383615224565b91506149f682615b0d565b602082019050919050565b6000614a0e601c83615224565b9150614a1982615b36565b602082019050919050565b6000614a31602083615224565b9150614a3c82615b5f565b602082019050919050565b6000614a54602c83615224565b9150614a5f82615b88565b604082019050919050565b6000614a77602083615224565b9150614a8282615bd7565b602082019050919050565b6000614a9a601b83615224565b9150614aa582615c00565b602082019050919050565b6000614abd602f83615224565b9150614ac882615c29565b604082019050919050565b6000614ae0602783615224565b9150614aeb82615c78565b604082019050919050565b6000614b03602183615224565b9150614b0e82615cc7565b604082019050919050565b6000614b26600083615219565b9150614b3182615d16565b600082019050919050565b6000614b49603183615224565b9150614b5482615d19565b604082019050919050565b6000614b6c601383615224565b9150614b7782615d68565b602082019050919050565b614b8b816153f3565b82525050565b614b9a816153f3565b82525050565b614ba981615411565b82525050565b6000614bbb828661464f565b9150614bc7828561464f565b9150614bd38284614680565b9150819050949350505050565b6000614beb82614b19565b9150819050919050565b6000602082019050614c0a6000830184614561565b92915050565b6000608082019050614c256000830187614561565b614c326020830186614561565b614c3f6040830185614b91565b8181036060830152614c5181846145dd565b905095945050505050565b60006020820190508181036000830152614c768184614570565b905092915050565b6000602082019050614c9360008301846145ce565b92915050565b60006020820190508181036000830152614cb38184614616565b905092915050565b60006020820190508181036000830152614cd4816146ff565b9050919050565b60006020820190508181036000830152614cf481614722565b9050919050565b60006020820190508181036000830152614d1481614745565b9050919050565b60006020820190508181036000830152614d3481614768565b9050919050565b60006020820190508181036000830152614d548161478b565b9050919050565b60006020820190508181036000830152614d74816147ae565b9050919050565b60006020820190508181036000830152614d94816147d1565b9050919050565b60006020820190508181036000830152614db4816147f4565b9050919050565b60006020820190508181036000830152614dd481614817565b9050919050565b60006020820190508181036000830152614df48161483a565b9050919050565b60006020820190508181036000830152614e148161485d565b9050919050565b60006020820190508181036000830152614e3481614880565b9050919050565b60006020820190508181036000830152614e54816148a3565b9050919050565b60006020820190508181036000830152614e74816148c6565b9050919050565b60006020820190508181036000830152614e94816148e9565b9050919050565b60006020820190508181036000830152614eb48161490c565b9050919050565b60006020820190508181036000830152614ed48161492f565b9050919050565b60006020820190508181036000830152614ef481614952565b9050919050565b60006020820190508181036000830152614f1481614975565b9050919050565b60006020820190508181036000830152614f3481614998565b9050919050565b60006020820190508181036000830152614f54816149bb565b9050919050565b60006020820190508181036000830152614f74816149de565b9050919050565b60006020820190508181036000830152614f9481614a01565b9050919050565b60006020820190508181036000830152614fb481614a24565b9050919050565b60006020820190508181036000830152614fd481614a47565b9050919050565b60006020820190508181036000830152614ff481614a6a565b9050919050565b6000602082019050818103600083015261501481614a8d565b9050919050565b6000602082019050818103600083015261503481614ab0565b9050919050565b6000602082019050818103600083015261505481614ad3565b9050919050565b6000602082019050818103600083015261507481614af6565b9050919050565b6000602082019050818103600083015261509481614b3c565b9050919050565b600060208201905081810360008301526150b481614b5f565b9050919050565b60006020820190506150d06000830184614b91565b92915050565b60006020820190506150eb6000830184614ba0565b92915050565b60006150fb61510c565b90506151078282615492565b919050565b6000604051905090565b600067ffffffffffffffff821115615131576151306155f4565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561515d5761515c6155f4565b5b61516682615623565b9050602081019050919050565b600067ffffffffffffffff82111561518e5761518d6155f4565b5b61519782615623565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061524b826153f3565b9150615256836153f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561528b5761528a615567565b5b828201905092915050565b60006152a1826153f3565b91506152ac836153f3565b9250826152bc576152bb615596565b5b828204905092915050565b60006152d2826153f3565b91506152dd836153f3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561531657615315615567565b5b828202905092915050565b600061532c826153f3565b9150615337836153f3565b92508282101561534a57615349615567565b5b828203905092915050565b600061536082615411565b915061536b83615411565b92508282101561537e5761537d615567565b5b828203905092915050565b6000615394826153d3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561544b578082015181840152602081019050615430565b8381111561545a576000848401525b50505050565b6000600282049050600182168061547857607f821691505b6020821081141561548c5761548b6155c5565b5b50919050565b61549b82615623565b810181811067ffffffffffffffff821117156154ba576154b96155f4565b5b80604052505050565b60006154ce826153f3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561550157615500615567565b5b600182019050919050565b600061551782615411565b915060ff82141561552b5761552a615567565b5b600182019050919050565b6000615541826153f3565b915061554c836153f3565b92508261555c5761555b615596565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f506c6561736520656e7465722076616c696420746f6b656e4964732e00000000600082015250565b7f596f7520617265206e6f742077686974654c69737465642e0000000000000000600082015250565b7f4d696e74206c696d69742065786365656465642e000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f6d696e74696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f596f7572206d696e74206c696d6974206578636565642e000000000000000000600082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5072696365206d7573742067726561746572207468656e207a65726f2e200000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f616464726573732063616e2774206265207a65726f2061646472657373000000600082015250565b7f496e76616c696420617267756d656e742e000000000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4172726179206c656e677468206d757374206265206c657373207468656e203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b7f20596f7520617265206e6f74206f776e65722e00000000000000000000000000600082015250565b7f416c6c205f72657365727665204e46547320617265206d696e74656400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f506c6561736520656e746572206d696e74696e672070726963652e0000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f506c6561736520656e7465722061736b696e6720707269636520666f72206d6960008201527f6e74204e46542e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f416c6c204e46547320617265206d696e74656400000000000000000000000000600082015250565b615d9a81615389565b8114615da557600080fd5b50565b615db18161539b565b8114615dbc57600080fd5b50565b615dc8816153a7565b8114615dd357600080fd5b50565b615ddf816153f3565b8114615dea57600080fd5b50565b615df6816153fd565b8114615e0157600080fd5b50565b615e0d81615411565b8114615e1857600080fd5b5056fea2646970667358221220a76a482f586465797618d7423e30b4a217a74cdf9880a33016956a9ac94b69cb64736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5934756170784c54415a38315a6a614673686845747576737551704464664b6964415a6367387176794d6f6a0000000000000000000000

Deployed Bytecode

0x6080604052600436106102885760003560e01c80638da5cb5b1161015a578063bd3e8ba5116100c1578063e985e9c51161007a578063e985e9c514610999578063f07bd601146109d6578063f2c4ce1e14610a13578063f2fde38b14610a3c578063f3d9582114610a65578063f5bfa26f14610a9057610288565b8063bd3e8ba514610899578063c87b56dd146108c4578063caa5c2aa14610901578063cef8cb871461092c578063d123973014610957578063dd9526db1461096e57610288565b8063a22cb46511610113578063a22cb465146107b1578063a475b5dd146107da578063acca7295146107f1578063b299ed931461081a578063b5ed1e3114610845578063b88d4fde1461087057610288565b80638da5cb5b146106ae57806394dadfe9146106d957806395d89b41146107165780639950126b146107415780639c4f3d0a1461076c578063a0712d681461079557610288565b8063346de50a116101fe5780636352211e116101b75780636352211e146105a057806370a08231146105dd578063715018a61461061a5780637fbc62321461063157806383b256281461065c5780638884e86b1461068557610288565b8063346de50a146104a657806342842e0e146104d15780634746ebdf146104fa57806355f804b314610523578063583698511461054c57806363430b381461058957610288565b8063127e8e4d11610250578063127e8e4d14610398578063139fc94e146103d557806323b872dd1461040057806327076078146104295780632b8d294d1461045457806330533fdf1461047d57610288565b806301ffc9a71461028d57806306c933d8146102ca57806306fdde0314610307578063081812fc14610332578063095ea7b31461036f575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af919061443b565b610ab9565b6040516102c19190614c7e565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec9190614253565b610b9b565b6040516102fe9190614c7e565b60405180910390f35b34801561031357600080fd5b5061031c610bbb565b6040516103299190614c99565b60405180910390f35b34801561033e57600080fd5b50610359600480360381019061035491906144ce565b610c4d565b6040516103669190614bf5565b60405180910390f35b34801561037b57600080fd5b50610396600480360381019061039191906143be565b610cd2565b005b3480156103a457600080fd5b506103bf60048036038101906103ba91906144ce565b610dea565b6040516103cc91906150bb565b60405180910390f35b3480156103e157600080fd5b506103ea610e2c565b6040516103f791906150bb565b60405180910390f35b34801561040c57600080fd5b50610427600480360381019061042291906142b8565b610e56565b005b34801561043557600080fd5b5061043e610eb6565b60405161044b9190614c5c565b60405180910390f35b34801561046057600080fd5b5061047b600480360381019061047691906144ce565b610fbf565b005b34801561048957600080fd5b506104a4600480360381019061049f9190614520565b611088565b005b3480156104b257600080fd5b506104bb611122565b6040516104c89190614c7e565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f391906142b8565b611135565b005b34801561050657600080fd5b50610521600480360381019061051c91906144ce565b611155565b005b34801561052f57600080fd5b5061054a6004803603810190610545919061448d565b61121e565b005b34801561055857600080fd5b50610573600480360381019061056e91906143fa565b6112b4565b6040516105809190614c7e565b60405180910390f35b34801561059557600080fd5b5061059e61143e565b005b3480156105ac57600080fd5b506105c760048036038101906105c291906144ce565b6114e6565b6040516105d49190614bf5565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190614253565b611598565b60405161061191906150bb565b60405180910390f35b34801561062657600080fd5b5061062f611650565b005b34801561063d57600080fd5b506106466116d8565b60405161065391906150d6565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e9190614253565b6116eb565b005b34801561069157600080fd5b506106ac60048036038101906106a79190614520565b611834565b005b3480156106ba57600080fd5b506106c36118ce565b6040516106d09190614bf5565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb91906143fa565b6118f8565b60405161070d9190614c7e565b60405180910390f35b34801561072257600080fd5b5061072b611a82565b6040516107389190614c99565b60405180910390f35b34801561074d57600080fd5b50610756611b14565b6040516107639190614c99565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e91906144f7565b611ba6565b005b6107af60048036038101906107aa91906144ce565b611c4e565b005b3480156107bd57600080fd5b506107d860048036038101906107d39190614382565b612443565b005b3480156107e657600080fd5b506107ef612459565b005b3480156107fd57600080fd5b5061081860048036038101906108139190614253565b6124f2565b005b34801561082657600080fd5b5061082f612698565b60405161083c91906150d6565b60405180910390f35b34801561085157600080fd5b5061085a6126ab565b6040516108679190614c99565b60405180910390f35b34801561087c57600080fd5b5061089760048036038101906108929190614307565b61273d565b005b3480156108a557600080fd5b506108ae61279f565b6040516108bb91906150bb565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e691906144ce565b612835565b6040516108f89190614c99565b60405180910390f35b34801561090d57600080fd5b5061091661298e565b6040516109239190614c7e565b60405180910390f35b34801561093857600080fd5b506109416129a5565b60405161094e91906150bb565b60405180910390f35b34801561096357600080fd5b5061096c6129f3565b005b34801561097a57600080fd5b50610983612a9b565b6040516109909190614c7e565b60405180910390f35b3480156109a557600080fd5b506109c060048036038101906109bb919061427c565b612aae565b6040516109cd9190614c7e565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f89190614253565b612b42565b604051610a0a9190614c7e565b60405180910390f35b348015610a1f57600080fd5b50610a3a6004803603810190610a35919061448d565b612b62565b005b348015610a4857600080fd5b50610a636004803603810190610a5e9190614253565b612bf8565b005b348015610a7157600080fd5b50610a7a612cf0565b604051610a8791906150bb565b60405180910390f35b348015610a9c57600080fd5b50610ab76004803603810190610ab29190614520565b612d86565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b945750610b9382612e20565b5b9050919050565b60116020528060005260406000206000915054906101000a900460ff1681565b606060008054610bca90615460565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf690615460565b8015610c435780601f10610c1857610100808354040283529160200191610c43565b820191906000526020600020905b815481529060010190602001808311610c2657829003601f168201915b5050505050905090565b6000610c5882612e8a565b610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90614fbb565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cdd826114e6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d459061505b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d6d612ef6565b73ffffffffffffffffffffffffffffffffffffffff161480610d9c5750610d9b81610d96612ef6565b612aae565b5b610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd290614edb565b60405180910390fd5b610de58383612efe565b505050565b6000600c60019054906101000a900460ff1615610e165781600e54610e0f91906152c7565b9050610e27565b81600d54610e2491906152c7565b90505b919050565b6000600c60019054906101000a900460ff1615610e4d57600e549050610e53565b600d5490505b90565b610e67610e61612ef6565b82612fb7565b610ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9d9061507b565b60405180910390fd5b610eb1838383613095565b505050565b60606000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805480602002602001604051908101604052809291908181526020018280548015610fa957602002820191906000526020600020905b815481526020019060010190808311610f95575b5050505050815250509050806020015191505090565b610fc7612ef6565b73ffffffffffffffffffffffffffffffffffffffff16610fe56118ce565b73ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103290614fdb565b60405180910390fd5b6000811161107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614ddb565b60405180910390fd5b80600d8190555050565b611090612ef6565b73ffffffffffffffffffffffffffffffffffffffff166110ae6118ce565b73ffffffffffffffffffffffffffffffffffffffff1614611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90614fdb565b60405180910390fd5b80600760016101000a81548160ff021916908360ff16021790555050565b600c60009054906101000a900460ff1681565b6111508383836040518060200160405280600081525061273d565b505050565b61115d612ef6565b73ffffffffffffffffffffffffffffffffffffffff1661117b6118ce565b73ffffffffffffffffffffffffffffffffffffffff16146111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c890614fdb565b60405180910390fd5b60008111611214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b90614ddb565b60405180910390fd5b80600e8190555050565b611226612ef6565b73ffffffffffffffffffffffffffffffffffffffff166112446118ce565b73ffffffffffffffffffffffffffffffffffffffff161461129a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129190614fdb565b60405180910390fd5b80600890805190602001906112b0929190613fb7565b5050565b60006112be612ef6565b73ffffffffffffffffffffffffffffffffffffffff166112dc6118ce565b73ffffffffffffffffffffffffffffffffffffffff1614611332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132990614fdb565b60405180910390fd5b606482511115611377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136e90614f3b565b60405180910390fd5b60005b82518110156114345760008382815181106113be577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061142c906154c3565b91505061137a565b5060019050919050565b611446612ef6565b73ffffffffffffffffffffffffffffffffffffffff166114646118ce565b73ffffffffffffffffffffffffffffffffffffffff16146114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b190614fdb565b60405180910390fd5b600c60019054906101000a900460ff1615600c60016101000a81548160ff021916908315150217905550565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158690614f1b565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160090614efb565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611658612ef6565b73ffffffffffffffffffffffffffffffffffffffff166116766118ce565b73ffffffffffffffffffffffffffffffffffffffff16146116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c390614fdb565b60405180910390fd5b6116d660006132fc565b565b600760009054906101000a900460ff1681565b6116f3612ef6565b73ffffffffffffffffffffffffffffffffffffffff166117116118ce565b73ffffffffffffffffffffffffffffffffffffffff1614611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e90614fdb565b60405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cf90614e3b565b60405180910390fd5b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61183c612ef6565b73ffffffffffffffffffffffffffffffffffffffff1661185a6118ce565b73ffffffffffffffffffffffffffffffffffffffff16146118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a790614fdb565b60405180910390fd5b806006601f6101000a81548160ff021916908360ff16021790555050565b6000600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000611902612ef6565b73ffffffffffffffffffffffffffffffffffffffff166119206118ce565b73ffffffffffffffffffffffffffffffffffffffff1614611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196d90614fdb565b60405180910390fd5b6064825111156119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b290614f3b565b60405180910390fd5b60005b8251811015611a78576000838281518110611a02577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080611a70906154c3565b9150506119be565b5060019050919050565b606060018054611a9190615460565b80601f0160208091040260200160405190810160405280929190818152602001828054611abd90615460565b8015611b0a5780601f10611adf57610100808354040283529160200191611b0a565b820191906000526020600020905b815481529060010190602001808311611aed57829003601f168201915b5050505050905090565b606060088054611b2390615460565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4f90615460565b8015611b9c5780601f10611b7157610100808354040283529160200191611b9c565b820191906000526020600020905b815481529060010190602001808311611b7f57829003601f168201915b5050505050905090565b611bae612ef6565b73ffffffffffffffffffffffffffffffffffffffff16611bcc6118ce565b73ffffffffffffffffffffffffffffffffffffffff1614611c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1990614fdb565b60405180910390fd5b80600660146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60018110158015611c60575060058111155b611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9690614e5b565b60405180910390fd5b600c60009054906101000a900460ff16611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce590614d3b565b60405180910390fd5b6000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5a90614e3b565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611dc357611dbe826133c2565b61243f565b60006006601c9054906101000a900460ff1660ff169050600660149054906101000a900467ffffffffffffffff1667ffffffffffffffff168382611e079190615240565b1115611e48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3f9061509b565b60405180910390fd5b600c60019054906101000a900460ff1615612195576006601f9054906101000a900460ff1660ff16831115611eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea990614cbb565b60405180910390fd5b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3590614cdb565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018054905090508381611f949190615240565b90506006601f9054906101000a900460ff1660ff16811115611feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe290614d7b565b60405180910390fd5b6000611ff685610dea565b90508034101561203b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120329061503b565b60405180910390fd5b612067600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826136a4565b6000600190505b85811161218d57600081856120839190615240565b905061208f8682613798565b6006601c81819054906101000a900460ff16809291906120ae9061550c565b91906101000a81548160ff021916908360ff160217905550506000600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050868160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060010182908060018154018082558091505060019003906000526020600020016000909190919091505550508080612185906154c3565b91505061206e565b50505061243d565b600760009054906101000a900460ff1660ff168311156121ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e190614cbb565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180549050905083816122409190615240565b9050600760009054906101000a900460ff1660ff16811115612297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228e90614d7b565b60405180910390fd5b60006122a285610dea565b9050803410156122e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122de90614ffb565b60405180910390fd5b612313600760029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826136a4565b6000600190505b858111612439576000818561232f9190615240565b905061233b8682613798565b6006601c81819054906101000a900460ff168092919061235a9061550c565b91906101000a81548160ff021916908360ff160217905550506000600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050868160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060010182908060018154018082558091505060019003906000526020600020016000909190919091505550508080612431906154c3565b91505061231a565b5050505b505b5050565b61245561244e612ef6565b83836137b6565b5050565b612461612ef6565b73ffffffffffffffffffffffffffffffffffffffff1661247f6118ce565b73ffffffffffffffffffffffffffffffffffffffff16146124d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cc90614fdb565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b6124fa612ef6565b73ffffffffffffffffffffffffffffffffffffffff166125186118ce565b73ffffffffffffffffffffffffffffffffffffffff161461256e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256590614fdb565b60405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d690614e3b565b60405180910390fd5b60011515601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461263c57600080fd5b6000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6006601f9054906101000a900460ff1681565b6060600b80546126ba90615460565b80601f01602080910402602001604051908101604052809291908181526020018280546126e690615460565b80156127335780601f1061270857610100808354040283529160200191612733565b820191906000526020600020905b81548152906001019060200180831161271657829003601f168201915b5050505050905090565b61274e612748612ef6565b83612fb7565b61278d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127849061507b565b60405180910390fd5b61279984848484613923565b50505050565b60006127a9612ef6565b73ffffffffffffffffffffffffffffffffffffffff166127c76118ce565b73ffffffffffffffffffffffffffffffffffffffff161461281d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281490614fdb565b60405180910390fd5b6006601e9054906101000a900460ff1660ff16905090565b606061284082612e8a565b61287f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128769061501b565b60405180910390fd5b60001515600a60009054906101000a900460ff161515141561292d57600b80546128a890615460565b80601f01602080910402602001604051908101604052809291908181526020018280546128d490615460565b80156129215780601f106128f657610100808354040283529160200191612921565b820191906000526020600020905b81548152906001019060200180831161290457829003601f168201915b50505050509050612989565b600061293761397f565b905060008151116129575760405180602001604052806000815250612985565b8061296184613a11565b600960405160200161297593929190614baf565b6040516020818303038152906040525b9150505b919050565b6000600a60009054906101000a900460ff16905090565b600080609b6006601c9054906101000a900460ff166129c49190615355565b60ff16905060006006601e9054906101000a900460ff1690508060ff16826129ec9190615240565b9250505090565b6129fb612ef6565b73ffffffffffffffffffffffffffffffffffffffff16612a196118ce565b73ffffffffffffffffffffffffffffffffffffffff1614612a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6690614fdb565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b600c60019054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b612b6a612ef6565b73ffffffffffffffffffffffffffffffffffffffff16612b886118ce565b73ffffffffffffffffffffffffffffffffffffffff1614612bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd590614fdb565b60405180910390fd5b80600b9080519060200190612bf4929190613fb7565b5050565b612c00612ef6565b73ffffffffffffffffffffffffffffffffffffffff16612c1e6118ce565b73ffffffffffffffffffffffffffffffffffffffff1614612c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6b90614fdb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cdb90614d5b565b60405180910390fd5b612ced816132fc565b50565b6000612cfa612ef6565b73ffffffffffffffffffffffffffffffffffffffff16612d186118ce565b73ffffffffffffffffffffffffffffffffffffffff1614612d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6590614fdb565b60405180910390fd5b6006601c9054906101000a900460ff1660ff16905090565b612d8e612ef6565b73ffffffffffffffffffffffffffffffffffffffff16612dac6118ce565b73ffffffffffffffffffffffffffffffffffffffff1614612e02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df990614fdb565b60405180910390fd5b80600760006101000a81548160ff021916908360ff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612f71836114e6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612fc282612e8a565b613001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff890614ebb565b60405180910390fd5b600061300c836114e6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061304e575061304d8185612aae565b5b8061308c57508373ffffffffffffffffffffffffffffffffffffffff1661307484610c4d565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166130b5826114e6565b73ffffffffffffffffffffffffffffffffffffffff161461310b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310290614d9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561317b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317290614dfb565b60405180910390fd5b613186838383613bbe565b613191600082612efe565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131e19190615321565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132389190615240565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46132f7838383613bc3565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000339050601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344a90614f5b565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180549050905082816134a99190615240565b9050600760019054906101000a900460ff1660ff16811115613500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f790614cfb565b60405180910390fd5b60006006601e9054906101000a900460ff1660ff1690506006601d9054906101000a900460ff1660ff1684826135369190615240565b1115613577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356e90614f7b565b60405180910390fd5b6000600190505b84811161369d57600081836135939190615240565b905061359f8582613798565b6006601e81819054906101000a900460ff16809291906135be9061550c565b91906101000a81548160ff021916908360ff160217905550506000600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060010182908060018154018082558091505060019003906000526020600020016000909190919091505550508080613695906154c3565b91505061357e565b5050505050565b804710156136e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136de90614e9b565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161370d90614be0565b60006040518083038185875af1925050503d806000811461374a576040519150601f19603f3d011682016040523d82523d6000602084013e61374f565b606091505b5050905080613793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161378a90614e7b565b60405180910390fd5b505050565b6137b2828260405180602001604052806000815250613bc8565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613825576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161381c90614e1b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516139169190614c7e565b60405180910390a3505050565b61392e848484613095565b61393a84848484613c23565b613979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161397090614d1b565b60405180910390fd5b50505050565b60606008805461398e90615460565b80601f01602080910402602001604051908101604052809291908181526020018280546139ba90615460565b8015613a075780601f106139dc57610100808354040283529160200191613a07565b820191906000526020600020905b8154815290600101906020018083116139ea57829003601f168201915b5050505050905090565b60606000821415613a59576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613bb9565b600082905060005b60008214613a8b578080613a74906154c3565b915050600a82613a849190615296565b9150613a61565b60008167ffffffffffffffff811115613acd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015613aff5781602001600182028036833780820191505090505b5090505b60008514613bb257600182613b189190615321565b9150600a85613b279190615536565b6030613b339190615240565b60f81b818381518110613b6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613bab9190615296565b9450613b03565b8093505050505b919050565b505050565b505050565b613bd28383613dba565b613bdf6000848484613c23565b613c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c1590614d1b565b60405180910390fd5b505050565b6000613c448473ffffffffffffffffffffffffffffffffffffffff16613f94565b15613dad578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613c6d612ef6565b8786866040518563ffffffff1660e01b8152600401613c8f9493929190614c10565b602060405180830381600087803b158015613ca957600080fd5b505af1925050508015613cda57506040513d601f19601f82011682018060405250810190613cd79190614464565b60015b613d5d573d8060008114613d0a576040519150601f19603f3d011682016040523d82523d6000602084013e613d0f565b606091505b50600081511415613d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d4c90614d1b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613db2565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e2190614f9b565b60405180910390fd5b613e3381612e8a565b15613e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e6a90614dbb565b60405180910390fd5b613e7f60008383613bbe565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ecf9190615240565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613f9060008383613bc3565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054613fc390615460565b90600052602060002090601f016020900481019282613fe5576000855561402c565b82601f10613ffe57805160ff191683800117855561402c565b8280016001018555821561402c579182015b8281111561402b578251825591602001919060010190614010565b5b509050614039919061403d565b5090565b5b8082111561405657600081600090555060010161403e565b5090565b600061406d61406884615116565b6150f1565b9050808382526020820190508285602086028201111561408c57600080fd5b60005b858110156140bc57816140a28882614142565b84526020840193506020830192505060018101905061408f565b5050509392505050565b60006140d96140d484615142565b6150f1565b9050828152602081018484840111156140f157600080fd5b6140fc84828561541e565b509392505050565b600061411761411284615173565b6150f1565b90508281526020810184848401111561412f57600080fd5b61413a84828561541e565b509392505050565b60008135905061415181615d91565b92915050565b600082601f83011261416857600080fd5b813561417884826020860161405a565b91505092915050565b60008135905061419081615da8565b92915050565b6000813590506141a581615dbf565b92915050565b6000815190506141ba81615dbf565b92915050565b600082601f8301126141d157600080fd5b81356141e18482602086016140c6565b91505092915050565b600082601f8301126141fb57600080fd5b813561420b848260208601614104565b91505092915050565b60008135905061422381615dd6565b92915050565b60008135905061423881615ded565b92915050565b60008135905061424d81615e04565b92915050565b60006020828403121561426557600080fd5b600061427384828501614142565b91505092915050565b6000806040838503121561428f57600080fd5b600061429d85828601614142565b92505060206142ae85828601614142565b9150509250929050565b6000806000606084860312156142cd57600080fd5b60006142db86828701614142565b93505060206142ec86828701614142565b92505060406142fd86828701614214565b9150509250925092565b6000806000806080858703121561431d57600080fd5b600061432b87828801614142565b945050602061433c87828801614142565b935050604061434d87828801614214565b925050606085013567ffffffffffffffff81111561436a57600080fd5b614376878288016141c0565b91505092959194509250565b6000806040838503121561439557600080fd5b60006143a385828601614142565b92505060206143b485828601614181565b9150509250929050565b600080604083850312156143d157600080fd5b60006143df85828601614142565b92505060206143f085828601614214565b9150509250929050565b60006020828403121561440c57600080fd5b600082013567ffffffffffffffff81111561442657600080fd5b61443284828501614157565b91505092915050565b60006020828403121561444d57600080fd5b600061445b84828501614196565b91505092915050565b60006020828403121561447657600080fd5b6000614484848285016141ab565b91505092915050565b60006020828403121561449f57600080fd5b600082013567ffffffffffffffff8111156144b957600080fd5b6144c5848285016141ea565b91505092915050565b6000602082840312156144e057600080fd5b60006144ee84828501614214565b91505092915050565b60006020828403121561450957600080fd5b600061451784828501614229565b91505092915050565b60006020828403121561453257600080fd5b60006145408482850161423e565b91505092915050565b60006145558383614b82565b60208301905092915050565b61456a81615389565b82525050565b600061457b826151c9565b61458581856151f7565b9350614590836151a4565b8060005b838110156145c15781516145a88882614549565b97506145b3836151ea565b925050600181019050614594565b5085935050505092915050565b6145d78161539b565b82525050565b60006145e8826151d4565b6145f28185615208565b935061460281856020860161542d565b61460b81615623565b840191505092915050565b6000614621826151df565b61462b8185615224565b935061463b81856020860161542d565b61464481615623565b840191505092915050565b600061465a826151df565b6146648185615235565b935061467481856020860161542d565b80840191505092915050565b6000815461468d81615460565b6146978186615235565b945060018216600081146146b257600181146146c3576146f6565b60ff198316865281860193506146f6565b6146cc856151b4565b60005b838110156146ee578154818901526001820191506020810190506146cf565b838801955050505b50505092915050565b600061470c601c83615224565b915061471782615634565b602082019050919050565b600061472f601883615224565b915061473a8261565d565b602082019050919050565b6000614752601483615224565b915061475d82615686565b602082019050919050565b6000614775603283615224565b9150614780826156af565b604082019050919050565b6000614798601383615224565b91506147a3826156fe565b602082019050919050565b60006147bb602683615224565b91506147c682615727565b604082019050919050565b60006147de601783615224565b91506147e982615776565b602082019050919050565b6000614801602583615224565b915061480c8261579f565b604082019050919050565b6000614824601c83615224565b915061482f826157ee565b602082019050919050565b6000614847601e83615224565b915061485282615817565b602082019050919050565b600061486a602483615224565b915061487582615840565b604082019050919050565b600061488d601983615224565b91506148988261588f565b602082019050919050565b60006148b0601d83615224565b91506148bb826158b8565b602082019050919050565b60006148d3601183615224565b91506148de826158e1565b602082019050919050565b60006148f6603a83615224565b91506149018261590a565b604082019050919050565b6000614919601d83615224565b915061492482615959565b602082019050919050565b600061493c602c83615224565b915061494782615982565b604082019050919050565b600061495f603883615224565b915061496a826159d1565b604082019050919050565b6000614982602a83615224565b915061498d82615a20565b604082019050919050565b60006149a5602983615224565b91506149b082615a6f565b604082019050919050565b60006149c8602283615224565b91506149d382615abe565b604082019050919050565b60006149eb601383615224565b91506149f682615b0d565b602082019050919050565b6000614a0e601c83615224565b9150614a1982615b36565b602082019050919050565b6000614a31602083615224565b9150614a3c82615b5f565b602082019050919050565b6000614a54602c83615224565b9150614a5f82615b88565b604082019050919050565b6000614a77602083615224565b9150614a8282615bd7565b602082019050919050565b6000614a9a601b83615224565b9150614aa582615c00565b602082019050919050565b6000614abd602f83615224565b9150614ac882615c29565b604082019050919050565b6000614ae0602783615224565b9150614aeb82615c78565b604082019050919050565b6000614b03602183615224565b9150614b0e82615cc7565b604082019050919050565b6000614b26600083615219565b9150614b3182615d16565b600082019050919050565b6000614b49603183615224565b9150614b5482615d19565b604082019050919050565b6000614b6c601383615224565b9150614b7782615d68565b602082019050919050565b614b8b816153f3565b82525050565b614b9a816153f3565b82525050565b614ba981615411565b82525050565b6000614bbb828661464f565b9150614bc7828561464f565b9150614bd38284614680565b9150819050949350505050565b6000614beb82614b19565b9150819050919050565b6000602082019050614c0a6000830184614561565b92915050565b6000608082019050614c256000830187614561565b614c326020830186614561565b614c3f6040830185614b91565b8181036060830152614c5181846145dd565b905095945050505050565b60006020820190508181036000830152614c768184614570565b905092915050565b6000602082019050614c9360008301846145ce565b92915050565b60006020820190508181036000830152614cb38184614616565b905092915050565b60006020820190508181036000830152614cd4816146ff565b9050919050565b60006020820190508181036000830152614cf481614722565b9050919050565b60006020820190508181036000830152614d1481614745565b9050919050565b60006020820190508181036000830152614d3481614768565b9050919050565b60006020820190508181036000830152614d548161478b565b9050919050565b60006020820190508181036000830152614d74816147ae565b9050919050565b60006020820190508181036000830152614d94816147d1565b9050919050565b60006020820190508181036000830152614db4816147f4565b9050919050565b60006020820190508181036000830152614dd481614817565b9050919050565b60006020820190508181036000830152614df48161483a565b9050919050565b60006020820190508181036000830152614e148161485d565b9050919050565b60006020820190508181036000830152614e3481614880565b9050919050565b60006020820190508181036000830152614e54816148a3565b9050919050565b60006020820190508181036000830152614e74816148c6565b9050919050565b60006020820190508181036000830152614e94816148e9565b9050919050565b60006020820190508181036000830152614eb48161490c565b9050919050565b60006020820190508181036000830152614ed48161492f565b9050919050565b60006020820190508181036000830152614ef481614952565b9050919050565b60006020820190508181036000830152614f1481614975565b9050919050565b60006020820190508181036000830152614f3481614998565b9050919050565b60006020820190508181036000830152614f54816149bb565b9050919050565b60006020820190508181036000830152614f74816149de565b9050919050565b60006020820190508181036000830152614f9481614a01565b9050919050565b60006020820190508181036000830152614fb481614a24565b9050919050565b60006020820190508181036000830152614fd481614a47565b9050919050565b60006020820190508181036000830152614ff481614a6a565b9050919050565b6000602082019050818103600083015261501481614a8d565b9050919050565b6000602082019050818103600083015261503481614ab0565b9050919050565b6000602082019050818103600083015261505481614ad3565b9050919050565b6000602082019050818103600083015261507481614af6565b9050919050565b6000602082019050818103600083015261509481614b3c565b9050919050565b600060208201905081810360008301526150b481614b5f565b9050919050565b60006020820190506150d06000830184614b91565b92915050565b60006020820190506150eb6000830184614ba0565b92915050565b60006150fb61510c565b90506151078282615492565b919050565b6000604051905090565b600067ffffffffffffffff821115615131576151306155f4565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561515d5761515c6155f4565b5b61516682615623565b9050602081019050919050565b600067ffffffffffffffff82111561518e5761518d6155f4565b5b61519782615623565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061524b826153f3565b9150615256836153f3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561528b5761528a615567565b5b828201905092915050565b60006152a1826153f3565b91506152ac836153f3565b9250826152bc576152bb615596565b5b828204905092915050565b60006152d2826153f3565b91506152dd836153f3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561531657615315615567565b5b828202905092915050565b600061532c826153f3565b9150615337836153f3565b92508282101561534a57615349615567565b5b828203905092915050565b600061536082615411565b915061536b83615411565b92508282101561537e5761537d615567565b5b828203905092915050565b6000615394826153d3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561544b578082015181840152602081019050615430565b8381111561545a576000848401525b50505050565b6000600282049050600182168061547857607f821691505b6020821081141561548c5761548b6155c5565b5b50919050565b61549b82615623565b810181811067ffffffffffffffff821117156154ba576154b96155f4565b5b80604052505050565b60006154ce826153f3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561550157615500615567565b5b600182019050919050565b600061551782615411565b915060ff82141561552b5761552a615567565b5b600182019050919050565b6000615541826153f3565b915061554c836153f3565b92508261555c5761555b615596565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f506c6561736520656e7465722076616c696420746f6b656e4964732e00000000600082015250565b7f596f7520617265206e6f742077686974654c69737465642e0000000000000000600082015250565b7f4d696e74206c696d69742065786365656465642e000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f6d696e74696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f596f7572206d696e74206c696d6974206578636565642e000000000000000000600082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5072696365206d7573742067726561746572207468656e207a65726f2e200000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f616464726573732063616e2774206265207a65726f2061646472657373000000600082015250565b7f496e76616c696420617267756d656e742e000000000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4172726179206c656e677468206d757374206265206c657373207468656e203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b7f20596f7520617265206e6f74206f776e65722e00000000000000000000000000600082015250565b7f416c6c205f72657365727665204e46547320617265206d696e74656400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f506c6561736520656e746572206d696e74696e672070726963652e0000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f506c6561736520656e7465722061736b696e6720707269636520666f72206d6960008201527f6e74204e46542e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f416c6c204e46547320617265206d696e74656400000000000000000000000000600082015250565b615d9a81615389565b8114615da557600080fd5b50565b615db18161539b565b8114615dbc57600080fd5b50565b615dc8816153a7565b8114615dd357600080fd5b50565b615ddf816153f3565b8114615dea57600080fd5b50565b615df6816153fd565b8114615e0157600080fd5b50565b615e0d81615411565b8114615e1857600080fd5b5056fea2646970667358221220a76a482f586465797618d7423e30b4a217a74cdf9880a33016956a9ac94b69cb64736f6c63430008040033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5934756170784c54415a38315a6a614673686845747576737551704464664b6964415a6367387176794d6f6a0000000000000000000000

-----Decoded View---------------
Arg [0] : _initNotRevealedUri (string): ipfs://QmY4uapxLTAZ81ZjaFshhEtuvsuQpDdfKidAZcg8qvyMoj

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [2] : 697066733a2f2f516d5934756170784c54415a38315a6a614673686845747576
Arg [3] : 737551704464664b6964415a6367387176794d6f6a0000000000000000000000


Deployed Bytecode Sourcemap

37331:10464:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24147:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38285:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25092:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26652:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26175:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45729:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47030:193;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27402:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46819:161;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39342:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39193:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37897:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27812:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39560:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40675:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40273:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41269:103;;;;;;;;;;;;;:::i;:::-;;24786:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24516:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;37640:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41120:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38847:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45981:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39808:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25261:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47430:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40787:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42865:2858;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26945:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41479:71;;;;;;;;;;;;;:::i;:::-;;40911:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37599:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47319:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28068:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41801:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46085:726;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47229:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47586:206;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41380:91;;;;;;;;;;;;;:::i;:::-;;37929:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27171:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38231:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41558:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41690:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39025:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24147:305;24249:4;24301:25;24286:40;;;:11;:40;;;;:105;;;;24358:33;24343:48;;;:11;:48;;;;24286:105;:158;;;;24408:36;24432:11;24408:23;:36::i;:::-;24286:158;24266:178;;24147:305;;;:::o;38285:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;25092:100::-;25146:13;25179:5;25172:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25092:100;:::o;26652:221::-;26728:7;26756:16;26764:7;26756;:16::i;:::-;26748:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26841:15;:24;26857:7;26841:24;;;;;;;;;;;;;;;;;;;;;26834:31;;26652:221;;;:::o;26175:411::-;26256:13;26272:23;26287:7;26272:14;:23::i;:::-;26256:39;;26320:5;26314:11;;:2;:11;;;;26306:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26414:5;26398:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26423:37;26440:5;26447:12;:10;:12::i;:::-;26423:16;:37::i;:::-;26398:62;26376:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26557:21;26566:2;26570:7;26557:8;:21::i;:::-;26175:411;;;:::o;45729:244::-;45788:7;45812:17;;;;;;;;;;;45808:158;;;45881:7;45853:25;;:35;;;;:::i;:::-;45846:42;;;;45808:158;45947:7;45928:16;;:26;;;;:::i;:::-;45921:33;;45729:244;;;;:::o;47030:193::-;47080:7;47104:17;;;;;;;;;;;47100:82;;;47145:25;;47138:32;;;;47100:82;47199:16;;47192:23;;47030:193;;:::o;27402:339::-;27597:41;27616:12;:10;:12::i;:::-;27630:7;27597:18;:41::i;:::-;27589:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27705:28;27715:4;27721:2;27725:7;27705:9;:28::i;:::-;27402:339;;;:::o;46819:161::-;46869:16;46898;46917:13;:25;46931:10;46917:25;;;;;;;;;;;;;;;46898:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46960:1;:10;;;46953:17;;;46819:161;:::o;39342:172::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39434:1:::1;39425:6;:10;39417:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;39500:6;39481:16;:25;;;;39342:172:::0;:::o;39193:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39281:7:::1;39265:13;;:23;;;;;;;;;;;;;;;;;;39193:103:::0;:::o;37897:25::-;;;;;;;;;;;;;:::o;27812:185::-;27950:39;27967:4;27973:2;27977:7;27950:39;;;;;;;;;;;;:16;:39::i;:::-;27812:185;;;:::o;39560:190::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39661:1:::1;39652:6;:10;39644:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;39736:6;39708:25;:34;;;;39560:190:::0;:::o;40675:104::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40760:11:::1;40750:7;:21;;;;;;;;;;;;:::i;:::-;;40675:104:::0;:::o;40273:394::-;40382:4;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40431:3:::1;40412:8;:15;:22;;40404:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;40489:9;40484:154;40508:8;:15;40504:1;:19;40484:154;;;40545:19;40567:8;40576:1;40567:11;;;;;;;;;;;;;;;;;;;;;;40545:33;;40622:4;40593:13;:26;40607:11;40593:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;40484:154;40525:3;;;;;:::i;:::-;;;;40484:154;;;;40655:4;40648:11;;40273:394:::0;;;:::o;41269:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41347:17:::1;;;;;;;;;;;41346:18;41326:17;;:38;;;;;;;;;;;;;;;;;;41269:103::o:0;24786:239::-;24858:7;24878:13;24894:7;:16;24902:7;24894:16;;;;;;;;;;;;;;;;;;;;;24878:32;;24946:1;24929:19;;:5;:19;;;;24921:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25012:5;25005:12;;;24786:239;;;:::o;24516:208::-;24588:7;24633:1;24616:19;;:5;:19;;;;24608:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24700:9;:16;24710:5;24700:16;;;;;;;;;;;;;;;;24693:23;;24516:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;37640:29::-;;;;;;;;;;;;;:::o;41120:141::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41199:8:::1;38698:1;38678:22;;:8;:22;;;;38670:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41248:5:::2;41222:13;:23;41236:8;41222:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;4370:1:::1;41120:141:::0;:::o;38847:111::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38943:7:::1;38923:17;;:27;;;;;;;;;;;;;;;;;;38847:111:::0;:::o;45981:96::-;46036:7;46063:6;;;;;;;;;;;46056:13;;45981:96;:::o;39808:407::-;39923:4;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39972:3:::1;39953:8;:15;:22;;39945:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;40030:9;40025:161;40049:8;:15;40045:1;:19;40025:161;;;40086:19;40108:8;40117:1;40108:11;;;;;;;;;;;;;;;;;;;;;;40086:33;;40170:4;40134:20;:33;40155:11;40134:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;40025:161;40066:3;;;;;:::i;:::-;;;;40025:161;;;;40203:4;40196:11;;39808:407:::0;;;:::o;25261:104::-;25317:13;25350:7;25343:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25261:104;:::o;47430:91::-;47474:13;47506:7;47499:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47430:91;:::o;40787:116::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40878:17:::1;40865:10;;:30;;;;;;;;;;;;;;;;;;40787:116:::0;:::o;42865:2858::-;42947:1;42934:9;:14;;:32;;;;;42965:1;42952:9;:14;;42934:32;42926:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43009:13;;;;;;;;;;;43001:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;43057:12;43072:10;43057:25;;43117:1;43101:18;;:4;:18;;;;43093:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;43170:13;:19;43184:4;43170:19;;;;;;;;;;;;;;;;;;;;;;;;;43166:2550;;;43206:20;43216:9;43206;:20::i;:::-;43166:2550;;;43259:14;43276:15;;;;;;;;;;;43259:32;;;;43338:10;;;;;;;;;;;43314:34;;43324:9;43315:6;:18;;;;:::i;:::-;43314:34;;43306:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43393:17;;;;;;;;;;;43389:2316;;;43474:17;;;;;;;;;;;43461:30;;:9;:30;;43431:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;43612:20;:32;43633:10;43612:32;;;;;;;;;;;;;;;;;;;;;;;;;43582:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;43731:18;43751:13;:25;43765:10;43751:25;;;;;;;;;;;;;;;:34;;:41;;;;43731:61;;43834:9;43823:10;:20;;;;:::i;:::-;43811:32;;43933:17;;;;;;;;;;;43894:56;;:10;:56;;43864:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;44036:15;44054:22;44066:9;44054:11;:22::i;:::-;44036:40;;44138:7;44125:9;:20;;44095:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;44247:43;44273:6;;;;;;;;;;;44282:7;44247:17;:43::i;:::-;44314:9;44326:1;44314:13;;44309:360;44334:9;44329:1;:14;44309:360;;44373:11;44396:1;44387:6;:10;;;;:::i;:::-;44373:24;;44420:20;44430:4;44436:3;44420:9;:20::i;:::-;44463:15;;:17;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;44503:26;44532:13;:19;44546:4;44532:19;;;;;;;;;;;;;;;44503:48;;44593:4;44574:10;:16;;;:23;;;;;;;;;;;;;;;;;;44620:10;:19;;44645:3;44620:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44309:360;;44345:3;;;;;:::i;:::-;;;;44309:360;;;;43389:2316;;;;;44752:12;;;;;;;;;;;44739:25;;:9;:25;;44709:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;44857:18;44877:13;:25;44891:10;44877:25;;;;;;;;;;;;;;;:34;;:41;;;;44857:61;;44960:9;44949:10;:20;;;;:::i;:::-;44937:32;;45032:12;;;;;;;;;;;45018:26;;:10;:26;;44988:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;45130:15;45148:22;45160:9;45148:11;:22::i;:::-;45130:40;;45210:7;45197:9;:20;;45189:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;45268:43;45294:6;;;;;;;;;;;45303:7;45268:17;:43::i;:::-;45335:9;45347:1;45335:13;;45330:360;45355:9;45350:1;:14;45330:360;;45394:11;45417:1;45408:6;:10;;;;:::i;:::-;45394:24;;45441:20;45451:4;45457:3;45441:9;:20::i;:::-;45484:15;;:17;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;45524:26;45553:13;:19;45567:4;45553:19;;;;;;;;;;;;;;;45524:48;;45614:4;45595:10;:16;;;:23;;;;;;;;;;;;;;;;;;45641:10;:19;;45666:3;45641:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45330:360;;45366:3;;;;;:::i;:::-;;;;45330:360;;;;43389:2316;;;43166:2550;;42865:2858;;:::o;26945:155::-;27040:52;27059:12;:10;:12::i;:::-;27073:8;27083;27040:18;:52::i;:::-;26945:155;;:::o;41479:71::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41538:4:::1;41527:8;;:15;;;;;;;;;;;;;;;;;;41479:71::o:0;40911:203::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40989:8:::1;38698:1;38678:22;;:8;:22;;;;38670:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41052:4:::2;41018:38;;:20;:30;41039:8;41018:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;41010:47;;;::::0;::::2;;41101:5;41068:20;:30;41089:8;41068:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;4370:1:::1;40911:203:::0;:::o;37599:34::-;;;;;;;;;;;;;:::o;47319:105::-;47370:13;47402:14;47395:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47319:105;:::o;28068:328::-;28243:41;28262:12;:10;:12::i;:::-;28276:7;28243:18;:41::i;:::-;28235:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28349:39;28363:4;28369:2;28373:7;28382:5;28349:13;:39::i;:::-;28068:328;;;;:::o;41801:112::-;41862:7;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41888:17:::1;;;;;;;;;;;41881:24;;;;41801:112:::0;:::o;46085:726::-;46203:13;46256:16;46264:7;46256;:16::i;:::-;46234:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;46376:5;46364:17;;:8;;;;;;;;;;;:17;;;46360:71;;;46405:14;46398:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46360:71;46443:28;46474:10;:8;:10::i;:::-;46443:41;;46546:1;46521:14;46515:28;:32;:288;;;;;;;;;;;;;;;;;46639:14;46680:18;:7;:16;:18::i;:::-;46725:14;46596:166;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46515:288;46495:308;;;46085:726;;;;:::o;47229:84::-;47274:4;47297:8;;;;;;;;;;;47290:15;;47229:84;:::o;47586:206::-;47637:7;47656:16;47694:3;47676:15;;;;;;;;;;;:21;;;;:::i;:::-;47656:41;;;;47709:17;47727;;;;;;;;;;;47709:35;;47773:11;47762:22;;:8;:22;;;;:::i;:::-;47755:29;;;;47586:206;:::o;41380:91::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41450:13:::1;;;;;;;;;;;41449:14;41433:13;;:30;;;;;;;;;;;;;;;;;;41380:91::o:0;37929:29::-;;;;;;;;;;;;;:::o;27171:164::-;27268:4;27292:18;:25;27311:5;27292:25;;;;;;;;;;;;;;;:35;27318:8;27292:35;;;;;;;;;;;;;;;;;;;;;;;;;27285:42;;27171:164;;;;:::o;38231:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;41558:126::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41661:15:::1;41644:14;:32;;;;;;;;;;;;:::i;:::-;;41558:126:::0;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;41690:105::-;41746:7;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41772:15:::1;;;;;;;;;;;41765:22;;;;41690:105:::0;:::o;39025:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39113:7:::1;39098:12;;:22;;;;;;;;;;;;;;;;;;39025:103:::0;:::o;16886:157::-;16971:4;17010:25;16995:40;;;:11;:40;;;;16988:47;;16886:157;;;:::o;29906:127::-;29971:4;30023:1;29995:30;;:7;:16;30003:7;29995:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29988:37;;29906:127;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;34052:174::-;34154:2;34127:15;:24;34143:7;34127:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34210:7;34206:2;34172:46;;34181:23;34196:7;34181:14;:23::i;:::-;34172:46;;;;;;;;;;;;34052:174;;:::o;30200:348::-;30293:4;30318:16;30326:7;30318;:16::i;:::-;30310:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30394:13;30410:23;30425:7;30410:14;:23::i;:::-;30394:39;;30463:5;30452:16;;:7;:16;;;:52;;;;30472:32;30489:5;30496:7;30472:16;:32::i;:::-;30452:52;:87;;;;30532:7;30508:31;;:20;30520:7;30508:11;:20::i;:::-;:31;;;30452:87;30444:96;;;30200:348;;;;:::o;33309:625::-;33468:4;33441:31;;:23;33456:7;33441:14;:23::i;:::-;:31;;;33433:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33547:1;33533:16;;:2;:16;;;;33525:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33603:39;33624:4;33630:2;33634:7;33603:20;:39::i;:::-;33707:29;33724:1;33728:7;33707:8;:29::i;:::-;33768:1;33749:9;:15;33759:4;33749:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33797:1;33780:9;:13;33790:2;33780:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33828:2;33809:7;:16;33817:7;33809:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33867:7;33863:2;33848:27;;33857:4;33848:27;;;;;;;;;;;;33888:38;33908:4;33914:2;33918:7;33888:19;:38::i;:::-;33309:625;;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5349:191;;:::o;42050:782::-;42108:12;42123:10;42108:25;;42152:13;:19;42166:4;42152:19;;;;;;;;;;;;;;;;;;;;;;;;;42144:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;42206:18;42226:13;:25;42240:10;42226:25;;;;;;;;;;;;;;;:34;;:41;;;;42206:61;;42301:9;42290:10;:20;;;;:::i;:::-;42278:32;;42342:13;;;;;;;;;;;42329:26;;:10;:26;;42321:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42390:14;42407:17;;;;;;;;;;;42390:34;;;;42467:8;;;;;;;;;;;42443:32;;42453:9;42444:6;:18;;;;:::i;:::-;42443:32;;42435:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42524:9;42536:1;42524:13;;42519:306;42544:9;42539:1;:14;42519:306;;42575:11;42598:1;42589:6;:10;;;;:::i;:::-;42575:24;;42614:20;42624:4;42630:3;42614:9;:20::i;:::-;42649:17;;:19;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;42683:26;42712:13;:19;42726:4;42712:19;;;;;;;;;;;;;;;42683:48;;42765:4;42746:10;:16;;;:23;;;;;;;;;;;;;;;;;;42784:10;:19;;42809:3;42784:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42519:306;;42555:3;;;;;:::i;:::-;;;;42519:306;;;;42050:782;;;;:::o;8041:317::-;8156:6;8131:21;:31;;8123:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8210:12;8228:9;:14;;8250:6;8228:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8209:52;;;8280:7;8272:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;8041:317;;;:::o;30890:110::-;30966:26;30976:2;30980:7;30966:26;;;;;;;;;;;;:9;:26::i;:::-;30890:110;;:::o;34368:315::-;34523:8;34514:17;;:5;:17;;;;34506:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;34610:8;34572:18;:25;34591:5;34572:25;;;;;;;;;;;;;;;:35;34598:8;34572:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34656:8;34634:41;;34649:5;34634:41;;;34666:8;34634:41;;;;;;:::i;:::-;;;;;;;;34368:315;;;:::o;29278:::-;29435:28;29445:4;29451:2;29455:7;29435:9;:28::i;:::-;29482:48;29505:4;29511:2;29515:7;29524:5;29482:22;:48::i;:::-;29474:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29278:315;;;;:::o;41942:100::-;41994:13;42027:7;42020:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41942:100;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;36619:126::-;;;;:::o;37130:125::-;;;;:::o;31227:321::-;31357:18;31363:2;31367:7;31357:5;:18::i;:::-;31408:54;31439:1;31443:2;31447:7;31456:5;31408:22;:54::i;:::-;31386:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31227:321;;;:::o;35248:799::-;35403:4;35424:15;:2;:13;;;:15::i;:::-;35420:620;;;35476:2;35460:36;;;35497:12;:10;:12::i;:::-;35511:4;35517:7;35526:5;35460:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35456:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35719:1;35702:6;:13;:18;35698:272;;;35745:60;;;;;;;;;;:::i;:::-;;;;;;;;35698:272;35920:6;35914:13;35905:6;35901:2;35897:15;35890:38;35456:529;35593:41;;;35583:51;;;:6;:51;;;;35576:58;;;;;35420:620;36024:4;36017:11;;35248:799;;;;;;;:::o;31884:439::-;31978:1;31964:16;;:2;:16;;;;31956:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32037:16;32045:7;32037;:16::i;:::-;32036:17;32028:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32099:45;32128:1;32132:2;32136:7;32099:20;:45::i;:::-;32174:1;32157:9;:13;32167:2;32157:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32205:2;32186:7;:16;32194:7;32186:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32250:7;32246:2;32225:33;;32242:1;32225:33;;;;;;;;;;;;32271:44;32299:1;32303:2;32307:7;32271:19;:44::i;:::-;31884:439;;:::o;6780:326::-;6840:4;7097:1;7075:7;:19;;;:23;7068:30;;6780:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;685:343::-;762:5;787:65;803:48;844:6;803:48;:::i;:::-;787:65;:::i;:::-;778:74;;875:6;868:5;861:21;913:4;906:5;902:16;951:3;942:6;937:3;933:16;930:25;927:2;;;968:1;965;958:12;927:2;981:41;1015:6;1010:3;1005;981:41;:::i;:::-;768:260;;;;;;:::o;1034:345::-;1112:5;1137:66;1153:49;1195:6;1153:49;:::i;:::-;1137:66;:::i;:::-;1128:75;;1226:6;1219:5;1212:21;1264:4;1257:5;1253:16;1302:3;1293:6;1288:3;1284:16;1281:25;1278:2;;;1319:1;1316;1309:12;1278:2;1332:41;1366:6;1361:3;1356;1332:41;:::i;:::-;1118:261;;;;;;:::o;1385:139::-;1431:5;1469:6;1456:20;1447:29;;1485:33;1512:5;1485:33;:::i;:::-;1437:87;;;;:::o;1547:303::-;1618:5;1667:3;1660:4;1652:6;1648:17;1644:27;1634:2;;1685:1;1682;1675:12;1634:2;1725:6;1712:20;1750:94;1840:3;1832:6;1825:4;1817:6;1813:17;1750:94;:::i;:::-;1741:103;;1624:226;;;;;:::o;1856:133::-;1899:5;1937:6;1924:20;1915:29;;1953:30;1977:5;1953:30;:::i;:::-;1905:84;;;;:::o;1995:137::-;2040:5;2078:6;2065:20;2056:29;;2094:32;2120:5;2094:32;:::i;:::-;2046:86;;;;:::o;2138:141::-;2194:5;2225:6;2219:13;2210:22;;2241:32;2267:5;2241:32;:::i;:::-;2200:79;;;;:::o;2298:271::-;2353:5;2402:3;2395:4;2387:6;2383:17;2379:27;2369:2;;2420:1;2417;2410:12;2369:2;2460:6;2447:20;2485:78;2559:3;2551:6;2544:4;2536:6;2532:17;2485:78;:::i;:::-;2476:87;;2359:210;;;;;:::o;2589:273::-;2645:5;2694:3;2687:4;2679:6;2675:17;2671:27;2661:2;;2712:1;2709;2702:12;2661:2;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2651:211;;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2920:87;;;;:::o;3013:137::-;3058:5;3096:6;3083:20;3074:29;;3112:32;3138:5;3112:32;:::i;:::-;3064:86;;;;:::o;3156:135::-;3200:5;3238:6;3225:20;3216:29;;3254:31;3279:5;3254:31;:::i;:::-;3206:85;;;;:::o;3297:262::-;3356:6;3405:2;3393:9;3384:7;3380:23;3376:32;3373:2;;;3421:1;3418;3411:12;3373:2;3464:1;3489:53;3534:7;3525:6;3514:9;3510:22;3489:53;:::i;:::-;3479:63;;3435:117;3363:196;;;;:::o;3565:407::-;3633:6;3641;3690:2;3678:9;3669:7;3665:23;3661:32;3658:2;;;3706:1;3703;3696:12;3658:2;3749:1;3774:53;3819:7;3810:6;3799:9;3795:22;3774:53;:::i;:::-;3764:63;;3720:117;3876:2;3902:53;3947:7;3938:6;3927:9;3923:22;3902:53;:::i;:::-;3892:63;;3847:118;3648:324;;;;;:::o;3978:552::-;4055:6;4063;4071;4120:2;4108:9;4099:7;4095:23;4091:32;4088:2;;;4136:1;4133;4126:12;4088:2;4179:1;4204:53;4249:7;4240:6;4229:9;4225:22;4204:53;:::i;:::-;4194:63;;4150:117;4306:2;4332:53;4377:7;4368:6;4357:9;4353:22;4332:53;:::i;:::-;4322:63;;4277:118;4434:2;4460:53;4505:7;4496:6;4485:9;4481:22;4460:53;:::i;:::-;4450:63;;4405:118;4078:452;;;;;:::o;4536:809::-;4631:6;4639;4647;4655;4704:3;4692:9;4683:7;4679:23;4675:33;4672:2;;;4721:1;4718;4711:12;4672:2;4764:1;4789:53;4834:7;4825:6;4814:9;4810:22;4789:53;:::i;:::-;4779:63;;4735:117;4891:2;4917:53;4962:7;4953:6;4942:9;4938:22;4917:53;:::i;:::-;4907:63;;4862:118;5019:2;5045:53;5090:7;5081:6;5070:9;5066:22;5045:53;:::i;:::-;5035:63;;4990:118;5175:2;5164:9;5160:18;5147:32;5206:18;5198:6;5195:30;5192:2;;;5238:1;5235;5228:12;5192:2;5266:62;5320:7;5311:6;5300:9;5296:22;5266:62;:::i;:::-;5256:72;;5118:220;4662:683;;;;;;;:::o;5351:401::-;5416:6;5424;5473:2;5461:9;5452:7;5448:23;5444:32;5441:2;;;5489:1;5486;5479:12;5441:2;5532:1;5557:53;5602:7;5593:6;5582:9;5578:22;5557:53;:::i;:::-;5547:63;;5503:117;5659:2;5685:50;5727:7;5718:6;5707:9;5703:22;5685:50;:::i;:::-;5675:60;;5630:115;5431:321;;;;;:::o;5758:407::-;5826:6;5834;5883:2;5871:9;5862:7;5858:23;5854:32;5851:2;;;5899:1;5896;5889:12;5851:2;5942:1;5967:53;6012:7;6003:6;5992:9;5988:22;5967:53;:::i;:::-;5957:63;;5913:117;6069:2;6095:53;6140:7;6131:6;6120:9;6116:22;6095:53;:::i;:::-;6085:63;;6040:118;5841:324;;;;;:::o;6171:405::-;6255:6;6304:2;6292:9;6283:7;6279:23;6275:32;6272:2;;;6320:1;6317;6310:12;6272:2;6391:1;6380:9;6376:17;6363:31;6421:18;6413:6;6410:30;6407:2;;;6453:1;6450;6443:12;6407:2;6481:78;6551:7;6542:6;6531:9;6527:22;6481:78;:::i;:::-;6471:88;;6334:235;6262:314;;;;:::o;6582:260::-;6640:6;6689:2;6677:9;6668:7;6664:23;6660:32;6657:2;;;6705:1;6702;6695:12;6657:2;6748:1;6773:52;6817:7;6808:6;6797:9;6793:22;6773:52;:::i;:::-;6763:62;;6719:116;6647:195;;;;:::o;6848:282::-;6917:6;6966:2;6954:9;6945:7;6941:23;6937:32;6934:2;;;6982:1;6979;6972:12;6934:2;7025:1;7050:63;7105:7;7096:6;7085:9;7081:22;7050:63;:::i;:::-;7040:73;;6996:127;6924:206;;;;:::o;7136:375::-;7205:6;7254:2;7242:9;7233:7;7229:23;7225:32;7222:2;;;7270:1;7267;7260:12;7222:2;7341:1;7330:9;7326:17;7313:31;7371:18;7363:6;7360:30;7357:2;;;7403:1;7400;7393:12;7357:2;7431:63;7486:7;7477:6;7466:9;7462:22;7431:63;:::i;:::-;7421:73;;7284:220;7212:299;;;;:::o;7517:262::-;7576:6;7625:2;7613:9;7604:7;7600:23;7596:32;7593:2;;;7641:1;7638;7631:12;7593:2;7684:1;7709:53;7754:7;7745:6;7734:9;7730:22;7709:53;:::i;:::-;7699:63;;7655:117;7583:196;;;;:::o;7785:260::-;7843:6;7892:2;7880:9;7871:7;7867:23;7863:32;7860:2;;;7908:1;7905;7898:12;7860:2;7951:1;7976:52;8020:7;8011:6;8000:9;7996:22;7976:52;:::i;:::-;7966:62;;7922:116;7850:195;;;;:::o;8051:258::-;8108:6;8157:2;8145:9;8136:7;8132:23;8128:32;8125:2;;;8173:1;8170;8163:12;8125:2;8216:1;8241:51;8284:7;8275:6;8264:9;8260:22;8241:51;:::i;:::-;8231:61;;8187:115;8115:194;;;;:::o;8315:179::-;8384:10;8405:46;8447:3;8439:6;8405:46;:::i;:::-;8483:4;8478:3;8474:14;8460:28;;8395:99;;;;:::o;8500:118::-;8587:24;8605:5;8587:24;:::i;:::-;8582:3;8575:37;8565:53;;:::o;8654:732::-;8773:3;8802:54;8850:5;8802:54;:::i;:::-;8872:86;8951:6;8946:3;8872:86;:::i;:::-;8865:93;;8982:56;9032:5;8982:56;:::i;:::-;9061:7;9092:1;9077:284;9102:6;9099:1;9096:13;9077:284;;;9178:6;9172:13;9205:63;9264:3;9249:13;9205:63;:::i;:::-;9198:70;;9291:60;9344:6;9291:60;:::i;:::-;9281:70;;9137:224;9124:1;9121;9117:9;9112:14;;9077:284;;;9081:14;9377:3;9370:10;;8778:608;;;;;;;:::o;9392:109::-;9473:21;9488:5;9473:21;:::i;:::-;9468:3;9461:34;9451:50;;:::o;9507:360::-;9593:3;9621:38;9653:5;9621:38;:::i;:::-;9675:70;9738:6;9733:3;9675:70;:::i;:::-;9668:77;;9754:52;9799:6;9794:3;9787:4;9780:5;9776:16;9754:52;:::i;:::-;9831:29;9853:6;9831:29;:::i;:::-;9826:3;9822:39;9815:46;;9597:270;;;;;:::o;9873:364::-;9961:3;9989:39;10022:5;9989:39;:::i;:::-;10044:71;10108:6;10103:3;10044:71;:::i;:::-;10037:78;;10124:52;10169:6;10164:3;10157:4;10150:5;10146:16;10124:52;:::i;:::-;10201:29;10223:6;10201:29;:::i;:::-;10196:3;10192:39;10185:46;;9965:272;;;;;:::o;10243:377::-;10349:3;10377:39;10410:5;10377:39;:::i;:::-;10432:89;10514:6;10509:3;10432:89;:::i;:::-;10425:96;;10530:52;10575:6;10570:3;10563:4;10556:5;10552:16;10530:52;:::i;:::-;10607:6;10602:3;10598:16;10591:23;;10353:267;;;;;:::o;10650:845::-;10753:3;10790:5;10784:12;10819:36;10845:9;10819:36;:::i;:::-;10871:89;10953:6;10948:3;10871:89;:::i;:::-;10864:96;;10991:1;10980:9;10976:17;11007:1;11002:137;;;;11153:1;11148:341;;;;10969:520;;11002:137;11086:4;11082:9;11071;11067:25;11062:3;11055:38;11122:6;11117:3;11113:16;11106:23;;11002:137;;11148:341;11215:38;11247:5;11215:38;:::i;:::-;11275:1;11289:154;11303:6;11300:1;11297:13;11289:154;;;11377:7;11371:14;11367:1;11362:3;11358:11;11351:35;11427:1;11418:7;11414:15;11403:26;;11325:4;11322:1;11318:12;11313:17;;11289:154;;;11472:6;11467:3;11463:16;11456:23;;11155:334;;10969:520;;10757:738;;;;;;:::o;11501:366::-;11643:3;11664:67;11728:2;11723:3;11664:67;:::i;:::-;11657:74;;11740:93;11829:3;11740:93;:::i;:::-;11858:2;11853:3;11849:12;11842:19;;11647:220;;;:::o;11873:366::-;12015:3;12036:67;12100:2;12095:3;12036:67;:::i;:::-;12029:74;;12112:93;12201:3;12112:93;:::i;:::-;12230:2;12225:3;12221:12;12214:19;;12019:220;;;:::o;12245:366::-;12387:3;12408:67;12472:2;12467:3;12408:67;:::i;:::-;12401:74;;12484:93;12573:3;12484:93;:::i;:::-;12602:2;12597:3;12593:12;12586:19;;12391:220;;;:::o;12617:366::-;12759:3;12780:67;12844:2;12839:3;12780:67;:::i;:::-;12773:74;;12856:93;12945:3;12856:93;:::i;:::-;12974:2;12969:3;12965:12;12958:19;;12763:220;;;:::o;12989:366::-;13131:3;13152:67;13216:2;13211:3;13152:67;:::i;:::-;13145:74;;13228:93;13317:3;13228:93;:::i;:::-;13346:2;13341:3;13337:12;13330:19;;13135:220;;;:::o;13361:366::-;13503:3;13524:67;13588:2;13583:3;13524:67;:::i;:::-;13517:74;;13600:93;13689:3;13600:93;:::i;:::-;13718:2;13713:3;13709:12;13702:19;;13507:220;;;:::o;13733:366::-;13875:3;13896:67;13960:2;13955:3;13896:67;:::i;:::-;13889:74;;13972:93;14061:3;13972:93;:::i;:::-;14090:2;14085:3;14081:12;14074:19;;13879:220;;;:::o;14105:366::-;14247:3;14268:67;14332:2;14327:3;14268:67;:::i;:::-;14261:74;;14344:93;14433:3;14344:93;:::i;:::-;14462:2;14457:3;14453:12;14446:19;;14251:220;;;:::o;14477:366::-;14619:3;14640:67;14704:2;14699:3;14640:67;:::i;:::-;14633:74;;14716:93;14805:3;14716:93;:::i;:::-;14834:2;14829:3;14825:12;14818:19;;14623:220;;;:::o;14849:366::-;14991:3;15012:67;15076:2;15071:3;15012:67;:::i;:::-;15005:74;;15088:93;15177:3;15088:93;:::i;:::-;15206:2;15201:3;15197:12;15190:19;;14995:220;;;:::o;15221:366::-;15363:3;15384:67;15448:2;15443:3;15384:67;:::i;:::-;15377:74;;15460:93;15549:3;15460:93;:::i;:::-;15578:2;15573:3;15569:12;15562:19;;15367:220;;;:::o;15593:366::-;15735:3;15756:67;15820:2;15815:3;15756:67;:::i;:::-;15749:74;;15832:93;15921:3;15832:93;:::i;:::-;15950:2;15945:3;15941:12;15934:19;;15739:220;;;:::o;15965:366::-;16107:3;16128:67;16192:2;16187:3;16128:67;:::i;:::-;16121:74;;16204:93;16293:3;16204:93;:::i;:::-;16322:2;16317:3;16313:12;16306:19;;16111:220;;;:::o;16337:366::-;16479:3;16500:67;16564:2;16559:3;16500:67;:::i;:::-;16493:74;;16576:93;16665:3;16576:93;:::i;:::-;16694:2;16689:3;16685:12;16678:19;;16483:220;;;:::o;16709:366::-;16851:3;16872:67;16936:2;16931:3;16872:67;:::i;:::-;16865:74;;16948:93;17037:3;16948:93;:::i;:::-;17066:2;17061:3;17057:12;17050:19;;16855:220;;;:::o;17081:366::-;17223:3;17244:67;17308:2;17303:3;17244:67;:::i;:::-;17237:74;;17320:93;17409:3;17320:93;:::i;:::-;17438:2;17433:3;17429:12;17422:19;;17227:220;;;:::o;17453:366::-;17595:3;17616:67;17680:2;17675:3;17616:67;:::i;:::-;17609:74;;17692:93;17781:3;17692:93;:::i;:::-;17810:2;17805:3;17801:12;17794:19;;17599:220;;;:::o;17825:366::-;17967:3;17988:67;18052:2;18047:3;17988:67;:::i;:::-;17981:74;;18064:93;18153:3;18064:93;:::i;:::-;18182:2;18177:3;18173:12;18166:19;;17971:220;;;:::o;18197:366::-;18339:3;18360:67;18424:2;18419:3;18360:67;:::i;:::-;18353:74;;18436:93;18525:3;18436:93;:::i;:::-;18554:2;18549:3;18545:12;18538:19;;18343:220;;;:::o;18569:366::-;18711:3;18732:67;18796:2;18791:3;18732:67;:::i;:::-;18725:74;;18808:93;18897:3;18808:93;:::i;:::-;18926:2;18921:3;18917:12;18910:19;;18715:220;;;:::o;18941:366::-;19083:3;19104:67;19168:2;19163:3;19104:67;:::i;:::-;19097:74;;19180:93;19269:3;19180:93;:::i;:::-;19298:2;19293:3;19289:12;19282:19;;19087:220;;;:::o;19313:366::-;19455:3;19476:67;19540:2;19535:3;19476:67;:::i;:::-;19469:74;;19552:93;19641:3;19552:93;:::i;:::-;19670:2;19665:3;19661:12;19654:19;;19459:220;;;:::o;19685:366::-;19827:3;19848:67;19912:2;19907:3;19848:67;:::i;:::-;19841:74;;19924:93;20013:3;19924:93;:::i;:::-;20042:2;20037:3;20033:12;20026:19;;19831:220;;;:::o;20057:366::-;20199:3;20220:67;20284:2;20279:3;20220:67;:::i;:::-;20213:74;;20296:93;20385:3;20296:93;:::i;:::-;20414:2;20409:3;20405:12;20398:19;;20203:220;;;:::o;20429:366::-;20571:3;20592:67;20656:2;20651:3;20592:67;:::i;:::-;20585:74;;20668:93;20757:3;20668:93;:::i;:::-;20786:2;20781:3;20777:12;20770:19;;20575:220;;;:::o;20801:366::-;20943:3;20964:67;21028:2;21023:3;20964:67;:::i;:::-;20957:74;;21040:93;21129:3;21040:93;:::i;:::-;21158:2;21153:3;21149:12;21142:19;;20947:220;;;:::o;21173:366::-;21315:3;21336:67;21400:2;21395:3;21336:67;:::i;:::-;21329:74;;21412:93;21501:3;21412:93;:::i;:::-;21530:2;21525:3;21521:12;21514:19;;21319:220;;;:::o;21545:366::-;21687:3;21708:67;21772:2;21767:3;21708:67;:::i;:::-;21701:74;;21784:93;21873:3;21784:93;:::i;:::-;21902:2;21897:3;21893:12;21886:19;;21691:220;;;:::o;21917:366::-;22059:3;22080:67;22144:2;22139:3;22080:67;:::i;:::-;22073:74;;22156:93;22245:3;22156:93;:::i;:::-;22274:2;22269:3;22265:12;22258:19;;22063:220;;;:::o;22289:366::-;22431:3;22452:67;22516:2;22511:3;22452:67;:::i;:::-;22445:74;;22528:93;22617:3;22528:93;:::i;:::-;22646:2;22641:3;22637:12;22630:19;;22435:220;;;:::o;22661:398::-;22820:3;22841:83;22922:1;22917:3;22841:83;:::i;:::-;22834:90;;22933:93;23022:3;22933:93;:::i;:::-;23051:1;23046:3;23042:11;23035:18;;22824:235;;;:::o;23065:366::-;23207:3;23228:67;23292:2;23287:3;23228:67;:::i;:::-;23221:74;;23304:93;23393:3;23304:93;:::i;:::-;23422:2;23417:3;23413:12;23406:19;;23211:220;;;:::o;23437:366::-;23579:3;23600:67;23664:2;23659:3;23600:67;:::i;:::-;23593:74;;23676:93;23765:3;23676:93;:::i;:::-;23794:2;23789:3;23785:12;23778:19;;23583:220;;;:::o;23809:108::-;23886:24;23904:5;23886:24;:::i;:::-;23881:3;23874:37;23864:53;;:::o;23923:118::-;24010:24;24028:5;24010:24;:::i;:::-;24005:3;23998:37;23988:53;;:::o;24047:112::-;24130:22;24146:5;24130:22;:::i;:::-;24125:3;24118:35;24108:51;;:::o;24165:589::-;24390:3;24412:95;24503:3;24494:6;24412:95;:::i;:::-;24405:102;;24524:95;24615:3;24606:6;24524:95;:::i;:::-;24517:102;;24636:92;24724:3;24715:6;24636:92;:::i;:::-;24629:99;;24745:3;24738:10;;24394:360;;;;;;:::o;24760:379::-;24944:3;24966:147;25109:3;24966:147;:::i;:::-;24959:154;;25130:3;25123:10;;24948:191;;;:::o;25145:222::-;25238:4;25276:2;25265:9;25261:18;25253:26;;25289:71;25357:1;25346:9;25342:17;25333:6;25289:71;:::i;:::-;25243:124;;;;:::o;25373:640::-;25568:4;25606:3;25595:9;25591:19;25583:27;;25620:71;25688:1;25677:9;25673:17;25664:6;25620:71;:::i;:::-;25701:72;25769:2;25758:9;25754:18;25745:6;25701:72;:::i;:::-;25783;25851:2;25840:9;25836:18;25827:6;25783:72;:::i;:::-;25902:9;25896:4;25892:20;25887:2;25876:9;25872:18;25865:48;25930:76;26001:4;25992:6;25930:76;:::i;:::-;25922:84;;25573:440;;;;;;;:::o;26019:373::-;26162:4;26200:2;26189:9;26185:18;26177:26;;26249:9;26243:4;26239:20;26235:1;26224:9;26220:17;26213:47;26277:108;26380:4;26371:6;26277:108;:::i;:::-;26269:116;;26167:225;;;;:::o;26398:210::-;26485:4;26523:2;26512:9;26508:18;26500:26;;26536:65;26598:1;26587:9;26583:17;26574:6;26536:65;:::i;:::-;26490:118;;;;:::o;26614:313::-;26727:4;26765:2;26754:9;26750:18;26742:26;;26814:9;26808:4;26804:20;26800:1;26789:9;26785:17;26778:47;26842:78;26915:4;26906:6;26842:78;:::i;:::-;26834:86;;26732:195;;;;:::o;26933:419::-;27099:4;27137:2;27126:9;27122:18;27114:26;;27186:9;27180:4;27176:20;27172:1;27161:9;27157:17;27150:47;27214:131;27340:4;27214:131;:::i;:::-;27206:139;;27104:248;;;:::o;27358:419::-;27524:4;27562:2;27551:9;27547:18;27539:26;;27611:9;27605:4;27601:20;27597:1;27586:9;27582:17;27575:47;27639:131;27765:4;27639:131;:::i;:::-;27631:139;;27529:248;;;:::o;27783:419::-;27949:4;27987:2;27976:9;27972:18;27964:26;;28036:9;28030:4;28026:20;28022:1;28011:9;28007:17;28000:47;28064:131;28190:4;28064:131;:::i;:::-;28056:139;;27954:248;;;:::o;28208:419::-;28374:4;28412:2;28401:9;28397:18;28389:26;;28461:9;28455:4;28451:20;28447:1;28436:9;28432:17;28425:47;28489:131;28615:4;28489:131;:::i;:::-;28481:139;;28379:248;;;:::o;28633:419::-;28799:4;28837:2;28826:9;28822:18;28814:26;;28886:9;28880:4;28876:20;28872:1;28861:9;28857:17;28850:47;28914:131;29040:4;28914:131;:::i;:::-;28906:139;;28804:248;;;:::o;29058:419::-;29224:4;29262:2;29251:9;29247:18;29239:26;;29311:9;29305:4;29301:20;29297:1;29286:9;29282:17;29275:47;29339:131;29465:4;29339:131;:::i;:::-;29331:139;;29229:248;;;:::o;29483:419::-;29649:4;29687:2;29676:9;29672:18;29664:26;;29736:9;29730:4;29726:20;29722:1;29711:9;29707:17;29700:47;29764:131;29890:4;29764:131;:::i;:::-;29756:139;;29654:248;;;:::o;29908:419::-;30074:4;30112:2;30101:9;30097:18;30089:26;;30161:9;30155:4;30151:20;30147:1;30136:9;30132:17;30125:47;30189:131;30315:4;30189:131;:::i;:::-;30181:139;;30079:248;;;:::o;30333:419::-;30499:4;30537:2;30526:9;30522:18;30514:26;;30586:9;30580:4;30576:20;30572:1;30561:9;30557:17;30550:47;30614:131;30740:4;30614:131;:::i;:::-;30606:139;;30504:248;;;:::o;30758:419::-;30924:4;30962:2;30951:9;30947:18;30939:26;;31011:9;31005:4;31001:20;30997:1;30986:9;30982:17;30975:47;31039:131;31165:4;31039:131;:::i;:::-;31031:139;;30929:248;;;:::o;31183:419::-;31349:4;31387:2;31376:9;31372:18;31364:26;;31436:9;31430:4;31426:20;31422:1;31411:9;31407:17;31400:47;31464:131;31590:4;31464:131;:::i;:::-;31456:139;;31354:248;;;:::o;31608:419::-;31774:4;31812:2;31801:9;31797:18;31789:26;;31861:9;31855:4;31851:20;31847:1;31836:9;31832:17;31825:47;31889:131;32015:4;31889:131;:::i;:::-;31881:139;;31779:248;;;:::o;32033:419::-;32199:4;32237:2;32226:9;32222:18;32214:26;;32286:9;32280:4;32276:20;32272:1;32261:9;32257:17;32250:47;32314:131;32440:4;32314:131;:::i;:::-;32306:139;;32204:248;;;:::o;32458:419::-;32624:4;32662:2;32651:9;32647:18;32639:26;;32711:9;32705:4;32701:20;32697:1;32686:9;32682:17;32675:47;32739:131;32865:4;32739:131;:::i;:::-;32731:139;;32629:248;;;:::o;32883:419::-;33049:4;33087:2;33076:9;33072:18;33064:26;;33136:9;33130:4;33126:20;33122:1;33111:9;33107:17;33100:47;33164:131;33290:4;33164:131;:::i;:::-;33156:139;;33054:248;;;:::o;33308:419::-;33474:4;33512:2;33501:9;33497:18;33489:26;;33561:9;33555:4;33551:20;33547:1;33536:9;33532:17;33525:47;33589:131;33715:4;33589:131;:::i;:::-;33581:139;;33479:248;;;:::o;33733:419::-;33899:4;33937:2;33926:9;33922:18;33914:26;;33986:9;33980:4;33976:20;33972:1;33961:9;33957:17;33950:47;34014:131;34140:4;34014:131;:::i;:::-;34006:139;;33904:248;;;:::o;34158:419::-;34324:4;34362:2;34351:9;34347:18;34339:26;;34411:9;34405:4;34401:20;34397:1;34386:9;34382:17;34375:47;34439:131;34565:4;34439:131;:::i;:::-;34431:139;;34329:248;;;:::o;34583:419::-;34749:4;34787:2;34776:9;34772:18;34764:26;;34836:9;34830:4;34826:20;34822:1;34811:9;34807:17;34800:47;34864:131;34990:4;34864:131;:::i;:::-;34856:139;;34754:248;;;:::o;35008:419::-;35174:4;35212:2;35201:9;35197:18;35189:26;;35261:9;35255:4;35251:20;35247:1;35236:9;35232:17;35225:47;35289:131;35415:4;35289:131;:::i;:::-;35281:139;;35179:248;;;:::o;35433:419::-;35599:4;35637:2;35626:9;35622:18;35614:26;;35686:9;35680:4;35676:20;35672:1;35661:9;35657:17;35650:47;35714:131;35840:4;35714:131;:::i;:::-;35706:139;;35604:248;;;:::o;35858:419::-;36024:4;36062:2;36051:9;36047:18;36039:26;;36111:9;36105:4;36101:20;36097:1;36086:9;36082:17;36075:47;36139:131;36265:4;36139:131;:::i;:::-;36131:139;;36029:248;;;:::o;36283:419::-;36449:4;36487:2;36476:9;36472:18;36464:26;;36536:9;36530:4;36526:20;36522:1;36511:9;36507:17;36500:47;36564:131;36690:4;36564:131;:::i;:::-;36556:139;;36454:248;;;:::o;36708:419::-;36874:4;36912:2;36901:9;36897:18;36889:26;;36961:9;36955:4;36951:20;36947:1;36936:9;36932:17;36925:47;36989:131;37115:4;36989:131;:::i;:::-;36981:139;;36879:248;;;:::o;37133:419::-;37299:4;37337:2;37326:9;37322:18;37314:26;;37386:9;37380:4;37376:20;37372:1;37361:9;37357:17;37350:47;37414:131;37540:4;37414:131;:::i;:::-;37406:139;;37304:248;;;:::o;37558:419::-;37724:4;37762:2;37751:9;37747:18;37739:26;;37811:9;37805:4;37801:20;37797:1;37786:9;37782:17;37775:47;37839:131;37965:4;37839:131;:::i;:::-;37831:139;;37729:248;;;:::o;37983:419::-;38149:4;38187:2;38176:9;38172:18;38164:26;;38236:9;38230:4;38226:20;38222:1;38211:9;38207:17;38200:47;38264:131;38390:4;38264:131;:::i;:::-;38256:139;;38154:248;;;:::o;38408:419::-;38574:4;38612:2;38601:9;38597:18;38589:26;;38661:9;38655:4;38651:20;38647:1;38636:9;38632:17;38625:47;38689:131;38815:4;38689:131;:::i;:::-;38681:139;;38579:248;;;:::o;38833:419::-;38999:4;39037:2;39026:9;39022:18;39014:26;;39086:9;39080:4;39076:20;39072:1;39061:9;39057:17;39050:47;39114:131;39240:4;39114:131;:::i;:::-;39106:139;;39004:248;;;:::o;39258:419::-;39424:4;39462:2;39451:9;39447:18;39439:26;;39511:9;39505:4;39501:20;39497:1;39486:9;39482:17;39475:47;39539:131;39665:4;39539:131;:::i;:::-;39531:139;;39429:248;;;:::o;39683:419::-;39849:4;39887:2;39876:9;39872:18;39864:26;;39936:9;39930:4;39926:20;39922:1;39911:9;39907:17;39900:47;39964:131;40090:4;39964:131;:::i;:::-;39956:139;;39854:248;;;:::o;40108:419::-;40274:4;40312:2;40301:9;40297:18;40289:26;;40361:9;40355:4;40351:20;40347:1;40336:9;40332:17;40325:47;40389:131;40515:4;40389:131;:::i;:::-;40381:139;;40279:248;;;:::o;40533:222::-;40626:4;40664:2;40653:9;40649:18;40641:26;;40677:71;40745:1;40734:9;40730:17;40721:6;40677:71;:::i;:::-;40631:124;;;;:::o;40761:214::-;40850:4;40888:2;40877:9;40873:18;40865:26;;40901:67;40965:1;40954:9;40950:17;40941:6;40901:67;:::i;:::-;40855:120;;;;:::o;40981:129::-;41015:6;41042:20;;:::i;:::-;41032:30;;41071:33;41099:4;41091:6;41071:33;:::i;:::-;41022:88;;;:::o;41116:75::-;41149:6;41182:2;41176:9;41166:19;;41156:35;:::o;41197:311::-;41274:4;41364:18;41356:6;41353:30;41350:2;;;41386:18;;:::i;:::-;41350:2;41436:4;41428:6;41424:17;41416:25;;41496:4;41490;41486:15;41478:23;;41279:229;;;:::o;41514:307::-;41575:4;41665:18;41657:6;41654:30;41651:2;;;41687:18;;:::i;:::-;41651:2;41725:29;41747:6;41725:29;:::i;:::-;41717:37;;41809:4;41803;41799:15;41791:23;;41580:241;;;:::o;41827:308::-;41889:4;41979:18;41971:6;41968:30;41965:2;;;42001:18;;:::i;:::-;41965:2;42039:29;42061:6;42039:29;:::i;:::-;42031:37;;42123:4;42117;42113:15;42105:23;;41894:241;;;:::o;42141:132::-;42208:4;42231:3;42223:11;;42261:4;42256:3;42252:14;42244:22;;42213:60;;;:::o;42279:141::-;42328:4;42351:3;42343:11;;42374:3;42371:1;42364:14;42408:4;42405:1;42395:18;42387:26;;42333:87;;;:::o;42426:114::-;42493:6;42527:5;42521:12;42511:22;;42500:40;;;:::o;42546:98::-;42597:6;42631:5;42625:12;42615:22;;42604:40;;;:::o;42650:99::-;42702:6;42736:5;42730:12;42720:22;;42709:40;;;:::o;42755:113::-;42825:4;42857;42852:3;42848:14;42840:22;;42830:38;;;:::o;42874:184::-;42973:11;43007:6;43002:3;42995:19;43047:4;43042:3;43038:14;43023:29;;42985:73;;;;:::o;43064:168::-;43147:11;43181:6;43176:3;43169:19;43221:4;43216:3;43212:14;43197:29;;43159:73;;;;:::o;43238:147::-;43339:11;43376:3;43361:18;;43351:34;;;;:::o;43391:169::-;43475:11;43509:6;43504:3;43497:19;43549:4;43544:3;43540:14;43525:29;;43487:73;;;;:::o;43566:148::-;43668:11;43705:3;43690:18;;43680:34;;;;:::o;43720:305::-;43760:3;43779:20;43797:1;43779:20;:::i;:::-;43774:25;;43813:20;43831:1;43813:20;:::i;:::-;43808:25;;43967:1;43899:66;43895:74;43892:1;43889:81;43886:2;;;43973:18;;:::i;:::-;43886:2;44017:1;44014;44010:9;44003:16;;43764:261;;;;:::o;44031:185::-;44071:1;44088:20;44106:1;44088:20;:::i;:::-;44083:25;;44122:20;44140:1;44122:20;:::i;:::-;44117:25;;44161:1;44151:2;;44166:18;;:::i;:::-;44151:2;44208:1;44205;44201:9;44196:14;;44073:143;;;;:::o;44222:348::-;44262:7;44285:20;44303:1;44285:20;:::i;:::-;44280:25;;44319:20;44337:1;44319:20;:::i;:::-;44314:25;;44507:1;44439:66;44435:74;44432:1;44429:81;44424:1;44417:9;44410:17;44406:105;44403:2;;;44514:18;;:::i;:::-;44403:2;44562:1;44559;44555:9;44544:20;;44270:300;;;;:::o;44576:191::-;44616:4;44636:20;44654:1;44636:20;:::i;:::-;44631:25;;44670:20;44688:1;44670:20;:::i;:::-;44665:25;;44709:1;44706;44703:8;44700:2;;;44714:18;;:::i;:::-;44700:2;44759:1;44756;44752:9;44744:17;;44621:146;;;;:::o;44773:185::-;44811:4;44831:18;44847:1;44831:18;:::i;:::-;44826:23;;44863:18;44879:1;44863:18;:::i;:::-;44858:23;;44900:1;44897;44894:8;44891:2;;;44905:18;;:::i;:::-;44891:2;44950:1;44947;44943:9;44935:17;;44816:142;;;;:::o;44964:96::-;45001:7;45030:24;45048:5;45030:24;:::i;:::-;45019:35;;45009:51;;;:::o;45066:90::-;45100:7;45143:5;45136:13;45129:21;45118:32;;45108:48;;;:::o;45162:149::-;45198:7;45238:66;45231:5;45227:78;45216:89;;45206:105;;;:::o;45317:126::-;45354:7;45394:42;45387:5;45383:54;45372:65;;45362:81;;;:::o;45449:77::-;45486:7;45515:5;45504:16;;45494:32;;;:::o;45532:101::-;45568:7;45608:18;45601:5;45597:30;45586:41;;45576:57;;;:::o;45639:86::-;45674:7;45714:4;45707:5;45703:16;45692:27;;45682:43;;;:::o;45731:154::-;45815:6;45810:3;45805;45792:30;45877:1;45868:6;45863:3;45859:16;45852:27;45782:103;;;:::o;45891:307::-;45959:1;45969:113;45983:6;45980:1;45977:13;45969:113;;;46068:1;46063:3;46059:11;46053:18;46049:1;46044:3;46040:11;46033:39;46005:2;46002:1;45998:10;45993:15;;45969:113;;;46100:6;46097:1;46094:13;46091:2;;;46180:1;46171:6;46166:3;46162:16;46155:27;46091:2;45940:258;;;;:::o;46204:320::-;46248:6;46285:1;46279:4;46275:12;46265:22;;46332:1;46326:4;46322:12;46353:18;46343:2;;46409:4;46401:6;46397:17;46387:27;;46343:2;46471;46463:6;46460:14;46440:18;46437:38;46434:2;;;46490:18;;:::i;:::-;46434:2;46255:269;;;;:::o;46530:281::-;46613:27;46635:4;46613:27;:::i;:::-;46605:6;46601:40;46743:6;46731:10;46728:22;46707:18;46695:10;46692:34;46689:62;46686:2;;;46754:18;;:::i;:::-;46686:2;46794:10;46790:2;46783:22;46573:238;;;:::o;46817:233::-;46856:3;46879:24;46897:5;46879:24;:::i;:::-;46870:33;;46925:66;46918:5;46915:77;46912:2;;;46995:18;;:::i;:::-;46912:2;47042:1;47035:5;47031:13;47024:20;;46860:190;;;:::o;47056:167::-;47093:3;47116:22;47132:5;47116:22;:::i;:::-;47107:31;;47160:4;47153:5;47150:15;47147:2;;;47168:18;;:::i;:::-;47147:2;47215:1;47208:5;47204:13;47197:20;;47097:126;;;:::o;47229:176::-;47261:1;47278:20;47296:1;47278:20;:::i;:::-;47273:25;;47312:20;47330:1;47312:20;:::i;:::-;47307:25;;47351:1;47341:2;;47356:18;;:::i;:::-;47341:2;47397:1;47394;47390:9;47385:14;;47263:142;;;;:::o;47411:180::-;47459:77;47456:1;47449:88;47556:4;47553:1;47546:15;47580:4;47577:1;47570:15;47597:180;47645:77;47642:1;47635:88;47742:4;47739:1;47732:15;47766:4;47763:1;47756:15;47783:180;47831:77;47828:1;47821:88;47928:4;47925:1;47918:15;47952:4;47949:1;47942:15;47969:180;48017:77;48014:1;48007:88;48114:4;48111:1;48104:15;48138:4;48135:1;48128:15;48155:102;48196:6;48247:2;48243:7;48238:2;48231:5;48227:14;48223:28;48213:38;;48203:54;;;:::o;48263:178::-;48403:30;48399:1;48391:6;48387:14;48380:54;48369:72;:::o;48447:174::-;48587:26;48583:1;48575:6;48571:14;48564:50;48553:68;:::o;48627:170::-;48767:22;48763:1;48755:6;48751:14;48744:46;48733:64;:::o;48803:237::-;48943:34;48939:1;48931:6;48927:14;48920:58;49012:20;49007:2;48999:6;48995:15;48988:45;48909:131;:::o;49046:169::-;49186:21;49182:1;49174:6;49170:14;49163:45;49152:63;:::o;49221:225::-;49361:34;49357:1;49349:6;49345:14;49338:58;49430:8;49425:2;49417:6;49413:15;49406:33;49327:119;:::o;49452:173::-;49592:25;49588:1;49580:6;49576:14;49569:49;49558:67;:::o;49631:224::-;49771:34;49767:1;49759:6;49755:14;49748:58;49840:7;49835:2;49827:6;49823:15;49816:32;49737:118;:::o;49861:178::-;50001:30;49997:1;49989:6;49985:14;49978:54;49967:72;:::o;50045:180::-;50185:32;50181:1;50173:6;50169:14;50162:56;50151:74;:::o;50231:223::-;50371:34;50367:1;50359:6;50355:14;50348:58;50440:6;50435:2;50427:6;50423:15;50416:31;50337:117;:::o;50460:175::-;50600:27;50596:1;50588:6;50584:14;50577:51;50566:69;:::o;50641:179::-;50781:31;50777:1;50769:6;50765:14;50758:55;50747:73;:::o;50826:167::-;50966:19;50962:1;50954:6;50950:14;50943:43;50932:61;:::o;50999:245::-;51139:34;51135:1;51127:6;51123:14;51116:58;51208:28;51203:2;51195:6;51191:15;51184:53;51105:139;:::o;51250:179::-;51390:31;51386:1;51378:6;51374:14;51367:55;51356:73;:::o;51435:231::-;51575:34;51571:1;51563:6;51559:14;51552:58;51644:14;51639:2;51631:6;51627:15;51620:39;51541:125;:::o;51672:243::-;51812:34;51808:1;51800:6;51796:14;51789:58;51881:26;51876:2;51868:6;51864:15;51857:51;51778:137;:::o;51921:229::-;52061:34;52057:1;52049:6;52045:14;52038:58;52130:12;52125:2;52117:6;52113:15;52106:37;52027:123;:::o;52156:228::-;52296:34;52292:1;52284:6;52280:14;52273:58;52365:11;52360:2;52352:6;52348:15;52341:36;52262:122;:::o;52390:221::-;52530:34;52526:1;52518:6;52514:14;52507:58;52599:4;52594:2;52586:6;52582:15;52575:29;52496:115;:::o;52617:169::-;52757:21;52753:1;52745:6;52741:14;52734:45;52723:63;:::o;52792:178::-;52932:30;52928:1;52920:6;52916:14;52909:54;52898:72;:::o;52976:182::-;53116:34;53112:1;53104:6;53100:14;53093:58;53082:76;:::o;53164:231::-;53304:34;53300:1;53292:6;53288:14;53281:58;53373:14;53368:2;53360:6;53356:15;53349:39;53270:125;:::o;53401:182::-;53541:34;53537:1;53529:6;53525:14;53518:58;53507:76;:::o;53589:177::-;53729:29;53725:1;53717:6;53713:14;53706:53;53695:71;:::o;53772:234::-;53912:34;53908:1;53900:6;53896:14;53889:58;53981:17;53976:2;53968:6;53964:15;53957:42;53878:128;:::o;54012:226::-;54152:34;54148:1;54140:6;54136:14;54129:58;54221:9;54216:2;54208:6;54204:15;54197:34;54118:120;:::o;54244:220::-;54384:34;54380:1;54372:6;54368:14;54361:58;54453:3;54448:2;54440:6;54436:15;54429:28;54350:114;:::o;54470:::-;54576:8;:::o;54590:236::-;54730:34;54726:1;54718:6;54714:14;54707:58;54799:19;54794:2;54786:6;54782:15;54775:44;54696:130;:::o;54832:169::-;54972:21;54968:1;54960:6;54956:14;54949:45;54938:63;:::o;55007:122::-;55080:24;55098:5;55080:24;:::i;:::-;55073:5;55070:35;55060:2;;55119:1;55116;55109:12;55060:2;55050:79;:::o;55135:116::-;55205:21;55220:5;55205:21;:::i;:::-;55198:5;55195:32;55185:2;;55241:1;55238;55231:12;55185:2;55175:76;:::o;55257:120::-;55329:23;55346:5;55329:23;:::i;:::-;55322:5;55319:34;55309:2;;55367:1;55364;55357:12;55309:2;55299:78;:::o;55383:122::-;55456:24;55474:5;55456:24;:::i;:::-;55449:5;55446:35;55436:2;;55495:1;55492;55485:12;55436:2;55426:79;:::o;55511:120::-;55583:23;55600:5;55583:23;:::i;:::-;55576:5;55573:34;55563:2;;55621:1;55618;55611:12;55563:2;55553:78;:::o;55637:118::-;55708:22;55724:5;55708:22;:::i;:::-;55701:5;55698:33;55688:2;;55745:1;55742;55735:12;55688:2;55678:77;:::o

Swarm Source

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