ERC-721
NFT
Overview
Max Total Supply
732 DAYS
Holders
83
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
9 DAYSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
OpenSeaAsset
Compiler Version
v0.5.2+commit.1df8f40c
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-01-16 */ // File: contracts/Strings.sol pragma solidity ^0.5.2; library Strings { // via https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol function strConcat(string memory _a, string memory _b, string memory _c, string memory _d, string memory _e) internal pure returns (string memory) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (uint i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (uint i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (uint i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (uint i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string memory _a, string memory _b, string memory _c, string memory _d) internal pure returns (string memory) { return strConcat(_a, _b, _c, _d, ""); } function strConcat(string memory _a, string memory _b, string memory _c) internal pure returns (string memory) { return strConcat(_a, _b, _c, "", ""); } function strConcat(string memory _a, string memory _b) internal pure returns (string memory) { return strConcat(_a, _b, "", "", ""); } function uint2str(uint _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint j = _i; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (_i != 0) { bstr[k--] = byte(uint8(48 + _i % 10)); _i /= 10; } return string(bstr); } function fromAddress(address addr) internal pure returns(string memory) { bytes20 addrBytes = bytes20(addr); bytes16 hexAlphabet = "0123456789abcdef"; bytes memory result = new bytes(42); result[0] = '0'; result[1] = 'x'; for (uint i = 0; i < 20; i++) { result[i * 2 + 2] = hexAlphabet[uint8(addrBytes[i] >> 4)]; result[i * 2 + 3] = hexAlphabet[uint8(addrBytes[i] & 0x0f)]; } return string(result); } } // File: openzeppelin-solidity/contracts/introspection/IERC165.sol pragma solidity ^0.5.2; /** * @title IERC165 * @dev https://eips.ethereum.org/EIPS/eip-165 */ interface IERC165 { /** * @notice Query if a contract implements an interface * @param interfaceId The interface identifier, as specified in ERC-165 * @dev Interface identification is specified in ERC-165. This function * uses less than 30,000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: openzeppelin-solidity/contracts/token/ERC721/IERC721.sol pragma solidity ^0.5.2; /** * @title ERC721 Non-Fungible Token Standard basic interface * @dev see https://eips.ethereum.org/EIPS/eip-721 */ contract IERC721 is IERC165 { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) public view returns (uint256 balance); function ownerOf(uint256 tokenId) public view returns (address owner); function approve(address to, uint256 tokenId) public; function getApproved(uint256 tokenId) public view returns (address operator); function setApprovalForAll(address operator, bool _approved) public; function isApprovedForAll(address owner, address operator) public view returns (bool); function transferFrom(address from, address to, uint256 tokenId) public; function safeTransferFrom(address from, address to, uint256 tokenId) public; function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public; } // File: openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.5.2; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ contract IERC721Receiver { /** * @notice Handle the receipt of an NFT * @dev The ERC721 smart contract calls this function on the recipient * after a `safeTransfer`. This function MUST return the function selector, * otherwise the caller will revert the transaction. The selector to be * returned can be obtained as `this.onERC721Received.selector`. This * function MAY throw to revert and reject the transfer. * Note: the ERC721 contract address is always the message sender. * @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 bytes4 `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` */ function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data) public returns (bytes4); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol pragma solidity ^0.5.2; /** * @title SafeMath * @dev Unsigned math operations with safety checks that revert on error */ library SafeMath { /** * @dev Multiplies two unsigned integers, reverts on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } /** * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); uint256 c = a - b; return c; } /** * @dev Adds two unsigned integers, reverts on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } /** * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo), * reverts when dividing by zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } // File: openzeppelin-solidity/contracts/utils/Address.sol pragma solidity ^0.5.2; /** * Utility library of inline functions on addresses */ library Address { /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract, * as the code is not actually created until after the constructor finishes. * @param account address of the account to check * @return whether the target address is a contract */ function isContract(address account) internal view returns (bool) { uint256 size; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } // File: openzeppelin-solidity/contracts/drafts/Counters.sol pragma solidity ^0.5.2; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids * * Include with `using Counters for Counters.Counter;` * Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the SafeMath * overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never * directly accessed. */ library Counters { using SafeMath for uint256; struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { counter._value += 1; } function decrement(Counter storage counter) internal { counter._value = counter._value.sub(1); } } // File: openzeppelin-solidity/contracts/introspection/ERC165.sol pragma solidity ^0.5.2; /** * @title ERC165 * @author Matt Condon (@shrugs) * @dev Implements ERC165 using a lookup table. */ contract ERC165 is IERC165 { bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; /* * 0x01ffc9a7 === * bytes4(keccak256('supportsInterface(bytes4)')) */ /** * @dev a mapping of interface id to whether or not it's supported */ mapping(bytes4 => bool) private _supportedInterfaces; /** * @dev A contract implementing SupportsInterfaceWithLookup * implement ERC165 itself */ constructor () internal { _registerInterface(_INTERFACE_ID_ERC165); } /** * @dev implement supportsInterface(bytes4) using a lookup table */ function supportsInterface(bytes4 interfaceId) external view returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev internal method for registering an interface */ function _registerInterface(bytes4 interfaceId) internal { require(interfaceId != 0xffffffff); _supportedInterfaces[interfaceId] = true; } } // File: openzeppelin-solidity/contracts/token/ERC721/ERC721.sol pragma solidity ^0.5.2; /** * @title ERC721 Non-Fungible Token Standard basic implementation * @dev see https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721 is ERC165, IERC721 { using SafeMath for uint256; using Address for address; using Counters for Counters.Counter; // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector` bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; // Mapping from token ID to owner mapping (uint256 => address) private _tokenOwner; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to number of owned token mapping (address => Counters.Counter) private _ownedTokensCount; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; /* * 0x80ac58cd === * bytes4(keccak256('balanceOf(address)')) ^ * bytes4(keccak256('ownerOf(uint256)')) ^ * bytes4(keccak256('approve(address,uint256)')) ^ * bytes4(keccak256('getApproved(uint256)')) ^ * bytes4(keccak256('setApprovalForAll(address,bool)')) ^ * bytes4(keccak256('isApprovedForAll(address,address)')) ^ * bytes4(keccak256('transferFrom(address,address,uint256)')) ^ * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^ * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) */ constructor () public { // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721); } /** * @dev Gets the balance of the specified address * @param owner address to query the balance of * @return uint256 representing the amount owned by the passed address */ function balanceOf(address owner) public view returns (uint256) { require(owner != address(0)); return _ownedTokensCount[owner].current(); } /** * @dev Gets the owner of the specified token ID * @param tokenId uint256 ID of the token to query the owner of * @return address currently marked as the owner of the given token ID */ function ownerOf(uint256 tokenId) public view returns (address) { address owner = _tokenOwner[tokenId]; require(owner != address(0)); return owner; } /** * @dev Approves another address to transfer the given token ID * The zero address indicates there is no approved address. * There can only be one approved address per token at a given time. * Can only be called by the token owner or an approved operator. * @param to address to be approved for the given token ID * @param tokenId uint256 ID of the token to be approved */ function approve(address to, uint256 tokenId) public { address owner = ownerOf(tokenId); require(to != owner); require(msg.sender == owner || isApprovedForAll(owner, msg.sender)); _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Gets the approved address for a token ID, or zero if no address set * Reverts if the token ID does not exist. * @param tokenId uint256 ID of the token to query the approval of * @return address currently approved for the given token ID */ function getApproved(uint256 tokenId) public view returns (address) { require(_exists(tokenId)); return _tokenApprovals[tokenId]; } /** * @dev Sets or unsets the approval of a given operator * An operator is allowed to transfer all tokens of the sender on their behalf * @param to operator address to set the approval * @param approved representing the status of the approval to be set */ function setApprovalForAll(address to, bool approved) public { require(to != msg.sender); _operatorApprovals[msg.sender][to] = approved; emit ApprovalForAll(msg.sender, to, approved); } /** * @dev Tells whether an operator is approved by a given owner * @param owner owner address which you want to query the approval of * @param operator operator address which you want to query the approval of * @return bool whether the given operator is approved by the given owner */ function isApprovedForAll(address owner, address operator) public view returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev Transfers the ownership of a given token ID to another address * Usage of this method is discouraged, use `safeTransferFrom` whenever possible * Requires the msg.sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function transferFrom(address from, address to, uint256 tokenId) public { require(_isApprovedOrOwner(msg.sender, tokenId)); _transferFrom(from, to, tokenId); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * Requires the msg.sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function safeTransferFrom(address from, address to, uint256 tokenId) public { safeTransferFrom(from, to, tokenId, ""); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise, * the transfer is reverted. * Requires the msg.sender to be the owner, approved, or operator * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred * @param _data bytes data to send along with a safe transfer check */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public { transferFrom(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data)); } /** * @dev Returns whether the specified token exists * @param tokenId uint256 ID of the token to query the existence of * @return bool whether the token exists */ function _exists(uint256 tokenId) internal view returns (bool) { address owner = _tokenOwner[tokenId]; return owner != address(0); } /** * @dev Returns whether the given spender can transfer a given token ID * @param spender address of the spender to query * @param tokenId uint256 ID of the token to be transferred * @return bool whether the msg.sender is approved for the given token ID, * is an operator of the owner, or is the owner of the token */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) { address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Internal function to mint a new token * Reverts if the given token ID already exists * @param to The address that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _mint(address to, uint256 tokenId) internal { require(to != address(0)); require(!_exists(tokenId)); _tokenOwner[tokenId] = to; _ownedTokensCount[to].increment(); emit Transfer(address(0), to, tokenId); } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * Deprecated, use _burn(uint256) instead. * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned */ function _burn(address owner, uint256 tokenId) internal { require(ownerOf(tokenId) == owner); _clearApproval(tokenId); _ownedTokensCount[owner].decrement(); _tokenOwner[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * @param tokenId uint256 ID of the token being burned */ function _burn(uint256 tokenId) internal { _burn(ownerOf(tokenId), tokenId); } /** * @dev Internal function to transfer ownership of a given token ID to another address. * As opposed to transferFrom, this imposes no restrictions on msg.sender. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function _transferFrom(address from, address to, uint256 tokenId) internal { require(ownerOf(tokenId) == from); require(to != address(0)); _clearApproval(tokenId); _ownedTokensCount[from].decrement(); _ownedTokensCount[to].increment(); _tokenOwner[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Internal function to invoke `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) internal returns (bool) { if (!to.isContract()) { return true; } bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data); return (retval == _ERC721_RECEIVED); } /** * @dev Private function to clear current approval of a given token ID * @param tokenId uint256 ID of the token to be transferred */ function _clearApproval(uint256 tokenId) private { if (_tokenApprovals[tokenId] != address(0)) { _tokenApprovals[tokenId] = address(0); } } } // File: openzeppelin-solidity/contracts/token/ERC721/IERC721Enumerable.sol pragma solidity ^0.5.2; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract IERC721Enumerable is IERC721 { function totalSupply() public view returns (uint256); function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId); function tokenByIndex(uint256 index) public view returns (uint256); } // File: openzeppelin-solidity/contracts/token/ERC721/ERC721Enumerable.sol pragma solidity ^0.5.2; /** * @title ERC-721 Non-Fungible Token with optional enumeration extension logic * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721Enumerable is ERC165, ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => uint256[]) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63; /* * 0x780e9d63 === * bytes4(keccak256('totalSupply()')) ^ * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) ^ * bytes4(keccak256('tokenByIndex(uint256)')) */ /** * @dev Constructor function */ constructor () public { // register the supported interface to conform to ERC721Enumerable via ERC165 _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE); } /** * @dev Gets the token ID at a given index of the tokens list of the requested owner * @param owner address owning the tokens list to be accessed * @param index uint256 representing the index to be accessed of the requested tokens list * @return uint256 token ID at the given index of the tokens list owned by the requested address */ function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) { require(index < balanceOf(owner)); return _ownedTokens[owner][index]; } /** * @dev Gets the total amount of tokens stored by the contract * @return uint256 representing the total amount of tokens */ function totalSupply() public view returns (uint256) { return _allTokens.length; } /** * @dev Gets the token ID at a given index of all the tokens in this contract * Reverts if the index is greater or equal to the total number of tokens * @param index uint256 representing the index to be accessed of the tokens list * @return uint256 token ID at the given index of the tokens list */ function tokenByIndex(uint256 index) public view returns (uint256) { require(index < totalSupply()); return _allTokens[index]; } /** * @dev Internal function to transfer ownership of a given token ID to another address. * As opposed to transferFrom, this imposes no restrictions on msg.sender. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the token to be transferred */ function _transferFrom(address from, address to, uint256 tokenId) internal { super._transferFrom(from, to, tokenId); _removeTokenFromOwnerEnumeration(from, tokenId); _addTokenToOwnerEnumeration(to, tokenId); } /** * @dev Internal function to mint a new token * Reverts if the given token ID already exists * @param to address the beneficiary that will own the minted token * @param tokenId uint256 ID of the token to be minted */ function _mint(address to, uint256 tokenId) internal { super._mint(to, tokenId); _addTokenToOwnerEnumeration(to, tokenId); _addTokenToAllTokensEnumeration(tokenId); } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * Deprecated, use _burn(uint256) instead * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned */ function _burn(address owner, uint256 tokenId) internal { super._burn(owner, tokenId); _removeTokenFromOwnerEnumeration(owner, tokenId); // Since tokenId will be deleted, we can clear its slot in _ownedTokensIndex to trigger a gas refund _ownedTokensIndex[tokenId] = 0; _removeTokenFromAllTokensEnumeration(tokenId); } /** * @dev Gets the list of token IDs of the requested owner * @param owner address owning the tokens * @return uint256[] List of token IDs owned by the requested address */ function _tokensOfOwner(address owner) internal view returns (uint256[] storage) { return _ownedTokens[owner]; } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { _ownedTokensIndex[tokenId] = _ownedTokens[to].length; _ownedTokens[to].push(tokenId); } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the _ownedTokensIndex mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _ownedTokens[from].length.sub(1); uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array _ownedTokens[from].length--; // Note that _ownedTokensIndex[tokenId] hasn't been cleared: it still points to the old slot (now occupied by // lastTokenId, or just over the end of the array if the token was the last one). } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length.sub(1); uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array _allTokens.length--; _allTokensIndex[tokenId] = 0; } } // File: openzeppelin-solidity/contracts/token/ERC721/IERC721Metadata.sol pragma solidity ^0.5.2; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ contract IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } // File: openzeppelin-solidity/contracts/token/ERC721/ERC721Metadata.sol pragma solidity ^0.5.2; contract ERC721Metadata is ERC165, ERC721, IERC721Metadata { // Token name string private _name; // Token symbol string private _symbol; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f; /* * 0x5b5e139f === * bytes4(keccak256('name()')) ^ * bytes4(keccak256('symbol()')) ^ * bytes4(keccak256('tokenURI(uint256)')) */ /** * @dev Constructor function */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(_INTERFACE_ID_ERC721_METADATA); } /** * @dev Gets the token name * @return string representing the token name */ function name() external view returns (string memory) { return _name; } /** * @dev Gets the token symbol * @return string representing the token symbol */ function symbol() external view returns (string memory) { return _symbol; } /** * @dev Returns an URI for a given token ID * Throws if the token ID does not exist. May return an empty string. * @param tokenId uint256 ID of the token to query */ function tokenURI(uint256 tokenId) external view returns (string memory) { require(_exists(tokenId)); return _tokenURIs[tokenId]; } /** * @dev Internal function to set the token URI for a given token * Reverts if the token ID does not exist * @param tokenId uint256 ID of the token to set its URI * @param uri string URI to assign */ function _setTokenURI(uint256 tokenId, string memory uri) internal { require(_exists(tokenId)); _tokenURIs[tokenId] = uri; } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * Deprecated, use _burn(uint256) instead * @param owner owner of the token to burn * @param tokenId uint256 ID of the token being burned by the msg.sender */ function _burn(address owner, uint256 tokenId) internal { super._burn(owner, tokenId); // Clear metadata (if any) if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: openzeppelin-solidity/contracts/token/ERC721/ERC721Full.sol pragma solidity ^0.5.2; /** * @title Full ERC721 Token * This implementation includes all the required and some optional functionality of the ERC721 standard * Moreover, it includes approve all functionality using operator terminology * @dev see https://eips.ethereum.org/EIPS/eip-721 */ contract ERC721Full is ERC721, ERC721Enumerable, ERC721Metadata { constructor (string memory name, string memory symbol) public ERC721Metadata(name, symbol) { // solhint-disable-previous-line no-empty-blocks } } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol pragma solidity ^0.5.2; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @return the address of the owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner()); _; } /** * @return true if `msg.sender` is the owner of the contract. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Allows the current owner to relinquish control of the contract. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. * @notice Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @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 { _transferOwnership(newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/TradeableERC721Token.sol pragma solidity ^0.5.2; contract OwnableDelegateProxy { } contract ProxyRegistry { mapping(address => OwnableDelegateProxy) public proxies; } /** * @title TradeableERC721Token * TradeableERC721Token - ERC721 contract that whitelists a trading address, and has minting functionality. */ contract TradeableERC721Token is ERC721Full, Ownable { using Strings for string; address proxyRegistryAddress; uint256 private _currentTokenId = 0; constructor(string memory _name, string memory _symbol, address _proxyRegistryAddress) ERC721Full(_name, _symbol) public { proxyRegistryAddress = _proxyRegistryAddress; } /** * @dev Mints a token to an address with a tokenURI. * @param _to address of the future owner of the token */ function mintTo(address _to) public onlyOwner { uint256 newTokenId = _getNextTokenId(); _mint(_to, newTokenId); _incrementTokenId(); } /** * @dev calculates the next token ID based on value of _currentTokenId * @return uint256 for the next token ID */ function _getNextTokenId() private view returns (uint256) { return _currentTokenId.add(1); } /** * @dev increments the value of _currentTokenId */ function _incrementTokenId() private { _currentTokenId++; } function baseTokenURI() public view returns (string memory) { return ""; } function tokenURI(uint256 _tokenId) external view returns (string memory) { return Strings.strConcat( baseTokenURI(), Strings.uint2str(_tokenId) ); } /** * Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings. */ function isApprovedForAll( address owner, address operator ) public view returns (bool) { // Whitelist OpenSea proxy contract for easy trading. ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress); if (address(proxyRegistry.proxies(owner)) == operator) { return true; } return super.isApprovedForAll(owner, operator); } } // File: contracts/OpenSeaAsset.sol pragma solidity ^0.5.2; /** * @title OpenSea Asset * OpenSea Asset - A contract for easily creating custom assets on OpenSea. */ contract OpenSeaAsset is TradeableERC721Token { string private _baseTokenURI; constructor( string memory _name, string memory _symbol, address _proxyRegistryAddress, string memory baseURI ) TradeableERC721Token(_name, _symbol, _proxyRegistryAddress) public { _baseTokenURI = Strings.strConcat(baseURI, Strings.fromAddress(address(this)), "/"); } function openSeaVersion() public pure returns (string memory) { return "1.2.0"; } function baseTokenURI() public view returns (string memory) { return _baseTokenURI; } function setBaseTokenURI(string memory uri) public onlyOwner { _baseTokenURI = uri; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"uri","type":"string"}],"name":"setBaseTokenURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"openSeaVersion","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"}],"name":"mintTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"baseTokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_proxyRegistryAddress","type":"address"},{"name":"baseURI","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]
Contract Creation Code
60806040526000600e553480156200001657600080fd5b50604051620039f0380380620039f0833981018060405260808110156200003c57600080fd5b8101908080516401000000008111156200005557600080fd5b828101905060208101848111156200006c57600080fd5b81518560018202830111640100000000821117156200008a57600080fd5b50509291906020018051640100000000811115620000a757600080fd5b82810190506020810184811115620000be57600080fd5b8151856001820283011164010000000082111715620000dc57600080fd5b50509291906020018051906020019092919080516401000000008111156200010357600080fd5b828101905060208101848111156200011a57600080fd5b81518560018202830111640100000000821117156200013857600080fd5b505092919050505083838382828181620001846301ffc9a77c01000000000000000000000000000000000000000000000000000000000262000409640100000000026401000000009004565b620001c16380ac58cd7c01000000000000000000000000000000000000000000000000000000000262000409640100000000026401000000009004565b620001fe63780e9d637c01000000000000000000000000000000000000000000000000000000000262000409640100000000026401000000009004565b81600990805190602001906200021692919062000c93565b5080600a90805190602001906200022f92919062000c93565b506200026d635b5e139f7c01000000000000000000000000000000000000000000000000000000000262000409640100000000026401000000009004565b5050505033600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620003e7816200039730620004c764010000000002620028f6176401000000009004565b6040805190810160405280600181526020017f2f00000000000000000000000000000000000000000000000000000000000000815250620008166401000000000262002c3a176401000000009004565b600f9080519060200190620003fe92919062000c93565b505050505062000d42565b63ffffffff7c010000000000000000000000000000000000000000000000000000000002817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141515156200045b57600080fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606000826c0100000000000000000000000002905060007f303132333435363738396162636465660000000000000000000000000000000090506060602a6040519080825280601f01601f191660200182016040528015620005395781602001600182028038833980820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811015156200056d57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181101515620005ce57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060008090505b60148110156200080a5782600485836014811015156200062057fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908060020a82049150507f0100000000000000000000000000000000000000000000000000000000000000900460ff16601081101515620006a257fe5b1a7f01000000000000000000000000000000000000000000000000000000000000000282600280840201815181101515620006d957fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082600f7f01000000000000000000000000000000000000000000000000000000000000000285836014811015156200073d57fe5b1a7f010000000000000000000000000000000000000000000000000000000000000002167f0100000000000000000000000000000000000000000000000000000000000000900460ff166010811015156200079457fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000028260036002840201815181101515620007cc57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505062000604565b50809350505050919050565b606062000856848484602060405190810160405280600081525060206040519081016040528060008152506200085f640100000000026401000000009004565b90509392505050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f191660200182016040528015620008bc5781602001600182028038833980820191505090505b5090506060819050600080905060008090505b885181101562000986578881815181101515620008e857fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000283838060010194508151811015156200094857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050620008cf565b5060008090505b875181101562000a44578781815181101515620009a657fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151562000a0657fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506200098d565b5060008090505b865181101562000b0257868181518110151562000a6457fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151562000ac457fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505062000a4b565b5060008090505b855181101562000bc057858181518110151562000b2257fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151562000b8257fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505062000b09565b5060008090505b845181101562000c7e57848181518110151562000be057fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151562000c4057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505062000bc7565b50819850505050505050505095945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000cd657805160ff191683800117855562000d07565b8280016001018555821562000d07579182015b8281111562000d0657825182559160200191906001019062000ce9565b5b50905062000d16919062000d1a565b5090565b62000d3f91905b8082111562000d3b57600081600090555060010162000d21565b5090565b90565b612c9e8062000d526000396000f3fe608060405234801561001057600080fd5b5060043610610175576000357c01000000000000000000000000000000000000000000000000000000009004806370a08231116100e0578063a22cb46511610099578063a22cb465146107fd578063b88d4fde1461084d578063c87b56dd14610952578063d547cfb7146109f9578063e985e9c514610a7c578063f2fde38b14610af857610175565b806370a0823114610668578063715018a6146106c0578063755edd17146106ca5780638da5cb5b1461070e5780638f32d59b1461075857806395d89b411461077a57610175565b80632f745c59116101325780632f745c59146103aa57806330176e131461040c5780634060b25e146104c757806342842e0e1461054a5780634f6ccce7146105b85780636352211e146105fa57610175565b806301ffc9a71461017a57806306fdde03146101df578063081812fc14610262578063095ea7b3146102d057806318160ddd1461031e57806323b872dd1461033c575b600080fd5b6101c56004803603602081101561019057600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610b3c565b604051808215151515815260200191505060405180910390f35b6101e7610ba3565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022757808201518184015260208101905061020c565b50505050905090810190601f1680156102545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61028e6004803603602081101561027857600080fd5b8101908080359060200190929190505050610c45565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61031c600480360360408110156102e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c96565b005b610326610ddb565b6040518082815260200191505060405180910390f35b6103a86004803603606081101561035257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610de8565b005b6103f6600480360360408110156103c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e0d565b6040518082815260200191505060405180910390f35b6104c56004803603602081101561042257600080fd5b810190808035906020019064010000000081111561043f57600080fd5b82018360208201111561045157600080fd5b8035906020019184600183028401116401000000008311171561047357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610e84565b005b6104cf610eb1565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561050f5780820151818401526020810190506104f4565b50505050905090810190601f16801561053c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105b66004803603606081101561056057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eee565b005b6105e4600480360360208110156105ce57600080fd5b8101908080359060200190929190505050610f0f565b6040518082815260200191505060405180910390f35b6106266004803603602081101561061057600080fd5b8101908080359060200190929190505050610f47565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106aa6004803603602081101561067e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fc5565b6040518082815260200191505060405180910390f35b6106c8611050565b005b61070c600480360360208110156106e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611124565b005b610716611159565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610760611183565b604051808215151515815260200191505060405180910390f35b6107826111db565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107c25780820151818401526020810190506107a7565b50505050905090810190601f1680156107ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61084b6004803603604081101561081357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061127d565b005b6109506004803603608081101561086357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156108ca57600080fd5b8201836020820111156108dc57600080fd5b803590602001918460018302840111640100000000831117156108fe57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506113b9565b005b61097e6004803603602081101561096857600080fd5b81019080803590602001909291905050506113e1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109be5780820151818401526020810190506109a3565b50505050905090810190601f1680156109eb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a01611403565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a41578082015181840152602081019050610a26565b50505050905090810190601f168015610a6e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610ade60048036036040811015610a9257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114a5565b604051808215151515815260200191505060405180910390f35b610b3a60048036036020811015610b0e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115f2565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c3b5780601f10610c1057610100808354040283529160200191610c3b565b820191906000526020600020905b815481529060010190602001808311610c1e57829003601f168201915b5050505050905090565b6000610c5082611611565b1515610c5b57600080fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ca182610f47565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cde57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d1e5750610d1d81336114a5565b5b1515610d2957600080fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000600780549050905090565b610df23382611683565b1515610dfd57600080fd5b610e08838383611718565b505050565b6000610e1883610fc5565b82101515610e2557600080fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515610e7157fe5b9060005260206000200154905092915050565b610e8c611183565b1515610e9757600080fd5b80600f9080519060200190610ead929190612825565b5050565b60606040805190810160405280600581526020017f312e322e30000000000000000000000000000000000000000000000000000000815250905090565b610f0a83838360206040519081016040528060008152506113b9565b505050565b6000610f19610ddb565b82101515610f2657600080fd5b600782815481101515610f3557fe5b90600052602060002001549050919050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610fbc57600080fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561100257600080fd5b611049600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061173c565b9050919050565b611058611183565b151561106357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61112c611183565b151561113757600080fd5b600061114161174a565b905061114d8282611767565b611155611788565b5050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112735780601f1061124857610100808354040283529160200191611273565b820191906000526020600020905b81548152906001019060200180831161125657829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156112b857600080fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b6113c4848484610de8565b6113d08484848461179c565b15156113db57600080fd5b50505050565b60606113fc6113ee611403565b6113f7846119bf565b611b18565b9050919050565b6060600f8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561149b5780601f106114705761010080835404028352916020019161149b565b820191906000526020600020905b81548152906001019060200180831161147e57829003601f168201915b5050505050905090565b600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561157d57600080fd5b505afa158015611591573d6000803e3d6000fd5b505050506040513d60208110156115a757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614156115de5760019150506115ec565b6115e88484611b5f565b9150505b92915050565b6115fa611183565b151561160557600080fd5b61160e81611bf3565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b60008061168f83610f47565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116fe57508373ffffffffffffffffffffffffffffffffffffffff166116e684610c45565b73ffffffffffffffffffffffffffffffffffffffff16145b8061170f575061170e81856114a5565b5b91505092915050565b611723838383611cef565b61172d8382611eb6565b611737828261205a565b505050565b600081600001549050919050565b60006117626001600e5461212190919063ffffffff16565b905090565b6117718282612142565b61177b828261205a565b6117848161228c565b5050565b600e60008154809291906001019190505550565b60006117bd8473ffffffffffffffffffffffffffffffffffffffff166122d8565b15156117cc57600190506119b7565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156118c35780820151818401526020810190506118a8565b50505050905090810190601f1680156118f05780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561191257600080fd5b505af1158015611926573d6000803e3d6000fd5b505050506040513d602081101561193c57600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b60606000821415611a07576040805190810160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611b13565b600082905060005b600082141515611a35578080600101915050600a82811515611a2d57fe5b049150611a0f565b6060816040519080825280601f01601f191660200182016040528015611a6a5781602001600182028038833980820191505090505b50905060006001830390505b600086141515611b0b57600a86811515611a8c57fe5b066030017f010000000000000000000000000000000000000000000000000000000000000002828280600190039350815181101515611ac757fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a86811515611b0357fe5b049550611a76565b819450505050505b919050565b6060611b5783836020604051908101604052806000815250602060405190810160405280600081525060206040519081016040528060008152506122eb565b905092915050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611c2f57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff16611d0f82610f47565b73ffffffffffffffffffffffffffffffffffffffff16141515611d3157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d6d57600080fd5b611d768161270a565b611dbd600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206127ca565b611e04600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206127ed565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000611f0e6001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061280390919063ffffffff16565b90506000600660008481526020019081526020016000205490508181141515612001576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515611f7f57fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515611fd957fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548091906001900361205391906128a5565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b600080828401905083811015151561213857600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561217e57600080fd5b61218781611611565b15151561219357600080fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061222c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206127ed565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600080823b905060008111915050919050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156123475781602001600182028038833980820191505090505b5090506060819050600080905060008090505b885181101561240d57888181518110151561237157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000283838060010194508151811015156123d057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061235a565b5060008090505b87518110156124c757878181518110151561242b57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561248a57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612414565b5060008090505b86518110156125815786818151811015156124e557fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561254457fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506124ce565b5060008090505b855181101561263b57858181518110151561259f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000283838060010194508151811015156125fe57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612588565b5060008090505b84518110156126f557848181518110151561265957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000283838060010194508151811015156126b857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612642565b50819850505050505050505095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156127c75760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6127e26001826000015461280390919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b600082821115151561281457600080fd5b600082840390508091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061286657805160ff1916838001178555612894565b82800160010185558215612894579182015b82811115612893578251825591602001919060010190612878565b5b5090506128a191906128d1565b5090565b8154818355818111156128cc578183600052602060002091820191016128cb91906128d1565b5b505050565b6128f391905b808211156128ef5760008160009055506001016128d7565b5090565b90565b60606000826c0100000000000000000000000002905060007f303132333435363738396162636465660000000000000000000000000000000090506060602a6040519080825280601f01601f1916602001820160405280156129675781602001600182028038833980820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110151561299a57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811015156129fa57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060008090505b6014811015612c2e578260048583601481101515612a4a57fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908060020a82049150507f0100000000000000000000000000000000000000000000000000000000000000900460ff16601081101515612acb57fe5b1a7f01000000000000000000000000000000000000000000000000000000000000000282600280840201815181101515612b0157fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082600f7f0100000000000000000000000000000000000000000000000000000000000000028583601481101515612b6457fe5b1a7f010000000000000000000000000000000000000000000000000000000000000002167f0100000000000000000000000000000000000000000000000000000000000000900460ff16601081101515612bba57fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000028260036002840201815181101515612bf157fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612a30565b50809350505050919050565b6060612c69848484602060405190810160405280600081525060206040519081016040528060008152506122eb565b9050939250505056fea165627a7a723058200a8c11acd389514f9d04bb1446b06727b4c9912c1105a587e95e3a46d3f109050029000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000007333635444159530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044441595300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f6170692e6f70656e7365612e696f2f6170692f76312f6d657461646174612f00000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b5060043610610175576000357c01000000000000000000000000000000000000000000000000000000009004806370a08231116100e0578063a22cb46511610099578063a22cb465146107fd578063b88d4fde1461084d578063c87b56dd14610952578063d547cfb7146109f9578063e985e9c514610a7c578063f2fde38b14610af857610175565b806370a0823114610668578063715018a6146106c0578063755edd17146106ca5780638da5cb5b1461070e5780638f32d59b1461075857806395d89b411461077a57610175565b80632f745c59116101325780632f745c59146103aa57806330176e131461040c5780634060b25e146104c757806342842e0e1461054a5780634f6ccce7146105b85780636352211e146105fa57610175565b806301ffc9a71461017a57806306fdde03146101df578063081812fc14610262578063095ea7b3146102d057806318160ddd1461031e57806323b872dd1461033c575b600080fd5b6101c56004803603602081101561019057600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610b3c565b604051808215151515815260200191505060405180910390f35b6101e7610ba3565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022757808201518184015260208101905061020c565b50505050905090810190601f1680156102545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61028e6004803603602081101561027857600080fd5b8101908080359060200190929190505050610c45565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61031c600480360360408110156102e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c96565b005b610326610ddb565b6040518082815260200191505060405180910390f35b6103a86004803603606081101561035257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610de8565b005b6103f6600480360360408110156103c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e0d565b6040518082815260200191505060405180910390f35b6104c56004803603602081101561042257600080fd5b810190808035906020019064010000000081111561043f57600080fd5b82018360208201111561045157600080fd5b8035906020019184600183028401116401000000008311171561047357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610e84565b005b6104cf610eb1565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561050f5780820151818401526020810190506104f4565b50505050905090810190601f16801561053c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105b66004803603606081101561056057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610eee565b005b6105e4600480360360208110156105ce57600080fd5b8101908080359060200190929190505050610f0f565b6040518082815260200191505060405180910390f35b6106266004803603602081101561061057600080fd5b8101908080359060200190929190505050610f47565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106aa6004803603602081101561067e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fc5565b6040518082815260200191505060405180910390f35b6106c8611050565b005b61070c600480360360208110156106e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611124565b005b610716611159565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610760611183565b604051808215151515815260200191505060405180910390f35b6107826111db565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156107c25780820151818401526020810190506107a7565b50505050905090810190601f1680156107ef5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61084b6004803603604081101561081357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080351515906020019092919050505061127d565b005b6109506004803603608081101561086357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156108ca57600080fd5b8201836020820111156108dc57600080fd5b803590602001918460018302840111640100000000831117156108fe57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506113b9565b005b61097e6004803603602081101561096857600080fd5b81019080803590602001909291905050506113e1565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109be5780820151818401526020810190506109a3565b50505050905090810190601f1680156109eb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a01611403565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a41578082015181840152602081019050610a26565b50505050905090810190601f168015610a6e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610ade60048036036040811015610a9257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114a5565b604051808215151515815260200191505060405180910390f35b610b3a60048036036020811015610b0e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115f2565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c3b5780601f10610c1057610100808354040283529160200191610c3b565b820191906000526020600020905b815481529060010190602001808311610c1e57829003601f168201915b5050505050905090565b6000610c5082611611565b1515610c5b57600080fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ca182610f47565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cde57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d1e5750610d1d81336114a5565b5b1515610d2957600080fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000600780549050905090565b610df23382611683565b1515610dfd57600080fd5b610e08838383611718565b505050565b6000610e1883610fc5565b82101515610e2557600080fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515610e7157fe5b9060005260206000200154905092915050565b610e8c611183565b1515610e9757600080fd5b80600f9080519060200190610ead929190612825565b5050565b60606040805190810160405280600581526020017f312e322e30000000000000000000000000000000000000000000000000000000815250905090565b610f0a83838360206040519081016040528060008152506113b9565b505050565b6000610f19610ddb565b82101515610f2657600080fd5b600782815481101515610f3557fe5b90600052602060002001549050919050565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610fbc57600080fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561100257600080fd5b611049600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061173c565b9050919050565b611058611183565b151561106357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61112c611183565b151561113757600080fd5b600061114161174a565b905061114d8282611767565b611155611788565b5050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112735780601f1061124857610100808354040283529160200191611273565b820191906000526020600020905b81548152906001019060200180831161125657829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156112b857600080fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b6113c4848484610de8565b6113d08484848461179c565b15156113db57600080fd5b50505050565b60606113fc6113ee611403565b6113f7846119bf565b611b18565b9050919050565b6060600f8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561149b5780601f106114705761010080835404028352916020019161149b565b820191906000526020600020905b81548152906001019060200180831161147e57829003601f168201915b5050505050905090565b600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561157d57600080fd5b505afa158015611591573d6000803e3d6000fd5b505050506040513d60208110156115a757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614156115de5760019150506115ec565b6115e88484611b5f565b9150505b92915050565b6115fa611183565b151561160557600080fd5b61160e81611bf3565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b60008061168f83610f47565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116fe57508373ffffffffffffffffffffffffffffffffffffffff166116e684610c45565b73ffffffffffffffffffffffffffffffffffffffff16145b8061170f575061170e81856114a5565b5b91505092915050565b611723838383611cef565b61172d8382611eb6565b611737828261205a565b505050565b600081600001549050919050565b60006117626001600e5461212190919063ffffffff16565b905090565b6117718282612142565b61177b828261205a565b6117848161228c565b5050565b600e60008154809291906001019190505550565b60006117bd8473ffffffffffffffffffffffffffffffffffffffff166122d8565b15156117cc57600190506119b7565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156118c35780820151818401526020810190506118a8565b50505050905090810190601f1680156118f05780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561191257600080fd5b505af1158015611926573d6000803e3d6000fd5b505050506040513d602081101561193c57600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b60606000821415611a07576040805190810160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611b13565b600082905060005b600082141515611a35578080600101915050600a82811515611a2d57fe5b049150611a0f565b6060816040519080825280601f01601f191660200182016040528015611a6a5781602001600182028038833980820191505090505b50905060006001830390505b600086141515611b0b57600a86811515611a8c57fe5b066030017f010000000000000000000000000000000000000000000000000000000000000002828280600190039350815181101515611ac757fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a86811515611b0357fe5b049550611a76565b819450505050505b919050565b6060611b5783836020604051908101604052806000815250602060405190810160405280600081525060206040519081016040528060008152506122eb565b905092915050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611c2f57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff16611d0f82610f47565b73ffffffffffffffffffffffffffffffffffffffff16141515611d3157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d6d57600080fd5b611d768161270a565b611dbd600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206127ca565b611e04600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206127ed565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000611f0e6001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061280390919063ffffffff16565b90506000600660008481526020019081526020016000205490508181141515612001576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515611f7f57fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515611fd957fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548091906001900361205391906128a5565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b600080828401905083811015151561213857600080fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561217e57600080fd5b61218781611611565b15151561219357600080fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061222c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206127ed565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600080823b905060008111915050919050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f1916602001820160405280156123475781602001600182028038833980820191505090505b5090506060819050600080905060008090505b885181101561240d57888181518110151561237157fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000283838060010194508151811015156123d057fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350808060010191505061235a565b5060008090505b87518110156124c757878181518110151561242b57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561248a57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612414565b5060008090505b86518110156125815786818151811015156124e557fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f010000000000000000000000000000000000000000000000000000000000000002838380600101945081518110151561254457fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806001019150506124ce565b5060008090505b855181101561263b57858181518110151561259f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000283838060010194508151811015156125fe57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612588565b5060008090505b84518110156126f557848181518110151561265957fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f01000000000000000000000000000000000000000000000000000000000000000283838060010194508151811015156126b857fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612642565b50819850505050505050505095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156127c75760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6127e26001826000015461280390919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b600082821115151561281457600080fd5b600082840390508091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061286657805160ff1916838001178555612894565b82800160010185558215612894579182015b82811115612893578251825591602001919060010190612878565b5b5090506128a191906128d1565b5090565b8154818355818111156128cc578183600052602060002091820191016128cb91906128d1565b5b505050565b6128f391905b808211156128ef5760008160009055506001016128d7565b5090565b90565b60606000826c0100000000000000000000000002905060007f303132333435363738396162636465660000000000000000000000000000000090506060602a6040519080825280601f01601f1916602001820160405280156129675781602001600182028038833980820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110151561299a57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811015156129fa57fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060008090505b6014811015612c2e578260048583601481101515612a4a57fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908060020a82049150507f0100000000000000000000000000000000000000000000000000000000000000900460ff16601081101515612acb57fe5b1a7f01000000000000000000000000000000000000000000000000000000000000000282600280840201815181101515612b0157fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082600f7f0100000000000000000000000000000000000000000000000000000000000000028583601481101515612b6457fe5b1a7f010000000000000000000000000000000000000000000000000000000000000002167f0100000000000000000000000000000000000000000000000000000000000000900460ff16601081101515612bba57fe5b1a7f0100000000000000000000000000000000000000000000000000000000000000028260036002840201815181101515612bf157fe5b9060200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050612a30565b50809350505050919050565b6060612c69848484602060405190810160405280600081525060206040519081016040528060008152506122eb565b9050939250505056fea165627a7a723058200a8c11acd389514f9d04bb1446b06727b4c9912c1105a587e95e3a46d3f109050029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c100000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000007333635444159530000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044441595300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002768747470733a2f2f6170692e6f70656e7365612e696f2f6170692f76312f6d657461646174612f00000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): 365DAYS
Arg [1] : _symbol (string): DAYS
Arg [2] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1
Arg [3] : baseURI (string): https://api.opensea.io/api/v1/metadata/
-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [5] : 3336354441595300000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [7] : 4441595300000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000027
Arg [9] : 68747470733a2f2f6170692e6f70656e7365612e696f2f6170692f76312f6d65
Arg [10] : 7461646174612f00000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
40592:680:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40592:680:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10971:135;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10971:135:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33709:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;33709:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15099:154;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15099:154:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14507:299;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14507:299:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25492:96;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16690:184;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16690:184:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25149:185;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25149:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41176:93;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41176:93:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;41176:93:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41176:93:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;41176:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;41176:93:0;;;;;;;;;;;;;;;:::i;:::-;;40982:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;40982:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17520:134;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17520:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25933:151;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;25933:151:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13895:181;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13895:181:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13507:163;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13507:163:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37456:140;;;:::i;:::-;;39066:152;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;39066:152:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;36666:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37001:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33908:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;33908:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15553:217;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15553:217:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18373:214;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;18373:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;18373:214:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18373:214:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;18373:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;18373:214:0;;;;;;;;;;;;;;;:::i;:::-;;39696:180;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;39696:180:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;39696:180:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41077:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;41077:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40000:402;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;40000:402:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37773:109;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;37773:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;10971:135;11041:4;11065:20;:33;11086:11;11065:33;;;;;;;;;;;;;;;;;;;;;;;;;;;11058:40;;10971:135;;;:::o;33709:85::-;33748:13;33781:5;33774:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33709:85;:::o;15099:154::-;15158:7;15186:16;15194:7;15186;:16::i;:::-;15178:25;;;;;;;;15221:15;:24;15237:7;15221:24;;;;;;;;;;;;;;;;;;;;;15214:31;;15099:154;;;:::o;14507:299::-;14571:13;14587:16;14595:7;14587;:16::i;:::-;14571:32;;14628:5;14622:11;;:2;:11;;;;14614:20;;;;;;;;14667:5;14653:19;;:10;:19;;;:58;;;;14676:35;14693:5;14700:10;14676:16;:35::i;:::-;14653:58;14645:67;;;;;;;;14752:2;14725:15;:24;14741:7;14725:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;14790:7;14786:2;14770:28;;14779:5;14770:28;;;;;;;;;;;;14507:299;;;:::o;25492:96::-;25536:7;25563:10;:17;;;;25556:24;;25492:96;:::o;16690:184::-;16781:39;16800:10;16812:7;16781:18;:39::i;:::-;16773:48;;;;;;;;16834:32;16848:4;16854:2;16858:7;16834:13;:32::i;:::-;16690:184;;;:::o;25149:185::-;25229:7;25265:16;25275:5;25265:9;:16::i;:::-;25257:5;:24;25249:33;;;;;;;;25300:12;:19;25313:5;25300:19;;;;;;;;;;;;;;;25320:5;25300:26;;;;;;;;;;;;;;;;;;25293:33;;25149:185;;;;:::o;41176:93::-;36878:9;:7;:9::i;:::-;36870:18;;;;;;;;41260:3;41244:13;:19;;;;;;;;;;;;:::i;:::-;;41176:93;:::o;40982:89::-;41029:13;41051:14;;;;;;;;;;;;;;;;;;;;40982:89;:::o;17520:134::-;17607:39;17624:4;17630:2;17634:7;17607:39;;;;;;;;;;;;;:16;:39::i;:::-;17520:134;;;:::o;25933:151::-;25991:7;26027:13;:11;:13::i;:::-;26019:5;:21;26011:30;;;;;;;;26059:10;26070:5;26059:17;;;;;;;;;;;;;;;;;;26052:24;;25933:151;;;:::o;13895:181::-;13950:7;13970:13;13986:11;:20;13998:7;13986:20;;;;;;;;;;;;;;;;;;;;;13970:36;;14042:1;14025:19;;:5;:19;;;;14017:28;;;;;;;;14063:5;14056:12;;;13895:181;;;:::o;13507:163::-;13562:7;13607:1;13590:19;;:5;:19;;;;13582:28;;;;;;;;13628:34;:17;:24;13646:5;13628:24;;;;;;;;;;;;;;;:32;:34::i;:::-;13621:41;;13507:163;;;:::o;37456:140::-;36878:9;:7;:9::i;:::-;36870:18;;;;;;;;37555:1;37518:40;;37539:6;;;;;;;;;;;37518:40;;;;;;;;;;;;37586:1;37569:6;;:19;;;;;;;;;;;;;;;;;;37456:140::o;39066:152::-;36878:9;:7;:9::i;:::-;36870:18;;;;;;;;39119;39140:17;:15;:17::i;:::-;39119:38;;39164:22;39170:3;39175:10;39164:5;:22::i;:::-;39193:19;:17;:19::i;:::-;36899:1;39066:152;:::o;36666:79::-;36704:7;36731:6;;;;;;;;;;;36724:13;;36666:79;:::o;37001:92::-;37041:4;37079:6;;;;;;;;;;;37065:20;;:10;:20;;;37058:27;;37001:92;:::o;33908:89::-;33949:13;33982:7;33975:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33908:89;:::o;15553:217::-;15639:10;15633:16;;:2;:16;;;;15625:25;;;;;;;;15698:8;15661:18;:30;15680:10;15661:30;;;;;;;;;;;;;;;:34;15692:2;15661:34;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;15749:2;15722:40;;15737:10;15722:40;;;15753:8;15722:40;;;;;;;;;;;;;;;;;;;;;;15553:217;;:::o;18373:214::-;18480:31;18493:4;18499:2;18503:7;18480:12;:31::i;:::-;18530:48;18553:4;18559:2;18563:7;18572:5;18530:22;:48::i;:::-;18522:57;;;;;;;;18373:214;;;;:::o;39696:180::-;39755:13;39784:86;39812:14;:12;:14::i;:::-;39837:26;39854:8;39837:16;:26::i;:::-;39784:17;:86::i;:::-;39777:93;;39696:180;;;:::o;41077:93::-;41122:13;41151;41144:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41077:93;:::o;40000:402::-;40110:4;40185:27;40229:20;;;;;;;;;;;40185:65;;40302:8;40261:49;;40269:13;:21;;;40291:5;40269:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40269:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;40269:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;40269:28:0;;;;;;;;;;;;;;;;40261:49;;;40257:85;;;40330:4;40323:11;;;;;40257:85;40357:39;40380:5;40387:8;40357:22;:39::i;:::-;40350:46;;;40000:402;;;;;:::o;37773:109::-;36878:9;:7;:9::i;:::-;36870:18;;;;;;;;37846:28;37865:8;37846:18;:28::i;:::-;37773:109;:::o;18788:155::-;18845:4;18862:13;18878:11;:20;18890:7;18878:20;;;;;;;;;;;;;;;;;;;;;18862:36;;18933:1;18916:19;;:5;:19;;;;18909:26;;;18788:155;;;:::o;19312:249::-;19397:4;19414:13;19430:16;19438:7;19430;:16::i;:::-;19414:32;;19476:5;19465:16;;:7;:16;;;:51;;;;19509:7;19485:31;;:20;19497:7;19485:11;:20::i;:::-;:31;;;19465:51;:87;;;;19520:32;19537:5;19544:7;19520:16;:32::i;:::-;19465:87;19457:96;;;19312:249;;;;:::o;26468:245::-;26554:38;26574:4;26580:2;26584:7;26554:19;:38::i;:::-;26605:47;26638:4;26644:7;26605:32;:47::i;:::-;26665:40;26693:2;26697:7;26665:27;:40::i;:::-;26468:245;;;:::o;9780:114::-;9845:7;9872;:14;;;9865:21;;9780:114;;;:::o;39360:100::-;39409:7;39432:22;39452:1;39432:15;;:19;;:22;;;;:::i;:::-;39425:29;;39360:100;:::o;26976:202::-;27040:24;27052:2;27056:7;27040:11;:24::i;:::-;27077:40;27105:2;27109:7;27077:27;:40::i;:::-;27130;27162:7;27130:31;:40::i;:::-;26976:202;;:::o;39534:68::-;39579:15;;:17;;;;;;;;;;;;;39534:68::o;22228:356::-;22350:4;22377:15;:2;:13;;;:15::i;:::-;22376:16;22372:60;;;22416:4;22409:11;;;;22372:60;22444:13;22476:2;22460:36;;;22497:10;22509:4;22515:7;22524:5;22460:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;22460:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22460:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22460:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22460:70:0;;;;;;;;;;;;;;;;22444:86;;11962:10;22559:16;;22549:26;;;:6;:26;;;;22541:35;;;22228:356;;;;;;;:::o;1511:406::-;1561:27;1607:1;1601:2;:7;1597:40;;;1619:10;;;;;;;;;;;;;;;;;;;;;;1597:40;1643:6;1652:2;1643:11;;1661:8;1676:53;1688:1;1683;:6;;1676:53;;;1700:5;;;;;;;1719:2;1714:7;;;;;;;;;;;1676:53;;;1735:17;1765:3;1755:14;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;1755:14:0;;;;1735:34;;1776:6;1791:1;1785:3;:7;1776:16;;1799:87;1812:1;1806:2;:7;;1799:87;;;1857:2;1852;:7;;;;;;;;1847:2;:12;1836:25;;1824:4;1829:3;;;;;;;1824:9;;;;;;;;;;;;;;:37;;;;;;;;;;;1876:2;1870:8;;;;;;;;;;;1799:87;;;1906:4;1892:19;;;;;;1511:406;;;;:::o;1363:142::-;1441:13;1470:29;1480:2;1484;1470:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:29::i;:::-;1463:36;;1363:142;;;;:::o;16099:147::-;16179:4;16203:18;:25;16222:5;16203:25;;;;;;;;;;;;;;;:35;16229:8;16203:35;;;;;;;;;;;;;;;;;;;;;;;;;16196:42;;16099:147;;;;:::o;38032:187::-;38126:1;38106:22;;:8;:22;;;;38098:31;;;;;;;;38174:8;38145:38;;38166:6;;;;;;;;;;;38145:38;;;;;;;;;;;;38203:8;38194:6;;:17;;;;;;;;;;;;;;;;;;38032:187;:::o;21315:374::-;21429:4;21409:24;;:16;21417:7;21409;:16::i;:::-;:24;;;21401:33;;;;;;;;21467:1;21453:16;;:2;:16;;;;21445:25;;;;;;;;21483:23;21498:7;21483:14;:23::i;:::-;21519:35;:17;:23;21537:4;21519:23;;;;;;;;;;;;;;;:33;:35::i;:::-;21565:33;:17;:21;21583:2;21565:21;;;;;;;;;;;;;;;:31;:33::i;:::-;21634:2;21611:11;:20;21623:7;21611:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;21673:7;21669:2;21654:27;;21663:4;21654:27;;;;;;;;;;;;21315:374;;;:::o;29645:1148::-;29911:22;29936:32;29966:1;29936:12;:18;29949:4;29936:18;;;;;;;;;;;;;;;:25;;;;:29;;:32;;;;:::i;:::-;29911:57;;29979:18;30000:17;:26;30018:7;30000:26;;;;;;;;;;;;29979:47;;30147:14;30133:10;:28;;30129:328;;;30178:19;30200:12;:18;30213:4;30200:18;;;;;;;;;;;;;;;30219:14;30200:34;;;;;;;;;;;;;;;;;;30178:56;;30284:11;30251:12;:18;30264:4;30251:18;;;;;;;;;;;;;;;30270:10;30251:30;;;;;;;;;;;;;;;;;:44;;;;30401:10;30368:17;:30;30386:11;30368:30;;;;;;;;;;;:43;;;;30129:328;;30546:12;:18;30559:4;30546:18;;;;;;;;;;;;;;;:27;;;;;;;;;;;;:::i;:::-;;29645:1148;;;;:::o;28469:186::-;28583:12;:16;28596:2;28583:16;;;;;;;;;;;;;;;:23;;;;28554:17;:26;28572:7;28554:26;;;;;;;;;;;:52;;;;28617:12;:16;28630:2;28617:16;;;;;;;;;;;;;;;28639:7;28617:30;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;28617:30:0;;;;;;;;;;;;;;;;;;;;;;28469:186;;:::o;7047:150::-;7105:7;7125:9;7141:1;7137;:5;7125:17;;7166:1;7161;:6;;7153:15;;;;;;;;7188:1;7181:8;;;7047:150;;;;:::o;19812:267::-;19898:1;19884:16;;:2;:16;;;;19876:25;;;;;;;;19921:16;19929:7;19921;:16::i;:::-;19920:17;19912:26;;;;;;;;19974:2;19951:11;:20;19963:7;19951:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;19987:33;:17;:21;20005:2;19987:21;;;;;;;;;;;;;;;:31;:33::i;:::-;20063:7;20059:2;20038:33;;20055:1;20038:33;;;;;;;;;;;;19812:267;;:::o;28856:164::-;28960:10;:17;;;;28933:15;:24;28949:7;28933:24;;;;;;;;;;;:44;;;;28988:10;29004:7;28988:24;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;28988:24:0;;;;;;;;;;;;;;;;;;;;;;28856:164;:::o;8027:627::-;8087:4;8104:12;8611:7;8599:20;8591:28;;8645:1;8638:4;:8;8631:15;;;8027:627;;;:::o;165:842::-;297:13;319:16;344:2;319:28;;354:16;379:2;354:28;;389:16;414:2;389:28;;424:16;449:2;424:28;;459:16;484:2;459:28;;494:19;579:3;:10;566:3;:10;553:3;:10;540:3;:10;527:3;:10;:23;:36;:49;:62;516:74;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;516:74:0;;;;494:96;;597:19;625:5;597:34;;638:6;647:1;638:10;;660:6;669:1;660:10;;655:58;676:3;:10;672:1;:14;655:58;;;707:3;711:1;707:6;;;;;;;;;;;;;;;;;;;;693;700:3;;;;;;693:11;;;;;;;;;;;;;;:20;;;;;;;;;;;688:3;;;;;;;655:58;;;;725:6;734:1;725:10;;720:58;741:3;:10;737:1;:14;720:58;;;772:3;776:1;772:6;;;;;;;;;;;;;;;;;;;;758;765:3;;;;;;758:11;;;;;;;;;;;;;;:20;;;;;;;;;;;753:3;;;;;;;720:58;;;;790:6;799:1;790:10;;785:58;806:3;:10;802:1;:14;785:58;;;837:3;841:1;837:6;;;;;;;;;;;;;;;;;;;;823;830:3;;;;;;823:11;;;;;;;;;;;;;;:20;;;;;;;;;;;818:3;;;;;;;785:58;;;;855:6;864:1;855:10;;850:58;871:3;:10;867:1;:14;850:58;;;902:3;906:1;902:6;;;;;;;;;;;;;;;;;;;;888;895:3;;;;;;888:11;;;;;;;;;;;;;;:20;;;;;;;;;;;883:3;;;;;;;850:58;;;;920:6;929:1;920:10;;915:58;936:3;:10;932:1;:14;915:58;;;967:3;971:1;967:6;;;;;;;;;;;;;;;;;;;;953;960:3;;;;;;953:11;;;;;;;;;;;;;;:20;;;;;;;;;;;948:3;;;;;;;915:58;;;;994:6;980:21;;;;;;;;;;165:842;;;;;;;:::o;22751:175::-;22851:1;22815:38;;:15;:24;22831:7;22815:24;;;;;;;;;;;;;;;;;;;;;:38;;;;22811:108;;;22905:1;22870:15;:24;22886:7;22870:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;22811:108;22751:175;:::o;10001:110::-;10082:21;10101:1;10082:7;:14;;;:18;;:21;;;;:::i;:::-;10065:7;:14;;:38;;;;10001:110;:::o;9902:91::-;9984:1;9966:7;:14;;;:19;;;;;;;;;;;9902:91;:::o;6809:150::-;6867:7;6900:1;6895;:6;;6887:15;;;;;;;;6913:9;6929:1;6925;:5;6913:17;;6950:1;6943:8;;;6809:150;;;;:::o;40592:680::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1923:457::-;1980:13;2002:17;2030:4;2022:13;;2002:33;;2042:19;:40;;;2089:19;2121:2;2111:13;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;2111:13:0;;;;2089:35;;2131:15;:6;2138:1;2131:9;;;;;;;;;;;;;;:15;;;;;;;;;;;2153;:6;2160:1;2153:9;;;;;;;;;;;;;;:15;;;;;;;;;;;2180:6;2189:1;2180:10;;2175:172;2196:2;2192:1;:6;2175:172;;;2234:11;2268:1;2252:9;2262:1;2252:12;;;;;;;;;;;;:17;;;;52:12:-1;49:1;45:20;29:14;25:41;7:59;;2252:17:0;2246:24;;;2234:37;;;;;;;;;;;;;;2214:6;2229:1;2225;2221;:5;:9;2214:17;;;;;;;;;;;;;;:57;;;;;;;;;;;2300:11;2333:4;2318:19;;:9;2328:1;2318:12;;;;;;;;;;;;:19;2312:26;;;2300:39;;;;;;;;;;;;;;2280:6;2295:1;2291;2287;:5;:9;2280:17;;;;;;;;;;;;;;:59;;;;;;;;;;;2200:3;;;;;;;2175:172;;;;2367:6;2353:21;;;;;1923:457;;;:::o;1197:160::-;1293:13;1322:29;1332:2;1336;1340;1322:29;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:29::i;:::-;1315:36;;1197:160;;;;;:::o
Swarm Source
bzzr://0a8c11acd389514f9d04bb1446b06727b4c9912c1105a587e95e3a46d3f10905
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.