ERC-721
Overview
Max Total Supply
2,500 CH
Holders
417
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
5 CHLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CryptoHearts
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-05-17 */ // File: @openzeppelin/contracts/utils/Context.sol // SPDX-License-Identifier: MIT // 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: @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: erc721a/contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @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, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // 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; } // 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 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 && 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 && !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() && !_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; } 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 { _mint(to, quantity, _data, true); } /** * @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, bytes memory _data, bool safe ) 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 (safe && 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 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 This is 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/CH.sol pragma solidity ^0.8.4; contract CryptoHearts is ERC721A, Ownable{ using Strings for uint256; bytes32 public merkleRoot; string public uriPrefix = ""; string public uriSuffix = ".json"; string public hiddenMetadataUri; //Create mint setters and price uint256 public cost = 0.025 ether; uint256 public freeSupply = 250; uint256 public maxSupply = 2500; uint256 public maxMintAmountPerTx = 5; uint256 public maxFreeMint = 2; uint256 public mintLimit = 25; //Create Setters for status bool public paused = true; bool public revealed = false; //Create constructor contract name and symbol constructor() ERC721A("Crypto Hearts", "CH") { setHiddenMetadataUri("ipfs://QmQRoRAy1WUM4eY9ENcbtaRrDCqh4uaH1pPwzSsf4derUv/hiddengif.json"); } //Mint compliance modifier mintCompliance(uint256 quantity) { require(totalSupply() + quantity <= maxSupply, "Max supply exceeded!"); require(tx.origin == msg.sender,"Contracts forbidden from minting!"); require(numberMinted(msg.sender) + quantity <= mintLimit,"Mint limit exceeded!"); _; } //Set minting functions function freeMint(uint256 quantity) public payable mintCompliance(quantity) { require(!paused, "The contract is paused!"); require(totalSupply() + quantity <= freeSupply,"Not enough free supply!"); require(numberMinted(msg.sender) + quantity <= maxFreeMint,"Free mint limit exceeded!"); _safeMint(msg.sender, quantity); } function devMint(uint256 quantity) external onlyOwner { require(totalSupply() + quantity <= maxSupply, "Max supply exceeded!"); _safeMint(msg.sender, quantity); } function mint(uint256 quantity) public payable mintCompliance(quantity) { require(quantity > 0 && quantity <= maxMintAmountPerTx, "Invalid mint amount!"); require(!paused, "The contract is paused!"); require(msg.value >= cost * quantity, "Insufficient funds!"); _safeMint(msg.sender, quantity); } //View wallet owners tokens function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } ///Hidden metadata unless revealed function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } /////Esential Functions function numberMinted(address owner) public view returns (uint256) { return _numberMinted(owner); } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setMintLimit(uint256 _mintLimit) public onlyOwner { mintLimit = _mintLimit; } function setMaxFreeMint(uint256 _maxFreeMint) public onlyOwner { maxFreeMint = _maxFreeMint; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function setMerkleRoot(bytes32 _merkleRoot) public onlyOwner { merkleRoot = _merkleRoot; } //Withdraw functions function withdraw() public onlyOwner { // This will pay Dev 5% of the initial sale. // ============================================================================= (bool hs, ) = payable(0x0268231782Ed17a6588F193D2498C3A4f3fe5e69).call{value: address (this).balance * 5 / 100}(""); require(hs); // ============================================================================= // This will transfer the remaining contract balance to the owner. // Do not remove this otherwise you will not be able to withdraw the funds. // ============================================================================= (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); // ============================================================================= } //Virtual memory string returned function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"freeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"freeSupply","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":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxFreeMint","type":"uint256"}],"name":"setMaxFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintLimit","type":"uint256"}],"name":"setMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","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":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040819052600060808190526200001b91600a9162000201565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200004a91600b9162000201565b506658d15e17628000600d5560fa600e556109c4600f556005601055600260115560196012556013805461ffff191660011790553480156200008b57600080fd5b506040518060400160405280600d81526020016c43727970746f2048656172747360981b81525060405180604001604052806002815260200161086960f31b8152508160029080519060200190620000e592919062000201565b508051620000fb90600390602084019062000201565b505060008055506200010d3362000137565b620001316040518060800160405280604481526020016200282b6044913962000189565b620002e4565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6008546001600160a01b03163314620001e85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b8051620001fd90600c90602084019062000201565b5050565b8280546200020f90620002a7565b90600052602060002090601f0160209004810192826200023357600085556200027e565b82601f106200024e57805160ff19168380011785556200027e565b828001600101855582156200027e579182015b828111156200027e57825182559160200191906001019062000261565b506200028c92915062000290565b5090565b5b808211156200028c576000815560010162000291565b600181811c90821680620002bc57607f821691505b60208210811415620002de57634e487b7160e01b600052602260045260246000fd5b50919050565b61253780620002f46000396000f3fe6080604052600436106102725760003560e01c806370a082311161014f578063a0712d68116100c1578063c87b56dd1161007a578063c87b56dd146106fb578063d5abeb011461071b578063dc33e68114610731578063e0a8085314610751578063e985e9c514610771578063f2fde38b146107ba57600080fd5b8063a0712d681461065d578063a22cb46514610670578063a45ba8e714610690578063a591252d146106a5578063b071401b146106bb578063b88d4fde146106db57600080fd5b80637ec4a659116101135780637ec4a659146105be5780638da5cb5b146105de57806394354fd0146105fc57806395d89b4114610612578063996517cf146106275780639e6a1d7d1461063d57600080fd5b806370a0823114610536578063715018a614610556578063742a4c9b1461056b5780637c928fe91461058b5780637cb647591461059e57600080fd5b8063375a069a116101e85780634fdd43cb116101ac5780634fdd43cb1461049357806351830227146104b35780635503a0e8146104d25780635c975abb146104e757806362b99ad4146105015780636352211e1461051657600080fd5b8063375a069a146103f15780633ccfd60b1461041157806342842e0e14610426578063438b63001461044657806344a0d68a1461047357600080fd5b806316ba10e01161023a57806316ba10e01461034c57806316c38b3c1461036c57806318160ddd1461038c57806323b872dd146103a557806324a6ab0c146103c55780632eb4a7ab146103db57600080fd5b806301ffc9a71461027757806306fdde03146102ac578063081812fc146102ce578063095ea7b31461030657806313faede614610328575b600080fd5b34801561028357600080fd5b5061029761029236600461210d565b6107da565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102c161082c565b6040516102a391906122fa565b3480156102da57600080fd5b506102ee6102e93660046120f5565b6108be565b6040516001600160a01b0390911681526020016102a3565b34801561031257600080fd5b506103266103213660046120b2565b610902565b005b34801561033457600080fd5b5061033e600d5481565b6040519081526020016102a3565b34801561035857600080fd5b50610326610367366004612145565b610990565b34801561037857600080fd5b506103266103873660046120db565b6109da565b34801561039857600080fd5b506001546000540361033e565b3480156103b157600080fd5b506103266103c0366004611fd5565b610a17565b3480156103d157600080fd5b5061033e600e5481565b3480156103e757600080fd5b5061033e60095481565b3480156103fd57600080fd5b5061032661040c3660046120f5565b610a22565b34801561041d57600080fd5b50610326610a92565b34801561043257600080fd5b50610326610441366004611fd5565b610baa565b34801561045257600080fd5b50610466610461366004611f89565b610bc5565b6040516102a391906122b6565b34801561047f57600080fd5b5061032661048e3660046120f5565b610cc2565b34801561049f57600080fd5b506103266104ae366004612145565b610cf1565b3480156104bf57600080fd5b5060135461029790610100900460ff1681565b3480156104de57600080fd5b506102c1610d2e565b3480156104f357600080fd5b506013546102979060ff1681565b34801561050d57600080fd5b506102c1610dbc565b34801561052257600080fd5b506102ee6105313660046120f5565b610dc9565b34801561054257600080fd5b5061033e610551366004611f89565b610ddb565b34801561056257600080fd5b50610326610e2a565b34801561057757600080fd5b506103266105863660046120f5565b610e60565b6103266105993660046120f5565b610e8f565b3480156105aa57600080fd5b506103266105b93660046120f5565b611069565b3480156105ca57600080fd5b506103266105d9366004612145565b611098565b3480156105ea57600080fd5b506008546001600160a01b03166102ee565b34801561060857600080fd5b5061033e60105481565b34801561061e57600080fd5b506102c16110d5565b34801561063357600080fd5b5061033e60125481565b34801561064957600080fd5b506103266106583660046120f5565b6110e4565b61032661066b3660046120f5565b611113565b34801561067c57600080fd5b5061032661068b366004612089565b6112bd565b34801561069c57600080fd5b506102c1611353565b3480156106b157600080fd5b5061033e60115481565b3480156106c757600080fd5b506103266106d63660046120f5565b611360565b3480156106e757600080fd5b506103266106f6366004612010565b61138f565b34801561070757600080fd5b506102c16107163660046120f5565b6113e0565b34801561072757600080fd5b5061033e600f5481565b34801561073d57600080fd5b5061033e61074c366004611f89565b61154f565b34801561075d57600080fd5b5061032661076c3660046120db565b61157e565b34801561077d57600080fd5b5061029761078c366004611fa3565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156107c657600080fd5b506103266107d5366004611f89565b6115c2565b60006001600160e01b031982166380ac58cd60e01b148061080b57506001600160e01b03198216635b5e139f60e01b145b8061082657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461083b9061243f565b80601f01602080910402602001604051908101604052809291908181526020018280546108679061243f565b80156108b45780601f10610889576101008083540402835291602001916108b4565b820191906000526020600020905b81548152906001019060200180831161089757829003601f168201915b5050505050905090565b60006108c98261165a565b6108e6576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061090d82610dc9565b9050806001600160a01b0316836001600160a01b031614156109425760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906109625750610960813361078c565b155b15610980576040516367d9dca160e11b815260040160405180910390fd5b61098b838383611685565b505050565b6008546001600160a01b031633146109c35760405162461bcd60e51b81526004016109ba9061234e565b60405180910390fd5b80516109d690600b906020840190611e4e565b5050565b6008546001600160a01b03163314610a045760405162461bcd60e51b81526004016109ba9061234e565b6013805460ff1916911515919091179055565b61098b8383836116e1565b6008546001600160a01b03163314610a4c5760405162461bcd60e51b81526004016109ba9061234e565b600f5481610a5d6001546000540390565b610a6791906123b1565b1115610a855760405162461bcd60e51b81526004016109ba90612383565b610a8f33826118d1565b50565b6008546001600160a01b03163314610abc5760405162461bcd60e51b81526004016109ba9061234e565b6000730268231782ed17a6588f193d2498c3a4f3fe5e696064610ae04760056123dd565b610aea91906123c9565b604051600081818185875af1925050503d8060008114610b26576040519150601f19603f3d011682016040523d82523d6000602084013e610b2b565b606091505b5050905080610b3957600080fd5b6000610b4d6008546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610b97576040519150601f19603f3d011682016040523d82523d6000602084013e610b9c565b606091505b50509050806109d657600080fd5b61098b8383836040518060200160405280600081525061138f565b60606000610bd283610ddb565b905060008167ffffffffffffffff811115610bfd57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610c26578160200160208202803683370190505b509050600160005b8381108015610c3f5750600f548211155b15610cb8576000610c4f83610dc9565b9050866001600160a01b0316816001600160a01b03161415610ca55782848381518110610c8c57634e487b7160e01b600052603260045260246000fd5b602090810291909101015281610ca18161247a565b9250505b82610caf8161247a565b93505050610c2e565b5090949350505050565b6008546001600160a01b03163314610cec5760405162461bcd60e51b81526004016109ba9061234e565b600d55565b6008546001600160a01b03163314610d1b5760405162461bcd60e51b81526004016109ba9061234e565b80516109d690600c906020840190611e4e565b600b8054610d3b9061243f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d679061243f565b8015610db45780601f10610d8957610100808354040283529160200191610db4565b820191906000526020600020905b815481529060010190602001808311610d9757829003601f168201915b505050505081565b600a8054610d3b9061243f565b6000610dd4826118eb565b5192915050565b60006001600160a01b038216610e04576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610e545760405162461bcd60e51b81526004016109ba9061234e565b610e5e6000611a07565b565b6008546001600160a01b03163314610e8a5760405162461bcd60e51b81526004016109ba9061234e565b601155565b80600f5481610ea16001546000540390565b610eab91906123b1565b1115610ec95760405162461bcd60e51b81526004016109ba90612383565b323314610ee85760405162461bcd60e51b81526004016109ba9061230d565b60125481610ef53361154f565b610eff91906123b1565b1115610f445760405162461bcd60e51b81526020600482015260146024820152734d696e74206c696d69742065786365656465642160601b60448201526064016109ba565b60135460ff1615610f915760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b60448201526064016109ba565b600e5482610fa26001546000540390565b610fac91906123b1565b1115610ffa5760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f756768206672656520737570706c792100000000000000000060448201526064016109ba565b601154826110073361154f565b61101191906123b1565b111561105f5760405162461bcd60e51b815260206004820152601960248201527f46726565206d696e74206c696d6974206578636565646564210000000000000060448201526064016109ba565b6109d633836118d1565b6008546001600160a01b031633146110935760405162461bcd60e51b81526004016109ba9061234e565b600955565b6008546001600160a01b031633146110c25760405162461bcd60e51b81526004016109ba9061234e565b80516109d690600a906020840190611e4e565b60606003805461083b9061243f565b6008546001600160a01b0316331461110e5760405162461bcd60e51b81526004016109ba9061234e565b601255565b80600f54816111256001546000540390565b61112f91906123b1565b111561114d5760405162461bcd60e51b81526004016109ba90612383565b32331461116c5760405162461bcd60e51b81526004016109ba9061230d565b601254816111793361154f565b61118391906123b1565b11156111c85760405162461bcd60e51b81526020600482015260146024820152734d696e74206c696d69742065786365656465642160601b60448201526064016109ba565b6000821180156111da57506010548211155b61121d5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b60448201526064016109ba565b60135460ff161561126a5760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b60448201526064016109ba565b81600d5461127891906123dd565b34101561105f5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016109ba565b6001600160a01b0382163314156112e75760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600c8054610d3b9061243f565b6008546001600160a01b0316331461138a5760405162461bcd60e51b81526004016109ba9061234e565b601055565b61139a8484846116e1565b6001600160a01b0383163b151580156113bc57506113ba84848484611a59565b155b156113da576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60606113eb8261165a565b61144f5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016109ba565b601354610100900460ff166114f057600c805461146b9061243f565b80601f01602080910402602001604051908101604052809291908181526020018280546114979061243f565b80156114e45780601f106114b9576101008083540402835291602001916114e4565b820191906000526020600020905b8154815290600101906020018083116114c757829003601f168201915b50505050509050919050565b60006114fa611b51565b9050600081511161151a5760405180602001604052806000815250611548565b8061152484611b60565b600b604051602001611538939291906121b7565b6040516020818303038152906040525b9392505050565b6001600160a01b038116600090815260056020526040812054600160401b900467ffffffffffffffff16610826565b6008546001600160a01b031633146115a85760405162461bcd60e51b81526004016109ba9061234e565b601380549115156101000261ff0019909216919091179055565b6008546001600160a01b031633146115ec5760405162461bcd60e51b81526004016109ba9061234e565b6001600160a01b0381166116515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ba565b610a8f81611a07565b6000805482108015610826575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006116ec826118eb565b9050836001600160a01b031681600001516001600160a01b0316146117235760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b03861614806117415750611741853361078c565b8061175c575033611751846108be565b6001600160a01b0316145b90508061177c57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0384166117a357604051633a954ecd60e21b815260040160405180910390fd5b6117af60008487611685565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116611885576000548214611885578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b6109d6828260405180602001604052806000815250611c7a565b6040805160608101825260008082526020820181905291810191909152816000548110156119ee57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161515918101829052906119ec5780516001600160a01b031615611982579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff16151592810192909252156119e7579392505050565b611982565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611a8e903390899088908890600401612279565b602060405180830381600087803b158015611aa857600080fd5b505af1925050508015611ad8575060408051601f3d908101601f19168201909252611ad591810190612129565b60015b611b33573d808015611b06576040519150601f19603f3d011682016040523d82523d6000602084013e611b0b565b606091505b508051611b2b576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600a805461083b9061243f565b606081611b845750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611bae5780611b988161247a565b9150611ba79050600a836123c9565b9150611b88565b60008167ffffffffffffffff811115611bd757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c01576020820181803683370190505b5090505b8415611b4957611c166001836123fc565b9150611c23600a86612495565b611c2e9060306123b1565b60f81b818381518110611c5157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611c73600a866123c9565b9450611c05565b61098b83838360016000546001600160a01b038516611cab57604051622e076360e81b815260040160405180910390fd5b83611cc95760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c018116918217600160401b67ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b429092169190910217905580808501838015611d7657506001600160a01b0387163b15155b15611dff575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611dc76000888480600101955088611a59565b611de4576040516368d2bf6b60e11b815260040160405180910390fd5b80821415611d7c578260005414611dfa57600080fd5b611e45565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821415611e00575b506000556118ca565b828054611e5a9061243f565b90600052602060002090601f016020900481019282611e7c5760008555611ec2565b82601f10611e9557805160ff1916838001178555611ec2565b82800160010185558215611ec2579182015b82811115611ec2578251825591602001919060010190611ea7565b50611ece929150611ed2565b5090565b5b80821115611ece5760008155600101611ed3565b600067ffffffffffffffff80841115611f0257611f026124d5565b604051601f8501601f19908116603f01168101908282118183101715611f2a57611f2a6124d5565b81604052809350858152868686011115611f4357600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611f7457600080fd5b919050565b80358015158114611f7457600080fd5b600060208284031215611f9a578081fd5b61154882611f5d565b60008060408385031215611fb5578081fd5b611fbe83611f5d565b9150611fcc60208401611f5d565b90509250929050565b600080600060608486031215611fe9578081fd5b611ff284611f5d565b925061200060208501611f5d565b9150604084013590509250925092565b60008060008060808587031215612025578081fd5b61202e85611f5d565b935061203c60208601611f5d565b925060408501359150606085013567ffffffffffffffff81111561205e578182fd5b8501601f8101871361206e578182fd5b61207d87823560208401611ee7565b91505092959194509250565b6000806040838503121561209b578182fd5b6120a483611f5d565b9150611fcc60208401611f79565b600080604083850312156120c4578182fd5b6120cd83611f5d565b946020939093013593505050565b6000602082840312156120ec578081fd5b61154882611f79565b600060208284031215612106578081fd5b5035919050565b60006020828403121561211e578081fd5b8135611548816124eb565b60006020828403121561213a578081fd5b8151611548816124eb565b600060208284031215612156578081fd5b813567ffffffffffffffff81111561216c578182fd5b8201601f8101841361217c578182fd5b611b4984823560208401611ee7565b600081518084526121a3816020860160208601612413565b601f01601f19169290920160200192915050565b6000845160206121ca8285838a01612413565b8551918401916121dd8184848a01612413565b85549201918390600181811c90808316806121f957607f831692505b85831081141561221757634e487b7160e01b88526022600452602488fd5b80801561222b576001811461223c57612268565b60ff19851688528388019550612268565b60008b815260209020895b858110156122605781548a820152908401908801612247565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122ac9083018461218b565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156122ee578351835292840192918401916001016122d2565b50909695505050505050565b602081526000611548602083018461218b565b60208082526021908201527f436f6e74726163747320666f7262696464656e2066726f6d206d696e74696e676040820152602160f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b600082198211156123c4576123c46124a9565b500190565b6000826123d8576123d86124bf565b500490565b60008160001904831182151516156123f7576123f76124a9565b500290565b60008282101561240e5761240e6124a9565b500390565b60005b8381101561242e578181015183820152602001612416565b838111156113da5750506000910152565b600181811c9082168061245357607f821691505b6020821081141561247457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561248e5761248e6124a9565b5060010190565b6000826124a4576124a46124bf565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610a8f57600080fdfea2646970667358221220a6ad1c23f1412ed19cf5dd1de8edebc97792d9c87363333892555e9164d0b1d564736f6c63430008040033697066733a2f2f516d51526f5241793157554d34655939454e6362746152724443716834756148317050777a5373663464657255762f68696464656e6769662e6a736f6e
Deployed Bytecode
0x6080604052600436106102725760003560e01c806370a082311161014f578063a0712d68116100c1578063c87b56dd1161007a578063c87b56dd146106fb578063d5abeb011461071b578063dc33e68114610731578063e0a8085314610751578063e985e9c514610771578063f2fde38b146107ba57600080fd5b8063a0712d681461065d578063a22cb46514610670578063a45ba8e714610690578063a591252d146106a5578063b071401b146106bb578063b88d4fde146106db57600080fd5b80637ec4a659116101135780637ec4a659146105be5780638da5cb5b146105de57806394354fd0146105fc57806395d89b4114610612578063996517cf146106275780639e6a1d7d1461063d57600080fd5b806370a0823114610536578063715018a614610556578063742a4c9b1461056b5780637c928fe91461058b5780637cb647591461059e57600080fd5b8063375a069a116101e85780634fdd43cb116101ac5780634fdd43cb1461049357806351830227146104b35780635503a0e8146104d25780635c975abb146104e757806362b99ad4146105015780636352211e1461051657600080fd5b8063375a069a146103f15780633ccfd60b1461041157806342842e0e14610426578063438b63001461044657806344a0d68a1461047357600080fd5b806316ba10e01161023a57806316ba10e01461034c57806316c38b3c1461036c57806318160ddd1461038c57806323b872dd146103a557806324a6ab0c146103c55780632eb4a7ab146103db57600080fd5b806301ffc9a71461027757806306fdde03146102ac578063081812fc146102ce578063095ea7b31461030657806313faede614610328575b600080fd5b34801561028357600080fd5b5061029761029236600461210d565b6107da565b60405190151581526020015b60405180910390f35b3480156102b857600080fd5b506102c161082c565b6040516102a391906122fa565b3480156102da57600080fd5b506102ee6102e93660046120f5565b6108be565b6040516001600160a01b0390911681526020016102a3565b34801561031257600080fd5b506103266103213660046120b2565b610902565b005b34801561033457600080fd5b5061033e600d5481565b6040519081526020016102a3565b34801561035857600080fd5b50610326610367366004612145565b610990565b34801561037857600080fd5b506103266103873660046120db565b6109da565b34801561039857600080fd5b506001546000540361033e565b3480156103b157600080fd5b506103266103c0366004611fd5565b610a17565b3480156103d157600080fd5b5061033e600e5481565b3480156103e757600080fd5b5061033e60095481565b3480156103fd57600080fd5b5061032661040c3660046120f5565b610a22565b34801561041d57600080fd5b50610326610a92565b34801561043257600080fd5b50610326610441366004611fd5565b610baa565b34801561045257600080fd5b50610466610461366004611f89565b610bc5565b6040516102a391906122b6565b34801561047f57600080fd5b5061032661048e3660046120f5565b610cc2565b34801561049f57600080fd5b506103266104ae366004612145565b610cf1565b3480156104bf57600080fd5b5060135461029790610100900460ff1681565b3480156104de57600080fd5b506102c1610d2e565b3480156104f357600080fd5b506013546102979060ff1681565b34801561050d57600080fd5b506102c1610dbc565b34801561052257600080fd5b506102ee6105313660046120f5565b610dc9565b34801561054257600080fd5b5061033e610551366004611f89565b610ddb565b34801561056257600080fd5b50610326610e2a565b34801561057757600080fd5b506103266105863660046120f5565b610e60565b6103266105993660046120f5565b610e8f565b3480156105aa57600080fd5b506103266105b93660046120f5565b611069565b3480156105ca57600080fd5b506103266105d9366004612145565b611098565b3480156105ea57600080fd5b506008546001600160a01b03166102ee565b34801561060857600080fd5b5061033e60105481565b34801561061e57600080fd5b506102c16110d5565b34801561063357600080fd5b5061033e60125481565b34801561064957600080fd5b506103266106583660046120f5565b6110e4565b61032661066b3660046120f5565b611113565b34801561067c57600080fd5b5061032661068b366004612089565b6112bd565b34801561069c57600080fd5b506102c1611353565b3480156106b157600080fd5b5061033e60115481565b3480156106c757600080fd5b506103266106d63660046120f5565b611360565b3480156106e757600080fd5b506103266106f6366004612010565b61138f565b34801561070757600080fd5b506102c16107163660046120f5565b6113e0565b34801561072757600080fd5b5061033e600f5481565b34801561073d57600080fd5b5061033e61074c366004611f89565b61154f565b34801561075d57600080fd5b5061032661076c3660046120db565b61157e565b34801561077d57600080fd5b5061029761078c366004611fa3565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156107c657600080fd5b506103266107d5366004611f89565b6115c2565b60006001600160e01b031982166380ac58cd60e01b148061080b57506001600160e01b03198216635b5e139f60e01b145b8061082657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461083b9061243f565b80601f01602080910402602001604051908101604052809291908181526020018280546108679061243f565b80156108b45780601f10610889576101008083540402835291602001916108b4565b820191906000526020600020905b81548152906001019060200180831161089757829003601f168201915b5050505050905090565b60006108c98261165a565b6108e6576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061090d82610dc9565b9050806001600160a01b0316836001600160a01b031614156109425760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216148015906109625750610960813361078c565b155b15610980576040516367d9dca160e11b815260040160405180910390fd5b61098b838383611685565b505050565b6008546001600160a01b031633146109c35760405162461bcd60e51b81526004016109ba9061234e565b60405180910390fd5b80516109d690600b906020840190611e4e565b5050565b6008546001600160a01b03163314610a045760405162461bcd60e51b81526004016109ba9061234e565b6013805460ff1916911515919091179055565b61098b8383836116e1565b6008546001600160a01b03163314610a4c5760405162461bcd60e51b81526004016109ba9061234e565b600f5481610a5d6001546000540390565b610a6791906123b1565b1115610a855760405162461bcd60e51b81526004016109ba90612383565b610a8f33826118d1565b50565b6008546001600160a01b03163314610abc5760405162461bcd60e51b81526004016109ba9061234e565b6000730268231782ed17a6588f193d2498c3a4f3fe5e696064610ae04760056123dd565b610aea91906123c9565b604051600081818185875af1925050503d8060008114610b26576040519150601f19603f3d011682016040523d82523d6000602084013e610b2b565b606091505b5050905080610b3957600080fd5b6000610b4d6008546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610b97576040519150601f19603f3d011682016040523d82523d6000602084013e610b9c565b606091505b50509050806109d657600080fd5b61098b8383836040518060200160405280600081525061138f565b60606000610bd283610ddb565b905060008167ffffffffffffffff811115610bfd57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610c26578160200160208202803683370190505b509050600160005b8381108015610c3f5750600f548211155b15610cb8576000610c4f83610dc9565b9050866001600160a01b0316816001600160a01b03161415610ca55782848381518110610c8c57634e487b7160e01b600052603260045260246000fd5b602090810291909101015281610ca18161247a565b9250505b82610caf8161247a565b93505050610c2e565b5090949350505050565b6008546001600160a01b03163314610cec5760405162461bcd60e51b81526004016109ba9061234e565b600d55565b6008546001600160a01b03163314610d1b5760405162461bcd60e51b81526004016109ba9061234e565b80516109d690600c906020840190611e4e565b600b8054610d3b9061243f565b80601f0160208091040260200160405190810160405280929190818152602001828054610d679061243f565b8015610db45780601f10610d8957610100808354040283529160200191610db4565b820191906000526020600020905b815481529060010190602001808311610d9757829003601f168201915b505050505081565b600a8054610d3b9061243f565b6000610dd4826118eb565b5192915050565b60006001600160a01b038216610e04576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610e545760405162461bcd60e51b81526004016109ba9061234e565b610e5e6000611a07565b565b6008546001600160a01b03163314610e8a5760405162461bcd60e51b81526004016109ba9061234e565b601155565b80600f5481610ea16001546000540390565b610eab91906123b1565b1115610ec95760405162461bcd60e51b81526004016109ba90612383565b323314610ee85760405162461bcd60e51b81526004016109ba9061230d565b60125481610ef53361154f565b610eff91906123b1565b1115610f445760405162461bcd60e51b81526020600482015260146024820152734d696e74206c696d69742065786365656465642160601b60448201526064016109ba565b60135460ff1615610f915760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b60448201526064016109ba565b600e5482610fa26001546000540390565b610fac91906123b1565b1115610ffa5760405162461bcd60e51b815260206004820152601760248201527f4e6f7420656e6f756768206672656520737570706c792100000000000000000060448201526064016109ba565b601154826110073361154f565b61101191906123b1565b111561105f5760405162461bcd60e51b815260206004820152601960248201527f46726565206d696e74206c696d6974206578636565646564210000000000000060448201526064016109ba565b6109d633836118d1565b6008546001600160a01b031633146110935760405162461bcd60e51b81526004016109ba9061234e565b600955565b6008546001600160a01b031633146110c25760405162461bcd60e51b81526004016109ba9061234e565b80516109d690600a906020840190611e4e565b60606003805461083b9061243f565b6008546001600160a01b0316331461110e5760405162461bcd60e51b81526004016109ba9061234e565b601255565b80600f54816111256001546000540390565b61112f91906123b1565b111561114d5760405162461bcd60e51b81526004016109ba90612383565b32331461116c5760405162461bcd60e51b81526004016109ba9061230d565b601254816111793361154f565b61118391906123b1565b11156111c85760405162461bcd60e51b81526020600482015260146024820152734d696e74206c696d69742065786365656465642160601b60448201526064016109ba565b6000821180156111da57506010548211155b61121d5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e7420616d6f756e742160601b60448201526064016109ba565b60135460ff161561126a5760405162461bcd60e51b815260206004820152601760248201527654686520636f6e7472616374206973207061757365642160481b60448201526064016109ba565b81600d5461127891906123dd565b34101561105f5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016109ba565b6001600160a01b0382163314156112e75760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600c8054610d3b9061243f565b6008546001600160a01b0316331461138a5760405162461bcd60e51b81526004016109ba9061234e565b601055565b61139a8484846116e1565b6001600160a01b0383163b151580156113bc57506113ba84848484611a59565b155b156113da576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60606113eb8261165a565b61144f5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016109ba565b601354610100900460ff166114f057600c805461146b9061243f565b80601f01602080910402602001604051908101604052809291908181526020018280546114979061243f565b80156114e45780601f106114b9576101008083540402835291602001916114e4565b820191906000526020600020905b8154815290600101906020018083116114c757829003601f168201915b50505050509050919050565b60006114fa611b51565b9050600081511161151a5760405180602001604052806000815250611548565b8061152484611b60565b600b604051602001611538939291906121b7565b6040516020818303038152906040525b9392505050565b6001600160a01b038116600090815260056020526040812054600160401b900467ffffffffffffffff16610826565b6008546001600160a01b031633146115a85760405162461bcd60e51b81526004016109ba9061234e565b601380549115156101000261ff0019909216919091179055565b6008546001600160a01b031633146115ec5760405162461bcd60e51b81526004016109ba9061234e565b6001600160a01b0381166116515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016109ba565b610a8f81611a07565b6000805482108015610826575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006116ec826118eb565b9050836001600160a01b031681600001516001600160a01b0316146117235760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b03861614806117415750611741853361078c565b8061175c575033611751846108be565b6001600160a01b0316145b90508061177c57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0384166117a357604051633a954ecd60e21b815260040160405180910390fd5b6117af60008487611685565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b42909216919091021783558701808452922080549193909116611885576000548214611885578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b6109d6828260405180602001604052806000815250611c7a565b6040805160608101825260008082526020820181905291810191909152816000548110156119ee57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff161515918101829052906119ec5780516001600160a01b031615611982579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff16151592810192909252156119e7579392505050565b611982565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290611a8e903390899088908890600401612279565b602060405180830381600087803b158015611aa857600080fd5b505af1925050508015611ad8575060408051601f3d908101601f19168201909252611ad591810190612129565b60015b611b33573d808015611b06576040519150601f19603f3d011682016040523d82523d6000602084013e611b0b565b606091505b508051611b2b576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600a805461083b9061243f565b606081611b845750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611bae5780611b988161247a565b9150611ba79050600a836123c9565b9150611b88565b60008167ffffffffffffffff811115611bd757634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611c01576020820181803683370190505b5090505b8415611b4957611c166001836123fc565b9150611c23600a86612495565b611c2e9060306123b1565b60f81b818381518110611c5157634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611c73600a866123c9565b9450611c05565b61098b83838360016000546001600160a01b038516611cab57604051622e076360e81b815260040160405180910390fd5b83611cc95760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038516600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168c018116918217600160401b67ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b429092169190910217905580808501838015611d7657506001600160a01b0387163b15155b15611dff575b60405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611dc76000888480600101955088611a59565b611de4576040516368d2bf6b60e11b815260040160405180910390fd5b80821415611d7c578260005414611dfa57600080fd5b611e45565b5b6040516001830192906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a480821415611e00575b506000556118ca565b828054611e5a9061243f565b90600052602060002090601f016020900481019282611e7c5760008555611ec2565b82601f10611e9557805160ff1916838001178555611ec2565b82800160010185558215611ec2579182015b82811115611ec2578251825591602001919060010190611ea7565b50611ece929150611ed2565b5090565b5b80821115611ece5760008155600101611ed3565b600067ffffffffffffffff80841115611f0257611f026124d5565b604051601f8501601f19908116603f01168101908282118183101715611f2a57611f2a6124d5565b81604052809350858152868686011115611f4357600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611f7457600080fd5b919050565b80358015158114611f7457600080fd5b600060208284031215611f9a578081fd5b61154882611f5d565b60008060408385031215611fb5578081fd5b611fbe83611f5d565b9150611fcc60208401611f5d565b90509250929050565b600080600060608486031215611fe9578081fd5b611ff284611f5d565b925061200060208501611f5d565b9150604084013590509250925092565b60008060008060808587031215612025578081fd5b61202e85611f5d565b935061203c60208601611f5d565b925060408501359150606085013567ffffffffffffffff81111561205e578182fd5b8501601f8101871361206e578182fd5b61207d87823560208401611ee7565b91505092959194509250565b6000806040838503121561209b578182fd5b6120a483611f5d565b9150611fcc60208401611f79565b600080604083850312156120c4578182fd5b6120cd83611f5d565b946020939093013593505050565b6000602082840312156120ec578081fd5b61154882611f79565b600060208284031215612106578081fd5b5035919050565b60006020828403121561211e578081fd5b8135611548816124eb565b60006020828403121561213a578081fd5b8151611548816124eb565b600060208284031215612156578081fd5b813567ffffffffffffffff81111561216c578182fd5b8201601f8101841361217c578182fd5b611b4984823560208401611ee7565b600081518084526121a3816020860160208601612413565b601f01601f19169290920160200192915050565b6000845160206121ca8285838a01612413565b8551918401916121dd8184848a01612413565b85549201918390600181811c90808316806121f957607f831692505b85831081141561221757634e487b7160e01b88526022600452602488fd5b80801561222b576001811461223c57612268565b60ff19851688528388019550612268565b60008b815260209020895b858110156122605781548a820152908401908801612247565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122ac9083018461218b565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156122ee578351835292840192918401916001016122d2565b50909695505050505050565b602081526000611548602083018461218b565b60208082526021908201527f436f6e74726163747320666f7262696464656e2066726f6d206d696e74696e676040820152602160f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152734d617820737570706c792065786365656465642160601b604082015260600190565b600082198211156123c4576123c46124a9565b500190565b6000826123d8576123d86124bf565b500490565b60008160001904831182151516156123f7576123f76124a9565b500290565b60008282101561240e5761240e6124a9565b500390565b60005b8381101561242e578181015183820152602001612416565b838111156113da5750506000910152565b600181811c9082168061245357607f821691505b6020821081141561247457634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561248e5761248e6124a9565b5060010190565b6000826124a4576124a46124bf565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b031981168114610a8f57600080fdfea2646970667358221220a6ad1c23f1412ed19cf5dd1de8edebc97792d9c87363333892555e9164d0b1d564736f6c63430008040033
Deployed Bytecode Sourcemap
44850:5420:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27041:305;;;;;;;;;;-1:-1:-1;27041:305:0;;;;;:::i;:::-;;:::i;:::-;;;8159:14:1;;8152:22;8134:41;;8122:2;8107:18;27041:305:0;;;;;;;;30154:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;31657:204::-;;;;;;;;;;-1:-1:-1;31657:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6817:32:1;;;6799:51;;6787:2;6772:18;31657:204:0;6754:102:1;31220:371:0;;;;;;;;;;-1:-1:-1;31220:371:0;;;;;:::i;:::-;;:::i;:::-;;45119:33;;;;;;;;;;;;;;;;;;;8332:25:1;;;8320:2;8305:18;45119:33:0;8287:76:1;48979:100:0;;;;;;;;;;-1:-1:-1;48979:100:0;;;;;:::i;:::-;;:::i;49083:77::-;;;;;;;;;;-1:-1:-1;49083:77:0;;;;;:::i;:::-;;:::i;26290:303::-;;;;;;;;;;-1:-1:-1;26544:12:0;;26334:7;26528:13;:28;26290:303;;32522:170;;;;;;;;;;-1:-1:-1;32522:170:0;;;;;:::i;:::-;;:::i;45159:31::-;;;;;;;;;;;;;;;;44934:25;;;;;;;;;;;;;;;;46360:181;;;;;;;;;;-1:-1:-1;46360:181:0;;;;;:::i;:::-;;:::i;49294:827::-;;;;;;;;;;;;;:::i;32763:185::-;;;;;;;;;;-1:-1:-1;32763:185:0;;;;;:::i;:::-;;:::i;46909:635::-;;;;;;;;;;-1:-1:-1;46909:635:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;48319:74::-;;;;;;;;;;-1:-1:-1;48319:74:0;;;;;:::i;:::-;;:::i;48737:132::-;;;;;;;;;;-1:-1:-1;48737:132:0;;;;;:::i;:::-;;:::i;45417:28::-;;;;;;;;;;-1:-1:-1;45417:28:0;;;;;;;;;;;45003:33;;;;;;;;;;;;;:::i;45385:25::-;;;;;;;;;;-1:-1:-1;45385:25:0;;;;;;;;44968:28;;;;;;;;;;;;;:::i;29962:125::-;;;;;;;;;;-1:-1:-1;29962:125:0;;;;;:::i;:::-;;:::i;27410:206::-;;;;;;;;;;-1:-1:-1;27410:206:0;;;;;:::i;:::-;;:::i;2637:103::-;;;;;;;;;;;;;:::i;48629:102::-;;;;;;;;;;-1:-1:-1;48629:102:0;;;;;:::i;:::-;;:::i;46004:350::-;;;;;;:::i;:::-;;:::i;49166:98::-;;;;;;;;;;-1:-1:-1;49166:98:0;;;;;:::i;:::-;;:::i;48875:100::-;;;;;;;;;;-1:-1:-1;48875:100:0;;;;;:::i;:::-;;:::i;1986:87::-;;;;;;;;;;-1:-1:-1;2059:6:0;;-1:-1:-1;;;;;2059:6:0;1986:87;;45235:37;;;;;;;;;;;;;;;;30323:104;;;;;;;;;;;;;:::i;45316:29::-;;;;;;;;;;;;;;;;48531:94;;;;;;;;;;-1:-1:-1;48531:94:0;;;;;:::i;:::-;;:::i;46547:327::-;;;;;;:::i;:::-;;:::i;31933:287::-;;;;;;;;;;-1:-1:-1;31933:287:0;;;;;:::i;:::-;;:::i;45043:31::-;;;;;;;;;;;;;:::i;45279:30::-;;;;;;;;;;;;;;;;48397:130;;;;;;;;;;-1:-1:-1;48397:130:0;;;;;:::i;:::-;;:::i;33019:369::-;;;;;;;;;;-1:-1:-1;33019:369:0;;;;;:::i;:::-;;:::i;47586:496::-;;;;;;;;;;-1:-1:-1;47586:496:0;;;;;:::i;:::-;;:::i;45197:31::-;;;;;;;;;;;;;;;;48119:107;;;;;;;;;;-1:-1:-1;48119:107:0;;;;;:::i;:::-;;:::i;48232:81::-;;;;;;;;;;-1:-1:-1;48232:81:0;;;;;:::i;:::-;;:::i;32291:164::-;;;;;;;;;;-1:-1:-1;32291:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;32412:25:0;;;32388:4;32412:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;32291:164;2895:201;;;;;;;;;;-1:-1:-1;2895:201:0;;;;;:::i;:::-;;:::i;27041:305::-;27143:4;-1:-1:-1;;;;;;27180:40:0;;-1:-1:-1;;;27180:40:0;;:105;;-1:-1:-1;;;;;;;27237:48:0;;-1:-1:-1;;;27237:48:0;27180:105;:158;;;-1:-1:-1;;;;;;;;;;14902:40:0;;;27302:36;27160:178;27041:305;-1:-1:-1;;27041:305:0:o;30154:100::-;30208:13;30241:5;30234:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30154:100;:::o;31657:204::-;31725:7;31750:16;31758:7;31750;:16::i;:::-;31745:64;;31775:34;;-1:-1:-1;;;31775:34:0;;;;;;;;;;;31745:64;-1:-1:-1;31829:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;31829:24:0;;31657:204::o;31220:371::-;31293:13;31309:24;31325:7;31309:15;:24::i;:::-;31293:40;;31354:5;-1:-1:-1;;;;;31348:11:0;:2;-1:-1:-1;;;;;31348:11:0;;31344:48;;;31368:24;;-1:-1:-1;;;31368:24:0;;;;;;;;;;;31344:48;790:10;-1:-1:-1;;;;;31409:21:0;;;;;;:63;;-1:-1:-1;31435:37:0;31452:5;790:10;32291:164;:::i;31435:37::-;31434:38;31409:63;31405:138;;;31496:35;;-1:-1:-1;;;31496:35:0;;;;;;;;;;;31405:138;31555:28;31564:2;31568:7;31577:5;31555:8;:28::i;:::-;31220:371;;;:::o;48979:100::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;;;;;;;;;49051:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;48979:100:::0;:::o;49083:77::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;49139:6:::1;:15:::0;;-1:-1:-1;;49139:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;49083:77::o;32522:170::-;32656:28;32666:4;32672:2;32676:7;32656:9;:28::i;46360:181::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;46457:9:::1;;46445:8;46429:13;26544:12:::0;;26334:7;26528:13;:28;;26290:303;46429:13:::1;:24;;;;:::i;:::-;:37;;46421:70;;;;-1:-1:-1::0;;;46421:70:0::1;;;;;;;:::i;:::-;46502:31;46512:10;46524:8;46502:9;:31::i;:::-;46360:181:::0;:::o;49294:827::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;49475:7:::1;49496:42;49584:3;49552:29;:25;49580:1;49552:29;:::i;:::-;:35;;;;:::i;:::-;49488:104;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49474:118;;;49607:2;49599:11;;;::::0;::::1;;49943:7;49964;2059:6:::0;;-1:-1:-1;;;;;2059:6:0;;1986:87;49964:7:::1;-1:-1:-1::0;;;;;49956:21:0::1;49985;49956:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49942:69;;;50026:2;50018:11;;;::::0;::::1;32763:185:::0;32901:39;32918:4;32924:2;32928:7;32901:39;;;;;;;;;;;;:16;:39::i;46909:635::-;46984:16;47012:23;47038:17;47048:6;47038:9;:17::i;:::-;47012:43;;47062:30;47109:15;47095:30;;;;;;-1:-1:-1;;;47095:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47095:30:0;-1:-1:-1;47062:63:0;-1:-1:-1;47157:1:0;47132:22;47201:309;47226:15;47208;:33;:64;;;;;47263:9;;47245:14;:27;;47208:64;47201:309;;;47283:25;47311:23;47319:14;47311:7;:23::i;:::-;47283:51;;47370:6;-1:-1:-1;;;;;47349:27:0;:17;-1:-1:-1;;;;;47349:27:0;;47345:131;;;47422:14;47389:13;47403:15;47389:30;;;;;;-1:-1:-1;;;47389:30:0;;;;;;;;;;;;;;;;;;:47;47449:17;;;;:::i;:::-;;;;47345:131;47486:16;;;;:::i;:::-;;;;47201:309;;;;-1:-1:-1;47525:13:0;;46909:635;-1:-1:-1;;;;46909:635:0:o;48319:74::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;48375:4:::1;:12:::0;48319:74::o;48737:132::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;48825:38;;::::1;::::0;:17:::1;::::0;:38:::1;::::0;::::1;::::0;::::1;:::i;45003:33::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44968:28::-;;;;;;;:::i;29962:125::-;30026:7;30053:21;30066:7;30053:12;:21::i;:::-;:26;;29962:125;-1:-1:-1;;29962:125:0:o;27410:206::-;27474:7;-1:-1:-1;;;;;27498:19:0;;27494:60;;27526:28;;-1:-1:-1;;;27526:28:0;;;;;;;;;;;27494:60;-1:-1:-1;;;;;;27580:19:0;;;;;:12;:19;;;;;:27;;;;27410:206::o;2637:103::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;2702:30:::1;2729:1;2702:18;:30::i;:::-;2637:103::o:0;48629:102::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;48699:11:::1;:26:::0;48629:102::o;46004:350::-;46070:8;45763:9;;45751:8;45735:13;26544:12;;26334:7;26528:13;:28;;26290:303;45735:13;:24;;;;:::i;:::-;:37;;45727:70;;;;-1:-1:-1;;;45727:70:0;;;;;;;:::i;:::-;45812:9;45825:10;45812:23;45804:68;;;;-1:-1:-1;;;45804:68:0;;;;;;;:::i;:::-;45926:9;;45914:8;45887:24;45900:10;45887:12;:24::i;:::-;:35;;;;:::i;:::-;:48;;45879:80;;;;-1:-1:-1;;;45879:80:0;;10304:2:1;45879:80:0;;;10286:21:1;10343:2;10323:18;;;10316:30;-1:-1:-1;;;10362:18:1;;;10355:50;10422:18;;45879:80:0;10276:170:1;45879:80:0;46096:6:::1;::::0;::::1;;46095:7;46087:43;;;::::0;-1:-1:-1;;;46087:43:0;;11368:2:1;46087:43:0::1;::::0;::::1;11350:21:1::0;11407:2;11387:18;;;11380:30;-1:-1:-1;;;11426:18:1;;;11419:53;11489:18;;46087:43:0::1;11340:173:1::0;46087:43:0::1;46173:10;;46161:8;46145:13;26544:12:::0;;26334:7;26528:13;:28;;26290:303;46145:13:::1;:24;;;;:::i;:::-;:38;;46137:73;;;::::0;-1:-1:-1;;;46137:73:0;;9952:2:1;46137:73:0::1;::::0;::::1;9934:21:1::0;9991:2;9971:18;;;9964:30;10030:25;10010:18;;;10003:53;10073:18;;46137:73:0::1;9924:173:1::0;46137:73:0::1;46264:11;;46252:8;46225:24;46238:10;46225:12;:24::i;:::-;:35;;;;:::i;:::-;:50;;46217:87;;;::::0;-1:-1:-1;;;46217:87:0;;10653:2:1;46217:87:0::1;::::0;::::1;10635:21:1::0;10692:2;10672:18;;;10665:30;10731:27;10711:18;;;10704:55;10776:18;;46217:87:0::1;10625:175:1::0;46217:87:0::1;46315:31;46325:10;46337:8;46315:9;:31::i;49166:98::-:0;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;49234:10:::1;:24:::0;49166:98::o;48875:100::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;48947:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;30323:104::-:0;30379:13;30412:7;30405:14;;;;;:::i;48531:94::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;48597:9:::1;:22:::0;48531:94::o;46547:327::-;46609:8;45763:9;;45751:8;45735:13;26544:12;;26334:7;26528:13;:28;;26290:303;45735:13;:24;;;;:::i;:::-;:37;;45727:70;;;;-1:-1:-1;;;45727:70:0;;;;;;;:::i;:::-;45812:9;45825:10;45812:23;45804:68;;;;-1:-1:-1;;;45804:68:0;;;;;;;:::i;:::-;45926:9;;45914:8;45887:24;45900:10;45887:12;:24::i;:::-;:35;;;;:::i;:::-;:48;;45879:80;;;;-1:-1:-1;;;45879:80:0;;10304:2:1;45879:80:0;;;10286:21:1;10343:2;10323:18;;;10316:30;-1:-1:-1;;;10362:18:1;;;10355:50;10422:18;;45879:80:0;10276:170:1;45879:80:0;46645:1:::1;46634:8;:12;:46;;;;;46662:18;;46650:8;:30;;46634:46;46626:79;;;::::0;-1:-1:-1;;;46626:79:0;;9603:2:1;46626:79:0::1;::::0;::::1;9585:21:1::0;9642:2;9622:18;;;9615:30;-1:-1:-1;;;9661:18:1;;;9654:50;9721:18;;46626:79:0::1;9575:170:1::0;46626:79:0::1;46721:6;::::0;::::1;;46720:7;46712:43;;;::::0;-1:-1:-1;;;46712:43:0;;11368:2:1;46712:43:0::1;::::0;::::1;11350:21:1::0;11407:2;11387:18;;;11380:30;-1:-1:-1;;;11426:18:1;;;11419:53;11489:18;;46712:43:0::1;11340:173:1::0;46712:43:0::1;46790:8;46783:4;;:15;;;;:::i;:::-;46770:9;:28;;46762:60;;;::::0;-1:-1:-1;;;46762:60:0;;12485:2:1;46762:60:0::1;::::0;::::1;12467:21:1::0;12524:2;12504:18;;;12497:30;-1:-1:-1;;;12543:18:1;;;12536:49;12602:18;;46762:60:0::1;12457:169:1::0;31933:287:0;-1:-1:-1;;;;;32032:24:0;;790:10;32032:24;32028:54;;;32065:17;;-1:-1:-1;;;32065:17:0;;;;;;;;;;;32028:54;790:10;32095:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;32095:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;32095:53:0;;;;;;;;;;32164:48;;8134:41:1;;;32095:42:0;;790:10;32164:48;;8107:18:1;32164:48:0;;;;;;;31933:287;;:::o;45043:31::-;;;;;;;:::i;48397:130::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;48481:18:::1;:40:::0;48397:130::o;33019:369::-;33186:28;33196:4;33202:2;33206:7;33186:9;:28::i;:::-;-1:-1:-1;;;;;33229:13:0;;4982:19;:23;;33229:76;;;;;33249:56;33280:4;33286:2;33290:7;33299:5;33249:30;:56::i;:::-;33248:57;33229:76;33225:156;;;33329:40;;-1:-1:-1;;;33329:40:0;;;;;;;;;;;33225:156;33019:369;;;;:::o;47586:496::-;47685:13;47726:17;47734:8;47726:7;:17::i;:::-;47710:98;;;;-1:-1:-1;;;47710:98:0;;11720:2:1;47710:98:0;;;11702:21:1;11759:2;11739:18;;;11732:30;11798:34;11778:18;;;11771:62;-1:-1:-1;;;11849:18:1;;;11842:45;11904:19;;47710:98:0;11692:237:1;47710:98:0;47821:8;;;;;;;47817:64;;47856:17;47849:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47586:496;;;:::o;47817:64::-;47889:28;47920:10;:8;:10::i;:::-;47889:41;;47975:1;47950:14;47944:28;:32;:130;;;;;;;;;;;;;;;;;48012:14;48028:19;:8;:17;:19::i;:::-;48049:9;47995:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47944:130;47937:137;47586:496;-1:-1:-1;;;47586:496:0:o;48119:107::-;-1:-1:-1;;;;;27794:19:0;;48177:7;27794:19;;;:12;:19;;;;;:32;-1:-1:-1;;;27794:32:0;;;;48200:20;27698:137;48232:81;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;48290:8:::1;:17:::0;;;::::1;;;;-1:-1:-1::0;;48290:17:0;;::::1;::::0;;;::::1;::::0;;48232:81::o;2895:201::-;2059:6;;-1:-1:-1;;;;;2059:6:0;790:10;2206:23;2198:68;;;;-1:-1:-1;;;2198:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2984:22:0;::::1;2976:73;;;::::0;-1:-1:-1;;;2976:73:0;;9196:2:1;2976:73:0::1;::::0;::::1;9178:21:1::0;9235:2;9215:18;;;9208:30;9274:34;9254:18;;;9247:62;-1:-1:-1;;;9325:18:1;;;9318:36;9371:19;;2976:73:0::1;9168:228:1::0;2976:73:0::1;3060:28;3079:8;3060:18;:28::i;33643:174::-:0;33700:4;33764:13;;33754:7;:23;33724:85;;;;-1:-1:-1;;33782:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;33782:27:0;;;;33781:28;;33643:174::o;41800:196::-;41915:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;41915:29:0;-1:-1:-1;;;;;41915:29:0;;;;;;;;;41960:28;;41915:24;;41960:28;;;;;;;41800:196;;;:::o;36743:2130::-;36858:35;36896:21;36909:7;36896:12;:21::i;:::-;36858:59;;36956:4;-1:-1:-1;;;;;36934:26:0;:13;:18;;;-1:-1:-1;;;;;36934:26:0;;36930:67;;36969:28;;-1:-1:-1;;;36969:28:0;;;;;;;;;;;36930:67;37010:22;790:10;-1:-1:-1;;;;;37036:20:0;;;;:73;;-1:-1:-1;37073:36:0;37090:4;790:10;32291:164;:::i;37073:36::-;37036:126;;;-1:-1:-1;790:10:0;37126:20;37138:7;37126:11;:20::i;:::-;-1:-1:-1;;;;;37126:36:0;;37036:126;37010:153;;37181:17;37176:66;;37207:35;;-1:-1:-1;;;37207:35:0;;;;;;;;;;;37176:66;-1:-1:-1;;;;;37257:16:0;;37253:52;;37282:23;;-1:-1:-1;;;37282:23:0;;;;;;;;;;;37253:52;37426:35;37443:1;37447:7;37456:4;37426:8;:35::i;:::-;-1:-1:-1;;;;;37757:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;37757:31:0;;;;;;;-1:-1:-1;;37757:31:0;;;;;;;37803:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;37803:29:0;;;;;;;;;;;37883:20;;;:11;:20;;;;;;37918:18;;-1:-1:-1;;;;;;37951:49:0;;;;-1:-1:-1;;;37984:15:0;37951:49;;;;;;;;;;38274:11;;38334:24;;;;;38377:13;;37883:20;;38334:24;;38377:13;38373:384;;38587:13;;38572:11;:28;38568:174;;38625:20;;38694:28;;;;38668:54;;-1:-1:-1;;;38668:54:0;-1:-1:-1;;;;;;38668:54:0;;;-1:-1:-1;;;;;38625:20:0;;38668:54;;;;38568:174;36743:2130;;;38804:7;38800:2;-1:-1:-1;;;;;38785:27:0;38794:4;-1:-1:-1;;;;;38785:27:0;;;;;;;;;;;38823:42;36743:2130;;;;;:::o;33825:104::-;33894:27;33904:2;33908:8;33894:27;;;;;;;;;;;;:9;:27::i;28791:1109::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;28902:7:0;28985:13;;28978:4;:20;28947:886;;;29019:31;29053:17;;;:11;:17;;;;;;;;;29019:51;;;;;;;;;-1:-1:-1;;;;;29019:51:0;;;;-1:-1:-1;;;29019:51:0;;;;;;;;;;;-1:-1:-1;;;29019:51:0;;;;;;;;;;;;;;29089:729;;29139:14;;-1:-1:-1;;;;;29139:28:0;;29135:101;;29203:9;28791:1109;-1:-1:-1;;;28791:1109:0:o;29135:101::-;-1:-1:-1;;;29578:6:0;29623:17;;;;:11;:17;;;;;;;;;29611:29;;;;;;;;;-1:-1:-1;;;;;29611:29:0;;;;;-1:-1:-1;;;29611:29:0;;;;;;;;;;;-1:-1:-1;;;29611:29:0;;;;;;;;;;;;;29671:28;29667:109;;29739:9;28791:1109;-1:-1:-1;;;28791:1109:0:o;29667:109::-;29538:261;;;28947:886;;29861:31;;-1:-1:-1;;;29861:31:0;;;;;;;;;;;3256:191;3349:6;;;-1:-1:-1;;;;;3366:17:0;;;-1:-1:-1;;;;;;3366:17:0;;;;;;;3399:40;;3349:6;;;3366:17;3349:6;;3399:40;;3330:16;;3399:40;3256:191;;:::o;42488:667::-;42672:72;;-1:-1:-1;;;42672:72:0;;42651:4;;-1:-1:-1;;;;;42672:36:0;;;;;:72;;790:10;;42723:4;;42729:7;;42738:5;;42672:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42672:72:0;;;;;;;;-1:-1:-1;;42672:72:0;;;;;;;;;;;;:::i;:::-;;;42668:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42906:13:0;;42902:235;;42952:40;;-1:-1:-1;;;42952:40:0;;;;;;;;;;;42902:235;43095:6;43089:13;43080:6;43076:2;43072:15;43065:38;42668:480;-1:-1:-1;;;;;;42791:55:0;-1:-1:-1;;;42791:55:0;;-1:-1:-1;42668:480:0;42488:667;;;;;;:::o;50163:104::-;50223:13;50252:9;50245:16;;;;;:::i;21012:723::-;21068:13;21289:10;21285:53;;-1:-1:-1;;21316:10:0;;;;;;;;;;;;-1:-1:-1;;;21316:10:0;;;;;21012:723::o;21285:53::-;21363:5;21348:12;21404:78;21411:9;;21404:78;;21437:8;;;;:::i;:::-;;-1:-1:-1;21460:10:0;;-1:-1:-1;21468:2:0;21460:10;;:::i;:::-;;;21404:78;;;21492:19;21524:6;21514:17;;;;;;-1:-1:-1;;;21514:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21514:17:0;;21492:39;;21542:154;21549:10;;21542:154;;21576:11;21586:1;21576:11;;:::i;:::-;;-1:-1:-1;21645:10:0;21653:2;21645:5;:10;:::i;:::-;21632:24;;:2;:24;:::i;:::-;21619:39;;21602:6;21609;21602:14;;;;;;-1:-1:-1;;;21602:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;21602:56:0;;;;;;;;-1:-1:-1;21673:11:0;21682:2;21673:11;;:::i;:::-;;;21542:154;;34292:163;34415:32;34421:2;34425:8;34435:5;34442:4;34853:20;34876:13;-1:-1:-1;;;;;34904:16:0;;34900:48;;34929:19;;-1:-1:-1;;;34929:19:0;;;;;;;;;;;34900:48;34963:13;34959:44;;34985:18;;-1:-1:-1;;;34985:18:0;;;;;;;;;;;34959:44;-1:-1:-1;;;;;35354:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;35413:49:0;;35354:44;;;;;;;;35413:49;;;-1:-1:-1;;;;;35354:44:0;;;;;;35413:49;;;;;;;;;;;;;;;;35479:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;35529:66:0;;;;-1:-1:-1;;;35579:15:0;35529:66;;;;;;;;;;35479:25;35676:23;;;35720:4;:23;;;;-1:-1:-1;;;;;;35728:13:0;;4982:19;:23;;35728:15;35716:641;;;35764:314;35795:38;;35820:12;;-1:-1:-1;;;;;35795:38:0;;;35812:1;;35795:38;;35812:1;;35795:38;35861:69;35900:1;35904:2;35908:14;;;;;;35924:5;35861:30;:69::i;:::-;35856:174;;35966:40;;-1:-1:-1;;;35966:40:0;;;;;;;;;;;35856:174;36073:3;36057:12;:19;;35764:314;;36159:12;36142:13;;:29;36138:43;;36173:8;;;36138:43;35716:641;;;36222:120;36253:40;;36278:14;;;;;-1:-1:-1;;;;;36253:40:0;;;36270:1;;36253:40;;36270:1;;36253:40;36337:3;36321:12;:19;;36222:120;;35716:641;-1:-1:-1;36371:13:0;:28;36421:60;33019:369;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:2;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:2;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:2;;;532:1;529;522:12;491:2;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;88:557;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:2;;813:1;810;803:12;747:2;699:124;;;:::o;828:160::-;893:20;;949:13;;942:21;932:32;;922:2;;978:1;975;968:12;993:196;1052:6;1105:2;1093:9;1084:7;1080:23;1076:32;1073:2;;;1126:6;1118;1111:22;1073:2;1154:29;1173:9;1154:29;:::i;1194:270::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:2;;;1344:6;1336;1329:22;1291:2;1372:29;1391:9;1372:29;:::i;:::-;1362:39;;1420:38;1454:2;1443:9;1439:18;1420:38;:::i;:::-;1410:48;;1281:183;;;;;:::o;1469:338::-;1546:6;1554;1562;1615:2;1603:9;1594:7;1590:23;1586:32;1583:2;;;1636:6;1628;1621:22;1583:2;1664:29;1683:9;1664:29;:::i;:::-;1654:39;;1712:38;1746:2;1735:9;1731:18;1712:38;:::i;:::-;1702:48;;1797:2;1786:9;1782:18;1769:32;1759:42;;1573:234;;;;;:::o;1812:696::-;1907:6;1915;1923;1931;1984:3;1972:9;1963:7;1959:23;1955:33;1952:2;;;2006:6;1998;1991:22;1952:2;2034:29;2053:9;2034:29;:::i;:::-;2024:39;;2082:38;2116:2;2105:9;2101:18;2082:38;:::i;:::-;2072:48;;2167:2;2156:9;2152:18;2139:32;2129:42;;2222:2;2211:9;2207:18;2194:32;2249:18;2241:6;2238:30;2235:2;;;2286:6;2278;2271:22;2235:2;2314:22;;2367:4;2359:13;;2355:27;-1:-1:-1;2345:2:1;;2401:6;2393;2386:22;2345:2;2429:73;2494:7;2489:2;2476:16;2471:2;2467;2463:11;2429:73;:::i;:::-;2419:83;;;1942:566;;;;;;;:::o;2513:264::-;2578:6;2586;2639:2;2627:9;2618:7;2614:23;2610:32;2607:2;;;2660:6;2652;2645:22;2607:2;2688:29;2707:9;2688:29;:::i;:::-;2678:39;;2736:35;2767:2;2756:9;2752:18;2736:35;:::i;2782:264::-;2850:6;2858;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2932:6;2924;2917:22;2879:2;2960:29;2979:9;2960:29;:::i;:::-;2950:39;3036:2;3021:18;;;;3008:32;;-1:-1:-1;;;2869:177:1:o;3051:190::-;3107:6;3160:2;3148:9;3139:7;3135:23;3131:32;3128:2;;;3181:6;3173;3166:22;3128:2;3209:26;3225:9;3209:26;:::i;3246:190::-;3305:6;3358:2;3346:9;3337:7;3333:23;3329:32;3326:2;;;3379:6;3371;3364:22;3326:2;-1:-1:-1;3407:23:1;;3316:120;-1:-1:-1;3316:120:1:o;3441:255::-;3499:6;3552:2;3540:9;3531:7;3527:23;3523:32;3520:2;;;3573:6;3565;3558:22;3520:2;3617:9;3604:23;3636:30;3660:5;3636:30;:::i;3701:259::-;3770:6;3823:2;3811:9;3802:7;3798:23;3794:32;3791:2;;;3844:6;3836;3829:22;3791:2;3881:9;3875:16;3900:30;3924:5;3900:30;:::i;3965:480::-;4034:6;4087:2;4075:9;4066:7;4062:23;4058:32;4055:2;;;4108:6;4100;4093:22;4055:2;4153:9;4140:23;4186:18;4178:6;4175:30;4172:2;;;4223:6;4215;4208:22;4172:2;4251:22;;4304:4;4296:13;;4292:27;-1:-1:-1;4282:2:1;;4338:6;4330;4323:22;4282:2;4366:73;4431:7;4426:2;4413:16;4408:2;4404;4400:11;4366:73;:::i;4645:257::-;4686:3;4724:5;4718:12;4751:6;4746:3;4739:19;4767:63;4823:6;4816:4;4811:3;4807:14;4800:4;4793:5;4789:16;4767:63;:::i;:::-;4884:2;4863:15;-1:-1:-1;;4859:29:1;4850:39;;;;4891:4;4846:50;;4694:208;-1:-1:-1;;4694:208:1:o;4907:1531::-;5131:3;5169:6;5163:13;5195:4;5208:51;5252:6;5247:3;5242:2;5234:6;5230:15;5208:51;:::i;:::-;5322:13;;5281:16;;;;5344:55;5322:13;5281:16;5366:15;;;5344:55;:::i;:::-;5490:13;;5421:20;;;5461:3;;5550:1;5572:18;;;;5625;;;;5652:2;;5730:4;5720:8;5716:19;5704:31;;5652:2;5793;5783:8;5780:16;5760:18;5757:40;5754:2;;;-1:-1:-1;;;5820:33:1;;5876:4;5873:1;5866:15;5906:4;5827:3;5894:17;5754:2;5937:18;5964:110;;;;6088:1;6083:330;;;;5930:483;;5964:110;-1:-1:-1;;5999:24:1;;5985:39;;6044:20;;;;-1:-1:-1;5964:110:1;;6083:330;12860:4;12879:17;;;12929:4;12913:21;;6178:3;6194:169;6208:8;6205:1;6202:15;6194:169;;;6290:14;;6275:13;;;6268:37;6333:16;;;;6225:10;;6194:169;;;6198:3;;6394:8;6387:5;6383:20;6376:27;;5930:483;-1:-1:-1;6429:3:1;;5139:1299;-1:-1:-1;;;;;;;;;;;5139:1299:1:o;6861:488::-;-1:-1:-1;;;;;7130:15:1;;;7112:34;;7182:15;;7177:2;7162:18;;7155:43;7229:2;7214:18;;7207:34;;;7277:3;7272:2;7257:18;;7250:31;;;7055:4;;7298:45;;7323:19;;7315:6;7298:45;:::i;:::-;7290:53;7064:285;-1:-1:-1;;;;;;7064:285:1:o;7354:635::-;7525:2;7577:21;;;7647:13;;7550:18;;;7669:22;;;7496:4;;7525:2;7748:15;;;;7722:2;7707:18;;;7496:4;7794:169;7808:6;7805:1;7802:13;7794:169;;;7869:13;;7857:26;;7938:15;;;;7903:12;;;;7830:1;7823:9;7794:169;;;-1:-1:-1;7980:3:1;;7505:484;-1:-1:-1;;;;;;7505:484:1:o;8368:219::-;8517:2;8506:9;8499:21;8480:4;8537:44;8577:2;8566:9;8562:18;8554:6;8537:44;:::i;8592:397::-;8794:2;8776:21;;;8833:2;8813:18;;;8806:30;8872:34;8867:2;8852:18;;8845:62;-1:-1:-1;;;8938:2:1;8923:18;;8916:31;8979:3;8964:19;;8766:223::o;10805:356::-;11007:2;10989:21;;;11026:18;;;11019:30;11085:34;11080:2;11065:18;;11058:62;11152:2;11137:18;;10979:182::o;11934:344::-;12136:2;12118:21;;;12175:2;12155:18;;;12148:30;-1:-1:-1;;;12209:2:1;12194:18;;12187:50;12269:2;12254:18;;12108:170::o;12945:128::-;12985:3;13016:1;13012:6;13009:1;13006:13;13003:2;;;13022:18;;:::i;:::-;-1:-1:-1;13058:9:1;;12993:80::o;13078:120::-;13118:1;13144;13134:2;;13149:18;;:::i;:::-;-1:-1:-1;13183:9:1;;13124:74::o;13203:168::-;13243:7;13309:1;13305;13301:6;13297:14;13294:1;13291:21;13286:1;13279:9;13272:17;13268:45;13265:2;;;13316:18;;:::i;:::-;-1:-1:-1;13356:9:1;;13255:116::o;13376:125::-;13416:4;13444:1;13441;13438:8;13435:2;;;13449:18;;:::i;:::-;-1:-1:-1;13486:9:1;;13425:76::o;13506:258::-;13578:1;13588:113;13602:6;13599:1;13596:13;13588:113;;;13678:11;;;13672:18;13659:11;;;13652:39;13624:2;13617:10;13588:113;;;13719:6;13716:1;13713:13;13710:2;;;-1:-1:-1;;13754:1:1;13736:16;;13729:27;13559:205::o;13769:380::-;13848:1;13844:12;;;;13891;;;13912:2;;13966:4;13958:6;13954:17;13944:27;;13912:2;14019;14011:6;14008:14;13988:18;13985:38;13982:2;;;14065:10;14060:3;14056:20;14053:1;14046:31;14100:4;14097:1;14090:15;14128:4;14125:1;14118:15;13982:2;;13824:325;;;:::o;14154:135::-;14193:3;-1:-1:-1;;14214:17:1;;14211:2;;;14234:18;;:::i;:::-;-1:-1:-1;14281:1:1;14270:13;;14201:88::o;14294:112::-;14326:1;14352;14342:2;;14357:18;;:::i;:::-;-1:-1:-1;14391:9:1;;14332:74::o;14411:127::-;14472:10;14467:3;14463:20;14460:1;14453:31;14503:4;14500:1;14493:15;14527:4;14524:1;14517:15;14543:127;14604:10;14599:3;14595:20;14592:1;14585:31;14635:4;14632:1;14625:15;14659:4;14656:1;14649:15;14675:127;14736:10;14731:3;14727:20;14724:1;14717:31;14767:4;14764:1;14757:15;14791:4;14788:1;14781:15;14807:131;-1:-1:-1;;;;;;14881:32:1;;14871:43;;14861:2;;14928:1;14925;14918:12
Swarm Source
ipfs://a6ad1c23f1412ed19cf5dd1de8edebc97792d9c87363333892555e9164d0b1d5
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.