Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 14 from a total of 14 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Safe Transfer Fr... | 15583235 | 872 days ago | IN | 0 ETH | 0.00090916 | ||||
Safe Transfer Fr... | 15583231 | 872 days ago | IN | 0 ETH | 0.00088592 | ||||
Safe Transfer Fr... | 15485718 | 887 days ago | IN | 0 ETH | 0.00276918 | ||||
Pause | 15078143 | 951 days ago | IN | 0 ETH | 0.00064735 | ||||
Mint | 15078123 | 951 days ago | IN | 0 ETH | 0.00957088 | ||||
Pause | 15078095 | 951 days ago | IN | 0 ETH | 0.00075273 | ||||
Whitelist Users | 15078081 | 951 days ago | IN | 0 ETH | 0.00210293 | ||||
Set Not Revealed... | 14160248 | 1098 days ago | IN | 0 ETH | 0.00642678 | ||||
Pause | 14141855 | 1101 days ago | IN | 0 ETH | 0.00327719 | ||||
Set Not Revealed... | 14141831 | 1101 days ago | IN | 0 ETH | 0.00395652 | ||||
Transfer From | 14141772 | 1101 days ago | IN | 0 ETH | 0.00993365 | ||||
Mint | 14141749 | 1101 days ago | IN | 0 ETH | 0.04416887 | ||||
Set Cost | 14141744 | 1101 days ago | IN | 0 ETH | 0.00330867 | ||||
Pause | 14141744 | 1101 days ago | IN | 0 ETH | 0.00397914 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
NFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-04 */ // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: NFT/NFT.sol pragma solidity >=0.7.0 <0.9.0; contract NFT is ERC721Enumerable, Ownable { using Strings for uint256; string public baseURI; string public baseExtension = ".json"; string public notRevealedUri; uint256 public cost = 0.1 ether; uint256 public maxSupply = 7777; uint256 public maxMintAmount = 20; uint256 public nftPerAddressLimit = 1000; bool public paused = true; bool public revealed = false; bool public onlyWhitelisted = true; address payable commissions = payable(0xC16AbAeeAB66AE36411F0d6564Cefcab6B5Dc11e); address[] public whitelistedAddresses; mapping(address => uint256) public addressMintedBalance; address payable public payments; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri, address _payments ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); payments = payable(_payments); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _mintAmount) public payable { require(!paused, "the contract is paused"); uint256 supply = totalSupply(); require(_mintAmount > 0, "need to mint at least 1 NFT"); require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded"); require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded"); if (msg.sender != owner()) { if(onlyWhitelisted == true) { require(isWhitelisted(msg.sender), "user is not whitelisted"); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded"); } require(msg.value >= cost * _mintAmount, "insufficient funds"); } for (uint256 i = 1; i <= _mintAmount; i++) { addressMintedBalance[msg.sender]++; _safeMint(msg.sender, supply + i); } (bool success, ) = payable(commissions).call{value: msg.value * 10 / 100}(""); require(success); } function isWhitelisted(address _user) public view returns (bool) { for (uint i = 0; i < whitelistedAddresses.length; i++) { if (whitelistedAddresses[i] == _user) { return true; } } return false; } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : ""; } //only owner function reveal() public onlyOwner { revealed = true; } function setNftPerAddressLimit(uint256 _limit) public onlyOwner { nftPerAddressLimit = _limit; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function pause(bool _state) public onlyOwner { paused = _state; } function setOnlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } function whitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } function withdraw() public payable onlyOwner { (bool success, ) = payable(payments).call{value: address(this).balance}(""); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"},{"internalType":"address","name":"_payments","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","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":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payments","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c9080519060200190620000519291906200045a565b5067016345785d8a0000600e55611e61600f5560146010556103e86011556001601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff02191690831515021790555073c16abaeeab66ae36411f0d6564cefcab6b5dc11e601260036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200012257600080fd5b5060405162005ac038038062005ac083398181016040528101906200014891906200059f565b84848160009080519060200190620001629291906200045a565b5080600190805190602001906200017b9291906200045a565b5050506200019e620001926200020c60201b60201c565b6200021460201b60201c565b620001af83620002da60201b60201c565b620001c0826200038560201b60201c565b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050620008f8565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002ea6200020c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003106200043060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000369576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036090620006ca565b60405180910390fd5b80600b9080519060200190620003819291906200045a565b5050565b620003956200020c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003bb6200043060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000414576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040b90620006ca565b60405180910390fd5b80600d90805190602001906200042c9291906200045a565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200046890620007c6565b90600052602060002090601f0160209004810192826200048c5760008555620004d8565b82601f10620004a757805160ff1916838001178555620004d8565b82800160010185558215620004d8579182015b82811115620004d7578251825591602001919060010190620004ba565b5b509050620004e79190620004eb565b5090565b5b8082111562000506576000816000905550600101620004ec565b5090565b6000620005216200051b8462000715565b620006ec565b90508281526020810184848401111562000540576200053f62000895565b5b6200054d84828562000790565b509392505050565b6000815190506200056681620008de565b92915050565b600082601f83011262000584576200058362000890565b5b8151620005968482602086016200050a565b91505092915050565b600080600080600060a08688031215620005be57620005bd6200089f565b5b600086015167ffffffffffffffff811115620005df57620005de6200089a565b5b620005ed888289016200056c565b955050602086015167ffffffffffffffff8111156200061157620006106200089a565b5b6200061f888289016200056c565b945050604086015167ffffffffffffffff8111156200064357620006426200089a565b5b62000651888289016200056c565b935050606086015167ffffffffffffffff8111156200067557620006746200089a565b5b62000683888289016200056c565b9250506080620006968882890162000555565b9150509295509295909350565b6000620006b26020836200074b565b9150620006bf82620008b5565b602082019050919050565b60006020820190508181036000830152620006e581620006a3565b9050919050565b6000620006f86200070b565b9050620007068282620007fc565b919050565b6000604051905090565b600067ffffffffffffffff82111562000733576200073262000861565b5b6200073e82620008a4565b9050602081019050919050565b600082825260208201905092915050565b6000620007698262000770565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620007b057808201518184015260208101905062000793565b83811115620007c0576000848401525b50505050565b60006002820490506001821680620007df57607f821691505b60208210811415620007f657620007f562000832565b5b50919050565b6200080782620008a4565b810181811067ffffffffffffffff8211171562000829576200082862000861565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620008e9816200075c565b8114620008f557600080fd5b50565b6151b880620009086000396000f3fe60806040526004361061027d5760003560e01c80636c0360eb1161014f578063b88d4fde116100c1578063d5abeb011161007a578063d5abeb0114610992578063da3ef23f146109bd578063e985e9c5146109e6578063edec5f2714610a23578063f2c4ce1e14610a4c578063f2fde38b14610a755761027d565b8063b88d4fde14610870578063ba4e5c4914610899578063ba7d2c76146108d6578063c668286214610901578063c87b56dd1461092c578063d0eb26b0146109695761027d565b806395d89b411161011357806395d89b41146107935780639c70b512146107be578063a0712d68146107e9578063a22cb46514610805578063a475b5dd1461082e578063a6d23e10146108455761027d565b80636c0360eb146106c057806370a08231146106eb578063715018a6146107285780637f00c7a61461073f5780638da5cb5b146107685761027d565b80632f745c59116101f357806344a0d68a116101ac57806344a0d68a1461059e5780634f6ccce7146105c7578063518302271461060457806355f804b31461062f5780635c975abb146106585780636352211e146106835761027d565b80632f745c591461048b5780633af32abf146104c85780633c952764146105055780633ccfd60b1461052e57806342842e0e14610538578063438b6300146105615761027d565b8063095ea7b311610245578063095ea7b31461037b57806313faede6146103a457806318160ddd146103cf57806318cae269146103fa578063239c70ae1461043757806323b872dd146104625761027d565b806301ffc9a71461028257806302329a29146102bf57806306fdde03146102e8578063081812fc14610313578063081c8c4414610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613b1f565b610a9e565b6040516102b6919061424a565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190613af2565b610b18565b005b3480156102f457600080fd5b506102fd610bb1565b60405161030a9190614265565b60405180910390f35b34801561031f57600080fd5b5061033a60048036038101906103359190613bc2565b610c43565b60405161034791906141a6565b60405180910390f35b34801561035c57600080fd5b50610365610cc8565b6040516103729190614265565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190613a65565b610d56565b005b3480156103b057600080fd5b506103b9610e6e565b6040516103c691906145a7565b60405180910390f35b3480156103db57600080fd5b506103e4610e74565b6040516103f191906145a7565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c91906138e2565b610e81565b60405161042e91906145a7565b60405180910390f35b34801561044357600080fd5b5061044c610e99565b60405161045991906145a7565b60405180910390f35b34801561046e57600080fd5b506104896004803603810190610484919061394f565b610e9f565b005b34801561049757600080fd5b506104b260048036038101906104ad9190613a65565b610eff565b6040516104bf91906145a7565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea91906138e2565b610fa4565b6040516104fc919061424a565b60405180910390f35b34801561051157600080fd5b5061052c60048036038101906105279190613af2565b611053565b005b6105366110ec565b005b34801561054457600080fd5b5061055f600480360381019061055a919061394f565b611203565b005b34801561056d57600080fd5b50610588600480360381019061058391906138e2565b611223565b6040516105959190614228565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c09190613bc2565b6112d1565b005b3480156105d357600080fd5b506105ee60048036038101906105e99190613bc2565b611357565b6040516105fb91906145a7565b60405180910390f35b34801561061057600080fd5b506106196113c8565b604051610626919061424a565b60405180910390f35b34801561063b57600080fd5b5061065660048036038101906106519190613b79565b6113db565b005b34801561066457600080fd5b5061066d611471565b60405161067a919061424a565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a59190613bc2565b611484565b6040516106b791906141a6565b60405180910390f35b3480156106cc57600080fd5b506106d5611536565b6040516106e29190614265565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d91906138e2565b6115c4565b60405161071f91906145a7565b60405180910390f35b34801561073457600080fd5b5061073d61167c565b005b34801561074b57600080fd5b5061076660048036038101906107619190613bc2565b611704565b005b34801561077457600080fd5b5061077d61178a565b60405161078a91906141a6565b60405180910390f35b34801561079f57600080fd5b506107a86117b4565b6040516107b59190614265565b60405180910390f35b3480156107ca57600080fd5b506107d3611846565b6040516107e0919061424a565b60405180910390f35b61080360048036038101906107fe9190613bc2565b611859565b005b34801561081157600080fd5b5061082c60048036038101906108279190613a25565b611c53565b005b34801561083a57600080fd5b50610843611c69565b005b34801561085157600080fd5b5061085a611d02565b60405161086791906141c1565b60405180910390f35b34801561087c57600080fd5b50610897600480360381019061089291906139a2565b611d28565b005b3480156108a557600080fd5b506108c060048036038101906108bb9190613bc2565b611d8a565b6040516108cd91906141a6565b60405180910390f35b3480156108e257600080fd5b506108eb611dc9565b6040516108f891906145a7565b60405180910390f35b34801561090d57600080fd5b50610916611dcf565b6040516109239190614265565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190613bc2565b611e5d565b6040516109609190614265565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b9190613bc2565b611fb6565b005b34801561099e57600080fd5b506109a761203c565b6040516109b491906145a7565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190613b79565b612042565b005b3480156109f257600080fd5b50610a0d6004803603810190610a08919061390f565b6120d8565b604051610a1a919061424a565b60405180910390f35b348015610a2f57600080fd5b50610a4a6004803603810190610a459190613aa5565b61216c565b005b348015610a5857600080fd5b50610a736004803603810190610a6e9190613b79565b61220c565b005b348015610a8157600080fd5b50610a9c6004803603810190610a9791906138e2565b6122a2565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b115750610b108261239a565b5b9050919050565b610b2061247c565b73ffffffffffffffffffffffffffffffffffffffff16610b3e61178a565b73ffffffffffffffffffffffffffffffffffffffff1614610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b90614467565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610bc0906148c2565b80601f0160208091040260200160405190810160405280929190818152602001828054610bec906148c2565b8015610c395780601f10610c0e57610100808354040283529160200191610c39565b820191906000526020600020905b815481529060010190602001808311610c1c57829003601f168201915b5050505050905090565b6000610c4e82612484565b610c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8490614447565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610cd5906148c2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d01906148c2565b8015610d4e5780601f10610d2357610100808354040283529160200191610d4e565b820191906000526020600020905b815481529060010190602001808311610d3157829003601f168201915b505050505081565b6000610d6182611484565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc9906144e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610df161247c565b73ffffffffffffffffffffffffffffffffffffffff161480610e205750610e1f81610e1a61247c565b6120d8565b5b610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5690614387565b60405180910390fd5b610e6983836124f0565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60105481565b610eb0610eaa61247c565b826125a9565b610eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee690614527565b60405180910390fd5b610efa838383612687565b505050565b6000610f0a836115c4565b8210610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290614287565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601380549050811015611048578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610fe457610fe3614a5b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561103557600191505061104e565b808061104090614925565b915050610fac565b50600090505b919050565b61105b61247c565b73ffffffffffffffffffffffffffffffffffffffff1661107961178a565b73ffffffffffffffffffffffffffffffffffffffff16146110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c690614467565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b6110f461247c565b73ffffffffffffffffffffffffffffffffffffffff1661111261178a565b73ffffffffffffffffffffffffffffffffffffffff1614611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90614467565b60405180910390fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516111b090614191565b60006040518083038185875af1925050503d80600081146111ed576040519150601f19603f3d011682016040523d82523d6000602084013e6111f2565b606091505b505090508061120057600080fd5b50565b61121e83838360405180602001604052806000815250611d28565b505050565b60606000611230836115c4565b905060008167ffffffffffffffff81111561124e5761124d614a8a565b5b60405190808252806020026020018201604052801561127c5781602001602082028036833780820191505090505b50905060005b828110156112c6576112948582610eff565b8282815181106112a7576112a6614a5b565b5b60200260200101818152505080806112be90614925565b915050611282565b508092505050919050565b6112d961247c565b73ffffffffffffffffffffffffffffffffffffffff166112f761178a565b73ffffffffffffffffffffffffffffffffffffffff161461134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134490614467565b60405180910390fd5b80600e8190555050565b6000611361610e74565b82106113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139990614547565b60405180910390fd5b600882815481106113b6576113b5614a5b565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b6113e361247c565b73ffffffffffffffffffffffffffffffffffffffff1661140161178a565b73ffffffffffffffffffffffffffffffffffffffff1614611457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144e90614467565b60405180910390fd5b80600b908051906020019061146d9291906135df565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561152d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611524906143c7565b60405180910390fd5b80915050919050565b600b8054611543906148c2565b80601f016020809104026020016040519081016040528092919081815260200182805461156f906148c2565b80156115bc5780601f10611591576101008083540402835291602001916115bc565b820191906000526020600020905b81548152906001019060200180831161159f57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c906143a7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61168461247c565b73ffffffffffffffffffffffffffffffffffffffff166116a261178a565b73ffffffffffffffffffffffffffffffffffffffff16146116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef90614467565b60405180910390fd5b61170260006128e3565b565b61170c61247c565b73ffffffffffffffffffffffffffffffffffffffff1661172a61178a565b73ffffffffffffffffffffffffffffffffffffffff1614611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177790614467565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117c3906148c2565b80601f01602080910402602001604051908101604052809291908181526020018280546117ef906148c2565b801561183c5780601f106118115761010080835404028352916020019161183c565b820191906000526020600020905b81548152906001019060200180831161181f57829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff16156118a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a090614487565b60405180910390fd5b60006118b3610e74565b9050600082116118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef90614587565b60405180910390fd5b60105482111561193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614407565b60405180910390fd5b600f54828261194c91906146e5565b111561198d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611984906143e7565b60405180910390fd5b61199561178a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b125760011515601260029054906101000a900460ff1615151415611ac1576119ec33610fa4565b611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2290614567565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506011548382611a7e91906146e5565b1115611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab690614307565b60405180910390fd5b505b81600e54611acf919061476c565b341015611b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0890614507565b60405180910390fd5b5b6000600190505b828111611b9d57601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611b7090614925565b9190505550611b8a338284611b8591906146e5565b6129a9565b8080611b9590614925565b915050611b19565b506000601260039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166064600a34611be8919061476c565b611bf2919061473b565b604051611bfe90614191565b60006040518083038185875af1925050503d8060008114611c3b576040519150601f19603f3d011682016040523d82523d6000602084013e611c40565b606091505b5050905080611c4e57600080fd5b505050565b611c65611c5e61247c565b83836129c7565b5050565b611c7161247c565b73ffffffffffffffffffffffffffffffffffffffff16611c8f61178a565b73ffffffffffffffffffffffffffffffffffffffff1614611ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdc90614467565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d39611d3361247c565b836125a9565b611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f90614527565b60405180910390fd5b611d8484848484612b34565b50505050565b60138181548110611d9a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c8054611ddc906148c2565b80601f0160208091040260200160405190810160405280929190818152602001828054611e08906148c2565b8015611e555780601f10611e2a57610100808354040283529160200191611e55565b820191906000526020600020905b815481529060010190602001808311611e3857829003601f168201915b505050505081565b6060611e6882612484565b611ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9e906144c7565b60405180910390fd5b60001515601260019054906101000a900460ff1615151415611f5557600d8054611ed0906148c2565b80601f0160208091040260200160405190810160405280929190818152602001828054611efc906148c2565b8015611f495780601f10611f1e57610100808354040283529160200191611f49565b820191906000526020600020905b815481529060010190602001808311611f2c57829003601f168201915b50505050509050611fb1565b6000611f5f612b90565b90506000815111611f7f5760405180602001604052806000815250611fad565b80611f8984612c22565b600c604051602001611f9d93929190614160565b6040516020818303038152906040525b9150505b919050565b611fbe61247c565b73ffffffffffffffffffffffffffffffffffffffff16611fdc61178a565b73ffffffffffffffffffffffffffffffffffffffff1614612032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202990614467565b60405180910390fd5b8060118190555050565b600f5481565b61204a61247c565b73ffffffffffffffffffffffffffffffffffffffff1661206861178a565b73ffffffffffffffffffffffffffffffffffffffff16146120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b590614467565b60405180910390fd5b80600c90805190602001906120d49291906135df565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61217461247c565b73ffffffffffffffffffffffffffffffffffffffff1661219261178a565b73ffffffffffffffffffffffffffffffffffffffff16146121e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121df90614467565b60405180910390fd5b601360006121f69190613665565b818160139190612207929190613686565b505050565b61221461247c565b73ffffffffffffffffffffffffffffffffffffffff1661223261178a565b73ffffffffffffffffffffffffffffffffffffffff1614612288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227f90614467565b60405180910390fd5b80600d908051906020019061229e9291906135df565b5050565b6122aa61247c565b73ffffffffffffffffffffffffffffffffffffffff166122c861178a565b73ffffffffffffffffffffffffffffffffffffffff161461231e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231590614467565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561238e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612385906142c7565b60405180910390fd5b612397816128e3565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061246557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612475575061247482612d83565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661256383611484565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125b482612484565b6125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ea90614367565b60405180910390fd5b60006125fe83611484565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061266d57508373ffffffffffffffffffffffffffffffffffffffff1661265584610c43565b73ffffffffffffffffffffffffffffffffffffffff16145b8061267e575061267d81856120d8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126a782611484565b73ffffffffffffffffffffffffffffffffffffffff16146126fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f4906144a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561276d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276490614327565b60405180910390fd5b612778838383612ded565b6127836000826124f0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127d391906147c6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461282a91906146e5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129c3828260405180602001604052806000815250612f01565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2d90614347565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b27919061424a565b60405180910390a3505050565b612b3f848484612687565b612b4b84848484612f5c565b612b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b81906142a7565b60405180910390fd5b50505050565b6060600b8054612b9f906148c2565b80601f0160208091040260200160405190810160405280929190818152602001828054612bcb906148c2565b8015612c185780601f10612bed57610100808354040283529160200191612c18565b820191906000526020600020905b815481529060010190602001808311612bfb57829003601f168201915b5050505050905090565b60606000821415612c6a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d7e565b600082905060005b60008214612c9c578080612c8590614925565b915050600a82612c95919061473b565b9150612c72565b60008167ffffffffffffffff811115612cb857612cb7614a8a565b5b6040519080825280601f01601f191660200182016040528015612cea5781602001600182028036833780820191505090505b5090505b60008514612d7757600182612d0391906147c6565b9150600a85612d12919061496e565b6030612d1e91906146e5565b60f81b818381518110612d3457612d33614a5b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d70919061473b565b9450612cee565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612df88383836130f3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e3b57612e36816130f8565b612e7a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e7957612e788382613141565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ebd57612eb8816132ae565b612efc565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612efb57612efa828261337f565b5b5b505050565b612f0b83836133fe565b612f186000848484612f5c565b612f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4e906142a7565b60405180910390fd5b505050565b6000612f7d8473ffffffffffffffffffffffffffffffffffffffff166135cc565b156130e6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fa661247c565b8786866040518563ffffffff1660e01b8152600401612fc894939291906141dc565b602060405180830381600087803b158015612fe257600080fd5b505af192505050801561301357506040513d601f19601f820116820180604052508101906130109190613b4c565b60015b613096573d8060008114613043576040519150601f19603f3d011682016040523d82523d6000602084013e613048565b606091505b5060008151141561308e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613085906142a7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130eb565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161314e846115c4565b61315891906147c6565b905060006007600084815260200190815260200160002054905081811461323d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506132c291906147c6565b90506000600960008481526020019081526020016000205490506000600883815481106132f2576132f1614a5b565b5b90600052602060002001549050806008838154811061331457613313614a5b565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061336357613362614a2c565b5b6001900381819060005260206000200160009055905550505050565b600061338a836115c4565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561346e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346590614427565b60405180910390fd5b61347781612484565b156134b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ae906142e7565b60405180910390fd5b6134c360008383612ded565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461351391906146e5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546135eb906148c2565b90600052602060002090601f01602090048101928261360d5760008555613654565b82601f1061362657805160ff1916838001178555613654565b82800160010185558215613654579182015b82811115613653578251825591602001919060010190613638565b5b5090506136619190613726565b5090565b50805460008255906000526020600020908101906136839190613726565b50565b828054828255906000526020600020908101928215613715579160200282015b8281111561371457823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906136a6565b5b5090506137229190613726565b5090565b5b8082111561373f576000816000905550600101613727565b5090565b6000613756613751846145e7565b6145c2565b90508281526020810184848401111561377257613771614ac8565b5b61377d848285614880565b509392505050565b600061379861379384614618565b6145c2565b9050828152602081018484840111156137b4576137b3614ac8565b5b6137bf848285614880565b509392505050565b6000813590506137d681615126565b92915050565b60008083601f8401126137f2576137f1614abe565b5b8235905067ffffffffffffffff81111561380f5761380e614ab9565b5b60208301915083602082028301111561382b5761382a614ac3565b5b9250929050565b6000813590506138418161513d565b92915050565b60008135905061385681615154565b92915050565b60008151905061386b81615154565b92915050565b600082601f83011261388657613885614abe565b5b8135613896848260208601613743565b91505092915050565b600082601f8301126138b4576138b3614abe565b5b81356138c4848260208601613785565b91505092915050565b6000813590506138dc8161516b565b92915050565b6000602082840312156138f8576138f7614ad2565b5b6000613906848285016137c7565b91505092915050565b6000806040838503121561392657613925614ad2565b5b6000613934858286016137c7565b9250506020613945858286016137c7565b9150509250929050565b60008060006060848603121561396857613967614ad2565b5b6000613976868287016137c7565b9350506020613987868287016137c7565b9250506040613998868287016138cd565b9150509250925092565b600080600080608085870312156139bc576139bb614ad2565b5b60006139ca878288016137c7565b94505060206139db878288016137c7565b93505060406139ec878288016138cd565b925050606085013567ffffffffffffffff811115613a0d57613a0c614acd565b5b613a1987828801613871565b91505092959194509250565b60008060408385031215613a3c57613a3b614ad2565b5b6000613a4a858286016137c7565b9250506020613a5b85828601613832565b9150509250929050565b60008060408385031215613a7c57613a7b614ad2565b5b6000613a8a858286016137c7565b9250506020613a9b858286016138cd565b9150509250929050565b60008060208385031215613abc57613abb614ad2565b5b600083013567ffffffffffffffff811115613ada57613ad9614acd565b5b613ae6858286016137dc565b92509250509250929050565b600060208284031215613b0857613b07614ad2565b5b6000613b1684828501613832565b91505092915050565b600060208284031215613b3557613b34614ad2565b5b6000613b4384828501613847565b91505092915050565b600060208284031215613b6257613b61614ad2565b5b6000613b708482850161385c565b91505092915050565b600060208284031215613b8f57613b8e614ad2565b5b600082013567ffffffffffffffff811115613bad57613bac614acd565b5b613bb98482850161389f565b91505092915050565b600060208284031215613bd857613bd7614ad2565b5b6000613be6848285016138cd565b91505092915050565b6000613bfb8383614142565b60208301905092915050565b613c108161480c565b82525050565b613c1f816147fa565b82525050565b6000613c308261466e565b613c3a818561469c565b9350613c4583614649565b8060005b83811015613c76578151613c5d8882613bef565b9750613c688361468f565b925050600181019050613c49565b5085935050505092915050565b613c8c8161481e565b82525050565b6000613c9d82614679565b613ca781856146ad565b9350613cb781856020860161488f565b613cc081614ad7565b840191505092915050565b6000613cd682614684565b613ce081856146c9565b9350613cf081856020860161488f565b613cf981614ad7565b840191505092915050565b6000613d0f82614684565b613d1981856146da565b9350613d2981856020860161488f565b80840191505092915050565b60008154613d42816148c2565b613d4c81866146da565b94506001821660008114613d675760018114613d7857613dab565b60ff19831686528186019350613dab565b613d8185614659565b60005b83811015613da357815481890152600182019150602081019050613d84565b838801955050505b50505092915050565b6000613dc1602b836146c9565b9150613dcc82614ae8565b604082019050919050565b6000613de46032836146c9565b9150613def82614b37565b604082019050919050565b6000613e076026836146c9565b9150613e1282614b86565b604082019050919050565b6000613e2a601c836146c9565b9150613e3582614bd5565b602082019050919050565b6000613e4d601c836146c9565b9150613e5882614bfe565b602082019050919050565b6000613e706024836146c9565b9150613e7b82614c27565b604082019050919050565b6000613e936019836146c9565b9150613e9e82614c76565b602082019050919050565b6000613eb6602c836146c9565b9150613ec182614c9f565b604082019050919050565b6000613ed96038836146c9565b9150613ee482614cee565b604082019050919050565b6000613efc602a836146c9565b9150613f0782614d3d565b604082019050919050565b6000613f1f6029836146c9565b9150613f2a82614d8c565b604082019050919050565b6000613f426016836146c9565b9150613f4d82614ddb565b602082019050919050565b6000613f656024836146c9565b9150613f7082614e04565b604082019050919050565b6000613f886020836146c9565b9150613f9382614e53565b602082019050919050565b6000613fab602c836146c9565b9150613fb682614e7c565b604082019050919050565b6000613fce6020836146c9565b9150613fd982614ecb565b602082019050919050565b6000613ff16016836146c9565b9150613ffc82614ef4565b602082019050919050565b60006140146029836146c9565b915061401f82614f1d565b604082019050919050565b6000614037602f836146c9565b915061404282614f6c565b604082019050919050565b600061405a6021836146c9565b915061406582614fbb565b604082019050919050565b600061407d6000836146be565b91506140888261500a565b600082019050919050565b60006140a06012836146c9565b91506140ab8261500d565b602082019050919050565b60006140c36031836146c9565b91506140ce82615036565b604082019050919050565b60006140e6602c836146c9565b91506140f182615085565b604082019050919050565b60006141096017836146c9565b9150614114826150d4565b602082019050919050565b600061412c601b836146c9565b9150614137826150fd565b602082019050919050565b61414b81614876565b82525050565b61415a81614876565b82525050565b600061416c8286613d04565b91506141788285613d04565b91506141848284613d35565b9150819050949350505050565b600061419c82614070565b9150819050919050565b60006020820190506141bb6000830184613c16565b92915050565b60006020820190506141d66000830184613c07565b92915050565b60006080820190506141f16000830187613c16565b6141fe6020830186613c16565b61420b6040830185614151565b818103606083015261421d8184613c92565b905095945050505050565b600060208201905081810360008301526142428184613c25565b905092915050565b600060208201905061425f6000830184613c83565b92915050565b6000602082019050818103600083015261427f8184613ccb565b905092915050565b600060208201905081810360008301526142a081613db4565b9050919050565b600060208201905081810360008301526142c081613dd7565b9050919050565b600060208201905081810360008301526142e081613dfa565b9050919050565b6000602082019050818103600083015261430081613e1d565b9050919050565b6000602082019050818103600083015261432081613e40565b9050919050565b6000602082019050818103600083015261434081613e63565b9050919050565b6000602082019050818103600083015261436081613e86565b9050919050565b6000602082019050818103600083015261438081613ea9565b9050919050565b600060208201905081810360008301526143a081613ecc565b9050919050565b600060208201905081810360008301526143c081613eef565b9050919050565b600060208201905081810360008301526143e081613f12565b9050919050565b6000602082019050818103600083015261440081613f35565b9050919050565b6000602082019050818103600083015261442081613f58565b9050919050565b6000602082019050818103600083015261444081613f7b565b9050919050565b6000602082019050818103600083015261446081613f9e565b9050919050565b6000602082019050818103600083015261448081613fc1565b9050919050565b600060208201905081810360008301526144a081613fe4565b9050919050565b600060208201905081810360008301526144c081614007565b9050919050565b600060208201905081810360008301526144e08161402a565b9050919050565b600060208201905081810360008301526145008161404d565b9050919050565b6000602082019050818103600083015261452081614093565b9050919050565b60006020820190508181036000830152614540816140b6565b9050919050565b60006020820190508181036000830152614560816140d9565b9050919050565b60006020820190508181036000830152614580816140fc565b9050919050565b600060208201905081810360008301526145a08161411f565b9050919050565b60006020820190506145bc6000830184614151565b92915050565b60006145cc6145dd565b90506145d882826148f4565b919050565b6000604051905090565b600067ffffffffffffffff82111561460257614601614a8a565b5b61460b82614ad7565b9050602081019050919050565b600067ffffffffffffffff82111561463357614632614a8a565b5b61463c82614ad7565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006146f082614876565b91506146fb83614876565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147305761472f61499f565b5b828201905092915050565b600061474682614876565b915061475183614876565b925082614761576147606149ce565b5b828204905092915050565b600061477782614876565b915061478283614876565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147bb576147ba61499f565b5b828202905092915050565b60006147d182614876565b91506147dc83614876565b9250828210156147ef576147ee61499f565b5b828203905092915050565b600061480582614856565b9050919050565b600061481782614856565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148ad578082015181840152602081019050614892565b838111156148bc576000848401525b50505050565b600060028204905060018216806148da57607f821691505b602082108114156148ee576148ed6149fd565b5b50919050565b6148fd82614ad7565b810181811067ffffffffffffffff8211171561491c5761491b614a8a565b5b80604052505050565b600061493082614876565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149635761496261499f565b5b600182019050919050565b600061497982614876565b915061498483614876565b925082614994576149936149ce565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b61512f816147fa565b811461513a57600080fd5b50565b6151468161481e565b811461515157600080fd5b50565b61515d8161482a565b811461516857600080fd5b50565b61517481614876565b811461517f57600080fd5b5056fea264697066735822122002ebeea944354eebf21b66f21b25b293b65f77dd4936b4d990f416239d50ab4164736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000025d5f8059b07efe13ee71ff60f01bada8b0bf6af0000000000000000000000000000000000000000000000000000000000000009526f62696e754e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006526f62696e7500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6137785548556d47524259756978436371424750416a4354655636627a313478377776356452354d37565a542f000000000000000000000000000000000000000000000000000000000000000000000000000000000045697066733a2f2f516d61576869536151666757316d6672514336424155714c59354d506b50475a5a62424d4e616552705053576b502f556e72657665616c65642e6a736f6e000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061027d5760003560e01c80636c0360eb1161014f578063b88d4fde116100c1578063d5abeb011161007a578063d5abeb0114610992578063da3ef23f146109bd578063e985e9c5146109e6578063edec5f2714610a23578063f2c4ce1e14610a4c578063f2fde38b14610a755761027d565b8063b88d4fde14610870578063ba4e5c4914610899578063ba7d2c76146108d6578063c668286214610901578063c87b56dd1461092c578063d0eb26b0146109695761027d565b806395d89b411161011357806395d89b41146107935780639c70b512146107be578063a0712d68146107e9578063a22cb46514610805578063a475b5dd1461082e578063a6d23e10146108455761027d565b80636c0360eb146106c057806370a08231146106eb578063715018a6146107285780637f00c7a61461073f5780638da5cb5b146107685761027d565b80632f745c59116101f357806344a0d68a116101ac57806344a0d68a1461059e5780634f6ccce7146105c7578063518302271461060457806355f804b31461062f5780635c975abb146106585780636352211e146106835761027d565b80632f745c591461048b5780633af32abf146104c85780633c952764146105055780633ccfd60b1461052e57806342842e0e14610538578063438b6300146105615761027d565b8063095ea7b311610245578063095ea7b31461037b57806313faede6146103a457806318160ddd146103cf57806318cae269146103fa578063239c70ae1461043757806323b872dd146104625761027d565b806301ffc9a71461028257806302329a29146102bf57806306fdde03146102e8578063081812fc14610313578063081c8c4414610350575b600080fd5b34801561028e57600080fd5b506102a960048036038101906102a49190613b1f565b610a9e565b6040516102b6919061424a565b60405180910390f35b3480156102cb57600080fd5b506102e660048036038101906102e19190613af2565b610b18565b005b3480156102f457600080fd5b506102fd610bb1565b60405161030a9190614265565b60405180910390f35b34801561031f57600080fd5b5061033a60048036038101906103359190613bc2565b610c43565b60405161034791906141a6565b60405180910390f35b34801561035c57600080fd5b50610365610cc8565b6040516103729190614265565b60405180910390f35b34801561038757600080fd5b506103a2600480360381019061039d9190613a65565b610d56565b005b3480156103b057600080fd5b506103b9610e6e565b6040516103c691906145a7565b60405180910390f35b3480156103db57600080fd5b506103e4610e74565b6040516103f191906145a7565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c91906138e2565b610e81565b60405161042e91906145a7565b60405180910390f35b34801561044357600080fd5b5061044c610e99565b60405161045991906145a7565b60405180910390f35b34801561046e57600080fd5b506104896004803603810190610484919061394f565b610e9f565b005b34801561049757600080fd5b506104b260048036038101906104ad9190613a65565b610eff565b6040516104bf91906145a7565b60405180910390f35b3480156104d457600080fd5b506104ef60048036038101906104ea91906138e2565b610fa4565b6040516104fc919061424a565b60405180910390f35b34801561051157600080fd5b5061052c60048036038101906105279190613af2565b611053565b005b6105366110ec565b005b34801561054457600080fd5b5061055f600480360381019061055a919061394f565b611203565b005b34801561056d57600080fd5b50610588600480360381019061058391906138e2565b611223565b6040516105959190614228565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c09190613bc2565b6112d1565b005b3480156105d357600080fd5b506105ee60048036038101906105e99190613bc2565b611357565b6040516105fb91906145a7565b60405180910390f35b34801561061057600080fd5b506106196113c8565b604051610626919061424a565b60405180910390f35b34801561063b57600080fd5b5061065660048036038101906106519190613b79565b6113db565b005b34801561066457600080fd5b5061066d611471565b60405161067a919061424a565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a59190613bc2565b611484565b6040516106b791906141a6565b60405180910390f35b3480156106cc57600080fd5b506106d5611536565b6040516106e29190614265565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d91906138e2565b6115c4565b60405161071f91906145a7565b60405180910390f35b34801561073457600080fd5b5061073d61167c565b005b34801561074b57600080fd5b5061076660048036038101906107619190613bc2565b611704565b005b34801561077457600080fd5b5061077d61178a565b60405161078a91906141a6565b60405180910390f35b34801561079f57600080fd5b506107a86117b4565b6040516107b59190614265565b60405180910390f35b3480156107ca57600080fd5b506107d3611846565b6040516107e0919061424a565b60405180910390f35b61080360048036038101906107fe9190613bc2565b611859565b005b34801561081157600080fd5b5061082c60048036038101906108279190613a25565b611c53565b005b34801561083a57600080fd5b50610843611c69565b005b34801561085157600080fd5b5061085a611d02565b60405161086791906141c1565b60405180910390f35b34801561087c57600080fd5b50610897600480360381019061089291906139a2565b611d28565b005b3480156108a557600080fd5b506108c060048036038101906108bb9190613bc2565b611d8a565b6040516108cd91906141a6565b60405180910390f35b3480156108e257600080fd5b506108eb611dc9565b6040516108f891906145a7565b60405180910390f35b34801561090d57600080fd5b50610916611dcf565b6040516109239190614265565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190613bc2565b611e5d565b6040516109609190614265565b60405180910390f35b34801561097557600080fd5b50610990600480360381019061098b9190613bc2565b611fb6565b005b34801561099e57600080fd5b506109a761203c565b6040516109b491906145a7565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190613b79565b612042565b005b3480156109f257600080fd5b50610a0d6004803603810190610a08919061390f565b6120d8565b604051610a1a919061424a565b60405180910390f35b348015610a2f57600080fd5b50610a4a6004803603810190610a459190613aa5565b61216c565b005b348015610a5857600080fd5b50610a736004803603810190610a6e9190613b79565b61220c565b005b348015610a8157600080fd5b50610a9c6004803603810190610a9791906138e2565b6122a2565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b115750610b108261239a565b5b9050919050565b610b2061247c565b73ffffffffffffffffffffffffffffffffffffffff16610b3e61178a565b73ffffffffffffffffffffffffffffffffffffffff1614610b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8b90614467565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610bc0906148c2565b80601f0160208091040260200160405190810160405280929190818152602001828054610bec906148c2565b8015610c395780601f10610c0e57610100808354040283529160200191610c39565b820191906000526020600020905b815481529060010190602001808311610c1c57829003601f168201915b5050505050905090565b6000610c4e82612484565b610c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8490614447565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610cd5906148c2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d01906148c2565b8015610d4e5780601f10610d2357610100808354040283529160200191610d4e565b820191906000526020600020905b815481529060010190602001808311610d3157829003601f168201915b505050505081565b6000610d6182611484565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc9906144e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610df161247c565b73ffffffffffffffffffffffffffffffffffffffff161480610e205750610e1f81610e1a61247c565b6120d8565b5b610e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5690614387565b60405180910390fd5b610e6983836124f0565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60105481565b610eb0610eaa61247c565b826125a9565b610eef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee690614527565b60405180910390fd5b610efa838383612687565b505050565b6000610f0a836115c4565b8210610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290614287565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601380549050811015611048578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610fe457610fe3614a5b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561103557600191505061104e565b808061104090614925565b915050610fac565b50600090505b919050565b61105b61247c565b73ffffffffffffffffffffffffffffffffffffffff1661107961178a565b73ffffffffffffffffffffffffffffffffffffffff16146110cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c690614467565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b6110f461247c565b73ffffffffffffffffffffffffffffffffffffffff1661111261178a565b73ffffffffffffffffffffffffffffffffffffffff1614611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f90614467565b60405180910390fd5b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516111b090614191565b60006040518083038185875af1925050503d80600081146111ed576040519150601f19603f3d011682016040523d82523d6000602084013e6111f2565b606091505b505090508061120057600080fd5b50565b61121e83838360405180602001604052806000815250611d28565b505050565b60606000611230836115c4565b905060008167ffffffffffffffff81111561124e5761124d614a8a565b5b60405190808252806020026020018201604052801561127c5781602001602082028036833780820191505090505b50905060005b828110156112c6576112948582610eff565b8282815181106112a7576112a6614a5b565b5b60200260200101818152505080806112be90614925565b915050611282565b508092505050919050565b6112d961247c565b73ffffffffffffffffffffffffffffffffffffffff166112f761178a565b73ffffffffffffffffffffffffffffffffffffffff161461134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134490614467565b60405180910390fd5b80600e8190555050565b6000611361610e74565b82106113a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139990614547565b60405180910390fd5b600882815481106113b6576113b5614a5b565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b6113e361247c565b73ffffffffffffffffffffffffffffffffffffffff1661140161178a565b73ffffffffffffffffffffffffffffffffffffffff1614611457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144e90614467565b60405180910390fd5b80600b908051906020019061146d9291906135df565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561152d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611524906143c7565b60405180910390fd5b80915050919050565b600b8054611543906148c2565b80601f016020809104026020016040519081016040528092919081815260200182805461156f906148c2565b80156115bc5780601f10611591576101008083540402835291602001916115bc565b820191906000526020600020905b81548152906001019060200180831161159f57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611635576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162c906143a7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61168461247c565b73ffffffffffffffffffffffffffffffffffffffff166116a261178a565b73ffffffffffffffffffffffffffffffffffffffff16146116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef90614467565b60405180910390fd5b61170260006128e3565b565b61170c61247c565b73ffffffffffffffffffffffffffffffffffffffff1661172a61178a565b73ffffffffffffffffffffffffffffffffffffffff1614611780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177790614467565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546117c3906148c2565b80601f01602080910402602001604051908101604052809291908181526020018280546117ef906148c2565b801561183c5780601f106118115761010080835404028352916020019161183c565b820191906000526020600020905b81548152906001019060200180831161181f57829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff16156118a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a090614487565b60405180910390fd5b60006118b3610e74565b9050600082116118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef90614587565b60405180910390fd5b60105482111561193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614407565b60405180910390fd5b600f54828261194c91906146e5565b111561198d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611984906143e7565b60405180910390fd5b61199561178a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b125760011515601260029054906101000a900460ff1615151415611ac1576119ec33610fa4565b611a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2290614567565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506011548382611a7e91906146e5565b1115611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab690614307565b60405180910390fd5b505b81600e54611acf919061476c565b341015611b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0890614507565b60405180910390fd5b5b6000600190505b828111611b9d57601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611b7090614925565b9190505550611b8a338284611b8591906146e5565b6129a9565b8080611b9590614925565b915050611b19565b506000601260039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166064600a34611be8919061476c565b611bf2919061473b565b604051611bfe90614191565b60006040518083038185875af1925050503d8060008114611c3b576040519150601f19603f3d011682016040523d82523d6000602084013e611c40565b606091505b5050905080611c4e57600080fd5b505050565b611c65611c5e61247c565b83836129c7565b5050565b611c7161247c565b73ffffffffffffffffffffffffffffffffffffffff16611c8f61178a565b73ffffffffffffffffffffffffffffffffffffffff1614611ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdc90614467565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d39611d3361247c565b836125a9565b611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f90614527565b60405180910390fd5b611d8484848484612b34565b50505050565b60138181548110611d9a57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c8054611ddc906148c2565b80601f0160208091040260200160405190810160405280929190818152602001828054611e08906148c2565b8015611e555780601f10611e2a57610100808354040283529160200191611e55565b820191906000526020600020905b815481529060010190602001808311611e3857829003601f168201915b505050505081565b6060611e6882612484565b611ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9e906144c7565b60405180910390fd5b60001515601260019054906101000a900460ff1615151415611f5557600d8054611ed0906148c2565b80601f0160208091040260200160405190810160405280929190818152602001828054611efc906148c2565b8015611f495780601f10611f1e57610100808354040283529160200191611f49565b820191906000526020600020905b815481529060010190602001808311611f2c57829003601f168201915b50505050509050611fb1565b6000611f5f612b90565b90506000815111611f7f5760405180602001604052806000815250611fad565b80611f8984612c22565b600c604051602001611f9d93929190614160565b6040516020818303038152906040525b9150505b919050565b611fbe61247c565b73ffffffffffffffffffffffffffffffffffffffff16611fdc61178a565b73ffffffffffffffffffffffffffffffffffffffff1614612032576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202990614467565b60405180910390fd5b8060118190555050565b600f5481565b61204a61247c565b73ffffffffffffffffffffffffffffffffffffffff1661206861178a565b73ffffffffffffffffffffffffffffffffffffffff16146120be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b590614467565b60405180910390fd5b80600c90805190602001906120d49291906135df565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61217461247c565b73ffffffffffffffffffffffffffffffffffffffff1661219261178a565b73ffffffffffffffffffffffffffffffffffffffff16146121e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121df90614467565b60405180910390fd5b601360006121f69190613665565b818160139190612207929190613686565b505050565b61221461247c565b73ffffffffffffffffffffffffffffffffffffffff1661223261178a565b73ffffffffffffffffffffffffffffffffffffffff1614612288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227f90614467565b60405180910390fd5b80600d908051906020019061229e9291906135df565b5050565b6122aa61247c565b73ffffffffffffffffffffffffffffffffffffffff166122c861178a565b73ffffffffffffffffffffffffffffffffffffffff161461231e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231590614467565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561238e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612385906142c7565b60405180910390fd5b612397816128e3565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061246557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612475575061247482612d83565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661256383611484565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125b482612484565b6125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ea90614367565b60405180910390fd5b60006125fe83611484565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061266d57508373ffffffffffffffffffffffffffffffffffffffff1661265584610c43565b73ffffffffffffffffffffffffffffffffffffffff16145b8061267e575061267d81856120d8565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126a782611484565b73ffffffffffffffffffffffffffffffffffffffff16146126fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f4906144a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561276d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276490614327565b60405180910390fd5b612778838383612ded565b6127836000826124f0565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127d391906147c6565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461282a91906146e5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6129c3828260405180602001604052806000815250612f01565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2d90614347565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b27919061424a565b60405180910390a3505050565b612b3f848484612687565b612b4b84848484612f5c565b612b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b81906142a7565b60405180910390fd5b50505050565b6060600b8054612b9f906148c2565b80601f0160208091040260200160405190810160405280929190818152602001828054612bcb906148c2565b8015612c185780601f10612bed57610100808354040283529160200191612c18565b820191906000526020600020905b815481529060010190602001808311612bfb57829003601f168201915b5050505050905090565b60606000821415612c6a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d7e565b600082905060005b60008214612c9c578080612c8590614925565b915050600a82612c95919061473b565b9150612c72565b60008167ffffffffffffffff811115612cb857612cb7614a8a565b5b6040519080825280601f01601f191660200182016040528015612cea5781602001600182028036833780820191505090505b5090505b60008514612d7757600182612d0391906147c6565b9150600a85612d12919061496e565b6030612d1e91906146e5565b60f81b818381518110612d3457612d33614a5b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d70919061473b565b9450612cee565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612df88383836130f3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e3b57612e36816130f8565b612e7a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e7957612e788382613141565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ebd57612eb8816132ae565b612efc565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612efb57612efa828261337f565b5b5b505050565b612f0b83836133fe565b612f186000848484612f5c565b612f57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4e906142a7565b60405180910390fd5b505050565b6000612f7d8473ffffffffffffffffffffffffffffffffffffffff166135cc565b156130e6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fa661247c565b8786866040518563ffffffff1660e01b8152600401612fc894939291906141dc565b602060405180830381600087803b158015612fe257600080fd5b505af192505050801561301357506040513d601f19601f820116820180604052508101906130109190613b4c565b60015b613096573d8060008114613043576040519150601f19603f3d011682016040523d82523d6000602084013e613048565b606091505b5060008151141561308e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613085906142a7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506130eb565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161314e846115c4565b61315891906147c6565b905060006007600084815260200190815260200160002054905081811461323d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506132c291906147c6565b90506000600960008481526020019081526020016000205490506000600883815481106132f2576132f1614a5b565b5b90600052602060002001549050806008838154811061331457613313614a5b565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061336357613362614a2c565b5b6001900381819060005260206000200160009055905550505050565b600061338a836115c4565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561346e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346590614427565b60405180910390fd5b61347781612484565b156134b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ae906142e7565b60405180910390fd5b6134c360008383612ded565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461351391906146e5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546135eb906148c2565b90600052602060002090601f01602090048101928261360d5760008555613654565b82601f1061362657805160ff1916838001178555613654565b82800160010185558215613654579182015b82811115613653578251825591602001919060010190613638565b5b5090506136619190613726565b5090565b50805460008255906000526020600020908101906136839190613726565b50565b828054828255906000526020600020908101928215613715579160200282015b8281111561371457823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906136a6565b5b5090506137229190613726565b5090565b5b8082111561373f576000816000905550600101613727565b5090565b6000613756613751846145e7565b6145c2565b90508281526020810184848401111561377257613771614ac8565b5b61377d848285614880565b509392505050565b600061379861379384614618565b6145c2565b9050828152602081018484840111156137b4576137b3614ac8565b5b6137bf848285614880565b509392505050565b6000813590506137d681615126565b92915050565b60008083601f8401126137f2576137f1614abe565b5b8235905067ffffffffffffffff81111561380f5761380e614ab9565b5b60208301915083602082028301111561382b5761382a614ac3565b5b9250929050565b6000813590506138418161513d565b92915050565b60008135905061385681615154565b92915050565b60008151905061386b81615154565b92915050565b600082601f83011261388657613885614abe565b5b8135613896848260208601613743565b91505092915050565b600082601f8301126138b4576138b3614abe565b5b81356138c4848260208601613785565b91505092915050565b6000813590506138dc8161516b565b92915050565b6000602082840312156138f8576138f7614ad2565b5b6000613906848285016137c7565b91505092915050565b6000806040838503121561392657613925614ad2565b5b6000613934858286016137c7565b9250506020613945858286016137c7565b9150509250929050565b60008060006060848603121561396857613967614ad2565b5b6000613976868287016137c7565b9350506020613987868287016137c7565b9250506040613998868287016138cd565b9150509250925092565b600080600080608085870312156139bc576139bb614ad2565b5b60006139ca878288016137c7565b94505060206139db878288016137c7565b93505060406139ec878288016138cd565b925050606085013567ffffffffffffffff811115613a0d57613a0c614acd565b5b613a1987828801613871565b91505092959194509250565b60008060408385031215613a3c57613a3b614ad2565b5b6000613a4a858286016137c7565b9250506020613a5b85828601613832565b9150509250929050565b60008060408385031215613a7c57613a7b614ad2565b5b6000613a8a858286016137c7565b9250506020613a9b858286016138cd565b9150509250929050565b60008060208385031215613abc57613abb614ad2565b5b600083013567ffffffffffffffff811115613ada57613ad9614acd565b5b613ae6858286016137dc565b92509250509250929050565b600060208284031215613b0857613b07614ad2565b5b6000613b1684828501613832565b91505092915050565b600060208284031215613b3557613b34614ad2565b5b6000613b4384828501613847565b91505092915050565b600060208284031215613b6257613b61614ad2565b5b6000613b708482850161385c565b91505092915050565b600060208284031215613b8f57613b8e614ad2565b5b600082013567ffffffffffffffff811115613bad57613bac614acd565b5b613bb98482850161389f565b91505092915050565b600060208284031215613bd857613bd7614ad2565b5b6000613be6848285016138cd565b91505092915050565b6000613bfb8383614142565b60208301905092915050565b613c108161480c565b82525050565b613c1f816147fa565b82525050565b6000613c308261466e565b613c3a818561469c565b9350613c4583614649565b8060005b83811015613c76578151613c5d8882613bef565b9750613c688361468f565b925050600181019050613c49565b5085935050505092915050565b613c8c8161481e565b82525050565b6000613c9d82614679565b613ca781856146ad565b9350613cb781856020860161488f565b613cc081614ad7565b840191505092915050565b6000613cd682614684565b613ce081856146c9565b9350613cf081856020860161488f565b613cf981614ad7565b840191505092915050565b6000613d0f82614684565b613d1981856146da565b9350613d2981856020860161488f565b80840191505092915050565b60008154613d42816148c2565b613d4c81866146da565b94506001821660008114613d675760018114613d7857613dab565b60ff19831686528186019350613dab565b613d8185614659565b60005b83811015613da357815481890152600182019150602081019050613d84565b838801955050505b50505092915050565b6000613dc1602b836146c9565b9150613dcc82614ae8565b604082019050919050565b6000613de46032836146c9565b9150613def82614b37565b604082019050919050565b6000613e076026836146c9565b9150613e1282614b86565b604082019050919050565b6000613e2a601c836146c9565b9150613e3582614bd5565b602082019050919050565b6000613e4d601c836146c9565b9150613e5882614bfe565b602082019050919050565b6000613e706024836146c9565b9150613e7b82614c27565b604082019050919050565b6000613e936019836146c9565b9150613e9e82614c76565b602082019050919050565b6000613eb6602c836146c9565b9150613ec182614c9f565b604082019050919050565b6000613ed96038836146c9565b9150613ee482614cee565b604082019050919050565b6000613efc602a836146c9565b9150613f0782614d3d565b604082019050919050565b6000613f1f6029836146c9565b9150613f2a82614d8c565b604082019050919050565b6000613f426016836146c9565b9150613f4d82614ddb565b602082019050919050565b6000613f656024836146c9565b9150613f7082614e04565b604082019050919050565b6000613f886020836146c9565b9150613f9382614e53565b602082019050919050565b6000613fab602c836146c9565b9150613fb682614e7c565b604082019050919050565b6000613fce6020836146c9565b9150613fd982614ecb565b602082019050919050565b6000613ff16016836146c9565b9150613ffc82614ef4565b602082019050919050565b60006140146029836146c9565b915061401f82614f1d565b604082019050919050565b6000614037602f836146c9565b915061404282614f6c565b604082019050919050565b600061405a6021836146c9565b915061406582614fbb565b604082019050919050565b600061407d6000836146be565b91506140888261500a565b600082019050919050565b60006140a06012836146c9565b91506140ab8261500d565b602082019050919050565b60006140c36031836146c9565b91506140ce82615036565b604082019050919050565b60006140e6602c836146c9565b91506140f182615085565b604082019050919050565b60006141096017836146c9565b9150614114826150d4565b602082019050919050565b600061412c601b836146c9565b9150614137826150fd565b602082019050919050565b61414b81614876565b82525050565b61415a81614876565b82525050565b600061416c8286613d04565b91506141788285613d04565b91506141848284613d35565b9150819050949350505050565b600061419c82614070565b9150819050919050565b60006020820190506141bb6000830184613c16565b92915050565b60006020820190506141d66000830184613c07565b92915050565b60006080820190506141f16000830187613c16565b6141fe6020830186613c16565b61420b6040830185614151565b818103606083015261421d8184613c92565b905095945050505050565b600060208201905081810360008301526142428184613c25565b905092915050565b600060208201905061425f6000830184613c83565b92915050565b6000602082019050818103600083015261427f8184613ccb565b905092915050565b600060208201905081810360008301526142a081613db4565b9050919050565b600060208201905081810360008301526142c081613dd7565b9050919050565b600060208201905081810360008301526142e081613dfa565b9050919050565b6000602082019050818103600083015261430081613e1d565b9050919050565b6000602082019050818103600083015261432081613e40565b9050919050565b6000602082019050818103600083015261434081613e63565b9050919050565b6000602082019050818103600083015261436081613e86565b9050919050565b6000602082019050818103600083015261438081613ea9565b9050919050565b600060208201905081810360008301526143a081613ecc565b9050919050565b600060208201905081810360008301526143c081613eef565b9050919050565b600060208201905081810360008301526143e081613f12565b9050919050565b6000602082019050818103600083015261440081613f35565b9050919050565b6000602082019050818103600083015261442081613f58565b9050919050565b6000602082019050818103600083015261444081613f7b565b9050919050565b6000602082019050818103600083015261446081613f9e565b9050919050565b6000602082019050818103600083015261448081613fc1565b9050919050565b600060208201905081810360008301526144a081613fe4565b9050919050565b600060208201905081810360008301526144c081614007565b9050919050565b600060208201905081810360008301526144e08161402a565b9050919050565b600060208201905081810360008301526145008161404d565b9050919050565b6000602082019050818103600083015261452081614093565b9050919050565b60006020820190508181036000830152614540816140b6565b9050919050565b60006020820190508181036000830152614560816140d9565b9050919050565b60006020820190508181036000830152614580816140fc565b9050919050565b600060208201905081810360008301526145a08161411f565b9050919050565b60006020820190506145bc6000830184614151565b92915050565b60006145cc6145dd565b90506145d882826148f4565b919050565b6000604051905090565b600067ffffffffffffffff82111561460257614601614a8a565b5b61460b82614ad7565b9050602081019050919050565b600067ffffffffffffffff82111561463357614632614a8a565b5b61463c82614ad7565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006146f082614876565b91506146fb83614876565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156147305761472f61499f565b5b828201905092915050565b600061474682614876565b915061475183614876565b925082614761576147606149ce565b5b828204905092915050565b600061477782614876565b915061478283614876565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147bb576147ba61499f565b5b828202905092915050565b60006147d182614876565b91506147dc83614876565b9250828210156147ef576147ee61499f565b5b828203905092915050565b600061480582614856565b9050919050565b600061481782614856565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148ad578082015181840152602081019050614892565b838111156148bc576000848401525b50505050565b600060028204905060018216806148da57607f821691505b602082108114156148ee576148ed6149fd565b5b50919050565b6148fd82614ad7565b810181811067ffffffffffffffff8211171561491c5761491b614a8a565b5b80604052505050565b600061493082614876565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156149635761496261499f565b5b600182019050919050565b600061497982614876565b915061498483614876565b925082614994576149936149ce565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b61512f816147fa565b811461513a57600080fd5b50565b6151468161481e565b811461515157600080fd5b50565b61515d8161482a565b811461516857600080fd5b50565b61517481614876565b811461517f57600080fd5b5056fea264697066735822122002ebeea944354eebf21b66f21b25b293b65f77dd4936b4d990f416239d50ab4164736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000018000000000000000000000000025d5f8059b07efe13ee71ff60f01bada8b0bf6af0000000000000000000000000000000000000000000000000000000000000009526f62696e754e465400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006526f62696e7500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d6137785548556d47524259756978436371424750416a4354655636627a313478377776356452354d37565a542f000000000000000000000000000000000000000000000000000000000000000000000000000000000045697066733a2f2f516d61576869536151666757316d6672514336424155714c59354d506b50475a5a62424d4e616552705053576b502f556e72657665616c65642e6a736f6e000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): RobinuNFT
Arg [1] : _symbol (string): Robinu
Arg [2] : _initBaseURI (string): ipfs://Qma7xUHUmGRBYuixCcqBGPAjCTeV6bz14x7wv5dR5M7VZT/
Arg [3] : _initNotRevealedUri (string): ipfs://QmaWhiSaQfgW1mfrQC6BAUqLY5MPkPGZZbBMNaeRpPSWkP/Unrevealed.json
Arg [4] : _payments (address): 0x25d5f8059b07EfE13Ee71fF60f01bADA8B0bF6AF
-----Encoded View---------------
16 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 00000000000000000000000025d5f8059b07efe13ee71ff60f01bada8b0bf6af
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [6] : 526f62696e754e46540000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [8] : 526f62696e750000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [10] : 697066733a2f2f516d6137785548556d47524259756978436371424750416a43
Arg [11] : 54655636627a313478377776356452354d37565a542f00000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000045
Arg [13] : 697066733a2f2f516d61576869536151666757316d6672514336424155714c59
Arg [14] : 354d506b50475a5a62424d4e616552705053576b502f556e72657665616c6564
Arg [15] : 2e6a736f6e000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
44481:4531:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38266:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48518:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25760:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27319:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44628:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26842:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44661:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38906:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45046:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44733:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28069:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38574:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46647:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48599:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48853:156;;;:::i;:::-;;28479:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46892:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47950:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39096:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44846:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48158:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44816:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25454:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44560:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25184:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;48036:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25929:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44879:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45595:1044;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27612:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47765:65;;;;;;;;;;;;;:::i;:::-;;45106:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28735:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45004:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44771:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44586:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47246:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47838:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44697:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48262:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27838:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48702:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48392:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38266:224;38368:4;38407:35;38392:50;;;:11;:50;;;;:90;;;;38446:36;38470:11;38446:23;:36::i;:::-;38392:90;38385:97;;38266:224;;;:::o;48518:73::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48579:6:::1;48570;;:15;;;;;;;;;;;;;;;;;;48518:73:::0;:::o;25760:100::-;25814:13;25847:5;25840:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25760:100;:::o;27319:221::-;27395:7;27423:16;27431:7;27423;:16::i;:::-;27415:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27508:15;:24;27524:7;27508:24;;;;;;;;;;;;;;;;;;;;;27501:31;;27319:221;;;:::o;44628:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26842:411::-;26923:13;26939:23;26954:7;26939:14;:23::i;:::-;26923:39;;26987:5;26981:11;;:2;:11;;;;26973:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27081:5;27065:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27090:37;27107:5;27114:12;:10;:12::i;:::-;27090:16;:37::i;:::-;27065:62;27043:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27224:21;27233:2;27237:7;27224:8;:21::i;:::-;26912:341;26842:411;;:::o;44661:31::-;;;;:::o;38906:113::-;38967:7;38994:10;:17;;;;38987:24;;38906:113;:::o;45046:55::-;;;;;;;;;;;;;;;;;:::o;44733:33::-;;;;:::o;28069:339::-;28264:41;28283:12;:10;:12::i;:::-;28297:7;28264:18;:41::i;:::-;28256:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28372:28;28382:4;28388:2;28392:7;28372:9;:28::i;:::-;28069:339;;;:::o;38574:256::-;38671:7;38707:23;38724:5;38707:16;:23::i;:::-;38699:5;:31;38691:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38796:12;:19;38809:5;38796:19;;;;;;;;;;;;;;;:26;38816:5;38796:26;;;;;;;;;;;;38789:33;;38574:256;;;;:::o;46647:239::-;46706:4;46724:6;46733:1;46724:10;;46719:143;46740:20;:27;;;;46736:1;:31;46719:143;;;46814:5;46787:32;;:20;46808:1;46787:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;46783:72;;;46841:4;46834:11;;;;;46783:72;46769:3;;;;;:::i;:::-;;;;46719:143;;;;46875:5;46868:12;;46647:239;;;;:::o;48599:95::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48682:6:::1;48664:15;;:24;;;;;;;;;;;;;;;;;;48599:95:::0;:::o;48853:156::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48906:12:::1;48932:8;;;;;;;;;;;48924:22;;48954:21;48924:56;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48905:75;;;48995:7;48987:16;;;::::0;::::1;;48898:111;48853:156::o:0;28479:185::-;28617:39;28634:4;28640:2;28644:7;28617:39;;;;;;;;;;;;:16;:39::i;:::-;28479:185;;;:::o;46892:348::-;46967:16;46995:23;47021:17;47031:6;47021:9;:17::i;:::-;46995:43;;47045:25;47087:15;47073:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47045:58;;47115:9;47110:103;47130:15;47126:1;:19;47110:103;;;47175:30;47195:6;47203:1;47175:19;:30::i;:::-;47161:8;47170:1;47161:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;47147:3;;;;;:::i;:::-;;;;47110:103;;;;47226:8;47219:15;;;;46892:348;;;:::o;47950:80::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48016:8:::1;48009:4;:15;;;;47950:80:::0;:::o;39096:233::-;39171:7;39207:30;:28;:30::i;:::-;39199:5;:38;39191:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39304:10;39315:5;39304:17;;;;;;;;:::i;:::-;;;;;;;;;;39297:24;;39096:233;;;:::o;44846:28::-;;;;;;;;;;;;;:::o;48158:98::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48239:11:::1;48229:7;:21;;;;;;;;;;;;:::i;:::-;;48158:98:::0;:::o;44816:25::-;;;;;;;;;;;;;:::o;25454:239::-;25526:7;25546:13;25562:7;:16;25570:7;25562:16;;;;;;;;;;;;;;;;;;;;;25546:32;;25614:1;25597:19;;:5;:19;;;;25589:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25680:5;25673:12;;;25454:239;;;:::o;44560:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25184:208::-;25256:7;25301:1;25284:19;;:5;:19;;;;25276:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25368:9;:16;25378:5;25368:16;;;;;;;;;;;;;;;;25361:23;;25184:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;48036:116::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48129:17:::1;48113:13;:33;;;;48036:116:::0;:::o;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;25929:104::-;25985:13;26018:7;26011:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25929:104;:::o;44879:34::-;;;;;;;;;;;;;:::o;45595:1044::-;45661:6;;;;;;;;;;;45660:7;45652:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;45701:14;45718:13;:11;:13::i;:::-;45701:30;;45760:1;45746:11;:15;45738:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45823:13;;45808:11;:28;;45800:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;45916:9;;45901:11;45892:6;:20;;;;:::i;:::-;:33;;45884:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45979:7;:5;:7::i;:::-;45965:21;;:10;:21;;;45961:416;;46021:4;46002:23;;:15;;;;;;;;;;;:23;;;45999:298;;;46050:25;46064:10;46050:13;:25::i;:::-;46042:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;46118:24;46145:20;:32;46166:10;46145:32;;;;;;;;;;;;;;;;46118:59;;46234:18;;46219:11;46200:16;:30;;;;:::i;:::-;:52;;46192:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;46027:270;45999:298;46335:11;46328:4;;:18;;;;:::i;:::-;46315:9;:31;;46307:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;45961:416;46390:9;46402:1;46390:13;;46385:136;46410:11;46405:1;:16;46385:136;;46437:20;:32;46458:10;46437:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;46480:33;46490:10;46511:1;46502:6;:10;;;;:::i;:::-;46480:9;:33::i;:::-;46423:3;;;;;:::i;:::-;;;;46385:136;;;;46534:12;46560:11;;;;;;;;;;;46552:25;;46602:3;46597:2;46585:9;:14;;;;:::i;:::-;:20;;;;:::i;:::-;46552:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46533:77;;;46625:7;46617:16;;;;;;45645:994;;45595:1044;:::o;27612:155::-;27707:52;27726:12;:10;:12::i;:::-;27740:8;27750;27707:18;:52::i;:::-;27612:155;;:::o;47765:65::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47820:4:::1;47809:8;;:15;;;;;;;;;;;;;;;;;;47765:65::o:0;45106:31::-;;;;;;;;;;;;;:::o;28735:328::-;28910:41;28929:12;:10;:12::i;:::-;28943:7;28910:18;:41::i;:::-;28902:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29016:39;29030:4;29036:2;29040:7;29049:5;29016:13;:39::i;:::-;28735:328;;;;:::o;45004:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44771:40::-;;;;:::o;44586:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47246:497::-;47344:13;47385:16;47393:7;47385;:16::i;:::-;47369:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;47494:5;47482:17;;:8;;;;;;;;;;;:17;;;47479:62;;;47519:14;47512:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47479:62;47549:28;47580:10;:8;:10::i;:::-;47549:41;;47635:1;47610:14;47604:28;:32;:133;;;;;;;;;;;;;;;;;47672:14;47688:18;:7;:16;:18::i;:::-;47708:13;47655:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47604:133;47597:140;;;47246:497;;;;:::o;47838:104::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47930:6:::1;47909:18;:27;;;;47838:104:::0;:::o;44697:31::-;;;;:::o;48262:122::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48361:17:::1;48345:13;:33;;;;;;;;;;;;:::i;:::-;;48262:122:::0;:::o;27838:164::-;27935:4;27959:18;:25;27978:5;27959:25;;;;;;;;;;;;;;;:35;27985:8;27959:35;;;;;;;;;;;;;;;;;;;;;;;;;27952:42;;27838:164;;;;:::o;48702:144::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48784:20:::1;;48777:27;;;;:::i;:::-;48834:6;;48811:20;:29;;;;;;;:::i;:::-;;48702:144:::0;;:::o;48392:120::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48491:15:::1;48474:14;:32;;;;;;;;;;;;:::i;:::-;;48392:120:::0;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;24815:305::-;24917:4;24969:25;24954:40;;;:11;:40;;;;:105;;;;25026:33;25011:48;;;:11;:48;;;;24954:105;:158;;;;25076:36;25100:11;25076:23;:36::i;:::-;24954:158;24934:178;;24815:305;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;30573:127::-;30638:4;30690:1;30662:30;;:7;:16;30670:7;30662:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30655:37;;30573:127;;;:::o;34555:174::-;34657:2;34630:15;:24;34646:7;34630:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34713:7;34709:2;34675:46;;34684:23;34699:7;34684:14;:23::i;:::-;34675:46;;;;;;;;;;;;34555:174;;:::o;30867:348::-;30960:4;30985:16;30993:7;30985;:16::i;:::-;30977:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31061:13;31077:23;31092:7;31077:14;:23::i;:::-;31061:39;;31130:5;31119:16;;:7;:16;;;:51;;;;31163:7;31139:31;;:20;31151:7;31139:11;:20::i;:::-;:31;;;31119:51;:87;;;;31174:32;31191:5;31198:7;31174:16;:32::i;:::-;31119:87;31111:96;;;30867:348;;;;:::o;33859:578::-;34018:4;33991:31;;:23;34006:7;33991:14;:23::i;:::-;:31;;;33983:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34101:1;34087:16;;:2;:16;;;;34079:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34157:39;34178:4;34184:2;34188:7;34157:20;:39::i;:::-;34261:29;34278:1;34282:7;34261:8;:29::i;:::-;34322:1;34303:9;:15;34313:4;34303:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34351:1;34334:9;:13;34344:2;34334:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34382:2;34363:7;:16;34371:7;34363:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34421:7;34417:2;34402:27;;34411:4;34402:27;;;;;;;;;;;;33859:578;;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;31557:110::-;31633:26;31643:2;31647:7;31633:26;;;;;;;;;;;;:9;:26::i;:::-;31557:110;;:::o;34871:315::-;35026:8;35017:17;;:5;:17;;;;35009:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35113:8;35075:18;:25;35094:5;35075:25;;;;;;;;;;;;;;;:35;35101:8;35075:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35159:8;35137:41;;35152:5;35137:41;;;35169:8;35137:41;;;;;;:::i;:::-;;;;;;;;34871:315;;;:::o;29945:::-;30102:28;30112:4;30118:2;30122:7;30102:9;:28::i;:::-;30149:48;30172:4;30178:2;30182:7;30191:5;30149:22;:48::i;:::-;30141:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29945:315;;;;:::o;45474:102::-;45534:13;45563:7;45556:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45474:102;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;16511:157::-;16596:4;16635:25;16620:40;;;:11;:40;;;;16613:47;;16511:157;;;:::o;39942:589::-;40086:45;40113:4;40119:2;40123:7;40086:26;:45::i;:::-;40164:1;40148:18;;:4;:18;;;40144:187;;;40183:40;40215:7;40183:31;:40::i;:::-;40144:187;;;40253:2;40245:10;;:4;:10;;;40241:90;;40272:47;40305:4;40311:7;40272:32;:47::i;:::-;40241:90;40144:187;40359:1;40345:16;;:2;:16;;;40341:183;;;40378:45;40415:7;40378:36;:45::i;:::-;40341:183;;;40451:4;40445:10;;:2;:10;;;40441:83;;40472:40;40500:2;40504:7;40472:27;:40::i;:::-;40441:83;40341:183;39942:589;;;:::o;31894:321::-;32024:18;32030:2;32034:7;32024:5;:18::i;:::-;32075:54;32106:1;32110:2;32114:7;32123:5;32075:22;:54::i;:::-;32053:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31894:321;;;:::o;35751:799::-;35906:4;35927:15;:2;:13;;;:15::i;:::-;35923:620;;;35979:2;35963:36;;;36000:12;:10;:12::i;:::-;36014:4;36020:7;36029:5;35963:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35959:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36222:1;36205:6;:13;:18;36201:272;;;36248:60;;;;;;;;;;:::i;:::-;;;;;;;;36201:272;36423:6;36417:13;36408:6;36404:2;36400:15;36393:38;35959:529;36096:41;;;36086:51;;;:6;:51;;;;36079:58;;;;;35923:620;36527:4;36520:11;;35751:799;;;;;;;:::o;37122:126::-;;;;:::o;41254:164::-;41358:10;:17;;;;41331:15;:24;41347:7;41331:24;;;;;;;;;;;:44;;;;41386:10;41402:7;41386:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41254:164;:::o;42045:988::-;42311:22;42361:1;42336:22;42353:4;42336:16;:22::i;:::-;:26;;;;:::i;:::-;42311:51;;42373:18;42394:17;:26;42412:7;42394:26;;;;;;;;;;;;42373:47;;42541:14;42527:10;:28;42523:328;;42572:19;42594:12;:18;42607:4;42594:18;;;;;;;;;;;;;;;:34;42613:14;42594:34;;;;;;;;;;;;42572:56;;42678:11;42645:12;:18;42658:4;42645:18;;;;;;;;;;;;;;;:30;42664:10;42645:30;;;;;;;;;;;:44;;;;42795:10;42762:17;:30;42780:11;42762:30;;;;;;;;;;;:43;;;;42557:294;42523:328;42947:17;:26;42965:7;42947:26;;;;;;;;;;;42940:33;;;42991:12;:18;43004:4;42991:18;;;;;;;;;;;;;;;:34;43010:14;42991:34;;;;;;;;;;;42984:41;;;42126:907;;42045:988;;:::o;43328:1079::-;43581:22;43626:1;43606:10;:17;;;;:21;;;;:::i;:::-;43581:46;;43638:18;43659:15;:24;43675:7;43659:24;;;;;;;;;;;;43638:45;;44010:19;44032:10;44043:14;44032:26;;;;;;;;:::i;:::-;;;;;;;;;;44010:48;;44096:11;44071:10;44082;44071:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44207:10;44176:15;:28;44192:11;44176:28;;;;;;;;;;;:41;;;;44348:15;:24;44364:7;44348:24;;;;;;;;;;;44341:31;;;44383:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43399:1008;;;43328:1079;:::o;40832:221::-;40917:14;40934:20;40951:2;40934:16;:20::i;:::-;40917:37;;40992:7;40965:12;:16;40978:2;40965:16;;;;;;;;;;;;;;;:24;40982:6;40965:24;;;;;;;;;;;:34;;;;41039:6;41010:17;:26;41028:7;41010:26;;;;;;;;;;;:35;;;;40906:147;40832:221;;:::o;32551:382::-;32645:1;32631:16;;:2;:16;;;;32623:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32704:16;32712:7;32704;:16::i;:::-;32703:17;32695:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32766:45;32795:1;32799:2;32803:7;32766:20;:45::i;:::-;32841:1;32824:9;:13;32834:2;32824:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32872:2;32853:7;:16;32861:7;32853:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32917:7;32913:2;32892:33;;32909:1;32892:33;;;;;;;;;;;;32551:382;;:::o;6367:387::-;6427:4;6635:12;6702:7;6690:20;6682:28;;6745:1;6738:4;:8;6731:15;;;6367:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:323::-;6832:6;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7007:1;7032:50;7074:7;7065:6;7054:9;7050:22;7032:50;:::i;:::-;7022:60;;6978:114;6776:323;;;;:::o;7105:327::-;7163:6;7212:2;7200:9;7191:7;7187:23;7183:32;7180:119;;;7218:79;;:::i;:::-;7180:119;7338:1;7363:52;7407:7;7398:6;7387:9;7383:22;7363:52;:::i;:::-;7353:62;;7309:116;7105:327;;;;:::o;7438:349::-;7507:6;7556:2;7544:9;7535:7;7531:23;7527:32;7524:119;;;7562:79;;:::i;:::-;7524:119;7682:1;7707:63;7762:7;7753:6;7742:9;7738:22;7707:63;:::i;:::-;7697:73;;7653:127;7438:349;;;;:::o;7793:509::-;7862:6;7911:2;7899:9;7890:7;7886:23;7882:32;7879:119;;;7917:79;;:::i;:::-;7879:119;8065:1;8054:9;8050:17;8037:31;8095:18;8087:6;8084:30;8081:117;;;8117:79;;:::i;:::-;8081:117;8222:63;8277:7;8268:6;8257:9;8253:22;8222:63;:::i;:::-;8212:73;;8008:287;7793:509;;;;:::o;8308:329::-;8367:6;8416:2;8404:9;8395:7;8391:23;8387:32;8384:119;;;8422:79;;:::i;:::-;8384:119;8542:1;8567:53;8612:7;8603:6;8592:9;8588:22;8567:53;:::i;:::-;8557:63;;8513:117;8308:329;;;;:::o;8643:179::-;8712:10;8733:46;8775:3;8767:6;8733:46;:::i;:::-;8811:4;8806:3;8802:14;8788:28;;8643:179;;;;:::o;8828:142::-;8931:32;8957:5;8931:32;:::i;:::-;8926:3;8919:45;8828:142;;:::o;8976:118::-;9063:24;9081:5;9063:24;:::i;:::-;9058:3;9051:37;8976:118;;:::o;9130:732::-;9249:3;9278:54;9326:5;9278:54;:::i;:::-;9348:86;9427:6;9422:3;9348:86;:::i;:::-;9341:93;;9458:56;9508:5;9458:56;:::i;:::-;9537:7;9568:1;9553:284;9578:6;9575:1;9572:13;9553:284;;;9654:6;9648:13;9681:63;9740:3;9725:13;9681:63;:::i;:::-;9674:70;;9767:60;9820:6;9767:60;:::i;:::-;9757:70;;9613:224;9600:1;9597;9593:9;9588:14;;9553:284;;;9557:14;9853:3;9846:10;;9254:608;;;9130:732;;;;:::o;9868:109::-;9949:21;9964:5;9949:21;:::i;:::-;9944:3;9937:34;9868:109;;:::o;9983:360::-;10069:3;10097:38;10129:5;10097:38;:::i;:::-;10151:70;10214:6;10209:3;10151:70;:::i;:::-;10144:77;;10230:52;10275:6;10270:3;10263:4;10256:5;10252:16;10230:52;:::i;:::-;10307:29;10329:6;10307:29;:::i;:::-;10302:3;10298:39;10291:46;;10073:270;9983:360;;;;:::o;10349:364::-;10437:3;10465:39;10498:5;10465:39;:::i;:::-;10520:71;10584:6;10579:3;10520:71;:::i;:::-;10513:78;;10600:52;10645:6;10640:3;10633:4;10626:5;10622:16;10600:52;:::i;:::-;10677:29;10699:6;10677:29;:::i;:::-;10672:3;10668:39;10661:46;;10441:272;10349:364;;;;:::o;10719:377::-;10825:3;10853:39;10886:5;10853:39;:::i;:::-;10908:89;10990:6;10985:3;10908:89;:::i;:::-;10901:96;;11006:52;11051:6;11046:3;11039:4;11032:5;11028:16;11006:52;:::i;:::-;11083:6;11078:3;11074:16;11067:23;;10829:267;10719:377;;;;:::o;11126:845::-;11229:3;11266:5;11260:12;11295:36;11321:9;11295:36;:::i;:::-;11347:89;11429:6;11424:3;11347:89;:::i;:::-;11340:96;;11467:1;11456:9;11452:17;11483:1;11478:137;;;;11629:1;11624:341;;;;11445:520;;11478:137;11562:4;11558:9;11547;11543:25;11538:3;11531:38;11598:6;11593:3;11589:16;11582:23;;11478:137;;11624:341;11691:38;11723:5;11691:38;:::i;:::-;11751:1;11765:154;11779:6;11776:1;11773:13;11765:154;;;11853:7;11847:14;11843:1;11838:3;11834:11;11827:35;11903:1;11894:7;11890:15;11879:26;;11801:4;11798:1;11794:12;11789:17;;11765:154;;;11948:6;11943:3;11939:16;11932:23;;11631:334;;11445:520;;11233:738;;11126:845;;;;:::o;11977:366::-;12119:3;12140:67;12204:2;12199:3;12140:67;:::i;:::-;12133:74;;12216:93;12305:3;12216:93;:::i;:::-;12334:2;12329:3;12325:12;12318:19;;11977:366;;;:::o;12349:::-;12491:3;12512:67;12576:2;12571:3;12512:67;:::i;:::-;12505:74;;12588:93;12677:3;12588:93;:::i;:::-;12706:2;12701:3;12697:12;12690:19;;12349:366;;;:::o;12721:::-;12863:3;12884:67;12948:2;12943:3;12884:67;:::i;:::-;12877:74;;12960:93;13049:3;12960:93;:::i;:::-;13078:2;13073:3;13069:12;13062:19;;12721:366;;;:::o;13093:::-;13235:3;13256:67;13320:2;13315:3;13256:67;:::i;:::-;13249:74;;13332:93;13421:3;13332:93;:::i;:::-;13450:2;13445:3;13441:12;13434:19;;13093:366;;;:::o;13465:::-;13607:3;13628:67;13692:2;13687:3;13628:67;:::i;:::-;13621:74;;13704:93;13793:3;13704:93;:::i;:::-;13822:2;13817:3;13813:12;13806:19;;13465:366;;;:::o;13837:::-;13979:3;14000:67;14064:2;14059:3;14000:67;:::i;:::-;13993:74;;14076:93;14165:3;14076:93;:::i;:::-;14194:2;14189:3;14185:12;14178:19;;13837:366;;;:::o;14209:::-;14351:3;14372:67;14436:2;14431:3;14372:67;:::i;:::-;14365:74;;14448:93;14537:3;14448:93;:::i;:::-;14566:2;14561:3;14557:12;14550:19;;14209:366;;;:::o;14581:::-;14723:3;14744:67;14808:2;14803:3;14744:67;:::i;:::-;14737:74;;14820:93;14909:3;14820:93;:::i;:::-;14938:2;14933:3;14929:12;14922:19;;14581:366;;;:::o;14953:::-;15095:3;15116:67;15180:2;15175:3;15116:67;:::i;:::-;15109:74;;15192:93;15281:3;15192:93;:::i;:::-;15310:2;15305:3;15301:12;15294:19;;14953:366;;;:::o;15325:::-;15467:3;15488:67;15552:2;15547:3;15488:67;:::i;:::-;15481:74;;15564:93;15653:3;15564:93;:::i;:::-;15682:2;15677:3;15673:12;15666:19;;15325:366;;;:::o;15697:::-;15839:3;15860:67;15924:2;15919:3;15860:67;:::i;:::-;15853:74;;15936:93;16025:3;15936:93;:::i;:::-;16054:2;16049:3;16045:12;16038:19;;15697:366;;;:::o;16069:::-;16211:3;16232:67;16296:2;16291:3;16232:67;:::i;:::-;16225:74;;16308:93;16397:3;16308:93;:::i;:::-;16426:2;16421:3;16417:12;16410:19;;16069:366;;;:::o;16441:::-;16583:3;16604:67;16668:2;16663:3;16604:67;:::i;:::-;16597:74;;16680:93;16769:3;16680:93;:::i;:::-;16798:2;16793:3;16789:12;16782:19;;16441:366;;;:::o;16813:::-;16955:3;16976:67;17040:2;17035:3;16976:67;:::i;:::-;16969:74;;17052:93;17141:3;17052:93;:::i;:::-;17170:2;17165:3;17161:12;17154:19;;16813:366;;;:::o;17185:::-;17327:3;17348:67;17412:2;17407:3;17348:67;:::i;:::-;17341:74;;17424:93;17513:3;17424:93;:::i;:::-;17542:2;17537:3;17533:12;17526:19;;17185:366;;;:::o;17557:::-;17699:3;17720:67;17784:2;17779:3;17720:67;:::i;:::-;17713:74;;17796:93;17885:3;17796:93;:::i;:::-;17914:2;17909:3;17905:12;17898:19;;17557:366;;;:::o;17929:::-;18071:3;18092:67;18156:2;18151:3;18092:67;:::i;:::-;18085:74;;18168:93;18257:3;18168:93;:::i;:::-;18286:2;18281:3;18277:12;18270:19;;17929:366;;;:::o;18301:::-;18443:3;18464:67;18528:2;18523:3;18464:67;:::i;:::-;18457:74;;18540:93;18629:3;18540:93;:::i;:::-;18658:2;18653:3;18649:12;18642:19;;18301:366;;;:::o;18673:::-;18815:3;18836:67;18900:2;18895:3;18836:67;:::i;:::-;18829:74;;18912:93;19001:3;18912:93;:::i;:::-;19030:2;19025:3;19021:12;19014:19;;18673:366;;;:::o;19045:::-;19187:3;19208:67;19272:2;19267:3;19208:67;:::i;:::-;19201:74;;19284:93;19373:3;19284:93;:::i;:::-;19402:2;19397:3;19393:12;19386:19;;19045:366;;;:::o;19417:398::-;19576:3;19597:83;19678:1;19673:3;19597:83;:::i;:::-;19590:90;;19689:93;19778:3;19689:93;:::i;:::-;19807:1;19802:3;19798:11;19791:18;;19417:398;;;:::o;19821:366::-;19963:3;19984:67;20048:2;20043:3;19984:67;:::i;:::-;19977:74;;20060:93;20149:3;20060:93;:::i;:::-;20178:2;20173:3;20169:12;20162:19;;19821:366;;;:::o;20193:::-;20335:3;20356:67;20420:2;20415:3;20356:67;:::i;:::-;20349:74;;20432:93;20521:3;20432:93;:::i;:::-;20550:2;20545:3;20541:12;20534:19;;20193:366;;;:::o;20565:::-;20707:3;20728:67;20792:2;20787:3;20728:67;:::i;:::-;20721:74;;20804:93;20893:3;20804:93;:::i;:::-;20922:2;20917:3;20913:12;20906:19;;20565:366;;;:::o;20937:::-;21079:3;21100:67;21164:2;21159:3;21100:67;:::i;:::-;21093:74;;21176:93;21265:3;21176:93;:::i;:::-;21294:2;21289:3;21285:12;21278:19;;20937:366;;;:::o;21309:::-;21451:3;21472:67;21536:2;21531:3;21472:67;:::i;:::-;21465:74;;21548:93;21637:3;21548:93;:::i;:::-;21666:2;21661:3;21657:12;21650:19;;21309:366;;;:::o;21681:108::-;21758:24;21776:5;21758:24;:::i;:::-;21753:3;21746:37;21681:108;;:::o;21795:118::-;21882:24;21900:5;21882:24;:::i;:::-;21877:3;21870:37;21795:118;;:::o;21919:589::-;22144:3;22166:95;22257:3;22248:6;22166:95;:::i;:::-;22159:102;;22278:95;22369:3;22360:6;22278:95;:::i;:::-;22271:102;;22390:92;22478:3;22469:6;22390:92;:::i;:::-;22383:99;;22499:3;22492:10;;21919:589;;;;;;:::o;22514:379::-;22698:3;22720:147;22863:3;22720:147;:::i;:::-;22713:154;;22884:3;22877:10;;22514:379;;;:::o;22899:222::-;22992:4;23030:2;23019:9;23015:18;23007:26;;23043:71;23111:1;23100:9;23096:17;23087:6;23043:71;:::i;:::-;22899:222;;;;:::o;23127:254::-;23236:4;23274:2;23263:9;23259:18;23251:26;;23287:87;23371:1;23360:9;23356:17;23347:6;23287:87;:::i;:::-;23127:254;;;;:::o;23387:640::-;23582:4;23620:3;23609:9;23605:19;23597:27;;23634:71;23702:1;23691:9;23687:17;23678:6;23634:71;:::i;:::-;23715:72;23783:2;23772:9;23768:18;23759:6;23715:72;:::i;:::-;23797;23865:2;23854:9;23850:18;23841:6;23797:72;:::i;:::-;23916:9;23910:4;23906:20;23901:2;23890:9;23886:18;23879:48;23944:76;24015:4;24006:6;23944:76;:::i;:::-;23936:84;;23387:640;;;;;;;:::o;24033:373::-;24176:4;24214:2;24203:9;24199:18;24191:26;;24263:9;24257:4;24253:20;24249:1;24238:9;24234:17;24227:47;24291:108;24394:4;24385:6;24291:108;:::i;:::-;24283:116;;24033:373;;;;:::o;24412:210::-;24499:4;24537:2;24526:9;24522:18;24514:26;;24550:65;24612:1;24601:9;24597:17;24588:6;24550:65;:::i;:::-;24412:210;;;;:::o;24628:313::-;24741:4;24779:2;24768:9;24764:18;24756:26;;24828:9;24822:4;24818:20;24814:1;24803:9;24799:17;24792:47;24856:78;24929:4;24920:6;24856:78;:::i;:::-;24848:86;;24628:313;;;;:::o;24947:419::-;25113:4;25151:2;25140:9;25136:18;25128:26;;25200:9;25194:4;25190:20;25186:1;25175:9;25171:17;25164:47;25228:131;25354:4;25228:131;:::i;:::-;25220:139;;24947:419;;;:::o;25372:::-;25538:4;25576:2;25565:9;25561:18;25553:26;;25625:9;25619:4;25615:20;25611:1;25600:9;25596:17;25589:47;25653:131;25779:4;25653:131;:::i;:::-;25645:139;;25372:419;;;:::o;25797:::-;25963:4;26001:2;25990:9;25986:18;25978:26;;26050:9;26044:4;26040:20;26036:1;26025:9;26021:17;26014:47;26078:131;26204:4;26078:131;:::i;:::-;26070:139;;25797:419;;;:::o;26222:::-;26388:4;26426:2;26415:9;26411:18;26403:26;;26475:9;26469:4;26465:20;26461:1;26450:9;26446:17;26439:47;26503:131;26629:4;26503:131;:::i;:::-;26495:139;;26222:419;;;:::o;26647:::-;26813:4;26851:2;26840:9;26836:18;26828:26;;26900:9;26894:4;26890:20;26886:1;26875:9;26871:17;26864:47;26928:131;27054:4;26928:131;:::i;:::-;26920:139;;26647:419;;;:::o;27072:::-;27238:4;27276:2;27265:9;27261:18;27253:26;;27325:9;27319:4;27315:20;27311:1;27300:9;27296:17;27289:47;27353:131;27479:4;27353:131;:::i;:::-;27345:139;;27072:419;;;:::o;27497:::-;27663:4;27701:2;27690:9;27686:18;27678:26;;27750:9;27744:4;27740:20;27736:1;27725:9;27721:17;27714:47;27778:131;27904:4;27778:131;:::i;:::-;27770:139;;27497:419;;;:::o;27922:::-;28088:4;28126:2;28115:9;28111:18;28103:26;;28175:9;28169:4;28165:20;28161:1;28150:9;28146:17;28139:47;28203:131;28329:4;28203:131;:::i;:::-;28195:139;;27922:419;;;:::o;28347:::-;28513:4;28551:2;28540:9;28536:18;28528:26;;28600:9;28594:4;28590:20;28586:1;28575:9;28571:17;28564:47;28628:131;28754:4;28628:131;:::i;:::-;28620:139;;28347:419;;;:::o;28772:::-;28938:4;28976:2;28965:9;28961:18;28953:26;;29025:9;29019:4;29015:20;29011:1;29000:9;28996:17;28989:47;29053:131;29179:4;29053:131;:::i;:::-;29045:139;;28772:419;;;:::o;29197:::-;29363:4;29401:2;29390:9;29386:18;29378:26;;29450:9;29444:4;29440:20;29436:1;29425:9;29421:17;29414:47;29478:131;29604:4;29478:131;:::i;:::-;29470:139;;29197:419;;;:::o;29622:::-;29788:4;29826:2;29815:9;29811:18;29803:26;;29875:9;29869:4;29865:20;29861:1;29850:9;29846:17;29839:47;29903:131;30029:4;29903:131;:::i;:::-;29895:139;;29622:419;;;:::o;30047:::-;30213:4;30251:2;30240:9;30236:18;30228:26;;30300:9;30294:4;30290:20;30286:1;30275:9;30271:17;30264:47;30328:131;30454:4;30328:131;:::i;:::-;30320:139;;30047:419;;;:::o;30472:::-;30638:4;30676:2;30665:9;30661:18;30653:26;;30725:9;30719:4;30715:20;30711:1;30700:9;30696:17;30689:47;30753:131;30879:4;30753:131;:::i;:::-;30745:139;;30472:419;;;:::o;30897:::-;31063:4;31101:2;31090:9;31086:18;31078:26;;31150:9;31144:4;31140:20;31136:1;31125:9;31121:17;31114:47;31178:131;31304:4;31178:131;:::i;:::-;31170:139;;30897:419;;;:::o;31322:::-;31488:4;31526:2;31515:9;31511:18;31503:26;;31575:9;31569:4;31565:20;31561:1;31550:9;31546:17;31539:47;31603:131;31729:4;31603:131;:::i;:::-;31595:139;;31322:419;;;:::o;31747:::-;31913:4;31951:2;31940:9;31936:18;31928:26;;32000:9;31994:4;31990:20;31986:1;31975:9;31971:17;31964:47;32028:131;32154:4;32028:131;:::i;:::-;32020:139;;31747:419;;;:::o;32172:::-;32338:4;32376:2;32365:9;32361:18;32353:26;;32425:9;32419:4;32415:20;32411:1;32400:9;32396:17;32389:47;32453:131;32579:4;32453:131;:::i;:::-;32445:139;;32172:419;;;:::o;32597:::-;32763:4;32801:2;32790:9;32786:18;32778:26;;32850:9;32844:4;32840:20;32836:1;32825:9;32821:17;32814:47;32878:131;33004:4;32878:131;:::i;:::-;32870:139;;32597:419;;;:::o;33022:::-;33188:4;33226:2;33215:9;33211:18;33203:26;;33275:9;33269:4;33265:20;33261:1;33250:9;33246:17;33239:47;33303:131;33429:4;33303:131;:::i;:::-;33295:139;;33022:419;;;:::o;33447:::-;33613:4;33651:2;33640:9;33636:18;33628:26;;33700:9;33694:4;33690:20;33686:1;33675:9;33671:17;33664:47;33728:131;33854:4;33728:131;:::i;:::-;33720:139;;33447:419;;;:::o;33872:::-;34038:4;34076:2;34065:9;34061:18;34053:26;;34125:9;34119:4;34115:20;34111:1;34100:9;34096:17;34089:47;34153:131;34279:4;34153:131;:::i;:::-;34145:139;;33872:419;;;:::o;34297:::-;34463:4;34501:2;34490:9;34486:18;34478:26;;34550:9;34544:4;34540:20;34536:1;34525:9;34521:17;34514:47;34578:131;34704:4;34578:131;:::i;:::-;34570:139;;34297:419;;;:::o;34722:::-;34888:4;34926:2;34915:9;34911:18;34903:26;;34975:9;34969:4;34965:20;34961:1;34950:9;34946:17;34939:47;35003:131;35129:4;35003:131;:::i;:::-;34995:139;;34722:419;;;:::o;35147:::-;35313:4;35351:2;35340:9;35336:18;35328:26;;35400:9;35394:4;35390:20;35386:1;35375:9;35371:17;35364:47;35428:131;35554:4;35428:131;:::i;:::-;35420:139;;35147:419;;;:::o;35572:222::-;35665:4;35703:2;35692:9;35688:18;35680:26;;35716:71;35784:1;35773:9;35769:17;35760:6;35716:71;:::i;:::-;35572:222;;;;:::o;35800:129::-;35834:6;35861:20;;:::i;:::-;35851:30;;35890:33;35918:4;35910:6;35890:33;:::i;:::-;35800:129;;;:::o;35935:75::-;35968:6;36001:2;35995:9;35985:19;;35935:75;:::o;36016:307::-;36077:4;36167:18;36159:6;36156:30;36153:56;;;36189:18;;:::i;:::-;36153:56;36227:29;36249:6;36227:29;:::i;:::-;36219:37;;36311:4;36305;36301:15;36293:23;;36016:307;;;:::o;36329:308::-;36391:4;36481:18;36473:6;36470:30;36467:56;;;36503:18;;:::i;:::-;36467:56;36541:29;36563:6;36541:29;:::i;:::-;36533:37;;36625:4;36619;36615:15;36607:23;;36329:308;;;:::o;36643:132::-;36710:4;36733:3;36725:11;;36763:4;36758:3;36754:14;36746:22;;36643:132;;;:::o;36781:141::-;36830:4;36853:3;36845:11;;36876:3;36873:1;36866:14;36910:4;36907:1;36897:18;36889:26;;36781:141;;;:::o;36928:114::-;36995:6;37029:5;37023:12;37013:22;;36928:114;;;:::o;37048:98::-;37099:6;37133:5;37127:12;37117:22;;37048:98;;;:::o;37152:99::-;37204:6;37238:5;37232:12;37222:22;;37152:99;;;:::o;37257:113::-;37327:4;37359;37354:3;37350:14;37342:22;;37257:113;;;:::o;37376:184::-;37475:11;37509:6;37504:3;37497:19;37549:4;37544:3;37540:14;37525:29;;37376:184;;;;:::o;37566:168::-;37649:11;37683:6;37678:3;37671:19;37723:4;37718:3;37714:14;37699:29;;37566:168;;;;:::o;37740:147::-;37841:11;37878:3;37863:18;;37740:147;;;;:::o;37893:169::-;37977:11;38011:6;38006:3;37999:19;38051:4;38046:3;38042:14;38027:29;;37893:169;;;;:::o;38068:148::-;38170:11;38207:3;38192:18;;38068:148;;;;:::o;38222:305::-;38262:3;38281:20;38299:1;38281:20;:::i;:::-;38276:25;;38315:20;38333:1;38315:20;:::i;:::-;38310:25;;38469:1;38401:66;38397:74;38394:1;38391:81;38388:107;;;38475:18;;:::i;:::-;38388:107;38519:1;38516;38512:9;38505:16;;38222:305;;;;:::o;38533:185::-;38573:1;38590:20;38608:1;38590:20;:::i;:::-;38585:25;;38624:20;38642:1;38624:20;:::i;:::-;38619:25;;38663:1;38653:35;;38668:18;;:::i;:::-;38653:35;38710:1;38707;38703:9;38698:14;;38533:185;;;;:::o;38724:348::-;38764:7;38787:20;38805:1;38787:20;:::i;:::-;38782:25;;38821:20;38839:1;38821:20;:::i;:::-;38816:25;;39009:1;38941:66;38937:74;38934:1;38931:81;38926:1;38919:9;38912:17;38908:105;38905:131;;;39016:18;;:::i;:::-;38905:131;39064:1;39061;39057:9;39046:20;;38724:348;;;;:::o;39078:191::-;39118:4;39138:20;39156:1;39138:20;:::i;:::-;39133:25;;39172:20;39190:1;39172:20;:::i;:::-;39167:25;;39211:1;39208;39205:8;39202:34;;;39216:18;;:::i;:::-;39202:34;39261:1;39258;39254:9;39246:17;;39078:191;;;;:::o;39275:96::-;39312:7;39341:24;39359:5;39341:24;:::i;:::-;39330:35;;39275:96;;;:::o;39377:104::-;39422:7;39451:24;39469:5;39451:24;:::i;:::-;39440:35;;39377:104;;;:::o;39487:90::-;39521:7;39564:5;39557:13;39550:21;39539:32;;39487:90;;;:::o;39583:149::-;39619:7;39659:66;39652:5;39648:78;39637:89;;39583:149;;;:::o;39738:126::-;39775:7;39815:42;39808:5;39804:54;39793:65;;39738:126;;;:::o;39870:77::-;39907:7;39936:5;39925:16;;39870:77;;;:::o;39953:154::-;40037:6;40032:3;40027;40014:30;40099:1;40090:6;40085:3;40081:16;40074:27;39953:154;;;:::o;40113:307::-;40181:1;40191:113;40205:6;40202:1;40199:13;40191:113;;;40290:1;40285:3;40281:11;40275:18;40271:1;40266:3;40262:11;40255:39;40227:2;40224:1;40220:10;40215:15;;40191:113;;;40322:6;40319:1;40316:13;40313:101;;;40402:1;40393:6;40388:3;40384:16;40377:27;40313:101;40162:258;40113:307;;;:::o;40426:320::-;40470:6;40507:1;40501:4;40497:12;40487:22;;40554:1;40548:4;40544:12;40575:18;40565:81;;40631:4;40623:6;40619:17;40609:27;;40565:81;40693:2;40685:6;40682:14;40662:18;40659:38;40656:84;;;40712:18;;:::i;:::-;40656:84;40477:269;40426:320;;;:::o;40752:281::-;40835:27;40857:4;40835:27;:::i;:::-;40827:6;40823:40;40965:6;40953:10;40950:22;40929:18;40917:10;40914:34;40911:62;40908:88;;;40976:18;;:::i;:::-;40908:88;41016:10;41012:2;41005:22;40795:238;40752:281;;:::o;41039:233::-;41078:3;41101:24;41119:5;41101:24;:::i;:::-;41092:33;;41147:66;41140:5;41137:77;41134:103;;;41217:18;;:::i;:::-;41134:103;41264:1;41257:5;41253:13;41246:20;;41039:233;;;:::o;41278:176::-;41310:1;41327:20;41345:1;41327:20;:::i;:::-;41322:25;;41361:20;41379:1;41361:20;:::i;:::-;41356:25;;41400:1;41390:35;;41405:18;;:::i;:::-;41390:35;41446:1;41443;41439:9;41434:14;;41278:176;;;;:::o;41460:180::-;41508:77;41505:1;41498:88;41605:4;41602:1;41595:15;41629:4;41626:1;41619:15;41646:180;41694:77;41691:1;41684:88;41791:4;41788:1;41781:15;41815:4;41812:1;41805:15;41832:180;41880:77;41877:1;41870:88;41977:4;41974:1;41967:15;42001:4;41998:1;41991:15;42018:180;42066:77;42063:1;42056:88;42163:4;42160:1;42153:15;42187:4;42184:1;42177:15;42204:180;42252:77;42249:1;42242:88;42349:4;42346:1;42339:15;42373:4;42370:1;42363:15;42390:180;42438:77;42435:1;42428:88;42535:4;42532:1;42525:15;42559:4;42556:1;42549:15;42576:117;42685:1;42682;42675:12;42699:117;42808:1;42805;42798:12;42822:117;42931:1;42928;42921:12;42945:117;43054:1;43051;43044:12;43068:117;43177:1;43174;43167:12;43191:117;43300:1;43297;43290:12;43314:102;43355:6;43406:2;43402:7;43397:2;43390:5;43386:14;43382:28;43372:38;;43314:102;;;:::o;43422:230::-;43562:34;43558:1;43550:6;43546:14;43539:58;43631:13;43626:2;43618:6;43614:15;43607:38;43422:230;:::o;43658:237::-;43798:34;43794:1;43786:6;43782:14;43775:58;43867:20;43862:2;43854:6;43850:15;43843:45;43658:237;:::o;43901:225::-;44041:34;44037:1;44029:6;44025:14;44018:58;44110:8;44105:2;44097:6;44093:15;44086:33;43901:225;:::o;44132:178::-;44272:30;44268:1;44260:6;44256:14;44249:54;44132:178;:::o;44316:::-;44456:30;44452:1;44444:6;44440:14;44433:54;44316:178;:::o;44500:223::-;44640:34;44636:1;44628:6;44624:14;44617:58;44709:6;44704:2;44696:6;44692:15;44685:31;44500:223;:::o;44729:175::-;44869:27;44865:1;44857:6;44853:14;44846:51;44729:175;:::o;44910:231::-;45050:34;45046:1;45038:6;45034:14;45027:58;45119:14;45114:2;45106:6;45102:15;45095:39;44910:231;:::o;45147:243::-;45287:34;45283:1;45275:6;45271:14;45264:58;45356:26;45351:2;45343:6;45339:15;45332:51;45147:243;:::o;45396:229::-;45536:34;45532:1;45524:6;45520:14;45513:58;45605:12;45600:2;45592:6;45588:15;45581:37;45396:229;:::o;45631:228::-;45771:34;45767:1;45759:6;45755:14;45748:58;45840:11;45835:2;45827:6;45823:15;45816:36;45631:228;:::o;45865:172::-;46005:24;46001:1;45993:6;45989:14;45982:48;45865:172;:::o;46043:223::-;46183:34;46179:1;46171:6;46167:14;46160:58;46252:6;46247:2;46239:6;46235:15;46228:31;46043:223;:::o;46272:182::-;46412:34;46408:1;46400:6;46396:14;46389:58;46272:182;:::o;46460:231::-;46600:34;46596:1;46588:6;46584:14;46577:58;46669:14;46664:2;46656:6;46652:15;46645:39;46460:231;:::o;46697:182::-;46837:34;46833:1;46825:6;46821:14;46814:58;46697:182;:::o;46885:172::-;47025:24;47021:1;47013:6;47009:14;47002:48;46885:172;:::o;47063:228::-;47203:34;47199:1;47191:6;47187:14;47180:58;47272:11;47267:2;47259:6;47255:15;47248:36;47063:228;:::o;47297:234::-;47437:34;47433:1;47425:6;47421:14;47414:58;47506:17;47501:2;47493:6;47489:15;47482:42;47297:234;:::o;47537:220::-;47677:34;47673:1;47665:6;47661:14;47654:58;47746:3;47741:2;47733:6;47729:15;47722:28;47537:220;:::o;47763:114::-;;:::o;47883:168::-;48023:20;48019:1;48011:6;48007:14;48000:44;47883:168;:::o;48057:236::-;48197:34;48193:1;48185:6;48181:14;48174:58;48266:19;48261:2;48253:6;48249:15;48242:44;48057:236;:::o;48299:231::-;48439:34;48435:1;48427:6;48423:14;48416:58;48508:14;48503:2;48495:6;48491:15;48484:39;48299:231;:::o;48536:173::-;48676:25;48672:1;48664:6;48660:14;48653:49;48536:173;:::o;48715:177::-;48855:29;48851:1;48843:6;48839:14;48832:53;48715:177;:::o;48898:122::-;48971:24;48989:5;48971:24;:::i;:::-;48964:5;48961:35;48951:63;;49010:1;49007;49000:12;48951:63;48898:122;:::o;49026:116::-;49096:21;49111:5;49096:21;:::i;:::-;49089:5;49086:32;49076:60;;49132:1;49129;49122:12;49076:60;49026:116;:::o;49148:120::-;49220:23;49237:5;49220:23;:::i;:::-;49213:5;49210:34;49200:62;;49258:1;49255;49248:12;49200:62;49148:120;:::o;49274:122::-;49347:24;49365:5;49347:24;:::i;:::-;49340:5;49337:35;49327:63;;49386:1;49383;49376:12;49327:63;49274:122;:::o
Swarm Source
ipfs://02ebeea944354eebf21b66f21b25b293b65f77dd4936b4d990f416239d50ab41
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.