ERC-721
Overview
Max Total Supply
45 Club Pass
Holders
22
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 Club PassLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ShillYourNFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-12 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: erc721a/contracts/IERC721A.sol // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A is IERC721, IERC721Metadata { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); } // File: erc721a/contracts/ERC721A.sol // ERC721A Contracts v3.3.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721A { using Address for address; using Strings for uint256; // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @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 override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @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) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); 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 override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner) if(!isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_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 { _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 { _transfer(from, to, tokenId); if (to.isContract()) if(!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex < end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: contracts/superflip.sol pragma solidity ^0.8.4; contract ShillYourNFT is ERC721A, Ownable, ReentrancyGuard { using Strings for uint256; uint256 public cost; uint256 public maxSupply; string private BASE_URI; uint256 public MAX_MINT_AMOUNT_PER_TX; bool public IS_SALE_ACTIVE; mapping(address => uint256) private freeMintCountMap; constructor( uint256 price, uint256 max_Supply, string memory baseUri, uint256 maxMintPerTx, bool isSaleActive ) ERC721A("Shill Your NFT", "Club Pass") { cost = price; maxSupply = max_Supply; BASE_URI = baseUri; MAX_MINT_AMOUNT_PER_TX = maxMintPerTx; IS_SALE_ACTIVE = isSaleActive; } /** FREE MINT **/ function updateFreeMintCount(address minter, uint256 count) private { freeMintCountMap[minter] += count; } /** GETTERS **/ function _baseURI() internal view virtual override returns (string memory) { return BASE_URI; } /** SETTERS **/ function setPrice(uint256 customPrice) external onlyOwner { cost = customPrice; } function batchBurn(uint256[] memory tokenids) external onlyOwner { uint256 len = tokenids.length; for (uint256 i; i < len; i++) { uint256 tokenid = tokenids[i]; _burn(tokenid); } } function lowerMaxSupply(uint256 newMaxSupply) external onlyOwner { require(newMaxSupply > maxSupply, "Invalid new max supply"); require(newMaxSupply >= _currentIndex, "Invalid new max supply"); maxSupply = newMaxSupply; } function setBaseURI(string memory customBaseURI_) external onlyOwner { BASE_URI = customBaseURI_; } function setMaxMintPerTx(uint256 maxMintPerTx) external onlyOwner { MAX_MINT_AMOUNT_PER_TX = maxMintPerTx; } function setSaleActive(bool saleIsActive) external onlyOwner { IS_SALE_ACTIVE = saleIsActive; } /** MINT **/ modifier mintCompliance(uint256 _mintAmount) { require( _mintAmount > 0 && _mintAmount <= MAX_MINT_AMOUNT_PER_TX, "Invalid mint amount!" ); require( _currentIndex + _mintAmount <= maxSupply, "Max supply exceeded!" ); _; } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(IS_SALE_ACTIVE, "Sale is not active!"); uint256 price = cost * _mintAmount; require(msg.value >= price, "Insufficient funds!"); _safeMint(msg.sender, _mintAmount); } function godMint(address _to, uint256 _mintAmount) public mintCompliance(_mintAmount) onlyOwner { _safeMint(_to, _mintAmount); } /** PAYOUT **/ function withdraw() public onlyOwner nonReentrant { uint256 balance = address(this).balance; Address.sendValue( payable(0x7b87d0fc89b51Ea3DC1813100Cbe107098E020f5), balance ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"max_Supply","type":"uint256"},{"internalType":"string","name":"baseUri","type":"string"},{"internalType":"uint256","name":"maxMintPerTx","type":"uint256"},{"internalType":"bool","name":"isSaleActive","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"IS_SALE_ACTIVE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_AMOUNT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenids","type":"uint256[]"}],"name":"batchBurn","outputs":[],"stateMutability":"nonpayable","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":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"godMint","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"lowerMaxSupply","outputs":[],"stateMutability":"nonpayable","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"customBaseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMintPerTx","type":"uint256"}],"name":"setMaxMintPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"customPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"saleIsActive","type":"bool"}],"name":"setSaleActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620045b9380380620045b9833981810160405281019062000037919062000397565b6040518060400160405280600e81526020017f5368696c6c20596f7572204e46540000000000000000000000000000000000008152506040518060400160405280600981526020017f436c7562205061737300000000000000000000000000000000000000000000008152508160029080519060200190620000bb9291906200023b565b508060039080519060200190620000d49291906200023b565b50620000e56200016860201b60201c565b60008190555050506200010d620001016200016d60201b60201c565b6200017560201b60201c565b600160098190555084600a8190555083600b8190555082600c90805190602001906200013b9291906200023b565b5081600d8190555080600e60006101000a81548160ff02191690831515021790555050505050506200060c565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200024990620004e9565b90600052602060002090601f0160209004810192826200026d5760008555620002b9565b82601f106200028857805160ff1916838001178555620002b9565b82800160010185558215620002b9579182015b82811115620002b85782518255916020019190600101906200029b565b5b509050620002c89190620002cc565b5090565b5b80821115620002e7576000816000905550600101620002cd565b5090565b600062000302620002fc8462000467565b6200043e565b905082815260208101848484011115620003215762000320620005b8565b5b6200032e848285620004b3565b509392505050565b6000815190506200034781620005d8565b92915050565b600082601f830112620003655762000364620005b3565b5b815162000377848260208601620002eb565b91505092915050565b6000815190506200039181620005f2565b92915050565b600080600080600060a08688031215620003b657620003b5620005c2565b5b6000620003c68882890162000380565b9550506020620003d98882890162000380565b945050604086015167ffffffffffffffff811115620003fd57620003fc620005bd565b5b6200040b888289016200034d565b93505060606200041e8882890162000380565b9250506080620004318882890162000336565b9150509295509295909350565b60006200044a6200045d565b90506200045882826200051f565b919050565b6000604051905090565b600067ffffffffffffffff82111562000485576200048462000584565b5b6200049082620005c7565b9050602081019050919050565b60008115159050919050565b6000819050919050565b60005b83811015620004d3578082015181840152602081019050620004b6565b83811115620004e3576000848401525b50505050565b600060028204905060018216806200050257607f821691505b6020821081141562000519576200051862000555565b5b50919050565b6200052a82620005c7565b810181811067ffffffffffffffff821117156200054c576200054b62000584565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620005e3816200049d565b8114620005ef57600080fd5b50565b620005fd81620004a9565b81146200060957600080fd5b50565b613f9d806200061c6000396000f3fe6080604052600436106101cd5760003560e01c8063715018a6116100f7578063a22cb46511610095578063d5abeb0111610064578063d5abeb011461063d578063dc8e92ea14610668578063e985e9c514610691578063f2fde38b146106ce576101cd565b8063a22cb46514610585578063b88d4fde146105ae578063c4e9374d146105d7578063c87b56dd14610600576101cd565b80638da5cb5b116100d15780638da5cb5b146104ea57806391b7f5ed1461051557806395d89b411461053e578063a0712d6814610569576101cd565b8063715018a61461047f57806376d02b7114610496578063841718a6146104c1576101cd565b806323b872dd1161016f57806355f804b31161013e57806355f804b3146103b3578063616cdb1e146103dc5780636352211e1461040557806370a0823114610442576101cd565b806323b872dd146103215780633ccfd60b1461034a57806341f4a21e1461036157806342842e0e1461038a576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806309ef6527146102a057806313faede6146102cb57806318160ddd146102f6576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f4919061330b565b6106f7565b60405161020691906136cc565b60405180910390f35b34801561021b57600080fd5b506102246107d9565b60405161023191906136e7565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c91906133ae565b61086b565b60405161026e9190613665565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190613255565b6108e7565b005b3480156102ac57600080fd5b506102b56109ec565b6040516102c29190613849565b60405180910390f35b3480156102d757600080fd5b506102e06109f2565b6040516102ed9190613849565b60405180910390f35b34801561030257600080fd5b5061030b6109f8565b6040516103189190613849565b60405180910390f35b34801561032d57600080fd5b506103486004803603810190610343919061313f565b610a0f565b005b34801561035657600080fd5b5061035f610a1f565b005b34801561036d57600080fd5b5061038860048036038101906103839190613255565b610b17565b005b34801561039657600080fd5b506103b160048036038101906103ac919061313f565b610c46565b005b3480156103bf57600080fd5b506103da60048036038101906103d59190613365565b610c66565b005b3480156103e857600080fd5b5061040360048036038101906103fe91906133ae565b610cfc565b005b34801561041157600080fd5b5061042c600480360381019061042791906133ae565b610d82565b6040516104399190613665565b60405180910390f35b34801561044e57600080fd5b50610469600480360381019061046491906130d2565b610d98565b6040516104769190613849565b60405180910390f35b34801561048b57600080fd5b50610494610e68565b005b3480156104a257600080fd5b506104ab610ef0565b6040516104b891906136cc565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e391906132de565b610f03565b005b3480156104f657600080fd5b506104ff610f9c565b60405161050c9190613665565b60405180910390f35b34801561052157600080fd5b5061053c600480360381019061053791906133ae565b610fc6565b005b34801561054a57600080fd5b5061055361104c565b60405161056091906136e7565b60405180910390f35b610583600480360381019061057e91906133ae565b6110de565b005b34801561059157600080fd5b506105ac60048036038101906105a79190613215565b611235565b005b3480156105ba57600080fd5b506105d560048036038101906105d09190613192565b6113ad565b005b3480156105e357600080fd5b506105fe60048036038101906105f991906133ae565b611425565b005b34801561060c57600080fd5b50610627600480360381019061062291906133ae565b611534565b60405161063491906136e7565b60405180910390f35b34801561064957600080fd5b506106526115d3565b60405161065f9190613849565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190613295565b6115d9565b005b34801561069d57600080fd5b506106b860048036038101906106b391906130ff565b6116a7565b6040516106c591906136cc565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f091906130d2565b61173b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107c257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107d257506107d182611833565b5b9050919050565b6060600280546107e890613b30565b80601f016020809104026020016040519081016040528092919081815260200182805461081490613b30565b80156108615780601f1061083657610100808354040283529160200191610861565b820191906000526020600020905b81548152906001019060200180831161084457829003601f168201915b5050505050905090565b60006108768261189d565b6108ac576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108f282610d82565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561095a576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109796118eb565b73ffffffffffffffffffffffffffffffffffffffff16146109dc576109a5816109a06118eb565b6116a7565b6109db576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6109e78383836118f3565b505050565b600d5481565b600a5481565b6000610a026119a5565b6001546000540303905090565b610a1a8383836119aa565b505050565b610a276118eb565b73ffffffffffffffffffffffffffffffffffffffff16610a45610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9290613789565b60405180910390fd5b60026009541415610ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad890613809565b60405180910390fd5b60026009819055506000479050610b0c737b87d0fc89b51ea3dc1813100cbe107098e020f582611e60565b506001600981905550565b80600081118015610b2a5750600d548111155b610b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6090613729565b60405180910390fd5b600b5481600054610b7a9190613965565b1115610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb2906137e9565b60405180910390fd5b610bc36118eb565b73ffffffffffffffffffffffffffffffffffffffff16610be1610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e90613789565b60405180910390fd5b610c418383611f54565b505050565b610c61838383604051806020016040528060008152506113ad565b505050565b610c6e6118eb565b73ffffffffffffffffffffffffffffffffffffffff16610c8c610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd990613789565b60405180910390fd5b80600c9080519060200190610cf8929190612e05565b5050565b610d046118eb565b73ffffffffffffffffffffffffffffffffffffffff16610d22610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f90613789565b60405180910390fd5b80600d8190555050565b6000610d8d82611f72565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e00576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610e706118eb565b73ffffffffffffffffffffffffffffffffffffffff16610e8e610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb90613789565b60405180910390fd5b610eee60006121fd565b565b600e60009054906101000a900460ff1681565b610f0b6118eb565b73ffffffffffffffffffffffffffffffffffffffff16610f29610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7690613789565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fce6118eb565b73ffffffffffffffffffffffffffffffffffffffff16610fec610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990613789565b60405180910390fd5b80600a8190555050565b60606003805461105b90613b30565b80601f016020809104026020016040519081016040528092919081815260200182805461108790613b30565b80156110d45780601f106110a9576101008083540402835291602001916110d4565b820191906000526020600020905b8154815290600101906020018083116110b757829003601f168201915b5050505050905090565b806000811180156110f15750600d548111155b611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112790613729565b60405180910390fd5b600b54816000546111419190613965565b1115611182576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611179906137e9565b60405180910390fd5b600e60009054906101000a900460ff166111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c8906137a9565b60405180910390fd5b600082600a546111e191906139ec565b905080341015611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90613829565b60405180910390fd5b6112303384611f54565b505050565b61123d6118eb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a2576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006112af6118eb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661135c6118eb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113a191906136cc565b60405180910390a35050565b6113b88484846119aa565b6113d78373ffffffffffffffffffffffffffffffffffffffff166122c3565b1561141f576113e8848484846122e6565b61141e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b61142d6118eb565b73ffffffffffffffffffffffffffffffffffffffff1661144b610f9c565b73ffffffffffffffffffffffffffffffffffffffff16146114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890613789565b60405180910390fd5b600b5481116114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc906137c9565b60405180910390fd5b60005481101561152a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611521906137c9565b60405180910390fd5b80600b8190555050565b606061153f8261189d565b611575576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061157f612446565b90506000815114156115a057604051806020016040528060008152506115cb565b806115aa846124d8565b6040516020016115bb92919061362c565b6040516020818303038152906040525b915050919050565b600b5481565b6115e16118eb565b73ffffffffffffffffffffffffffffffffffffffff166115ff610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614611655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164c90613789565b60405180910390fd5b60008151905060005b818110156116a257600083828151811061167b5761167a613c9a565b5b6020026020010151905061168e81612639565b50808061169a90613b93565b91505061165e565b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117436118eb565b73ffffffffffffffffffffffffffffffffffffffff16611761610f9c565b73ffffffffffffffffffffffffffffffffffffffff16146117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae90613789565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181e90613709565b60405180910390fd5b611830816121fd565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816118a86119a5565b111580156118b7575060005482105b80156118e4575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b60006119b582611f72565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611a20576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611a416118eb565b73ffffffffffffffffffffffffffffffffffffffff161480611a705750611a6f85611a6a6118eb565b6116a7565b5b80611ab55750611a7e6118eb565b73ffffffffffffffffffffffffffffffffffffffff16611a9d8461086b565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611aee576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b55576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b628585856001612647565b611b6e600084876118f3565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611dee576000548214611ded57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e59858585600161264d565b5050505050565b80471015611ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9a90613769565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611ec990613650565b60006040518083038185875af1925050503d8060008114611f06576040519150601f19603f3d011682016040523d82523d6000602084013e611f0b565b606091505b5050905080611f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4690613749565b60405180910390fd5b505050565b611f6e828260405180602001604052806000815250612653565b5050565b611f7a612e8b565b600082905080611f886119a5565b116121c6576000548110156121c5576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516121c357600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146120a75780925050506121f8565b5b6001156121c257818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146121bd5780925050506121f8565b6120a8565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261230c6118eb565b8786866040518563ffffffff1660e01b815260040161232e9493929190613680565b602060405180830381600087803b15801561234857600080fd5b505af192505050801561237957506040513d601f19601f820116820180604052508101906123769190613338565b60015b6123f3573d80600081146123a9576040519150601f19603f3d011682016040523d82523d6000602084013e6123ae565b606091505b506000815114156123eb576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c805461245590613b30565b80601f016020809104026020016040519081016040528092919081815260200182805461248190613b30565b80156124ce5780601f106124a3576101008083540402835291602001916124ce565b820191906000526020600020905b8154815290600101906020018083116124b157829003601f168201915b5050505050905090565b60606000821415612520576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612634565b600082905060005b6000821461255257808061253b90613b93565b915050600a8261254b91906139bb565b9150612528565b60008167ffffffffffffffff81111561256e5761256d613cc9565b5b6040519080825280601f01601f1916602001820160405280156125a05781602001600182028036833780820191505090505b5090505b6000851461262d576001826125b99190613a46565b9150600a856125c89190613bdc565b60306125d49190613965565b60f81b8183815181106125ea576125e9613c9a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561262691906139bb565b94506125a4565b8093505050505b919050565b612644816000612a15565b50565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126c0576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156126fb576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127086000858386612647565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506128c98673ffffffffffffffffffffffffffffffffffffffff166122c3565b1561298e575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461293e60008784806001019550876122e6565b612974576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106128cf57826000541461298957600080fd5b6129f9565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821061298f575b816000819055505050612a0f600085838661264d565b50505050565b6000612a2083611f72565b90506000816000015190508215612b015760008173ffffffffffffffffffffffffffffffffffffffff16612a526118eb565b73ffffffffffffffffffffffffffffffffffffffff161480612a815750612a8082612a7b6118eb565b6116a7565b5b80612ac65750612a8f6118eb565b73ffffffffffffffffffffffffffffffffffffffff16612aae8661086b565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612aff576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b612b0f816000866001612647565b612b1b600085836118f3565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d7f576000548214612d7e57848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ded81600086600161264d565b60016000815480929190600101919050555050505050565b828054612e1190613b30565b90600052602060002090601f016020900481019282612e335760008555612e7a565b82601f10612e4c57805160ff1916838001178555612e7a565b82800160010185558215612e7a579182015b82811115612e79578251825591602001919060010190612e5e565b5b509050612e879190612ece565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612ee7576000816000905550600101612ecf565b5090565b6000612efe612ef984613889565b613864565b90508083825260208201905082856020860282011115612f2157612f20613cfd565b5b60005b85811015612f515781612f3788826130bd565b845260208401935060208301925050600181019050612f24565b5050509392505050565b6000612f6e612f69846138b5565b613864565b905082815260208101848484011115612f8a57612f89613d02565b5b612f95848285613aee565b509392505050565b6000612fb0612fab846138e6565b613864565b905082815260208101848484011115612fcc57612fcb613d02565b5b612fd7848285613aee565b509392505050565b600081359050612fee81613f0b565b92915050565b600082601f83011261300957613008613cf8565b5b8135613019848260208601612eeb565b91505092915050565b60008135905061303181613f22565b92915050565b60008135905061304681613f39565b92915050565b60008151905061305b81613f39565b92915050565b600082601f83011261307657613075613cf8565b5b8135613086848260208601612f5b565b91505092915050565b600082601f8301126130a4576130a3613cf8565b5b81356130b4848260208601612f9d565b91505092915050565b6000813590506130cc81613f50565b92915050565b6000602082840312156130e8576130e7613d0c565b5b60006130f684828501612fdf565b91505092915050565b6000806040838503121561311657613115613d0c565b5b600061312485828601612fdf565b925050602061313585828601612fdf565b9150509250929050565b60008060006060848603121561315857613157613d0c565b5b600061316686828701612fdf565b935050602061317786828701612fdf565b9250506040613188868287016130bd565b9150509250925092565b600080600080608085870312156131ac576131ab613d0c565b5b60006131ba87828801612fdf565b94505060206131cb87828801612fdf565b93505060406131dc878288016130bd565b925050606085013567ffffffffffffffff8111156131fd576131fc613d07565b5b61320987828801613061565b91505092959194509250565b6000806040838503121561322c5761322b613d0c565b5b600061323a85828601612fdf565b925050602061324b85828601613022565b9150509250929050565b6000806040838503121561326c5761326b613d0c565b5b600061327a85828601612fdf565b925050602061328b858286016130bd565b9150509250929050565b6000602082840312156132ab576132aa613d0c565b5b600082013567ffffffffffffffff8111156132c9576132c8613d07565b5b6132d584828501612ff4565b91505092915050565b6000602082840312156132f4576132f3613d0c565b5b600061330284828501613022565b91505092915050565b60006020828403121561332157613320613d0c565b5b600061332f84828501613037565b91505092915050565b60006020828403121561334e5761334d613d0c565b5b600061335c8482850161304c565b91505092915050565b60006020828403121561337b5761337a613d0c565b5b600082013567ffffffffffffffff81111561339957613398613d07565b5b6133a58482850161308f565b91505092915050565b6000602082840312156133c4576133c3613d0c565b5b60006133d2848285016130bd565b91505092915050565b6133e481613a7a565b82525050565b6133f381613a8c565b82525050565b600061340482613917565b61340e818561392d565b935061341e818560208601613afd565b61342781613d11565b840191505092915050565b600061343d82613922565b6134478185613949565b9350613457818560208601613afd565b61346081613d11565b840191505092915050565b600061347682613922565b613480818561395a565b9350613490818560208601613afd565b80840191505092915050565b60006134a9602683613949565b91506134b482613d22565b604082019050919050565b60006134cc601483613949565b91506134d782613d71565b602082019050919050565b60006134ef603a83613949565b91506134fa82613d9a565b604082019050919050565b6000613512601d83613949565b915061351d82613de9565b602082019050919050565b6000613535602083613949565b915061354082613e12565b602082019050919050565b6000613558601383613949565b915061356382613e3b565b602082019050919050565b600061357b601683613949565b915061358682613e64565b602082019050919050565b600061359e60008361393e565b91506135a982613e8d565b600082019050919050565b60006135c1601483613949565b91506135cc82613e90565b602082019050919050565b60006135e4601f83613949565b91506135ef82613eb9565b602082019050919050565b6000613607601383613949565b915061361282613ee2565b602082019050919050565b61362681613ae4565b82525050565b6000613638828561346b565b9150613644828461346b565b91508190509392505050565b600061365b82613591565b9150819050919050565b600060208201905061367a60008301846133db565b92915050565b600060808201905061369560008301876133db565b6136a260208301866133db565b6136af604083018561361d565b81810360608301526136c181846133f9565b905095945050505050565b60006020820190506136e160008301846133ea565b92915050565b600060208201905081810360008301526137018184613432565b905092915050565b600060208201905081810360008301526137228161349c565b9050919050565b60006020820190508181036000830152613742816134bf565b9050919050565b60006020820190508181036000830152613762816134e2565b9050919050565b6000602082019050818103600083015261378281613505565b9050919050565b600060208201905081810360008301526137a281613528565b9050919050565b600060208201905081810360008301526137c28161354b565b9050919050565b600060208201905081810360008301526137e28161356e565b9050919050565b60006020820190508181036000830152613802816135b4565b9050919050565b60006020820190508181036000830152613822816135d7565b9050919050565b60006020820190508181036000830152613842816135fa565b9050919050565b600060208201905061385e600083018461361d565b92915050565b600061386e61387f565b905061387a8282613b62565b919050565b6000604051905090565b600067ffffffffffffffff8211156138a4576138a3613cc9565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156138d0576138cf613cc9565b5b6138d982613d11565b9050602081019050919050565b600067ffffffffffffffff82111561390157613900613cc9565b5b61390a82613d11565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061397082613ae4565b915061397b83613ae4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139b0576139af613c0d565b5b828201905092915050565b60006139c682613ae4565b91506139d183613ae4565b9250826139e1576139e0613c3c565b5b828204905092915050565b60006139f782613ae4565b9150613a0283613ae4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a3b57613a3a613c0d565b5b828202905092915050565b6000613a5182613ae4565b9150613a5c83613ae4565b925082821015613a6f57613a6e613c0d565b5b828203905092915050565b6000613a8582613ac4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b1b578082015181840152602081019050613b00565b83811115613b2a576000848401525b50505050565b60006002820490506001821680613b4857607f821691505b60208210811415613b5c57613b5b613c6b565b5b50919050565b613b6b82613d11565b810181811067ffffffffffffffff82111715613b8a57613b89613cc9565b5b80604052505050565b6000613b9e82613ae4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bd157613bd0613c0d565b5b600182019050919050565b6000613be782613ae4565b9150613bf283613ae4565b925082613c0257613c01613c3c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973206e6f74206163746976652100000000000000000000000000600082015250565b7f496e76616c6964206e6577206d617820737570706c7900000000000000000000600082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b613f1481613a7a565b8114613f1f57600080fd5b50565b613f2b81613a8c565b8114613f3657600080fd5b50565b613f4281613a98565b8114613f4d57600080fd5b50565b613f5981613ae4565b8114613f6457600080fd5b5056fea2646970667358221220dcdbe4381577d3749d16fb10ef1b639e116503a4d6251ea4f457e7156a3b23a164736f6c634300080700330000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000005a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002368747470733a2f2f7368696c6c796f75726e66742e636c75622f6d657461646174612f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c8063715018a6116100f7578063a22cb46511610095578063d5abeb0111610064578063d5abeb011461063d578063dc8e92ea14610668578063e985e9c514610691578063f2fde38b146106ce576101cd565b8063a22cb46514610585578063b88d4fde146105ae578063c4e9374d146105d7578063c87b56dd14610600576101cd565b80638da5cb5b116100d15780638da5cb5b146104ea57806391b7f5ed1461051557806395d89b411461053e578063a0712d6814610569576101cd565b8063715018a61461047f57806376d02b7114610496578063841718a6146104c1576101cd565b806323b872dd1161016f57806355f804b31161013e57806355f804b3146103b3578063616cdb1e146103dc5780636352211e1461040557806370a0823114610442576101cd565b806323b872dd146103215780633ccfd60b1461034a57806341f4a21e1461036157806342842e0e1461038a576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806309ef6527146102a057806313faede6146102cb57806318160ddd146102f6576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f4919061330b565b6106f7565b60405161020691906136cc565b60405180910390f35b34801561021b57600080fd5b506102246107d9565b60405161023191906136e7565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c91906133ae565b61086b565b60405161026e9190613665565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190613255565b6108e7565b005b3480156102ac57600080fd5b506102b56109ec565b6040516102c29190613849565b60405180910390f35b3480156102d757600080fd5b506102e06109f2565b6040516102ed9190613849565b60405180910390f35b34801561030257600080fd5b5061030b6109f8565b6040516103189190613849565b60405180910390f35b34801561032d57600080fd5b506103486004803603810190610343919061313f565b610a0f565b005b34801561035657600080fd5b5061035f610a1f565b005b34801561036d57600080fd5b5061038860048036038101906103839190613255565b610b17565b005b34801561039657600080fd5b506103b160048036038101906103ac919061313f565b610c46565b005b3480156103bf57600080fd5b506103da60048036038101906103d59190613365565b610c66565b005b3480156103e857600080fd5b5061040360048036038101906103fe91906133ae565b610cfc565b005b34801561041157600080fd5b5061042c600480360381019061042791906133ae565b610d82565b6040516104399190613665565b60405180910390f35b34801561044e57600080fd5b50610469600480360381019061046491906130d2565b610d98565b6040516104769190613849565b60405180910390f35b34801561048b57600080fd5b50610494610e68565b005b3480156104a257600080fd5b506104ab610ef0565b6040516104b891906136cc565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e391906132de565b610f03565b005b3480156104f657600080fd5b506104ff610f9c565b60405161050c9190613665565b60405180910390f35b34801561052157600080fd5b5061053c600480360381019061053791906133ae565b610fc6565b005b34801561054a57600080fd5b5061055361104c565b60405161056091906136e7565b60405180910390f35b610583600480360381019061057e91906133ae565b6110de565b005b34801561059157600080fd5b506105ac60048036038101906105a79190613215565b611235565b005b3480156105ba57600080fd5b506105d560048036038101906105d09190613192565b6113ad565b005b3480156105e357600080fd5b506105fe60048036038101906105f991906133ae565b611425565b005b34801561060c57600080fd5b50610627600480360381019061062291906133ae565b611534565b60405161063491906136e7565b60405180910390f35b34801561064957600080fd5b506106526115d3565b60405161065f9190613849565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a9190613295565b6115d9565b005b34801561069d57600080fd5b506106b860048036038101906106b391906130ff565b6116a7565b6040516106c591906136cc565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f091906130d2565b61173b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107c257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107d257506107d182611833565b5b9050919050565b6060600280546107e890613b30565b80601f016020809104026020016040519081016040528092919081815260200182805461081490613b30565b80156108615780601f1061083657610100808354040283529160200191610861565b820191906000526020600020905b81548152906001019060200180831161084457829003601f168201915b5050505050905090565b60006108768261189d565b6108ac576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108f282610d82565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561095a576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109796118eb565b73ffffffffffffffffffffffffffffffffffffffff16146109dc576109a5816109a06118eb565b6116a7565b6109db576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6109e78383836118f3565b505050565b600d5481565b600a5481565b6000610a026119a5565b6001546000540303905090565b610a1a8383836119aa565b505050565b610a276118eb565b73ffffffffffffffffffffffffffffffffffffffff16610a45610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9290613789565b60405180910390fd5b60026009541415610ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad890613809565b60405180910390fd5b60026009819055506000479050610b0c737b87d0fc89b51ea3dc1813100cbe107098e020f582611e60565b506001600981905550565b80600081118015610b2a5750600d548111155b610b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6090613729565b60405180910390fd5b600b5481600054610b7a9190613965565b1115610bbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb2906137e9565b60405180910390fd5b610bc36118eb565b73ffffffffffffffffffffffffffffffffffffffff16610be1610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e90613789565b60405180910390fd5b610c418383611f54565b505050565b610c61838383604051806020016040528060008152506113ad565b505050565b610c6e6118eb565b73ffffffffffffffffffffffffffffffffffffffff16610c8c610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd990613789565b60405180910390fd5b80600c9080519060200190610cf8929190612e05565b5050565b610d046118eb565b73ffffffffffffffffffffffffffffffffffffffff16610d22610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6f90613789565b60405180910390fd5b80600d8190555050565b6000610d8d82611f72565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e00576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610e706118eb565b73ffffffffffffffffffffffffffffffffffffffff16610e8e610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610ee4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edb90613789565b60405180910390fd5b610eee60006121fd565b565b600e60009054906101000a900460ff1681565b610f0b6118eb565b73ffffffffffffffffffffffffffffffffffffffff16610f29610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614610f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7690613789565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610fce6118eb565b73ffffffffffffffffffffffffffffffffffffffff16610fec610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990613789565b60405180910390fd5b80600a8190555050565b60606003805461105b90613b30565b80601f016020809104026020016040519081016040528092919081815260200182805461108790613b30565b80156110d45780601f106110a9576101008083540402835291602001916110d4565b820191906000526020600020905b8154815290600101906020018083116110b757829003601f168201915b5050505050905090565b806000811180156110f15750600d548111155b611130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112790613729565b60405180910390fd5b600b54816000546111419190613965565b1115611182576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611179906137e9565b60405180910390fd5b600e60009054906101000a900460ff166111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c8906137a9565b60405180910390fd5b600082600a546111e191906139ec565b905080341015611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90613829565b60405180910390fd5b6112303384611f54565b505050565b61123d6118eb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112a2576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006112af6118eb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661135c6118eb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516113a191906136cc565b60405180910390a35050565b6113b88484846119aa565b6113d78373ffffffffffffffffffffffffffffffffffffffff166122c3565b1561141f576113e8848484846122e6565b61141e576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b61142d6118eb565b73ffffffffffffffffffffffffffffffffffffffff1661144b610f9c565b73ffffffffffffffffffffffffffffffffffffffff16146114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890613789565b60405180910390fd5b600b5481116114e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dc906137c9565b60405180910390fd5b60005481101561152a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611521906137c9565b60405180910390fd5b80600b8190555050565b606061153f8261189d565b611575576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061157f612446565b90506000815114156115a057604051806020016040528060008152506115cb565b806115aa846124d8565b6040516020016115bb92919061362c565b6040516020818303038152906040525b915050919050565b600b5481565b6115e16118eb565b73ffffffffffffffffffffffffffffffffffffffff166115ff610f9c565b73ffffffffffffffffffffffffffffffffffffffff1614611655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164c90613789565b60405180910390fd5b60008151905060005b818110156116a257600083828151811061167b5761167a613c9a565b5b6020026020010151905061168e81612639565b50808061169a90613b93565b91505061165e565b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117436118eb565b73ffffffffffffffffffffffffffffffffffffffff16611761610f9c565b73ffffffffffffffffffffffffffffffffffffffff16146117b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ae90613789565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181e90613709565b60405180910390fd5b611830816121fd565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000816118a86119a5565b111580156118b7575060005482105b80156118e4575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b60006119b582611f72565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611a20576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611a416118eb565b73ffffffffffffffffffffffffffffffffffffffff161480611a705750611a6f85611a6a6118eb565b6116a7565b5b80611ab55750611a7e6118eb565b73ffffffffffffffffffffffffffffffffffffffff16611a9d8461086b565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611aee576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b55576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b628585856001612647565b611b6e600084876118f3565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611dee576000548214611ded57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e59858585600161264d565b5050505050565b80471015611ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9a90613769565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051611ec990613650565b60006040518083038185875af1925050503d8060008114611f06576040519150601f19603f3d011682016040523d82523d6000602084013e611f0b565b606091505b5050905080611f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4690613749565b60405180910390fd5b505050565b611f6e828260405180602001604052806000815250612653565b5050565b611f7a612e8b565b600082905080611f886119a5565b116121c6576000548110156121c5576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516121c357600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146120a75780925050506121f8565b5b6001156121c257818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146121bd5780925050506121f8565b6120a8565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261230c6118eb565b8786866040518563ffffffff1660e01b815260040161232e9493929190613680565b602060405180830381600087803b15801561234857600080fd5b505af192505050801561237957506040513d601f19601f820116820180604052508101906123769190613338565b60015b6123f3573d80600081146123a9576040519150601f19603f3d011682016040523d82523d6000602084013e6123ae565b606091505b506000815114156123eb576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600c805461245590613b30565b80601f016020809104026020016040519081016040528092919081815260200182805461248190613b30565b80156124ce5780601f106124a3576101008083540402835291602001916124ce565b820191906000526020600020905b8154815290600101906020018083116124b157829003601f168201915b5050505050905090565b60606000821415612520576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612634565b600082905060005b6000821461255257808061253b90613b93565b915050600a8261254b91906139bb565b9150612528565b60008167ffffffffffffffff81111561256e5761256d613cc9565b5b6040519080825280601f01601f1916602001820160405280156125a05781602001600182028036833780820191505090505b5090505b6000851461262d576001826125b99190613a46565b9150600a856125c89190613bdc565b60306125d49190613965565b60f81b8183815181106125ea576125e9613c9a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561262691906139bb565b94506125a4565b8093505050505b919050565b612644816000612a15565b50565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126c0576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156126fb576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127086000858386612647565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506128c98673ffffffffffffffffffffffffffffffffffffffff166122c3565b1561298e575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461293e60008784806001019550876122e6565b612974576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106128cf57826000541461298957600080fd5b6129f9565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821061298f575b816000819055505050612a0f600085838661264d565b50505050565b6000612a2083611f72565b90506000816000015190508215612b015760008173ffffffffffffffffffffffffffffffffffffffff16612a526118eb565b73ffffffffffffffffffffffffffffffffffffffff161480612a815750612a8082612a7b6118eb565b6116a7565b5b80612ac65750612a8f6118eb565b73ffffffffffffffffffffffffffffffffffffffff16612aae8661086b565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612aff576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b612b0f816000866001612647565b612b1b600085836118f3565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612d7f576000548214612d7e57848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ded81600086600161264d565b60016000815480929190600101919050555050505050565b828054612e1190613b30565b90600052602060002090601f016020900481019282612e335760008555612e7a565b82601f10612e4c57805160ff1916838001178555612e7a565b82800160010185558215612e7a579182015b82811115612e79578251825591602001919060010190612e5e565b5b509050612e879190612ece565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612ee7576000816000905550600101612ecf565b5090565b6000612efe612ef984613889565b613864565b90508083825260208201905082856020860282011115612f2157612f20613cfd565b5b60005b85811015612f515781612f3788826130bd565b845260208401935060208301925050600181019050612f24565b5050509392505050565b6000612f6e612f69846138b5565b613864565b905082815260208101848484011115612f8a57612f89613d02565b5b612f95848285613aee565b509392505050565b6000612fb0612fab846138e6565b613864565b905082815260208101848484011115612fcc57612fcb613d02565b5b612fd7848285613aee565b509392505050565b600081359050612fee81613f0b565b92915050565b600082601f83011261300957613008613cf8565b5b8135613019848260208601612eeb565b91505092915050565b60008135905061303181613f22565b92915050565b60008135905061304681613f39565b92915050565b60008151905061305b81613f39565b92915050565b600082601f83011261307657613075613cf8565b5b8135613086848260208601612f5b565b91505092915050565b600082601f8301126130a4576130a3613cf8565b5b81356130b4848260208601612f9d565b91505092915050565b6000813590506130cc81613f50565b92915050565b6000602082840312156130e8576130e7613d0c565b5b60006130f684828501612fdf565b91505092915050565b6000806040838503121561311657613115613d0c565b5b600061312485828601612fdf565b925050602061313585828601612fdf565b9150509250929050565b60008060006060848603121561315857613157613d0c565b5b600061316686828701612fdf565b935050602061317786828701612fdf565b9250506040613188868287016130bd565b9150509250925092565b600080600080608085870312156131ac576131ab613d0c565b5b60006131ba87828801612fdf565b94505060206131cb87828801612fdf565b93505060406131dc878288016130bd565b925050606085013567ffffffffffffffff8111156131fd576131fc613d07565b5b61320987828801613061565b91505092959194509250565b6000806040838503121561322c5761322b613d0c565b5b600061323a85828601612fdf565b925050602061324b85828601613022565b9150509250929050565b6000806040838503121561326c5761326b613d0c565b5b600061327a85828601612fdf565b925050602061328b858286016130bd565b9150509250929050565b6000602082840312156132ab576132aa613d0c565b5b600082013567ffffffffffffffff8111156132c9576132c8613d07565b5b6132d584828501612ff4565b91505092915050565b6000602082840312156132f4576132f3613d0c565b5b600061330284828501613022565b91505092915050565b60006020828403121561332157613320613d0c565b5b600061332f84828501613037565b91505092915050565b60006020828403121561334e5761334d613d0c565b5b600061335c8482850161304c565b91505092915050565b60006020828403121561337b5761337a613d0c565b5b600082013567ffffffffffffffff81111561339957613398613d07565b5b6133a58482850161308f565b91505092915050565b6000602082840312156133c4576133c3613d0c565b5b60006133d2848285016130bd565b91505092915050565b6133e481613a7a565b82525050565b6133f381613a8c565b82525050565b600061340482613917565b61340e818561392d565b935061341e818560208601613afd565b61342781613d11565b840191505092915050565b600061343d82613922565b6134478185613949565b9350613457818560208601613afd565b61346081613d11565b840191505092915050565b600061347682613922565b613480818561395a565b9350613490818560208601613afd565b80840191505092915050565b60006134a9602683613949565b91506134b482613d22565b604082019050919050565b60006134cc601483613949565b91506134d782613d71565b602082019050919050565b60006134ef603a83613949565b91506134fa82613d9a565b604082019050919050565b6000613512601d83613949565b915061351d82613de9565b602082019050919050565b6000613535602083613949565b915061354082613e12565b602082019050919050565b6000613558601383613949565b915061356382613e3b565b602082019050919050565b600061357b601683613949565b915061358682613e64565b602082019050919050565b600061359e60008361393e565b91506135a982613e8d565b600082019050919050565b60006135c1601483613949565b91506135cc82613e90565b602082019050919050565b60006135e4601f83613949565b91506135ef82613eb9565b602082019050919050565b6000613607601383613949565b915061361282613ee2565b602082019050919050565b61362681613ae4565b82525050565b6000613638828561346b565b9150613644828461346b565b91508190509392505050565b600061365b82613591565b9150819050919050565b600060208201905061367a60008301846133db565b92915050565b600060808201905061369560008301876133db565b6136a260208301866133db565b6136af604083018561361d565b81810360608301526136c181846133f9565b905095945050505050565b60006020820190506136e160008301846133ea565b92915050565b600060208201905081810360008301526137018184613432565b905092915050565b600060208201905081810360008301526137228161349c565b9050919050565b60006020820190508181036000830152613742816134bf565b9050919050565b60006020820190508181036000830152613762816134e2565b9050919050565b6000602082019050818103600083015261378281613505565b9050919050565b600060208201905081810360008301526137a281613528565b9050919050565b600060208201905081810360008301526137c28161354b565b9050919050565b600060208201905081810360008301526137e28161356e565b9050919050565b60006020820190508181036000830152613802816135b4565b9050919050565b60006020820190508181036000830152613822816135d7565b9050919050565b60006020820190508181036000830152613842816135fa565b9050919050565b600060208201905061385e600083018461361d565b92915050565b600061386e61387f565b905061387a8282613b62565b919050565b6000604051905090565b600067ffffffffffffffff8211156138a4576138a3613cc9565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156138d0576138cf613cc9565b5b6138d982613d11565b9050602081019050919050565b600067ffffffffffffffff82111561390157613900613cc9565b5b61390a82613d11565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061397082613ae4565b915061397b83613ae4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139b0576139af613c0d565b5b828201905092915050565b60006139c682613ae4565b91506139d183613ae4565b9250826139e1576139e0613c3c565b5b828204905092915050565b60006139f782613ae4565b9150613a0283613ae4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a3b57613a3a613c0d565b5b828202905092915050565b6000613a5182613ae4565b9150613a5c83613ae4565b925082821015613a6f57613a6e613c0d565b5b828203905092915050565b6000613a8582613ac4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b1b578082015181840152602081019050613b00565b83811115613b2a576000848401525b50505050565b60006002820490506001821680613b4857607f821691505b60208210811415613b5c57613b5b613c6b565b5b50919050565b613b6b82613d11565b810181811067ffffffffffffffff82111715613b8a57613b89613cc9565b5b80604052505050565b6000613b9e82613ae4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bd157613bd0613c0d565b5b600182019050919050565b6000613be782613ae4565b9150613bf283613ae4565b925082613c0257613c01613c3c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973206e6f74206163746976652100000000000000000000000000600082015250565b7f496e76616c6964206e6577206d617820737570706c7900000000000000000000600082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b613f1481613a7a565b8114613f1f57600080fd5b50565b613f2b81613a8c565b8114613f3657600080fd5b50565b613f4281613a98565b8114613f4d57600080fd5b50565b613f5981613ae4565b8114613f6457600080fd5b5056fea2646970667358221220dcdbe4381577d3749d16fb10ef1b639e116503a4d6251ea4f457e7156a3b23a164736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000005543df729c00000000000000000000000000000000000000000000000000000000000000005a000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002368747470733a2f2f7368696c6c796f75726e66742e636c75622f6d657461646174612f0000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : price (uint256): 1500000000000000
Arg [1] : max_Supply (uint256): 1440
Arg [2] : baseUri (string): https://shillyournft.club/metadata/
Arg [3] : maxMintPerTx (uint256): 50
Arg [4] : isSaleActive (bool): True
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000005543df729c000
Arg [1] : 00000000000000000000000000000000000000000000000000000000000005a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000023
Arg [6] : 68747470733a2f2f7368696c6c796f75726e66742e636c75622f6d6574616461
Arg [7] : 74612f0000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
50226:3155:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31337:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34452:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35956:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35518:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50411:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50324:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30577:312;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36821:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53141:237;;;;;;;;;;;;;:::i;:::-;;52937:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37062:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51869:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51997:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34260:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31706:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7522:103;;;;;;;;;;;;;:::i;:::-;;50455:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52127:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6871:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51256:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34621:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52597:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36232:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37318:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51608:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34796:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50350:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51358:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36590:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7780:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31337:305;31439:4;31491:25;31476:40;;;:11;:40;;;;:105;;;;31548:33;31533:48;;;:11;:48;;;;31476:105;:158;;;;31598:36;31622:11;31598:23;:36::i;:::-;31476:158;31456:178;;31337:305;;;:::o;34452:100::-;34506:13;34539:5;34532:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34452:100;:::o;35956:204::-;36024:7;36049:16;36057:7;36049;:16::i;:::-;36044:64;;36074:34;;;;;;;;;;;;;;36044:64;36128:15;:24;36144:7;36128:24;;;;;;;;;;;;;;;;;;;;;36121:31;;35956:204;;;:::o;35518:372::-;35591:13;35607:24;35623:7;35607:15;:24::i;:::-;35591:40;;35652:5;35646:11;;:2;:11;;;35642:48;;;35666:24;;;;;;;;;;;;;;35642:48;35723:5;35707:21;;:12;:10;:12::i;:::-;:21;;;35703:139;;35734:37;35751:5;35758:12;:10;:12::i;:::-;35734:16;:37::i;:::-;35730:112;;35795:35;;;;;;;;;;;;;;35730:112;35703:139;35854:28;35863:2;35867:7;35876:5;35854:8;:28::i;:::-;35580:310;35518:372;;:::o;50411:37::-;;;;:::o;50324:19::-;;;;:::o;30577:312::-;30630:7;30855:15;:13;:15::i;:::-;30840:12;;30824:13;;:28;:46;30817:53;;30577:312;:::o;36821:170::-;36955:28;36965:4;36971:2;36975:7;36955:9;:28::i;:::-;36821:170;;;:::o;53141:237::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1845:1:::1;2443:7;;:19;;2435:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1845:1;2576:7;:18;;;;53202:15:::2;53220:21;53202:39;;53254:116;53294:42;53352:7;53254:17;:116::i;:::-;53191:187;1801:1:::1;2755:7;:22;;;;53141:237::o:0;52937:174::-;53028:11;52358:1;52344:11;:15;:56;;;;;52378:22;;52363:11;:37;;52344:56;52322:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;52512:9;;52497:11;52481:13;;:27;;;;:::i;:::-;:40;;52459:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;7102:12:::1;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53076:27:::2;53086:3;53091:11;53076:9;:27::i;:::-;52937:174:::0;;;:::o;37062:185::-;37200:39;37217:4;37223:2;37227:7;37200:39;;;;;;;;;;;;:16;:39::i;:::-;37062:185;;;:::o;51869:113::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51960:14:::1;51949:8;:25;;;;;;;;;;;;:::i;:::-;;51869:113:::0;:::o;51997:122::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52099:12:::1;52074:22;:37;;;;51997:122:::0;:::o;34260:125::-;34324:7;34351:21;34364:7;34351:12;:21::i;:::-;:26;;;34344:33;;34260:125;;;:::o;31706:206::-;31770:7;31811:1;31794:19;;:5;:19;;;31790:60;;;31822:28;;;;;;;;;;;;;;31790:60;31876:12;:19;31889:5;31876:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;31868:36;;31861:43;;31706:206;;;:::o;7522:103::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7587:30:::1;7614:1;7587:18;:30::i;:::-;7522:103::o:0;50455:26::-;;;;;;;;;;;;;:::o;52127:109::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52216:12:::1;52199:14;;:29;;;;;;;;;;;;;;;;;;52127:109:::0;:::o;6871:87::-;6917:7;6944:6;;;;;;;;;;;6937:13;;6871:87;:::o;51256:95::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51332:11:::1;51325:4;:18;;;;51256:95:::0;:::o;34621:104::-;34677:13;34710:7;34703:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34621:104;:::o;52597:332::-;52689:11;52358:1;52344:11;:15;:56;;;;;52378:22;;52363:11;:37;;52344:56;52322:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;52512:9;;52497:11;52481:13;;:27;;;;:::i;:::-;:40;;52459:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;52726:14:::1;;;;;;;;;;;52718:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;52777:13;52800:11;52793:4;;:18;;;;:::i;:::-;52777:34;;52845:5;52832:9;:18;;52824:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;52887:34;52897:10;52909:11;52887:9;:34::i;:::-;52707:222;52597:332:::0;;:::o;36232:287::-;36343:12;:10;:12::i;:::-;36331:24;;:8;:24;;;36327:54;;;36364:17;;;;;;;;;;;;;;36327:54;36439:8;36394:18;:32;36413:12;:10;:12::i;:::-;36394:32;;;;;;;;;;;;;;;:42;36427:8;36394:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;36492:8;36463:48;;36478:12;:10;:12::i;:::-;36463:48;;;36502:8;36463:48;;;;;;:::i;:::-;;;;;;;;36232:287;;:::o;37318:370::-;37485:28;37495:4;37501:2;37505:7;37485:9;:28::i;:::-;37528:15;:2;:13;;;:15::i;:::-;37524:157;;;37549:56;37580:4;37586:2;37590:7;37599:5;37549:30;:56::i;:::-;37545:136;;37629:40;;;;;;;;;;;;;;37545:136;37524:157;37318:370;;;;:::o;51608:253::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51707:9:::1;;51692:12;:24;51684:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;51778:13;;51762:12;:29;;51754:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;51841:12;51829:9;:24;;;;51608:253:::0;:::o;34796:318::-;34869:13;34900:16;34908:7;34900;:16::i;:::-;34895:59;;34925:29;;;;;;;;;;;;;;34895:59;34967:21;34991:10;:8;:10::i;:::-;34967:34;;35044:1;35025:7;35019:21;:26;;:87;;;;;;;;;;;;;;;;;35072:7;35081:18;:7;:16;:18::i;:::-;35055:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35019:87;35012:94;;;34796:318;;;:::o;50350:24::-;;;;:::o;51358:238::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51434:11:::1;51448:8;:15;51434:29;;51479:9;51474:115;51494:3;51490:1;:7;51474:115;;;51519:15;51537:8;51546:1;51537:11;;;;;;;;:::i;:::-;;;;;;;;51519:29;;51563:14;51569:7;51563:5;:14::i;:::-;51504:85;51499:3;;;;;:::i;:::-;;;;51474:115;;;;51423:173;51358:238:::0;:::o;36590:164::-;36687:4;36711:18;:25;36730:5;36711:25;;;;;;;;;;;;;;;:35;36737:8;36711:35;;;;;;;;;;;;;;;;;;;;;;;;;36704:42;;36590:164;;;;:::o;7780:201::-;7102:12;:10;:12::i;:::-;7091:23;;:7;:5;:7::i;:::-;:23;;;7083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7889:1:::1;7869:22;;:8;:22;;;;7861:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7945:28;7964:8;7945:18;:28::i;:::-;7780:201:::0;:::o;19678:157::-;19763:4;19802:25;19787:40;;;:11;:40;;;;19780:47;;19678:157;;;:::o;37943:174::-;38000:4;38043:7;38024:15;:13;:15::i;:::-;:26;;:53;;;;;38064:13;;38054:7;:23;38024:53;:85;;;;;38082:11;:20;38094:7;38082:20;;;;;;;;;;;:27;;;;;;;;;;;;38081:28;38024:85;38017:92;;37943:174;;;:::o;5595:98::-;5648:7;5675:10;5668:17;;5595:98;:::o;47165:196::-;47307:2;47280:15;:24;47296:7;47280:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;47345:7;47341:2;47325:28;;47334:5;47325:28;;;;;;;;;;;;47165:196;;;:::o;30351:92::-;30407:7;30351:92;:::o;42113:2130::-;42228:35;42266:21;42279:7;42266:12;:21::i;:::-;42228:59;;42326:4;42304:26;;:13;:18;;;:26;;;42300:67;;42339:28;;;;;;;;;;;;;;42300:67;42380:22;42422:4;42406:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;42443:36;42460:4;42466:12;:10;:12::i;:::-;42443:16;:36::i;:::-;42406:73;:126;;;;42520:12;:10;:12::i;:::-;42496:36;;:20;42508:7;42496:11;:20::i;:::-;:36;;;42406:126;42380:153;;42551:17;42546:66;;42577:35;;;;;;;;;;;;;;42546:66;42641:1;42627:16;;:2;:16;;;42623:52;;;42652:23;;;;;;;;;;;;;;42623:52;42688:43;42710:4;42716:2;42720:7;42729:1;42688:21;:43::i;:::-;42796:35;42813:1;42817:7;42826:4;42796:8;:35::i;:::-;43157:1;43127:12;:18;43140:4;43127:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43201:1;43173:12;:16;43186:2;43173:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43219:31;43253:11;:20;43265:7;43253:20;;;;;;;;;;;43219:54;;43304:2;43288:8;:13;;;:18;;;;;;;;;;;;;;;;;;43354:15;43321:8;:23;;;:49;;;;;;;;;;;;;;;;;;43622:19;43654:1;43644:7;:11;43622:33;;43670:31;43704:11;:24;43716:11;43704:24;;;;;;;;;;;43670:58;;43772:1;43747:27;;:8;:13;;;;;;;;;;;;:27;;;43743:384;;;43957:13;;43942:11;:28;43938:174;;44011:4;43995:8;:13;;;:20;;;;;;;;;;;;;;;;;;44064:13;:28;;;44038:8;:23;;;:54;;;;;;;;;;;;;;;;;;43938:174;43743:384;43102:1036;;;44174:7;44170:2;44155:27;;44164:4;44155:27;;;;;;;;;;;;44193:42;44214:4;44220:2;44224:7;44233:1;44193:20;:42::i;:::-;42217:2026;;42113:2130;;;:::o;10833:317::-;10948:6;10923:21;:31;;10915:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11002:12;11020:9;:14;;11042:6;11020:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11001:52;;;11072:7;11064:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;10904:246;10833:317;;:::o;38201:104::-;38270:27;38280:2;38284:8;38270:27;;;;;;;;;;;;:9;:27::i;:::-;38201:104;;:::o;33087:1111::-;33149:21;;:::i;:::-;33183:12;33198:7;33183:22;;33266:4;33247:15;:13;:15::i;:::-;:23;33243:888;;33283:13;;33276:4;:20;33272:859;;;33317:31;33351:11;:17;33363:4;33351:17;;;;;;;;;;;33317:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33392:9;:16;;;33387:729;;33463:1;33437:28;;:9;:14;;;:28;;;33433:101;;33501:9;33494:16;;;;;;33433:101;33836:261;33843:4;33836:261;;;33876:6;;;;;;;;33921:11;:17;33933:4;33921:17;;;;;;;;;;;33909:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33995:1;33969:28;;:9;:14;;;:28;;;33965:109;;34037:9;34030:16;;;;;;33965:109;33836:261;;;33387:729;33298:833;33272:859;33243:888;34159:31;;;;;;;;;;;;;;33087:1111;;;;:::o;8141:191::-;8215:16;8234:6;;;;;;;;;;;8215:25;;8260:8;8251:6;;:17;;;;;;;;;;;;;;;;;;8315:8;8284:40;;8305:8;8284:40;;;;;;;;;;;;8204:128;8141:191;:::o;9572:326::-;9632:4;9889:1;9867:7;:19;;;:23;9860:30;;9572:326;;;:::o;47853:667::-;48016:4;48053:2;48037:36;;;48074:12;:10;:12::i;:::-;48088:4;48094:7;48103:5;48037:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;48033:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48288:1;48271:6;:13;:18;48267:235;;;48317:40;;;;;;;;;;;;;;48267:235;48460:6;48454:13;48445:6;48441:2;48437:15;48430:38;48033:480;48166:45;;;48156:55;;;:6;:55;;;;48149:62;;;47853:667;;;;;;:::o;51116:109::-;51176:13;51209:8;51202:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51116:109;:::o;3157:723::-;3213:13;3443:1;3434:5;:10;3430:53;;;3461:10;;;;;;;;;;;;;;;;;;;;;3430:53;3493:12;3508:5;3493:20;;3524:14;3549:78;3564:1;3556:4;:9;3549:78;;3582:8;;;;;:::i;:::-;;;;3613:2;3605:10;;;;;:::i;:::-;;;3549:78;;;3637:19;3669:6;3659:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3637:39;;3687:154;3703:1;3694:5;:10;3687:154;;3731:1;3721:11;;;;;:::i;:::-;;;3798:2;3790:5;:10;;;;:::i;:::-;3777:2;:24;;;;:::i;:::-;3764:39;;3747:6;3754;3747:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3827:2;3818:11;;;;;:::i;:::-;;;3687:154;;;3865:6;3851:21;;;;;3157:723;;;;:::o;44321:89::-;44381:21;44387:7;44396:5;44381;:21::i;:::-;44321:89;:::o;49168:159::-;;;;;:::o;49986:158::-;;;;;:::o;38678:1749::-;38801:20;38824:13;;38801:36;;38866:1;38852:16;;:2;:16;;;38848:48;;;38877:19;;;;;;;;;;;;;;38848:48;38923:1;38911:8;:13;38907:44;;;38933:18;;;;;;;;;;;;;;38907:44;38964:61;38994:1;38998:2;39002:12;39016:8;38964:21;:61::i;:::-;39337:8;39302:12;:16;39315:2;39302:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39401:8;39361:12;:16;39374:2;39361:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39460:2;39427:11;:25;39439:12;39427:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;39527:15;39477:11;:25;39489:12;39477:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;39560:20;39583:12;39560:35;;39610:11;39639:8;39624:12;:23;39610:37;;39668:15;:2;:13;;;:15::i;:::-;39664:631;;;39704:313;39760:12;39756:2;39735:38;;39752:1;39735:38;;;;;;;;;;;;39801:69;39840:1;39844:2;39848:14;;;;;;39864:5;39801:30;:69::i;:::-;39796:174;;39906:40;;;;;;;;;;;;;;39796:174;40012:3;39997:12;:18;39704:313;;40098:12;40081:13;;:29;40077:43;;40112:8;;;40077:43;39664:631;;;40161:119;40217:14;;;;;;40213:2;40192:40;;40209:1;40192:40;;;;;;;;;;;;40275:3;40260:12;:18;40161:119;;39664:631;40325:12;40309:13;:28;;;;39277:1072;;40359:60;40388:1;40392:2;40396:12;40410:8;40359:20;:60::i;:::-;38790:1637;38678:1749;;;:::o;44639:2408::-;44719:35;44757:21;44770:7;44757:12;:21::i;:::-;44719:59;;44791:12;44806:13;:18;;;44791:33;;44841:13;44837:290;;;44871:22;44913:4;44897:20;;:12;:10;:12::i;:::-;:20;;;:77;;;;44938:36;44955:4;44961:12;:10;:12::i;:::-;44938:16;:36::i;:::-;44897:77;:134;;;;45019:12;:10;:12::i;:::-;44995:36;;:20;45007:7;44995:11;:20::i;:::-;:36;;;44897:134;44871:161;;45054:17;45049:66;;45080:35;;;;;;;;;;;;;;45049:66;44856:271;44837:290;45139:51;45161:4;45175:1;45179:7;45188:1;45139:21;:51::i;:::-;45255:35;45272:1;45276:7;45285:4;45255:8;:35::i;:::-;45586:31;45620:12;:18;45633:4;45620:18;;;;;;;;;;;;;;;45586:52;;45676:1;45653:11;:19;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45720:1;45692:11;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45820:31;45854:11;:20;45866:7;45854:20;;;;;;;;;;;45820:54;;45905:4;45889:8;:13;;;:20;;;;;;;;;;;;;;;;;;45957:15;45924:8;:23;;;:49;;;;;;;;;;;;;;;;;;46006:4;45988:8;:15;;;:22;;;;;;;;;;;;;;;;;;46258:19;46290:1;46280:7;:11;46258:33;;46306:31;46340:11;:24;46352:11;46340:24;;;;;;;;;;;46306:58;;46408:1;46383:27;;:8;:13;;;;;;;;;;;;:27;;;46379:384;;;46593:13;;46578:11;:28;46574:174;;46647:4;46631:8;:13;;;:20;;;;;;;;;;;;;;;;;;46700:13;:28;;;46674:8;:23;;;:54;;;;;;;;;;;;;;;;;;46574:174;46379:384;45561:1213;;;;46818:7;46814:1;46791:35;;46800:4;46791:35;;;;;;;;;;;;46837:50;46858:4;46872:1;46876:7;46885:1;46837:20;:50::i;:::-;47014:12;;:14;;;;;;;;;;;;;44708:2339;;44639:2408;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:118::-;9257:24;9275:5;9257:24;:::i;:::-;9252:3;9245:37;9170:118;;:::o;9294:109::-;9375:21;9390:5;9375:21;:::i;:::-;9370:3;9363:34;9294:109;;:::o;9409:360::-;9495:3;9523:38;9555:5;9523:38;:::i;:::-;9577:70;9640:6;9635:3;9577:70;:::i;:::-;9570:77;;9656:52;9701:6;9696:3;9689:4;9682:5;9678:16;9656:52;:::i;:::-;9733:29;9755:6;9733:29;:::i;:::-;9728:3;9724:39;9717:46;;9499:270;9409:360;;;;:::o;9775:364::-;9863:3;9891:39;9924:5;9891:39;:::i;:::-;9946:71;10010:6;10005:3;9946:71;:::i;:::-;9939:78;;10026:52;10071:6;10066:3;10059:4;10052:5;10048:16;10026:52;:::i;:::-;10103:29;10125:6;10103:29;:::i;:::-;10098:3;10094:39;10087:46;;9867:272;9775:364;;;;:::o;10145:377::-;10251:3;10279:39;10312:5;10279:39;:::i;:::-;10334:89;10416:6;10411:3;10334:89;:::i;:::-;10327:96;;10432:52;10477:6;10472:3;10465:4;10458:5;10454:16;10432:52;:::i;:::-;10509:6;10504:3;10500:16;10493:23;;10255:267;10145:377;;;;:::o;10528:366::-;10670:3;10691:67;10755:2;10750:3;10691:67;:::i;:::-;10684:74;;10767:93;10856:3;10767:93;:::i;:::-;10885:2;10880:3;10876:12;10869:19;;10528:366;;;:::o;10900:::-;11042:3;11063:67;11127:2;11122:3;11063:67;:::i;:::-;11056:74;;11139:93;11228:3;11139:93;:::i;:::-;11257:2;11252:3;11248:12;11241:19;;10900:366;;;:::o;11272:::-;11414:3;11435:67;11499:2;11494:3;11435:67;:::i;:::-;11428:74;;11511:93;11600:3;11511:93;:::i;:::-;11629:2;11624:3;11620:12;11613:19;;11272:366;;;:::o;11644:::-;11786:3;11807:67;11871:2;11866:3;11807:67;:::i;:::-;11800:74;;11883:93;11972:3;11883:93;:::i;:::-;12001:2;11996:3;11992:12;11985:19;;11644:366;;;:::o;12016:::-;12158:3;12179:67;12243:2;12238:3;12179:67;:::i;:::-;12172:74;;12255:93;12344:3;12255:93;:::i;:::-;12373:2;12368:3;12364:12;12357:19;;12016:366;;;:::o;12388:::-;12530:3;12551:67;12615:2;12610:3;12551:67;:::i;:::-;12544:74;;12627:93;12716:3;12627:93;:::i;:::-;12745:2;12740:3;12736:12;12729:19;;12388:366;;;:::o;12760:::-;12902:3;12923:67;12987:2;12982:3;12923:67;:::i;:::-;12916:74;;12999:93;13088:3;12999:93;:::i;:::-;13117:2;13112:3;13108:12;13101:19;;12760:366;;;:::o;13132:398::-;13291:3;13312:83;13393:1;13388:3;13312:83;:::i;:::-;13305:90;;13404:93;13493:3;13404:93;:::i;:::-;13522:1;13517:3;13513:11;13506:18;;13132:398;;;:::o;13536:366::-;13678:3;13699:67;13763:2;13758:3;13699:67;:::i;:::-;13692:74;;13775:93;13864:3;13775:93;:::i;:::-;13893:2;13888:3;13884:12;13877:19;;13536:366;;;:::o;13908:::-;14050:3;14071:67;14135:2;14130:3;14071:67;:::i;:::-;14064:74;;14147:93;14236:3;14147:93;:::i;:::-;14265:2;14260:3;14256:12;14249:19;;13908:366;;;:::o;14280:::-;14422:3;14443:67;14507:2;14502:3;14443:67;:::i;:::-;14436:74;;14519:93;14608:3;14519:93;:::i;:::-;14637:2;14632:3;14628:12;14621:19;;14280:366;;;:::o;14652:118::-;14739:24;14757:5;14739:24;:::i;:::-;14734:3;14727:37;14652:118;;:::o;14776:435::-;14956:3;14978:95;15069:3;15060:6;14978:95;:::i;:::-;14971:102;;15090:95;15181:3;15172:6;15090:95;:::i;:::-;15083:102;;15202:3;15195:10;;14776:435;;;;;:::o;15217:379::-;15401:3;15423:147;15566:3;15423:147;:::i;:::-;15416:154;;15587:3;15580:10;;15217:379;;;:::o;15602:222::-;15695:4;15733:2;15722:9;15718:18;15710:26;;15746:71;15814:1;15803:9;15799:17;15790:6;15746:71;:::i;:::-;15602:222;;;;:::o;15830:640::-;16025:4;16063:3;16052:9;16048:19;16040:27;;16077:71;16145:1;16134:9;16130:17;16121:6;16077:71;:::i;:::-;16158:72;16226:2;16215:9;16211:18;16202:6;16158:72;:::i;:::-;16240;16308:2;16297:9;16293:18;16284:6;16240:72;:::i;:::-;16359:9;16353:4;16349:20;16344:2;16333:9;16329:18;16322:48;16387:76;16458:4;16449:6;16387:76;:::i;:::-;16379:84;;15830:640;;;;;;;:::o;16476:210::-;16563:4;16601:2;16590:9;16586:18;16578:26;;16614:65;16676:1;16665:9;16661:17;16652:6;16614:65;:::i;:::-;16476:210;;;;:::o;16692:313::-;16805:4;16843:2;16832:9;16828:18;16820:26;;16892:9;16886:4;16882:20;16878:1;16867:9;16863:17;16856:47;16920:78;16993:4;16984:6;16920:78;:::i;:::-;16912:86;;16692:313;;;;:::o;17011:419::-;17177:4;17215:2;17204:9;17200:18;17192:26;;17264:9;17258:4;17254:20;17250:1;17239:9;17235:17;17228:47;17292:131;17418:4;17292:131;:::i;:::-;17284:139;;17011:419;;;:::o;17436:::-;17602:4;17640:2;17629:9;17625:18;17617:26;;17689:9;17683:4;17679:20;17675:1;17664:9;17660:17;17653:47;17717:131;17843:4;17717:131;:::i;:::-;17709:139;;17436:419;;;:::o;17861:::-;18027:4;18065:2;18054:9;18050:18;18042:26;;18114:9;18108:4;18104:20;18100:1;18089:9;18085:17;18078:47;18142:131;18268:4;18142:131;:::i;:::-;18134:139;;17861:419;;;:::o;18286:::-;18452:4;18490:2;18479:9;18475:18;18467:26;;18539:9;18533:4;18529:20;18525:1;18514:9;18510:17;18503:47;18567:131;18693:4;18567:131;:::i;:::-;18559:139;;18286:419;;;:::o;18711:::-;18877:4;18915:2;18904:9;18900:18;18892:26;;18964:9;18958:4;18954:20;18950:1;18939:9;18935:17;18928:47;18992:131;19118:4;18992:131;:::i;:::-;18984:139;;18711:419;;;:::o;19136:::-;19302:4;19340:2;19329:9;19325:18;19317:26;;19389:9;19383:4;19379:20;19375:1;19364:9;19360:17;19353:47;19417:131;19543:4;19417:131;:::i;:::-;19409:139;;19136:419;;;:::o;19561:::-;19727:4;19765:2;19754:9;19750:18;19742:26;;19814:9;19808:4;19804:20;19800:1;19789:9;19785:17;19778:47;19842:131;19968:4;19842:131;:::i;:::-;19834:139;;19561:419;;;:::o;19986:::-;20152:4;20190:2;20179:9;20175:18;20167:26;;20239:9;20233:4;20229:20;20225:1;20214:9;20210:17;20203:47;20267:131;20393:4;20267:131;:::i;:::-;20259:139;;19986:419;;;:::o;20411:::-;20577:4;20615:2;20604:9;20600:18;20592:26;;20664:9;20658:4;20654:20;20650:1;20639:9;20635:17;20628:47;20692:131;20818:4;20692:131;:::i;:::-;20684:139;;20411:419;;;:::o;20836:::-;21002:4;21040:2;21029:9;21025:18;21017:26;;21089:9;21083:4;21079:20;21075:1;21064:9;21060:17;21053:47;21117:131;21243:4;21117:131;:::i;:::-;21109:139;;20836:419;;;:::o;21261:222::-;21354:4;21392:2;21381:9;21377:18;21369:26;;21405:71;21473:1;21462:9;21458:17;21449:6;21405:71;:::i;:::-;21261:222;;;;:::o;21489:129::-;21523:6;21550:20;;:::i;:::-;21540:30;;21579:33;21607:4;21599:6;21579:33;:::i;:::-;21489:129;;;:::o;21624:75::-;21657:6;21690:2;21684:9;21674:19;;21624:75;:::o;21705:311::-;21782:4;21872:18;21864:6;21861:30;21858:56;;;21894:18;;:::i;:::-;21858:56;21944:4;21936:6;21932:17;21924:25;;22004:4;21998;21994:15;21986:23;;21705:311;;;:::o;22022:307::-;22083:4;22173:18;22165:6;22162:30;22159:56;;;22195:18;;:::i;:::-;22159:56;22233:29;22255:6;22233:29;:::i;:::-;22225:37;;22317:4;22311;22307:15;22299:23;;22022:307;;;:::o;22335:308::-;22397:4;22487:18;22479:6;22476:30;22473:56;;;22509:18;;:::i;:::-;22473:56;22547:29;22569:6;22547:29;:::i;:::-;22539:37;;22631:4;22625;22621:15;22613:23;;22335:308;;;:::o;22649:98::-;22700:6;22734:5;22728:12;22718:22;;22649:98;;;:::o;22753:99::-;22805:6;22839:5;22833:12;22823:22;;22753:99;;;:::o;22858:168::-;22941:11;22975:6;22970:3;22963:19;23015:4;23010:3;23006:14;22991:29;;22858:168;;;;:::o;23032:147::-;23133:11;23170:3;23155:18;;23032:147;;;;:::o;23185:169::-;23269:11;23303:6;23298:3;23291:19;23343:4;23338:3;23334:14;23319:29;;23185:169;;;;:::o;23360:148::-;23462:11;23499:3;23484:18;;23360:148;;;;:::o;23514:305::-;23554:3;23573:20;23591:1;23573:20;:::i;:::-;23568:25;;23607:20;23625:1;23607:20;:::i;:::-;23602:25;;23761:1;23693:66;23689:74;23686:1;23683:81;23680:107;;;23767:18;;:::i;:::-;23680:107;23811:1;23808;23804:9;23797:16;;23514:305;;;;:::o;23825:185::-;23865:1;23882:20;23900:1;23882:20;:::i;:::-;23877:25;;23916:20;23934:1;23916:20;:::i;:::-;23911:25;;23955:1;23945:35;;23960:18;;:::i;:::-;23945:35;24002:1;23999;23995:9;23990:14;;23825:185;;;;:::o;24016:348::-;24056:7;24079:20;24097:1;24079:20;:::i;:::-;24074:25;;24113:20;24131:1;24113:20;:::i;:::-;24108:25;;24301:1;24233:66;24229:74;24226:1;24223:81;24218:1;24211:9;24204:17;24200:105;24197:131;;;24308:18;;:::i;:::-;24197:131;24356:1;24353;24349:9;24338:20;;24016:348;;;;:::o;24370:191::-;24410:4;24430:20;24448:1;24430:20;:::i;:::-;24425:25;;24464:20;24482:1;24464:20;:::i;:::-;24459:25;;24503:1;24500;24497:8;24494:34;;;24508:18;;:::i;:::-;24494:34;24553:1;24550;24546:9;24538:17;;24370:191;;;;:::o;24567:96::-;24604:7;24633:24;24651:5;24633:24;:::i;:::-;24622:35;;24567:96;;;:::o;24669:90::-;24703:7;24746:5;24739:13;24732:21;24721:32;;24669:90;;;:::o;24765:149::-;24801:7;24841:66;24834:5;24830:78;24819:89;;24765:149;;;:::o;24920:126::-;24957:7;24997:42;24990:5;24986:54;24975:65;;24920:126;;;:::o;25052:77::-;25089:7;25118:5;25107:16;;25052:77;;;:::o;25135:154::-;25219:6;25214:3;25209;25196:30;25281:1;25272:6;25267:3;25263:16;25256:27;25135:154;;;:::o;25295:307::-;25363:1;25373:113;25387:6;25384:1;25381:13;25373:113;;;25472:1;25467:3;25463:11;25457:18;25453:1;25448:3;25444:11;25437:39;25409:2;25406:1;25402:10;25397:15;;25373:113;;;25504:6;25501:1;25498:13;25495:101;;;25584:1;25575:6;25570:3;25566:16;25559:27;25495:101;25344:258;25295:307;;;:::o;25608:320::-;25652:6;25689:1;25683:4;25679:12;25669:22;;25736:1;25730:4;25726:12;25757:18;25747:81;;25813:4;25805:6;25801:17;25791:27;;25747:81;25875:2;25867:6;25864:14;25844:18;25841:38;25838:84;;;25894:18;;:::i;:::-;25838:84;25659:269;25608:320;;;:::o;25934:281::-;26017:27;26039:4;26017:27;:::i;:::-;26009:6;26005:40;26147:6;26135:10;26132:22;26111:18;26099:10;26096:34;26093:62;26090:88;;;26158:18;;:::i;:::-;26090:88;26198:10;26194:2;26187:22;25977:238;25934:281;;:::o;26221:233::-;26260:3;26283:24;26301:5;26283:24;:::i;:::-;26274:33;;26329:66;26322:5;26319:77;26316:103;;;26399:18;;:::i;:::-;26316:103;26446:1;26439:5;26435:13;26428:20;;26221:233;;;:::o;26460:176::-;26492:1;26509:20;26527:1;26509:20;:::i;:::-;26504:25;;26543:20;26561:1;26543:20;:::i;:::-;26538:25;;26582:1;26572:35;;26587:18;;:::i;:::-;26572:35;26628:1;26625;26621:9;26616:14;;26460:176;;;;:::o;26642:180::-;26690:77;26687:1;26680:88;26787:4;26784:1;26777:15;26811:4;26808:1;26801:15;26828:180;26876:77;26873:1;26866:88;26973:4;26970:1;26963:15;26997:4;26994:1;26987:15;27014:180;27062:77;27059:1;27052:88;27159:4;27156:1;27149:15;27183:4;27180:1;27173:15;27200:180;27248:77;27245:1;27238:88;27345:4;27342:1;27335:15;27369:4;27366:1;27359:15;27386:180;27434:77;27431:1;27424:88;27531:4;27528:1;27521:15;27555:4;27552:1;27545:15;27572:117;27681:1;27678;27671:12;27695:117;27804:1;27801;27794:12;27818:117;27927:1;27924;27917:12;27941:117;28050:1;28047;28040:12;28064:117;28173:1;28170;28163:12;28187:102;28228:6;28279:2;28275:7;28270:2;28263:5;28259:14;28255:28;28245:38;;28187:102;;;:::o;28295:225::-;28435:34;28431:1;28423:6;28419:14;28412:58;28504:8;28499:2;28491:6;28487:15;28480:33;28295:225;:::o;28526:170::-;28666:22;28662:1;28654:6;28650:14;28643:46;28526:170;:::o;28702:245::-;28842:34;28838:1;28830:6;28826:14;28819:58;28911:28;28906:2;28898:6;28894:15;28887:53;28702:245;:::o;28953:179::-;29093:31;29089:1;29081:6;29077:14;29070:55;28953:179;:::o;29138:182::-;29278:34;29274:1;29266:6;29262:14;29255:58;29138:182;:::o;29326:169::-;29466:21;29462:1;29454:6;29450:14;29443:45;29326:169;:::o;29501:172::-;29641:24;29637:1;29629:6;29625:14;29618:48;29501:172;:::o;29679:114::-;;:::o;29799:170::-;29939:22;29935:1;29927:6;29923:14;29916:46;29799:170;:::o;29975:181::-;30115:33;30111:1;30103:6;30099:14;30092:57;29975:181;:::o;30162:169::-;30302:21;30298:1;30290:6;30286:14;30279:45;30162:169;:::o;30337:122::-;30410:24;30428:5;30410:24;:::i;:::-;30403:5;30400:35;30390:63;;30449:1;30446;30439:12;30390:63;30337:122;:::o;30465:116::-;30535:21;30550:5;30535:21;:::i;:::-;30528:5;30525:32;30515:60;;30571:1;30568;30561:12;30515:60;30465:116;:::o;30587:120::-;30659:23;30676:5;30659:23;:::i;:::-;30652:5;30649:34;30639:62;;30697:1;30694;30687:12;30639:62;30587:120;:::o;30713:122::-;30786:24;30804:5;30786:24;:::i;:::-;30779:5;30776:35;30766:63;;30825:1;30822;30815:12;30766:63;30713:122;:::o
Swarm Source
ipfs://dcdbe4381577d3749d16fb10ef1b639e116503a4d6251ea4f457e7156a3b23a1
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.