ETH Price: $3,476.96 (+6.16%)
Gas: 6 Gwei

Token

Official Wrapped Frosties (WFROST)
 

Overview

Max Total Supply

0 WFROST

Holders

575

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 WFROST
0xd6aacb647584229cf56b502594d9e72b1c53898c
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:
WrappedFrostiesNFT

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// 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/security/Pausable.sol


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

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC721/extensions/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 v4.4.1 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _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 || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev 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 {}
}

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


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

pragma solidity ^0.8.0;



/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be irreversibly burned (destroyed).
 */
abstract contract ERC721Burnable is Context, ERC721 {
    /**
     * @dev Burns `tokenId`. See {ERC721-_burn}.
     *
     * Requirements:
     *
     * - The caller must own `tokenId` or be an approved operator.
     */
    function burn(uint256 tokenId) public virtual {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved");
        _burn(tokenId);
    }
}

// File: verified-sources/0x1fF7307ED4dF5b3694Fddb6B3bABb3A0CC65650e/sources/github/WarAgainstRugs/WrappedFrosties/contracts/WrappedFrostiesNFT.sol


pragma solidity ^0.8.9;








contract WrappedFrostiesNFT is
  ERC721,
  IERC721Receiver,
  Pausable,
  Ownable,
  ERC721Burnable
{
  event Wrapped(uint256 indexed tokenId);
  event Unwrapped(uint256 indexed tokenId);

  IERC721 immutable frostiesNFT;

  constructor(address frostiesNFTContractAddress_)
    ERC721("Official Wrapped Frosties", "WFROST")
  {
    frostiesNFT = IERC721(frostiesNFTContractAddress_);
  }

  function _baseURI() internal pure override returns (string memory) {
    return "ipfs://QmYSKvwngQxaSAKniUvQ8koQAaCaa5Pimsar38bPYP5aSv/";
  }

  function tokenURI(uint256 tokenId)
    public
    view
    override
    returns (string memory)
  {
    return string(abi.encodePacked(super.tokenURI(tokenId), ".json"));
  }

  function pause() public onlyOwner {
    _pause();
  }

  function unpause() public onlyOwner {
    _unpause();
  }

  /// Wrap Frosties NFT(s) to get Wrapped Frosty(s)
  function wrap(uint256[] calldata tokenIds_) external {
    for (uint256 i = 0; i < tokenIds_.length; i++) {
      frostiesNFT.safeTransferFrom(msg.sender, address(this), tokenIds_[i]);
    }
  }

  /// Unwrap to get Frosties NFT(s) back
  function unwrap(uint256[] calldata tokenIds_) external {
    for (uint256 i = 0; i < tokenIds_.length; i++) {
      _safeTransfer(msg.sender, address(this), tokenIds_[i], "");
    }
  }

  function _flip(
    address who_,
    bool isWrapping_,
    uint256 tokenId_
  ) private {
    if (isWrapping_) {
      // Mint Wrapped Frosty of same tokenID if not yet minted, otherwise swap for existing Wrapped Frostie
      if (_exists(tokenId_) && ownerOf(tokenId_) == address(this)) {
        _safeTransfer(address(this), who_, tokenId_, "");
      } else {
        _safeMint(who_, tokenId_);
      }
      emit Wrapped(tokenId_);
    } else {
      frostiesNFT.safeTransferFrom(address(this), who_, tokenId_);
      emit Unwrapped(tokenId_);
    }
  }

  // Notice: You must use safeTransferFrom in order to properly wrap/unwrap your frosty.
  function onERC721Received(
    address operator_,
    address from_,
    uint256 tokenId_,
    bytes memory data_
  ) external override returns (bytes4) {
    // Only supports callback from the original FrostyNFTs contract and this contract
    require(
      msg.sender == address(frostiesNFT) || msg.sender == address(this),
      "must be FrostyNFT or WrappedFrosty"
    );

    bool isWrapping = msg.sender == address(frostiesNFT);
    _flip(from_, isWrapping, tokenId_);

    return this.onERC721Received.selector;
  }

  function _beforeTokenTransfer(
    address from,
    address to,
    uint256 tokenId
  ) internal override whenNotPaused {
    super._beforeTokenTransfer(from, to, tokenId);
  }

  fallback() external payable {}

  receive() external payable {}

  function withdrawETH() external onlyOwner {
    (bool success, ) = owner().call{value: address(this).balance}("");
    require(success, "Transfer failed.");
  }

  function withdrawERC20(address token) external onlyOwner {
    bool success = IERC20(token).transfer(
      owner(),
      IERC20(token).balanceOf(address(this))
    );
    require(success, "Transfer failed");
  }

  // @notice Mints or transfers wrapped frosty nft to owner for users who incorrectly transfer a Frostie Frosty or Wrapped Frosty directly to the contract without using safeTransferFrom.
  // @dev This condition will occur if onERC721Received isn't called when transferring.
  function emergencyMintWrapped(uint256 tokenId_) external onlyOwner {
    if (frostiesNFT.ownerOf(tokenId_) == address(this)) {
      // Contract owns the Frostie Frosty.
      if (_exists(tokenId_) && ownerOf(tokenId_) == address(this)) {
        // Wrapped Frosty is also trapped in contract.
        _safeTransfer(address(this), owner(), tokenId_, "");
        emit Wrapped(tokenId_);
      } else if (!_exists(tokenId_)) {
        // Wrapped Frosty hasn't ever been minted.
        _safeMint(owner(), tokenId_);
        emit Wrapped(tokenId_);
      } else {
        revert("Wrapped Frosty minted and distributed already");
      }
    } else {
      revert("Frostie Frosty is not locked in contract");
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"frostiesNFTContractAddress_","type":"address"}],"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Unwrapped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Wrapped","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"emergencyMintWrapped","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator_","type":"address"},{"internalType":"address","name":"from_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"}],"name":"unwrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"}],"name":"wrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040523480156200001157600080fd5b506040516200465c3803806200465c833981810160405281019062000037919062000335565b6040518060400160405280601981526020017f4f6666696369616c20577261707065642046726f7374696573000000000000008152506040518060400160405280600681526020017f5746524f535400000000000000000000000000000000000000000000000000008152508160009080519060200190620000bb9291906200021b565b508060019080519060200190620000d49291906200021b565b5050506000600660006101000a81548160ff02191690831515021790555062000112620001066200014d60201b60201c565b6200015560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050620003cc565b600033905090565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002299062000396565b90600052602060002090601f0160209004810192826200024d576000855562000299565b82601f106200026857805160ff191683800117855562000299565b8280016001018555821562000299579182015b82811115620002985782518255916020019190600101906200027b565b5b509050620002a89190620002ac565b5090565b5b80821115620002c7576000816000905550600101620002ad565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002fd82620002d0565b9050919050565b6200030f81620002f0565b81146200031b57600080fd5b50565b6000815190506200032f8162000304565b92915050565b6000602082840312156200034e576200034d620002cb565b5b60006200035e848285016200031e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003af57607f821691505b60208210811415620003c657620003c562000367565b5b50919050565b6080516142586200040460003960008181610919015281816109df01528181610b41015281816112c50152611a4c01526142586000f3fe6080604052600436106101855760003560e01c806370a08231116100d1578063b88d4fde1161008a578063e086e5ec11610064578063e086e5ec1461055e578063e985e9c514610575578063f2fde38b146105b2578063f4f3b200146105db5761018c565b8063b88d4fde146104cf578063c87b56dd146104f8578063cc17a5bf146105355761018c565b806370a08231146103e5578063715018a6146104225780638456cb59146104395780638da5cb5b1461045057806395d89b411461047b578063a22cb465146104a65761018c565b80633f44f32c1161013e57806342966c681161011857806342966c681461032b5780635c975abb146103545780636352211e1461037f57806363ac2a4c146103bc5761018c565b80633f44f32c146102c25780633f4ba83a146102eb57806342842e0e146103025761018c565b806301ffc9a71461018e57806306fdde03146101cb578063081812fc146101f6578063095ea7b314610233578063150b7a021461025c57806323b872dd146102995761018c565b3661018c57005b005b34801561019a57600080fd5b506101b560048036038101906101b091906129fe565b610604565b6040516101c29190612a46565b60405180910390f35b3480156101d757600080fd5b506101e06106e6565b6040516101ed9190612afa565b60405180910390f35b34801561020257600080fd5b5061021d60048036038101906102189190612b52565b610778565b60405161022a9190612bc0565b60405180910390f35b34801561023f57600080fd5b5061025a60048036038101906102559190612c07565b6107fd565b005b34801561026857600080fd5b50610283600480360381019061027e9190612d7c565b610915565b6040516102909190612e0e565b60405180910390f35b3480156102a557600080fd5b506102c060048036038101906102bb9190612e29565b610a4c565b005b3480156102ce57600080fd5b506102e960048036038101906102e49190612b52565b610aac565b005b3480156102f757600080fd5b50610300610d65565b005b34801561030e57600080fd5b5061032960048036038101906103249190612e29565b610deb565b005b34801561033757600080fd5b50610352600480360381019061034d9190612b52565b610e0b565b005b34801561036057600080fd5b50610369610e67565b6040516103769190612a46565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a19190612b52565b610e7e565b6040516103b39190612bc0565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190612edc565b610f30565b005b3480156103f157600080fd5b5061040c60048036038101906104079190612f29565b610f8a565b6040516104199190612f65565b60405180910390f35b34801561042e57600080fd5b50610437611042565b005b34801561044557600080fd5b5061044e6110ca565b005b34801561045c57600080fd5b50610465611150565b6040516104729190612bc0565b60405180910390f35b34801561048757600080fd5b5061049061117a565b60405161049d9190612afa565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190612fac565b61120c565b005b3480156104db57600080fd5b506104f660048036038101906104f19190612d7c565b611222565b005b34801561050457600080fd5b5061051f600480360381019061051a9190612b52565b611284565b60405161052c9190612afa565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190612edc565b6112b5565b005b34801561056a57600080fd5b50610573611383565b005b34801561058157600080fd5b5061059c60048036038101906105979190612fec565b6114b5565b6040516105a99190612a46565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190612f29565b611549565b005b3480156105e757600080fd5b5061060260048036038101906105fd9190612f29565b611641565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106cf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106df57506106de82611803565b5b9050919050565b6060600080546106f59061305b565b80601f01602080910402602001604051908101604052809291908181526020018280546107219061305b565b801561076e5780601f106107435761010080835404028352916020019161076e565b820191906000526020600020905b81548152906001019060200180831161075157829003601f168201915b5050505050905090565b60006107838261186d565b6107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b9906130ff565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061080882610e7e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087090613191565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108986118d9565b73ffffffffffffffffffffffffffffffffffffffff1614806108c757506108c6816108c16118d9565b6114b5565b5b610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd90613223565b60405180910390fd5b61091083836118e1565b505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061099c57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6109db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d2906132b5565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16149050610a3985828661199a565b63150b7a0260e01b915050949350505050565b610a5d610a576118d9565b82611b0c565b610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9390613347565b60405180910390fd5b610aa7838383611bea565b505050565b610ab46118d9565b73ffffffffffffffffffffffffffffffffffffffff16610ad2611150565b73ffffffffffffffffffffffffffffffffffffffff1614610b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1f906133b3565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610b989190612f65565b602060405180830381865afa158015610bb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd991906133e8565b73ffffffffffffffffffffffffffffffffffffffff161415610d2757610bfe8161186d565b8015610c3d57503073ffffffffffffffffffffffffffffffffffffffff16610c2582610e7e565b73ffffffffffffffffffffffffffffffffffffffff16145b15610c9657610c6430610c4e611150565b8360405180602001604052806000815250611e46565b807f5b8cd8f3a67af1dee11ad4321a05f79a76cc7ea517810fc56d6d96c1e60d368660405160405180910390a2610d22565b610c9f8161186d565b610ce657610cb4610cae611150565b82611ea2565b807f5b8cd8f3a67af1dee11ad4321a05f79a76cc7ea517810fc56d6d96c1e60d368660405160405180910390a2610d21565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890613487565b60405180910390fd5b5b610d62565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5990613519565b60405180910390fd5b50565b610d6d6118d9565b73ffffffffffffffffffffffffffffffffffffffff16610d8b611150565b73ffffffffffffffffffffffffffffffffffffffff1614610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd8906133b3565b60405180910390fd5b610de9611ec0565b565b610e0683838360405180602001604052806000815250611222565b505050565b610e1c610e166118d9565b82611b0c565b610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e52906135ab565b60405180910390fd5b610e6481611f62565b50565b6000600660009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e9061363d565b60405180910390fd5b80915050919050565b60005b82829050811015610f8557610f723330858585818110610f5657610f5561365d565b5b9050602002013560405180602001604052806000815250611e46565b8080610f7d906136bb565b915050610f33565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff290613776565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61104a6118d9565b73ffffffffffffffffffffffffffffffffffffffff16611068611150565b73ffffffffffffffffffffffffffffffffffffffff16146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b5906133b3565b60405180910390fd5b6110c86000612073565b565b6110d26118d9565b73ffffffffffffffffffffffffffffffffffffffff166110f0611150565b73ffffffffffffffffffffffffffffffffffffffff1614611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113d906133b3565b60405180910390fd5b61114e612139565b565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546111899061305b565b80601f01602080910402602001604051908101604052809291908181526020018280546111b59061305b565b80156112025780601f106111d757610100808354040283529160200191611202565b820191906000526020600020905b8154815290600101906020018083116111e557829003601f168201915b5050505050905090565b61121e6112176118d9565b83836121dc565b5050565b61123361122d6118d9565b83611b0c565b611272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126990613347565b60405180910390fd5b61127e84848484611e46565b50505050565b606061128f82612349565b60405160200161129f919061381e565b6040516020818303038152906040529050919050565b60005b8282905081101561137e577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166342842e0e33308686868181106113145761131361365d565b5b905060200201356040518463ffffffff1660e01b815260040161133993929190613840565b600060405180830381600087803b15801561135357600080fd5b505af1158015611367573d6000803e3d6000fd5b505050508080611376906136bb565b9150506112b8565b505050565b61138b6118d9565b73ffffffffffffffffffffffffffffffffffffffff166113a9611150565b73ffffffffffffffffffffffffffffffffffffffff16146113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f6906133b3565b60405180910390fd5b6000611409611150565b73ffffffffffffffffffffffffffffffffffffffff164760405161142c906138a8565b60006040518083038185875af1925050503d8060008114611469576040519150601f19603f3d011682016040523d82523d6000602084013e61146e565b606091505b50509050806114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990613909565b60405180910390fd5b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115516118d9565b73ffffffffffffffffffffffffffffffffffffffff1661156f611150565b73ffffffffffffffffffffffffffffffffffffffff16146115c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bc906133b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c9061399b565b60405180910390fd5b61163e81612073565b50565b6116496118d9565b73ffffffffffffffffffffffffffffffffffffffff16611667611150565b73ffffffffffffffffffffffffffffffffffffffff16146116bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b4906133b3565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6116e3611150565b8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161171c9190612bc0565b602060405180830381865afa158015611739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175d91906139d0565b6040518363ffffffff1660e01b815260040161177a9291906139fd565b6020604051808303816000875af1158015611799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bd9190613a3b565b9050806117ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f690613ab4565b60405180910390fd5b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661195483610e7e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b8115611a4a576119a98161186d565b80156119e857503073ffffffffffffffffffffffffffffffffffffffff166119d082610e7e565b73ffffffffffffffffffffffffffffffffffffffff16145b15611a0d57611a0830848360405180602001604052806000815250611e46565b611a18565b611a178382611ea2565b5b807f5b8cd8f3a67af1dee11ad4321a05f79a76cc7ea517810fc56d6d96c1e60d368660405160405180910390a2611b07565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166342842e0e3085846040518463ffffffff1660e01b8152600401611aa793929190613840565b600060405180830381600087803b158015611ac157600080fd5b505af1158015611ad5573d6000803e3d6000fd5b50505050807fbeaa92c6354c6dcf375d2c514352b2c11bc865784722e5dd9b267e606eb5fc5f60405160405180910390a25b505050565b6000611b178261186d565b611b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4d90613b46565b60405180910390fd5b6000611b6183610e7e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bd057508373ffffffffffffffffffffffffffffffffffffffff16611bb884610778565b73ffffffffffffffffffffffffffffffffffffffff16145b80611be15750611be081856114b5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c0a82610e7e565b73ffffffffffffffffffffffffffffffffffffffff1614611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5790613bd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc790613c6a565b60405180910390fd5b611cdb8383836123f0565b611ce66000826118e1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d369190613c8a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d8d9190613cbe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611e51848484611bea565b611e5d84848484612448565b611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9390613d86565b60405180910390fd5b50505050565b611ebc8282604051806020016040528060008152506125d0565b5050565b611ec8610e67565b611f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efe90613df2565b60405180910390fd5b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611f4b6118d9565b604051611f589190612bc0565b60405180910390a1565b6000611f6d82610e7e565b9050611f7b816000846123f0565b611f866000836118e1565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fd69190613c8a565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612141610e67565b15612181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217890613e5e565b60405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121c56118d9565b6040516121d29190612bc0565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561224b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224290613eca565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161233c9190612a46565b60405180910390a3505050565b60606123548261186d565b612393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238a90613f5c565b60405180910390fd5b600061239d61262b565b905060008151116123bd57604051806020016040528060008152506123e8565b806123c78461264b565b6040516020016123d8929190613f7c565b6040516020818303038152906040525b915050919050565b6123f8610e67565b15612438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242f90613e5e565b60405180910390fd5b6124438383836127ac565b505050565b60006124698473ffffffffffffffffffffffffffffffffffffffff166127b1565b156125c3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124926118d9565b8786866040518563ffffffff1660e01b81526004016124b49493929190613ff5565b6020604051808303816000875af19250505080156124f057506040513d601f19601f820116820180604052508101906124ed9190614056565b60015b612573573d8060008114612520576040519150601f19603f3d011682016040523d82523d6000602084013e612525565b606091505b5060008151141561256b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256290613d86565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125c8565b600190505b949350505050565b6125da83836127c4565b6125e76000848484612448565b612626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261d90613d86565b60405180910390fd5b505050565b60606040518060600160405280603681526020016141ed60369139905090565b60606000821415612693576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127a7565b600082905060005b600082146126c55780806126ae906136bb565b915050600a826126be91906140b2565b915061269b565b60008167ffffffffffffffff8111156126e1576126e0612c51565b5b6040519080825280601f01601f1916602001820160405280156127135781602001600182028036833780820191505090505b5090505b600085146127a05760018261272c9190613c8a565b9150600a8561273b91906140e3565b60306127479190613cbe565b60f81b81838151811061275d5761275c61365d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561279991906140b2565b9450612717565b8093505050505b919050565b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282b90614160565b60405180910390fd5b61283d8161186d565b1561287d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612874906141cc565b60405180910390fd5b612889600083836123f0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128d99190613cbe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129db816129a6565b81146129e657600080fd5b50565b6000813590506129f8816129d2565b92915050565b600060208284031215612a1457612a1361299c565b5b6000612a22848285016129e9565b91505092915050565b60008115159050919050565b612a4081612a2b565b82525050565b6000602082019050612a5b6000830184612a37565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a9b578082015181840152602081019050612a80565b83811115612aaa576000848401525b50505050565b6000601f19601f8301169050919050565b6000612acc82612a61565b612ad68185612a6c565b9350612ae6818560208601612a7d565b612aef81612ab0565b840191505092915050565b60006020820190508181036000830152612b148184612ac1565b905092915050565b6000819050919050565b612b2f81612b1c565b8114612b3a57600080fd5b50565b600081359050612b4c81612b26565b92915050565b600060208284031215612b6857612b6761299c565b5b6000612b7684828501612b3d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612baa82612b7f565b9050919050565b612bba81612b9f565b82525050565b6000602082019050612bd56000830184612bb1565b92915050565b612be481612b9f565b8114612bef57600080fd5b50565b600081359050612c0181612bdb565b92915050565b60008060408385031215612c1e57612c1d61299c565b5b6000612c2c85828601612bf2565b9250506020612c3d85828601612b3d565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612c8982612ab0565b810181811067ffffffffffffffff82111715612ca857612ca7612c51565b5b80604052505050565b6000612cbb612992565b9050612cc78282612c80565b919050565b600067ffffffffffffffff821115612ce757612ce6612c51565b5b612cf082612ab0565b9050602081019050919050565b82818337600083830152505050565b6000612d1f612d1a84612ccc565b612cb1565b905082815260208101848484011115612d3b57612d3a612c4c565b5b612d46848285612cfd565b509392505050565b600082601f830112612d6357612d62612c47565b5b8135612d73848260208601612d0c565b91505092915050565b60008060008060808587031215612d9657612d9561299c565b5b6000612da487828801612bf2565b9450506020612db587828801612bf2565b9350506040612dc687828801612b3d565b925050606085013567ffffffffffffffff811115612de757612de66129a1565b5b612df387828801612d4e565b91505092959194509250565b612e08816129a6565b82525050565b6000602082019050612e236000830184612dff565b92915050565b600080600060608486031215612e4257612e4161299c565b5b6000612e5086828701612bf2565b9350506020612e6186828701612bf2565b9250506040612e7286828701612b3d565b9150509250925092565b600080fd5b600080fd5b60008083601f840112612e9c57612e9b612c47565b5b8235905067ffffffffffffffff811115612eb957612eb8612e7c565b5b602083019150836020820283011115612ed557612ed4612e81565b5b9250929050565b60008060208385031215612ef357612ef261299c565b5b600083013567ffffffffffffffff811115612f1157612f106129a1565b5b612f1d85828601612e86565b92509250509250929050565b600060208284031215612f3f57612f3e61299c565b5b6000612f4d84828501612bf2565b91505092915050565b612f5f81612b1c565b82525050565b6000602082019050612f7a6000830184612f56565b92915050565b612f8981612a2b565b8114612f9457600080fd5b50565b600081359050612fa681612f80565b92915050565b60008060408385031215612fc357612fc261299c565b5b6000612fd185828601612bf2565b9250506020612fe285828601612f97565b9150509250929050565b600080604083850312156130035761300261299c565b5b600061301185828601612bf2565b925050602061302285828601612bf2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061307357607f821691505b602082108114156130875761308661302c565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006130e9602c83612a6c565b91506130f48261308d565b604082019050919050565b60006020820190508181036000830152613118816130dc565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061317b602183612a6c565b91506131868261311f565b604082019050919050565b600060208201905081810360008301526131aa8161316e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061320d603883612a6c565b9150613218826131b1565b604082019050919050565b6000602082019050818103600083015261323c81613200565b9050919050565b7f6d7573742062652046726f7374794e4654206f72205772617070656446726f7360008201527f7479000000000000000000000000000000000000000000000000000000000000602082015250565b600061329f602283612a6c565b91506132aa82613243565b604082019050919050565b600060208201905081810360008301526132ce81613292565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613331603183612a6c565b915061333c826132d5565b604082019050919050565b6000602082019050818103600083015261336081613324565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061339d602083612a6c565b91506133a882613367565b602082019050919050565b600060208201905081810360008301526133cc81613390565b9050919050565b6000815190506133e281612bdb565b92915050565b6000602082840312156133fe576133fd61299c565b5b600061340c848285016133d3565b91505092915050565b7f577261707065642046726f737479206d696e74656420616e642064697374726960008201527f627574656420616c726561647900000000000000000000000000000000000000602082015250565b6000613471602d83612a6c565b915061347c82613415565b604082019050919050565b600060208201905081810360008301526134a081613464565b9050919050565b7f46726f737469652046726f737479206973206e6f74206c6f636b656420696e2060008201527f636f6e7472616374000000000000000000000000000000000000000000000000602082015250565b6000613503602883612a6c565b915061350e826134a7565b604082019050919050565b60006020820190508181036000830152613532816134f6565b9050919050565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b6000613595603083612a6c565b91506135a082613539565b604082019050919050565b600060208201905081810360008301526135c481613588565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613627602983612a6c565b9150613632826135cb565b604082019050919050565b600060208201905081810360008301526136568161361a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136c682612b1c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136f9576136f861368c565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613760602a83612a6c565b915061376b82613704565b604082019050919050565b6000602082019050818103600083015261378f81613753565b9050919050565b600081905092915050565b60006137ac82612a61565b6137b68185613796565b93506137c6818560208601612a7d565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613808600583613796565b9150613813826137d2565b600582019050919050565b600061382a82846137a1565b9150613835826137fb565b915081905092915050565b60006060820190506138556000830186612bb1565b6138626020830185612bb1565b61386f6040830184612f56565b949350505050565b600081905092915050565b50565b6000613892600083613877565b915061389d82613882565b600082019050919050565b60006138b382613885565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006138f3601083612a6c565b91506138fe826138bd565b602082019050919050565b60006020820190508181036000830152613922816138e6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613985602683612a6c565b915061399082613929565b604082019050919050565b600060208201905081810360008301526139b481613978565b9050919050565b6000815190506139ca81612b26565b92915050565b6000602082840312156139e6576139e561299c565b5b60006139f4848285016139bb565b91505092915050565b6000604082019050613a126000830185612bb1565b613a1f6020830184612f56565b9392505050565b600081519050613a3581612f80565b92915050565b600060208284031215613a5157613a5061299c565b5b6000613a5f84828501613a26565b91505092915050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000613a9e600f83612a6c565b9150613aa982613a68565b602082019050919050565b60006020820190508181036000830152613acd81613a91565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613b30602c83612a6c565b9150613b3b82613ad4565b604082019050919050565b60006020820190508181036000830152613b5f81613b23565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613bc2602983612a6c565b9150613bcd82613b66565b604082019050919050565b60006020820190508181036000830152613bf181613bb5565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c54602483612a6c565b9150613c5f82613bf8565b604082019050919050565b60006020820190508181036000830152613c8381613c47565b9050919050565b6000613c9582612b1c565b9150613ca083612b1c565b925082821015613cb357613cb261368c565b5b828203905092915050565b6000613cc982612b1c565b9150613cd483612b1c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d0957613d0861368c565b5b828201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613d70603283612a6c565b9150613d7b82613d14565b604082019050919050565b60006020820190508181036000830152613d9f81613d63565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613ddc601483612a6c565b9150613de782613da6565b602082019050919050565b60006020820190508181036000830152613e0b81613dcf565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613e48601083612a6c565b9150613e5382613e12565b602082019050919050565b60006020820190508181036000830152613e7781613e3b565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613eb4601983612a6c565b9150613ebf82613e7e565b602082019050919050565b60006020820190508181036000830152613ee381613ea7565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613f46602f83612a6c565b9150613f5182613eea565b604082019050919050565b60006020820190508181036000830152613f7581613f39565b9050919050565b6000613f8882856137a1565b9150613f9482846137a1565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000613fc782613fa0565b613fd18185613fab565b9350613fe1818560208601612a7d565b613fea81612ab0565b840191505092915050565b600060808201905061400a6000830187612bb1565b6140176020830186612bb1565b6140246040830185612f56565b81810360608301526140368184613fbc565b905095945050505050565b600081519050614050816129d2565b92915050565b60006020828403121561406c5761406b61299c565b5b600061407a84828501614041565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140bd82612b1c565b91506140c883612b1c565b9250826140d8576140d7614083565b5b828204905092915050565b60006140ee82612b1c565b91506140f983612b1c565b92508261410957614108614083565b5b828206905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061414a602083612a6c565b915061415582614114565b602082019050919050565b600060208201905081810360008301526141798161413d565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006141b6601c83612a6c565b91506141c182614180565b602082019050919050565b600060208201905081810360008301526141e5816141a9565b905091905056fe697066733a2f2f516d59534b76776e6751786153414b6e69557651386b6f5141614361613550696d736172333862505950356153762fa264697066735822122022b73fce02094d212154b42c5e3405b5dbe10f99d59adaa682ba8e0b06da514564736f6c634300080b00330000000000000000000000003c99f2a4b366d46bcf2277639a135a6d1288eceb

Deployed Bytecode

0x6080604052600436106101855760003560e01c806370a08231116100d1578063b88d4fde1161008a578063e086e5ec11610064578063e086e5ec1461055e578063e985e9c514610575578063f2fde38b146105b2578063f4f3b200146105db5761018c565b8063b88d4fde146104cf578063c87b56dd146104f8578063cc17a5bf146105355761018c565b806370a08231146103e5578063715018a6146104225780638456cb59146104395780638da5cb5b1461045057806395d89b411461047b578063a22cb465146104a65761018c565b80633f44f32c1161013e57806342966c681161011857806342966c681461032b5780635c975abb146103545780636352211e1461037f57806363ac2a4c146103bc5761018c565b80633f44f32c146102c25780633f4ba83a146102eb57806342842e0e146103025761018c565b806301ffc9a71461018e57806306fdde03146101cb578063081812fc146101f6578063095ea7b314610233578063150b7a021461025c57806323b872dd146102995761018c565b3661018c57005b005b34801561019a57600080fd5b506101b560048036038101906101b091906129fe565b610604565b6040516101c29190612a46565b60405180910390f35b3480156101d757600080fd5b506101e06106e6565b6040516101ed9190612afa565b60405180910390f35b34801561020257600080fd5b5061021d60048036038101906102189190612b52565b610778565b60405161022a9190612bc0565b60405180910390f35b34801561023f57600080fd5b5061025a60048036038101906102559190612c07565b6107fd565b005b34801561026857600080fd5b50610283600480360381019061027e9190612d7c565b610915565b6040516102909190612e0e565b60405180910390f35b3480156102a557600080fd5b506102c060048036038101906102bb9190612e29565b610a4c565b005b3480156102ce57600080fd5b506102e960048036038101906102e49190612b52565b610aac565b005b3480156102f757600080fd5b50610300610d65565b005b34801561030e57600080fd5b5061032960048036038101906103249190612e29565b610deb565b005b34801561033757600080fd5b50610352600480360381019061034d9190612b52565b610e0b565b005b34801561036057600080fd5b50610369610e67565b6040516103769190612a46565b60405180910390f35b34801561038b57600080fd5b506103a660048036038101906103a19190612b52565b610e7e565b6040516103b39190612bc0565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190612edc565b610f30565b005b3480156103f157600080fd5b5061040c60048036038101906104079190612f29565b610f8a565b6040516104199190612f65565b60405180910390f35b34801561042e57600080fd5b50610437611042565b005b34801561044557600080fd5b5061044e6110ca565b005b34801561045c57600080fd5b50610465611150565b6040516104729190612bc0565b60405180910390f35b34801561048757600080fd5b5061049061117a565b60405161049d9190612afa565b60405180910390f35b3480156104b257600080fd5b506104cd60048036038101906104c89190612fac565b61120c565b005b3480156104db57600080fd5b506104f660048036038101906104f19190612d7c565b611222565b005b34801561050457600080fd5b5061051f600480360381019061051a9190612b52565b611284565b60405161052c9190612afa565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190612edc565b6112b5565b005b34801561056a57600080fd5b50610573611383565b005b34801561058157600080fd5b5061059c60048036038101906105979190612fec565b6114b5565b6040516105a99190612a46565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190612f29565b611549565b005b3480156105e757600080fd5b5061060260048036038101906105fd9190612f29565b611641565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106cf57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106df57506106de82611803565b5b9050919050565b6060600080546106f59061305b565b80601f01602080910402602001604051908101604052809291908181526020018280546107219061305b565b801561076e5780601f106107435761010080835404028352916020019161076e565b820191906000526020600020905b81548152906001019060200180831161075157829003601f168201915b5050505050905090565b60006107838261186d565b6107c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b9906130ff565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061080882610e7e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087090613191565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108986118d9565b73ffffffffffffffffffffffffffffffffffffffff1614806108c757506108c6816108c16118d9565b6114b5565b5b610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd90613223565b60405180910390fd5b61091083836118e1565b505050565b60007f0000000000000000000000003c99f2a4b366d46bcf2277639a135a6d1288eceb73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061099c57503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6109db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d2906132b5565b60405180910390fd5b60007f0000000000000000000000003c99f2a4b366d46bcf2277639a135a6d1288eceb73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16149050610a3985828661199a565b63150b7a0260e01b915050949350505050565b610a5d610a576118d9565b82611b0c565b610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9390613347565b60405180910390fd5b610aa7838383611bea565b505050565b610ab46118d9565b73ffffffffffffffffffffffffffffffffffffffff16610ad2611150565b73ffffffffffffffffffffffffffffffffffffffff1614610b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1f906133b3565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000003c99f2a4b366d46bcf2277639a135a6d1288eceb73ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610b989190612f65565b602060405180830381865afa158015610bb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd991906133e8565b73ffffffffffffffffffffffffffffffffffffffff161415610d2757610bfe8161186d565b8015610c3d57503073ffffffffffffffffffffffffffffffffffffffff16610c2582610e7e565b73ffffffffffffffffffffffffffffffffffffffff16145b15610c9657610c6430610c4e611150565b8360405180602001604052806000815250611e46565b807f5b8cd8f3a67af1dee11ad4321a05f79a76cc7ea517810fc56d6d96c1e60d368660405160405180910390a2610d22565b610c9f8161186d565b610ce657610cb4610cae611150565b82611ea2565b807f5b8cd8f3a67af1dee11ad4321a05f79a76cc7ea517810fc56d6d96c1e60d368660405160405180910390a2610d21565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890613487565b60405180910390fd5b5b610d62565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5990613519565b60405180910390fd5b50565b610d6d6118d9565b73ffffffffffffffffffffffffffffffffffffffff16610d8b611150565b73ffffffffffffffffffffffffffffffffffffffff1614610de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd8906133b3565b60405180910390fd5b610de9611ec0565b565b610e0683838360405180602001604052806000815250611222565b505050565b610e1c610e166118d9565b82611b0c565b610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e52906135ab565b60405180910390fd5b610e6481611f62565b50565b6000600660009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e9061363d565b60405180910390fd5b80915050919050565b60005b82829050811015610f8557610f723330858585818110610f5657610f5561365d565b5b9050602002013560405180602001604052806000815250611e46565b8080610f7d906136bb565b915050610f33565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff290613776565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61104a6118d9565b73ffffffffffffffffffffffffffffffffffffffff16611068611150565b73ffffffffffffffffffffffffffffffffffffffff16146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b5906133b3565b60405180910390fd5b6110c86000612073565b565b6110d26118d9565b73ffffffffffffffffffffffffffffffffffffffff166110f0611150565b73ffffffffffffffffffffffffffffffffffffffff1614611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113d906133b3565b60405180910390fd5b61114e612139565b565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546111899061305b565b80601f01602080910402602001604051908101604052809291908181526020018280546111b59061305b565b80156112025780601f106111d757610100808354040283529160200191611202565b820191906000526020600020905b8154815290600101906020018083116111e557829003601f168201915b5050505050905090565b61121e6112176118d9565b83836121dc565b5050565b61123361122d6118d9565b83611b0c565b611272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126990613347565b60405180910390fd5b61127e84848484611e46565b50505050565b606061128f82612349565b60405160200161129f919061381e565b6040516020818303038152906040529050919050565b60005b8282905081101561137e577f0000000000000000000000003c99f2a4b366d46bcf2277639a135a6d1288eceb73ffffffffffffffffffffffffffffffffffffffff166342842e0e33308686868181106113145761131361365d565b5b905060200201356040518463ffffffff1660e01b815260040161133993929190613840565b600060405180830381600087803b15801561135357600080fd5b505af1158015611367573d6000803e3d6000fd5b505050508080611376906136bb565b9150506112b8565b505050565b61138b6118d9565b73ffffffffffffffffffffffffffffffffffffffff166113a9611150565b73ffffffffffffffffffffffffffffffffffffffff16146113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f6906133b3565b60405180910390fd5b6000611409611150565b73ffffffffffffffffffffffffffffffffffffffff164760405161142c906138a8565b60006040518083038185875af1925050503d8060008114611469576040519150601f19603f3d011682016040523d82523d6000602084013e61146e565b606091505b50509050806114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990613909565b60405180910390fd5b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115516118d9565b73ffffffffffffffffffffffffffffffffffffffff1661156f611150565b73ffffffffffffffffffffffffffffffffffffffff16146115c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bc906133b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c9061399b565b60405180910390fd5b61163e81612073565b50565b6116496118d9565b73ffffffffffffffffffffffffffffffffffffffff16611667611150565b73ffffffffffffffffffffffffffffffffffffffff16146116bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b4906133b3565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6116e3611150565b8473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161171c9190612bc0565b602060405180830381865afa158015611739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175d91906139d0565b6040518363ffffffff1660e01b815260040161177a9291906139fd565b6020604051808303816000875af1158015611799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bd9190613a3b565b9050806117ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f690613ab4565b60405180910390fd5b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661195483610e7e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b8115611a4a576119a98161186d565b80156119e857503073ffffffffffffffffffffffffffffffffffffffff166119d082610e7e565b73ffffffffffffffffffffffffffffffffffffffff16145b15611a0d57611a0830848360405180602001604052806000815250611e46565b611a18565b611a178382611ea2565b5b807f5b8cd8f3a67af1dee11ad4321a05f79a76cc7ea517810fc56d6d96c1e60d368660405160405180910390a2611b07565b7f0000000000000000000000003c99f2a4b366d46bcf2277639a135a6d1288eceb73ffffffffffffffffffffffffffffffffffffffff166342842e0e3085846040518463ffffffff1660e01b8152600401611aa793929190613840565b600060405180830381600087803b158015611ac157600080fd5b505af1158015611ad5573d6000803e3d6000fd5b50505050807fbeaa92c6354c6dcf375d2c514352b2c11bc865784722e5dd9b267e606eb5fc5f60405160405180910390a25b505050565b6000611b178261186d565b611b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4d90613b46565b60405180910390fd5b6000611b6183610e7e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611bd057508373ffffffffffffffffffffffffffffffffffffffff16611bb884610778565b73ffffffffffffffffffffffffffffffffffffffff16145b80611be15750611be081856114b5565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611c0a82610e7e565b73ffffffffffffffffffffffffffffffffffffffff1614611c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5790613bd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc790613c6a565b60405180910390fd5b611cdb8383836123f0565b611ce66000826118e1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d369190613c8a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d8d9190613cbe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611e51848484611bea565b611e5d84848484612448565b611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9390613d86565b60405180910390fd5b50505050565b611ebc8282604051806020016040528060008152506125d0565b5050565b611ec8610e67565b611f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efe90613df2565b60405180910390fd5b6000600660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611f4b6118d9565b604051611f589190612bc0565b60405180910390a1565b6000611f6d82610e7e565b9050611f7b816000846123f0565b611f866000836118e1565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fd69190613c8a565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600660019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612141610e67565b15612181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217890613e5e565b60405180910390fd5b6001600660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121c56118d9565b6040516121d29190612bc0565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561224b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224290613eca565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161233c9190612a46565b60405180910390a3505050565b60606123548261186d565b612393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238a90613f5c565b60405180910390fd5b600061239d61262b565b905060008151116123bd57604051806020016040528060008152506123e8565b806123c78461264b565b6040516020016123d8929190613f7c565b6040516020818303038152906040525b915050919050565b6123f8610e67565b15612438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242f90613e5e565b60405180910390fd5b6124438383836127ac565b505050565b60006124698473ffffffffffffffffffffffffffffffffffffffff166127b1565b156125c3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124926118d9565b8786866040518563ffffffff1660e01b81526004016124b49493929190613ff5565b6020604051808303816000875af19250505080156124f057506040513d601f19601f820116820180604052508101906124ed9190614056565b60015b612573573d8060008114612520576040519150601f19603f3d011682016040523d82523d6000602084013e612525565b606091505b5060008151141561256b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256290613d86565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125c8565b600190505b949350505050565b6125da83836127c4565b6125e76000848484612448565b612626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261d90613d86565b60405180910390fd5b505050565b60606040518060600160405280603681526020016141ed60369139905090565b60606000821415612693576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127a7565b600082905060005b600082146126c55780806126ae906136bb565b915050600a826126be91906140b2565b915061269b565b60008167ffffffffffffffff8111156126e1576126e0612c51565b5b6040519080825280601f01601f1916602001820160405280156127135781602001600182028036833780820191505090505b5090505b600085146127a05760018261272c9190613c8a565b9150600a8561273b91906140e3565b60306127479190613cbe565b60f81b81838151811061275d5761275c61365d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561279991906140b2565b9450612717565b8093505050505b919050565b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282b90614160565b60405180910390fd5b61283d8161186d565b1561287d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612874906141cc565b60405180910390fd5b612889600083836123f0565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128d99190613cbe565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6129db816129a6565b81146129e657600080fd5b50565b6000813590506129f8816129d2565b92915050565b600060208284031215612a1457612a1361299c565b5b6000612a22848285016129e9565b91505092915050565b60008115159050919050565b612a4081612a2b565b82525050565b6000602082019050612a5b6000830184612a37565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a9b578082015181840152602081019050612a80565b83811115612aaa576000848401525b50505050565b6000601f19601f8301169050919050565b6000612acc82612a61565b612ad68185612a6c565b9350612ae6818560208601612a7d565b612aef81612ab0565b840191505092915050565b60006020820190508181036000830152612b148184612ac1565b905092915050565b6000819050919050565b612b2f81612b1c565b8114612b3a57600080fd5b50565b600081359050612b4c81612b26565b92915050565b600060208284031215612b6857612b6761299c565b5b6000612b7684828501612b3d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612baa82612b7f565b9050919050565b612bba81612b9f565b82525050565b6000602082019050612bd56000830184612bb1565b92915050565b612be481612b9f565b8114612bef57600080fd5b50565b600081359050612c0181612bdb565b92915050565b60008060408385031215612c1e57612c1d61299c565b5b6000612c2c85828601612bf2565b9250506020612c3d85828601612b3d565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612c8982612ab0565b810181811067ffffffffffffffff82111715612ca857612ca7612c51565b5b80604052505050565b6000612cbb612992565b9050612cc78282612c80565b919050565b600067ffffffffffffffff821115612ce757612ce6612c51565b5b612cf082612ab0565b9050602081019050919050565b82818337600083830152505050565b6000612d1f612d1a84612ccc565b612cb1565b905082815260208101848484011115612d3b57612d3a612c4c565b5b612d46848285612cfd565b509392505050565b600082601f830112612d6357612d62612c47565b5b8135612d73848260208601612d0c565b91505092915050565b60008060008060808587031215612d9657612d9561299c565b5b6000612da487828801612bf2565b9450506020612db587828801612bf2565b9350506040612dc687828801612b3d565b925050606085013567ffffffffffffffff811115612de757612de66129a1565b5b612df387828801612d4e565b91505092959194509250565b612e08816129a6565b82525050565b6000602082019050612e236000830184612dff565b92915050565b600080600060608486031215612e4257612e4161299c565b5b6000612e5086828701612bf2565b9350506020612e6186828701612bf2565b9250506040612e7286828701612b3d565b9150509250925092565b600080fd5b600080fd5b60008083601f840112612e9c57612e9b612c47565b5b8235905067ffffffffffffffff811115612eb957612eb8612e7c565b5b602083019150836020820283011115612ed557612ed4612e81565b5b9250929050565b60008060208385031215612ef357612ef261299c565b5b600083013567ffffffffffffffff811115612f1157612f106129a1565b5b612f1d85828601612e86565b92509250509250929050565b600060208284031215612f3f57612f3e61299c565b5b6000612f4d84828501612bf2565b91505092915050565b612f5f81612b1c565b82525050565b6000602082019050612f7a6000830184612f56565b92915050565b612f8981612a2b565b8114612f9457600080fd5b50565b600081359050612fa681612f80565b92915050565b60008060408385031215612fc357612fc261299c565b5b6000612fd185828601612bf2565b9250506020612fe285828601612f97565b9150509250929050565b600080604083850312156130035761300261299c565b5b600061301185828601612bf2565b925050602061302285828601612bf2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061307357607f821691505b602082108114156130875761308661302c565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006130e9602c83612a6c565b91506130f48261308d565b604082019050919050565b60006020820190508181036000830152613118816130dc565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061317b602183612a6c565b91506131868261311f565b604082019050919050565b600060208201905081810360008301526131aa8161316e565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061320d603883612a6c565b9150613218826131b1565b604082019050919050565b6000602082019050818103600083015261323c81613200565b9050919050565b7f6d7573742062652046726f7374794e4654206f72205772617070656446726f7360008201527f7479000000000000000000000000000000000000000000000000000000000000602082015250565b600061329f602283612a6c565b91506132aa82613243565b604082019050919050565b600060208201905081810360008301526132ce81613292565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613331603183612a6c565b915061333c826132d5565b604082019050919050565b6000602082019050818103600083015261336081613324565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061339d602083612a6c565b91506133a882613367565b602082019050919050565b600060208201905081810360008301526133cc81613390565b9050919050565b6000815190506133e281612bdb565b92915050565b6000602082840312156133fe576133fd61299c565b5b600061340c848285016133d3565b91505092915050565b7f577261707065642046726f737479206d696e74656420616e642064697374726960008201527f627574656420616c726561647900000000000000000000000000000000000000602082015250565b6000613471602d83612a6c565b915061347c82613415565b604082019050919050565b600060208201905081810360008301526134a081613464565b9050919050565b7f46726f737469652046726f737479206973206e6f74206c6f636b656420696e2060008201527f636f6e7472616374000000000000000000000000000000000000000000000000602082015250565b6000613503602883612a6c565b915061350e826134a7565b604082019050919050565b60006020820190508181036000830152613532816134f6565b9050919050565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b6000613595603083612a6c565b91506135a082613539565b604082019050919050565b600060208201905081810360008301526135c481613588565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613627602983612a6c565b9150613632826135cb565b604082019050919050565b600060208201905081810360008301526136568161361a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136c682612b1c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136f9576136f861368c565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613760602a83612a6c565b915061376b82613704565b604082019050919050565b6000602082019050818103600083015261378f81613753565b9050919050565b600081905092915050565b60006137ac82612a61565b6137b68185613796565b93506137c6818560208601612a7d565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613808600583613796565b9150613813826137d2565b600582019050919050565b600061382a82846137a1565b9150613835826137fb565b915081905092915050565b60006060820190506138556000830186612bb1565b6138626020830185612bb1565b61386f6040830184612f56565b949350505050565b600081905092915050565b50565b6000613892600083613877565b915061389d82613882565b600082019050919050565b60006138b382613885565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006138f3601083612a6c565b91506138fe826138bd565b602082019050919050565b60006020820190508181036000830152613922816138e6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613985602683612a6c565b915061399082613929565b604082019050919050565b600060208201905081810360008301526139b481613978565b9050919050565b6000815190506139ca81612b26565b92915050565b6000602082840312156139e6576139e561299c565b5b60006139f4848285016139bb565b91505092915050565b6000604082019050613a126000830185612bb1565b613a1f6020830184612f56565b9392505050565b600081519050613a3581612f80565b92915050565b600060208284031215613a5157613a5061299c565b5b6000613a5f84828501613a26565b91505092915050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000613a9e600f83612a6c565b9150613aa982613a68565b602082019050919050565b60006020820190508181036000830152613acd81613a91565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613b30602c83612a6c565b9150613b3b82613ad4565b604082019050919050565b60006020820190508181036000830152613b5f81613b23565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000613bc2602983612a6c565b9150613bcd82613b66565b604082019050919050565b60006020820190508181036000830152613bf181613bb5565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613c54602483612a6c565b9150613c5f82613bf8565b604082019050919050565b60006020820190508181036000830152613c8381613c47565b9050919050565b6000613c9582612b1c565b9150613ca083612b1c565b925082821015613cb357613cb261368c565b5b828203905092915050565b6000613cc982612b1c565b9150613cd483612b1c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d0957613d0861368c565b5b828201905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613d70603283612a6c565b9150613d7b82613d14565b604082019050919050565b60006020820190508181036000830152613d9f81613d63565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613ddc601483612a6c565b9150613de782613da6565b602082019050919050565b60006020820190508181036000830152613e0b81613dcf565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613e48601083612a6c565b9150613e5382613e12565b602082019050919050565b60006020820190508181036000830152613e7781613e3b565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613eb4601983612a6c565b9150613ebf82613e7e565b602082019050919050565b60006020820190508181036000830152613ee381613ea7565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613f46602f83612a6c565b9150613f5182613eea565b604082019050919050565b60006020820190508181036000830152613f7581613f39565b9050919050565b6000613f8882856137a1565b9150613f9482846137a1565b91508190509392505050565b600081519050919050565b600082825260208201905092915050565b6000613fc782613fa0565b613fd18185613fab565b9350613fe1818560208601612a7d565b613fea81612ab0565b840191505092915050565b600060808201905061400a6000830187612bb1565b6140176020830186612bb1565b6140246040830185612f56565b81810360608301526140368184613fbc565b905095945050505050565b600081519050614050816129d2565b92915050565b60006020828403121561406c5761406b61299c565b5b600061407a84828501614041565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140bd82612b1c565b91506140c883612b1c565b9250826140d8576140d7614083565b5b828204905092915050565b60006140ee82612b1c565b91506140f983612b1c565b92508261410957614108614083565b5b828206905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061414a602083612a6c565b915061415582614114565b602082019050919050565b600060208201905081810360008301526141798161413d565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006141b6601c83612a6c565b91506141c182614180565b602082019050919050565b600060208201905081810360008301526141e5816141a9565b905091905056fe697066733a2f2f516d59534b76776e6751786153414b6e69557651386b6f5141614361613550696d736172333862505950356153762fa264697066735822122022b73fce02094d212154b42c5e3405b5dbe10f99d59adaa682ba8e0b06da514564736f6c634300080b0033

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

0000000000000000000000003c99f2a4b366d46bcf2277639a135a6d1288eceb

-----Decoded View---------------
Arg [0] : frostiesNFTContractAddress_ (address): 0x3C99F2A4b366D46bcf2277639A135A6D1288EcEB

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000003c99f2a4b366d46bcf2277639a135a6d1288eceb


Deployed Bytecode Sourcemap

42378:4247:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28956:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29901:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31460:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30983:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44414:539;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32210:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45890:732;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43184:59;;;;;;;;;;;;;:::i;:::-;;32620:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41932:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9575:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29595:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43548:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29325:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7626:103;;;;;;;;;;;;;:::i;:::-;;43123:55;;;;;;;;;;;;;:::i;:::-;;6975:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30070:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31753:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32876:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42936:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43302:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45219:163;;;;;;;;;;;;;:::i;:::-;;31979:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7884:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45388:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28956:305;29058:4;29110:25;29095:40;;;:11;:40;;;;:105;;;;29167:33;29152:48;;;:11;:48;;;;29095:105;:158;;;;29217:36;29241:11;29217:23;:36::i;:::-;29095:158;29075:178;;28956:305;;;:::o;29901:100::-;29955:13;29988:5;29981:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29901:100;:::o;31460:221::-;31536:7;31564:16;31572:7;31564;:16::i;:::-;31556:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31649:15;:24;31665:7;31649:24;;;;;;;;;;;;;;;;;;;;;31642:31;;31460:221;;;:::o;30983:411::-;31064:13;31080:23;31095:7;31080:14;:23::i;:::-;31064:39;;31128:5;31122:11;;:2;:11;;;;31114:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31222:5;31206:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31231:37;31248:5;31255:12;:10;:12::i;:::-;31231:16;:37::i;:::-;31206:62;31184:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;31365:21;31374:2;31378:7;31365:8;:21::i;:::-;31053:341;30983:411;;:::o;44414:539::-;44564:6;44704:11;44682:34;;:10;:34;;;:65;;;;44742:4;44720:27;;:10;:27;;;44682:65;44666:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;44808:15;44848:11;44826:34;;:10;:34;;;44808:52;;44867:34;44873:5;44880:10;44892:8;44867:5;:34::i;:::-;44917:30;;;44910:37;;;44414:539;;;;;;:::o;32210:339::-;32405:41;32424:12;:10;:12::i;:::-;32438:7;32405:18;:41::i;:::-;32397:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32513:28;32523:4;32529:2;32533:7;32513:9;:28::i;:::-;32210:339;;;:::o;45890:732::-;7206:12;:10;:12::i;:::-;7195:23;;:7;:5;:7::i;:::-;:23;;;7187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46009:4:::1;45968:46;;:11;:19;;;45988:8;45968:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;;45964:653;;;46073:17;46081:8;46073:7;:17::i;:::-;:55;;;;;46123:4;46094:34;;:17;46102:8;46094:7;:17::i;:::-;:34;;;46073:55;46069:468;;;46197:51;46219:4;46226:7;:5;:7::i;:::-;46235:8;46197:51;;;;;;;;;;;::::0;:13:::1;:51::i;:::-;46272:8;46264:17;;;;;;;;;;46069:468;;;46302:17;46310:8;46302:7;:17::i;:::-;46297:240;;46384:28;46394:7;:5;:7::i;:::-;46403:8;46384:9;:28::i;:::-;46436:8;46428:17;;;;;;;;;;46297:240;;;46472:55;;;;;;;;;;:::i;:::-;;;;;;;;46297:240;46069:468;45964:653;;;46559:50;;;;;;;;;;:::i;:::-;;;;;;;;45964:653;45890:732:::0;:::o;43184:59::-;7206:12;:10;:12::i;:::-;7195:23;;:7;:5;:7::i;:::-;:23;;;7187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43227:10:::1;:8;:10::i;:::-;43184:59::o:0;32620:185::-;32758:39;32775:4;32781:2;32785:7;32758:39;;;;;;;;;;;;:16;:39::i;:::-;32620:185;;;:::o;41932:245::-;42050:41;42069:12;:10;:12::i;:::-;42083:7;42050:18;:41::i;:::-;42042:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;42155:14;42161:7;42155:5;:14::i;:::-;41932:245;:::o;9575:86::-;9622:4;9646:7;;;;;;;;;;;9639:14;;9575:86;:::o;29595:239::-;29667:7;29687:13;29703:7;:16;29711:7;29703:16;;;;;;;;;;;;;;;;;;;;;29687:32;;29755:1;29738:19;;:5;:19;;;;29730:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29821:5;29814:12;;;29595:239;;;:::o;43548:189::-;43615:9;43610:122;43634:9;;:16;;43630:1;:20;43610:122;;;43666:58;43680:10;43700:4;43707:9;;43717:1;43707:12;;;;;;;:::i;:::-;;;;;;;;43666:58;;;;;;;;;;;;:13;:58::i;:::-;43652:3;;;;;:::i;:::-;;;;43610:122;;;;43548:189;;:::o;29325:208::-;29397:7;29442:1;29425:19;;:5;:19;;;;29417:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29509:9;:16;29519:5;29509:16;;;;;;;;;;;;;;;;29502:23;;29325:208;;;:::o;7626:103::-;7206:12;:10;:12::i;:::-;7195:23;;:7;:5;:7::i;:::-;:23;;;7187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7691:30:::1;7718:1;7691:18;:30::i;:::-;7626:103::o:0;43123:55::-;7206:12;:10;:12::i;:::-;7195:23;;:7;:5;:7::i;:::-;:23;;;7187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43164:8:::1;:6;:8::i;:::-;43123:55::o:0;6975:87::-;7021:7;7048:6;;;;;;;;;;;7041:13;;6975:87;:::o;30070:104::-;30126:13;30159:7;30152:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30070:104;:::o;31753:155::-;31848:52;31867:12;:10;:12::i;:::-;31881:8;31891;31848:18;:52::i;:::-;31753:155;;:::o;32876:328::-;33051:41;33070:12;:10;:12::i;:::-;33084:7;33051:18;:41::i;:::-;33043:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33157:39;33171:4;33177:2;33181:7;33190:5;33157:13;:39::i;:::-;32876:328;;;;:::o;42936:181::-;43021:13;43077:23;43092:7;43077:14;:23::i;:::-;43060:50;;;;;;;;:::i;:::-;;;;;;;;;;;;;43046:65;;42936:181;;;:::o;43302:198::-;43367:9;43362:133;43386:9;;:16;;43382:1;:20;43362:133;;;43418:11;:28;;;43447:10;43467:4;43474:9;;43484:1;43474:12;;;;;;;:::i;:::-;;;;;;;;43418:69;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43404:3;;;;;:::i;:::-;;;;43362:133;;;;43302:198;;:::o;45219:163::-;7206:12;:10;:12::i;:::-;7195:23;;:7;:5;:7::i;:::-;:23;;;7187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45269:12:::1;45287:7;:5;:7::i;:::-;:12;;45307:21;45287:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45268:65;;;45348:7;45340:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;45261:121;45219:163::o:0;31979:164::-;32076:4;32100:18;:25;32119:5;32100:25;;;;;;;;;;;;;;;:35;32126:8;32100:35;;;;;;;;;;;;;;;;;;;;;;;;;32093:42;;31979:164;;;;:::o;7884:201::-;7206:12;:10;:12::i;:::-;7195:23;;:7;:5;:7::i;:::-;:23;;;7187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7993:1:::1;7973:22;;:8;:22;;;;7965:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8049:28;8068:8;8049:18;:28::i;:::-;7884:201:::0;:::o;45388:219::-;7206:12;:10;:12::i;:::-;7195:23;;:7;:5;:7::i;:::-;:23;;;7187:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45452:12:::1;45474:5;45467:22;;;45498:7;:5;:7::i;:::-;45521:5;45514:23;;;45546:4;45514:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45467:92;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45452:107;;45574:7;45566:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;45445:162;45388:219:::0;:::o;21725:157::-;21810:4;21849:25;21834:40;;;:11;:40;;;;21827:47;;21725:157;;;:::o;34714:127::-;34779:4;34831:1;34803:30;;:7;:16;34811:7;34803:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34796:37;;34714:127;;;:::o;5699:98::-;5752:7;5779:10;5772:17;;5699:98;:::o;38696:174::-;38798:2;38771:15;:24;38787:7;38771:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38854:7;38850:2;38816:46;;38825:23;38840:7;38825:14;:23::i;:::-;38816:46;;;;;;;;;;;;38696:174;;:::o;43743:575::-;43847:11;43843:470;;;43982:17;43990:8;43982:7;:17::i;:::-;:55;;;;;44032:4;44003:34;;:17;44011:8;44003:7;:17::i;:::-;:34;;;43982:55;43978:182;;;44050:48;44072:4;44079;44085:8;44050:48;;;;;;;;;;;;:13;:48::i;:::-;43978:182;;;44125:25;44135:4;44141:8;44125:9;:25::i;:::-;43978:182;44181:8;44173:17;;;;;;;;;;43843:470;;;44213:11;:28;;;44250:4;44257;44263:8;44213:59;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44296:8;44286:19;;;;;;;;;;43843:470;43743:575;;;:::o;35008:348::-;35101:4;35126:16;35134:7;35126;:16::i;:::-;35118:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35202:13;35218:23;35233:7;35218:14;:23::i;:::-;35202:39;;35271:5;35260:16;;:7;:16;;;:51;;;;35304:7;35280:31;;:20;35292:7;35280:11;:20::i;:::-;:31;;;35260:51;:87;;;;35315:32;35332:5;35339:7;35315:16;:32::i;:::-;35260:87;35252:96;;;35008:348;;;;:::o;38000:578::-;38159:4;38132:31;;:23;38147:7;38132:14;:23::i;:::-;:31;;;38124:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;38242:1;38228:16;;:2;:16;;;;38220:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38298:39;38319:4;38325:2;38329:7;38298:20;:39::i;:::-;38402:29;38419:1;38423:7;38402:8;:29::i;:::-;38463:1;38444:9;:15;38454:4;38444:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38492:1;38475:9;:13;38485:2;38475:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38523:2;38504:7;:16;38512:7;38504:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38562:7;38558:2;38543:27;;38552:4;38543:27;;;;;;;;;;;;38000:578;;;:::o;34086:315::-;34243:28;34253:4;34259:2;34263:7;34243:9;:28::i;:::-;34290:48;34313:4;34319:2;34323:7;34332:5;34290:22;:48::i;:::-;34282:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;34086:315;;;;:::o;35698:110::-;35774:26;35784:2;35788:7;35774:26;;;;;;;;;;;;:9;:26::i;:::-;35698:110;;:::o;10634:120::-;10178:8;:6;:8::i;:::-;10170:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;10703:5:::1;10693:7;;:15;;;;;;;;;;;;;;;;;;10724:22;10733:12;:10;:12::i;:::-;10724:22;;;;;;:::i;:::-;;;;;;;;10634:120::o:0;37303:360::-;37363:13;37379:23;37394:7;37379:14;:23::i;:::-;37363:39;;37415:48;37436:5;37451:1;37455:7;37415:20;:48::i;:::-;37504:29;37521:1;37525:7;37504:8;:29::i;:::-;37566:1;37546:9;:16;37556:5;37546:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;37585:7;:16;37593:7;37585:16;;;;;;;;;;;;37578:23;;;;;;;;;;;37647:7;37643:1;37619:36;;37628:5;37619:36;;;;;;;;;;;;37352:311;37303:360;:::o;8245:191::-;8319:16;8338:6;;;;;;;;;;;8319:25;;8364:8;8355:6;;:17;;;;;;;;;;;;;;;;;;8419:8;8388:40;;8409:8;8388:40;;;;;;;;;;;;8308:128;8245:191;:::o;10375:118::-;9901:8;:6;:8::i;:::-;9900:9;9892:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;10445:4:::1;10435:7;;:14;;;;;;;;;;;;;;;;;;10465:20;10472:12;:10;:12::i;:::-;10465:20;;;;;;:::i;:::-;;;;;;;;10375:118::o:0;39012:315::-;39167:8;39158:17;;:5;:17;;;;39150:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39254:8;39216:18;:25;39235:5;39216:25;;;;;;;;;;;;;;;:35;39242:8;39216:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39300:8;39278:41;;39293:5;39278:41;;;39310:8;39278:41;;;;;;:::i;:::-;;;;;;;;39012:315;;;:::o;30245:334::-;30318:13;30352:16;30360:7;30352;:16::i;:::-;30344:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30433:21;30457:10;:8;:10::i;:::-;30433:34;;30509:1;30491:7;30485:21;:25;:86;;;;;;;;;;;;;;;;;30537:7;30546:18;:7;:16;:18::i;:::-;30520:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30485:86;30478:93;;;30245:334;;;:::o;44959:183::-;9901:8;:6;:8::i;:::-;9900:9;9892:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;45091:45:::1;45118:4;45124:2;45128:7;45091:26;:45::i;:::-;44959:183:::0;;;:::o;39892:799::-;40047:4;40068:15;:2;:13;;;:15::i;:::-;40064:620;;;40120:2;40104:36;;;40141:12;:10;:12::i;:::-;40155:4;40161:7;40170:5;40104:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40100:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40363:1;40346:6;:13;:18;40342:272;;;40389:60;;;;;;;;;;:::i;:::-;;;;;;;;40342:272;40564:6;40558:13;40549:6;40545:2;40541:15;40534:38;40100:529;40237:41;;;40227:51;;;:6;:51;;;;40220:58;;;;;40064:620;40668:4;40661:11;;39892:799;;;;;;;:::o;36035:321::-;36165:18;36171:2;36175:7;36165:5;:18::i;:::-;36216:54;36247:1;36251:2;36255:7;36264:5;36216:22;:54::i;:::-;36194:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;36035:321;;;:::o;42787:143::-;42839:13;42861:63;;;;;;;;;;;;;;;;;;;42787:143;:::o;3261:723::-;3317:13;3547:1;3538:5;:10;3534:53;;;3565:10;;;;;;;;;;;;;;;;;;;;;3534:53;3597:12;3612:5;3597:20;;3628:14;3653:78;3668:1;3660:4;:9;3653:78;;3686:8;;;;;:::i;:::-;;;;3717:2;3709:10;;;;;:::i;:::-;;;3653:78;;;3741:19;3773:6;3763:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3741:39;;3791:154;3807:1;3798:5;:10;3791:154;;3835:1;3825:11;;;;;:::i;:::-;;;3902:2;3894:5;:10;;;;:::i;:::-;3881:2;:24;;;;:::i;:::-;3868:39;;3851:6;3858;3851:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3931:2;3922:11;;;;;:::i;:::-;;;3791:154;;;3969:6;3955:21;;;;;3261:723;;;;:::o;41263:126::-;;;;:::o;11581:387::-;11641:4;11849:12;11916:7;11904:20;11896:28;;11959:1;11952:4;:8;11945:15;;;11581:387;;;:::o;36692:382::-;36786:1;36772:16;;:2;:16;;;;36764:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36845:16;36853:7;36845;:16::i;:::-;36844:17;36836:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36907:45;36936:1;36940:2;36944:7;36907:20;:45::i;:::-;36982:1;36965:9;:13;36975:2;36965:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37013:2;36994:7;:16;37002:7;36994:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37058:7;37054:2;37033:33;;37050:1;37033:33;;;;;;;;;;;;36692:382;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:117;5170:1;5167;5160:12;5184:180;5232:77;5229:1;5222:88;5329:4;5326:1;5319:15;5353:4;5350:1;5343:15;5370:281;5453:27;5475:4;5453:27;:::i;:::-;5445:6;5441:40;5583:6;5571:10;5568:22;5547:18;5535:10;5532:34;5529:62;5526:88;;;5594:18;;:::i;:::-;5526:88;5634:10;5630:2;5623:22;5413:238;5370:281;;:::o;5657:129::-;5691:6;5718:20;;:::i;:::-;5708:30;;5747:33;5775:4;5767:6;5747:33;:::i;:::-;5657:129;;;:::o;5792:307::-;5853:4;5943:18;5935:6;5932:30;5929:56;;;5965:18;;:::i;:::-;5929:56;6003:29;6025:6;6003:29;:::i;:::-;5995:37;;6087:4;6081;6077:15;6069:23;;5792:307;;;:::o;6105:154::-;6189:6;6184:3;6179;6166:30;6251:1;6242:6;6237:3;6233:16;6226:27;6105:154;;;:::o;6265:410::-;6342:5;6367:65;6383:48;6424:6;6383:48;:::i;:::-;6367:65;:::i;:::-;6358:74;;6455:6;6448:5;6441:21;6493:4;6486:5;6482:16;6531:3;6522:6;6517:3;6513:16;6510:25;6507:112;;;6538:79;;:::i;:::-;6507:112;6628:41;6662:6;6657:3;6652;6628:41;:::i;:::-;6348:327;6265:410;;;;;:::o;6694:338::-;6749:5;6798:3;6791:4;6783:6;6779:17;6775:27;6765:122;;6806:79;;:::i;:::-;6765:122;6923:6;6910:20;6948:78;7022:3;7014:6;7007:4;6999:6;6995:17;6948:78;:::i;:::-;6939:87;;6755:277;6694:338;;;;:::o;7038:943::-;7133:6;7141;7149;7157;7206:3;7194:9;7185:7;7181:23;7177:33;7174:120;;;7213:79;;:::i;:::-;7174:120;7333:1;7358:53;7403:7;7394:6;7383:9;7379:22;7358:53;:::i;:::-;7348:63;;7304:117;7460:2;7486:53;7531:7;7522:6;7511:9;7507:22;7486:53;:::i;:::-;7476:63;;7431:118;7588:2;7614:53;7659:7;7650:6;7639:9;7635:22;7614:53;:::i;:::-;7604:63;;7559:118;7744:2;7733:9;7729:18;7716:32;7775:18;7767:6;7764:30;7761:117;;;7797:79;;:::i;:::-;7761:117;7902:62;7956:7;7947:6;7936:9;7932:22;7902:62;:::i;:::-;7892:72;;7687:287;7038:943;;;;;;;:::o;7987:115::-;8072:23;8089:5;8072:23;:::i;:::-;8067:3;8060:36;7987:115;;:::o;8108:218::-;8199:4;8237:2;8226:9;8222:18;8214:26;;8250:69;8316:1;8305:9;8301:17;8292:6;8250:69;:::i;:::-;8108:218;;;;:::o;8332:619::-;8409:6;8417;8425;8474:2;8462:9;8453:7;8449:23;8445:32;8442:119;;;8480:79;;:::i;:::-;8442:119;8600:1;8625:53;8670:7;8661:6;8650:9;8646:22;8625:53;:::i;:::-;8615:63;;8571:117;8727:2;8753:53;8798:7;8789:6;8778:9;8774:22;8753:53;:::i;:::-;8743:63;;8698:118;8855:2;8881:53;8926:7;8917:6;8906:9;8902:22;8881:53;:::i;:::-;8871:63;;8826:118;8332:619;;;;;:::o;8957:117::-;9066:1;9063;9056:12;9080:117;9189:1;9186;9179:12;9220:568;9293:8;9303:6;9353:3;9346:4;9338:6;9334:17;9330:27;9320:122;;9361:79;;:::i;:::-;9320:122;9474:6;9461:20;9451:30;;9504:18;9496:6;9493:30;9490:117;;;9526:79;;:::i;:::-;9490:117;9640:4;9632:6;9628:17;9616:29;;9694:3;9686:4;9678:6;9674:17;9664:8;9660:32;9657:41;9654:128;;;9701:79;;:::i;:::-;9654:128;9220:568;;;;;:::o;9794:559::-;9880:6;9888;9937:2;9925:9;9916:7;9912:23;9908:32;9905:119;;;9943:79;;:::i;:::-;9905:119;10091:1;10080:9;10076:17;10063:31;10121:18;10113:6;10110:30;10107:117;;;10143:79;;:::i;:::-;10107:117;10256:80;10328:7;10319:6;10308:9;10304:22;10256:80;:::i;:::-;10238:98;;;;10034:312;9794:559;;;;;:::o;10359:329::-;10418:6;10467:2;10455:9;10446:7;10442:23;10438:32;10435:119;;;10473:79;;:::i;:::-;10435:119;10593:1;10618:53;10663:7;10654:6;10643:9;10639:22;10618:53;:::i;:::-;10608:63;;10564:117;10359:329;;;;:::o;10694:118::-;10781:24;10799:5;10781:24;:::i;:::-;10776:3;10769:37;10694:118;;:::o;10818:222::-;10911:4;10949:2;10938:9;10934:18;10926:26;;10962:71;11030:1;11019:9;11015:17;11006:6;10962:71;:::i;:::-;10818:222;;;;:::o;11046:116::-;11116:21;11131:5;11116:21;:::i;:::-;11109:5;11106:32;11096:60;;11152:1;11149;11142:12;11096:60;11046:116;:::o;11168:133::-;11211:5;11249:6;11236:20;11227:29;;11265:30;11289:5;11265:30;:::i;:::-;11168:133;;;;:::o;11307:468::-;11372:6;11380;11429:2;11417:9;11408:7;11404:23;11400:32;11397:119;;;11435:79;;:::i;:::-;11397:119;11555:1;11580:53;11625:7;11616:6;11605:9;11601:22;11580:53;:::i;:::-;11570:63;;11526:117;11682:2;11708:50;11750:7;11741:6;11730:9;11726:22;11708:50;:::i;:::-;11698:60;;11653:115;11307:468;;;;;:::o;11781:474::-;11849:6;11857;11906:2;11894:9;11885:7;11881:23;11877:32;11874:119;;;11912:79;;:::i;:::-;11874:119;12032:1;12057:53;12102:7;12093:6;12082:9;12078:22;12057:53;:::i;:::-;12047:63;;12003:117;12159:2;12185:53;12230:7;12221:6;12210:9;12206:22;12185:53;:::i;:::-;12175:63;;12130:118;11781:474;;;;;:::o;12261:180::-;12309:77;12306:1;12299:88;12406:4;12403:1;12396:15;12430:4;12427:1;12420:15;12447:320;12491:6;12528:1;12522:4;12518:12;12508:22;;12575:1;12569:4;12565:12;12596:18;12586:81;;12652:4;12644:6;12640:17;12630:27;;12586:81;12714:2;12706:6;12703:14;12683:18;12680:38;12677:84;;;12733:18;;:::i;:::-;12677:84;12498:269;12447:320;;;:::o;12773:231::-;12913:34;12909:1;12901:6;12897:14;12890:58;12982:14;12977:2;12969:6;12965:15;12958:39;12773:231;:::o;13010:366::-;13152:3;13173:67;13237:2;13232:3;13173:67;:::i;:::-;13166:74;;13249:93;13338:3;13249:93;:::i;:::-;13367:2;13362:3;13358:12;13351:19;;13010:366;;;:::o;13382:419::-;13548:4;13586:2;13575:9;13571:18;13563:26;;13635:9;13629:4;13625:20;13621:1;13610:9;13606:17;13599:47;13663:131;13789:4;13663:131;:::i;:::-;13655:139;;13382:419;;;:::o;13807:220::-;13947:34;13943:1;13935:6;13931:14;13924:58;14016:3;14011:2;14003:6;13999:15;13992:28;13807:220;:::o;14033:366::-;14175:3;14196:67;14260:2;14255:3;14196:67;:::i;:::-;14189:74;;14272:93;14361:3;14272:93;:::i;:::-;14390:2;14385:3;14381:12;14374:19;;14033:366;;;:::o;14405:419::-;14571:4;14609:2;14598:9;14594:18;14586:26;;14658:9;14652:4;14648:20;14644:1;14633:9;14629:17;14622:47;14686:131;14812:4;14686:131;:::i;:::-;14678:139;;14405:419;;;:::o;14830:243::-;14970:34;14966:1;14958:6;14954:14;14947:58;15039:26;15034:2;15026:6;15022:15;15015:51;14830:243;:::o;15079:366::-;15221:3;15242:67;15306:2;15301:3;15242:67;:::i;:::-;15235:74;;15318:93;15407:3;15318:93;:::i;:::-;15436:2;15431:3;15427:12;15420:19;;15079:366;;;:::o;15451:419::-;15617:4;15655:2;15644:9;15640:18;15632:26;;15704:9;15698:4;15694:20;15690:1;15679:9;15675:17;15668:47;15732:131;15858:4;15732:131;:::i;:::-;15724:139;;15451:419;;;:::o;15876:221::-;16016:34;16012:1;16004:6;16000:14;15993:58;16085:4;16080:2;16072:6;16068:15;16061:29;15876:221;:::o;16103:366::-;16245:3;16266:67;16330:2;16325:3;16266:67;:::i;:::-;16259:74;;16342:93;16431:3;16342:93;:::i;:::-;16460:2;16455:3;16451:12;16444:19;;16103:366;;;:::o;16475:419::-;16641:4;16679:2;16668:9;16664:18;16656:26;;16728:9;16722:4;16718:20;16714:1;16703:9;16699:17;16692:47;16756:131;16882:4;16756:131;:::i;:::-;16748:139;;16475:419;;;:::o;16900:236::-;17040:34;17036:1;17028:6;17024:14;17017:58;17109:19;17104:2;17096:6;17092:15;17085:44;16900:236;:::o;17142:366::-;17284:3;17305:67;17369:2;17364:3;17305:67;:::i;:::-;17298:74;;17381:93;17470:3;17381:93;:::i;:::-;17499:2;17494:3;17490:12;17483:19;;17142:366;;;:::o;17514:419::-;17680:4;17718:2;17707:9;17703:18;17695:26;;17767:9;17761:4;17757:20;17753:1;17742:9;17738:17;17731:47;17795:131;17921:4;17795:131;:::i;:::-;17787:139;;17514:419;;;:::o;17939:182::-;18079:34;18075:1;18067:6;18063:14;18056:58;17939:182;:::o;18127:366::-;18269:3;18290:67;18354:2;18349:3;18290:67;:::i;:::-;18283:74;;18366:93;18455:3;18366:93;:::i;:::-;18484:2;18479:3;18475:12;18468:19;;18127:366;;;:::o;18499:419::-;18665:4;18703:2;18692:9;18688:18;18680:26;;18752:9;18746:4;18742:20;18738:1;18727:9;18723:17;18716:47;18780:131;18906:4;18780:131;:::i;:::-;18772:139;;18499:419;;;:::o;18924:143::-;18981:5;19012:6;19006:13;18997:22;;19028:33;19055:5;19028:33;:::i;:::-;18924:143;;;;:::o;19073:351::-;19143:6;19192:2;19180:9;19171:7;19167:23;19163:32;19160:119;;;19198:79;;:::i;:::-;19160:119;19318:1;19343:64;19399:7;19390:6;19379:9;19375:22;19343:64;:::i;:::-;19333:74;;19289:128;19073:351;;;;:::o;19430:232::-;19570:34;19566:1;19558:6;19554:14;19547:58;19639:15;19634:2;19626:6;19622:15;19615:40;19430:232;:::o;19668:366::-;19810:3;19831:67;19895:2;19890:3;19831:67;:::i;:::-;19824:74;;19907:93;19996:3;19907:93;:::i;:::-;20025:2;20020:3;20016:12;20009:19;;19668:366;;;:::o;20040:419::-;20206:4;20244:2;20233:9;20229:18;20221:26;;20293:9;20287:4;20283:20;20279:1;20268:9;20264:17;20257:47;20321:131;20447:4;20321:131;:::i;:::-;20313:139;;20040:419;;;:::o;20465:227::-;20605:34;20601:1;20593:6;20589:14;20582:58;20674:10;20669:2;20661:6;20657:15;20650:35;20465:227;:::o;20698:366::-;20840:3;20861:67;20925:2;20920:3;20861:67;:::i;:::-;20854:74;;20937:93;21026:3;20937:93;:::i;:::-;21055:2;21050:3;21046:12;21039:19;;20698:366;;;:::o;21070:419::-;21236:4;21274:2;21263:9;21259:18;21251:26;;21323:9;21317:4;21313:20;21309:1;21298:9;21294:17;21287:47;21351:131;21477:4;21351:131;:::i;:::-;21343:139;;21070:419;;;:::o;21495:235::-;21635:34;21631:1;21623:6;21619:14;21612:58;21704:18;21699:2;21691:6;21687:15;21680:43;21495:235;:::o;21736:366::-;21878:3;21899:67;21963:2;21958:3;21899:67;:::i;:::-;21892:74;;21975:93;22064:3;21975:93;:::i;:::-;22093:2;22088:3;22084:12;22077:19;;21736:366;;;:::o;22108:419::-;22274:4;22312:2;22301:9;22297:18;22289:26;;22361:9;22355:4;22351:20;22347:1;22336:9;22332:17;22325:47;22389:131;22515:4;22389:131;:::i;:::-;22381:139;;22108:419;;;:::o;22533:228::-;22673:34;22669:1;22661:6;22657:14;22650:58;22742:11;22737:2;22729:6;22725:15;22718:36;22533:228;:::o;22767:366::-;22909:3;22930:67;22994:2;22989:3;22930:67;:::i;:::-;22923:74;;23006:93;23095:3;23006:93;:::i;:::-;23124:2;23119:3;23115:12;23108:19;;22767:366;;;:::o;23139:419::-;23305:4;23343:2;23332:9;23328:18;23320:26;;23392:9;23386:4;23382:20;23378:1;23367:9;23363:17;23356:47;23420:131;23546:4;23420:131;:::i;:::-;23412:139;;23139:419;;;:::o;23564:180::-;23612:77;23609:1;23602:88;23709:4;23706:1;23699:15;23733:4;23730:1;23723:15;23750:180;23798:77;23795:1;23788:88;23895:4;23892:1;23885:15;23919:4;23916:1;23909:15;23936:233;23975:3;23998:24;24016:5;23998:24;:::i;:::-;23989:33;;24044:66;24037:5;24034:77;24031:103;;;24114:18;;:::i;:::-;24031:103;24161:1;24154:5;24150:13;24143:20;;23936:233;;;:::o;24175:229::-;24315:34;24311:1;24303:6;24299:14;24292:58;24384:12;24379:2;24371:6;24367:15;24360:37;24175:229;:::o;24410:366::-;24552:3;24573:67;24637:2;24632:3;24573:67;:::i;:::-;24566:74;;24649:93;24738:3;24649:93;:::i;:::-;24767:2;24762:3;24758:12;24751:19;;24410:366;;;:::o;24782:419::-;24948:4;24986:2;24975:9;24971:18;24963:26;;25035:9;25029:4;25025:20;25021:1;25010:9;25006:17;24999:47;25063:131;25189:4;25063:131;:::i;:::-;25055:139;;24782:419;;;:::o;25207:148::-;25309:11;25346:3;25331:18;;25207:148;;;;:::o;25361:377::-;25467:3;25495:39;25528:5;25495:39;:::i;:::-;25550:89;25632:6;25627:3;25550:89;:::i;:::-;25543:96;;25648:52;25693:6;25688:3;25681:4;25674:5;25670:16;25648:52;:::i;:::-;25725:6;25720:3;25716:16;25709:23;;25471:267;25361:377;;;;:::o;25744:155::-;25884:7;25880:1;25872:6;25868:14;25861:31;25744:155;:::o;25905:400::-;26065:3;26086:84;26168:1;26163:3;26086:84;:::i;:::-;26079:91;;26179:93;26268:3;26179:93;:::i;:::-;26297:1;26292:3;26288:11;26281:18;;25905:400;;;:::o;26311:541::-;26544:3;26566:95;26657:3;26648:6;26566:95;:::i;:::-;26559:102;;26678:148;26822:3;26678:148;:::i;:::-;26671:155;;26843:3;26836:10;;26311:541;;;;:::o;26858:442::-;27007:4;27045:2;27034:9;27030:18;27022:26;;27058:71;27126:1;27115:9;27111:17;27102:6;27058:71;:::i;:::-;27139:72;27207:2;27196:9;27192:18;27183:6;27139:72;:::i;:::-;27221;27289:2;27278:9;27274:18;27265:6;27221:72;:::i;:::-;26858:442;;;;;;:::o;27306:147::-;27407:11;27444:3;27429:18;;27306:147;;;;:::o;27459:114::-;;:::o;27579:398::-;27738:3;27759:83;27840:1;27835:3;27759:83;:::i;:::-;27752:90;;27851:93;27940:3;27851:93;:::i;:::-;27969:1;27964:3;27960:11;27953:18;;27579:398;;;:::o;27983:379::-;28167:3;28189:147;28332:3;28189:147;:::i;:::-;28182:154;;28353:3;28346:10;;27983:379;;;:::o;28368:166::-;28508:18;28504:1;28496:6;28492:14;28485:42;28368:166;:::o;28540:366::-;28682:3;28703:67;28767:2;28762:3;28703:67;:::i;:::-;28696:74;;28779:93;28868:3;28779:93;:::i;:::-;28897:2;28892:3;28888:12;28881:19;;28540:366;;;:::o;28912:419::-;29078:4;29116:2;29105:9;29101:18;29093:26;;29165:9;29159:4;29155:20;29151:1;29140:9;29136:17;29129:47;29193:131;29319:4;29193:131;:::i;:::-;29185:139;;28912:419;;;:::o;29337:225::-;29477:34;29473:1;29465:6;29461:14;29454:58;29546:8;29541:2;29533:6;29529:15;29522:33;29337:225;:::o;29568:366::-;29710:3;29731:67;29795:2;29790:3;29731:67;:::i;:::-;29724:74;;29807:93;29896:3;29807:93;:::i;:::-;29925:2;29920:3;29916:12;29909:19;;29568:366;;;:::o;29940:419::-;30106:4;30144:2;30133:9;30129:18;30121:26;;30193:9;30187:4;30183:20;30179:1;30168:9;30164:17;30157:47;30221:131;30347:4;30221:131;:::i;:::-;30213:139;;29940:419;;;:::o;30365:143::-;30422:5;30453:6;30447:13;30438:22;;30469:33;30496:5;30469:33;:::i;:::-;30365:143;;;;:::o;30514:351::-;30584:6;30633:2;30621:9;30612:7;30608:23;30604:32;30601:119;;;30639:79;;:::i;:::-;30601:119;30759:1;30784:64;30840:7;30831:6;30820:9;30816:22;30784:64;:::i;:::-;30774:74;;30730:128;30514:351;;;;:::o;30871:332::-;30992:4;31030:2;31019:9;31015:18;31007:26;;31043:71;31111:1;31100:9;31096:17;31087:6;31043:71;:::i;:::-;31124:72;31192:2;31181:9;31177:18;31168:6;31124:72;:::i;:::-;30871:332;;;;;:::o;31209:137::-;31263:5;31294:6;31288:13;31279:22;;31310:30;31334:5;31310:30;:::i;:::-;31209:137;;;;:::o;31352:345::-;31419:6;31468:2;31456:9;31447:7;31443:23;31439:32;31436:119;;;31474:79;;:::i;:::-;31436:119;31594:1;31619:61;31672:7;31663:6;31652:9;31648:22;31619:61;:::i;:::-;31609:71;;31565:125;31352:345;;;;:::o;31703:165::-;31843:17;31839:1;31831:6;31827:14;31820:41;31703:165;:::o;31874:366::-;32016:3;32037:67;32101:2;32096:3;32037:67;:::i;:::-;32030:74;;32113:93;32202:3;32113:93;:::i;:::-;32231:2;32226:3;32222:12;32215:19;;31874:366;;;:::o;32246:419::-;32412:4;32450:2;32439:9;32435:18;32427:26;;32499:9;32493:4;32489:20;32485:1;32474:9;32470:17;32463:47;32527:131;32653:4;32527:131;:::i;:::-;32519:139;;32246:419;;;:::o;32671:231::-;32811:34;32807:1;32799:6;32795:14;32788:58;32880:14;32875:2;32867:6;32863:15;32856:39;32671:231;:::o;32908:366::-;33050:3;33071:67;33135:2;33130:3;33071:67;:::i;:::-;33064:74;;33147:93;33236:3;33147:93;:::i;:::-;33265:2;33260:3;33256:12;33249:19;;32908:366;;;:::o;33280:419::-;33446:4;33484:2;33473:9;33469:18;33461:26;;33533:9;33527:4;33523:20;33519:1;33508:9;33504:17;33497:47;33561:131;33687:4;33561:131;:::i;:::-;33553:139;;33280:419;;;:::o;33705:228::-;33845:34;33841:1;33833:6;33829:14;33822:58;33914:11;33909:2;33901:6;33897:15;33890:36;33705:228;:::o;33939:366::-;34081:3;34102:67;34166:2;34161:3;34102:67;:::i;:::-;34095:74;;34178:93;34267:3;34178:93;:::i;:::-;34296:2;34291:3;34287:12;34280:19;;33939:366;;;:::o;34311:419::-;34477:4;34515:2;34504:9;34500:18;34492:26;;34564:9;34558:4;34554:20;34550:1;34539:9;34535:17;34528:47;34592:131;34718:4;34592:131;:::i;:::-;34584:139;;34311:419;;;:::o;34736:223::-;34876:34;34872:1;34864:6;34860:14;34853:58;34945:6;34940:2;34932:6;34928:15;34921:31;34736:223;:::o;34965:366::-;35107:3;35128:67;35192:2;35187:3;35128:67;:::i;:::-;35121:74;;35204:93;35293:3;35204:93;:::i;:::-;35322:2;35317:3;35313:12;35306:19;;34965:366;;;:::o;35337:419::-;35503:4;35541:2;35530:9;35526:18;35518:26;;35590:9;35584:4;35580:20;35576:1;35565:9;35561:17;35554:47;35618:131;35744:4;35618:131;:::i;:::-;35610:139;;35337:419;;;:::o;35762:191::-;35802:4;35822:20;35840:1;35822:20;:::i;:::-;35817:25;;35856:20;35874:1;35856:20;:::i;:::-;35851:25;;35895:1;35892;35889:8;35886:34;;;35900:18;;:::i;:::-;35886:34;35945:1;35942;35938:9;35930:17;;35762:191;;;;:::o;35959:305::-;35999:3;36018:20;36036:1;36018:20;:::i;:::-;36013:25;;36052:20;36070:1;36052:20;:::i;:::-;36047:25;;36206:1;36138:66;36134:74;36131:1;36128:81;36125:107;;;36212:18;;:::i;:::-;36125:107;36256:1;36253;36249:9;36242:16;;35959:305;;;;:::o;36270:237::-;36410:34;36406:1;36398:6;36394:14;36387:58;36479:20;36474:2;36466:6;36462:15;36455:45;36270:237;:::o;36513:366::-;36655:3;36676:67;36740:2;36735:3;36676:67;:::i;:::-;36669:74;;36752:93;36841:3;36752:93;:::i;:::-;36870:2;36865:3;36861:12;36854:19;;36513:366;;;:::o;36885:419::-;37051:4;37089:2;37078:9;37074:18;37066:26;;37138:9;37132:4;37128:20;37124:1;37113:9;37109:17;37102:47;37166:131;37292:4;37166:131;:::i;:::-;37158:139;;36885:419;;;:::o;37310:170::-;37450:22;37446:1;37438:6;37434:14;37427:46;37310:170;:::o;37486:366::-;37628:3;37649:67;37713:2;37708:3;37649:67;:::i;:::-;37642:74;;37725:93;37814:3;37725:93;:::i;:::-;37843:2;37838:3;37834:12;37827:19;;37486:366;;;:::o;37858:419::-;38024:4;38062:2;38051:9;38047:18;38039:26;;38111:9;38105:4;38101:20;38097:1;38086:9;38082:17;38075:47;38139:131;38265:4;38139:131;:::i;:::-;38131:139;;37858:419;;;:::o;38283:166::-;38423:18;38419:1;38411:6;38407:14;38400:42;38283:166;:::o;38455:366::-;38597:3;38618:67;38682:2;38677:3;38618:67;:::i;:::-;38611:74;;38694:93;38783:3;38694:93;:::i;:::-;38812:2;38807:3;38803:12;38796:19;;38455:366;;;:::o;38827:419::-;38993:4;39031:2;39020:9;39016:18;39008:26;;39080:9;39074:4;39070:20;39066:1;39055:9;39051:17;39044:47;39108:131;39234:4;39108:131;:::i;:::-;39100:139;;38827:419;;;:::o;39252:175::-;39392:27;39388:1;39380:6;39376:14;39369:51;39252:175;:::o;39433:366::-;39575:3;39596:67;39660:2;39655:3;39596:67;:::i;:::-;39589:74;;39672:93;39761:3;39672:93;:::i;:::-;39790:2;39785:3;39781:12;39774:19;;39433:366;;;:::o;39805:419::-;39971:4;40009:2;39998:9;39994:18;39986:26;;40058:9;40052:4;40048:20;40044:1;40033:9;40029:17;40022:47;40086:131;40212:4;40086:131;:::i;:::-;40078:139;;39805:419;;;:::o;40230:234::-;40370:34;40366:1;40358:6;40354:14;40347:58;40439:17;40434:2;40426:6;40422:15;40415:42;40230:234;:::o;40470:366::-;40612:3;40633:67;40697:2;40692:3;40633:67;:::i;:::-;40626:74;;40709:93;40798:3;40709:93;:::i;:::-;40827:2;40822:3;40818:12;40811:19;;40470:366;;;:::o;40842:419::-;41008:4;41046:2;41035:9;41031:18;41023:26;;41095:9;41089:4;41085:20;41081:1;41070:9;41066:17;41059:47;41123:131;41249:4;41123:131;:::i;:::-;41115:139;;40842:419;;;:::o;41267:435::-;41447:3;41469:95;41560:3;41551:6;41469:95;:::i;:::-;41462:102;;41581:95;41672:3;41663:6;41581:95;:::i;:::-;41574:102;;41693:3;41686:10;;41267:435;;;;;:::o;41708:98::-;41759:6;41793:5;41787:12;41777:22;;41708:98;;;:::o;41812:168::-;41895:11;41929:6;41924:3;41917:19;41969:4;41964:3;41960:14;41945:29;;41812:168;;;;:::o;41986:360::-;42072:3;42100:38;42132:5;42100:38;:::i;:::-;42154:70;42217:6;42212:3;42154:70;:::i;:::-;42147:77;;42233:52;42278:6;42273:3;42266:4;42259:5;42255:16;42233:52;:::i;:::-;42310:29;42332:6;42310:29;:::i;:::-;42305:3;42301:39;42294:46;;42076:270;41986:360;;;;:::o;42352:640::-;42547:4;42585:3;42574:9;42570:19;42562:27;;42599:71;42667:1;42656:9;42652:17;42643:6;42599:71;:::i;:::-;42680:72;42748:2;42737:9;42733:18;42724:6;42680:72;:::i;:::-;42762;42830:2;42819:9;42815:18;42806:6;42762:72;:::i;:::-;42881:9;42875:4;42871:20;42866:2;42855:9;42851:18;42844:48;42909:76;42980:4;42971:6;42909:76;:::i;:::-;42901:84;;42352:640;;;;;;;:::o;42998:141::-;43054:5;43085:6;43079:13;43070:22;;43101:32;43127:5;43101:32;:::i;:::-;42998:141;;;;:::o;43145:349::-;43214:6;43263:2;43251:9;43242:7;43238:23;43234:32;43231:119;;;43269:79;;:::i;:::-;43231:119;43389:1;43414:63;43469:7;43460:6;43449:9;43445:22;43414:63;:::i;:::-;43404:73;;43360:127;43145:349;;;;:::o;43500:180::-;43548:77;43545:1;43538:88;43645:4;43642:1;43635:15;43669:4;43666:1;43659:15;43686:185;43726:1;43743:20;43761:1;43743:20;:::i;:::-;43738:25;;43777:20;43795:1;43777:20;:::i;:::-;43772:25;;43816:1;43806:35;;43821:18;;:::i;:::-;43806:35;43863:1;43860;43856:9;43851:14;;43686:185;;;;:::o;43877:176::-;43909:1;43926:20;43944:1;43926:20;:::i;:::-;43921:25;;43960:20;43978:1;43960:20;:::i;:::-;43955:25;;43999:1;43989:35;;44004:18;;:::i;:::-;43989:35;44045:1;44042;44038:9;44033:14;;43877:176;;;;:::o;44059:182::-;44199:34;44195:1;44187:6;44183:14;44176:58;44059:182;:::o;44247:366::-;44389:3;44410:67;44474:2;44469:3;44410:67;:::i;:::-;44403:74;;44486:93;44575:3;44486:93;:::i;:::-;44604:2;44599:3;44595:12;44588:19;;44247:366;;;:::o;44619:419::-;44785:4;44823:2;44812:9;44808:18;44800:26;;44872:9;44866:4;44862:20;44858:1;44847:9;44843:17;44836:47;44900:131;45026:4;44900:131;:::i;:::-;44892:139;;44619:419;;;:::o;45044:178::-;45184:30;45180:1;45172:6;45168:14;45161:54;45044:178;:::o;45228:366::-;45370:3;45391:67;45455:2;45450:3;45391:67;:::i;:::-;45384:74;;45467:93;45556:3;45467:93;:::i;:::-;45585:2;45580:3;45576:12;45569:19;;45228:366;;;:::o;45600:419::-;45766:4;45804:2;45793:9;45789:18;45781:26;;45853:9;45847:4;45843:20;45839:1;45828:9;45824:17;45817:47;45881:131;46007:4;45881:131;:::i;:::-;45873:139;;45600:419;;;:::o

Swarm Source

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