Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0.020000000001 ETH
Eth Value
$68.00 (@ $3,400.08/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 69 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Safe Transfer Fr... | 15991643 | 772 days ago | IN | 0 ETH | 0.00106694 | ||||
Transfer From | 15990575 | 772 days ago | IN | 0 ETH | 0.00138165 | ||||
Safe Mint | 14814229 | 953 days ago | IN | 0.01 ETH | 0.00289785 | ||||
Safe Mint | 14813971 | 953 days ago | IN | 0.01 ETH | 0.00237858 | ||||
Withdraw | 14740948 | 965 days ago | IN | 0 ETH | 0.00068232 | ||||
Safe Mint | 14738944 | 965 days ago | IN | 0.01 ETH | 0.00210091 | ||||
Safe Mint | 14738909 | 965 days ago | IN | 0.01 ETH | 0.00227417 | ||||
Safe Mint | 14727740 | 967 days ago | IN | 0.01 ETH | 0.00387933 | ||||
Withdraw | 14694751 | 972 days ago | IN | 0 ETH | 0.00138163 | ||||
Safe Mint | 14691609 | 972 days ago | IN | 0.01 ETH | 0.00343777 | ||||
Safe Mint | 14658393 | 978 days ago | IN | 0.01 ETH | 0.00322551 | ||||
Transfer From | 14607883 | 986 days ago | IN | 0 ETH | 0.00122216 | ||||
Safe Mint | 14566065 | 992 days ago | IN | 0.01 ETH | 0.00713164 | ||||
Safe Mint | 14563689 | 993 days ago | IN | 0.01 ETH | 0.00274505 | ||||
Set Approval For... | 14562944 | 993 days ago | IN | 0 ETH | 0.00073995 | ||||
Safe Mint | 14562473 | 993 days ago | IN | 0.01 ETH | 0.00184162 | ||||
Set Approval For... | 14561528 | 993 days ago | IN | 0 ETH | 0.00136204 | ||||
Withdraw | 14517600 | 1000 days ago | IN | 0 ETH | 0.00112978 | ||||
Safe Mint | 14473324 | 1007 days ago | IN | 0.01 ETH | 0.00270103 | ||||
Safe Mint | 14471719 | 1007 days ago | IN | 0.01 ETH | 0.00238722 | ||||
Withdraw | 14463940 | 1008 days ago | IN | 0 ETH | 0.00125061 | ||||
Safe Mint | 14463817 | 1008 days ago | IN | 0.01 ETH | 0.00352633 | ||||
Safe Mint | 14452064 | 1010 days ago | IN | 0.01 ETH | 0.00421508 | ||||
Withdraw | 14421577 | 1015 days ago | IN | 0 ETH | 0.0004882 | ||||
Safe Mint | 14421571 | 1015 days ago | IN | 0.01 ETH | 0.00216881 |
Latest 10 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
14740948 | 965 days ago | 0.03 ETH | ||||
14694751 | 972 days ago | 0.05 ETH | ||||
14517600 | 1000 days ago | 0.02 ETH | ||||
14463940 | 1008 days ago | 0.02 ETH | ||||
14421577 | 1015 days ago | 0.01 ETH | ||||
14421492 | 1015 days ago | 0.12 ETH | ||||
14414666 | 1016 days ago | 0.05 ETH | ||||
14377874 | 1021 days ago | 0.09 ETH | ||||
14377725 | 1022 days ago | 0.06 ETH | ||||
14377598 | 1022 days ago | 0.04999999 ETH |
Loading...
Loading
Contract Name:
TinyIsles2
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-13 */ // File: @openzeppelin/[email protected]/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/[email protected]/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/[email protected]/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/[email protected]/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/[email protected]/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/[email protected]/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/[email protected]/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/[email protected]/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/[email protected]/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/[email protected]/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/[email protected]/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 overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _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: TinyIsles.sol pragma solidity ^0.8.4; /// @author Brecht Devos - <[email protected]> /// @notice Provides a function for encoding some bytes in base64 library Base64 { string internal constant TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; function encode(bytes memory data) internal pure returns (string memory) { if (data.length == 0) return ''; // load the table into memory string memory table = TABLE; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((data.length + 2) / 3); // add some extra buffer at the end required for the writing string memory result = new string(encodedLen + 32); assembly { // set the actual output length mstore(result, encodedLen) // prepare the lookup table let tablePtr := add(table, 1) // input ptr let dataPtr := data let endPtr := add(dataPtr, mload(data)) // result ptr, jump over length let resultPtr := add(result, 32) // run over the input, 3 bytes at a time for {} lt(dataPtr, endPtr) {} { dataPtr := add(dataPtr, 3) // read 3 bytes let input := mload(dataPtr) // write 4 characters mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr(18, input), 0x3F))))) resultPtr := add(resultPtr, 1) mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr(12, input), 0x3F))))) resultPtr := add(resultPtr, 1) mstore(resultPtr, shl(248, mload(add(tablePtr, and(shr( 6, input), 0x3F))))) resultPtr := add(resultPtr, 1) mstore(resultPtr, shl(248, mload(add(tablePtr, and( input, 0x3F))))) resultPtr := add(resultPtr, 1) } // padding with '=' switch mod(mload(data), 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } } return result; } } library TinyIslesUtilities { function getIsleStat(uint256 _stats, uint8 _shiftBits, uint8 _min, uint8 _max) internal pure returns(uint8) { uint256 bitMask = 0xFF; uint256 rangeWidth = _max - _min; uint8 statUnnormalized = uint8((_stats >> _shiftBits) & bitMask); uint8 statNormalized = (uint8(statUnnormalized % (rangeWidth + 1))) + _min; return statNormalized; } } contract TinyIsles2 is ERC721, Ownable { struct IsleStats { IsleBackground background; IsleDecoration decoration; IsleColor color; } enum IsleBackground { OCEAN, LAGOON, LAKE, SEA, ICE } enum IsleDecoration { TREES, BIG_TREE, RED_TREE, PURPLE_TREE, PINK_TREE } enum IsleColor { SAND, RED_SAND, GRASS, ROCK, GLASS } uint256 public constant MAX_TOKENS = 5_555; uint256 internal seedNonce = 0; address payable public withdrawalAddress; mapping(uint256 => IsleStats) public tokenStats; using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; constructor() ERC721("Tiny Isles", "ISLE") { withdrawalAddress = payable(msg.sender); } function _baseURI() internal pure override returns (string memory) { return ""; } function safeMint(address to) public payable { uint256 tokenId = _tokenIdCounter.current(); require(tokenId <= MAX_TOKENS, "All Isles have already been minted."); require(msg.value >= 0.01 ether, "Not enough ETH sent. Requires 0.01 ETH."); _tokenIdCounter.increment(); tokenStats[tokenId] = _generateTokenStats(tokenId); _safeMint(to, tokenId); } function withdraw() external { require(tx.origin == msg.sender, "Cannot be called by contracts"); uint256 amount = payable(address(this)).balance - 1000000; require(amount > 0, "Not enough balance to withdraw."); (bool success, ) = withdrawalAddress.call{value: amount}(""); require(success, "Failed to withdraw to withdrawal address."); } function tokenURI(uint256 _tokenId) public view override returns (string memory) { require(_exists(_tokenId), "Isle doesn't exist"); IsleStats memory _stats = tokenStats[_tokenId]; return string( abi.encodePacked( "data:application/json;base64,", Base64.encode( bytes( string( abi.encodePacked( '{"name": "Tiny Isle #', Strings.toString(_tokenId), '", "description": "Tiny Isles are a collection of peaceful islands.", "image": "data:image/svg+xml;base64,', Base64.encode( bytes(_getSVG(_stats)) ), '","attributes":', _getAttributes(_stats), "}" ) ) ) ) ) ); } function _random(uint256 _tokenId, address _address) internal returns(uint256) { seedNonce++; return uint256( keccak256( abi.encodePacked( block.timestamp, block.difficulty, _tokenId, _address, seedNonce ) ) ); } function _generateTokenStats(uint256 tokenId) internal returns(IsleStats memory) { uint256 _rand = _random(tokenId, msg.sender); uint8 _backgroundPredictor = TinyIslesUtilities.getIsleStat(_rand, 40, 0, 255); IsleBackground background; if(_backgroundPredictor < 100) { background = IsleBackground.OCEAN; } else if(_backgroundPredictor < 150) { background = IsleBackground.SEA; } else if(_backgroundPredictor < 200) { background = IsleBackground.LAGOON; } else if(_backgroundPredictor < 240) { background = IsleBackground.LAKE; } else { background = IsleBackground.ICE; } uint8 _decorationPredictor = TinyIslesUtilities.getIsleStat(_rand, 48, 0, 255); IsleDecoration decoration; if(_decorationPredictor < 150) { decoration = IsleDecoration.BIG_TREE; } else if(_decorationPredictor < 200) { decoration = IsleDecoration.TREES; } else if(_decorationPredictor < 230) { decoration = IsleDecoration.RED_TREE; } else if(_decorationPredictor < 250) { decoration = IsleDecoration.PURPLE_TREE; } else { decoration = IsleDecoration.PINK_TREE; } uint8 _colorPredictor = TinyIslesUtilities.getIsleStat(_rand, 0, 0, 255); IsleColor color; if(_colorPredictor < 100) { color = IsleColor.SAND; } else if(_colorPredictor < 150) { color = IsleColor.GRASS; } else if(_colorPredictor < 200) { color = IsleColor.ROCK; } else if(_colorPredictor < 240) { color = IsleColor.RED_SAND; } else { color = IsleColor.GLASS; } return IsleStats(background, decoration, color); } function _getSVG(IsleStats memory _stats) internal pure returns(string memory) { bytes memory svgBytes = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 501">'; bytes memory backgroundSVG; string memory backgroundColor; if(_stats.background == IsleBackground.OCEAN) { backgroundColor = "#0845a6"; } else if(_stats.background == IsleBackground.LAGOON) { backgroundColor = "#1dccc9"; } else if(_stats.background == IsleBackground.LAKE) { backgroundColor = "#1e88e6"; } else if(_stats.background == IsleBackground.SEA) { backgroundColor = "#109487"; } else if(_stats.background == IsleBackground.ICE) { backgroundColor = "#bfd6d4"; } backgroundSVG = abi.encodePacked( '<path fill="', backgroundColor, '" d="M0 0h500v501H0z"/>' ); bytes memory isleSVG; string memory isleColor; if(_stats.color == IsleColor.SAND) { isleColor = "#d4d2b0"; } else if(_stats.color == IsleColor.RED_SAND) { isleColor = "#edb79a"; } else if(_stats.color == IsleColor.GRASS) { isleColor = "#489441"; } else if(_stats.color == IsleColor.ROCK) { isleColor = "#4b4f43"; } else if(_stats.color == IsleColor.GLASS) { isleColor = backgroundColor; } isleSVG = abi.encodePacked( '<path fill="', isleColor, '" d="M50 50H450v400H50z"/>' ); string memory decorationSVG; if(_stats.decoration == IsleDecoration.TREES) { decorationSVG = '<rect fill="#ccffcc" x="125" y="125" width="50" height="50" rx="10"/><rect fill="#ccffcc" x="225" y="125" width="50" height="50" rx="10"/><rect fill="#ccffcc" x="325" y="125" width="50" height="50" rx="10"/><rect fill="#ccffcc" x="125" y="225" width="50" height="50" rx="10"/><rect fill="#ccffcc" x="225" y="225" width="50" height="50" rx="10"/><rect fill="#ccffcc" x="325" y="225" width="50" height="50" rx="10"/><rect fill="#ccffcc" x="125" y="325" width="50" height="50" rx="10"/><rect fill="#ccffcc" x="225" y="325" width="50" height="50" rx="10"/><rect fill="#ccffcc" x="325" y="325" width="50" height="50" rx="10"/>'; } else if(_stats.decoration == IsleDecoration.BIG_TREE) { decorationSVG = '<rect fill="#ccffcc" x="150" y="150" width="200" height="200" rx="10"/>'; } else if(_stats.decoration == IsleDecoration.RED_TREE) { decorationSVG = '<rect fill="#db4618" x="150" y="150" width="200" height="200" rx="10"/>'; } else if(_stats.decoration == IsleDecoration.PURPLE_TREE) { decorationSVG = '<rect fill="#9314ba" x="150" y="150" width="200" height="200" rx="10"/>'; } else if(_stats.decoration == IsleDecoration.PINK_TREE) { decorationSVG = '<rect fill="#f00aa3" x="150" y="150" width="200" height="200" rx="10"/>'; } svgBytes = abi.encodePacked( svgBytes, backgroundSVG, isleSVG, decorationSVG, '</svg>' ); string memory svgString = string(svgBytes); return svgString; } function _getAttributes(IsleStats memory _stats) internal pure returns(string memory) { string memory attributes = "["; string memory background; if(_stats.background == IsleBackground.OCEAN) background = "Ocean"; else if(_stats.background == IsleBackground.LAGOON) background = "Lagoon"; else if(_stats.background == IsleBackground.LAKE) background = "Lake"; else if(_stats.background == IsleBackground.SEA) background = "Sea"; else if(_stats.background == IsleBackground.ICE) background = "Ice"; attributes = string( abi.encodePacked( attributes, '{"trait_type": "Background",', '"value":"', background, '"},' ) ); string memory decoration; if(_stats.decoration == IsleDecoration.TREES) decoration = "Trees"; else if(_stats.decoration == IsleDecoration.BIG_TREE) decoration = "Big Tree"; else if(_stats.decoration == IsleDecoration.RED_TREE) decoration = "Red Tree"; else if(_stats.decoration == IsleDecoration.PURPLE_TREE) decoration = "Purple Tree"; else if(_stats.decoration == IsleDecoration.PINK_TREE) decoration = "Pink Tree"; attributes = string( abi.encodePacked( attributes, '{"trait_type": "Decoration",', '"value":"', decoration, '"},' ) ); string memory color; if(_stats.color == IsleColor.SAND) color = "Sand"; else if(_stats.color == IsleColor.RED_SAND) color = "Red Sand"; else if(_stats.color == IsleColor.GRASS) color = "Grass"; else if(_stats.color == IsleColor.ROCK) color = "Rock"; else if(_stats.color == IsleColor.GLASS) color = "Glass"; attributes = string( abi.encodePacked( attributes, '{"trait_type": "Color",', '"value":"', color, '"}' ) ); attributes = string( abi.encodePacked( attributes, ']' ) ); return attributes; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"safeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenStats","outputs":[{"internalType":"enum TinyIsles2.IsleBackground","name":"background","type":"uint8"},{"internalType":"enum TinyIsles2.IsleDecoration","name":"decoration","type":"uint8"},{"internalType":"enum TinyIsles2.IsleColor","name":"color","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawalAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260006007553480156200001657600080fd5b50604080518082018252600a81526954696e792049736c657360b01b60208083019182528351808501909452600484526349534c4560e01b908401528151919291620000659160009162000106565b5080516200007b90600190602084019062000106565b5050506200009862000092620000b060201b60201c565b620000b4565b600880546001600160a01b03191633179055620001e9565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200011490620001ac565b90600052602060002090601f01602090048101928262000138576000855562000183565b82601f106200015357805160ff191683800117855562000183565b8280016001018555821562000183579182015b828111156200018357825182559160200191906001019062000166565b506200019192915062000195565b5090565b5b8082111562000191576000815560010162000196565b600181811c90821680620001c157607f821691505b60208210811415620001e357634e487b7160e01b600052602260045260246000fd5b50919050565b61301780620001f96000396000f3fe60806040526004361061012a5760003560e01c8063715018a6116100ab578063c87b56dd1161006f578063c87b56dd1461031e578063e926ca951461033e578063e985e9c514610390578063f2bcd022146103d9578063f2fde38b146103f9578063f47c84c51461041957600080fd5b8063715018a6146102965780638da5cb5b146102ab57806395d89b41146102c9578063a22cb465146102de578063b88d4fde146102fe57600080fd5b80633ccfd60b116100f25780633ccfd60b1461020057806340d097c31461021557806342842e0e146102285780636352211e1461024857806370a082311461026857600080fd5b806301ffc9a71461012f57806306fdde0314610164578063081812fc14610186578063095ea7b3146101be57806323b872dd146101e0575b600080fd5b34801561013b57600080fd5b5061014f61014a36600461245d565b61042f565b60405190151581526020015b60405180910390f35b34801561017057600080fd5b50610179610481565b60405161015b9190612942565b34801561019257600080fd5b506101a66101a1366004612497565b610513565b6040516001600160a01b03909116815260200161015b565b3480156101ca57600080fd5b506101de6101d9366004612433565b6105ad565b005b3480156101ec57600080fd5b506101de6101fb3660046122df565b6106c3565b34801561020c57600080fd5b506101de6106f4565b6101de61022336600461228a565b61085e565b34801561023457600080fd5b506101de6102433660046122df565b6109d7565b34801561025457600080fd5b506101a6610263366004612497565b6109f2565b34801561027457600080fd5b5061028861028336600461228a565b610a69565b60405190815260200161015b565b3480156102a257600080fd5b506101de610af0565b3480156102b757600080fd5b506006546001600160a01b03166101a6565b3480156102d557600080fd5b50610179610b56565b3480156102ea57600080fd5b506101de6102f93660046123f7565b610b65565b34801561030a57600080fd5b506101de61031936600461231b565b610b70565b34801561032a57600080fd5b50610179610339366004612497565b610ba8565b34801561034a57600080fd5b50610381610359366004612497565b60096020526000908152604090205460ff808216916101008104821691620100009091041683565b60405161015b9392919061290c565b34801561039c57600080fd5b5061014f6103ab3660046122ac565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156103e557600080fd5b506008546101a6906001600160a01b031681565b34801561040557600080fd5b506101de61041436600461228a565b610d26565b34801561042557600080fd5b506102886115b381565b60006001600160e01b031982166380ac58cd60e01b148061046057506001600160e01b03198216635b5e139f60e01b145b8061047b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461049090612ace565b80601f01602080910402602001604051908101604052809291908181526020018280546104bc90612ace565b80156105095780601f106104de57610100808354040283529160200191610509565b820191906000526020600020905b8154815290600101906020018083116104ec57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166105915760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006105b8826109f2565b9050806001600160a01b0316836001600160a01b031614156106265760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610588565b336001600160a01b0382161480610642575061064281336103ab565b6106b45760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610588565b6106be8383610df1565b505050565b6106cd3382610e5f565b6106e95760405162461bcd60e51b8152600401610588906129a7565b6106be838383610f56565b3233146107435760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f742062652063616c6c656420627920636f6e7472616374730000006044820152606401610588565b6000610753620f42403031612a68565b9050600081116107a55760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420656e6f7567682062616c616e636520746f2077697468647261772e006044820152606401610588565b6008546040516000916001600160a01b03169083908381818185875af1925050503d80600081146107f2576040519150601f19603f3d011682016040523d82523d6000602084013e6107f7565b606091505b505090508061085a5760405162461bcd60e51b815260206004820152602960248201527f4661696c656420746f20776974686472617720746f207769746864726177616c6044820152681030b2323932b9b99760b91b6064820152608401610588565b5050565b6000610869600a5490565b90506115b38111156108c95760405162461bcd60e51b815260206004820152602360248201527f416c6c2049736c6573206861766520616c7265616479206265656e206d696e7460448201526232b21760e91b6064820152608401610588565b662386f26fc100003410156109305760405162461bcd60e51b815260206004820152602760248201527f4e6f7420656e6f756768204554482073656e742e20526571756972657320302e60448201526618189022aa241760c91b6064820152608401610588565b61093e600a80546001019055565b610947816110f2565b600082815260096020526040902081518154829060ff1916600183600481111561097357610973612b64565b021790555060208201518154829061ff00191661010083600481111561099b5761099b612b64565b021790555060408201518154829062ff00001916620100008360048111156109c5576109c5612b64565b021790555090505061085a82826112b8565b6106be83838360405180602001604052806000815250610b70565b6000818152600260205260408120546001600160a01b03168061047b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610588565b60006001600160a01b038216610ad45760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610588565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610b4a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610588565b610b5460006112d2565b565b60606001805461049090612ace565b61085a338383611324565b610b7a3383610e5f565b610b965760405162461bcd60e51b8152600401610588906129a7565b610ba2848484846113f3565b50505050565b6000818152600260205260409020546060906001600160a01b0316610c045760405162461bcd60e51b8152602060048201526012602482015271125cdb1948191bd95cdb89dd08195e1a5cdd60721b6044820152606401610588565b6000828152600960205260408082208151606081019092528054829060ff166004811115610c3457610c34612b64565b6004811115610c4557610c45612b64565b81528154602090910190610100900460ff166004811115610c6857610c68612b64565b6004811115610c7957610c79612b64565b8152815460209091019062010000900460ff166004811115610c9d57610c9d612b64565b6004811115610cae57610cae612b64565b9052509050610cff610cbf84611426565b610cd0610ccb84611524565b611959565b610cd984611ac1565b604051602001610ceb939291906126ba565b604051602081830303815290604052611959565b604051602001610d0f91906127d2565b604051602081830303815290604052915050919050565b6006546001600160a01b03163314610d805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610588565b6001600160a01b038116610de55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610588565b610dee816112d2565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610e26826109f2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316610ed85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610588565b6000610ee3836109f2565b9050806001600160a01b0316846001600160a01b03161480610f1e5750836001600160a01b0316610f1384610513565b6001600160a01b0316145b80610f4e57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316610f69826109f2565b6001600160a01b031614610fcd5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610588565b6001600160a01b03821661102f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610588565b61103a600082610df1565b6001600160a01b0383166000908152600360205260408120805460019290611063908490612a68565b90915550506001600160a01b03821660009081526003602052604081208054600192906110919084906129f8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61111660408051606081019091528060008152602001600081526020016000905290565b60006111228333611f2c565b90506000611135826028600060ff611fa0565b9050600060648260ff16101561114d5750600061118d565b60968260ff1610156111615750600361118d565b60c88260ff1610156111755750600161118d565b60f08260ff1610156111895750600261118d565b5060045b600061119e846030600060ff611fa0565b9050600060968260ff1610156111b6575060016111f6565b60c88260ff1610156111ca575060006111f6565b60e68260ff1610156111de575060026111f6565b60fa8260ff1610156111f2575060036111f6565b5060045b60006112068660008060ff611fa0565b9050600060648260ff16101561121e5750600061125e565b60968260ff1610156112325750600261125e565b60c88260ff1610156112465750600361125e565b60f08260ff16101561125a5750600161125e565b5060045b604051806060016040528086600481111561127b5761127b612b64565b815260200184600481111561129257611292612b64565b81526020018260048111156112a9576112a9612b64565b90529998505050505050505050565b61085a828260405180602001604052806000815250611fef565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156113865760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610588565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6113fe848484610f56565b61140a84848484612022565b610ba25760405162461bcd60e51b815260040161058890612955565b60608161144a5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611474578061145e81612b09565b915061146d9050600a83612a35565b915061144e565b60008167ffffffffffffffff81111561148f5761148f612b90565b6040519080825280601f01601f1916602001820160405280156114b9576020820181803683370190505b5090505b8415610f4e576114ce600183612a68565b91506114db600a86612b24565b6114e69060306129f8565b60f81b8183815181106114fb576114fb612b7a565b60200101906001600160f81b031916908160001a90535061151d600a86612a35565b94506114bd565b606060006040518060600160405280603e8152602001612fa4603e9139905060608060008551600481111561155b5761155b612b64565b1415611585575060408051808201909152600781526611981c1a1ab09b60c91b602082015261167d565b60018551600481111561159a5761159a612b64565b14156115c457506040805180820190915260078152662331646363633960c81b602082015261167d565b6002855160048111156115d9576115d9612b64565b141561160357506040805180820190915260078152661198b29c1c329b60c91b602082015261167d565b60038551600481111561161857611618612b64565b141561164257506040805180820190915260078152662331303934383760c81b602082015261167d565b60048551600481111561165757611657612b64565b141561167d575060408051808201909152600781526608d899990d990d60ca1b60208201525b8060405160200161168e9190612873565b60408051601f1981840301815291905291506060806000876040015160048111156116bb576116bb612b64565b14156116e557506040805180820190915260078152660236434643262360cc1b60208201526117cc565b6001876040015160048111156116fd576116fd612b64565b141561172757506040805180820190915260078152662365646237396160c81b60208201526117cc565b60028760400151600481111561173f5761173f612b64565b141561176957506040805180820190915260078152662334383934343160c81b60208201526117cc565b60038760400151600481111561178157611781612b64565b14156117ab57506040805180820190915260078152662334623466343360c81b60208201526117cc565b6004876040015160048111156117c3576117c3612b64565b14156117cc5750815b806040516020016117dd9190612817565b60408051601f198184030181529190529150606060008860200151600481111561180957611809612b64565b141561183257604051806102a0016040528061026d8152602001612c2261026d91399050611926565b60018860200151600481111561184a5761184a612b64565b141561187057604051806080016040528060478152602001612f5d604791399050611926565b60028860200151600481111561188857611888612b64565b14156118ae57604051806080016040528060478152602001612bdb604791399050611926565b6003886020015160048111156118c6576118c6612b64565b14156118ec57604051806080016040528060478152602001612ed6604791399050611926565b60048860200151600481111561190457611904612b64565b141561192657604051806080016040528060478152602001612e8f6047913990505b8585848360405160200161193d94939291906124dc565b60408051601f1981840301815291905298975050505050505050565b606081516000141561197957505060408051602081019091526000815290565b6000604051806060016040528060408152602001612f1d60409139905060006003845160026119a891906129f8565b6119b29190612a35565b6119bd906004612a49565b905060006119cc8260206129f8565b67ffffffffffffffff8111156119e4576119e4612b90565b6040519080825280601f01601f191660200182016040528015611a0e576020820181803683370190505b509050818152600183018586518101602084015b81831015611a7c5760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611a22565b600389510660018114611a965760028114611aa757611ab3565b613d3d60f01b600119830152611ab3565b603d60f81b6000198301525b509398975050505050505050565b6040805180820190915260018152605b60f81b602082015260609081600084516004811115611af257611af2612b64565b1415611b1a575060408051808201909152600581526427b1b2b0b760d91b6020820152611c06565b600184516004811115611b2f57611b2f612b64565b1415611b5857506040805180820190915260068152652630b3b7b7b760d11b6020820152611c06565b600284516004811115611b6d57611b6d612b64565b1415611b9457506040805180820190915260048152634c616b6560e01b6020820152611c06565b600384516004811115611ba957611ba9612b64565b1415611bcf575060408051808201909152600381526253656160e81b6020820152611c06565b600484516004811115611be457611be4612b64565b1415611c06575060408051808201909152600381526249636560e81b60208201525b8181604051602001611c19929190612544565b60408051601f1981840301815291905291506060600085602001516004811115611c4557611c45612b64565b1415611c6d5750604080518082019091526005815264547265657360d81b6020820152611d79565b600185602001516004811115611c8557611c85612b64565b1415611cb05750604080518082019091526008815267426967205472656560c01b6020820152611d79565b600285602001516004811115611cc857611cc8612b64565b1415611cf35750604080518082019091526008815267526564205472656560c01b6020820152611d79565b600385602001516004811115611d0b57611d0b612b64565b1415611d39575060408051808201909152600b81526a507572706c65205472656560a81b6020820152611d79565b600485602001516004811115611d5157611d51612b64565b1415611d79575060408051808201909152600981526850696e6b205472656560b81b60208201525b8281604051602001611d8c9291906125be565b60408051601f1981840301815291905292506060600086604001516004811115611db857611db8612b64565b1415611ddf575060408051808201909152600481526314d85b9960e21b6020820152611edd565b600186604001516004811115611df757611df7612b64565b1415611e2257506040805180820190915260088152671499590814d85b9960c21b6020820152611edd565b600286604001516004811115611e3a57611e3a612b64565b1415611e625750604080518082019091526005815264477261737360d81b6020820152611edd565b600386604001516004811115611e7a57611e7a612b64565b1415611ea15750604080518082019091526004815263526f636b60e01b6020820152611edd565b600486604001516004811115611eb957611eb9612b64565b1415611edd5750604080518082019091526005815264476c61737360d81b60208201525b8381604051602001611ef0929190612641565b604051602081830303815290604052935083604051602001611f12919061261c565b60408051601f198184030181529190529695505050505050565b6007805460009182611f3d83612b09565b9091555050600754604080514260208201524491810191909152606080820186905284901b6bffffffffffffffffffffffff19166080820152609481019190915260b40160408051601f1981840301815291905280516020909101209392505050565b600060ff81611faf8585612a7f565b60ff9081169150861687901c8216600086611fcb8460016129f8565b611fd89060ff8516612b24565b611fe29190612a10565b9998505050505050505050565b611ff9838361212c565b6120066000848484612022565b6106be5760405162461bcd60e51b815260040161058890612955565b60006001600160a01b0384163b1561212457604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906120669033908990889088906004016128cf565b602060405180830381600087803b15801561208057600080fd5b505af19250505080156120b0575060408051601f3d908101601f191682019092526120ad9181019061247a565b60015b61210a573d8080156120de576040519150601f19603f3d011682016040523d82523d6000602084013e6120e3565b606091505b5080516121025760405162461bcd60e51b815260040161058890612955565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610f4e565b506001610f4e565b6001600160a01b0382166121825760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610588565b6000818152600260205260409020546001600160a01b0316156121e75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610588565b6001600160a01b03821660009081526003602052604081208054600192906122109084906129f8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80356001600160a01b038116811461228557600080fd5b919050565b60006020828403121561229c57600080fd5b6122a58261226e565b9392505050565b600080604083850312156122bf57600080fd5b6122c88361226e565b91506122d66020840161226e565b90509250929050565b6000806000606084860312156122f457600080fd5b6122fd8461226e565b925061230b6020850161226e565b9150604084013590509250925092565b6000806000806080858703121561233157600080fd5b61233a8561226e565b93506123486020860161226e565b925060408501359150606085013567ffffffffffffffff8082111561236c57600080fd5b818701915087601f83011261238057600080fd5b81358181111561239257612392612b90565b604051601f8201601f19908116603f011681019083821181831017156123ba576123ba612b90565b816040528281528a60208487010111156123d357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561240a57600080fd5b6124138361226e565b91506020830135801515811461242857600080fd5b809150509250929050565b6000806040838503121561244657600080fd5b61244f8361226e565b946020939093013593505050565b60006020828403121561246f57600080fd5b81356122a581612bc4565b60006020828403121561248c57600080fd5b81516122a581612bc4565b6000602082840312156124a957600080fd5b5035919050565b600081518084526124c8816020860160208601612aa2565b601f01601f19169290920160200192915050565b600085516124ee818460208a01612aa2565b855190830190612502818360208a01612aa2565b8551910190612515818360208901612aa2565b8451910190612528818360208801612aa2565b651e17b9bb339f60d11b91019081526006019695505050505050565b60008351612556818460208801612aa2565b7f7b2274726169745f74797065223a20224261636b67726f756e64222c0000000090830190815268113b30b63ab2911d1160b91b601c82015283516125a2816025840160208801612aa2565b62089f4b60ea1b60259290910191820152602801949350505050565b600083516125d0818460208801612aa2565b7f7b2274726169745f74797065223a20224465636f726174696f6e222c0000000090830190815268113b30b63ab2911d1160b91b601c82015283516125a2816025840160208801612aa2565b6000825161262e818460208701612aa2565b605d60f81b920191825250600101919050565b60008351612653818460208801612aa2565b7f7b2274726169745f74797065223a2022436f6c6f72222c00000000000000000090830190815268113b30b63ab2911d1160b91b6017820152835161269f816020808501908801612aa2565b61227d60f01b60209290910191820152602201949350505050565b747b226e616d65223a202254696e792049736c65202360581b815283516000906126eb816015850160208901612aa2565b7f222c20226465736372697074696f6e223a202254696e792049736c65732061726015918401918201527f65206120636f6c6c656374696f6e206f6620706561636566756c2069736c616e60358201527f64732e222c2022696d616765223a2022646174613a696d6167652f7376672b786055820152691b5b0ed8985cd94d8d0b60b21b6075820152845161278781607f840160208901612aa2565b6e11161130ba3a3934b13aba32b9911d60891b607f929091019182015283516127b781608e840160208801612aa2565b607d60f81b608e9290910191820152608f0195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161280a81601d850160208701612aa2565b91909101601d0192915050565b6b1e3830ba34103334b6361e9160a11b8152815160009061283f81600c850160208701612aa2565b7f2220643d224d353020353048343530763430304835307a222f3e000000000000600c939091019283015250602601919050565b6b1e3830ba34103334b6361e9160a11b8152815160009061289b81600c850160208701612aa2565b7f2220643d224d302030683530307635303148307a222f3e000000000000000000600c939091019283015250602301919050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612902908301846124b0565b9695505050505050565b6060810161291985612ba6565b84825261292584612ba6565b83602083015261293483612ba6565b826040830152949350505050565b6020815260006122a560208301846124b0565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115612a0b57612a0b612b38565b500190565b600060ff821660ff84168060ff03821115612a2d57612a2d612b38565b019392505050565b600082612a4457612a44612b4e565b500490565b6000816000190483118215151615612a6357612a63612b38565b500290565b600082821015612a7a57612a7a612b38565b500390565b600060ff821660ff841680821015612a9957612a99612b38565b90039392505050565b60005b83811015612abd578181015183820152602001612aa5565b83811115610ba25750506000910152565b600181811c90821680612ae257607f821691505b60208210811415612b0357634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612b1d57612b1d612b38565b5060010190565b600082612b3357612b33612b4e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60058110610dee57634e487b7160e01b600052602160045260246000fd5b6001600160e01b031981168114610dee57600080fdfe3c726563742066696c6c3d22236462343631382220783d223135302220793d22313530222077696474683d2232303022206865696768743d22323030222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223132352220793d22313235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223232352220793d22313235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223332352220793d22313235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223132352220793d22323235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223232352220793d22323235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223332352220793d22323235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223132352220793d22333235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223232352220793d22333235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223332352220793d22333235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236630306161332220783d223135302220793d22313530222077696474683d2232303022206865696768743d22323030222072783d223130222f3e3c726563742066696c6c3d22233933313462612220783d223135302220793d22313530222077696474683d2232303022206865696768743d22323030222072783d223130222f3e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c726563742066696c6c3d22236363666663632220783d223135302220793d22313530222077696474683d2232303022206865696768743d22323030222072783d223130222f3e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667222076696577426f783d223020302035303020353031223ea26469706673582212205ae240d5bf6d9f9fef50cc3487d92900f7ffb0c6f72ea670f4269ccea32bff8d64736f6c63430008070033
Deployed Bytecode
0x60806040526004361061012a5760003560e01c8063715018a6116100ab578063c87b56dd1161006f578063c87b56dd1461031e578063e926ca951461033e578063e985e9c514610390578063f2bcd022146103d9578063f2fde38b146103f9578063f47c84c51461041957600080fd5b8063715018a6146102965780638da5cb5b146102ab57806395d89b41146102c9578063a22cb465146102de578063b88d4fde146102fe57600080fd5b80633ccfd60b116100f25780633ccfd60b1461020057806340d097c31461021557806342842e0e146102285780636352211e1461024857806370a082311461026857600080fd5b806301ffc9a71461012f57806306fdde0314610164578063081812fc14610186578063095ea7b3146101be57806323b872dd146101e0575b600080fd5b34801561013b57600080fd5b5061014f61014a36600461245d565b61042f565b60405190151581526020015b60405180910390f35b34801561017057600080fd5b50610179610481565b60405161015b9190612942565b34801561019257600080fd5b506101a66101a1366004612497565b610513565b6040516001600160a01b03909116815260200161015b565b3480156101ca57600080fd5b506101de6101d9366004612433565b6105ad565b005b3480156101ec57600080fd5b506101de6101fb3660046122df565b6106c3565b34801561020c57600080fd5b506101de6106f4565b6101de61022336600461228a565b61085e565b34801561023457600080fd5b506101de6102433660046122df565b6109d7565b34801561025457600080fd5b506101a6610263366004612497565b6109f2565b34801561027457600080fd5b5061028861028336600461228a565b610a69565b60405190815260200161015b565b3480156102a257600080fd5b506101de610af0565b3480156102b757600080fd5b506006546001600160a01b03166101a6565b3480156102d557600080fd5b50610179610b56565b3480156102ea57600080fd5b506101de6102f93660046123f7565b610b65565b34801561030a57600080fd5b506101de61031936600461231b565b610b70565b34801561032a57600080fd5b50610179610339366004612497565b610ba8565b34801561034a57600080fd5b50610381610359366004612497565b60096020526000908152604090205460ff808216916101008104821691620100009091041683565b60405161015b9392919061290c565b34801561039c57600080fd5b5061014f6103ab3660046122ac565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156103e557600080fd5b506008546101a6906001600160a01b031681565b34801561040557600080fd5b506101de61041436600461228a565b610d26565b34801561042557600080fd5b506102886115b381565b60006001600160e01b031982166380ac58cd60e01b148061046057506001600160e01b03198216635b5e139f60e01b145b8061047b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461049090612ace565b80601f01602080910402602001604051908101604052809291908181526020018280546104bc90612ace565b80156105095780601f106104de57610100808354040283529160200191610509565b820191906000526020600020905b8154815290600101906020018083116104ec57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166105915760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006105b8826109f2565b9050806001600160a01b0316836001600160a01b031614156106265760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610588565b336001600160a01b0382161480610642575061064281336103ab565b6106b45760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610588565b6106be8383610df1565b505050565b6106cd3382610e5f565b6106e95760405162461bcd60e51b8152600401610588906129a7565b6106be838383610f56565b3233146107435760405162461bcd60e51b815260206004820152601d60248201527f43616e6e6f742062652063616c6c656420627920636f6e7472616374730000006044820152606401610588565b6000610753620f42403031612a68565b9050600081116107a55760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420656e6f7567682062616c616e636520746f2077697468647261772e006044820152606401610588565b6008546040516000916001600160a01b03169083908381818185875af1925050503d80600081146107f2576040519150601f19603f3d011682016040523d82523d6000602084013e6107f7565b606091505b505090508061085a5760405162461bcd60e51b815260206004820152602960248201527f4661696c656420746f20776974686472617720746f207769746864726177616c6044820152681030b2323932b9b99760b91b6064820152608401610588565b5050565b6000610869600a5490565b90506115b38111156108c95760405162461bcd60e51b815260206004820152602360248201527f416c6c2049736c6573206861766520616c7265616479206265656e206d696e7460448201526232b21760e91b6064820152608401610588565b662386f26fc100003410156109305760405162461bcd60e51b815260206004820152602760248201527f4e6f7420656e6f756768204554482073656e742e20526571756972657320302e60448201526618189022aa241760c91b6064820152608401610588565b61093e600a80546001019055565b610947816110f2565b600082815260096020526040902081518154829060ff1916600183600481111561097357610973612b64565b021790555060208201518154829061ff00191661010083600481111561099b5761099b612b64565b021790555060408201518154829062ff00001916620100008360048111156109c5576109c5612b64565b021790555090505061085a82826112b8565b6106be83838360405180602001604052806000815250610b70565b6000818152600260205260408120546001600160a01b03168061047b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610588565b60006001600160a01b038216610ad45760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610588565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610b4a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610588565b610b5460006112d2565b565b60606001805461049090612ace565b61085a338383611324565b610b7a3383610e5f565b610b965760405162461bcd60e51b8152600401610588906129a7565b610ba2848484846113f3565b50505050565b6000818152600260205260409020546060906001600160a01b0316610c045760405162461bcd60e51b8152602060048201526012602482015271125cdb1948191bd95cdb89dd08195e1a5cdd60721b6044820152606401610588565b6000828152600960205260408082208151606081019092528054829060ff166004811115610c3457610c34612b64565b6004811115610c4557610c45612b64565b81528154602090910190610100900460ff166004811115610c6857610c68612b64565b6004811115610c7957610c79612b64565b8152815460209091019062010000900460ff166004811115610c9d57610c9d612b64565b6004811115610cae57610cae612b64565b9052509050610cff610cbf84611426565b610cd0610ccb84611524565b611959565b610cd984611ac1565b604051602001610ceb939291906126ba565b604051602081830303815290604052611959565b604051602001610d0f91906127d2565b604051602081830303815290604052915050919050565b6006546001600160a01b03163314610d805760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610588565b6001600160a01b038116610de55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610588565b610dee816112d2565b50565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610e26826109f2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b0316610ed85760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610588565b6000610ee3836109f2565b9050806001600160a01b0316846001600160a01b03161480610f1e5750836001600160a01b0316610f1384610513565b6001600160a01b0316145b80610f4e57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316610f69826109f2565b6001600160a01b031614610fcd5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610588565b6001600160a01b03821661102f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610588565b61103a600082610df1565b6001600160a01b0383166000908152600360205260408120805460019290611063908490612a68565b90915550506001600160a01b03821660009081526003602052604081208054600192906110919084906129f8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61111660408051606081019091528060008152602001600081526020016000905290565b60006111228333611f2c565b90506000611135826028600060ff611fa0565b9050600060648260ff16101561114d5750600061118d565b60968260ff1610156111615750600361118d565b60c88260ff1610156111755750600161118d565b60f08260ff1610156111895750600261118d565b5060045b600061119e846030600060ff611fa0565b9050600060968260ff1610156111b6575060016111f6565b60c88260ff1610156111ca575060006111f6565b60e68260ff1610156111de575060026111f6565b60fa8260ff1610156111f2575060036111f6565b5060045b60006112068660008060ff611fa0565b9050600060648260ff16101561121e5750600061125e565b60968260ff1610156112325750600261125e565b60c88260ff1610156112465750600361125e565b60f08260ff16101561125a5750600161125e565b5060045b604051806060016040528086600481111561127b5761127b612b64565b815260200184600481111561129257611292612b64565b81526020018260048111156112a9576112a9612b64565b90529998505050505050505050565b61085a828260405180602001604052806000815250611fef565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156113865760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610588565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6113fe848484610f56565b61140a84848484612022565b610ba25760405162461bcd60e51b815260040161058890612955565b60608161144a5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611474578061145e81612b09565b915061146d9050600a83612a35565b915061144e565b60008167ffffffffffffffff81111561148f5761148f612b90565b6040519080825280601f01601f1916602001820160405280156114b9576020820181803683370190505b5090505b8415610f4e576114ce600183612a68565b91506114db600a86612b24565b6114e69060306129f8565b60f81b8183815181106114fb576114fb612b7a565b60200101906001600160f81b031916908160001a90535061151d600a86612a35565b94506114bd565b606060006040518060600160405280603e8152602001612fa4603e9139905060608060008551600481111561155b5761155b612b64565b1415611585575060408051808201909152600781526611981c1a1ab09b60c91b602082015261167d565b60018551600481111561159a5761159a612b64565b14156115c457506040805180820190915260078152662331646363633960c81b602082015261167d565b6002855160048111156115d9576115d9612b64565b141561160357506040805180820190915260078152661198b29c1c329b60c91b602082015261167d565b60038551600481111561161857611618612b64565b141561164257506040805180820190915260078152662331303934383760c81b602082015261167d565b60048551600481111561165757611657612b64565b141561167d575060408051808201909152600781526608d899990d990d60ca1b60208201525b8060405160200161168e9190612873565b60408051601f1981840301815291905291506060806000876040015160048111156116bb576116bb612b64565b14156116e557506040805180820190915260078152660236434643262360cc1b60208201526117cc565b6001876040015160048111156116fd576116fd612b64565b141561172757506040805180820190915260078152662365646237396160c81b60208201526117cc565b60028760400151600481111561173f5761173f612b64565b141561176957506040805180820190915260078152662334383934343160c81b60208201526117cc565b60038760400151600481111561178157611781612b64565b14156117ab57506040805180820190915260078152662334623466343360c81b60208201526117cc565b6004876040015160048111156117c3576117c3612b64565b14156117cc5750815b806040516020016117dd9190612817565b60408051601f198184030181529190529150606060008860200151600481111561180957611809612b64565b141561183257604051806102a0016040528061026d8152602001612c2261026d91399050611926565b60018860200151600481111561184a5761184a612b64565b141561187057604051806080016040528060478152602001612f5d604791399050611926565b60028860200151600481111561188857611888612b64565b14156118ae57604051806080016040528060478152602001612bdb604791399050611926565b6003886020015160048111156118c6576118c6612b64565b14156118ec57604051806080016040528060478152602001612ed6604791399050611926565b60048860200151600481111561190457611904612b64565b141561192657604051806080016040528060478152602001612e8f6047913990505b8585848360405160200161193d94939291906124dc565b60408051601f1981840301815291905298975050505050505050565b606081516000141561197957505060408051602081019091526000815290565b6000604051806060016040528060408152602001612f1d60409139905060006003845160026119a891906129f8565b6119b29190612a35565b6119bd906004612a49565b905060006119cc8260206129f8565b67ffffffffffffffff8111156119e4576119e4612b90565b6040519080825280601f01601f191660200182016040528015611a0e576020820181803683370190505b509050818152600183018586518101602084015b81831015611a7c5760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b93820193909352600401611a22565b600389510660018114611a965760028114611aa757611ab3565b613d3d60f01b600119830152611ab3565b603d60f81b6000198301525b509398975050505050505050565b6040805180820190915260018152605b60f81b602082015260609081600084516004811115611af257611af2612b64565b1415611b1a575060408051808201909152600581526427b1b2b0b760d91b6020820152611c06565b600184516004811115611b2f57611b2f612b64565b1415611b5857506040805180820190915260068152652630b3b7b7b760d11b6020820152611c06565b600284516004811115611b6d57611b6d612b64565b1415611b9457506040805180820190915260048152634c616b6560e01b6020820152611c06565b600384516004811115611ba957611ba9612b64565b1415611bcf575060408051808201909152600381526253656160e81b6020820152611c06565b600484516004811115611be457611be4612b64565b1415611c06575060408051808201909152600381526249636560e81b60208201525b8181604051602001611c19929190612544565b60408051601f1981840301815291905291506060600085602001516004811115611c4557611c45612b64565b1415611c6d5750604080518082019091526005815264547265657360d81b6020820152611d79565b600185602001516004811115611c8557611c85612b64565b1415611cb05750604080518082019091526008815267426967205472656560c01b6020820152611d79565b600285602001516004811115611cc857611cc8612b64565b1415611cf35750604080518082019091526008815267526564205472656560c01b6020820152611d79565b600385602001516004811115611d0b57611d0b612b64565b1415611d39575060408051808201909152600b81526a507572706c65205472656560a81b6020820152611d79565b600485602001516004811115611d5157611d51612b64565b1415611d79575060408051808201909152600981526850696e6b205472656560b81b60208201525b8281604051602001611d8c9291906125be565b60408051601f1981840301815291905292506060600086604001516004811115611db857611db8612b64565b1415611ddf575060408051808201909152600481526314d85b9960e21b6020820152611edd565b600186604001516004811115611df757611df7612b64565b1415611e2257506040805180820190915260088152671499590814d85b9960c21b6020820152611edd565b600286604001516004811115611e3a57611e3a612b64565b1415611e625750604080518082019091526005815264477261737360d81b6020820152611edd565b600386604001516004811115611e7a57611e7a612b64565b1415611ea15750604080518082019091526004815263526f636b60e01b6020820152611edd565b600486604001516004811115611eb957611eb9612b64565b1415611edd5750604080518082019091526005815264476c61737360d81b60208201525b8381604051602001611ef0929190612641565b604051602081830303815290604052935083604051602001611f12919061261c565b60408051601f198184030181529190529695505050505050565b6007805460009182611f3d83612b09565b9091555050600754604080514260208201524491810191909152606080820186905284901b6bffffffffffffffffffffffff19166080820152609481019190915260b40160408051601f1981840301815291905280516020909101209392505050565b600060ff81611faf8585612a7f565b60ff9081169150861687901c8216600086611fcb8460016129f8565b611fd89060ff8516612b24565b611fe29190612a10565b9998505050505050505050565b611ff9838361212c565b6120066000848484612022565b6106be5760405162461bcd60e51b815260040161058890612955565b60006001600160a01b0384163b1561212457604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906120669033908990889088906004016128cf565b602060405180830381600087803b15801561208057600080fd5b505af19250505080156120b0575060408051601f3d908101601f191682019092526120ad9181019061247a565b60015b61210a573d8080156120de576040519150601f19603f3d011682016040523d82523d6000602084013e6120e3565b606091505b5080516121025760405162461bcd60e51b815260040161058890612955565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610f4e565b506001610f4e565b6001600160a01b0382166121825760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610588565b6000818152600260205260409020546001600160a01b0316156121e75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610588565b6001600160a01b03821660009081526003602052604081208054600192906122109084906129f8565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80356001600160a01b038116811461228557600080fd5b919050565b60006020828403121561229c57600080fd5b6122a58261226e565b9392505050565b600080604083850312156122bf57600080fd5b6122c88361226e565b91506122d66020840161226e565b90509250929050565b6000806000606084860312156122f457600080fd5b6122fd8461226e565b925061230b6020850161226e565b9150604084013590509250925092565b6000806000806080858703121561233157600080fd5b61233a8561226e565b93506123486020860161226e565b925060408501359150606085013567ffffffffffffffff8082111561236c57600080fd5b818701915087601f83011261238057600080fd5b81358181111561239257612392612b90565b604051601f8201601f19908116603f011681019083821181831017156123ba576123ba612b90565b816040528281528a60208487010111156123d357600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b6000806040838503121561240a57600080fd5b6124138361226e565b91506020830135801515811461242857600080fd5b809150509250929050565b6000806040838503121561244657600080fd5b61244f8361226e565b946020939093013593505050565b60006020828403121561246f57600080fd5b81356122a581612bc4565b60006020828403121561248c57600080fd5b81516122a581612bc4565b6000602082840312156124a957600080fd5b5035919050565b600081518084526124c8816020860160208601612aa2565b601f01601f19169290920160200192915050565b600085516124ee818460208a01612aa2565b855190830190612502818360208a01612aa2565b8551910190612515818360208901612aa2565b8451910190612528818360208801612aa2565b651e17b9bb339f60d11b91019081526006019695505050505050565b60008351612556818460208801612aa2565b7f7b2274726169745f74797065223a20224261636b67726f756e64222c0000000090830190815268113b30b63ab2911d1160b91b601c82015283516125a2816025840160208801612aa2565b62089f4b60ea1b60259290910191820152602801949350505050565b600083516125d0818460208801612aa2565b7f7b2274726169745f74797065223a20224465636f726174696f6e222c0000000090830190815268113b30b63ab2911d1160b91b601c82015283516125a2816025840160208801612aa2565b6000825161262e818460208701612aa2565b605d60f81b920191825250600101919050565b60008351612653818460208801612aa2565b7f7b2274726169745f74797065223a2022436f6c6f72222c00000000000000000090830190815268113b30b63ab2911d1160b91b6017820152835161269f816020808501908801612aa2565b61227d60f01b60209290910191820152602201949350505050565b747b226e616d65223a202254696e792049736c65202360581b815283516000906126eb816015850160208901612aa2565b7f222c20226465736372697074696f6e223a202254696e792049736c65732061726015918401918201527f65206120636f6c6c656374696f6e206f6620706561636566756c2069736c616e60358201527f64732e222c2022696d616765223a2022646174613a696d6167652f7376672b786055820152691b5b0ed8985cd94d8d0b60b21b6075820152845161278781607f840160208901612aa2565b6e11161130ba3a3934b13aba32b9911d60891b607f929091019182015283516127b781608e840160208801612aa2565b607d60f81b608e9290910191820152608f0195945050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161280a81601d850160208701612aa2565b91909101601d0192915050565b6b1e3830ba34103334b6361e9160a11b8152815160009061283f81600c850160208701612aa2565b7f2220643d224d353020353048343530763430304835307a222f3e000000000000600c939091019283015250602601919050565b6b1e3830ba34103334b6361e9160a11b8152815160009061289b81600c850160208701612aa2565b7f2220643d224d302030683530307635303148307a222f3e000000000000000000600c939091019283015250602301919050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612902908301846124b0565b9695505050505050565b6060810161291985612ba6565b84825261292584612ba6565b83602083015261293483612ba6565b826040830152949350505050565b6020815260006122a560208301846124b0565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115612a0b57612a0b612b38565b500190565b600060ff821660ff84168060ff03821115612a2d57612a2d612b38565b019392505050565b600082612a4457612a44612b4e565b500490565b6000816000190483118215151615612a6357612a63612b38565b500290565b600082821015612a7a57612a7a612b38565b500390565b600060ff821660ff841680821015612a9957612a99612b38565b90039392505050565b60005b83811015612abd578181015183820152602001612aa5565b83811115610ba25750506000910152565b600181811c90821680612ae257607f821691505b60208210811415612b0357634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612b1d57612b1d612b38565b5060010190565b600082612b3357612b33612b4e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b60058110610dee57634e487b7160e01b600052602160045260246000fd5b6001600160e01b031981168114610dee57600080fdfe3c726563742066696c6c3d22236462343631382220783d223135302220793d22313530222077696474683d2232303022206865696768743d22323030222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223132352220793d22313235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223232352220793d22313235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223332352220793d22313235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223132352220793d22323235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223232352220793d22323235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223332352220793d22323235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223132352220793d22333235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223232352220793d22333235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236363666663632220783d223332352220793d22333235222077696474683d22353022206865696768743d223530222072783d223130222f3e3c726563742066696c6c3d22236630306161332220783d223135302220793d22313530222077696474683d2232303022206865696768743d22323030222072783d223130222f3e3c726563742066696c6c3d22233933313462612220783d223135302220793d22313530222077696474683d2232303022206865696768743d22323030222072783d223130222f3e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c726563742066696c6c3d22236363666663632220783d223135302220793d22313530222077696474683d2232303022206865696768743d22323030222072783d223130222f3e3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667222076696577426f783d223020302035303020353031223ea26469706673582212205ae240d5bf6d9f9fef50cc3487d92900f7ffb0c6f72ea670f4269ccea32bff8d64736f6c63430008070033
Deployed Bytecode Sourcemap
41531:11137:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25640:305;;;;;;;;;;-1:-1:-1;25640:305:0;;;;;:::i;:::-;;:::i;:::-;;;13402:14:1;;13395:22;13377:41;;13365:2;13350:18;25640:305:0;;;;;;;;26585:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28144:221::-;;;;;;;;;;-1:-1:-1;28144:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;12476:32:1;;;12458:51;;12446:2;12431:18;28144:221:0;12312:203:1;27667:411:0;;;;;;;;;;-1:-1:-1;27667:411:0;;;;;:::i;:::-;;:::i;:::-;;28894:339;;;;;;;;;;-1:-1:-1;28894:339:0;;;;;:::i;:::-;;:::i;42968:389::-;;;;;;;;;;;;;:::i;42555:405::-;;;;;;:::i;:::-;;:::i;29304:185::-;;;;;;;;;;-1:-1:-1;29304:185:0;;;;;:::i;:::-;;:::i;26279:239::-;;;;;;;;;;-1:-1:-1;26279:239:0;;;;;:::i;:::-;;:::i;26009:208::-;;;;;;;;;;-1:-1:-1;26009:208:0;;;;;:::i;:::-;;:::i;:::-;;;22577:25:1;;;22565:2;22550:18;26009:208:0;22431:177:1;6219:103:0;;;;;;;;;;;;;:::i;5568:87::-;;;;;;;;;;-1:-1:-1;5641:6:0;;-1:-1:-1;;;;;5641:6:0;5568:87;;26754:104;;;;;;;;;;;;;:::i;28437:155::-;;;;;;;;;;-1:-1:-1;28437:155:0;;;;;:::i;:::-;;:::i;29560:328::-;;;;;;;;;;-1:-1:-1;29560:328:0;;;;;:::i;:::-;;:::i;43365:1226::-;;;;;;;;;;-1:-1:-1;43365:1226:0;;;;;:::i;:::-;;:::i;42194:47::-;;;;;;;;;;-1:-1:-1;42194:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28663:164::-;;;;;;;;;;-1:-1:-1;28663:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;28784:25:0;;;28760:4;28784:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;28663:164;42147:40;;;;;;;;;;-1:-1:-1;42147:40:0;;;;-1:-1:-1;;;;;42147:40:0;;;6477:201;;;;;;;;;;-1:-1:-1;6477:201:0;;;;;:::i;:::-;;:::i;42061:42::-;;;;;;;;;;;;42098:5;42061:42;;25640:305;25742:4;-1:-1:-1;;;;;;25779:40:0;;-1:-1:-1;;;25779:40:0;;:105;;-1:-1:-1;;;;;;;25836:48:0;;-1:-1:-1;;;25836:48:0;25779:105;:158;;;-1:-1:-1;;;;;;;;;;18485:40:0;;;25901:36;25759:178;25640:305;-1:-1:-1;;25640:305:0:o;26585:100::-;26639:13;26672:5;26665:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26585:100;:::o;28144:221::-;28220:7;31487:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31487:16:0;28240:73;;;;-1:-1:-1;;;28240:73:0;;20225:2:1;28240:73:0;;;20207:21:1;20264:2;20244:18;;;20237:30;20303:34;20283:18;;;20276:62;-1:-1:-1;;;20354:18:1;;;20347:42;20406:19;;28240:73:0;;;;;;;;;-1:-1:-1;28333:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;28333:24:0;;28144:221::o;27667:411::-;27748:13;27764:23;27779:7;27764:14;:23::i;:::-;27748:39;;27812:5;-1:-1:-1;;;;;27806:11:0;:2;-1:-1:-1;;;;;27806:11:0;;;27798:57;;;;-1:-1:-1;;;27798:57:0;;21403:2:1;27798:57:0;;;21385:21:1;21442:2;21422:18;;;21415:30;21481:34;21461:18;;;21454:62;-1:-1:-1;;;21532:18:1;;;21525:31;21573:19;;27798:57:0;21201:397:1;27798:57:0;4366:10;-1:-1:-1;;;;;27890:21:0;;;;:62;;-1:-1:-1;27915:37:0;27932:5;4366:10;28663:164;:::i;27915:37::-;27868:168;;;;-1:-1:-1;;;27868:168:0;;18210:2:1;27868:168:0;;;18192:21:1;18249:2;18229:18;;;18222:30;18288:34;18268:18;;;18261:62;18359:26;18339:18;;;18332:54;18403:19;;27868:168:0;18008:420:1;27868:168:0;28049:21;28058:2;28062:7;28049:8;:21::i;:::-;27737:341;27667:411;;:::o;28894:339::-;29089:41;4366:10;29122:7;29089:18;:41::i;:::-;29081:103;;;;-1:-1:-1;;;29081:103:0;;;;;;;:::i;:::-;29197:28;29207:4;29213:2;29217:7;29197:9;:28::i;42968:389::-;43016:9;43029:10;43016:23;43008:65;;;;-1:-1:-1;;;43008:65:0;;17439:2:1;43008:65:0;;;17421:21:1;17478:2;17458:18;;;17451:30;17517:31;17497:18;;;17490:59;17566:18;;43008:65:0;17237:353:1;43008:65:0;43084:14;43101:40;43134:7;43117:4;43101:30;:40;:::i;:::-;43084:57;;43169:1;43160:6;:10;43152:54;;;;-1:-1:-1;;;43152:54:0;;15973:2:1;43152:54:0;;;15955:21:1;16012:2;15992:18;;;15985:30;16051:33;16031:18;;;16024:61;16102:18;;43152:54:0;15771:355:1;43152:54:0;43236:17;;:41;;43218:12;;-1:-1:-1;;;;;43236:17:0;;43266:6;;43218:12;43236:41;43218:12;43236:41;43266:6;43236:17;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43217:60;;;43296:7;43288:61;;;;-1:-1:-1;;;43288:61:0;;22223:2:1;43288:61:0;;;22205:21:1;22262:2;22242:18;;;22235:30;22301:34;22281:18;;;22274:62;-1:-1:-1;;;22352:18:1;;;22345:39;22401:19;;43288:61:0;22021:405:1;43288:61:0;42997:360;;42968:389::o;42555:405::-;42611:15;42629:25;:15;970:14;;878:114;42629:25;42611:43;;42098:5;42673:7;:21;;42665:69;;;;-1:-1:-1;;;42665:69:0;;20999:2:1;42665:69:0;;;20981:21:1;21038:2;21018:18;;;21011:30;21077:34;21057:18;;;21050:62;-1:-1:-1;;;21128:18:1;;;21121:33;21171:19;;42665:69:0;20797:399:1;42665:69:0;42766:10;42753:9;:23;;42745:75;;;;-1:-1:-1;;;42745:75:0;;19817:2:1;42745:75:0;;;19799:21:1;19856:2;19836:18;;;19829:30;19895:34;19875:18;;;19868:62;-1:-1:-1;;;19946:18:1;;;19939:37;19993:19;;42745:75:0;19615:403:1;42745:75:0;42831:27;:15;1089:19;;1107:1;1089:19;;;1000:127;42831:27;42891:28;42911:7;42891:19;:28::i;:::-;42869:19;;;;:10;:19;;;;;:50;;;;:19;;-1:-1:-1;;42869:50:0;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;42869:50:0;;;;;;;;-1:-1:-1;;42869:50:0;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;42869:50:0;;;;;;;;-1:-1:-1;;42869:50:0;;;;;;;;;;;:::i;:::-;;;;;;;;;42930:22;42940:2;42944:7;42930:9;:22::i;29304:185::-;29442:39;29459:4;29465:2;29469:7;29442:39;;;;;;;;;;;;:16;:39::i;26279:239::-;26351:7;26387:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26387:16:0;26422:19;26414:73;;;;-1:-1:-1;;;26414:73:0;;19046:2:1;26414:73:0;;;19028:21:1;19085:2;19065:18;;;19058:30;19124:34;19104:18;;;19097:62;-1:-1:-1;;;19175:18:1;;;19168:39;19224:19;;26414:73:0;18844:405:1;26009:208:0;26081:7;-1:-1:-1;;;;;26109:19:0;;26101:74;;;;-1:-1:-1;;;26101:74:0;;18635:2:1;26101:74:0;;;18617:21:1;18674:2;18654:18;;;18647:30;18713:34;18693:18;;;18686:62;-1:-1:-1;;;18764:18:1;;;18757:40;18814:19;;26101:74:0;18433:406:1;26101:74:0;-1:-1:-1;;;;;;26193:16:0;;;;;:9;:16;;;;;;;26009:208::o;6219:103::-;5641:6;;-1:-1:-1;;;;;5641:6:0;4366:10;5788:23;5780:68;;;;-1:-1:-1;;;5780:68:0;;20638:2:1;5780:68:0;;;20620:21:1;;;20657:18;;;20650:30;20716:34;20696:18;;;20689:62;20768:18;;5780:68:0;20436:356:1;5780:68:0;6284:30:::1;6311:1;6284:18;:30::i;:::-;6219:103::o:0;26754:104::-;26810:13;26843:7;26836:14;;;;;:::i;28437:155::-;28532:52;4366:10;28565:8;28575;28532:18;:52::i;29560:328::-;29735:41;4366:10;29768:7;29735:18;:41::i;:::-;29727:103;;;;-1:-1:-1;;;29727:103:0;;;;;;;:::i;:::-;29841:39;29855:4;29861:2;29865:7;29874:5;29841:13;:39::i;:::-;29560:328;;;;:::o;43365:1226::-;31463:4;31487:16;;;:7;:16;;;;;;43431:13;;-1:-1:-1;;;;;31487:16:0;43457:48;;;;-1:-1:-1;;;43457:48:0;;16333:2:1;43457:48:0;;;16315:21:1;16372:2;16352:18;;;16345:30;-1:-1:-1;;;16391:18:1;;;16384:48;16449:18;;43457:48:0;16131:342:1;43457:48:0;43516:23;43542:20;;;:10;:20;;;;;;43516:46;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;43516:46:0;-1:-1:-1;43711:838:0;43945:26;43962:8;43945:16;:26::i;:::-;44157:117;44219:15;44227:6;44219:7;:15::i;:::-;44157:13;:117::i;:::-;44369:22;44384:6;44369:14;:22::i;:::-;43828:640;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43711:13;:838::i;:::-;43618:950;;;;;;;;:::i;:::-;;;;;;;;;;;;;43573:1010;;;43365:1226;;;:::o;6477:201::-;5641:6;;-1:-1:-1;;;;;5641:6:0;4366:10;5788:23;5780:68;;;;-1:-1:-1;;;5780:68:0;;20638:2:1;5780:68:0;;;20620:21:1;;;20657:18;;;20650:30;20716:34;20696:18;;;20689:62;20768:18;;5780:68:0;20436:356:1;5780:68:0;-1:-1:-1;;;;;6566:22:0;::::1;6558:73;;;::::0;-1:-1:-1;;;6558:73:0;;14803:2:1;6558:73:0::1;::::0;::::1;14785:21:1::0;14842:2;14822:18;;;14815:30;14881:34;14861:18;;;14854:62;-1:-1:-1;;;14932:18:1;;;14925:36;14978:19;;6558:73:0::1;14601:402:1::0;6558:73:0::1;6642:28;6661:8;6642:18;:28::i;:::-;6477:201:::0;:::o;35544:174::-;35619:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;35619:29:0;-1:-1:-1;;;;;35619:29:0;;;;;;;;:24;;35673:23;35619:24;35673:14;:23::i;:::-;-1:-1:-1;;;;;35664:46:0;;;;;;;;;;;35544:174;;:::o;31692:348::-;31785:4;31487:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31487:16:0;31802:73;;;;-1:-1:-1;;;31802:73:0;;17797:2:1;31802:73:0;;;17779:21:1;17836:2;17816:18;;;17809:30;17875:34;17855:18;;;17848:62;-1:-1:-1;;;17926:18:1;;;17919:42;17978:19;;31802:73:0;17595:408:1;31802:73:0;31886:13;31902:23;31917:7;31902:14;:23::i;:::-;31886:39;;31955:5;-1:-1:-1;;;;;31944:16:0;:7;-1:-1:-1;;;;;31944:16:0;;:51;;;;31988:7;-1:-1:-1;;;;;31964:31:0;:20;31976:7;31964:11;:20::i;:::-;-1:-1:-1;;;;;31964:31:0;;31944:51;:87;;;-1:-1:-1;;;;;;28784:25:0;;;28760:4;28784:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;31999:32;31936:96;31692:348;-1:-1:-1;;;;31692:348:0:o;34801:625::-;34960:4;-1:-1:-1;;;;;34933:31:0;:23;34948:7;34933:14;:23::i;:::-;-1:-1:-1;;;;;34933:31:0;;34925:81;;;;-1:-1:-1;;;34925:81:0;;15210:2:1;34925:81:0;;;15192:21:1;15249:2;15229:18;;;15222:30;15288:34;15268:18;;;15261:62;-1:-1:-1;;;15339:18:1;;;15332:35;15384:19;;34925:81:0;15008:401:1;34925:81:0;-1:-1:-1;;;;;35025:16:0;;35017:65;;;;-1:-1:-1;;;35017:65:0;;16680:2:1;35017:65:0;;;16662:21:1;16719:2;16699:18;;;16692:30;16758:34;16738:18;;;16731:62;-1:-1:-1;;;16809:18:1;;;16802:34;16853:19;;35017:65:0;16478:400:1;35017:65:0;35199:29;35216:1;35220:7;35199:8;:29::i;:::-;-1:-1:-1;;;;;35241:15:0;;;;;;:9;:15;;;;;:20;;35260:1;;35241:15;:20;;35260:1;;35241:20;:::i;:::-;;;;-1:-1:-1;;;;;;;35272:13:0;;;;;;:9;:13;;;;;:18;;35289:1;;35272:13;:18;;35289:1;;35272:18;:::i;:::-;;;;-1:-1:-1;;35301:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35301:21:0;-1:-1:-1;;;;;35301:21:0;;;;;;;;;35340:27;;35301:16;;35340:27;;;;;;;27737:341;27667:411;;:::o;45018:1886::-;45081:16;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;45081:16:0;45110:13;45126:28;45134:7;45143:10;45126:7;:28::i;:::-;45110:44;;45167:26;45196:49;45227:5;45234:2;45238:1;45241:3;45196:30;:49::i;:::-;45167:78;;45256:25;45318:3;45295:20;:26;;;45292:444;;;-1:-1:-1;45351:20:0;45292:444;;;45415:3;45392:20;:26;;;45389:347;;;-1:-1:-1;45448:18:0;45389:347;;;45510:3;45487:20;:26;;;45484:252;;;-1:-1:-1;45543:21:0;45484:252;;;45608:3;45585:20;:26;;;45582:154;;;-1:-1:-1;45641:19:0;45582:154;;;-1:-1:-1;45706:18:0;45582:154;45748:26;45777:49;45808:5;45815:2;45819:1;45822:3;45777:30;:49::i;:::-;45748:78;;45837:25;45899:3;45876:20;:26;;;45873:464;;;-1:-1:-1;45932:23:0;45873:464;;;45999:3;45976:20;:26;;;45973:364;;;-1:-1:-1;46032:20:0;45973:364;;;46096:3;46073:20;:26;;;46070:267;;;-1:-1:-1;46129:23:0;46070:267;;;46196:3;46173:20;:26;;;46170:167;;;-1:-1:-1;46229:26:0;46170:167;;;-1:-1:-1;46301:24:0;46170:167;46349:21;46373:48;46404:5;46411:1;46414;46417:3;46373:30;:48::i;:::-;46349:72;;46432:15;46479:3;46461:15;:21;;;46458:379;;;-1:-1:-1;46507:14:0;46458:379;;;46560:3;46542:15;:21;;;46539:298;;;-1:-1:-1;46588:15:0;46539:298;;;46642:3;46624:15;:21;;;46621:216;;;-1:-1:-1;46670:14:0;46621:216;;;46723:3;46705:15;:21;;;46702:135;;;-1:-1:-1;46751:18:0;46702:135;;;-1:-1:-1;46810:15:0;46702:135;46856:40;;;;;;;;46866:10;46856:40;;;;;;;;:::i;:::-;;;;;46878:10;46856:40;;;;;;;;:::i;:::-;;;;;46890:5;46856:40;;;;;;;;:::i;:::-;;;46849:47;45018:1886;-1:-1:-1;;;;;;;;;45018:1886:0:o;32382:110::-;32458:26;32468:2;32472:7;32458:26;;;;;;;;;;;;:9;:26::i;6838:191::-;6931:6;;;-1:-1:-1;;;;;6948:17:0;;;-1:-1:-1;;;;;;6948:17:0;;;;;;;6981:40;;6931:6;;;6948:17;6931:6;;6981:40;;6912:16;;6981:40;6901:128;6838:191;:::o;35860:315::-;36015:8;-1:-1:-1;;;;;36006:17:0;:5;-1:-1:-1;;;;;36006:17:0;;;35998:55;;;;-1:-1:-1;;;35998:55:0;;17085:2:1;35998:55:0;;;17067:21:1;17124:2;17104:18;;;17097:30;17163:27;17143:18;;;17136:55;17208:18;;35998:55:0;16883:349:1;35998:55:0;-1:-1:-1;;;;;36064:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;36064:46:0;;;;;;;;;;36126:41;;13377::1;;;36126::0;;13350:18:1;36126:41:0;;;;;;;35860:315;;;:::o;30770:::-;30927:28;30937:4;30943:2;30947:7;30927:9;:28::i;:::-;30974:48;30997:4;31003:2;31007:7;31016:5;30974:22;:48::i;:::-;30966:111;;;;-1:-1:-1;;;30966:111:0;;;;;;;:::i;1842:723::-;1898:13;2119:10;2115:53;;-1:-1:-1;;2146:10:0;;;;;;;;;;;;-1:-1:-1;;;2146:10:0;;;;;1842:723::o;2115:53::-;2193:5;2178:12;2234:78;2241:9;;2234:78;;2267:8;;;;:::i;:::-;;-1:-1:-1;2290:10:0;;-1:-1:-1;2298:2:0;2290:10;;:::i;:::-;;;2234:78;;;2322:19;2354:6;2344:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2344:17:0;;2322:39;;2372:154;2379:10;;2372:154;;2406:11;2416:1;2406:11;;:::i;:::-;;-1:-1:-1;2475:10:0;2483:2;2475:5;:10;:::i;:::-;2462:24;;:2;:24;:::i;:::-;2449:39;;2432:6;2439;2432:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2432:56:0;;;;;;;;-1:-1:-1;2503:11:0;2512:2;2503:11;;:::i;:::-;;;2372:154;;46912:3435;46976:13;47002:21;:88;;;;;;;;;;;;;;;;;;-1:-1:-1;47103:26:0;;47204:20;47183:17;;:41;;;;;;;;:::i;:::-;;47180:556;;;-1:-1:-1;47241:27:0;;;;;;;;;;;;-1:-1:-1;;;47241:27:0;;;;47180:556;;;47319:21;47298:17;;:42;;;;;;;;:::i;:::-;;47295:441;;;-1:-1:-1;47357:27:0;;;;;;;;;;;;-1:-1:-1;;;47357:27:0;;;;47295:441;;;47435:19;47414:17;;:40;;;;;;;;:::i;:::-;;47411:325;;;-1:-1:-1;47471:27:0;;;;;;;;;;;;-1:-1:-1;;;47471:27:0;;;;47411:325;;;47549:18;47528:17;;:39;;;;;;;;:::i;:::-;;47525:211;;;-1:-1:-1;47584:27:0;;;;;;;;;;;;-1:-1:-1;;;47584:27:0;;;;47525:211;;;47662:18;47641:17;;:39;;;;;;;;:::i;:::-;;47638:98;;;-1:-1:-1;47697:27:0;;;;;;;;;;;;-1:-1:-1;;;47697:27:0;;;;47638:98;47822:15;47762:126;;;;;;;;:::i;:::-;;;;-1:-1:-1;;47762:126:0;;;;;;;;;;-1:-1:-1;47901:20:0;;47985:14;47969:6;:12;;;:30;;;;;;;;:::i;:::-;;47966:487;;;-1:-1:-1;48016:21:0;;;;;;;;;;;;-1:-1:-1;;;48016:21:0;;;;47966:487;;;48083:18;48067:6;:12;;;:34;;;;;;;;:::i;:::-;;48064:389;;;-1:-1:-1;48118:21:0;;;;;;;;;;;;-1:-1:-1;;;48118:21:0;;;;48064:389;;;48185:15;48169:6;:12;;;:31;;;;;;;;:::i;:::-;;48166:287;;;-1:-1:-1;48217:21:0;;;;;;;;;;;;-1:-1:-1;;;48217:21:0;;;;48166:287;;;48284:14;48268:6;:12;;;:30;;;;;;;;:::i;:::-;;48265:188;;;-1:-1:-1;48315:21:0;;;;;;;;;;;;-1:-1:-1;;;48315:21:0;;;;48265:188;;;48382:15;48366:6;:12;;;:31;;;;;;;;:::i;:::-;;48363:90;;;-1:-1:-1;48426:15:0;48363:90;48533:9;48473:123;;;;;;;;:::i;:::-;;;;-1:-1:-1;;48473:123:0;;;;;;;;;;-1:-1:-1;48609:27:0;48671:20;48650:6;:17;;;:41;;;;;;;;:::i;:::-;;48647:1436;;;48708:639;;;;;;;;;;;;;;;;;;;48647:1436;;;49398:23;49377:6;:17;;;:44;;;;;;;;:::i;:::-;;49374:709;;;49438:89;;;;;;;;;;;;;;;;;;;49374:709;;;49578:23;49557:6;:17;;;:44;;;;;;;;:::i;:::-;;49554:529;;;49618:89;;;;;;;;;;;;;;;;;;;49554:529;;;49758:26;49737:6;:17;;;:47;;;;;;;;:::i;:::-;;49734:349;;;49801:89;;;;;;;;;;;;;;;;;;;49734:349;;;49941:24;49920:6;:17;;;:45;;;;;;;;:::i;:::-;;49917:166;;;49982:89;;;;;;;;;;;;;;;;;;;49917:166;50137:8;50160:13;50188:7;50210:13;50106:151;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;50106:151:0;;;;;;;;;;46912:3435;-1:-1:-1;;;;;;;;46912:3435:0:o;39062:2037::-;39120:13;39150:4;:11;39165:1;39150:16;39146:31;;;-1:-1:-1;;39168:9:0;;;;;;;;;-1:-1:-1;39168:9:0;;;39062:2037::o;39146:31::-;39237:19;39259:5;;;;;;;;;;;;;;;;;39237:27;;39316:18;39362:1;39343:4;:11;39357:1;39343:15;;;;:::i;:::-;39342:21;;;;:::i;:::-;39337:27;;:1;:27;:::i;:::-;39316:48;-1:-1:-1;39447:20:0;39481:15;39316:48;39494:2;39481:15;:::i;:::-;39470:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39470:27:0;;39447:50;;39594:10;39586:6;39579:26;39701:1;39694:5;39690:13;39772:4;39823;39817:11;39808:7;39804:25;39931:2;39923:6;39919:15;40016:810;40035:6;40026:7;40023:19;40016:810;;;40101:1;40088:15;;;40182:14;;40335:4;40323:2;40319:14;;;40315:25;;40301:40;;40295:47;40290:3;40286:57;;;40268:76;;40463:2;40459:14;;;40455:25;;40441:40;;40435:47;40426:57;;40389:1;40374:17;;40408:76;40604:1;40599:14;;;40595:25;;40581:40;;40575:47;40566:57;;40514:17;;;40548:76;40735:25;;40721:40;;40715:47;40706:57;;40654:17;;;40688:76;;;;40794:17;;40016:810;;;40911:1;40904:4;40898:11;40894:19;40932:1;40927:54;;;;41000:1;40995:52;;;;40887:160;;40927:54;-1:-1:-1;;;;;40943:17:0;;40936:43;40927:54;;40995:52;-1:-1:-1;;;;;41011:17:0;;41004:41;40887:160;-1:-1:-1;41085:6:0;;39062:2037;-1:-1:-1;;;;;;;;39062:2037:0:o;50355:2310::-;50452:30;;;;;;;;;;;;-1:-1:-1;;;50452:30:0;;;;50426:13;;;50452:24;50533:17;;:41;;;;;;;;:::i;:::-;;50530:386;;;-1:-1:-1;50576:20:0;;;;;;;;;;;;-1:-1:-1;;;50576:20:0;;;;50530:386;;;50636:21;50615:17;;:42;;;;;;;;:::i;:::-;;50612:304;;;-1:-1:-1;50659:21:0;;;;;;;;;;;;-1:-1:-1;;;50659:21:0;;;;50612:304;;;50720:19;50699:17;;:40;;;;;;;;:::i;:::-;;50696:220;;;-1:-1:-1;50741:19:0;;;;;;;;;;;;-1:-1:-1;;;50741:19:0;;;;50696:220;;;50800:18;50779:17;;:39;;;;;;;;:::i;:::-;;50776:140;;;-1:-1:-1;50820:18:0;;;;;;;;;;;;-1:-1:-1;;;50820:18:0;;;;50776:140;;;50878:18;50857:17;;:39;;;;;;;;:::i;:::-;;50854:62;;;-1:-1:-1;50898:18:0;;;;;;;;;;;;-1:-1:-1;;;50898:18:0;;;;50854:62;50996:10;51104;50961:192;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;50961:192:0;;;;;;;;;;-1:-1:-1;51177:24:0;51236:20;51215:6;:17;;;:41;;;;;;;;:::i;:::-;;51212:426;;;-1:-1:-1;51258:20:0;;;;;;;;;;;;-1:-1:-1;;;51258:20:0;;;;51212:426;;;51318:23;51297:6;:17;;;:44;;;;;;;;:::i;:::-;;51294:344;;;-1:-1:-1;51343:23:0;;;;;;;;;;;;-1:-1:-1;;;51343:23:0;;;;51294:344;;;51406:23;51385:6;:17;;;:44;;;;;;;;:::i;:::-;;51382:256;;;-1:-1:-1;51431:23:0;;;;;;;;;;;;-1:-1:-1;;;51431:23:0;;;;51382:256;;;51494:26;51473:6;:17;;;:47;;;;;;;;:::i;:::-;;51470:168;;;-1:-1:-1;51522:26:0;;;;;;;;;;;;-1:-1:-1;;;51522:26:0;;;;51470:168;;;51588:24;51567:6;:17;;;:45;;;;;;;;:::i;:::-;;51564:74;;;-1:-1:-1;51614:24:0;;;;;;;;;;;;-1:-1:-1;;;51614:24:0;;;;51564:74;51718:10;51826;51683:192;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;51683:192:0;;;;;;;;;;-1:-1:-1;51899:19:0;51948:14;51932:6;:12;;;:30;;;;;;;;:::i;:::-;;51929:321;;;-1:-1:-1;51964:14:0;;;;;;;;;;;;-1:-1:-1;;;51964:14:0;;;;51929:321;;;52013:18;51997:6;:12;;;:34;;;;;;;;:::i;:::-;;51994:256;;;-1:-1:-1;52033:18:0;;;;;;;;;;;;-1:-1:-1;;;52033:18:0;;;;51994:256;;;52086:15;52070:6;:12;;;:31;;;;;;;;:::i;:::-;;52067:183;;;-1:-1:-1;52103:15:0;;;;;;;;;;;;-1:-1:-1;;;52103:15:0;;;;52067:183;;;52153:14;52137:6;:12;;;:30;;;;;;;;:::i;:::-;;52134:116;;;-1:-1:-1;52169:14:0;;;;;;;;;;;;-1:-1:-1;;;52169:14:0;;;;52134:116;;;52218:15;52202:6;:12;;;:31;;;;;;;;:::i;:::-;;52199:51;;;-1:-1:-1;52235:15:0;;;;;;;;;;;;-1:-1:-1;;;52235:15:0;;;;52199:51;52330:10;52433:5;52295:181;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52261:226;;52569:10;52534:82;;;;;;;;:::i;:::-;;;;-1:-1:-1;;52534:82:0;;;;;;;;;;50355:2310;-1:-1:-1;;;;;;50355:2310:0:o;44599:411::-;44689:9;:11;;44669:7;;;44689:11;;;:::i;:::-;;;;-1:-1:-1;;44948:9:0;;44770:206;;;44809:15;44770:206;;;12057:19:1;44847:16:0;12092:12:1;;;12085:28;;;;12129:12;;;;12122:28;;;12184:15;;;-1:-1:-1;;12180:53:1;12166:12;;;12159:75;12250:13;;;12243:29;;;;12288:13;;44770:206:0;;;-1:-1:-1;;44770:206:0;;;;;;;;;44742:249;;44770:206;44742:249;;;;;44599:411;-1:-1:-1;;;44599:411:0:o;41140:384::-;41241:5;41277:4;41241:5;41313:11;41320:4;41313;:11;:::i;:::-;41292:32;;;;;-1:-1:-1;41367:20:0;;;;;41366:32;;41335:22;41480:4;41460:14;41292:32;41473:1;41460:14;:::i;:::-;41440:35;;;;;;:::i;:::-;41433:51;;;;:::i;:::-;41410:74;41140:384;-1:-1:-1;;;;;;;;;41140:384:0:o;32719:321::-;32849:18;32855:2;32859:7;32849:5;:18::i;:::-;32900:54;32931:1;32935:2;32939:7;32948:5;32900:22;:54::i;:::-;32878:154;;;;-1:-1:-1;;;32878:154:0;;;;;;;:::i;36740:799::-;36895:4;-1:-1:-1;;;;;36916:13:0;;8570:19;:23;36912:620;;36952:72;;-1:-1:-1;;;36952:72:0;;-1:-1:-1;;;;;36952:36:0;;;;;:72;;4366:10;;37003:4;;37009:7;;37018:5;;36952:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36952:72:0;;;;;;;;-1:-1:-1;;36952:72:0;;;;;;;;;;;;:::i;:::-;;;36948:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37194:13:0;;37190:272;;37237:60;;-1:-1:-1;;;37237:60:0;;;;;;;:::i;37190:272::-;37412:6;37406:13;37397:6;37393:2;37389:15;37382:38;36948:529;-1:-1:-1;;;;;;37075:51:0;-1:-1:-1;;;37075:51:0;;-1:-1:-1;37068:58:0;;36912:620;-1:-1:-1;37516:4:0;37509:11;;33376:439;-1:-1:-1;;;;;33456:16:0;;33448:61;;;;-1:-1:-1;;;33448:61:0;;19456:2:1;33448:61:0;;;19438:21:1;;;19475:18;;;19468:30;19534:34;19514:18;;;19507:62;19586:18;;33448:61:0;19254:356:1;33448:61:0;31463:4;31487:16;;;:7;:16;;;;;;-1:-1:-1;;;;;31487:16:0;:30;33520:58;;;;-1:-1:-1;;;33520:58:0;;15616:2:1;33520:58:0;;;15598:21:1;15655:2;15635:18;;;15628:30;15694;15674:18;;;15667:58;15742:18;;33520:58:0;15414:352:1;33520:58:0;-1:-1:-1;;;;;33649:13:0;;;;;;:9;:13;;;;;:18;;33666:1;;33649:13;:18;;33666:1;;33649:18;:::i;:::-;;;;-1:-1:-1;;33678:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;33678:21:0;-1:-1:-1;;;;;33678:21:0;;;;;;;;33717:33;;33678:16;;;33717:33;;33678:16;;33717:33;42997:360;;42968:389::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;:::-;333:39;192:186;-1:-1:-1;;;192:186:1:o;383:260::-;451:6;459;512:2;500:9;491:7;487:23;483:32;480:52;;;528:1;525;518:12;480:52;551:29;570:9;551:29;:::i;:::-;541:39;;599:38;633:2;622:9;618:18;599:38;:::i;:::-;589:48;;383:260;;;;;:::o;648:328::-;725:6;733;741;794:2;782:9;773:7;769:23;765:32;762:52;;;810:1;807;800:12;762:52;833:29;852:9;833:29;:::i;:::-;823:39;;881:38;915:2;904:9;900:18;881:38;:::i;:::-;871:48;;966:2;955:9;951:18;938:32;928:42;;648:328;;;;;:::o;981:1138::-;1076:6;1084;1092;1100;1153:3;1141:9;1132:7;1128:23;1124:33;1121:53;;;1170:1;1167;1160:12;1121:53;1193:29;1212:9;1193:29;:::i;:::-;1183:39;;1241:38;1275:2;1264:9;1260:18;1241:38;:::i;:::-;1231:48;;1326:2;1315:9;1311:18;1298:32;1288:42;;1381:2;1370:9;1366:18;1353:32;1404:18;1445:2;1437:6;1434:14;1431:34;;;1461:1;1458;1451:12;1431:34;1499:6;1488:9;1484:22;1474:32;;1544:7;1537:4;1533:2;1529:13;1525:27;1515:55;;1566:1;1563;1556:12;1515:55;1602:2;1589:16;1624:2;1620;1617:10;1614:36;;;1630:18;;:::i;:::-;1705:2;1699:9;1673:2;1759:13;;-1:-1:-1;;1755:22:1;;;1779:2;1751:31;1747:40;1735:53;;;1803:18;;;1823:22;;;1800:46;1797:72;;;1849:18;;:::i;:::-;1889:10;1885:2;1878:22;1924:2;1916:6;1909:18;1964:7;1959:2;1954;1950;1946:11;1942:20;1939:33;1936:53;;;1985:1;1982;1975:12;1936:53;2041:2;2036;2032;2028:11;2023:2;2015:6;2011:15;1998:46;2086:1;2081:2;2076;2068:6;2064:15;2060:24;2053:35;2107:6;2097:16;;;;;;;981:1138;;;;;;;:::o;2124:347::-;2189:6;2197;2250:2;2238:9;2229:7;2225:23;2221:32;2218:52;;;2266:1;2263;2256:12;2218:52;2289:29;2308:9;2289:29;:::i;:::-;2279:39;;2368:2;2357:9;2353:18;2340:32;2415:5;2408:13;2401:21;2394:5;2391:32;2381:60;;2437:1;2434;2427:12;2381:60;2460:5;2450:15;;;2124:347;;;;;:::o;2476:254::-;2544:6;2552;2605:2;2593:9;2584:7;2580:23;2576:32;2573:52;;;2621:1;2618;2611:12;2573:52;2644:29;2663:9;2644:29;:::i;:::-;2634:39;2720:2;2705:18;;;;2692:32;;-1:-1:-1;;;2476:254:1:o;2735:245::-;2793:6;2846:2;2834:9;2825:7;2821:23;2817:32;2814:52;;;2862:1;2859;2852:12;2814:52;2901:9;2888:23;2920:30;2944:5;2920:30;:::i;2985:249::-;3054:6;3107:2;3095:9;3086:7;3082:23;3078:32;3075:52;;;3123:1;3120;3113:12;3075:52;3155:9;3149:16;3174:30;3198:5;3174:30;:::i;3239:180::-;3298:6;3351:2;3339:9;3330:7;3326:23;3322:32;3319:52;;;3367:1;3364;3357:12;3319:52;-1:-1:-1;3390:23:1;;3239:180;-1:-1:-1;3239:180:1:o;3424:257::-;3465:3;3503:5;3497:12;3530:6;3525:3;3518:19;3546:63;3602:6;3595:4;3590:3;3586:14;3579:4;3572:5;3568:16;3546:63;:::i;:::-;3663:2;3642:15;-1:-1:-1;;3638:29:1;3629:39;;;;3670:4;3625:50;;3424:257;-1:-1:-1;;3424:257:1:o;3686:1020::-;4056:3;4094:6;4088:13;4110:53;4156:6;4151:3;4144:4;4136:6;4132:17;4110:53;:::i;:::-;4226:13;;4185:16;;;;4248:57;4226:13;4185:16;4282:4;4270:17;;4248:57;:::i;:::-;4372:13;;4327:20;;;4394:57;4372:13;4327:20;4428:4;4416:17;;4394:57;:::i;:::-;4518:13;;4473:20;;;4540:57;4518:13;4473:20;4574:4;4562:17;;4540:57;:::i;:::-;-1:-1:-1;;;4619:20:1;;4648:23;;;4698:1;4687:13;;3686:1020;-1:-1:-1;;;;;;3686:1020:1:o;4711:1011::-;5193:3;5231:6;5225:13;5247:53;5293:6;5288:3;5281:4;5273:6;5269:17;5247:53;:::i;:::-;5361:66;5322:16;;;5347:81;;;-1:-1:-1;;;5455:2:1;5444:14;;5437:54;5516:13;;5538:66;5516:13;5590:2;5579:14;;5572:4;5560:17;;5538:66;:::i;:::-;-1:-1:-1;;;5667:2:1;5623:20;;;;5659:11;;;5652:37;5713:2;5705:11;;4711:1011;-1:-1:-1;;;;4711:1011:1:o;5727:::-;6209:3;6247:6;6241:13;6263:53;6309:6;6304:3;6297:4;6289:6;6285:17;6263:53;:::i;:::-;6377:66;6338:16;;;6363:81;;;-1:-1:-1;;;6471:2:1;6460:14;;6453:54;6532:13;;6554:66;6532:13;6606:2;6595:14;;6588:4;6576:17;;6554:66;:::i;6743:439::-;6975:3;7013:6;7007:13;7029:53;7075:6;7070:3;7063:4;7055:6;7051:17;7029:53;:::i;:::-;-1:-1:-1;;;7104:16:1;;7129:18;;;-1:-1:-1;7174:1:1;7163:13;;6743:439;-1:-1:-1;6743:439:1:o;7187:1013::-;7669:3;7707:6;7701:13;7723:53;7769:6;7764:3;7757:4;7749:6;7745:17;7723:53;:::i;:::-;7837:66;7798:16;;;7823:81;;;-1:-1:-1;;;7931:2:1;7920:14;;7913:54;7992:13;;8014:68;7992:13;8066:4;8055:16;;;;8036:17;;8014:68;:::i;:::-;-1:-1:-1;;;8145:4:1;8101:20;;;;8137:13;;;8130:37;8191:2;8183:11;;7187:1013;-1:-1:-1;;;;7187:1013:1:o;8205:1591::-;-1:-1:-1;;;8854:66:1;;8943:13;;8836:3;;8965:62;8943:13;9015:2;9006:12;;8999:4;8987:17;;8965:62;:::i;:::-;9091:66;9086:2;9046:16;;;9078:11;;;9071:87;9187:34;9182:2;9174:11;;9167:55;9251:66;9246:2;9238:11;;9231:87;-1:-1:-1;;;9342:3:1;9334:12;;9327:34;9386:13;;9408:64;9386:13;9457:3;9449:12;;9442:4;9430:17;;9408:64;:::i;:::-;-1:-1:-1;;;9532:3:1;9491:17;;;;9524:12;;;9517:64;9606:13;;9628:64;9606:13;9677:3;9669:12;;9662:4;9650:17;;9628:64;:::i;:::-;-1:-1:-1;;;9752:3:1;9711:17;;;;9744:12;;;9737:25;9786:3;9778:12;;8205:1591;-1:-1:-1;;;;;8205:1591:1:o;9801:448::-;10063:31;10058:3;10051:44;10033:3;10124:6;10118:13;10140:62;10195:6;10190:2;10185:3;10181:12;10174:4;10166:6;10162:17;10140:62;:::i;:::-;10222:16;;;;10240:2;10218:25;;9801:448;-1:-1:-1;;9801:448:1:o;10254:671::-;-1:-1:-1;;;10605:49:1;;10677:13;;10587:3;;10699:62;10677:13;10749:2;10740:12;;10733:4;10721:17;;10699:62;:::i;:::-;10825:66;10820:2;10780:16;;;;10812:11;;;10805:87;-1:-1:-1;10916:2:1;10908:11;;10254:671;-1:-1:-1;10254:671:1:o;10930:::-;-1:-1:-1;;;11281:49:1;;11353:13;;11263:3;;11375:62;11353:13;11425:2;11416:12;;11409:4;11397:17;;11375:62;:::i;:::-;11501:66;11496:2;11456:16;;;;11488:11;;;11481:87;-1:-1:-1;11592:2:1;11584:11;;10930:671;-1:-1:-1;10930:671:1:o;12744:488::-;-1:-1:-1;;;;;13013:15:1;;;12995:34;;13065:15;;13060:2;13045:18;;13038:43;13112:2;13097:18;;13090:34;;;13160:3;13155:2;13140:18;;13133:31;;;12938:4;;13181:45;;13206:19;;13198:6;13181:45;:::i;:::-;13173:53;12744:488;-1:-1:-1;;;;;;12744:488:1:o;13429:524::-;13665:2;13650:18;;13677:44;13714:6;13677:44;:::i;:::-;13748:6;13737:9;13730:25;13764:44;13801:6;13764:44;:::i;:::-;13844:6;13839:2;13828:9;13824:18;13817:34;13860:44;13897:6;13860:44;:::i;:::-;13940:6;13935:2;13924:9;13920:18;13913:34;13429:524;;;;;;:::o;13958:219::-;14107:2;14096:9;14089:21;14070:4;14127:44;14167:2;14156:9;14152:18;14144:6;14127:44;:::i;14182:414::-;14384:2;14366:21;;;14423:2;14403:18;;;14396:30;14462:34;14457:2;14442:18;;14435:62;-1:-1:-1;;;14528:2:1;14513:18;;14506:48;14586:3;14571:19;;14182:414::o;21603:413::-;21805:2;21787:21;;;21844:2;21824:18;;;21817:30;21883:34;21878:2;21863:18;;21856:62;-1:-1:-1;;;21949:2:1;21934:18;;21927:47;22006:3;21991:19;;21603:413::o;22613:128::-;22653:3;22684:1;22680:6;22677:1;22674:13;22671:39;;;22690:18;;:::i;:::-;-1:-1:-1;22726:9:1;;22613:128::o;22746:204::-;22784:3;22820:4;22817:1;22813:12;22852:4;22849:1;22845:12;22887:3;22881:4;22877:14;22872:3;22869:23;22866:49;;;22895:18;;:::i;:::-;22931:13;;22746:204;-1:-1:-1;;;22746:204:1:o;22955:120::-;22995:1;23021;23011:35;;23026:18;;:::i;:::-;-1:-1:-1;23060:9:1;;22955:120::o;23080:168::-;23120:7;23186:1;23182;23178:6;23174:14;23171:1;23168:21;23163:1;23156:9;23149:17;23145:45;23142:71;;;23193:18;;:::i;:::-;-1:-1:-1;23233:9:1;;23080:168::o;23253:125::-;23293:4;23321:1;23318;23315:8;23312:34;;;23326:18;;:::i;:::-;-1:-1:-1;23363:9:1;;23253:125::o;23383:195::-;23421:4;23458;23455:1;23451:12;23490:4;23487:1;23483:12;23515:3;23510;23507:12;23504:38;;;23522:18;;:::i;:::-;23559:13;;;23383:195;-1:-1:-1;;;23383:195:1:o;23583:258::-;23655:1;23665:113;23679:6;23676:1;23673:13;23665:113;;;23755:11;;;23749:18;23736:11;;;23729:39;23701:2;23694:10;23665:113;;;23796:6;23793:1;23790:13;23787:48;;;-1:-1:-1;;23831:1:1;23813:16;;23806:27;23583:258::o;23846:380::-;23925:1;23921:12;;;;23968;;;23989:61;;24043:4;24035:6;24031:17;24021:27;;23989:61;24096:2;24088:6;24085:14;24065:18;24062:38;24059:161;;;24142:10;24137:3;24133:20;24130:1;24123:31;24177:4;24174:1;24167:15;24205:4;24202:1;24195:15;24059:161;;23846:380;;;:::o;24231:135::-;24270:3;-1:-1:-1;;24291:17:1;;24288:43;;;24311:18;;:::i;:::-;-1:-1:-1;24358:1:1;24347:13;;24231:135::o;24371:112::-;24403:1;24429;24419:35;;24434:18;;:::i;:::-;-1:-1:-1;24468:9:1;;24371:112::o;24488:127::-;24549:10;24544:3;24540:20;24537:1;24530:31;24580:4;24577:1;24570:15;24604:4;24601:1;24594:15;24620:127;24681:10;24676:3;24672:20;24669:1;24662:31;24712:4;24709:1;24702:15;24736:4;24733:1;24726:15;24752:127;24813:10;24808:3;24804:20;24801:1;24794:31;24844:4;24841:1;24834:15;24868:4;24865:1;24858:15;24884:127;24945:10;24940:3;24936:20;24933:1;24926:31;24976:4;24973:1;24966:15;25000:4;24997:1;24990:15;25016:127;25077:10;25072:3;25068:20;25065:1;25058:31;25108:4;25105:1;25098:15;25132:4;25129:1;25122:15;25148:216;25235:1;25228:5;25225:12;25215:143;;25280:10;25275:3;25271:20;25268:1;25261:31;25315:4;25312:1;25305:15;25343:4;25340:1;25333:15;25369:131;-1:-1:-1;;;;;;25443:32:1;;25433:43;;25423:71;;25490:1;25487;25480:12
Swarm Source
ipfs://5ae240d5bf6d9f9fef50cc3487d92900f7ffb0c6f72ea670f4269ccea32bff8d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,400.08 | 0.02 | $68 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.