Overview
TokenID
1317
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PAYCDegenHours
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-11 */ // SPDX-License-Identifier: MIT // Pepe Ape Yacht Club Portal Contract 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); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: ERC2000000.sol pragma solidity ^0.8.7; library Address { function isContract(address account) internal view returns (bool) { uint size; assembly { size := extcodesize(account) } return size > 0; } } abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; string private _name; string private _symbol; // Mapping from token ID to owner address address[] internal _owners; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint) { require(owner != address(0), "ERC721: balance query for the zero address"); uint count; uint length= _owners.length; for( uint i; i < length; ++i ){ if( owner == _owners[i] ) ++count; } delete length; return count; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require( owner != address(0), "ERC721: owner query for nonexistent token" ); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _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 { delete from; delete to; delete tokenId; revert("Transfer not allowed"); } function pepetransferFrom( address from, address to, uint256 tokenId ) internal { //solhint-disable-next-line max-line-length // require( // _isApprovedOrOwner(_msgSender(), tokenId), // "ERC721: transfer caller is not owner nor approved" // ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { delete from; delete to; delete tokenId; delete _data; revert("Transfer not allowed"); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return tokenId < _owners.length && _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _owners.push(to); emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _owners[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } pragma solidity ^0.8.7; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account but rips out the core of the gas-wasting processing that comes from OpenZeppelin. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _owners.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < _owners.length, "ERC721Enumerable: global index out of bounds"); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256 tokenId) { require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); uint count; for(uint i; i < _owners.length; i++){ if(owner == _owners[i]){ if(count == index) return i; else count++; } } revert("ERC721Enumerable: owner index out of bounds"); } } pragma solidity ^0.8.7; interface IMain { function transferFrom( address from, address to, uint256 tokenId) external; function ownerOf( uint _tokenid) external view returns (address); } contract PAYCDegenHours is ERC721Enumerable, Ownable { using Strings for uint256; string private uriPrefix = "ipfs://Qmae138hdMAu2DKmwxmkkVnw66oHQC9W6Cc7dAUer8C5yE/"; string private uriSuffix = ".json"; uint16 public constant maxSupply = 7777; mapping (uint => uint) public mappingOldtoNewTokens; mapping (uint => uint) public mappingNewtoOldTokens; address public mainAddress = 0x2D0D57D004F82e9f4471CaA8b9f8B1965a814154; IMain Main = IMain(mainAddress); constructor() ERC721("PAYC Degen Hours", "PAYC Degen Hours") { } function setMainAddress(address contractAddr) external onlyOwner { mainAddress = contractAddr; Main= IMain(mainAddress); } function mint( uint tokenNumber) external { uint16 totalSupply = uint16(_owners.length); require(totalSupply + 1 <= maxSupply, "Exceeds max supply."); Main.transferFrom( msg.sender, address(this),tokenNumber); _mint(msg.sender, totalSupply); mappingNewtoOldTokens[totalSupply] = tokenNumber; mappingOldtoNewTokens[tokenNumber] = totalSupply; } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { uint token =mappingNewtoOldTokens[tokenId]; address _address = Main.ownerOf(token); require (from == address(this) || to == address(this) , "Transfer not Allowed"); require (from == _address || to == _address , "Transfer not Allowed "); delete token; } function ExchangeOldForNew( uint tokenNumber ) external { uint _token = mappingOldtoNewTokens[tokenNumber] ; pepetransferFrom( address(this), msg.sender,_token); Main.transferFrom(msg.sender, address(this),tokenNumber); } function ExchangeNewForOld( uint tokenNumber) external { uint _token = mappingNewtoOldTokens[tokenNumber] ; Main.transferFrom( address(this), msg.sender,_token); pepetransferFrom( msg.sender, address(this),tokenNumber); } function checkIfNFTExist(uint256 _tokenId) public view returns (bool) { bool exist = _exists(_tokenId); return exist; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); _tokenId = mappingNewtoOldTokens[_tokenId]; string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } function setUriPrefix(string memory _uriPrefix) external onlyOwner { uriPrefix = _uriPrefix; } function _mint(address to, uint256 tokenId) internal virtual override { _owners.push(to); emit Transfer(address(0), to, tokenId); } function _baseURI() internal view returns (string memory) { return uriPrefix; } }
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":[{"internalType":"uint256","name":"tokenNumber","type":"uint256"}],"name":"ExchangeNewForOld","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenNumber","type":"uint256"}],"name":"ExchangeOldForNew","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"checkIfNFTExist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mappingNewtoOldTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mappingOldtoNewTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenNumber","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddr","type":"address"}],"name":"setMainAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60e0604052603660808181529062001d8560a0398051620000299160069160209091019062000177565b5060408051808201909152600580825264173539b7b760d91b6020909201918252620000589160079162000177565b50600a8054732d0d57d004f82e9f4471caa8b9f8b1965a8141546001600160a01b03199182168117909255600b805490911690911790553480156200009c57600080fd5b5060408051808201825260108082526f5041594320446567656e20486f75727360801b602080840182815285518087019096529285528401528151919291620000e89160009162000177565b508051620000fe90600190602084019062000177565b5050506200011b620001156200012160201b60201c565b62000125565b6200025a565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b82805462000185906200021d565b90600052602060002090601f016020900481019282620001a95760008555620001f4565b82601f10620001c457805160ff1916838001178555620001f4565b82800160010185558215620001f4579182015b82811115620001f4578251825591602001919060010190620001d7565b506200020292915062000206565b5090565b5b8082111562000202576000815560010162000207565b600181811c908216806200023257607f821691505b602082108114156200025457634e487b7160e01b600052602260045260246000fd5b50919050565b611b1b806200026a6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637ec4a65911610104578063c87b56dd116100a2578063d600ddef11610071578063d600ddef146103ea578063db9771f5146103fd578063e985e9c514610410578063f2fde38b1461044c57600080fd5b8063c87b56dd14610388578063cf9bed2f1461039b578063d44624b2146103bb578063d5abeb01146103ce57600080fd5b8063a0712d68116100de578063a0712d681461033c578063a22cb4651461034f578063b88d4fde14610362578063baf9e3dc1461037557600080fd5b80637ec4a659146103105780638da5cb5b1461032357806395d89b411461033457600080fd5b80632f745c59116101715780636352211e1161014b5780636352211e146102c257806370a08231146102d5578063715018a6146102e857806376c63873146102f057600080fd5b80632f745c591461028957806342842e0e1461029c5780634f6ccce7146102af57600080fd5b8063095ea7b3116101ad578063095ea7b31461023c5780630cdd42341461025157806318160ddd1461026457806323b872dd1461027657600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063081812fc14610211575b600080fd5b6101e76101e2366004611772565b61045f565b60405190151581526020015b60405180910390f35b61020461048a565b6040516101f391906118c2565b61022461021f3660046117e5565b61051c565b6040516001600160a01b0390911681526020016101f3565b61024f61024a366004611746565b6105a9565b005b600a54610224906001600160a01b031681565b6002545b6040519081526020016101f3565b61024f610284366004611652565b6106bf565b610268610297366004611746565b610708565b61024f6102aa366004611652565b6107bb565b6102686102bd3660046117e5565b6107d6565b6102246102d03660046117e5565b610843565b6102686102e33660046115df565b6108cf565b61024f6109a1565b6102686102fe3660046117e5565b60086020526000908152604090205481565b61024f61031e36600461179c565b6109d7565b6005546001600160a01b0316610224565b610204610a18565b61024f61034a3660046117e5565b610a27565b61024f61035d366004611713565b610b1e565b61024f610370366004611693565b610be3565b61024f6103833660046117e5565b610c30565b6102046103963660046117e5565b610cb5565b6102686103a93660046117e5565b60096020526000908152604090205481565b61024f6103c93660046117e5565b610d91565b6103d7611e6181565b60405161ffff90911681526020016101f3565b6101e76103f83660046117e5565b610e19565b61024f61040b3660046115df565b610e25565b6101e761041e366004611619565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b61024f61045a3660046115df565b610e7b565b60006001600160e01b0319821663780e9d6360e01b1480610484575061048482610f16565b92915050565b60606000805461049990611a0e565b80601f01602080910402602001604051908101604052809291908181526020018280546104c590611a0e565b80156105125780601f106104e757610100808354040283529160200191610512565b820191906000526020600020905b8154815290600101906020018083116104f557829003601f168201915b5050505050905090565b600061052782610f66565b61058d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b60006105b482610843565b9050806001600160a01b0316836001600160a01b031614156106225760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610584565b336001600160a01b038216148061063e575061063e813361041e565b6106b05760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610584565b6106ba8383610fb0565b505050565b505060405162461bcd60e51b8152602060048201526014602482015273151c985b9cd9995c881b9bdd08185b1b1bddd95960621b60448201526000915081908190606401610584565b6000610713836108cf565b82106107315760405162461bcd60e51b8152600401610584906118f5565b6000805b6002548110156107a2576002818154811061075257610752611aa4565b6000918252602090912001546001600160a01b038681169116141561079057838214156107825791506104849050565b8161078c81611a49565b9250505b8061079a81611a49565b915050610735565b5060405162461bcd60e51b8152600401610584906118f5565b6106ba83838360405180602001604052806000815250610be3565b600254600090821061083f5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610584565b5090565b6000806002838154811061085957610859611aa4565b6000918252602090912001546001600160a01b03169050806104845760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610584565b60006001600160a01b03821661093a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610584565b600254600090815b81811015610998576002818154811061095d5761095d611aa4565b6000918252602090912001546001600160a01b03868116911614156109885761098583611a49565b92505b61099181611a49565b9050610942565b50909392505050565b6005546001600160a01b031633146109cb5760405162461bcd60e51b815260040161058490611940565b6109d5600061101e565b565b6005546001600160a01b03163314610a015760405162461bcd60e51b815260040161058490611940565b8051610a149060069060208401906114d9565b5050565b60606001805461049990611a0e565b600254611e61610a38826001611975565b61ffff161115610a805760405162461bcd60e51b815260206004820152601360248201527222bc31b2b2b2399036b0bc1039bab838363c9760691b6044820152606401610584565b600b546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401600060405180830381600087803b158015610ad257600080fd5b505af1158015610ae6573d6000803e3d6000fd5b50505050610af8338261ffff16611070565b61ffff166000818152600960209081526040808320859055938252600890529190912055565b6001600160a01b038216331415610b775760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610584565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b505060405162461bcd60e51b8152602060048201526014602482015273151c985b9cd9995c881b9bdd08185b1b1bddd95960621b6044820152600092508291508190606090606401610584565b6000818152600960205260409081902054600b5491516323b872dd60e01b81523060048201523360248201526044810182905290916001600160a01b0316906323b872dd90606401600060405180830381600087803b158015610c9257600080fd5b505af1158015610ca6573d6000803e3d6000fd5b50505050610a143330846110ec565b6060610cc082610f66565b610d245760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610584565b60009182526009602052604082205491610d3c6110f7565b90506000815111610d5c5760405180602001604052806000815250610d8a565b80610d6684611106565b6007604051602001610d7a939291906117fe565b6040516020818303038152906040525b9392505050565b600081815260086020526040902054610dab3033836110ec565b600b546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401600060405180830381600087803b158015610dfd57600080fd5b505af1158015610e11573d6000803e3d6000fd5b505050505050565b600080610d8a83610f66565b6005546001600160a01b03163314610e4f5760405162461bcd60e51b815260040161058490611940565b600a80546001600160a01b039092166001600160a01b03199283168117909155600b8054909216179055565b6005546001600160a01b03163314610ea55760405162461bcd60e51b815260040161058490611940565b6001600160a01b038116610f0a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610584565b610f138161101e565b50565b60006001600160e01b031982166380ac58cd60e01b1480610f4757506001600160e01b03198216635b5e139f60e01b145b8061048457506301ffc9a760e01b6001600160e01b0319831614610484565b60025460009082108015610484575060006001600160a01b031660028381548110610f9357610f93611aa4565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610fe582610843565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6106ba83838361120c565b60606006805461049990611a0e565b60608161112a5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611154578061113e81611a49565b915061114d9050600a836119b3565b915061112e565b60008167ffffffffffffffff81111561116f5761116f611aba565b6040519080825280601f01601f191660200182016040528015611199576020820181803683370190505b5090505b8415611204576111ae6001836119c7565b91506111bb600a86611a64565b6111c690603061199b565b60f81b8183815181106111db576111db611aa4565b60200101906001600160f81b031916908160001a9053506111fd600a866119b3565b945061119d565b949350505050565b826001600160a01b031661121f82610843565b6001600160a01b0316146112875760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610584565b6001600160a01b0382166112e95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610584565b6112f483838361136d565b6112ff600082610fb0565b816002828154811061131357611313611aa4565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b60008181526009602052604080822054600b5491516331a9108f60e11b8152600481018290529092916001600160a01b031690636352211e9060240160206040518083038186803b1580156113c157600080fd5b505afa1580156113d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f991906115fc565b90506001600160a01b03851630148061141a57506001600160a01b03841630145b61145d5760405162461bcd60e51b8152602060048201526014602482015273151c985b9cd9995c881b9bdd08105b1b1bddd95960621b6044820152606401610584565b806001600160a01b0316856001600160a01b0316148061148e5750806001600160a01b0316846001600160a01b0316145b6114d25760405162461bcd60e51b815260206004820152601560248201527402a3930b739b332b9103737ba1020b63637bbb2b21605d1b6044820152606401610584565b5050505050565b8280546114e590611a0e565b90600052602060002090601f016020900481019282611507576000855561154d565b82601f1061152057805160ff191683800117855561154d565b8280016001018555821561154d579182015b8281111561154d578251825591602001919060010190611532565b5061083f9291505b8082111561083f5760008155600101611555565b600067ffffffffffffffff8084111561158457611584611aba565b604051601f8501601f19908116603f011681019082821181831017156115ac576115ac611aba565b816040528093508581528686860111156115c557600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156115f157600080fd5b8135610d8a81611ad0565b60006020828403121561160e57600080fd5b8151610d8a81611ad0565b6000806040838503121561162c57600080fd5b823561163781611ad0565b9150602083013561164781611ad0565b809150509250929050565b60008060006060848603121561166757600080fd5b833561167281611ad0565b9250602084013561168281611ad0565b929592945050506040919091013590565b600080600080608085870312156116a957600080fd5b84356116b481611ad0565b935060208501356116c481611ad0565b925060408501359150606085013567ffffffffffffffff8111156116e757600080fd5b8501601f810187136116f857600080fd5b61170787823560208401611569565b91505092959194509250565b6000806040838503121561172657600080fd5b823561173181611ad0565b91506020830135801515811461164757600080fd5b6000806040838503121561175957600080fd5b823561176481611ad0565b946020939093013593505050565b60006020828403121561178457600080fd5b81356001600160e01b031981168114610d8a57600080fd5b6000602082840312156117ae57600080fd5b813567ffffffffffffffff8111156117c557600080fd5b8201601f810184136117d657600080fd5b61120484823560208401611569565b6000602082840312156117f757600080fd5b5035919050565b6000845160206118118285838a016119de565b8551918401916118248184848a016119de565b8554920191600090600181811c908083168061184157607f831692505b85831081141561185f57634e487b7160e01b85526022600452602485fd5b8080156118735760018114611884576118b1565b60ff198516885283880195506118b1565b60008b81526020902060005b858110156118a95781548a820152908401908801611890565b505083880195505b50939b9a5050505050505050505050565b60208152600082518060208401526118e18160408501602087016119de565b601f01601f19169190910160400192915050565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600061ffff80831681851680830382111561199257611992611a78565b01949350505050565b600082198211156119ae576119ae611a78565b500190565b6000826119c2576119c2611a8e565b500490565b6000828210156119d9576119d9611a78565b500390565b60005b838110156119f95781810151838201526020016119e1565b83811115611a08576000848401525b50505050565b600181811c90821680611a2257607f821691505b60208210811415611a4357634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611a5d57611a5d611a78565b5060010190565b600082611a7357611a73611a8e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610f1357600080fdfea26469706673582212201ce1d3632dc1b5dcd32a35c9608e56b8e97ba4f5a678c31fde9e4eda299c0af664736f6c63430008070033697066733a2f2f516d616531333868644d417532444b6d77786d6b6b566e7736366f485143395736436337644155657238433579452f
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637ec4a65911610104578063c87b56dd116100a2578063d600ddef11610071578063d600ddef146103ea578063db9771f5146103fd578063e985e9c514610410578063f2fde38b1461044c57600080fd5b8063c87b56dd14610388578063cf9bed2f1461039b578063d44624b2146103bb578063d5abeb01146103ce57600080fd5b8063a0712d68116100de578063a0712d681461033c578063a22cb4651461034f578063b88d4fde14610362578063baf9e3dc1461037557600080fd5b80637ec4a659146103105780638da5cb5b1461032357806395d89b411461033457600080fd5b80632f745c59116101715780636352211e1161014b5780636352211e146102c257806370a08231146102d5578063715018a6146102e857806376c63873146102f057600080fd5b80632f745c591461028957806342842e0e1461029c5780634f6ccce7146102af57600080fd5b8063095ea7b3116101ad578063095ea7b31461023c5780630cdd42341461025157806318160ddd1461026457806323b872dd1461027657600080fd5b806301ffc9a7146101d457806306fdde03146101fc578063081812fc14610211575b600080fd5b6101e76101e2366004611772565b61045f565b60405190151581526020015b60405180910390f35b61020461048a565b6040516101f391906118c2565b61022461021f3660046117e5565b61051c565b6040516001600160a01b0390911681526020016101f3565b61024f61024a366004611746565b6105a9565b005b600a54610224906001600160a01b031681565b6002545b6040519081526020016101f3565b61024f610284366004611652565b6106bf565b610268610297366004611746565b610708565b61024f6102aa366004611652565b6107bb565b6102686102bd3660046117e5565b6107d6565b6102246102d03660046117e5565b610843565b6102686102e33660046115df565b6108cf565b61024f6109a1565b6102686102fe3660046117e5565b60086020526000908152604090205481565b61024f61031e36600461179c565b6109d7565b6005546001600160a01b0316610224565b610204610a18565b61024f61034a3660046117e5565b610a27565b61024f61035d366004611713565b610b1e565b61024f610370366004611693565b610be3565b61024f6103833660046117e5565b610c30565b6102046103963660046117e5565b610cb5565b6102686103a93660046117e5565b60096020526000908152604090205481565b61024f6103c93660046117e5565b610d91565b6103d7611e6181565b60405161ffff90911681526020016101f3565b6101e76103f83660046117e5565b610e19565b61024f61040b3660046115df565b610e25565b6101e761041e366004611619565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b61024f61045a3660046115df565b610e7b565b60006001600160e01b0319821663780e9d6360e01b1480610484575061048482610f16565b92915050565b60606000805461049990611a0e565b80601f01602080910402602001604051908101604052809291908181526020018280546104c590611a0e565b80156105125780601f106104e757610100808354040283529160200191610512565b820191906000526020600020905b8154815290600101906020018083116104f557829003601f168201915b5050505050905090565b600061052782610f66565b61058d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600360205260409020546001600160a01b031690565b60006105b482610843565b9050806001600160a01b0316836001600160a01b031614156106225760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610584565b336001600160a01b038216148061063e575061063e813361041e565b6106b05760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610584565b6106ba8383610fb0565b505050565b505060405162461bcd60e51b8152602060048201526014602482015273151c985b9cd9995c881b9bdd08185b1b1bddd95960621b60448201526000915081908190606401610584565b6000610713836108cf565b82106107315760405162461bcd60e51b8152600401610584906118f5565b6000805b6002548110156107a2576002818154811061075257610752611aa4565b6000918252602090912001546001600160a01b038681169116141561079057838214156107825791506104849050565b8161078c81611a49565b9250505b8061079a81611a49565b915050610735565b5060405162461bcd60e51b8152600401610584906118f5565b6106ba83838360405180602001604052806000815250610be3565b600254600090821061083f5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610584565b5090565b6000806002838154811061085957610859611aa4565b6000918252602090912001546001600160a01b03169050806104845760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610584565b60006001600160a01b03821661093a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610584565b600254600090815b81811015610998576002818154811061095d5761095d611aa4565b6000918252602090912001546001600160a01b03868116911614156109885761098583611a49565b92505b61099181611a49565b9050610942565b50909392505050565b6005546001600160a01b031633146109cb5760405162461bcd60e51b815260040161058490611940565b6109d5600061101e565b565b6005546001600160a01b03163314610a015760405162461bcd60e51b815260040161058490611940565b8051610a149060069060208401906114d9565b5050565b60606001805461049990611a0e565b600254611e61610a38826001611975565b61ffff161115610a805760405162461bcd60e51b815260206004820152601360248201527222bc31b2b2b2399036b0bc1039bab838363c9760691b6044820152606401610584565b600b546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401600060405180830381600087803b158015610ad257600080fd5b505af1158015610ae6573d6000803e3d6000fd5b50505050610af8338261ffff16611070565b61ffff166000818152600960209081526040808320859055938252600890529190912055565b6001600160a01b038216331415610b775760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610584565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b505060405162461bcd60e51b8152602060048201526014602482015273151c985b9cd9995c881b9bdd08185b1b1bddd95960621b6044820152600092508291508190606090606401610584565b6000818152600960205260409081902054600b5491516323b872dd60e01b81523060048201523360248201526044810182905290916001600160a01b0316906323b872dd90606401600060405180830381600087803b158015610c9257600080fd5b505af1158015610ca6573d6000803e3d6000fd5b50505050610a143330846110ec565b6060610cc082610f66565b610d245760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610584565b60009182526009602052604082205491610d3c6110f7565b90506000815111610d5c5760405180602001604052806000815250610d8a565b80610d6684611106565b6007604051602001610d7a939291906117fe565b6040516020818303038152906040525b9392505050565b600081815260086020526040902054610dab3033836110ec565b600b546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd90606401600060405180830381600087803b158015610dfd57600080fd5b505af1158015610e11573d6000803e3d6000fd5b505050505050565b600080610d8a83610f66565b6005546001600160a01b03163314610e4f5760405162461bcd60e51b815260040161058490611940565b600a80546001600160a01b039092166001600160a01b03199283168117909155600b8054909216179055565b6005546001600160a01b03163314610ea55760405162461bcd60e51b815260040161058490611940565b6001600160a01b038116610f0a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610584565b610f138161101e565b50565b60006001600160e01b031982166380ac58cd60e01b1480610f4757506001600160e01b03198216635b5e139f60e01b145b8061048457506301ffc9a760e01b6001600160e01b0319831614610484565b60025460009082108015610484575060006001600160a01b031660028381548110610f9357610f93611aa4565b6000918252602090912001546001600160a01b0316141592915050565b600081815260036020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610fe582610843565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6002805460018101825560009182527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0385169081179091556040518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6106ba83838361120c565b60606006805461049990611a0e565b60608161112a5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611154578061113e81611a49565b915061114d9050600a836119b3565b915061112e565b60008167ffffffffffffffff81111561116f5761116f611aba565b6040519080825280601f01601f191660200182016040528015611199576020820181803683370190505b5090505b8415611204576111ae6001836119c7565b91506111bb600a86611a64565b6111c690603061199b565b60f81b8183815181106111db576111db611aa4565b60200101906001600160f81b031916908160001a9053506111fd600a866119b3565b945061119d565b949350505050565b826001600160a01b031661121f82610843565b6001600160a01b0316146112875760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610584565b6001600160a01b0382166112e95760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610584565b6112f483838361136d565b6112ff600082610fb0565b816002828154811061131357611313611aa4565b6000918252602082200180546001600160a01b0319166001600160a01b03938416179055604051839285811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a4505050565b60008181526009602052604080822054600b5491516331a9108f60e11b8152600481018290529092916001600160a01b031690636352211e9060240160206040518083038186803b1580156113c157600080fd5b505afa1580156113d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f991906115fc565b90506001600160a01b03851630148061141a57506001600160a01b03841630145b61145d5760405162461bcd60e51b8152602060048201526014602482015273151c985b9cd9995c881b9bdd08105b1b1bddd95960621b6044820152606401610584565b806001600160a01b0316856001600160a01b0316148061148e5750806001600160a01b0316846001600160a01b0316145b6114d25760405162461bcd60e51b815260206004820152601560248201527402a3930b739b332b9103737ba1020b63637bbb2b21605d1b6044820152606401610584565b5050505050565b8280546114e590611a0e565b90600052602060002090601f016020900481019282611507576000855561154d565b82601f1061152057805160ff191683800117855561154d565b8280016001018555821561154d579182015b8281111561154d578251825591602001919060010190611532565b5061083f9291505b8082111561083f5760008155600101611555565b600067ffffffffffffffff8084111561158457611584611aba565b604051601f8501601f19908116603f011681019082821181831017156115ac576115ac611aba565b816040528093508581528686860111156115c557600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156115f157600080fd5b8135610d8a81611ad0565b60006020828403121561160e57600080fd5b8151610d8a81611ad0565b6000806040838503121561162c57600080fd5b823561163781611ad0565b9150602083013561164781611ad0565b809150509250929050565b60008060006060848603121561166757600080fd5b833561167281611ad0565b9250602084013561168281611ad0565b929592945050506040919091013590565b600080600080608085870312156116a957600080fd5b84356116b481611ad0565b935060208501356116c481611ad0565b925060408501359150606085013567ffffffffffffffff8111156116e757600080fd5b8501601f810187136116f857600080fd5b61170787823560208401611569565b91505092959194509250565b6000806040838503121561172657600080fd5b823561173181611ad0565b91506020830135801515811461164757600080fd5b6000806040838503121561175957600080fd5b823561176481611ad0565b946020939093013593505050565b60006020828403121561178457600080fd5b81356001600160e01b031981168114610d8a57600080fd5b6000602082840312156117ae57600080fd5b813567ffffffffffffffff8111156117c557600080fd5b8201601f810184136117d657600080fd5b61120484823560208401611569565b6000602082840312156117f757600080fd5b5035919050565b6000845160206118118285838a016119de565b8551918401916118248184848a016119de565b8554920191600090600181811c908083168061184157607f831692505b85831081141561185f57634e487b7160e01b85526022600452602485fd5b8080156118735760018114611884576118b1565b60ff198516885283880195506118b1565b60008b81526020902060005b858110156118a95781548a820152908401908801611890565b505083880195505b50939b9a5050505050505050505050565b60208152600082518060208401526118e18160408501602087016119de565b601f01601f19169190910160400192915050565b6020808252602b908201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560408201526a74206f6620626f756e647360a81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600061ffff80831681851680830382111561199257611992611a78565b01949350505050565b600082198211156119ae576119ae611a78565b500190565b6000826119c2576119c2611a8e565b500490565b6000828210156119d9576119d9611a78565b500390565b60005b838110156119f95781810151838201526020016119e1565b83811115611a08576000848401525b50505050565b600181811c90821680611a2257607f821691505b60208210811415611a4357634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415611a5d57611a5d611a78565b5060010190565b600082611a7357611a73611a8e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610f1357600080fdfea26469706673582212201ce1d3632dc1b5dcd32a35c9608e56b8e97ba4f5a678c31fde9e4eda299c0af664736f6c63430008070033
Deployed Bytecode Sourcemap
29558:3124:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28073:224;;;;;;:::i;:::-;;:::i;:::-;;;6768:14:1;;6761:22;6743:41;;6731:2;6716:18;28073:224:0;;;;;;;;16554:100;;;:::i;:::-;;;;;;;:::i;17366:308::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6179:32:1;;;6161:51;;6149:2;6134:18;17366:308:0;6015:203:1;16889:411:0;;;;;;:::i;:::-;;:::i;:::-;;29954:71;;;;;-1:-1:-1;;;;;29954:71:0;;;28373:110;28461:7;:14;28373:110;;;14157:25:1;;;14145:2;14130:18;28373:110:0;14011:177:1;18425:259:0;;;;;;:::i;:::-;;:::i;28849:490::-;;;;;;:::i;:::-;;:::i;19142:185::-;;;;;;:::i;:::-;;:::i;28560:205::-;;;;;;:::i;:::-;;:::i;16161:326::-;;;;;;:::i;:::-;;:::i;15653:446::-;;;;;;:::i;:::-;;:::i;3664:103::-;;;:::i;29837:51::-;;;;;;:::i;:::-;;;;;;;;;;;;;;32308:102;;;;;;:::i;:::-;;:::i;3013:87::-;3086:6;;-1:-1:-1;;;;;3086:6:0;3013:87;;16723:104;;;:::i;30296:390::-;;;;;;:::i;:::-;;:::i;17746:327::-;;;;;;:::i;:::-;;:::i;19398:305::-;;;;;;:::i;:::-;;:::i;31393:254::-;;;;;;:::i;:::-;;:::i;31823:477::-;;;;;;:::i;:::-;;:::i;29893:51::-;;;;;;:::i;:::-;;;;;;;;;;;;;;31138:248;;;;;;:::i;:::-;;:::i;29783:39::-;;29818:4;29783:39;;;;;13992:6:1;13980:19;;;13962:38;;13950:2;13935:18;29783:39:0;13818:188:1;31657:153:0;;;;;;:::i;:::-;;:::i;30149:136::-;;;;;;:::i;:::-;;:::i;18144:214::-;;;;;;:::i;:::-;-1:-1:-1;;;;;18315:25:0;;;18286:4;18315:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;18144:214;3922:201;;;;;;:::i;:::-;;:::i;28073:224::-;28175:4;-1:-1:-1;;;;;;28199:50:0;;-1:-1:-1;;;28199:50:0;;:90;;;28253:36;28277:11;28253:23;:36::i;:::-;28192:97;28073:224;-1:-1:-1;;28073:224:0:o;16554:100::-;16608:13;16641:5;16634:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16554:100;:::o;17366:308::-;17487:7;17534:16;17542:7;17534;:16::i;:::-;17512:110;;;;-1:-1:-1;;;17512:110:0;;10907:2:1;17512:110:0;;;10889:21:1;10946:2;10926:18;;;10919:30;10985:34;10965:18;;;10958:62;-1:-1:-1;;;11036:18:1;;;11029:42;11088:19;;17512:110:0;;;;;;;;;-1:-1:-1;17642:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;17642:24:0;;17366:308::o;16889:411::-;16970:13;16986:23;17001:7;16986:14;:23::i;:::-;16970:39;;17034:5;-1:-1:-1;;;;;17028:11:0;:2;-1:-1:-1;;;;;17028:11:0;;;17020:57;;;;-1:-1:-1;;;17020:57:0;;12855:2:1;17020:57:0;;;12837:21:1;12894:2;12874:18;;;12867:30;12933:34;12913:18;;;12906:62;-1:-1:-1;;;12984:18:1;;;12977:31;13025:19;;17020:57:0;12653:397:1;17020:57:0;1817:10;-1:-1:-1;;;;;17112:21:0;;;;:62;;-1:-1:-1;17137:37:0;17154:5;1817:10;18144:214;:::i;17137:37::-;17090:168;;;;-1:-1:-1;;;17090:168:0;;9312:2:1;17090:168:0;;;9294:21:1;9351:2;9331:18;;;9324:30;9390:34;9370:18;;;9363:62;9461:26;9441:18;;;9434:54;9505:19;;17090:168:0;9110:420:1;17090:168:0;17271:21;17280:2;17284:7;17271:8;:21::i;:::-;16959:341;16889:411;;:::o;18425:259::-;-1:-1:-1;;18638:30:0;;-1:-1:-1;;;18638:30:0;;10558:2:1;18638:30:0;;;10540:21:1;10597:2;10577:18;;;10570:30;-1:-1:-1;;;10616:18:1;;;10609:50;18562:11:0;;-1:-1:-1;18562:11:0;;;;10676:18:1;;18638:30:0;10356:344:1;28849:490:0;28946:15;28990:16;29000:5;28990:9;:16::i;:::-;28982:5;:24;28974:80;;;;-1:-1:-1;;;28974:80:0;;;;;;;:::i;:::-;29067:10;29092:6;29088:178;29104:7;:14;29100:18;;29088:178;;;29151:7;29159:1;29151:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;29142:19:0;;;29151:10;;29142:19;29139:116;;;29193:5;29184;:14;29181:58;;;29207:1;-1:-1:-1;29200:8:0;;-1:-1:-1;29200:8:0;29181:58;29232:7;;;;:::i;:::-;;;;29181:58;29120:3;;;;:::i;:::-;;;;29088:178;;;;29278:53;;-1:-1:-1;;;29278:53:0;;;;;;;:::i;19142:185::-;19280:39;19297:4;19303:2;19307:7;19280:39;;;;;;;;;;;;:16;:39::i;28560:205::-;28671:7;:14;28635:7;;28663:22;;28655:79;;;;-1:-1:-1;;;28655:79:0;;13607:2:1;28655:79:0;;;13589:21:1;13646:2;13626:18;;;13619:30;13685:34;13665:18;;;13658:62;-1:-1:-1;;;13736:18:1;;;13729:42;13788:19;;28655:79:0;13405:408:1;28655:79:0;-1:-1:-1;28752:5:0;28560:205::o;16161:326::-;16278:7;16303:13;16319:7;16327;16319:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;16319:16:0;;-1:-1:-1;16368:19:0;16346:110;;;;-1:-1:-1;;;16346:110:0;;10148:2:1;16346:110:0;;;10130:21:1;10187:2;10167:18;;;10160:30;10226:34;10206:18;;;10199:62;-1:-1:-1;;;10277:18:1;;;10270:39;10326:19;;16346:110:0;9946:405:1;15653:446:0;15775:4;-1:-1:-1;;;;;15806:19:0;;15798:74;;;;-1:-1:-1;;;15798:74:0;;9737:2:1;15798:74:0;;;9719:21:1;9776:2;9756:18;;;9749:30;9815:34;9795:18;;;9788:62;-1:-1:-1;;;9866:18:1;;;9859:40;9916:19;;15798:74:0;9535:406:1;15798:74:0;15919:7;:14;15885:10;;;15944:101;15961:6;15957:1;:10;15944:101;;;16000:7;16008:1;16000:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;15991:19:0;;;16000:10;;15991:19;15987:46;;;16026:7;;;:::i;:::-;;;15987:46;15969:3;;;:::i;:::-;;;15944:101;;;-1:-1:-1;16086:5:0;;15653:446;-1:-1:-1;;;15653:446:0:o;3664:103::-;3086:6;;-1:-1:-1;;;;;3086:6:0;1817:10;3233:23;3225:68;;;;-1:-1:-1;;;3225:68:0;;;;;;;:::i;:::-;3729:30:::1;3756:1;3729:18;:30::i;:::-;3664:103::o:0;32308:102::-;3086:6;;-1:-1:-1;;;;;3086:6:0;1817:10;3233:23;3225:68;;;;-1:-1:-1;;;3225:68:0;;;;;;;:::i;:::-;32382:22;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;32308:102:::0;:::o;16723:104::-;16779:13;16812:7;16805:14;;;;;:::i;30296:390::-;30378:7;:14;29818:4;30408:15;30378:14;30422:1;30408:15;:::i;:::-;:28;;;;30400:60;;;;-1:-1:-1;;;30400:60:0;;12507:2:1;30400:60:0;;;12489:21:1;12546:2;12526:18;;;12519:30;-1:-1:-1;;;12565:18:1;;;12558:49;12624:18;;30400:60:0;12305:343:1;30400:60:0;30468:4;;:57;;-1:-1:-1;;;30468:57:0;;30487:10;30468:57;;;6463:34:1;30507:4:0;6513:18:1;;;6506:43;6565:18;;;6558:34;;;-1:-1:-1;;;;;30468:4:0;;;;:17;;6398:18:1;;30468:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30532:30;30538:10;30550:11;30532:30;;:5;:30::i;:::-;30573:34;;;;;;:21;:34;;;;;;;;:48;;;30628:34;;;:21;:34;;;;;;:48;30296:390::o;17746:327::-;-1:-1:-1;;;;;17881:24:0;;1817:10;17881:24;;17873:62;;;;-1:-1:-1;;;17873:62:0;;8609:2:1;17873:62:0;;;8591:21:1;8648:2;8628:18;;;8621:30;8687:27;8667:18;;;8660:55;8732:18;;17873:62:0;8407:349:1;17873:62:0;1817:10;17948:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;17948:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;17948:53:0;;;;;;;;;;18017:48;;6743:41:1;;;17948:42:0;;1817:10;18017:48;;6716:18:1;18017:48:0;;;;;;;17746:327;;:::o;19398:305::-;-1:-1:-1;;19647:30:0;;-1:-1:-1;;;19647:30:0;;10558:2:1;19647:30:0;;;10540:21:1;10597:2;10577:18;;;10570:30;-1:-1:-1;;;10616:18:1;;;10609:50;19562:11:0;;-1:-1:-1;19562:11:0;;-1:-1:-1;19562:11:0;;19622:12;;10676:18:1;;19647:30:0;10356:344:1;31393:254:0;31461:11;31475:34;;;:21;:34;;;;;;;;31517:4;;:52;;-1:-1:-1;;;31517:52:0;;31544:4;31517:52;;;6463:34:1;31551:10:0;6513:18:1;;;6506:43;6565:18;;;6558:34;;;31475::0;;-1:-1:-1;;;;;31517:4:0;;:17;;6398:18:1;;31517:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31574:56;31592:10;31612:4;31618:11;31574:16;:56::i;31823:477::-;31922:13;31963:17;31971:8;31963:7;:17::i;:::-;31947:98;;;;-1:-1:-1;;;31947:98:0;;12091:2:1;31947:98:0;;;12073:21:1;12130:2;12110:18;;;12103:30;12169:34;12149:18;;;12142:62;-1:-1:-1;;;12220:18:1;;;12213:45;12275:19;;31947:98:0;11889:411:1;31947:98:0;32069:31;;;;:21;:31;;;;;;;32140:10;:8;:10::i;:::-;32109:41;;32195:1;32170:14;32164:28;:32;:130;;;;;;;;;;;;;;;;;32232:14;32248:19;:8;:17;:19::i;:::-;32269:9;32215:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32164:130;32157:137;31823:477;-1:-1:-1;;;31823:477:0:o;31138:248::-;31208:11;31222:34;;;:21;:34;;;;;;31264:51;31290:4;31297:10;31222:34;31264:16;:51::i;:::-;31320:4;;:56;;-1:-1:-1;;;31320:56:0;;31338:10;31320:56;;;6463:34:1;31358:4:0;6513:18:1;;;6506:43;6565:18;;;6558:34;;;-1:-1:-1;;;;;31320:4:0;;;;:17;;6398:18:1;;31320:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31195:191;31138:248;:::o;31657:153::-;31735:4;31752:10;31767:17;31775:8;31767:7;:17::i;30149:136::-;3086:6;;-1:-1:-1;;;;;3086:6:0;1817:10;3233:23;3225:68;;;;-1:-1:-1;;;3225:68:0;;;;;;;:::i;:::-;30219:11:::1;:26:::0;;-1:-1:-1;;;;;30219:26:0;;::::1;-1:-1:-1::0;;;;;;30219:26:0;;::::1;::::0;::::1;::::0;;;30256:4:::1;:24:::0;;;;::::1;;::::0;;30149:136::o;3922:201::-;3086:6;;-1:-1:-1;;;;;3086:6:0;1817:10;3233:23;3225:68;;;;-1:-1:-1;;;3225:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4011:22:0;::::1;4003:73;;;::::0;-1:-1:-1;;;4003:73:0;;7797:2:1;4003:73:0::1;::::0;::::1;7779:21:1::0;7836:2;7816:18;;;7809:30;7875:34;7855:18;;;7848:62;-1:-1:-1;;;7926:18:1;;;7919:36;7972:19;;4003:73:0::1;7595:402:1::0;4003:73:0::1;4087:28;4106:8;4087:18;:28::i;:::-;3922:201:::0;:::o;15234:355::-;15381:4;-1:-1:-1;;;;;;15423:40:0;;-1:-1:-1;;;15423:40:0;;:105;;-1:-1:-1;;;;;;;15480:48:0;;-1:-1:-1;;;15480:48:0;15423:105;:158;;;-1:-1:-1;;;;;;;;;;7403:40:0;;;15545:36;7294:157;21220:155;21319:7;:14;21285:4;;21309:24;;:58;;;;;21365:1;-1:-1:-1;;;;;21337:30:0;:7;21345;21337:16;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;21337:16:0;:30;;21302:65;21220:155;-1:-1:-1;;21220:155:0:o;25197:174::-;25272:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;25272:29:0;-1:-1:-1;;;;;25272:29:0;;;;;;;;:24;;25326:23;25272:24;25326:14;:23::i;:::-;-1:-1:-1;;;;;25317:46:0;;;;;;;;;;;25197:174;;:::o;4283:191::-;4376:6;;;-1:-1:-1;;;;;4393:17:0;;;-1:-1:-1;;;;;;4393:17:0;;;;;;;4426:40;;4376:6;;;4393:17;4376:6;;4426:40;;4357:16;;4426:40;4346:128;4283:191;:::o;32431:154::-;32512:7;:16;;;;;;;-1:-1:-1;32512:16:0;;;;;;;-1:-1:-1;;;;;;32512:16:0;-1:-1:-1;;;;;32512:16:0;;;;;;;;32544:33;;32569:7;;-1:-1:-1;32544:33:0;;-1:-1:-1;;32544:33:0;32431:154;;:::o;18700:373::-;19037:28;19047:4;19053:2;19057:7;19037:9;:28::i;32591:88::-;32635:13;32664:9;32657:16;;;;;:::i;326:723::-;382:13;603:10;599:53;;-1:-1:-1;;630:10:0;;;;;;;;;;;;-1:-1:-1;;;630:10:0;;;;;326:723::o;599:53::-;677:5;662:12;718:78;725:9;;718:78;;751:8;;;;:::i;:::-;;-1:-1:-1;774:10:0;;-1:-1:-1;782:2:0;774:10;;:::i;:::-;;;718:78;;;806:19;838:6;828:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;828:17:0;;806:39;;856:154;863:10;;856:154;;890:11;900:1;890:11;;:::i;:::-;;-1:-1:-1;959:10:0;967:2;959:5;:10;:::i;:::-;946:24;;:2;:24;:::i;:::-;933:39;;916:6;923;916:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;916:56:0;;;;;;;;-1:-1:-1;987:11:0;996:2;987:11;;:::i;:::-;;;856:154;;;1034:6;326:723;-1:-1:-1;;;;326:723:0:o;24526:553::-;24699:4;-1:-1:-1;;;;;24672:31:0;:23;24687:7;24672:14;:23::i;:::-;-1:-1:-1;;;;;24672:31:0;;24650:122;;;;-1:-1:-1;;;24650:122:0;;11681:2:1;24650:122:0;;;11663:21:1;11720:2;11700:18;;;11693:30;11759:34;11739:18;;;11732:62;-1:-1:-1;;;11810:18:1;;;11803:39;11859:19;;24650:122:0;11479:405:1;24650:122:0;-1:-1:-1;;;;;24791:16:0;;24783:65;;;;-1:-1:-1;;;24783:65:0;;8204:2:1;24783:65:0;;;8186:21:1;8243:2;8223:18;;;8216:30;8282:34;8262:18;;;8255:62;-1:-1:-1;;;8333:18:1;;;8326:34;8377:19;;24783:65:0;8002:400:1;24783:65:0;24861:39;24882:4;24888:2;24892:7;24861:20;:39::i;:::-;24965:29;24982:1;24986:7;24965:8;:29::i;:::-;25024:2;25005:7;25013;25005:16;;;;;;;;:::i;:::-;;;;;;;;;:21;;-1:-1:-1;;;;;;25005:21:0;-1:-1:-1;;;;;25005:21:0;;;;;;25044:27;;25063:7;;25044:27;;;;;;;;;;25005:16;25044:27;24526:553;;;:::o;30692:440::-;30837:10;30849:30;;;:21;:30;;;;;;;30909:4;;:19;;-1:-1:-1;;;30909:19:0;;;;;14157:25:1;;;30849:30:0;;30837:10;-1:-1:-1;;;;;30909:4:0;;:12;;14130:18:1;;30909:19:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30890:38;-1:-1:-1;;;;;;30948:21:0;;30964:4;30948:21;;:45;;-1:-1:-1;;;;;;30973:20:0;;30988:4;30973:20;30948:45;30939:80;;;;-1:-1:-1;;;30939:80:0;;8963:2:1;30939:80:0;;;8945:21:1;9002:2;8982:18;;;8975:30;-1:-1:-1;;;9021:18:1;;;9014:50;9081:18;;30939:80:0;8761:344:1;30939:80:0;31047:8;-1:-1:-1;;;;;31039:16:0;:4;-1:-1:-1;;;;;31039:16:0;;:35;;;;31066:8;-1:-1:-1;;;;;31059:15:0;:2;-1:-1:-1;;;;;31059:15:0;;31039:35;31030:71;;;;-1:-1:-1;;;31030:71:0;;13257:2:1;31030:71:0;;;13239:21:1;13296:2;13276:18;;;13269:30;-1:-1:-1;;;13315:18:1;;;13308:51;13376:18;;31030:71:0;13055:345:1;31030:71:0;-1:-1:-1;;;;;30692:440:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;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:72;;;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:45;;;532:1;529;522:12;491:45;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;;;;14:631;;;;;:::o;650:247::-;709:6;762:2;750:9;741:7;737:23;733:32;730:52;;;778:1;775;768:12;730:52;817:9;804:23;836:31;861:5;836:31;:::i;902:251::-;972:6;1025:2;1013:9;1004:7;1000:23;996:32;993:52;;;1041:1;1038;1031:12;993:52;1073:9;1067:16;1092:31;1117:5;1092:31;:::i;1158:388::-;1226:6;1234;1287:2;1275:9;1266:7;1262:23;1258:32;1255:52;;;1303:1;1300;1293:12;1255:52;1342:9;1329:23;1361:31;1386:5;1361:31;:::i;:::-;1411:5;-1:-1:-1;1468:2:1;1453:18;;1440:32;1481:33;1440:32;1481:33;:::i;:::-;1533:7;1523:17;;;1158:388;;;;;:::o;1551:456::-;1628:6;1636;1644;1697:2;1685:9;1676:7;1672:23;1668:32;1665:52;;;1713:1;1710;1703:12;1665:52;1752:9;1739:23;1771:31;1796:5;1771:31;:::i;:::-;1821:5;-1:-1:-1;1878:2:1;1863:18;;1850:32;1891:33;1850:32;1891:33;:::i;:::-;1551:456;;1943:7;;-1:-1:-1;;;1997:2:1;1982:18;;;;1969:32;;1551:456::o;2012:794::-;2107:6;2115;2123;2131;2184:3;2172:9;2163:7;2159:23;2155:33;2152:53;;;2201:1;2198;2191:12;2152:53;2240:9;2227:23;2259:31;2284:5;2259:31;:::i;:::-;2309:5;-1:-1:-1;2366:2:1;2351:18;;2338:32;2379:33;2338:32;2379:33;:::i;:::-;2431:7;-1:-1:-1;2485:2:1;2470:18;;2457:32;;-1:-1:-1;2540:2:1;2525:18;;2512:32;2567:18;2556:30;;2553:50;;;2599:1;2596;2589:12;2553:50;2622:22;;2675:4;2667:13;;2663:27;-1:-1:-1;2653:55:1;;2704:1;2701;2694:12;2653:55;2727:73;2792:7;2787:2;2774:16;2769:2;2765;2761:11;2727:73;:::i;:::-;2717:83;;;2012:794;;;;;;;:::o;2811:416::-;2876:6;2884;2937:2;2925:9;2916:7;2912:23;2908:32;2905:52;;;2953:1;2950;2943:12;2905:52;2992:9;2979:23;3011:31;3036:5;3011:31;:::i;:::-;3061:5;-1:-1:-1;3118:2:1;3103:18;;3090:32;3160:15;;3153:23;3141:36;;3131:64;;3191:1;3188;3181:12;3232:315;3300:6;3308;3361:2;3349:9;3340:7;3336:23;3332:32;3329:52;;;3377:1;3374;3367:12;3329:52;3416:9;3403:23;3435:31;3460:5;3435:31;:::i;:::-;3485:5;3537:2;3522:18;;;;3509:32;;-1:-1:-1;;;3232:315:1:o;3552:286::-;3610:6;3663:2;3651:9;3642:7;3638:23;3634:32;3631:52;;;3679:1;3676;3669:12;3631:52;3705:23;;-1:-1:-1;;;;;;3757:32:1;;3747:43;;3737:71;;3804:1;3801;3794:12;3843:450;3912:6;3965:2;3953:9;3944:7;3940:23;3936:32;3933:52;;;3981:1;3978;3971:12;3933:52;4021:9;4008:23;4054:18;4046:6;4043:30;4040:50;;;4086:1;4083;4076:12;4040:50;4109:22;;4162:4;4154:13;;4150:27;-1:-1:-1;4140:55:1;;4191:1;4188;4181:12;4140:55;4214:73;4279:7;4274:2;4261:16;4256:2;4252;4248:11;4214:73;:::i;4298:180::-;4357:6;4410:2;4398:9;4389:7;4385:23;4381:32;4378:52;;;4426:1;4423;4416:12;4378:52;-1:-1:-1;4449:23:1;;4298:180;-1:-1:-1;4298:180:1:o;4483:1527::-;4707:3;4745:6;4739:13;4771:4;4784:51;4828:6;4823:3;4818:2;4810:6;4806:15;4784:51;:::i;:::-;4898:13;;4857:16;;;;4920:55;4898:13;4857:16;4942:15;;;4920:55;:::i;:::-;5064:13;;4997:20;;;5037:1;;5124;5146:18;;;;5199;;;;5226:93;;5304:4;5294:8;5290:19;5278:31;;5226:93;5367:2;5357:8;5354:16;5334:18;5331:40;5328:167;;;-1:-1:-1;;;5394:33:1;;5450:4;5447:1;5440:15;5480:4;5401:3;5468:17;5328:167;5511:18;5538:110;;;;5662:1;5657:328;;;;5504:481;;5538:110;-1:-1:-1;;5573:24:1;;5559:39;;5618:20;;;;-1:-1:-1;5538:110:1;;5657:328;14266:1;14259:14;;;14303:4;14290:18;;5752:1;5766:169;5780:8;5777:1;5774:15;5766:169;;;5862:14;;5847:13;;;5840:37;5905:16;;;;5797:10;;5766:169;;;5770:3;;5966:8;5959:5;5955:20;5948:27;;5504:481;-1:-1:-1;6001:3:1;;4483:1527;-1:-1:-1;;;;;;;;;;;4483:1527:1:o;6795:383::-;6944:2;6933:9;6926:21;6907:4;6976:6;6970:13;7019:6;7014:2;7003:9;6999:18;6992:34;7035:66;7094:6;7089:2;7078:9;7074:18;7069:2;7061:6;7057:15;7035:66;:::i;:::-;7162:2;7141:15;-1:-1:-1;;7137:29:1;7122:45;;;;7169:2;7118:54;;6795:383;-1:-1:-1;;6795:383:1:o;7183:407::-;7385:2;7367:21;;;7424:2;7404:18;;;7397:30;7463:34;7458:2;7443:18;;7436:62;-1:-1:-1;;;7529:2:1;7514:18;;7507:41;7580:3;7565:19;;7183:407::o;11118:356::-;11320:2;11302:21;;;11339:18;;;11332:30;11398:34;11393:2;11378:18;;11371:62;11465:2;11450:18;;11118:356::o;14319:224::-;14358:3;14386:6;14419:2;14416:1;14412:10;14449:2;14446:1;14442:10;14480:3;14476:2;14472:12;14467:3;14464:21;14461:47;;;14488:18;;:::i;:::-;14524:13;;14319:224;-1:-1:-1;;;;14319:224:1:o;14548:128::-;14588:3;14619:1;14615:6;14612:1;14609:13;14606:39;;;14625:18;;:::i;:::-;-1:-1:-1;14661:9:1;;14548:128::o;14681:120::-;14721:1;14747;14737:35;;14752:18;;:::i;:::-;-1:-1:-1;14786:9:1;;14681:120::o;14806:125::-;14846:4;14874:1;14871;14868:8;14865:34;;;14879:18;;:::i;:::-;-1:-1:-1;14916:9:1;;14806:125::o;14936:258::-;15008:1;15018:113;15032:6;15029:1;15026:13;15018:113;;;15108:11;;;15102:18;15089:11;;;15082:39;15054:2;15047:10;15018:113;;;15149:6;15146:1;15143:13;15140:48;;;15184:1;15175:6;15170:3;15166:16;15159:27;15140:48;;14936:258;;;:::o;15199:380::-;15278:1;15274:12;;;;15321;;;15342:61;;15396:4;15388:6;15384:17;15374:27;;15342:61;15449:2;15441:6;15438:14;15418:18;15415:38;15412:161;;;15495:10;15490:3;15486:20;15483:1;15476:31;15530:4;15527:1;15520:15;15558:4;15555:1;15548:15;15412:161;;15199:380;;;:::o;15584:135::-;15623:3;-1:-1:-1;;15644:17:1;;15641:43;;;15664:18;;:::i;:::-;-1:-1:-1;15711:1:1;15700:13;;15584:135::o;15724:112::-;15756:1;15782;15772:35;;15787:18;;:::i;:::-;-1:-1:-1;15821:9:1;;15724:112::o;15841:127::-;15902:10;15897:3;15893:20;15890:1;15883:31;15933:4;15930:1;15923:15;15957:4;15954:1;15947:15;15973:127;16034:10;16029:3;16025:20;16022:1;16015:31;16065:4;16062:1;16055:15;16089:4;16086:1;16079:15;16105:127;16166:10;16161:3;16157:20;16154:1;16147:31;16197:4;16194:1;16187:15;16221:4;16218:1;16211:15;16237:127;16298:10;16293:3;16289:20;16286:1;16279:31;16329:4;16326:1;16319:15;16353:4;16350:1;16343:15;16369:131;-1:-1:-1;;;;;16444:31:1;;16434:42;;16424:70;;16490:1;16487;16480:12
Swarm Source
ipfs://1ce1d3632dc1b5dcd32a35c9608e56b8e97ba4f5a678c31fde9e4eda299c0af6
Loading...
Loading
Loading...
Loading
[ 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.