Overview
Max Total Supply
1,333 WGM
Holders
485
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
8 WGMLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
WonderGameMetaverse
Compiler Version
v0.8.1+commit.df193b15
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-02 */ // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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 `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || 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); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @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` cannot be the zero address. * - `to` cannot be the zero address. * * 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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/WonderGame.sol //SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.0; contract WonderGameMetaverse is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; uint256 public cost = 0.06 ether; uint256 public maxSupply = 10000; uint256 public maxMintAmount = 5; bool public paused = false; mapping(address => bool) public whitelisted; constructor( string memory _name, string memory _symbol, string memory _initBaseURI ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(address _to, uint256 _mintAmount) public payable { uint256 supply = totalSupply(); require(!paused); require(_mintAmount > 0); require(_mintAmount <= maxMintAmount); require(supply + _mintAmount <= maxSupply); if (msg.sender != owner()) { if(whitelisted[msg.sender] != true) { require(msg.value >= cost * _mintAmount); } } for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function whitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function removeWhitelistUser(address _user) public onlyOwner { whitelisted[_user] = false; } function withdraw() public payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","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":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908051906020019062000051929190620002c9565b5066d529ae9e860000600d55612710600e556005600f556000601060006101000a81548160ff0219169083151502179055503480156200009057600080fd5b5060405162004af738038062004af78339818101604052810190620000b69190620003eb565b82828160009080519060200190620000d0929190620002c9565b508060019080519060200190620000e9929190620002c9565b5050506200010c620001006200012660201b60201c565b6200012e60201b60201c565b6200011d81620001f460201b60201c565b5050506200067f565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002046200012660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200022a6200029f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000283576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027a90620004b3565b60405180910390fd5b80600b90805190602001906200029b929190620002c9565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002d7906200057b565b90600052602060002090601f016020900481019282620002fb576000855562000347565b82601f106200031657805160ff191683800117855562000347565b8280016001018555821562000347579182015b828111156200034657825182559160200191906001019062000329565b5b5090506200035691906200035a565b5090565b5b80821115620003755760008160009055506001016200035b565b5090565b6000620003906200038a84620004fe565b620004d5565b905082815260208101848484011115620003a957600080fd5b620003b684828562000545565b509392505050565b600082601f830112620003d057600080fd5b8151620003e284826020860162000379565b91505092915050565b6000806000606084860312156200040157600080fd5b600084015167ffffffffffffffff8111156200041c57600080fd5b6200042a86828701620003be565b935050602084015167ffffffffffffffff8111156200044857600080fd5b6200045686828701620003be565b925050604084015167ffffffffffffffff8111156200047457600080fd5b6200048286828701620003be565b9150509250925092565b60006200049b60208362000534565b9150620004a88262000656565b602082019050919050565b60006020820190508181036000830152620004ce816200048c565b9050919050565b6000620004e1620004f4565b9050620004ef8282620005b1565b919050565b6000604051905090565b600067ffffffffffffffff8211156200051c576200051b62000616565b5b620005278262000645565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200056557808201518184015260208101905062000548565b8381111562000575576000848401525b50505050565b600060028204905060018216806200059457607f821691505b60208210811415620005ab57620005aa620005e7565b5b50919050565b620005bc8262000645565b810181811067ffffffffffffffff82111715620005de57620005dd62000616565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614468806200068f6000396000f3fe60806040526004361061020f5760003560e01c806355f804b311610118578063a22cb465116100a0578063d5abeb011161006f578063d5abeb011461077f578063d936547e146107aa578063da3ef23f146107e7578063e985e9c514610810578063f2fde38b1461084d5761020f565b8063a22cb465146106c5578063b88d4fde146106ee578063c668286214610717578063c87b56dd146107425761020f565b806370a08231116100e757806370a08231146105f2578063715018a61461062f5780637f00c7a6146106465780638da5cb5b1461066f57806395d89b411461069a5761020f565b806355f804b3146105365780635c975abb1461055f5780636352211e1461058a5780636c0360eb146105c75761020f565b80632f745c591161019b57806342842e0e1161016a57806342842e0e14610441578063438b63001461046a57806344a0d68a146104a75780634a4c560d146104d05780634f6ccce7146104f95761020f565b80632f745c59146103b557806330cc7ae0146103f25780633ccfd60b1461041b57806340c10f19146104255761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806313faede61461030b57806318160ddd14610336578063239c70ae1461036157806323b872dd1461038c5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906131fb565b610876565b60405161024891906137bb565b60405180910390f35b34801561025d57600080fd5b50610278600480360381019061027391906131d2565b6108f0565b005b34801561028657600080fd5b5061028f610989565b60405161029c91906137d6565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c7919061328e565b610a1b565b6040516102d99190613732565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190613196565b610aa0565b005b34801561031757600080fd5b50610320610bb8565b60405161032d9190613a38565b60405180910390f35b34801561034257600080fd5b5061034b610bbe565b6040516103589190613a38565b60405180910390f35b34801561036d57600080fd5b50610376610bcb565b6040516103839190613a38565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190613090565b610bd1565b005b3480156103c157600080fd5b506103dc60048036038101906103d79190613196565b610c31565b6040516103e99190613a38565b60405180910390f35b3480156103fe57600080fd5b506104196004803603810190610414919061302b565b610cd6565b005b610423610dad565b005b61043f600480360381019061043a9190613196565b610e69565b005b34801561044d57600080fd5b5061046860048036038101906104639190613090565b610faf565b005b34801561047657600080fd5b50610491600480360381019061048c919061302b565b610fcf565b60405161049e9190613799565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c9919061328e565b6110c9565b005b3480156104dc57600080fd5b506104f760048036038101906104f2919061302b565b61114f565b005b34801561050557600080fd5b50610520600480360381019061051b919061328e565b611226565b60405161052d9190613a38565b60405180910390f35b34801561054257600080fd5b5061055d6004803603810190610558919061324d565b6112bd565b005b34801561056b57600080fd5b50610574611353565b60405161058191906137bb565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac919061328e565b611366565b6040516105be9190613732565b60405180910390f35b3480156105d357600080fd5b506105dc611418565b6040516105e991906137d6565b60405180910390f35b3480156105fe57600080fd5b506106196004803603810190610614919061302b565b6114a6565b6040516106269190613a38565b60405180910390f35b34801561063b57600080fd5b5061064461155e565b005b34801561065257600080fd5b5061066d6004803603810190610668919061328e565b6115e6565b005b34801561067b57600080fd5b5061068461166c565b6040516106919190613732565b60405180910390f35b3480156106a657600080fd5b506106af611696565b6040516106bc91906137d6565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e7919061315a565b611728565b005b3480156106fa57600080fd5b50610715600480360381019061071091906130df565b61173e565b005b34801561072357600080fd5b5061072c6117a0565b60405161073991906137d6565b60405180910390f35b34801561074e57600080fd5b506107696004803603810190610764919061328e565b61182e565b60405161077691906137d6565b60405180910390f35b34801561078b57600080fd5b506107946118d8565b6040516107a19190613a38565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc919061302b565b6118de565b6040516107de91906137bb565b60405180910390f35b3480156107f357600080fd5b5061080e6004803603810190610809919061324d565b6118fe565b005b34801561081c57600080fd5b5061083760048036038101906108329190613054565b611994565b60405161084491906137bb565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f919061302b565b611a28565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e957506108e882611b20565b5b9050919050565b6108f8611c02565b73ffffffffffffffffffffffffffffffffffffffff1661091661166c565b73ffffffffffffffffffffffffffffffffffffffff161461096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096390613998565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60606000805461099890613d36565b80601f01602080910402602001604051908101604052809291908181526020018280546109c490613d36565b8015610a115780601f106109e657610100808354040283529160200191610a11565b820191906000526020600020905b8154815290600101906020018083116109f457829003601f168201915b5050505050905090565b6000610a2682611c0a565b610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c90613978565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aab82611366565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b13906139d8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b3b611c02565b73ffffffffffffffffffffffffffffffffffffffff161480610b6a5750610b6981610b64611c02565b611994565b5b610ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba0906138f8565b60405180910390fd5b610bb38383611c76565b505050565b600d5481565b6000600880549050905090565b600f5481565b610be2610bdc611c02565b82611d2f565b610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c18906139f8565b60405180910390fd5b610c2c838383611e0d565b505050565b6000610c3c836114a6565b8210610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c74906137f8565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cde611c02565b73ffffffffffffffffffffffffffffffffffffffff16610cfc61166c565b73ffffffffffffffffffffffffffffffffffffffff1614610d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4990613998565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610db5611c02565b73ffffffffffffffffffffffffffffffffffffffff16610dd361166c565b73ffffffffffffffffffffffffffffffffffffffff1614610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090613998565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e6757600080fd5b565b6000610e73610bbe565b9050601060009054906101000a900460ff1615610e8f57600080fd5b60008211610e9c57600080fd5b600f54821115610eab57600080fd5b600e548282610eba9190613b6b565b1115610ec557600080fd5b610ecd61166c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f735760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610f725781600d54610f659190613bf2565b341015610f7157600080fd5b5b5b6000600190505b828111610fa957610f96848284610f919190613b6b565b612074565b8080610fa190613d99565b915050610f7a565b50505050565b610fca8383836040518060200160405280600081525061173e565b505050565b60606000610fdc836114a6565b905060008167ffffffffffffffff811115611020577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561104e5781602001602082028036833780820191505090505b50905060005b828110156110be576110668582610c31565b82828151811061109f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806110b690613d99565b915050611054565b508092505050919050565b6110d1611c02565b73ffffffffffffffffffffffffffffffffffffffff166110ef61166c565b73ffffffffffffffffffffffffffffffffffffffff1614611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90613998565b60405180910390fd5b80600d8190555050565b611157611c02565b73ffffffffffffffffffffffffffffffffffffffff1661117561166c565b73ffffffffffffffffffffffffffffffffffffffff16146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290613998565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611230610bbe565b8210611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890613a18565b60405180910390fd5b600882815481106112ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6112c5611c02565b73ffffffffffffffffffffffffffffffffffffffff166112e361166c565b73ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090613998565b60405180910390fd5b80600b908051906020019061134f929190612e4f565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561140f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140690613938565b60405180910390fd5b80915050919050565b600b805461142590613d36565b80601f016020809104026020016040519081016040528092919081815260200182805461145190613d36565b801561149e5780601f106114735761010080835404028352916020019161149e565b820191906000526020600020905b81548152906001019060200180831161148157829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613918565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611566611c02565b73ffffffffffffffffffffffffffffffffffffffff1661158461166c565b73ffffffffffffffffffffffffffffffffffffffff16146115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190613998565b60405180910390fd5b6115e46000612092565b565b6115ee611c02565b73ffffffffffffffffffffffffffffffffffffffff1661160c61166c565b73ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165990613998565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546116a590613d36565b80601f01602080910402602001604051908101604052809291908181526020018280546116d190613d36565b801561171e5780601f106116f35761010080835404028352916020019161171e565b820191906000526020600020905b81548152906001019060200180831161170157829003601f168201915b5050505050905090565b61173a611733611c02565b8383612158565b5050565b61174f611749611c02565b83611d2f565b61178e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611785906139f8565b60405180910390fd5b61179a848484846122c5565b50505050565b600c80546117ad90613d36565b80601f01602080910402602001604051908101604052809291908181526020018280546117d990613d36565b80156118265780601f106117fb57610100808354040283529160200191611826565b820191906000526020600020905b81548152906001019060200180831161180957829003601f168201915b505050505081565b606061183982611c0a565b611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f906139b8565b60405180910390fd5b6000611882612321565b905060008151116118a257604051806020016040528060008152506118d0565b806118ac846123b3565b600c6040516020016118c093929190613701565b6040516020818303038152906040525b915050919050565b600e5481565b60116020528060005260406000206000915054906101000a900460ff1681565b611906611c02565b73ffffffffffffffffffffffffffffffffffffffff1661192461166c565b73ffffffffffffffffffffffffffffffffffffffff161461197a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197190613998565b60405180910390fd5b80600c9080519060200190611990929190612e4f565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a30611c02565b73ffffffffffffffffffffffffffffffffffffffff16611a4e61166c565b73ffffffffffffffffffffffffffffffffffffffff1614611aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9b90613998565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90613838565b60405180910390fd5b611b1d81612092565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611beb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bfb5750611bfa82612560565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ce983611366565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d3a82611c0a565b611d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d70906138d8565b60405180910390fd5b6000611d8483611366565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611df357508373ffffffffffffffffffffffffffffffffffffffff16611ddb84610a1b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e045750611e038185611994565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e2d82611366565b73ffffffffffffffffffffffffffffffffffffffff1614611e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7a90613858565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eea90613898565b60405180910390fd5b611efe8383836125ca565b611f09600082611c76565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f599190613c4c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fb09190613b6b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461206f8383836126de565b505050565b61208e8282604051806020016040528060008152506126e3565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be906138b8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122b891906137bb565b60405180910390a3505050565b6122d0848484611e0d565b6122dc8484848461273e565b61231b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231290613818565b60405180910390fd5b50505050565b6060600b805461233090613d36565b80601f016020809104026020016040519081016040528092919081815260200182805461235c90613d36565b80156123a95780601f1061237e576101008083540402835291602001916123a9565b820191906000526020600020905b81548152906001019060200180831161238c57829003601f168201915b5050505050905090565b606060008214156123fb576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061255b565b600082905060005b6000821461242d57808061241690613d99565b915050600a826124269190613bc1565b9150612403565b60008167ffffffffffffffff81111561246f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124a15781602001600182028036833780820191505090505b5090505b60008514612554576001826124ba9190613c4c565b9150600a856124c99190613de2565b60306124d59190613b6b565b60f81b818381518110612511577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561254d9190613bc1565b94506124a5565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6125d58383836128d5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561261857612613816128da565b612657565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612656576126558382612923565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561269a5761269581612a90565b6126d9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146126d8576126d78282612bd3565b5b5b505050565b505050565b6126ed8383612c52565b6126fa600084848461273e565b612739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273090613818565b60405180910390fd5b505050565b600061275f8473ffffffffffffffffffffffffffffffffffffffff16612e2c565b156128c8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612788611c02565b8786866040518563ffffffff1660e01b81526004016127aa949392919061374d565b602060405180830381600087803b1580156127c457600080fd5b505af19250505080156127f557506040513d601f19601f820116820180604052508101906127f29190613224565b60015b612878573d8060008114612825576040519150601f19603f3d011682016040523d82523d6000602084013e61282a565b606091505b50600081511415612870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286790613818565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128cd565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612930846114a6565b61293a9190613c4c565b9050600060076000848152602001908152602001600020549050818114612a1f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612aa49190613c4c565b9050600060096000848152602001908152602001600020549050600060088381548110612afa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612b42577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612bb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612bde836114a6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990613958565b60405180910390fd5b612ccb81611c0a565b15612d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0290613878565b60405180910390fd5b612d17600083836125ca565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d679190613b6b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e28600083836126de565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612e5b90613d36565b90600052602060002090601f016020900481019282612e7d5760008555612ec4565b82601f10612e9657805160ff1916838001178555612ec4565b82800160010185558215612ec4579182015b82811115612ec3578251825591602001919060010190612ea8565b5b509050612ed19190612ed5565b5090565b5b80821115612eee576000816000905550600101612ed6565b5090565b6000612f05612f0084613a78565b613a53565b905082815260208101848484011115612f1d57600080fd5b612f28848285613cf4565b509392505050565b6000612f43612f3e84613aa9565b613a53565b905082815260208101848484011115612f5b57600080fd5b612f66848285613cf4565b509392505050565b600081359050612f7d816143d6565b92915050565b600081359050612f92816143ed565b92915050565b600081359050612fa781614404565b92915050565b600081519050612fbc81614404565b92915050565b600082601f830112612fd357600080fd5b8135612fe3848260208601612ef2565b91505092915050565b600082601f830112612ffd57600080fd5b813561300d848260208601612f30565b91505092915050565b6000813590506130258161441b565b92915050565b60006020828403121561303d57600080fd5b600061304b84828501612f6e565b91505092915050565b6000806040838503121561306757600080fd5b600061307585828601612f6e565b925050602061308685828601612f6e565b9150509250929050565b6000806000606084860312156130a557600080fd5b60006130b386828701612f6e565b93505060206130c486828701612f6e565b92505060406130d586828701613016565b9150509250925092565b600080600080608085870312156130f557600080fd5b600061310387828801612f6e565b945050602061311487828801612f6e565b935050604061312587828801613016565b925050606085013567ffffffffffffffff81111561314257600080fd5b61314e87828801612fc2565b91505092959194509250565b6000806040838503121561316d57600080fd5b600061317b85828601612f6e565b925050602061318c85828601612f83565b9150509250929050565b600080604083850312156131a957600080fd5b60006131b785828601612f6e565b92505060206131c885828601613016565b9150509250929050565b6000602082840312156131e457600080fd5b60006131f284828501612f83565b91505092915050565b60006020828403121561320d57600080fd5b600061321b84828501612f98565b91505092915050565b60006020828403121561323657600080fd5b600061324484828501612fad565b91505092915050565b60006020828403121561325f57600080fd5b600082013567ffffffffffffffff81111561327957600080fd5b61328584828501612fec565b91505092915050565b6000602082840312156132a057600080fd5b60006132ae84828501613016565b91505092915050565b60006132c383836136e3565b60208301905092915050565b6132d881613c80565b82525050565b60006132e982613aff565b6132f38185613b2d565b93506132fe83613ada565b8060005b8381101561332f57815161331688826132b7565b975061332183613b20565b925050600181019050613302565b5085935050505092915050565b61334581613c92565b82525050565b600061335682613b0a565b6133608185613b3e565b9350613370818560208601613d03565b61337981613ecf565b840191505092915050565b600061338f82613b15565b6133998185613b4f565b93506133a9818560208601613d03565b6133b281613ecf565b840191505092915050565b60006133c882613b15565b6133d28185613b60565b93506133e2818560208601613d03565b80840191505092915050565b600081546133fb81613d36565b6134058186613b60565b94506001821660008114613420576001811461343157613464565b60ff19831686528186019350613464565b61343a85613aea565b60005b8381101561345c5781548189015260018201915060208101905061343d565b838801955050505b50505092915050565b600061347a602b83613b4f565b915061348582613ee0565b604082019050919050565b600061349d603283613b4f565b91506134a882613f2f565b604082019050919050565b60006134c0602683613b4f565b91506134cb82613f7e565b604082019050919050565b60006134e3602583613b4f565b91506134ee82613fcd565b604082019050919050565b6000613506601c83613b4f565b91506135118261401c565b602082019050919050565b6000613529602483613b4f565b915061353482614045565b604082019050919050565b600061354c601983613b4f565b915061355782614094565b602082019050919050565b600061356f602c83613b4f565b915061357a826140bd565b604082019050919050565b6000613592603883613b4f565b915061359d8261410c565b604082019050919050565b60006135b5602a83613b4f565b91506135c08261415b565b604082019050919050565b60006135d8602983613b4f565b91506135e3826141aa565b604082019050919050565b60006135fb602083613b4f565b9150613606826141f9565b602082019050919050565b600061361e602c83613b4f565b915061362982614222565b604082019050919050565b6000613641602083613b4f565b915061364c82614271565b602082019050919050565b6000613664602f83613b4f565b915061366f8261429a565b604082019050919050565b6000613687602183613b4f565b9150613692826142e9565b604082019050919050565b60006136aa603183613b4f565b91506136b582614338565b604082019050919050565b60006136cd602c83613b4f565b91506136d882614387565b604082019050919050565b6136ec81613cea565b82525050565b6136fb81613cea565b82525050565b600061370d82866133bd565b915061371982856133bd565b915061372582846133ee565b9150819050949350505050565b600060208201905061374760008301846132cf565b92915050565b600060808201905061376260008301876132cf565b61376f60208301866132cf565b61377c60408301856136f2565b818103606083015261378e818461334b565b905095945050505050565b600060208201905081810360008301526137b381846132de565b905092915050565b60006020820190506137d0600083018461333c565b92915050565b600060208201905081810360008301526137f08184613384565b905092915050565b600060208201905081810360008301526138118161346d565b9050919050565b6000602082019050818103600083015261383181613490565b9050919050565b60006020820190508181036000830152613851816134b3565b9050919050565b60006020820190508181036000830152613871816134d6565b9050919050565b60006020820190508181036000830152613891816134f9565b9050919050565b600060208201905081810360008301526138b18161351c565b9050919050565b600060208201905081810360008301526138d18161353f565b9050919050565b600060208201905081810360008301526138f181613562565b9050919050565b6000602082019050818103600083015261391181613585565b9050919050565b60006020820190508181036000830152613931816135a8565b9050919050565b60006020820190508181036000830152613951816135cb565b9050919050565b60006020820190508181036000830152613971816135ee565b9050919050565b6000602082019050818103600083015261399181613611565b9050919050565b600060208201905081810360008301526139b181613634565b9050919050565b600060208201905081810360008301526139d181613657565b9050919050565b600060208201905081810360008301526139f18161367a565b9050919050565b60006020820190508181036000830152613a118161369d565b9050919050565b60006020820190508181036000830152613a31816136c0565b9050919050565b6000602082019050613a4d60008301846136f2565b92915050565b6000613a5d613a6e565b9050613a698282613d68565b919050565b6000604051905090565b600067ffffffffffffffff821115613a9357613a92613ea0565b5b613a9c82613ecf565b9050602081019050919050565b600067ffffffffffffffff821115613ac457613ac3613ea0565b5b613acd82613ecf565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b7682613cea565b9150613b8183613cea565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bb657613bb5613e13565b5b828201905092915050565b6000613bcc82613cea565b9150613bd783613cea565b925082613be757613be6613e42565b5b828204905092915050565b6000613bfd82613cea565b9150613c0883613cea565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c4157613c40613e13565b5b828202905092915050565b6000613c5782613cea565b9150613c6283613cea565b925082821015613c7557613c74613e13565b5b828203905092915050565b6000613c8b82613cca565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d21578082015181840152602081019050613d06565b83811115613d30576000848401525b50505050565b60006002820490506001821680613d4e57607f821691505b60208210811415613d6257613d61613e71565b5b50919050565b613d7182613ecf565b810181811067ffffffffffffffff82111715613d9057613d8f613ea0565b5b80604052505050565b6000613da482613cea565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dd757613dd6613e13565b5b600182019050919050565b6000613ded82613cea565b9150613df883613cea565b925082613e0857613e07613e42565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6143df81613c80565b81146143ea57600080fd5b50565b6143f681613c92565b811461440157600080fd5b50565b61440d81613c9e565b811461441857600080fd5b50565b61442481613cea565b811461442f57600080fd5b5056fea2646970667358221220bc3f13f81b89882f1a9c257f8e857cebaa9dece4181e005b6b67c407fff60a7764736f6c63430008010033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000014576f6e64657247616d65204d6574617665727365000000000000000000000000000000000000000000000000000000000000000000000000000000000000000357474d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d634d4a6670614d377a6b41356f6662416d61534d7a52505a57513270396a4e734d4e6576744c33576e7937742f00000000000000000000
Deployed Bytecode
0x60806040526004361061020f5760003560e01c806355f804b311610118578063a22cb465116100a0578063d5abeb011161006f578063d5abeb011461077f578063d936547e146107aa578063da3ef23f146107e7578063e985e9c514610810578063f2fde38b1461084d5761020f565b8063a22cb465146106c5578063b88d4fde146106ee578063c668286214610717578063c87b56dd146107425761020f565b806370a08231116100e757806370a08231146105f2578063715018a61461062f5780637f00c7a6146106465780638da5cb5b1461066f57806395d89b411461069a5761020f565b806355f804b3146105365780635c975abb1461055f5780636352211e1461058a5780636c0360eb146105c75761020f565b80632f745c591161019b57806342842e0e1161016a57806342842e0e14610441578063438b63001461046a57806344a0d68a146104a75780634a4c560d146104d05780634f6ccce7146104f95761020f565b80632f745c59146103b557806330cc7ae0146103f25780633ccfd60b1461041b57806340c10f19146104255761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806313faede61461030b57806318160ddd14610336578063239c70ae1461036157806323b872dd1461038c5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906131fb565b610876565b60405161024891906137bb565b60405180910390f35b34801561025d57600080fd5b50610278600480360381019061027391906131d2565b6108f0565b005b34801561028657600080fd5b5061028f610989565b60405161029c91906137d6565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c7919061328e565b610a1b565b6040516102d99190613732565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190613196565b610aa0565b005b34801561031757600080fd5b50610320610bb8565b60405161032d9190613a38565b60405180910390f35b34801561034257600080fd5b5061034b610bbe565b6040516103589190613a38565b60405180910390f35b34801561036d57600080fd5b50610376610bcb565b6040516103839190613a38565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190613090565b610bd1565b005b3480156103c157600080fd5b506103dc60048036038101906103d79190613196565b610c31565b6040516103e99190613a38565b60405180910390f35b3480156103fe57600080fd5b506104196004803603810190610414919061302b565b610cd6565b005b610423610dad565b005b61043f600480360381019061043a9190613196565b610e69565b005b34801561044d57600080fd5b5061046860048036038101906104639190613090565b610faf565b005b34801561047657600080fd5b50610491600480360381019061048c919061302b565b610fcf565b60405161049e9190613799565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c9919061328e565b6110c9565b005b3480156104dc57600080fd5b506104f760048036038101906104f2919061302b565b61114f565b005b34801561050557600080fd5b50610520600480360381019061051b919061328e565b611226565b60405161052d9190613a38565b60405180910390f35b34801561054257600080fd5b5061055d6004803603810190610558919061324d565b6112bd565b005b34801561056b57600080fd5b50610574611353565b60405161058191906137bb565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac919061328e565b611366565b6040516105be9190613732565b60405180910390f35b3480156105d357600080fd5b506105dc611418565b6040516105e991906137d6565b60405180910390f35b3480156105fe57600080fd5b506106196004803603810190610614919061302b565b6114a6565b6040516106269190613a38565b60405180910390f35b34801561063b57600080fd5b5061064461155e565b005b34801561065257600080fd5b5061066d6004803603810190610668919061328e565b6115e6565b005b34801561067b57600080fd5b5061068461166c565b6040516106919190613732565b60405180910390f35b3480156106a657600080fd5b506106af611696565b6040516106bc91906137d6565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e7919061315a565b611728565b005b3480156106fa57600080fd5b50610715600480360381019061071091906130df565b61173e565b005b34801561072357600080fd5b5061072c6117a0565b60405161073991906137d6565b60405180910390f35b34801561074e57600080fd5b506107696004803603810190610764919061328e565b61182e565b60405161077691906137d6565b60405180910390f35b34801561078b57600080fd5b506107946118d8565b6040516107a19190613a38565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc919061302b565b6118de565b6040516107de91906137bb565b60405180910390f35b3480156107f357600080fd5b5061080e6004803603810190610809919061324d565b6118fe565b005b34801561081c57600080fd5b5061083760048036038101906108329190613054565b611994565b60405161084491906137bb565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f919061302b565b611a28565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e957506108e882611b20565b5b9050919050565b6108f8611c02565b73ffffffffffffffffffffffffffffffffffffffff1661091661166c565b73ffffffffffffffffffffffffffffffffffffffff161461096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096390613998565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60606000805461099890613d36565b80601f01602080910402602001604051908101604052809291908181526020018280546109c490613d36565b8015610a115780601f106109e657610100808354040283529160200191610a11565b820191906000526020600020905b8154815290600101906020018083116109f457829003601f168201915b5050505050905090565b6000610a2682611c0a565b610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c90613978565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aab82611366565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b13906139d8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b3b611c02565b73ffffffffffffffffffffffffffffffffffffffff161480610b6a5750610b6981610b64611c02565b611994565b5b610ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba0906138f8565b60405180910390fd5b610bb38383611c76565b505050565b600d5481565b6000600880549050905090565b600f5481565b610be2610bdc611c02565b82611d2f565b610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c18906139f8565b60405180910390fd5b610c2c838383611e0d565b505050565b6000610c3c836114a6565b8210610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c74906137f8565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cde611c02565b73ffffffffffffffffffffffffffffffffffffffff16610cfc61166c565b73ffffffffffffffffffffffffffffffffffffffff1614610d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4990613998565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610db5611c02565b73ffffffffffffffffffffffffffffffffffffffff16610dd361166c565b73ffffffffffffffffffffffffffffffffffffffff1614610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090613998565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e6757600080fd5b565b6000610e73610bbe565b9050601060009054906101000a900460ff1615610e8f57600080fd5b60008211610e9c57600080fd5b600f54821115610eab57600080fd5b600e548282610eba9190613b6b565b1115610ec557600080fd5b610ecd61166c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f735760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610f725781600d54610f659190613bf2565b341015610f7157600080fd5b5b5b6000600190505b828111610fa957610f96848284610f919190613b6b565b612074565b8080610fa190613d99565b915050610f7a565b50505050565b610fca8383836040518060200160405280600081525061173e565b505050565b60606000610fdc836114a6565b905060008167ffffffffffffffff811115611020577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561104e5781602001602082028036833780820191505090505b50905060005b828110156110be576110668582610c31565b82828151811061109f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806110b690613d99565b915050611054565b508092505050919050565b6110d1611c02565b73ffffffffffffffffffffffffffffffffffffffff166110ef61166c565b73ffffffffffffffffffffffffffffffffffffffff1614611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90613998565b60405180910390fd5b80600d8190555050565b611157611c02565b73ffffffffffffffffffffffffffffffffffffffff1661117561166c565b73ffffffffffffffffffffffffffffffffffffffff16146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290613998565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611230610bbe565b8210611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890613a18565b60405180910390fd5b600882815481106112ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6112c5611c02565b73ffffffffffffffffffffffffffffffffffffffff166112e361166c565b73ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090613998565b60405180910390fd5b80600b908051906020019061134f929190612e4f565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561140f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140690613938565b60405180910390fd5b80915050919050565b600b805461142590613d36565b80601f016020809104026020016040519081016040528092919081815260200182805461145190613d36565b801561149e5780601f106114735761010080835404028352916020019161149e565b820191906000526020600020905b81548152906001019060200180831161148157829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613918565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611566611c02565b73ffffffffffffffffffffffffffffffffffffffff1661158461166c565b73ffffffffffffffffffffffffffffffffffffffff16146115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190613998565b60405180910390fd5b6115e46000612092565b565b6115ee611c02565b73ffffffffffffffffffffffffffffffffffffffff1661160c61166c565b73ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165990613998565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546116a590613d36565b80601f01602080910402602001604051908101604052809291908181526020018280546116d190613d36565b801561171e5780601f106116f35761010080835404028352916020019161171e565b820191906000526020600020905b81548152906001019060200180831161170157829003601f168201915b5050505050905090565b61173a611733611c02565b8383612158565b5050565b61174f611749611c02565b83611d2f565b61178e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611785906139f8565b60405180910390fd5b61179a848484846122c5565b50505050565b600c80546117ad90613d36565b80601f01602080910402602001604051908101604052809291908181526020018280546117d990613d36565b80156118265780601f106117fb57610100808354040283529160200191611826565b820191906000526020600020905b81548152906001019060200180831161180957829003601f168201915b505050505081565b606061183982611c0a565b611878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186f906139b8565b60405180910390fd5b6000611882612321565b905060008151116118a257604051806020016040528060008152506118d0565b806118ac846123b3565b600c6040516020016118c093929190613701565b6040516020818303038152906040525b915050919050565b600e5481565b60116020528060005260406000206000915054906101000a900460ff1681565b611906611c02565b73ffffffffffffffffffffffffffffffffffffffff1661192461166c565b73ffffffffffffffffffffffffffffffffffffffff161461197a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197190613998565b60405180910390fd5b80600c9080519060200190611990929190612e4f565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a30611c02565b73ffffffffffffffffffffffffffffffffffffffff16611a4e61166c565b73ffffffffffffffffffffffffffffffffffffffff1614611aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9b90613998565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90613838565b60405180910390fd5b611b1d81612092565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611beb57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611bfb5750611bfa82612560565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ce983611366565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611d3a82611c0a565b611d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d70906138d8565b60405180910390fd5b6000611d8483611366565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611df357508373ffffffffffffffffffffffffffffffffffffffff16611ddb84610a1b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e045750611e038185611994565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611e2d82611366565b73ffffffffffffffffffffffffffffffffffffffff1614611e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7a90613858565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eea90613898565b60405180910390fd5b611efe8383836125ca565b611f09600082611c76565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f599190613c4c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fb09190613b6b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461206f8383836126de565b505050565b61208e8282604051806020016040528060008152506126e3565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be906138b8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122b891906137bb565b60405180910390a3505050565b6122d0848484611e0d565b6122dc8484848461273e565b61231b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231290613818565b60405180910390fd5b50505050565b6060600b805461233090613d36565b80601f016020809104026020016040519081016040528092919081815260200182805461235c90613d36565b80156123a95780601f1061237e576101008083540402835291602001916123a9565b820191906000526020600020905b81548152906001019060200180831161238c57829003601f168201915b5050505050905090565b606060008214156123fb576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061255b565b600082905060005b6000821461242d57808061241690613d99565b915050600a826124269190613bc1565b9150612403565b60008167ffffffffffffffff81111561246f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124a15781602001600182028036833780820191505090505b5090505b60008514612554576001826124ba9190613c4c565b9150600a856124c99190613de2565b60306124d59190613b6b565b60f81b818381518110612511577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561254d9190613bc1565b94506124a5565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6125d58383836128d5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561261857612613816128da565b612657565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612656576126558382612923565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561269a5761269581612a90565b6126d9565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146126d8576126d78282612bd3565b5b5b505050565b505050565b6126ed8383612c52565b6126fa600084848461273e565b612739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273090613818565b60405180910390fd5b505050565b600061275f8473ffffffffffffffffffffffffffffffffffffffff16612e2c565b156128c8578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612788611c02565b8786866040518563ffffffff1660e01b81526004016127aa949392919061374d565b602060405180830381600087803b1580156127c457600080fd5b505af19250505080156127f557506040513d601f19601f820116820180604052508101906127f29190613224565b60015b612878573d8060008114612825576040519150601f19603f3d011682016040523d82523d6000602084013e61282a565b606091505b50600081511415612870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286790613818565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128cd565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612930846114a6565b61293a9190613c4c565b9050600060076000848152602001908152602001600020549050818114612a1f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612aa49190613c4c565b9050600060096000848152602001908152602001600020549050600060088381548110612afa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612b42577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612bb7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612bde836114a6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb990613958565b60405180910390fd5b612ccb81611c0a565b15612d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0290613878565b60405180910390fd5b612d17600083836125ca565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d679190613b6b565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612e28600083836126de565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054612e5b90613d36565b90600052602060002090601f016020900481019282612e7d5760008555612ec4565b82601f10612e9657805160ff1916838001178555612ec4565b82800160010185558215612ec4579182015b82811115612ec3578251825591602001919060010190612ea8565b5b509050612ed19190612ed5565b5090565b5b80821115612eee576000816000905550600101612ed6565b5090565b6000612f05612f0084613a78565b613a53565b905082815260208101848484011115612f1d57600080fd5b612f28848285613cf4565b509392505050565b6000612f43612f3e84613aa9565b613a53565b905082815260208101848484011115612f5b57600080fd5b612f66848285613cf4565b509392505050565b600081359050612f7d816143d6565b92915050565b600081359050612f92816143ed565b92915050565b600081359050612fa781614404565b92915050565b600081519050612fbc81614404565b92915050565b600082601f830112612fd357600080fd5b8135612fe3848260208601612ef2565b91505092915050565b600082601f830112612ffd57600080fd5b813561300d848260208601612f30565b91505092915050565b6000813590506130258161441b565b92915050565b60006020828403121561303d57600080fd5b600061304b84828501612f6e565b91505092915050565b6000806040838503121561306757600080fd5b600061307585828601612f6e565b925050602061308685828601612f6e565b9150509250929050565b6000806000606084860312156130a557600080fd5b60006130b386828701612f6e565b93505060206130c486828701612f6e565b92505060406130d586828701613016565b9150509250925092565b600080600080608085870312156130f557600080fd5b600061310387828801612f6e565b945050602061311487828801612f6e565b935050604061312587828801613016565b925050606085013567ffffffffffffffff81111561314257600080fd5b61314e87828801612fc2565b91505092959194509250565b6000806040838503121561316d57600080fd5b600061317b85828601612f6e565b925050602061318c85828601612f83565b9150509250929050565b600080604083850312156131a957600080fd5b60006131b785828601612f6e565b92505060206131c885828601613016565b9150509250929050565b6000602082840312156131e457600080fd5b60006131f284828501612f83565b91505092915050565b60006020828403121561320d57600080fd5b600061321b84828501612f98565b91505092915050565b60006020828403121561323657600080fd5b600061324484828501612fad565b91505092915050565b60006020828403121561325f57600080fd5b600082013567ffffffffffffffff81111561327957600080fd5b61328584828501612fec565b91505092915050565b6000602082840312156132a057600080fd5b60006132ae84828501613016565b91505092915050565b60006132c383836136e3565b60208301905092915050565b6132d881613c80565b82525050565b60006132e982613aff565b6132f38185613b2d565b93506132fe83613ada565b8060005b8381101561332f57815161331688826132b7565b975061332183613b20565b925050600181019050613302565b5085935050505092915050565b61334581613c92565b82525050565b600061335682613b0a565b6133608185613b3e565b9350613370818560208601613d03565b61337981613ecf565b840191505092915050565b600061338f82613b15565b6133998185613b4f565b93506133a9818560208601613d03565b6133b281613ecf565b840191505092915050565b60006133c882613b15565b6133d28185613b60565b93506133e2818560208601613d03565b80840191505092915050565b600081546133fb81613d36565b6134058186613b60565b94506001821660008114613420576001811461343157613464565b60ff19831686528186019350613464565b61343a85613aea565b60005b8381101561345c5781548189015260018201915060208101905061343d565b838801955050505b50505092915050565b600061347a602b83613b4f565b915061348582613ee0565b604082019050919050565b600061349d603283613b4f565b91506134a882613f2f565b604082019050919050565b60006134c0602683613b4f565b91506134cb82613f7e565b604082019050919050565b60006134e3602583613b4f565b91506134ee82613fcd565b604082019050919050565b6000613506601c83613b4f565b91506135118261401c565b602082019050919050565b6000613529602483613b4f565b915061353482614045565b604082019050919050565b600061354c601983613b4f565b915061355782614094565b602082019050919050565b600061356f602c83613b4f565b915061357a826140bd565b604082019050919050565b6000613592603883613b4f565b915061359d8261410c565b604082019050919050565b60006135b5602a83613b4f565b91506135c08261415b565b604082019050919050565b60006135d8602983613b4f565b91506135e3826141aa565b604082019050919050565b60006135fb602083613b4f565b9150613606826141f9565b602082019050919050565b600061361e602c83613b4f565b915061362982614222565b604082019050919050565b6000613641602083613b4f565b915061364c82614271565b602082019050919050565b6000613664602f83613b4f565b915061366f8261429a565b604082019050919050565b6000613687602183613b4f565b9150613692826142e9565b604082019050919050565b60006136aa603183613b4f565b91506136b582614338565b604082019050919050565b60006136cd602c83613b4f565b91506136d882614387565b604082019050919050565b6136ec81613cea565b82525050565b6136fb81613cea565b82525050565b600061370d82866133bd565b915061371982856133bd565b915061372582846133ee565b9150819050949350505050565b600060208201905061374760008301846132cf565b92915050565b600060808201905061376260008301876132cf565b61376f60208301866132cf565b61377c60408301856136f2565b818103606083015261378e818461334b565b905095945050505050565b600060208201905081810360008301526137b381846132de565b905092915050565b60006020820190506137d0600083018461333c565b92915050565b600060208201905081810360008301526137f08184613384565b905092915050565b600060208201905081810360008301526138118161346d565b9050919050565b6000602082019050818103600083015261383181613490565b9050919050565b60006020820190508181036000830152613851816134b3565b9050919050565b60006020820190508181036000830152613871816134d6565b9050919050565b60006020820190508181036000830152613891816134f9565b9050919050565b600060208201905081810360008301526138b18161351c565b9050919050565b600060208201905081810360008301526138d18161353f565b9050919050565b600060208201905081810360008301526138f181613562565b9050919050565b6000602082019050818103600083015261391181613585565b9050919050565b60006020820190508181036000830152613931816135a8565b9050919050565b60006020820190508181036000830152613951816135cb565b9050919050565b60006020820190508181036000830152613971816135ee565b9050919050565b6000602082019050818103600083015261399181613611565b9050919050565b600060208201905081810360008301526139b181613634565b9050919050565b600060208201905081810360008301526139d181613657565b9050919050565b600060208201905081810360008301526139f18161367a565b9050919050565b60006020820190508181036000830152613a118161369d565b9050919050565b60006020820190508181036000830152613a31816136c0565b9050919050565b6000602082019050613a4d60008301846136f2565b92915050565b6000613a5d613a6e565b9050613a698282613d68565b919050565b6000604051905090565b600067ffffffffffffffff821115613a9357613a92613ea0565b5b613a9c82613ecf565b9050602081019050919050565b600067ffffffffffffffff821115613ac457613ac3613ea0565b5b613acd82613ecf565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b7682613cea565b9150613b8183613cea565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bb657613bb5613e13565b5b828201905092915050565b6000613bcc82613cea565b9150613bd783613cea565b925082613be757613be6613e42565b5b828204905092915050565b6000613bfd82613cea565b9150613c0883613cea565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c4157613c40613e13565b5b828202905092915050565b6000613c5782613cea565b9150613c6283613cea565b925082821015613c7557613c74613e13565b5b828203905092915050565b6000613c8b82613cca565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d21578082015181840152602081019050613d06565b83811115613d30576000848401525b50505050565b60006002820490506001821680613d4e57607f821691505b60208210811415613d6257613d61613e71565b5b50919050565b613d7182613ecf565b810181811067ffffffffffffffff82111715613d9057613d8f613ea0565b5b80604052505050565b6000613da482613cea565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dd757613dd6613e13565b5b600182019050919050565b6000613ded82613cea565b9150613df883613cea565b925082613e0857613e07613e42565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6143df81613c80565b81146143ea57600080fd5b50565b6143f681613c92565b811461440157600080fd5b50565b61440d81613c9e565b811461441857600080fd5b50565b61442481613cea565b811461442f57600080fd5b5056fea2646970667358221220bc3f13f81b89882f1a9c257f8e857cebaa9dece4181e005b6b67c407fff60a7764736f6c63430008010033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000014576f6e64657247616d65204d6574617665727365000000000000000000000000000000000000000000000000000000000000000000000000000000000000000357474d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d634d4a6670614d377a6b41356f6662416d61534d7a52505a57513270396a4e734d4e6576744c33576e7937742f00000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): WonderGame Metaverse
Arg [1] : _symbol (string): WGM
Arg [2] : _initBaseURI (string): ipfs://QmcMJfpaM7zkA5ofbAmaSMzRPZWQ2p9jNsMNevtL3Wny7t/
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [4] : 576f6e64657247616d65204d6574617665727365000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 57474d0000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d634d4a6670614d377a6b41356f6662416d61534d7a5250
Arg [9] : 5a57513270396a4e734d4e6576744c33576e7937742f00000000000000000000
Deployed Bytecode Sourcemap
46213:2809:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39959:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48620:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26725:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28285:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27808:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46376:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40599:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46450:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29035:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40267:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48799:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48905:114;;;:::i;:::-;;46874:501;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29445:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47381:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48180:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48699:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40789:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48388:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46487:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26419:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46308:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26149:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4889:103;;;;;;;;;;;;;:::i;:::-;;48266:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4238:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26894:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28578:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29701:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46334:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47735:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46413:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46518:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48492:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28804:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5147:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39959:224;40061:4;40100:35;40085:50;;;:11;:50;;;;:90;;;;40139:36;40163:11;40139:23;:36::i;:::-;40085:90;40078:97;;39959:224;;;:::o;48620:73::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48681:6:::1;48672;;:15;;;;;;;;;;;;;;;;;;48620:73:::0;:::o;26725:100::-;26779:13;26812:5;26805:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26725:100;:::o;28285:221::-;28361:7;28389:16;28397:7;28389;:16::i;:::-;28381:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28474:15;:24;28490:7;28474:24;;;;;;;;;;;;;;;;;;;;;28467:31;;28285:221;;;:::o;27808:411::-;27889:13;27905:23;27920:7;27905:14;:23::i;:::-;27889:39;;27953:5;27947:11;;:2;:11;;;;27939:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;28047:5;28031:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28056:37;28073:5;28080:12;:10;:12::i;:::-;28056:16;:37::i;:::-;28031:62;28009:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28190:21;28199:2;28203:7;28190:8;:21::i;:::-;27808:411;;;:::o;46376:32::-;;;;:::o;40599:113::-;40660:7;40687:10;:17;;;;40680:24;;40599:113;:::o;46450:32::-;;;;:::o;29035:339::-;29230:41;29249:12;:10;:12::i;:::-;29263:7;29230:18;:41::i;:::-;29222:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29338:28;29348:4;29354:2;29358:7;29338:9;:28::i;:::-;29035:339;;;:::o;40267:256::-;40364:7;40400:23;40417:5;40400:16;:23::i;:::-;40392:5;:31;40384:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;40489:12;:19;40502:5;40489:19;;;;;;;;;;;;;;;:26;40509:5;40489:26;;;;;;;;;;;;40482:33;;40267:256;;;;:::o;48799:100::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48888:5:::1;48867:11;:18;48879:5;48867:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;48799:100:::0;:::o;48905:114::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48973:10:::1;48965:24;;:47;48990:21;48965:47;;;;;;;;;;;;;;;;;;;;;;;48957:56;;;::::0;::::1;;48905:114::o:0;46874:501::-;46944:14;46961:13;:11;:13::i;:::-;46944:30;;46990:6;;;;;;;;;;;46989:7;46981:16;;;;;;47026:1;47012:11;:15;47004:24;;;;;;47058:13;;47043:11;:28;;47035:37;;;;;;47111:9;;47096:11;47087:6;:20;;;;:::i;:::-;:33;;47079:42;;;;;;47148:7;:5;:7::i;:::-;47134:21;;:10;:21;;;47130:146;;47198:4;47171:31;;:11;:23;47183:10;47171:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;47168:101;;47245:11;47238:4;;:18;;;;:::i;:::-;47225:9;:31;;47217:40;;;;;;47168:101;47130:146;47289:9;47301:1;47289:13;;47284:86;47309:11;47304:1;:16;47284:86;;47336:26;47346:3;47360:1;47351:6;:10;;;;:::i;:::-;47336:9;:26::i;:::-;47322:3;;;;;:::i;:::-;;;;47284:86;;;;46874:501;;;:::o;29445:185::-;29583:39;29600:4;29606:2;29610:7;29583:39;;;;;;;;;;;;:16;:39::i;:::-;29445:185;;;:::o;47381:348::-;47456:16;47484:23;47510:17;47520:6;47510:9;:17::i;:::-;47484:43;;47534:25;47576:15;47562:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47534:58;;47604:9;47599:103;47619:15;47615:1;:19;47599:103;;;47664:30;47684:6;47692:1;47664:19;:30::i;:::-;47650:8;47659:1;47650:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;47636:3;;;;;:::i;:::-;;;;47599:103;;;;47715:8;47708:15;;;;47381:348;;;:::o;48180:80::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48246:8:::1;48239:4;:15;;;;48180:80:::0;:::o;48699:93::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48782:4:::1;48761:11;:18;48773:5;48761:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;48699:93:::0;:::o;40789:233::-;40864:7;40900:30;:28;:30::i;:::-;40892:5;:38;40884:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;40997:10;41008:5;40997:17;;;;;;;;;;;;;;;;;;;;;;;;40990:24;;40789:233;;;:::o;48388:98::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48469:11:::1;48459:7;:21;;;;;;;;;;;;:::i;:::-;;48388:98:::0;:::o;46487:26::-;;;;;;;;;;;;;:::o;26419:239::-;26491:7;26511:13;26527:7;:16;26535:7;26527:16;;;;;;;;;;;;;;;;;;;;;26511:32;;26579:1;26562:19;;:5;:19;;;;26554:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26645:5;26638:12;;;26419:239;;;:::o;46308:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26149:208::-;26221:7;26266:1;26249:19;;:5;:19;;;;26241:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26333:9;:16;26343:5;26333:16;;;;;;;;;;;;;;;;26326:23;;26149:208;;;:::o;4889:103::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4954:30:::1;4981:1;4954:18;:30::i;:::-;4889:103::o:0;48266:116::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48359:17:::1;48343:13;:33;;;;48266:116:::0;:::o;4238:87::-;4284:7;4311:6;;;;;;;;;;;4304:13;;4238:87;:::o;26894:104::-;26950:13;26983:7;26976:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26894:104;:::o;28578:155::-;28673:52;28692:12;:10;:12::i;:::-;28706:8;28716;28673:18;:52::i;:::-;28578:155;;:::o;29701:328::-;29876:41;29895:12;:10;:12::i;:::-;29909:7;29876:18;:41::i;:::-;29868:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29982:39;29996:4;30002:2;30006:7;30015:5;29982:13;:39::i;:::-;29701:328;;;;:::o;46334:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47735:423::-;47833:13;47874:16;47882:7;47874;:16::i;:::-;47858:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;47964:28;47995:10;:8;:10::i;:::-;47964:41;;48050:1;48025:14;48019:28;:32;:133;;;;;;;;;;;;;;;;;48087:14;48103:18;:7;:16;:18::i;:::-;48123:13;48070:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48019:133;48012:140;;;47735:423;;;:::o;46413:32::-;;;;:::o;46518:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;48492:122::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48591:17:::1;48575:13;:33;;;;;;;;;;;;:::i;:::-;;48492:122:::0;:::o;28804:164::-;28901:4;28925:18;:25;28944:5;28925:25;;;;;;;;;;;;;;;:35;28951:8;28925:35;;;;;;;;;;;;;;;;;;;;;;;;;28918:42;;28804:164;;;;:::o;5147:201::-;4469:12;:10;:12::i;:::-;4458:23;;:7;:5;:7::i;:::-;:23;;;4450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5256:1:::1;5236:22;;:8;:22;;;;5228:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5312:28;5331:8;5312:18;:28::i;:::-;5147:201:::0;:::o;25780:305::-;25882:4;25934:25;25919:40;;;:11;:40;;;;:105;;;;25991:33;25976:48;;;:11;:48;;;;25919:105;:158;;;;26041:36;26065:11;26041:23;:36::i;:::-;25919:158;25899:178;;25780:305;;;:::o;2909:98::-;2962:7;2989:10;2982:17;;2909:98;:::o;31539:127::-;31604:4;31656:1;31628:30;;:7;:16;31636:7;31628:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31621:37;;31539:127;;;:::o;35685:174::-;35787:2;35760:15;:24;35776:7;35760:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35843:7;35839:2;35805:46;;35814:23;35829:7;35814:14;:23::i;:::-;35805:46;;;;;;;;;;;;35685:174;;:::o;31833:348::-;31926:4;31951:16;31959:7;31951;:16::i;:::-;31943:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32027:13;32043:23;32058:7;32043:14;:23::i;:::-;32027:39;;32096:5;32085:16;;:7;:16;;;:51;;;;32129:7;32105:31;;:20;32117:7;32105:11;:20::i;:::-;:31;;;32085:51;:87;;;;32140:32;32157:5;32164:7;32140:16;:32::i;:::-;32085:87;32077:96;;;31833:348;;;;:::o;34942:625::-;35101:4;35074:31;;:23;35089:7;35074:14;:23::i;:::-;:31;;;35066:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35180:1;35166:16;;:2;:16;;;;35158:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35236:39;35257:4;35263:2;35267:7;35236:20;:39::i;:::-;35340:29;35357:1;35361:7;35340:8;:29::i;:::-;35401:1;35382:9;:15;35392:4;35382:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35430:1;35413:9;:13;35423:2;35413:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35461:2;35442:7;:16;35450:7;35442:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35500:7;35496:2;35481:27;;35490:4;35481:27;;;;;;;;;;;;35521:38;35541:4;35547:2;35551:7;35521:19;:38::i;:::-;34942:625;;;:::o;32523:110::-;32599:26;32609:2;32613:7;32599:26;;;;;;;;;;;;:9;:26::i;:::-;32523:110;;:::o;5508:191::-;5582:16;5601:6;;;;;;;;;;;5582:25;;5627:8;5618:6;;:17;;;;;;;;;;;;;;;;;;5682:8;5651:40;;5672:8;5651:40;;;;;;;;;;;;5508:191;;:::o;36001:315::-;36156:8;36147:17;;:5;:17;;;;36139:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36243:8;36205:18;:25;36224:5;36205:25;;;;;;;;;;;;;;;:35;36231:8;36205:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36289:8;36267:41;;36282:5;36267:41;;;36299:8;36267:41;;;;;;:::i;:::-;;;;;;;;36001:315;;;:::o;30911:::-;31068:28;31078:4;31084:2;31088:7;31068:9;:28::i;:::-;31115:48;31138:4;31144:2;31148:7;31157:5;31115:22;:48::i;:::-;31107:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30911:315;;;;:::o;46753:102::-;46813:13;46842:7;46835:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46753:102;:::o;418:723::-;474:13;704:1;695:5;:10;691:53;;;722:10;;;;;;;;;;;;;;;;;;;;;691:53;754:12;769:5;754:20;;785:14;810:78;825:1;817:4;:9;810:78;;843:8;;;;;:::i;:::-;;;;874:2;866:10;;;;;:::i;:::-;;;810:78;;;898:19;930:6;920:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;898:39;;948:154;964:1;955:5;:10;948:154;;992:1;982:11;;;;;:::i;:::-;;;1059:2;1051:5;:10;;;;:::i;:::-;1038:2;:24;;;;:::i;:::-;1025:39;;1008:6;1015;1008:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1088:2;1079:11;;;;;:::i;:::-;;;948:154;;;1126:6;1112:21;;;;;418:723;;;;:::o;17242:157::-;17327:4;17366:25;17351:40;;;:11;:40;;;;17344:47;;17242:157;;;:::o;41635:589::-;41779:45;41806:4;41812:2;41816:7;41779:26;:45::i;:::-;41857:1;41841:18;;:4;:18;;;41837:187;;;41876:40;41908:7;41876:31;:40::i;:::-;41837:187;;;41946:2;41938:10;;:4;:10;;;41934:90;;41965:47;41998:4;42004:7;41965:32;:47::i;:::-;41934:90;41837:187;42052:1;42038:16;;:2;:16;;;42034:183;;;42071:45;42108:7;42071:36;:45::i;:::-;42034:183;;;42144:4;42138:10;;:2;:10;;;42134:83;;42165:40;42193:2;42197:7;42165:27;:40::i;:::-;42134:83;42034:183;41635:589;;;:::o;38763:125::-;;;;:::o;32860:321::-;32990:18;32996:2;33000:7;32990:5;:18::i;:::-;33041:54;33072:1;33076:2;33080:7;33089:5;33041:22;:54::i;:::-;33019:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32860:321;;;:::o;36881:799::-;37036:4;37057:15;:2;:13;;;:15::i;:::-;37053:620;;;37109:2;37093:36;;;37130:12;:10;:12::i;:::-;37144:4;37150:7;37159:5;37093:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;37089:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37352:1;37335:6;:13;:18;37331:272;;;37378:60;;;;;;;;;;:::i;:::-;;;;;;;;37331:272;37553:6;37547:13;37538:6;37534:2;37530:15;37523:38;37089:529;37226:41;;;37216:51;;;:6;:51;;;;37209:58;;;;;37053:620;37657:4;37650:11;;36881:799;;;;;;;:::o;38252:126::-;;;;:::o;42947:164::-;43051:10;:17;;;;43024:15;:24;43040:7;43024:24;;;;;;;;;;;:44;;;;43079:10;43095:7;43079:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42947:164;:::o;43738:988::-;44004:22;44054:1;44029:22;44046:4;44029:16;:22::i;:::-;:26;;;;:::i;:::-;44004:51;;44066:18;44087:17;:26;44105:7;44087:26;;;;;;;;;;;;44066:47;;44234:14;44220:10;:28;44216:328;;44265:19;44287:12;:18;44300:4;44287:18;;;;;;;;;;;;;;;:34;44306:14;44287:34;;;;;;;;;;;;44265:56;;44371:11;44338:12;:18;44351:4;44338:18;;;;;;;;;;;;;;;:30;44357:10;44338:30;;;;;;;;;;;:44;;;;44488:10;44455:17;:30;44473:11;44455:30;;;;;;;;;;;:43;;;;44216:328;;44640:17;:26;44658:7;44640:26;;;;;;;;;;;44633:33;;;44684:12;:18;44697:4;44684:18;;;;;;;;;;;;;;;:34;44703:14;44684:34;;;;;;;;;;;44677:41;;;43738:988;;;;:::o;45021:1079::-;45274:22;45319:1;45299:10;:17;;;;:21;;;;:::i;:::-;45274:46;;45331:18;45352:15;:24;45368:7;45352:24;;;;;;;;;;;;45331:45;;45703:19;45725:10;45736:14;45725:26;;;;;;;;;;;;;;;;;;;;;;;;45703:48;;45789:11;45764:10;45775;45764:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;45900:10;45869:15;:28;45885:11;45869:28;;;;;;;;;;;:41;;;;46041:15;:24;46057:7;46041:24;;;;;;;;;;;46034:31;;;46076:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45021:1079;;;;:::o;42525:221::-;42610:14;42627:20;42644:2;42627:16;:20::i;:::-;42610:37;;42685:7;42658:12;:16;42671:2;42658:16;;;;;;;;;;;;;;;:24;42675:6;42658:24;;;;;;;;;;;:34;;;;42732:6;42703:17;:26;42721:7;42703:26;;;;;;;;;;;:35;;;;42525:221;;;:::o;33517:439::-;33611:1;33597:16;;:2;:16;;;;33589:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33670:16;33678:7;33670;:16::i;:::-;33669:17;33661:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33732:45;33761:1;33765:2;33769:7;33732:20;:45::i;:::-;33807:1;33790:9;:13;33800:2;33790:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33838:2;33819:7;:16;33827:7;33819:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33883:7;33879:2;33858:33;;33875:1;33858:33;;;;;;;;;;;;33904:44;33932:1;33936:2;33940:7;33904:19;:44::i;:::-;33517:439;;:::o;6992:326::-;7052:4;7309:1;7287:7;:19;;;:23;7280:30;;6992:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;;;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;;;;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;;;;;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;;;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;;;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:256::-;;4988:2;4976:9;4967:7;4963:23;4959:32;4956:2;;;5004:1;5001;4994:12;4956:2;5047:1;5072:50;5114:7;5105:6;5094:9;5090:22;5072:50;:::i;:::-;5062:60;;5018:114;4946:193;;;;:::o;5145:260::-;;5252:2;5240:9;5231:7;5227:23;5223:32;5220:2;;;5268:1;5265;5258:12;5220:2;5311:1;5336:52;5380:7;5371:6;5360:9;5356:22;5336:52;:::i;:::-;5326:62;;5282:116;5210:195;;;;:::o;5411:282::-;;5529:2;5517:9;5508:7;5504:23;5500:32;5497:2;;;5545:1;5542;5535:12;5497:2;5588:1;5613:63;5668:7;5659:6;5648:9;5644:22;5613:63;:::i;:::-;5603:73;;5559:127;5487:206;;;;:::o;5699:375::-;;5817:2;5805:9;5796:7;5792:23;5788:32;5785:2;;;5833:1;5830;5823:12;5785:2;5904:1;5893:9;5889:17;5876:31;5934:18;5926:6;5923:30;5920:2;;;5966:1;5963;5956:12;5920:2;5994:63;6049:7;6040:6;6029:9;6025:22;5994:63;:::i;:::-;5984:73;;5847:220;5775:299;;;;:::o;6080:262::-;;6188:2;6176:9;6167:7;6163:23;6159:32;6156:2;;;6204:1;6201;6194:12;6156:2;6247:1;6272:53;6317:7;6308:6;6297:9;6293:22;6272:53;:::i;:::-;6262:63;;6218:117;6146:196;;;;:::o;6348:179::-;;6438:46;6480:3;6472:6;6438:46;:::i;:::-;6516:4;6511:3;6507:14;6493:28;;6428:99;;;;:::o;6533:118::-;6620:24;6638:5;6620:24;:::i;:::-;6615:3;6608:37;6598:53;;:::o;6687:732::-;;6835:54;6883:5;6835:54;:::i;:::-;6905:86;6984:6;6979:3;6905:86;:::i;:::-;6898:93;;7015:56;7065:5;7015:56;:::i;:::-;7094:7;7125:1;7110:284;7135:6;7132:1;7129:13;7110:284;;;7211:6;7205:13;7238:63;7297:3;7282:13;7238:63;:::i;:::-;7231:70;;7324:60;7377:6;7324:60;:::i;:::-;7314:70;;7170:224;7157:1;7154;7150:9;7145:14;;7110:284;;;7114:14;7410:3;7403:10;;6811:608;;;;;;;:::o;7425:109::-;7506:21;7521:5;7506:21;:::i;:::-;7501:3;7494:34;7484:50;;:::o;7540:360::-;;7654:38;7686:5;7654:38;:::i;:::-;7708:70;7771:6;7766:3;7708:70;:::i;:::-;7701:77;;7787:52;7832:6;7827:3;7820:4;7813:5;7809:16;7787:52;:::i;:::-;7864:29;7886:6;7864:29;:::i;:::-;7859:3;7855:39;7848:46;;7630:270;;;;;:::o;7906:364::-;;8022:39;8055:5;8022:39;:::i;:::-;8077:71;8141:6;8136:3;8077:71;:::i;:::-;8070:78;;8157:52;8202:6;8197:3;8190:4;8183:5;8179:16;8157:52;:::i;:::-;8234:29;8256:6;8234:29;:::i;:::-;8229:3;8225:39;8218:46;;7998:272;;;;;:::o;8276:377::-;;8410:39;8443:5;8410:39;:::i;:::-;8465:89;8547:6;8542:3;8465:89;:::i;:::-;8458:96;;8563:52;8608:6;8603:3;8596:4;8589:5;8585:16;8563:52;:::i;:::-;8640:6;8635:3;8631:16;8624:23;;8386:267;;;;;:::o;8683:845::-;;8823:5;8817:12;8852:36;8878:9;8852:36;:::i;:::-;8904:89;8986:6;8981:3;8904:89;:::i;:::-;8897:96;;9024:1;9013:9;9009:17;9040:1;9035:137;;;;9186:1;9181:341;;;;9002:520;;9035:137;9119:4;9115:9;9104;9100:25;9095:3;9088:38;9155:6;9150:3;9146:16;9139:23;;9035:137;;9181:341;9248:38;9280:5;9248:38;:::i;:::-;9308:1;9322:154;9336:6;9333:1;9330:13;9322:154;;;9410:7;9404:14;9400:1;9395:3;9391:11;9384:35;9460:1;9451:7;9447:15;9436:26;;9358:4;9355:1;9351:12;9346:17;;9322:154;;;9505:6;9500:3;9496:16;9489:23;;9188:334;;9002:520;;8790:738;;;;;;:::o;9534:366::-;;9697:67;9761:2;9756:3;9697:67;:::i;:::-;9690:74;;9773:93;9862:3;9773:93;:::i;:::-;9891:2;9886:3;9882:12;9875:19;;9680:220;;;:::o;9906:366::-;;10069:67;10133:2;10128:3;10069:67;:::i;:::-;10062:74;;10145:93;10234:3;10145:93;:::i;:::-;10263:2;10258:3;10254:12;10247:19;;10052:220;;;:::o;10278:366::-;;10441:67;10505:2;10500:3;10441:67;:::i;:::-;10434:74;;10517:93;10606:3;10517:93;:::i;:::-;10635:2;10630:3;10626:12;10619:19;;10424:220;;;:::o;10650:366::-;;10813:67;10877:2;10872:3;10813:67;:::i;:::-;10806:74;;10889:93;10978:3;10889:93;:::i;:::-;11007:2;11002:3;10998:12;10991:19;;10796:220;;;:::o;11022:366::-;;11185:67;11249:2;11244:3;11185:67;:::i;:::-;11178:74;;11261:93;11350:3;11261:93;:::i;:::-;11379:2;11374:3;11370:12;11363:19;;11168:220;;;:::o;11394:366::-;;11557:67;11621:2;11616:3;11557:67;:::i;:::-;11550:74;;11633:93;11722:3;11633:93;:::i;:::-;11751:2;11746:3;11742:12;11735:19;;11540:220;;;:::o;11766:366::-;;11929:67;11993:2;11988:3;11929:67;:::i;:::-;11922:74;;12005:93;12094:3;12005:93;:::i;:::-;12123:2;12118:3;12114:12;12107:19;;11912:220;;;:::o;12138:366::-;;12301:67;12365:2;12360:3;12301:67;:::i;:::-;12294:74;;12377:93;12466:3;12377:93;:::i;:::-;12495:2;12490:3;12486:12;12479:19;;12284:220;;;:::o;12510:366::-;;12673:67;12737:2;12732:3;12673:67;:::i;:::-;12666:74;;12749:93;12838:3;12749:93;:::i;:::-;12867:2;12862:3;12858:12;12851:19;;12656:220;;;:::o;12882:366::-;;13045:67;13109:2;13104:3;13045:67;:::i;:::-;13038:74;;13121:93;13210:3;13121:93;:::i;:::-;13239:2;13234:3;13230:12;13223:19;;13028:220;;;:::o;13254:366::-;;13417:67;13481:2;13476:3;13417:67;:::i;:::-;13410:74;;13493:93;13582:3;13493:93;:::i;:::-;13611:2;13606:3;13602:12;13595:19;;13400:220;;;:::o;13626:366::-;;13789:67;13853:2;13848:3;13789:67;:::i;:::-;13782:74;;13865:93;13954:3;13865:93;:::i;:::-;13983:2;13978:3;13974:12;13967:19;;13772:220;;;:::o;13998:366::-;;14161:67;14225:2;14220:3;14161:67;:::i;:::-;14154:74;;14237:93;14326:3;14237:93;:::i;:::-;14355:2;14350:3;14346:12;14339:19;;14144:220;;;:::o;14370:366::-;;14533:67;14597:2;14592:3;14533:67;:::i;:::-;14526:74;;14609:93;14698:3;14609:93;:::i;:::-;14727:2;14722:3;14718:12;14711:19;;14516:220;;;:::o;14742:366::-;;14905:67;14969:2;14964:3;14905:67;:::i;:::-;14898:74;;14981:93;15070:3;14981:93;:::i;:::-;15099:2;15094:3;15090:12;15083:19;;14888:220;;;:::o;15114:366::-;;15277:67;15341:2;15336:3;15277:67;:::i;:::-;15270:74;;15353:93;15442:3;15353:93;:::i;:::-;15471:2;15466:3;15462:12;15455:19;;15260:220;;;:::o;15486:366::-;;15649:67;15713:2;15708:3;15649:67;:::i;:::-;15642:74;;15725:93;15814:3;15725:93;:::i;:::-;15843:2;15838:3;15834:12;15827:19;;15632:220;;;:::o;15858:366::-;;16021:67;16085:2;16080:3;16021:67;:::i;:::-;16014:74;;16097:93;16186:3;16097:93;:::i;:::-;16215:2;16210:3;16206:12;16199:19;;16004:220;;;:::o;16230:108::-;16307:24;16325:5;16307:24;:::i;:::-;16302:3;16295:37;16285:53;;:::o;16344:118::-;16431:24;16449:5;16431:24;:::i;:::-;16426:3;16419:37;16409:53;;:::o;16468:589::-;;16715:95;16806:3;16797:6;16715:95;:::i;:::-;16708:102;;16827:95;16918:3;16909:6;16827:95;:::i;:::-;16820:102;;16939:92;17027:3;17018:6;16939:92;:::i;:::-;16932:99;;17048:3;17041:10;;16697:360;;;;;;:::o;17063:222::-;;17194:2;17183:9;17179:18;17171:26;;17207:71;17275:1;17264:9;17260:17;17251:6;17207:71;:::i;:::-;17161:124;;;;:::o;17291:640::-;;17524:3;17513:9;17509:19;17501:27;;17538:71;17606:1;17595:9;17591:17;17582:6;17538:71;:::i;:::-;17619:72;17687:2;17676:9;17672:18;17663:6;17619:72;:::i;:::-;17701;17769:2;17758:9;17754:18;17745:6;17701:72;:::i;:::-;17820:9;17814:4;17810:20;17805:2;17794:9;17790:18;17783:48;17848:76;17919:4;17910:6;17848:76;:::i;:::-;17840:84;;17491:440;;;;;;;:::o;17937:373::-;;18118:2;18107:9;18103:18;18095:26;;18167:9;18161:4;18157:20;18153:1;18142:9;18138:17;18131:47;18195:108;18298:4;18289:6;18195:108;:::i;:::-;18187:116;;18085:225;;;;:::o;18316:210::-;;18441:2;18430:9;18426:18;18418:26;;18454:65;18516:1;18505:9;18501:17;18492:6;18454:65;:::i;:::-;18408:118;;;;:::o;18532:313::-;;18683:2;18672:9;18668:18;18660:26;;18732:9;18726:4;18722:20;18718:1;18707:9;18703:17;18696:47;18760:78;18833:4;18824:6;18760:78;:::i;:::-;18752:86;;18650:195;;;;:::o;18851:419::-;;19055:2;19044:9;19040:18;19032:26;;19104:9;19098:4;19094:20;19090:1;19079:9;19075:17;19068:47;19132:131;19258:4;19132:131;:::i;:::-;19124:139;;19022:248;;;:::o;19276:419::-;;19480:2;19469:9;19465:18;19457:26;;19529:9;19523:4;19519:20;19515:1;19504:9;19500:17;19493:47;19557:131;19683:4;19557:131;:::i;:::-;19549:139;;19447:248;;;:::o;19701:419::-;;19905:2;19894:9;19890:18;19882:26;;19954:9;19948:4;19944:20;19940:1;19929:9;19925:17;19918:47;19982:131;20108:4;19982:131;:::i;:::-;19974:139;;19872:248;;;:::o;20126:419::-;;20330:2;20319:9;20315:18;20307:26;;20379:9;20373:4;20369:20;20365:1;20354:9;20350:17;20343:47;20407:131;20533:4;20407:131;:::i;:::-;20399:139;;20297:248;;;:::o;20551:419::-;;20755:2;20744:9;20740:18;20732:26;;20804:9;20798:4;20794:20;20790:1;20779:9;20775:17;20768:47;20832:131;20958:4;20832:131;:::i;:::-;20824:139;;20722:248;;;:::o;20976:419::-;;21180:2;21169:9;21165:18;21157:26;;21229:9;21223:4;21219:20;21215:1;21204:9;21200:17;21193:47;21257:131;21383:4;21257:131;:::i;:::-;21249:139;;21147:248;;;:::o;21401:419::-;;21605:2;21594:9;21590:18;21582:26;;21654:9;21648:4;21644:20;21640:1;21629:9;21625:17;21618:47;21682:131;21808:4;21682:131;:::i;:::-;21674:139;;21572:248;;;:::o;21826:419::-;;22030:2;22019:9;22015:18;22007:26;;22079:9;22073:4;22069:20;22065:1;22054:9;22050:17;22043:47;22107:131;22233:4;22107:131;:::i;:::-;22099:139;;21997:248;;;:::o;22251:419::-;;22455:2;22444:9;22440:18;22432:26;;22504:9;22498:4;22494:20;22490:1;22479:9;22475:17;22468:47;22532:131;22658:4;22532:131;:::i;:::-;22524:139;;22422:248;;;:::o;22676:419::-;;22880:2;22869:9;22865:18;22857:26;;22929:9;22923:4;22919:20;22915:1;22904:9;22900:17;22893:47;22957:131;23083:4;22957:131;:::i;:::-;22949:139;;22847:248;;;:::o;23101:419::-;;23305:2;23294:9;23290:18;23282:26;;23354:9;23348:4;23344:20;23340:1;23329:9;23325:17;23318:47;23382:131;23508:4;23382:131;:::i;:::-;23374:139;;23272:248;;;:::o;23526:419::-;;23730:2;23719:9;23715:18;23707:26;;23779:9;23773:4;23769:20;23765:1;23754:9;23750:17;23743:47;23807:131;23933:4;23807:131;:::i;:::-;23799:139;;23697:248;;;:::o;23951:419::-;;24155:2;24144:9;24140:18;24132:26;;24204:9;24198:4;24194:20;24190:1;24179:9;24175:17;24168:47;24232:131;24358:4;24232:131;:::i;:::-;24224:139;;24122:248;;;:::o;24376:419::-;;24580:2;24569:9;24565:18;24557:26;;24629:9;24623:4;24619:20;24615:1;24604:9;24600:17;24593:47;24657:131;24783:4;24657:131;:::i;:::-;24649:139;;24547:248;;;:::o;24801:419::-;;25005:2;24994:9;24990:18;24982:26;;25054:9;25048:4;25044:20;25040:1;25029:9;25025:17;25018:47;25082:131;25208:4;25082:131;:::i;:::-;25074:139;;24972:248;;;:::o;25226:419::-;;25430:2;25419:9;25415:18;25407:26;;25479:9;25473:4;25469:20;25465:1;25454:9;25450:17;25443:47;25507:131;25633:4;25507:131;:::i;:::-;25499:139;;25397:248;;;:::o;25651:419::-;;25855:2;25844:9;25840:18;25832:26;;25904:9;25898:4;25894:20;25890:1;25879:9;25875:17;25868:47;25932:131;26058:4;25932:131;:::i;:::-;25924:139;;25822:248;;;:::o;26076:419::-;;26280:2;26269:9;26265:18;26257:26;;26329:9;26323:4;26319:20;26315:1;26304:9;26300:17;26293:47;26357:131;26483:4;26357:131;:::i;:::-;26349:139;;26247:248;;;:::o;26501:222::-;;26632:2;26621:9;26617:18;26609:26;;26645:71;26713:1;26702:9;26698:17;26689:6;26645:71;:::i;:::-;26599:124;;;;:::o;26729:129::-;;26790:20;;:::i;:::-;26780:30;;26819:33;26847:4;26839:6;26819:33;:::i;:::-;26770:88;;;:::o;26864:75::-;;26930:2;26924:9;26914:19;;26904:35;:::o;26945:307::-;;27096:18;27088:6;27085:30;27082:2;;;27118:18;;:::i;:::-;27082:2;27156:29;27178:6;27156:29;:::i;:::-;27148:37;;27240:4;27234;27230:15;27222:23;;27011:241;;;:::o;27258:308::-;;27410:18;27402:6;27399:30;27396:2;;;27432:18;;:::i;:::-;27396:2;27470:29;27492:6;27470:29;:::i;:::-;27462:37;;27554:4;27548;27544:15;27536:23;;27325:241;;;:::o;27572:132::-;;27662:3;27654:11;;27692:4;27687:3;27683:14;27675:22;;27644:60;;;:::o;27710:141::-;;27782:3;27774:11;;27805:3;27802:1;27795:14;27839:4;27836:1;27826:18;27818:26;;27764:87;;;:::o;27857:114::-;;27958:5;27952:12;27942:22;;27931:40;;;:::o;27977:98::-;;28062:5;28056:12;28046:22;;28035:40;;;:::o;28081:99::-;;28167:5;28161:12;28151:22;;28140:40;;;:::o;28186:113::-;;28288:4;28283:3;28279:14;28271:22;;28261:38;;;:::o;28305:184::-;;28438:6;28433:3;28426:19;28478:4;28473:3;28469:14;28454:29;;28416:73;;;;:::o;28495:168::-;;28612:6;28607:3;28600:19;28652:4;28647:3;28643:14;28628:29;;28590:73;;;;:::o;28669:169::-;;28787:6;28782:3;28775:19;28827:4;28822:3;28818:14;28803:29;;28765:73;;;;:::o;28844:148::-;;28983:3;28968:18;;28958:34;;;;:::o;28998:305::-;;29057:20;29075:1;29057:20;:::i;:::-;29052:25;;29091:20;29109:1;29091:20;:::i;:::-;29086:25;;29245:1;29177:66;29173:74;29170:1;29167:81;29164:2;;;29251:18;;:::i;:::-;29164:2;29295:1;29292;29288:9;29281:16;;29042:261;;;;:::o;29309:185::-;;29366:20;29384:1;29366:20;:::i;:::-;29361:25;;29400:20;29418:1;29400:20;:::i;:::-;29395:25;;29439:1;29429:2;;29444:18;;:::i;:::-;29429:2;29486:1;29483;29479:9;29474:14;;29351:143;;;;:::o;29500:348::-;;29563:20;29581:1;29563:20;:::i;:::-;29558:25;;29597:20;29615:1;29597:20;:::i;:::-;29592:25;;29785:1;29717:66;29713:74;29710:1;29707:81;29702:1;29695:9;29688:17;29684:105;29681:2;;;29792:18;;:::i;:::-;29681:2;29840:1;29837;29833:9;29822:20;;29548:300;;;;:::o;29854:191::-;;29914:20;29932:1;29914:20;:::i;:::-;29909:25;;29948:20;29966:1;29948:20;:::i;:::-;29943:25;;29987:1;29984;29981:8;29978:2;;;29992:18;;:::i;:::-;29978:2;30037:1;30034;30030:9;30022:17;;29899:146;;;;:::o;30051:96::-;;30117:24;30135:5;30117:24;:::i;:::-;30106:35;;30096:51;;;:::o;30153:90::-;;30230:5;30223:13;30216:21;30205:32;;30195:48;;;:::o;30249:149::-;;30325:66;30318:5;30314:78;30303:89;;30293:105;;;:::o;30404:126::-;;30481:42;30474:5;30470:54;30459:65;;30449:81;;;:::o;30536:77::-;;30602:5;30591:16;;30581:32;;;:::o;30619:154::-;30703:6;30698:3;30693;30680:30;30765:1;30756:6;30751:3;30747:16;30740:27;30670:103;;;:::o;30779:307::-;30847:1;30857:113;30871:6;30868:1;30865:13;30857:113;;;30956:1;30951:3;30947:11;30941:18;30937:1;30932:3;30928:11;30921:39;30893:2;30890:1;30886:10;30881:15;;30857:113;;;30988:6;30985:1;30982:13;30979:2;;;31068:1;31059:6;31054:3;31050:16;31043:27;30979:2;30828:258;;;;:::o;31092:320::-;;31173:1;31167:4;31163:12;31153:22;;31220:1;31214:4;31210:12;31241:18;31231:2;;31297:4;31289:6;31285:17;31275:27;;31231:2;31359;31351:6;31348:14;31328:18;31325:38;31322:2;;;31378:18;;:::i;:::-;31322:2;31143:269;;;;:::o;31418:281::-;31501:27;31523:4;31501:27;:::i;:::-;31493:6;31489:40;31631:6;31619:10;31616:22;31595:18;31583:10;31580:34;31577:62;31574:2;;;31642:18;;:::i;:::-;31574:2;31682:10;31678:2;31671:22;31461:238;;;:::o;31705:233::-;;31767:24;31785:5;31767:24;:::i;:::-;31758:33;;31813:66;31806:5;31803:77;31800:2;;;31883:18;;:::i;:::-;31800:2;31930:1;31923:5;31919:13;31912:20;;31748:190;;;:::o;31944:176::-;;31993:20;32011:1;31993:20;:::i;:::-;31988:25;;32027:20;32045:1;32027:20;:::i;:::-;32022:25;;32066:1;32056:2;;32071:18;;:::i;:::-;32056:2;32112:1;32109;32105:9;32100:14;;31978:142;;;;:::o;32126:180::-;32174:77;32171:1;32164:88;32271:4;32268:1;32261:15;32295:4;32292:1;32285:15;32312:180;32360:77;32357:1;32350:88;32457:4;32454:1;32447:15;32481:4;32478:1;32471:15;32498:180;32546:77;32543:1;32536:88;32643:4;32640:1;32633:15;32667:4;32664:1;32657:15;32684:180;32732:77;32729:1;32722:88;32829:4;32826:1;32819:15;32853:4;32850:1;32843:15;32870:102;;32962:2;32958:7;32953:2;32946:5;32942:14;32938:28;32928:38;;32918:54;;;:::o;32978:230::-;33118:34;33114:1;33106:6;33102:14;33095:58;33187:13;33182:2;33174:6;33170:15;33163:38;33084:124;:::o;33214:237::-;33354:34;33350:1;33342:6;33338:14;33331:58;33423:20;33418:2;33410:6;33406:15;33399:45;33320:131;:::o;33457:225::-;33597:34;33593:1;33585:6;33581:14;33574:58;33666:8;33661:2;33653:6;33649:15;33642:33;33563:119;:::o;33688:224::-;33828:34;33824:1;33816:6;33812:14;33805:58;33897:7;33892:2;33884:6;33880:15;33873:32;33794:118;:::o;33918:178::-;34058:30;34054:1;34046:6;34042:14;34035:54;34024:72;:::o;34102:223::-;34242:34;34238:1;34230:6;34226:14;34219:58;34311:6;34306:2;34298:6;34294:15;34287:31;34208:117;:::o;34331:175::-;34471:27;34467:1;34459:6;34455:14;34448:51;34437:69;:::o;34512:231::-;34652:34;34648:1;34640:6;34636:14;34629:58;34721:14;34716:2;34708:6;34704:15;34697:39;34618:125;:::o;34749:243::-;34889:34;34885:1;34877:6;34873:14;34866:58;34958:26;34953:2;34945:6;34941:15;34934:51;34855:137;:::o;34998:229::-;35138:34;35134:1;35126:6;35122:14;35115:58;35207:12;35202:2;35194:6;35190:15;35183:37;35104:123;:::o;35233:228::-;35373:34;35369:1;35361:6;35357:14;35350:58;35442:11;35437:2;35429:6;35425:15;35418:36;35339:122;:::o;35467:182::-;35607:34;35603:1;35595:6;35591:14;35584:58;35573:76;:::o;35655:231::-;35795:34;35791:1;35783:6;35779:14;35772:58;35864:14;35859:2;35851:6;35847:15;35840:39;35761:125;:::o;35892:182::-;36032:34;36028:1;36020:6;36016:14;36009:58;35998:76;:::o;36080:234::-;36220:34;36216:1;36208:6;36204:14;36197:58;36289:17;36284:2;36276:6;36272:15;36265:42;36186:128;:::o;36320:220::-;36460:34;36456:1;36448:6;36444:14;36437:58;36529:3;36524:2;36516:6;36512:15;36505:28;36426:114;:::o;36546:236::-;36686:34;36682:1;36674:6;36670:14;36663:58;36755:19;36750:2;36742:6;36738:15;36731:44;36652:130;:::o;36788:231::-;36928:34;36924:1;36916:6;36912:14;36905:58;36997:14;36992:2;36984:6;36980:15;36973:39;36894:125;:::o;37025:122::-;37098:24;37116:5;37098:24;:::i;:::-;37091:5;37088:35;37078:2;;37137:1;37134;37127:12;37078:2;37068:79;:::o;37153:116::-;37223:21;37238:5;37223:21;:::i;:::-;37216:5;37213:32;37203:2;;37259:1;37256;37249:12;37203:2;37193:76;:::o;37275:120::-;37347:23;37364:5;37347:23;:::i;:::-;37340:5;37337:34;37327:2;;37385:1;37382;37375:12;37327:2;37317:78;:::o;37401:122::-;37474:24;37492:5;37474:24;:::i;:::-;37467:5;37464:35;37454:2;;37513:1;37510;37503:12;37454:2;37444:79;:::o
Swarm Source
ipfs://bc3f13f81b89882f1a9c257f8e857cebaa9dece4181e005b6b67c407fff60a77
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.