Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
20,000 MemeCalf
Holders
335
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 MemeCalfLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
newNFT
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-07-15 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.0; /** * @dev ERC-721 non-fungible token standard. * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md. */ interface ERC721 { /** * @dev Emits when ownership of any NFT changes by any mechanism. This event emits when NFTs are * created (`from` == 0) and destroyed (`to` == 0). Exception: during contract creation, any * number of NFTs may be created and assigned without emitting Transfer. At the time of any * transfer, the approved address for that NFT (if any) is reset to none. */ event Transfer( address indexed _from, address indexed _to, uint256 indexed _tokenId ); /** * @dev This emits when the approved address for an NFT is changed or reaffirmed. The zero * address indicates there is no approved address. When a Transfer event emits, this also * indicates that the approved address for that NFT (if any) is reset to none. */ event Approval( address indexed _owner, address indexed _approved, uint256 indexed _tokenId ); /** * @dev This emits when an operator is enabled or disabled for an owner. The operator can manage * all NFTs of the owner. */ event ApprovalForAll( address indexed _owner, address indexed _operator, bool _approved ); /** * @dev Transfers the ownership of an NFT from one address to another address. * @notice Throws unless `msg.sender` is the current owner, an authorized operator, or the * approved address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is * the zero address. Throws if `_tokenId` is not a valid NFT. When transfer is complete, this * function checks if `_to` is a smart contract (code size > 0). If so, it calls * `onERC721Received` on `_to` and throws if the return value is not * `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`. * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. * @param _data Additional data with no specified format, sent in call to `_to`. */ function safeTransferFrom( address _from, address _to, uint256 _tokenId, bytes calldata _data ) external; /** * @dev Transfers the ownership of an NFT from one address to another address. * @notice This works identically to the other function with an extra data parameter, except this * function just sets data to "" * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. */ function safeTransferFrom( address _from, address _to, uint256 _tokenId ) external; /** * @dev Throws unless `msg.sender` is the current owner, an authorized operator, or the approved * address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is the zero * address. Throws if `_tokenId` is not a valid NFT. * @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else * they may be permanently lost. * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. */ function transferFrom( address _from, address _to, uint256 _tokenId ) external; /** * @dev Set or reaffirm the approved address for an NFT. * @notice The zero address indicates there is no approved address. Throws unless `msg.sender` is * the current NFT owner, or an authorized operator of the current owner. * @param _approved The new approved NFT controller. * @param _tokenId The NFT to approve. */ function approve( address _approved, uint256 _tokenId ) external; /** * @dev Enables or disables approval for a third party ("operator") to manage all of * `msg.sender`'s assets. It also emits the ApprovalForAll event. * @notice The contract MUST allow multiple operators per owner. * @param _operator Address to add to the set of authorized operators. * @param _approved True if the operators is approved, false to revoke approval. */ function setApprovalForAll( address _operator, bool _approved ) external; /** * @dev Returns the number of NFTs owned by `_owner`. NFTs assigned to the zero address are * considered invalid, and this function throws for queries about the zero address. * @param _owner Address for whom to query the balance. * @return Balance of _owner. */ function balanceOf( address _owner ) external view returns (uint256); /** * @dev Returns the address of the owner of the NFT. NFTs assigned to the zero address are * considered invalid, and queries about them do throw. * @param _tokenId The identifier for an NFT. * @return Address of _tokenId owner. */ function ownerOf( uint256 _tokenId ) external view returns (address); /** * @dev Get the approved address for a single NFT. * @notice Throws if `_tokenId` is not a valid NFT. * @param _tokenId The NFT to find the approved address for. * @return Address that _tokenId is approved for. */ function getApproved( uint256 _tokenId ) external view returns (address); /** * @dev Returns true if `_operator` is an approved operator for `_owner`, false otherwise. * @param _owner The address that owns the NFTs. * @param _operator The address that acts on behalf of the owner. * @return True if approved for all, false otherwise. */ function isApprovedForAll( address _owner, address _operator ) external view returns (bool); } /** * @dev Optional metadata extension for ERC-721 non-fungible token standard. * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md. */ interface ERC721Metadata { /** * @dev Returns a descriptive name for a collection of NFTs in this contract. * @return _name Representing name. */ function name() external view returns (string memory _name); /** * @dev Returns a abbreviated name for a collection of NFTs in this contract. * @return _symbol Representing symbol. */ function symbol() external view returns (string memory _symbol); /** * @dev Returns a distinct Uniform Resource Identifier (URI) for a given asset. It Throws if * `_tokenId` is not a valid NFT. URIs are defined in RFC3986. The URI may point to a JSON file * that conforms to the "ERC721 Metadata JSON Schema". * @return URI of _tokenId. */ function tokenURI(uint256 _tokenId) external view returns (string memory); } /** * @dev Utility library of inline functions on addresses. * @notice Based on: * https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol * Requires EIP-1052. */ library AddressUtils { /** * @dev Returns whether the target address is a contract. * @param _addr Address to check. * @return addressCheck True if _addr is a contract, false if not. */ function isContract( address _addr ) internal view returns (bool addressCheck) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; assembly { codehash := extcodehash(_addr) } // solhint-disable-line addressCheck = (codehash != 0x0 && codehash != accountHash); } } /** * @dev A standard for detecting smart contract interfaces. * See: https://eips.ethereum.org/EIPS/eip-165. */ interface ERC165 { /** * @dev Checks if the smart contract includes a specific interface. * This function uses less than 30,000 gas. * @param _interfaceID The interface identifier, as specified in ERC-165. * @return True if _interfaceID is supported, false otherwise. */ function supportsInterface( bytes4 _interfaceID ) external view returns (bool); } /** * @dev ERC-721 interface for accepting safe transfers. * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md. */ interface ERC721TokenReceiver { /** * @dev Handle the receipt of a NFT. The ERC721 smart contract calls this function on the * recipient after a `transfer`. This function MAY throw to revert and reject the transfer. Return * of other than the magic value MUST result in the transaction being reverted. * Returns `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` unless throwing. * @notice The contract address is always the message sender. A wallet/broker/auction application * MUST implement the wallet interface if it will accept safe transfers. * @param _operator The address which called `safeTransferFrom` function. * @param _from The address which previously owned the token. * @param _tokenId The NFT identifier which is being transferred. * @param _data Additional data with no specified format. * @return Returns `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`. */ function onERC721Received( address _operator, address _from, uint256 _tokenId, bytes calldata _data ) external returns(bytes4); } /** * @dev Implementation of standard for detect smart contract interfaces. */ contract SupportsInterface is ERC165 { /** * @dev Mapping of supported intefraces. You must not set element 0xffffffff to true. */ mapping(bytes4 => bool) internal supportedInterfaces; /** * @dev Contract constructor. */ constructor() { supportedInterfaces[0x01ffc9a7] = true; // ERC165 } /** * @dev Function to check which interfaces are suported by this contract. * @param _interfaceID Id of the interface. * @return True if _interfaceID is supported, false otherwise. */ function supportsInterface( bytes4 _interfaceID ) external override view returns (bool) { return supportedInterfaces[_interfaceID]; } } /** * @dev Implementation of ERC-721 non-fungible token standard. */ contract NFToken is ERC721, SupportsInterface { using AddressUtils for address; /** * @dev List of revert message codes. Implementing dApp should handle showing the correct message. * Based on 0xcert framework error codes. */ string constant ZERO_ADDRESS = "003001"; string constant NOT_VALID_NFT = "003002"; string constant NOT_OWNER_OR_OPERATOR = "003003"; string constant NOT_OWNER_APPROVED_OR_OPERATOR = "003004"; string constant NOT_ABLE_TO_RECEIVE_NFT = "003005"; string constant NFT_ALREADY_EXISTS = "003006"; string constant NOT_OWNER = "003007"; string constant IS_OWNER = "003008"; /** * @dev Magic value of a smart contract that can receive NFT. * Equal to: bytes4(keccak256("onERC721Received(address,address,uint256,bytes)")). */ bytes4 internal constant MAGIC_ON_ERC721_RECEIVED = 0x150b7a02; /** * @dev A mapping from NFT ID to the address that owns it. */ mapping (uint256 => address) internal idToOwner; /** * @dev Mapping from NFT ID to approved address. */ mapping (uint256 => address) internal idToApproval; /** * @dev Mapping from owner address to count of their tokens. */ mapping (address => uint256) private ownerToNFTokenCount; /** * @dev Mapping from owner address to mapping of operator addresses. */ mapping (address => mapping (address => bool)) internal ownerToOperators; /** * @dev Guarantees that the msg.sender is an owner or operator of the given NFT. * @param _tokenId ID of the NFT to validate. */ modifier canOperate( uint256 _tokenId ) { address tokenOwner = idToOwner[_tokenId]; require( tokenOwner == msg.sender || ownerToOperators[tokenOwner][msg.sender], NOT_OWNER_OR_OPERATOR ); _; } /** * @dev Guarantees that the msg.sender is allowed to transfer NFT. * @param _tokenId ID of the NFT to transfer. */ modifier canTransfer( uint256 _tokenId ) { address tokenOwner = idToOwner[_tokenId]; require( tokenOwner == msg.sender || idToApproval[_tokenId] == msg.sender || ownerToOperators[tokenOwner][msg.sender], NOT_OWNER_APPROVED_OR_OPERATOR ); _; } /** * @dev Guarantees that _tokenId is a valid Token. * @param _tokenId ID of the NFT to validate. */ modifier validNFToken( uint256 _tokenId ) { require(idToOwner[_tokenId] != address(0), NOT_VALID_NFT); _; } /** * @dev Contract constructor. */ constructor() { supportedInterfaces[0x80ac58cd] = true; // ERC721 } /** * @dev Transfers the ownership of an NFT from one address to another address. This function can * be changed to payable. * @notice Throws unless `msg.sender` is the current owner, an authorized operator, or the * approved address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is * the zero address. Throws if `_tokenId` is not a valid NFT. When transfer is complete, this * function checks if `_to` is a smart contract (code size > 0). If so, it calls * `onERC721Received` on `_to` and throws if the return value is not * `bytes4(keccak256("onERC721Received(address,uint256,bytes)"))`. * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. * @param _data Additional data with no specified format, sent in call to `_to`. */ function safeTransferFrom( address _from, address _to, uint256 _tokenId, bytes calldata _data ) external override { _safeTransferFrom(_from, _to, _tokenId, _data); } /** * @dev Transfers the ownership of an NFT from one address to another address. This function can * be changed to payable. * @notice This works identically to the other function with an extra data parameter, except this * function just sets data to "" * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. */ function safeTransferFrom( address _from, address _to, uint256 _tokenId ) external override { _safeTransferFrom(_from, _to, _tokenId, ""); } /** * @dev Throws unless `msg.sender` is the current owner, an authorized operator, or the approved * address for this NFT. Throws if `_from` is not the current owner. Throws if `_to` is the zero * address. Throws if `_tokenId` is not a valid NFT. This function can be changed to payable. * @notice The caller is responsible to confirm that `_to` is capable of receiving NFTs or else * they may be permanently lost. * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. */ function transferFrom( address _from, address _to, uint256 _tokenId ) external override canTransfer(_tokenId) validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; require(tokenOwner == _from, NOT_OWNER); require(_to != address(0), ZERO_ADDRESS); _transfer(_to, _tokenId); } /** * @dev Set or reaffirm the approved address for an NFT. This function can be changed to payable. * @notice The zero address indicates there is no approved address. Throws unless `msg.sender` is * the current NFT owner, or an authorized operator of the current owner. * @param _approved Address to be approved for the given NFT ID. * @param _tokenId ID of the token to be approved. */ function approve( address _approved, uint256 _tokenId ) external override canOperate(_tokenId) validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; require(_approved != tokenOwner, IS_OWNER); idToApproval[_tokenId] = _approved; emit Approval(tokenOwner, _approved, _tokenId); } /** * @dev Enables or disables approval for a third party ("operator") to manage all of * `msg.sender`'s assets. It also emits the ApprovalForAll event. * @notice This works even if sender doesn't own any tokens at the time. * @param _operator Address to add to the set of authorized operators. * @param _approved True if the operators is approved, false to revoke approval. */ function setApprovalForAll( address _operator, bool _approved ) external override { ownerToOperators[msg.sender][_operator] = _approved; emit ApprovalForAll(msg.sender, _operator, _approved); } /** * @dev Returns the number of NFTs owned by `_owner`. NFTs assigned to the zero address are * considered invalid, and this function throws for queries about the zero address. * @param _owner Address for whom to query the balance. * @return Balance of _owner. */ function balanceOf( address _owner ) external override view returns (uint256) { require(_owner != address(0), ZERO_ADDRESS); return _getOwnerNFTCount(_owner); } /** * @dev Returns the address of the owner of the NFT. NFTs assigned to the zero address are * considered invalid, and queries about them do throw. * @param _tokenId The identifier for an NFT. * @return _owner Address of _tokenId owner. */ function ownerOf( uint256 _tokenId ) external override view returns (address _owner) { _owner = idToOwner[_tokenId]; require(_owner != address(0), NOT_VALID_NFT); } /** * @dev Get the approved address for a single NFT. * @notice Throws if `_tokenId` is not a valid NFT. * @param _tokenId ID of the NFT to query the approval of. * @return Address that _tokenId is approved for. */ function getApproved( uint256 _tokenId ) external override view validNFToken(_tokenId) returns (address) { return idToApproval[_tokenId]; } /** * @dev Checks if `_operator` is an approved operator for `_owner`. * @param _owner The address that owns the NFTs. * @param _operator The address that acts on behalf of the owner. * @return True if approved for all, false otherwise. */ function isApprovedForAll( address _owner, address _operator ) external override view returns (bool) { return ownerToOperators[_owner][_operator]; } /** * @dev Actually performs the transfer. * @notice Does NO checks. * @param _to Address of a new owner. * @param _tokenId The NFT that is being transferred. */ function _transfer( address _to, uint256 _tokenId ) internal { address from = idToOwner[_tokenId]; _clearApproval(_tokenId); _removeNFToken(from, _tokenId); _addNFToken(_to, _tokenId); emit Transfer(from, _to, _tokenId); } /** * @dev Mints a new NFT. * @notice This is an internal function which should be called from user-implemented external * mint function. Its purpose is to show and properly initialize data structures when using this * implementation. * @param _to The address that will own the minted NFT. * @param _tokenId of the NFT to be minted by the msg.sender. */ function _mint( address _to, uint256 _tokenId ) internal virtual { require(_to != address(0), ZERO_ADDRESS); require(idToOwner[_tokenId] == address(0), NFT_ALREADY_EXISTS); _addNFToken(_to, _tokenId); emit Transfer(address(0), _to, _tokenId); } /** * @dev Burns a NFT. * @notice This is an internal function which should be called from user-implemented external burn * function. Its purpose is to show and properly initialize data structures when using this * implementation. Also, note that this burn implementation allows the minter to re-mint a burned * NFT. * @param _tokenId ID of the NFT to be burned. */ function _burn( uint256 _tokenId ) internal virtual validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; _clearApproval(_tokenId); _removeNFToken(tokenOwner, _tokenId); emit Transfer(tokenOwner, address(0), _tokenId); } /** * @dev Removes a NFT from owner. * @notice Use and override this function with caution. Wrong usage can have serious consequences. * @param _from Address from which we want to remove the NFT. * @param _tokenId Which NFT we want to remove. */ function _removeNFToken( address _from, uint256 _tokenId ) internal virtual { require(idToOwner[_tokenId] == _from, NOT_OWNER); ownerToNFTokenCount[_from] -= 1; delete idToOwner[_tokenId]; } /** * @dev Assigns a new NFT to owner. * @notice Use and override this function with caution. Wrong usage can have serious consequences. * @param _to Address to which we want to add the NFT. * @param _tokenId Which NFT we want to add. */ function _addNFToken( address _to, uint256 _tokenId ) internal virtual { require(idToOwner[_tokenId] == address(0), NFT_ALREADY_EXISTS); idToOwner[_tokenId] = _to; ownerToNFTokenCount[_to] += 1; } /** * @dev Helper function that gets NFT count of owner. This is needed for overriding in enumerable * extension to remove double storage (gas optimization) of owner NFT count. * @param _owner Address for whom to query the count. * @return Number of _owner NFTs. */ function _getOwnerNFTCount( address _owner ) internal virtual view returns (uint256) { return ownerToNFTokenCount[_owner]; } /** * @dev Actually perform the safeTransferFrom. * @param _from The current owner of the NFT. * @param _to The new owner. * @param _tokenId The NFT to transfer. * @param _data Additional data with no specified format, sent in call to `_to`. */ function _safeTransferFrom( address _from, address _to, uint256 _tokenId, bytes memory _data ) private canTransfer(_tokenId) validNFToken(_tokenId) { address tokenOwner = idToOwner[_tokenId]; require(tokenOwner == _from, NOT_OWNER); require(_to != address(0), ZERO_ADDRESS); _transfer(_to, _tokenId); if (_to.isContract()) { bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data); require(retval == MAGIC_ON_ERC721_RECEIVED, NOT_ABLE_TO_RECEIVE_NFT); } } /** * @dev Clears the current approval of a given NFT ID. * @param _tokenId ID of the NFT to be transferred. */ function _clearApproval( uint256 _tokenId ) private { delete idToApproval[_tokenId]; } } /** * @dev Optional metadata implementation for ERC-721 non-fungible token standard. */ contract NFTokenMetadata is NFToken, ERC721Metadata { /** * @dev A descriptive name for a collection of NFTs. */ string internal nftName; /** * @dev An abbreviated name for NFTokens. */ string internal nftSymbol; /** * @dev Mapping from NFT ID to metadata uri. */ mapping (uint256 => string) internal idToUri; /** * @dev Contract constructor. * @notice When implementing this contract don't forget to set nftName and nftSymbol. */ constructor() { supportedInterfaces[0x5b5e139f] = true; // ERC721Metadata } /** * @dev Returns a descriptive name for a collection of NFTokens. * @return _name Representing name. */ function name() external override view returns (string memory _name) { _name = nftName; } /** * @dev Returns an abbreviated name for NFTokens. * @return _symbol Representing symbol. */ function symbol() external override view returns (string memory _symbol) { _symbol = nftSymbol; } /** * @dev A distinct URI (RFC 3986) for a given NFT. * @param _tokenId Id for which we want uri. * @return URI of _tokenId. */ function tokenURI( uint256 _tokenId ) external override view validNFToken(_tokenId) returns (string memory) { return idToUri[_tokenId]; } /** * @dev Burns a NFT. * @notice This is an internal function which should be called from user-implemented external * burn function. Its purpose is to show and properly initialize data structures when using this * implementation. Also, note that this burn implementation allows the minter to re-mint a burned * NFT. * @param _tokenId ID of the NFT to be burned. */ function _burn( uint256 _tokenId ) internal override virtual { super._burn(_tokenId); delete idToUri[_tokenId]; } /** * @dev Set a distinct URI (RFC 3986) for a given NFT ID. * @notice This is an internal function which should be called from user-implemented external * function. Its purpose is to show and properly initialize data structures when using this * implementation. * @param _tokenId Id for which we want URI. * @param _uri String representing RFC 3986 URI. */ function _setTokenUri( uint256 _tokenId, string memory _uri ) internal validNFToken(_tokenId) { idToUri[_tokenId] = _uri; } } /** * @dev The contract has an owner address, and provides basic authorization control whitch * simplifies the implementation of user permissions. This contract is based on the source code at: * https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ownership/Ownable.sol */ contract Ownable { /** * @dev Error constants. */ string public constant NOT_CURRENT_OWNER = "018001"; string public constant CANNOT_TRANSFER_TO_ZERO_ADDRESS = "018002"; /** * @dev Current owner address. */ address public owner; /** * @dev An event which is triggered when the owner is changed. * @param previousOwner The address of the previous owner. * @param newOwner The address of the new owner. */ event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The constructor sets the original `owner` of the contract to the sender account. */ constructor() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner, NOT_CURRENT_OWNER); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership( address _newOwner ) public onlyOwner { require(_newOwner != address(0), CANNOT_TRANSFER_TO_ZERO_ADDRESS); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract newNFT is NFTokenMetadata, Ownable { uint internal numTokens = 20000; constructor() { nftName = "MemeCalf-NFT"; nftSymbol = "MemeCalf"; } function mint(address _to, uint256 _tokenId, string calldata _uri) external onlyOwner { super._mint(_to, _tokenId); super._setTokenUri(_tokenId, _uri); } function totalSupply() public view returns (uint256) { return numTokens; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":true,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CANNOT_TRANSFER_TO_ZERO_ADDRESS","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NOT_CURRENT_OWNER","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"_name","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"_owner","type":"address"}],"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":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"_symbol","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"}]
Contract Creation Code
6080604052614e206009553480156200001757600080fd5b50600060208181527f67be87c3ff9960ca1e9cfac5cab2ff4747269cf9ed20c9b7306235ac35a491c5805460ff1990811660019081179092557ff7815fccbf112960a73756e185887fedcb9fc64ca0a16cc5923b7960ed7808008054821683179055635b5e139f60e01b9093527f9562381dfbc2d8b8b66e765249f330164b73e329e5f01670660643571d1974df805490931617909155600880546001600160a01b0319163317905560408051808201909152600c8082526b13595b5950d85b198b53919560a21b91909201908152620000f591600591906200012e565b506040805180820190915260088082526726b2b6b2a1b0b63360c11b602090920191825262000127916006916200012e565b5062000211565b8280546200013c90620001d4565b90600052602060002090601f016020900481019282620001605760008555620001ab565b82601f106200017b57805160ff1916838001178555620001ab565b82800160010185558215620001ab579182015b82811115620001ab5782518255916020019190600101906200018e565b50620001b9929150620001bd565b5090565b5b80821115620001b95760008155600101620001be565b600281046001821680620001e957607f821691505b602082108114156200020b57634e487b7160e01b600052602260045260246000fd5b50919050565b61169180620002216000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063860d248a116100ad578063c87b56dd11610071578063c87b56dd14610238578063d3fc98641461024b578063e985e9c51461025e578063f2fde38b14610271578063f3fe3bc31461028457610121565b8063860d248a146101fa5780638da5cb5b1461020257806395d89b411461020a578063a22cb46514610212578063b88d4fde1461022557610121565b806318160ddd116100f457806318160ddd1461019957806323b872dd146101ae57806342842e0e146101c15780636352211e146101d457806370a08231146101e757610121565b806301ffc9a71461012657806306fdde031461014f578063081812fc14610164578063095ea7b314610184575b600080fd5b6101396101343660046114b5565b61028c565b60405161014691906115a1565b60405180910390f35b6101576102af565b60405161014691906115ac565b6101776101723660046114ed565b610341565b6040516101469190611550565b610197610192366004611434565b6103c3565b005b6101a1610565565b60405161014691906115bf565b6101976101bc366004611352565b61056b565b6101976101cf366004611352565b610726565b6101776101e23660046114ed565b610746565b6101a16101f53660046112ff565b61079e565b6101576107f5565b610177610817565b610157610826565b6101976102203660046113fa565b610835565b61019761023336600461138d565b6108a4565b6101576102463660046114ed565b6108ed565b61019761025936600461145d565b6109e8565b61013961026c366004611320565b610a82565b61019761027f3660046112ff565b610ab0565b610157610b9b565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b6060600580546102be906115f7565b80601f01602080910402602001604051908101604052809291908181526020018280546102ea906115f7565b80156103375780601f1061030c57610100808354040283529160200191610337565b820191906000526020600020905b81548152906001019060200180831161031a57829003601f168201915b5050505050905090565b6000818152600160209081526040808320548151808301909252600682526518181998181960d11b9282019290925283916001600160a01b03166103a15760405162461bcd60e51b815260040161039891906115ac565b60405180910390fd5b506000838152600260205260409020546001600160a01b031691505b50919050565b60008181526001602052604090205481906001600160a01b03163381148061040e57506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b6040518060400160405280600681526020016530303330303360d01b8152509061044b5760405162461bcd60e51b815260040161039891906115ac565b50600083815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528491906001600160a01b03166104a55760405162461bcd60e51b815260040161039891906115ac565b50600084815260016020908152604091829020548251808401909352600683526506060666060760d31b918301919091526001600160a01b03908116919087168214156105055760405162461bcd60e51b815260040161039891906115ac565b5060008581526002602052604080822080546001600160a01b0319166001600160a01b038a811691821790925591518893918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050505050565b60095490565b60008181526001602052604090205481906001600160a01b0316338114806105a957506000828152600260205260409020546001600160a01b031633145b806105d757506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b604051806040016040528060068152602001650c0c0ccc0c0d60d21b815250906106145760405162461bcd60e51b815260040161039891906115ac565b50600083815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528491906001600160a01b031661066e5760405162461bcd60e51b815260040161039891906115ac565b50600084815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b039081169190881682146106cd5760405162461bcd60e51b815260040161039891906115ac565b5060408051808201909152600681526530303330303160d01b60208201526001600160a01b0387166107125760405162461bcd60e51b815260040161039891906115ac565b5061071d8686610bbd565b50505050505050565b61074183838360405180602001604052806000815250610c38565b505050565b600081815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091526001600160a01b031690816103bd5760405162461bcd60e51b815260040161039891906115ac565b60408051808201909152600681526530303330303160d01b60208201526000906001600160a01b0383166107e55760405162461bcd60e51b815260040161039891906115ac565b506107ef82610ee6565b92915050565b6040518060400160405280600681526020016518189c18181960d11b81525081565b6008546001600160a01b031681565b6060600680546102be906115f7565b3360008181526004602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31906108989085906115a1565b60405180910390a35050565b6108e685858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c3892505050565b5050505050565b600081815260016020908152604091829020548251808401909352600683526518181998181960d11b9183019190915260609183916001600160a01b03166109485760405162461bcd60e51b815260040161039891906115ac565b5060008381526007602052604090208054610962906115f7565b80601f016020809104026020016040519081016040528092919081815260200182805461098e906115f7565b80156109db5780601f106109b0576101008083540402835291602001916109db565b820191906000526020600020905b8154815290600101906020018083116109be57829003601f168201915b5050505050915050919050565b60085460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314610a315760405162461bcd60e51b815260040161039891906115ac565b50610a3c8484610f01565b610a7c8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fe492505050565b50505050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b60085460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314610af95760405162461bcd60e51b815260040161039891906115ac565b5060408051808201909152600681526518189c18181960d11b60208201526001600160a01b038216610b3e5760405162461bcd60e51b815260040161039891906115ac565b506008546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6040518060400160405280600681526020016530313830303160d01b81525081565b6000818152600160205260409020546001600160a01b0316610bde8261105d565b610be8818361107b565b610bf28383611124565b81836001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008281526001602052604090205482906001600160a01b031633811480610c7657506000828152600260205260409020546001600160a01b031633145b80610ca457506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b604051806040016040528060068152602001650c0c0ccc0c0d60d21b81525090610ce15760405162461bcd60e51b815260040161039891906115ac565b50600084815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528591906001600160a01b0316610d3b5760405162461bcd60e51b815260040161039891906115ac565b50600085815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b03908116919089168214610d9a5760405162461bcd60e51b815260040161039891906115ac565b5060408051808201909152600681526530303330303160d01b60208201526001600160a01b038816610ddf5760405162461bcd60e51b815260040161039891906115ac565b50610dea8787610bbd565b610dfc876001600160a01b03166111cc565b15610edc57604051630a85bd0160e11b81526000906001600160a01b0389169063150b7a0290610e369033908d908c908c90600401611564565b602060405180830381600087803b158015610e5057600080fd5b505af1158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8891906114d1565b60408051808201909152600681526530303330303560d01b60208201529091506001600160e01b03198216630a85bd0160e11b14610ed95760405162461bcd60e51b815260040161039891906115ac565b50505b5050505050505050565b6001600160a01b031660009081526003602052604090205490565b60408051808201909152600681526530303330303160d01b60208201526001600160a01b038316610f455760405162461bcd60e51b815260040161039891906115ac565b50600081815260016020908152604091829020548251808401909352600683526518181998181b60d11b918301919091526001600160a01b031615610f9d5760405162461bcd60e51b815260040161039891906115ac565b50610fa88282611124565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600082815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528391906001600160a01b031661103d5760405162461bcd60e51b815260040161039891906115ac565b5060008381526007602090815260409091208351610a7c92850190611208565b600090815260026020526040902080546001600160a01b0319169055565b600081815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b038481169116146110d65760405162461bcd60e51b815260040161039891906115ac565b506001600160a01b03821660009081526003602052604081208054600192906111009084906115e0565b9091555050600090815260016020526040902080546001600160a01b031916905550565b600081815260016020908152604091829020548251808401909352600683526518181998181b60d11b918301919091526001600160a01b03161561117b5760405162461bcd60e51b815260040161039891906115ac565b50600081815260016020818152604080842080546001600160a01b0319166001600160a01b0388169081179091558452600390915282208054919290916111c39084906115c8565b90915550505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906112005750808214155b949350505050565b828054611214906115f7565b90600052602060002090601f016020900481019282611236576000855561127c565b82601f1061124f57805160ff191683800117855561127c565b8280016001018555821561127c579182015b8281111561127c578251825591602001919060010190611261565b5061128892915061128c565b5090565b5b80821115611288576000815560010161128d565b80356001600160a01b03811681146102aa57600080fd5b60008083601f8401126112c9578182fd5b50813567ffffffffffffffff8111156112e0578182fd5b6020830191508360208285010111156112f857600080fd5b9250929050565b600060208284031215611310578081fd5b611319826112a1565b9392505050565b60008060408385031215611332578081fd5b61133b836112a1565b9150611349602084016112a1565b90509250929050565b600080600060608486031215611366578081fd5b61136f846112a1565b925061137d602085016112a1565b9150604084013590509250925092565b6000806000806000608086880312156113a4578081fd5b6113ad866112a1565b94506113bb602087016112a1565b935060408601359250606086013567ffffffffffffffff8111156113dd578182fd5b6113e9888289016112b8565b969995985093965092949392505050565b6000806040838503121561140c578182fd5b611415836112a1565b915060208301358015158114611429578182fd5b809150509250929050565b60008060408385031215611446578182fd5b61144f836112a1565b946020939093013593505050565b60008060008060608587031215611472578384fd5b61147b856112a1565b935060208501359250604085013567ffffffffffffffff81111561149d578283fd5b6114a9878288016112b8565b95989497509550505050565b6000602082840312156114c6578081fd5b813561131981611642565b6000602082840312156114e2578081fd5b815161131981611642565b6000602082840312156114fe578081fd5b5035919050565b60008151808452815b8181101561152a5760208185018101518683018201520161150e565b8181111561153b5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061159790830184611505565b9695505050505050565b901515815260200190565b6000602082526113196020830184611505565b90815260200190565b600082198211156115db576115db61162c565b500190565b6000828210156115f2576115f261162c565b500390565b60028104600182168061160b57607f821691505b602082108114156103bd57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6001600160e01b03198116811461165857600080fd5b5056fea26469706673582212202913b6dfcee6c2bc4b85b4645fe0fd00e31765f4dc327ff86d171d978cdda86e64736f6c63430008000033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063860d248a116100ad578063c87b56dd11610071578063c87b56dd14610238578063d3fc98641461024b578063e985e9c51461025e578063f2fde38b14610271578063f3fe3bc31461028457610121565b8063860d248a146101fa5780638da5cb5b1461020257806395d89b411461020a578063a22cb46514610212578063b88d4fde1461022557610121565b806318160ddd116100f457806318160ddd1461019957806323b872dd146101ae57806342842e0e146101c15780636352211e146101d457806370a08231146101e757610121565b806301ffc9a71461012657806306fdde031461014f578063081812fc14610164578063095ea7b314610184575b600080fd5b6101396101343660046114b5565b61028c565b60405161014691906115a1565b60405180910390f35b6101576102af565b60405161014691906115ac565b6101776101723660046114ed565b610341565b6040516101469190611550565b610197610192366004611434565b6103c3565b005b6101a1610565565b60405161014691906115bf565b6101976101bc366004611352565b61056b565b6101976101cf366004611352565b610726565b6101776101e23660046114ed565b610746565b6101a16101f53660046112ff565b61079e565b6101576107f5565b610177610817565b610157610826565b6101976102203660046113fa565b610835565b61019761023336600461138d565b6108a4565b6101576102463660046114ed565b6108ed565b61019761025936600461145d565b6109e8565b61013961026c366004611320565b610a82565b61019761027f3660046112ff565b610ab0565b610157610b9b565b6001600160e01b0319811660009081526020819052604090205460ff165b919050565b6060600580546102be906115f7565b80601f01602080910402602001604051908101604052809291908181526020018280546102ea906115f7565b80156103375780601f1061030c57610100808354040283529160200191610337565b820191906000526020600020905b81548152906001019060200180831161031a57829003601f168201915b5050505050905090565b6000818152600160209081526040808320548151808301909252600682526518181998181960d11b9282019290925283916001600160a01b03166103a15760405162461bcd60e51b815260040161039891906115ac565b60405180910390fd5b506000838152600260205260409020546001600160a01b031691505b50919050565b60008181526001602052604090205481906001600160a01b03163381148061040e57506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b6040518060400160405280600681526020016530303330303360d01b8152509061044b5760405162461bcd60e51b815260040161039891906115ac565b50600083815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528491906001600160a01b03166104a55760405162461bcd60e51b815260040161039891906115ac565b50600084815260016020908152604091829020548251808401909352600683526506060666060760d31b918301919091526001600160a01b03908116919087168214156105055760405162461bcd60e51b815260040161039891906115ac565b5060008581526002602052604080822080546001600160a01b0319166001600160a01b038a811691821790925591518893918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050505050565b60095490565b60008181526001602052604090205481906001600160a01b0316338114806105a957506000828152600260205260409020546001600160a01b031633145b806105d757506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b604051806040016040528060068152602001650c0c0ccc0c0d60d21b815250906106145760405162461bcd60e51b815260040161039891906115ac565b50600083815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528491906001600160a01b031661066e5760405162461bcd60e51b815260040161039891906115ac565b50600084815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b039081169190881682146106cd5760405162461bcd60e51b815260040161039891906115ac565b5060408051808201909152600681526530303330303160d01b60208201526001600160a01b0387166107125760405162461bcd60e51b815260040161039891906115ac565b5061071d8686610bbd565b50505050505050565b61074183838360405180602001604052806000815250610c38565b505050565b600081815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091526001600160a01b031690816103bd5760405162461bcd60e51b815260040161039891906115ac565b60408051808201909152600681526530303330303160d01b60208201526000906001600160a01b0383166107e55760405162461bcd60e51b815260040161039891906115ac565b506107ef82610ee6565b92915050565b6040518060400160405280600681526020016518189c18181960d11b81525081565b6008546001600160a01b031681565b6060600680546102be906115f7565b3360008181526004602090815260408083206001600160a01b038716808552925291829020805460ff191685151517905590519091907f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31906108989085906115a1565b60405180910390a35050565b6108e685858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c3892505050565b5050505050565b600081815260016020908152604091829020548251808401909352600683526518181998181960d11b9183019190915260609183916001600160a01b03166109485760405162461bcd60e51b815260040161039891906115ac565b5060008381526007602052604090208054610962906115f7565b80601f016020809104026020016040519081016040528092919081815260200182805461098e906115f7565b80156109db5780601f106109b0576101008083540402835291602001916109db565b820191906000526020600020905b8154815290600101906020018083116109be57829003601f168201915b5050505050915050919050565b60085460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314610a315760405162461bcd60e51b815260040161039891906115ac565b50610a3c8484610f01565b610a7c8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fe492505050565b50505050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b60085460408051808201909152600681526530313830303160d01b6020820152906001600160a01b03163314610af95760405162461bcd60e51b815260040161039891906115ac565b5060408051808201909152600681526518189c18181960d11b60208201526001600160a01b038216610b3e5760405162461bcd60e51b815260040161039891906115ac565b506008546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6040518060400160405280600681526020016530313830303160d01b81525081565b6000818152600160205260409020546001600160a01b0316610bde8261105d565b610be8818361107b565b610bf28383611124565b81836001600160a01b0316826001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008281526001602052604090205482906001600160a01b031633811480610c7657506000828152600260205260409020546001600160a01b031633145b80610ca457506001600160a01b038116600090815260046020908152604080832033845290915290205460ff165b604051806040016040528060068152602001650c0c0ccc0c0d60d21b81525090610ce15760405162461bcd60e51b815260040161039891906115ac565b50600084815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528591906001600160a01b0316610d3b5760405162461bcd60e51b815260040161039891906115ac565b50600085815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b03908116919089168214610d9a5760405162461bcd60e51b815260040161039891906115ac565b5060408051808201909152600681526530303330303160d01b60208201526001600160a01b038816610ddf5760405162461bcd60e51b815260040161039891906115ac565b50610dea8787610bbd565b610dfc876001600160a01b03166111cc565b15610edc57604051630a85bd0160e11b81526000906001600160a01b0389169063150b7a0290610e369033908d908c908c90600401611564565b602060405180830381600087803b158015610e5057600080fd5b505af1158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8891906114d1565b60408051808201909152600681526530303330303560d01b60208201529091506001600160e01b03198216630a85bd0160e11b14610ed95760405162461bcd60e51b815260040161039891906115ac565b50505b5050505050505050565b6001600160a01b031660009081526003602052604090205490565b60408051808201909152600681526530303330303160d01b60208201526001600160a01b038316610f455760405162461bcd60e51b815260040161039891906115ac565b50600081815260016020908152604091829020548251808401909352600683526518181998181b60d11b918301919091526001600160a01b031615610f9d5760405162461bcd60e51b815260040161039891906115ac565b50610fa88282611124565b60405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600082815260016020908152604091829020548251808401909352600683526518181998181960d11b918301919091528391906001600160a01b031661103d5760405162461bcd60e51b815260040161039891906115ac565b5060008381526007602090815260409091208351610a7c92850190611208565b600090815260026020526040902080546001600160a01b0319169055565b600081815260016020908152604091829020548251808401909352600683526530303330303760d01b918301919091526001600160a01b038481169116146110d65760405162461bcd60e51b815260040161039891906115ac565b506001600160a01b03821660009081526003602052604081208054600192906111009084906115e0565b9091555050600090815260016020526040902080546001600160a01b031916905550565b600081815260016020908152604091829020548251808401909352600683526518181998181b60d11b918301919091526001600160a01b03161561117b5760405162461bcd60e51b815260040161039891906115ac565b50600081815260016020818152604080842080546001600160a01b0319166001600160a01b0388169081179091558452600390915282208054919290916111c39084906115c8565b90915550505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906112005750808214155b949350505050565b828054611214906115f7565b90600052602060002090601f016020900481019282611236576000855561127c565b82601f1061124f57805160ff191683800117855561127c565b8280016001018555821561127c579182015b8281111561127c578251825591602001919060010190611261565b5061128892915061128c565b5090565b5b80821115611288576000815560010161128d565b80356001600160a01b03811681146102aa57600080fd5b60008083601f8401126112c9578182fd5b50813567ffffffffffffffff8111156112e0578182fd5b6020830191508360208285010111156112f857600080fd5b9250929050565b600060208284031215611310578081fd5b611319826112a1565b9392505050565b60008060408385031215611332578081fd5b61133b836112a1565b9150611349602084016112a1565b90509250929050565b600080600060608486031215611366578081fd5b61136f846112a1565b925061137d602085016112a1565b9150604084013590509250925092565b6000806000806000608086880312156113a4578081fd5b6113ad866112a1565b94506113bb602087016112a1565b935060408601359250606086013567ffffffffffffffff8111156113dd578182fd5b6113e9888289016112b8565b969995985093965092949392505050565b6000806040838503121561140c578182fd5b611415836112a1565b915060208301358015158114611429578182fd5b809150509250929050565b60008060408385031215611446578182fd5b61144f836112a1565b946020939093013593505050565b60008060008060608587031215611472578384fd5b61147b856112a1565b935060208501359250604085013567ffffffffffffffff81111561149d578283fd5b6114a9878288016112b8565b95989497509550505050565b6000602082840312156114c6578081fd5b813561131981611642565b6000602082840312156114e2578081fd5b815161131981611642565b6000602082840312156114fe578081fd5b5035919050565b60008151808452815b8181101561152a5760208185018101518683018201520161150e565b8181111561153b5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061159790830184611505565b9695505050505050565b901515815260200190565b6000602082526113196020830184611505565b90815260200190565b600082198211156115db576115db61162c565b500190565b6000828210156115f2576115f261162c565b500390565b60028104600182168061160b57607f821691505b602082108114156103bd57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6001600160e01b03198116811461165857600080fd5b5056fea26469706673582212202913b6dfcee6c2bc4b85b4645fe0fd00e31765f4dc327ff86d171d978cdda86e64736f6c63430008000033
Deployed Bytecode Sourcemap
28002:430:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10532:172;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24568:120;;;:::i;:::-;;;;;;;:::i;18679:183::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16464:352::-;;;;;;:::i;:::-;;:::i;:::-;;28345:82;;;:::i;:::-;;;;;;;:::i;15690:353::-;;;;;;:::i;:::-;;:::i;14935:179::-;;;;;;:::i;:::-;;:::i;18227:208::-;;;;;;:::i;:::-;;:::i;17753:204::-;;;;;;:::i;:::-;;:::i;26810:65::-;;;:::i;26930:20::-;;;:::i;24804:128::-;;;:::i;17227:232::-;;;;;;:::i;:::-;;:::i;14316:209::-;;;;;;:::i;:::-;;:::i;25085:181::-;;;;;;:::i;:::-;;:::i;28175:166::-;;;;;;:::i;:::-;;:::i;19131:192::-;;;;;;:::i;:::-;;:::i;27755:238::-;;;;;;:::i;:::-;;:::i;26754:51::-;;;:::i;10532:172::-;-1:-1:-1;;;;;;10665:33:0;;10642:4;10665:33;;;;;;;;;;;;;10532:172;;;;:::o;24568:120::-;24636:19;24675:7;24667:15;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24568:120;:::o;18679:183::-;18808:7;13248:19;;;:9;:19;;;;;;;;;13283:13;;;;;;;;;;;-1:-1:-1;;;13283:13:0;;;;;;;18784:8;;-1:-1:-1;;;;;13248:19:0;13240:57;;;;-1:-1:-1;;;13240:57:0;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;18834:22:0::1;::::0;;;:12:::1;:22;::::0;;;;;-1:-1:-1;;;;;18834:22:0::1;::::0;-1:-1:-1;13304:1:0::1;18679:183:::0;;;;:::o;16464:352::-;12432:18;12453:19;;;:9;:19;;;;;;16577:8;;-1:-1:-1;;;;;12453:19:0;12509:10;12495:24;;;:68;;-1:-1:-1;;;;;;12523:28:0;;;;;;:16;:28;;;;;;;;12552:10;12523:40;;;;;;;;;;12495:68;12572:21;;;;;;;;;;;;;-1:-1:-1;;;12572:21:0;;;12479:121;;;;;-1:-1:-1;;;12479:121:0;;;;;;;;:::i;:::-;-1:-1:-1;13279:1:0::1;13248:19:::0;;;:9:::1;:19;::::0;;;;;;;;;13283:13;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;13283:13:0;;::::1;::::0;;;;16605:8;;13283:13;-1:-1:-1;;;;;13248:19:0::1;13240:57;;;;-1:-1:-1::0;;;13240:57:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;16625:18:0::2;16646:19:::0;;;:9:::2;:19;::::0;;;;;;;;;16705:8;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;16705:8:0;;::::2;::::0;;;;-1:-1:-1;;;;;16646:19:0;;::::2;::::0;16705:8;16680:23;::::2;::::0;::::2;;16672:42;;;;-1:-1:-1::0;;;16672:42:0::2;;;;;;;;:::i;:::-;-1:-1:-1::0;16723:22:0::2;::::0;;;:12:::2;:22;::::0;;;;;:34;;-1:-1:-1;;;;;;16723:34:0::2;-1:-1:-1::0;;;;;16723:34:0;;::::2;::::0;;::::2;::::0;;;16769:41;;16723:22;;16769:41;;::::2;::::0;::::2;::::0;::::2;13304:1;12607::::1;16464:352:::0;;;;:::o;28345:82::-;28412:9;;28345:82;:::o;15690:353::-;12812:18;12833:19;;;:9;:19;;;;;;15823:8;;-1:-1:-1;;;;;12833:19:0;12889:10;12875:24;;;:71;;-1:-1:-1;12910:22:0;;;;:12;:22;;;;;;-1:-1:-1;;;;;12910:22:0;12936:10;12910:36;12875:71;:122;;;-1:-1:-1;;;;;;12957:28:0;;;;;;:16;:28;;;;;;;;12986:10;12957:40;;;;;;;;;;12875:122;13006:30;;;;;;;;;;;;;-1:-1:-1;;;13006:30:0;;;12859:184;;;;;-1:-1:-1;;;12859:184:0;;;;;;;;:::i;:::-;-1:-1:-1;13279:1:0::1;13248:19:::0;;;:9:::1;:19;::::0;;;;;;;;;13283:13;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;13283:13:0;;::::1;::::0;;;;15851:8;;13283:13;-1:-1:-1;;;;;13248:19:0::1;13240:57;;;;-1:-1:-1::0;;;13240:57:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;15871:18:0::2;15892:19:::0;;;:9:::2;:19;::::0;;;;;;;;;15947:9;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;15947:9:0;;::::2;::::0;;;;-1:-1:-1;;;;;15892:19:0;;::::2;::::0;15947:9;15926:19;::::2;::::0;::::2;15918:39;;;;-1:-1:-1::0;;;15918:39:0::2;;;;;;;;:::i;:::-;-1:-1:-1::0;15991:12:0::2;::::0;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;15991:12:0::2;::::0;::::2;::::0;-1:-1:-1;;;;;15972:17:0;::::2;15964:40;;;;-1:-1:-1::0;;;15964:40:0::2;;;;;;;;:::i;:::-;;16013:24;16023:3;16028:8;16013:9;:24::i;:::-;13304:1;13050::::1;15690:353:::0;;;;;:::o;14935:179::-;15065:43;15083:5;15090:3;15095:8;15065:43;;;;;;;;;;;;:17;:43::i;:::-;14935:179;;;:::o;18227:208::-;18324:14;18359:19;;;:9;:19;;;;;;;;;;18415:13;;;;;;;;;;;-1:-1:-1;;;18415:13:0;;;;;;;-1:-1:-1;;;;;18359:19:0;;18393:20;18385:44;;;;-1:-1:-1;;;18385:44:0;;;;;;;;:::i;17753:204::-;17899:12;;;;;;;;;;;;-1:-1:-1;;;17899:12:0;;;;17850:7;;-1:-1:-1;;;;;17877:20:0;;17869:43;;;;-1:-1:-1;;;17869:43:0;;;;;;;;:::i;:::-;;17926:25;17944:6;17926:17;:25::i;:::-;17919:32;17753:204;-1:-1:-1;;17753:204:0:o;26810:65::-;;;;;;;;;;;;;;-1:-1:-1;;;26810:65:0;;;;:::o;26930:20::-;;;-1:-1:-1;;;;;26930:20:0;;:::o;24804:128::-;24874:21;24917:9;24907:19;;;;;:::i;17227:232::-;17359:10;17342:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;17342:39:0;;;;;;;;;;;:51;;-1:-1:-1;;17342:51:0;;;;;;;17405:48;;17342:39;;17359:10;17405:48;;;;17342:51;;17405:48;:::i;:::-;;;;;;;;17227:232;;:::o;14316:209::-;14473:46;14491:5;14498:3;14503:8;14513:5;;14473:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14473:17:0;;-1:-1:-1;;;14473:46:0:i;:::-;14316:209;;;;;:::o;25085:181::-;13279:1;13248:19;;;:9;:19;;;;;;;;;;13283:13;;;;;;;;;;;-1:-1:-1;;;13283:13:0;;;;;;;25211;;25187:8;;-1:-1:-1;;;;;13248:19:0;13240:57;;;;-1:-1:-1;;;13240:57:0;;;;;;;;:::i;:::-;-1:-1:-1;25243:17:0::1;::::0;;;:7:::1;:17;::::0;;;;25236:24;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25085:181:::0;;;;:::o;28175:166::-;27548:5;;27555:17;;;;;;;;;;;;-1:-1:-1;;;27555:17:0;;;;;-1:-1:-1;;;;;27548:5:0;27534:10;:19;27526:47;;;;-1:-1:-1;;;27526:47:0;;;;;;;;:::i;:::-;;28268:26:::1;28280:3;28285:8;28268:11;:26::i;:::-;28301:34;28320:8;28330:4;;28301:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;28301:18:0::1;::::0;-1:-1:-1;;;28301:34:0:i:1;:::-;28175:166:::0;;;;:::o;19131:192::-;-1:-1:-1;;;;;19282:24:0;;;19259:4;19282:24;;;:16;:24;;;;;;;;:35;;;;;;;;;;;;;;;19131:192::o;27755:238::-;27548:5;;27555:17;;;;;;;;;;;;-1:-1:-1;;;27555:17:0;;;;;-1:-1:-1;;;;;27548:5:0;27534:10;:19;27526:47;;;;-1:-1:-1;;;27526:47:0;;;;;;;;:::i;:::-;-1:-1:-1;27881:31:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;27881:31:0::1;::::0;::::1;::::0;-1:-1:-1;;;;;27856:23:0;::::1;27848:65;;;;-1:-1:-1::0;;;27848:65:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;27946:5:0::1;::::0;27925:38:::1;::::0;-1:-1:-1;;;;;27925:38:0;;::::1;::::0;27946:5:::1;::::0;27925:38:::1;::::0;27946:5:::1;::::0;27925:38:::1;27970:5;:17:::0;;-1:-1:-1;;;;;;27970:17:0::1;-1:-1:-1::0;;;;;27970:17:0;;;::::1;::::0;;;::::1;::::0;;27755:238::o;26754:51::-;;;;;;;;;;;;;;-1:-1:-1;;;26754:51:0;;;;:::o;19514:275::-;19603:12;19618:19;;;:9;:19;;;;;;-1:-1:-1;;;;;19618:19:0;19644:24;19628:8;19644:14;:24::i;:::-;19677:30;19692:4;19698:8;19677:14;:30::i;:::-;19714:26;19726:3;19731:8;19714:11;:26::i;:::-;19774:8;19769:3;-1:-1:-1;;;;;19754:29:0;19763:4;-1:-1:-1;;;;;19754:29:0;;;;;;;;;;;19514:275;;;:::o;22916:590::-;12812:18;12833:19;;;:9;:19;;;;;;23064:8;;-1:-1:-1;;;;;12833:19:0;12889:10;12875:24;;;:71;;-1:-1:-1;12910:22:0;;;;:12;:22;;;;;;-1:-1:-1;;;;;12910:22:0;12936:10;12910:36;12875:71;:122;;;-1:-1:-1;;;;;;12957:28:0;;;;;;:16;:28;;;;;;;;12986:10;12957:40;;;;;;;;;;12875:122;13006:30;;;;;;;;;;;;;-1:-1:-1;;;13006:30:0;;;12859:184;;;;;-1:-1:-1;;;12859:184:0;;;;;;;;:::i;:::-;-1:-1:-1;13279:1:0::1;13248:19:::0;;;:9:::1;:19;::::0;;;;;;;;;13283:13;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;13283:13:0;;::::1;::::0;;;;23092:8;;13283:13;-1:-1:-1;;;;;13248:19:0::1;13240:57;;;;-1:-1:-1::0;;;13240:57:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;23112:18:0::2;23133:19:::0;;;:9:::2;:19;::::0;;;;;;;;;23188:9;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;23188:9:0;;::::2;::::0;;;;-1:-1:-1;;;;;23133:19:0;;::::2;::::0;23188:9;23167:19;::::2;::::0;::::2;23159:39;;;;-1:-1:-1::0;;;23159:39:0::2;;;;;;;;:::i;:::-;-1:-1:-1::0;23232:12:0::2;::::0;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;23232:12:0::2;::::0;::::2;::::0;-1:-1:-1;;;;;23213:17:0;::::2;23205:40;;;;-1:-1:-1::0;;;23205:40:0::2;;;;;;;;:::i;:::-;;23254:24;23264:3;23269:8;23254:9;:24::i;:::-;23291:16;:3;-1:-1:-1::0;;;;;23291:14:0::2;;:16::i;:::-;23287:214;;;23339:77;::::0;-1:-1:-1;;;23339:77:0;;23323:13:::2;::::0;-1:-1:-1;;;;;23339:41:0;::::2;::::0;::::2;::::0;:77:::2;::::0;23381:10:::2;::::0;23393:5;;23400:8;;23410:5;;23339:77:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23469:23;::::0;;;;::::2;::::0;;;::::2;::::0;;-1:-1:-1;;;23469:23:0::2;::::0;::::2;::::0;23323:93;;-1:-1:-1;;;;;;;23433:34:0;::::2;-1:-1:-1::0;;;23433:34:0::2;23425:68;;;;-1:-1:-1::0;;;23425:68:0::2;;;;;;;;:::i;:::-;;23287:214;;13304:1;13050::::1;22916:590:::0;;;;;;:::o;22475:163::-;-1:-1:-1;;;;;22605:27:0;22579:7;22605:27;;;:19;:27;;;;;;;22475:163::o;20180:297::-;20305:12;;;;;;;;;;;;-1:-1:-1;;;20305:12:0;;;;-1:-1:-1;;;;;20286:17:0;;20278:40;;;;-1:-1:-1;;;20278:40:0;;;;;;;;:::i;:::-;-1:-1:-1;20364:1:0;20333:19;;;:9;:19;;;;;;;;;;20368:18;;;;;;;;;;;-1:-1:-1;;;20368:18:0;;;;;;;-1:-1:-1;;;;;20333:19:0;:33;20325:62;;;;-1:-1:-1;;;20325:62:0;;;;;;;;:::i;:::-;;20396:26;20408:3;20413:8;20396:11;:26::i;:::-;20436:35;;20462:8;;-1:-1:-1;;;;;20436:35:0;;;20453:1;;20436:35;;20453:1;;20436:35;20180:297;;:::o;26218:157::-;13279:1;13248:19;;;:9;:19;;;;;;;;;;13283:13;;;;;;;;;;;-1:-1:-1;;;13283:13:0;;;;;;;26325:8;;13283:13;-1:-1:-1;;;;;13248:19:0;13240:57;;;;-1:-1:-1;;;13240:57:0;;;;;;;;:::i;:::-;-1:-1:-1;26345:17:0::1;::::0;;;:7:::1;:17;::::0;;;;;;;:24;;::::1;::::0;;::::1;::::0;::::1;:::i;23639:110::-:0;23721:22;;;;:12;:22;;;;;23714:29;;-1:-1:-1;;;;;;23714:29:0;;;23639:110::o;21437:234::-;21554:19;;;;:9;:19;;;;;;;;;;21584:9;;;;;;;;;;;-1:-1:-1;;;21584:9:0;;;;;;;-1:-1:-1;;;;;21554:28:0;;;:19;;:28;21546:48;;;;-1:-1:-1;;;21546:48:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;21601:26:0;;;;;;:19;:26;;;;;:31;;21631:1;;21601:26;:31;;21631:1;;21601:31;:::i;:::-;;;;-1:-1:-1;;21646:19:0;;;;:9;:19;;;;;21639:26;;-1:-1:-1;;;;;;21639:26:0;;;-1:-1:-1;21437:234:0:o;21938:242::-;22081:1;22050:19;;;:9;:19;;;;;;;;;;22085:18;;;;;;;;;;;-1:-1:-1;;;22085:18:0;;;;;;;-1:-1:-1;;;;;22050:19:0;:33;22042:62;;;;-1:-1:-1;;;22042:62:0;;;;;;;;:::i;:::-;-1:-1:-1;22113:19:0;;;;:9;:19;;;;;;;;:25;;-1:-1:-1;;;;;;22113:25:0;-1:-1:-1;;;;;22113:25:0;;;;;;;;22145:24;;:19;:24;;;;;:29;;22113:9;;22145:24;;:29;;22113:9;;22145:29;:::i;:::-;;;;-1:-1:-1;;;;21938:242:0:o;7303:780::-;7386:17;7968:18;;7872:66;8034:15;;;;;:42;;;8065:11;8053:8;:23;;8034:42;8018:59;7303:780;-1:-1:-1;;;;7303:780:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:175:1;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:377;;;311:3;304:4;296:6;292:17;288:27;278:2;;336:8;326;319:26;278:2;-1:-1:-1;366:20:1;;409:18;398:30;;395:2;;;448:8;438;431:26;395:2;492:4;484:6;480:17;468:29;;544:3;537:4;528:6;520;516:19;512:30;509:39;506:2;;;561:1;558;551:12;506:2;268:303;;;;;:::o;576:198::-;;688:2;676:9;667:7;663:23;659:32;656:2;;;709:6;701;694:22;656:2;737:31;758:9;737:31;:::i;:::-;727:41;646:128;-1:-1:-1;;;646:128:1:o;779:274::-;;;908:2;896:9;887:7;883:23;879:32;876:2;;;929:6;921;914:22;876:2;957:31;978:9;957:31;:::i;:::-;947:41;;1007:40;1043:2;1032:9;1028:18;1007:40;:::i;:::-;997:50;;866:187;;;;;:::o;1058:342::-;;;;1204:2;1192:9;1183:7;1179:23;1175:32;1172:2;;;1225:6;1217;1210:22;1172:2;1253:31;1274:9;1253:31;:::i;:::-;1243:41;;1303:40;1339:2;1328:9;1324:18;1303:40;:::i;:::-;1293:50;;1390:2;1379:9;1375:18;1362:32;1352:42;;1162:238;;;;;:::o;1405:652::-;;;;;;1587:3;1575:9;1566:7;1562:23;1558:33;1555:2;;;1609:6;1601;1594:22;1555:2;1637:31;1658:9;1637:31;:::i;:::-;1627:41;;1687:40;1723:2;1712:9;1708:18;1687:40;:::i;:::-;1677:50;;1774:2;1763:9;1759:18;1746:32;1736:42;;1829:2;1818:9;1814:18;1801:32;1856:18;1848:6;1845:30;1842:2;;;1893:6;1885;1878:22;1842:2;1937:60;1989:7;1980:6;1969:9;1965:22;1937:60;:::i;:::-;1545:512;;;;-1:-1:-1;1545:512:1;;-1:-1:-1;2016:8:1;;1911:86;1545:512;-1:-1:-1;;;1545:512:1:o;2062:369::-;;;2188:2;2176:9;2167:7;2163:23;2159:32;2156:2;;;2209:6;2201;2194:22;2156:2;2237:31;2258:9;2237:31;:::i;:::-;2227:41;;2318:2;2307:9;2303:18;2290:32;2365:5;2358:13;2351:21;2344:5;2341:32;2331:2;;2392:6;2384;2377:22;2331:2;2420:5;2410:15;;;2146:285;;;;;:::o;2436:266::-;;;2565:2;2553:9;2544:7;2540:23;2536:32;2533:2;;;2586:6;2578;2571:22;2533:2;2614:31;2635:9;2614:31;:::i;:::-;2604:41;2692:2;2677:18;;;;2664:32;;-1:-1:-1;;;2523:179:1:o;2707:576::-;;;;;2873:2;2861:9;2852:7;2848:23;2844:32;2841:2;;;2894:6;2886;2879:22;2841:2;2922:31;2943:9;2922:31;:::i;:::-;2912:41;;3000:2;2989:9;2985:18;2972:32;2962:42;;3055:2;3044:9;3040:18;3027:32;3082:18;3074:6;3071:30;3068:2;;;3119:6;3111;3104:22;3068:2;3163:60;3215:7;3206:6;3195:9;3191:22;3163:60;:::i;:::-;2831:452;;;;-1:-1:-1;3242:8:1;-1:-1:-1;;;;2831:452:1:o;3288:257::-;;3399:2;3387:9;3378:7;3374:23;3370:32;3367:2;;;3420:6;3412;3405:22;3367:2;3464:9;3451:23;3483:32;3509:5;3483:32;:::i;3550:261::-;;3672:2;3660:9;3651:7;3647:23;3643:32;3640:2;;;3693:6;3685;3678:22;3640:2;3730:9;3724:16;3749:32;3775:5;3749:32;:::i;3816:190::-;;3928:2;3916:9;3907:7;3903:23;3899:32;3896:2;;;3949:6;3941;3934:22;3896:2;-1:-1:-1;3977:23:1;;3886:120;-1:-1:-1;3886:120:1:o;4011:477::-;;4092:5;4086:12;4119:6;4114:3;4107:19;4144:3;4156:162;4170:6;4167:1;4164:13;4156:162;;;4232:4;4288:13;;;4284:22;;4278:29;4260:11;;;4256:20;;4249:59;4185:12;4156:162;;;4336:6;4333:1;4330:13;4327:2;;;4402:3;4395:4;4386:6;4381:3;4377:16;4373:27;4366:40;4327:2;-1:-1:-1;4470:2:1;4449:15;-1:-1:-1;;4445:29:1;4436:39;;;;4477:4;4432:50;;4062:426;-1:-1:-1;;4062:426:1:o;4493:203::-;-1:-1:-1;;;;;4657:32:1;;;;4639:51;;4627:2;4612:18;;4594:102::o;4701:490::-;-1:-1:-1;;;;;4970:15:1;;;4952:34;;5022:15;;5017:2;5002:18;;4995:43;5069:2;5054:18;;5047:34;;;5117:3;5112:2;5097:18;;5090:31;;;4701:490;;5138:47;;5165:19;;5157:6;5138:47;:::i;:::-;5130:55;4904:287;-1:-1:-1;;;;;;4904:287:1:o;5196:187::-;5361:14;;5354:22;5336:41;;5324:2;5309:18;;5291:92::o;5388:221::-;;5537:2;5526:9;5519:21;5557:46;5599:2;5588:9;5584:18;5576:6;5557:46;:::i;5614:177::-;5760:25;;;5748:2;5733:18;;5715:76::o;5796:128::-;;5867:1;5863:6;5860:1;5857:13;5854:2;;;5873:18;;:::i;:::-;-1:-1:-1;5909:9:1;;5844:80::o;5929:125::-;;5997:1;5994;5991:8;5988:2;;;6002:18;;:::i;:::-;-1:-1:-1;6039:9:1;;5978:76::o;6059:380::-;6144:1;6134:12;;6191:1;6181:12;;;6202:2;;6256:4;6248:6;6244:17;6234:27;;6202:2;6309;6301:6;6298:14;6278:18;6275:38;6272:2;;;6355:10;6350:3;6346:20;6343:1;6336:31;6390:4;6387:1;6380:15;6418:4;6415:1;6408:15;6444:127;6505:10;6500:3;6496:20;6493:1;6486:31;6536:4;6533:1;6526:15;6560:4;6557:1;6550:15;6576:133;-1:-1:-1;;;;;;6652:32:1;;6642:43;;6632:2;;6699:1;6696;6689:12;6632:2;6622:87;:::o
Swarm Source
ipfs://2913b6dfcee6c2bc4b85b4645fe0fd00e31765f4dc327ff86d171d978cdda86e
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.