Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 40,254 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer From Fo... | 13475036 | 1173 days ago | IN | 0 ETH | 0.00654477 | ||||
Transfer From Fo... | 13475033 | 1173 days ago | IN | 0 ETH | 0.00695672 | ||||
Transfer From Fo... | 13471479 | 1174 days ago | IN | 0 ETH | 0.0093182 | ||||
Transfer From Fo... | 13454776 | 1176 days ago | IN | 0 ETH | 0.00689606 | ||||
Transfer From Fo... | 13345044 | 1193 days ago | IN | 0 ETH | 0.0077809 | ||||
Transfer From Fo... | 13344083 | 1194 days ago | IN | 0 ETH | 0.00617286 | ||||
Transfer From Fo... | 13343811 | 1194 days ago | IN | 0 ETH | 0.00605605 | ||||
Transfer From Fo... | 13307096 | 1199 days ago | IN | 0 ETH | 0.00745616 | ||||
Transfer From Fo... | 13287881 | 1202 days ago | IN | 0 ETH | 0.0076102 | ||||
Transfer From Fo... | 13278124 | 1204 days ago | IN | 0 ETH | 0.00627737 | ||||
Transfer From Fo... | 13268411 | 1205 days ago | IN | 0 ETH | 0.00521752 | ||||
Transfer From Fo... | 13268403 | 1205 days ago | IN | 0 ETH | 0.00568411 | ||||
Transfer From Fo... | 13254017 | 1208 days ago | IN | 0 ETH | 0.0050961 | ||||
Transfer From Fo... | 13106461 | 1230 days ago | IN | 0 ETH | 0.00606675 | ||||
Resolve To For | 13097366 | 1232 days ago | IN | 0 ETH | 0.0085966 | ||||
Transfer From Fo... | 13082782 | 1234 days ago | IN | 0 ETH | 0.0076102 | ||||
Transfer From Fo... | 12995448 | 1248 days ago | IN | 0 ETH | 0.00315517 | ||||
Transfer From Fo... | 12995378 | 1248 days ago | IN | 0 ETH | 0.00307351 | ||||
Transfer From Fo... | 12995333 | 1248 days ago | IN | 0 ETH | 0.00323608 | ||||
Transfer From Fo... | 12995314 | 1248 days ago | IN | 0 ETH | 0.00323608 | ||||
Transfer From Fo... | 12995291 | 1248 days ago | IN | 0 ETH | 0.0040451 | ||||
Transfer From Fo... | 12995266 | 1248 days ago | IN | 0 ETH | 0.0035588 | ||||
Transfer From Fo... | 12995245 | 1248 days ago | IN | 0 ETH | 0.00355968 | ||||
Transfer From Fo... | 12995229 | 1248 days ago | IN | 0 ETH | 0.00355828 | ||||
Transfer From Fo... | 12995197 | 1248 days ago | IN | 0 ETH | 0.00501443 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
SignatureController
Compiler Version
v0.5.12+commit.7709ece9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-12-14 */ // File: contracts/controllers/ISignatureController.sol pragma solidity 0.5.12; /** * @title ISignatureController * @dev All of the signature controller functions follow the same pattern. Each * function mirrors another function in another controller or on the registry. * The intent is that these signature functions can be an alternative to signing * away unilateral control via an approval without having to build significant * smart contract infrastructure, and without the domain owner having to have * ether for gas. * * @dev The way these functions work is by validating a extra signature argument * of all of the arguments of the function and a nonce, and crosschecking the * recovered address with the registry to ensure that the signer is the owner. * Instead of checking msg.sender for authentication. * * @dev The method we use for signing is non standard. It'd be worth it to * consider using EIP712 Typed signing https://eips.ethereum.org/EIPS/eip-712. */ interface ISignatureController { /** * @dev Returns the given owners' nonce. * @param tokenId token ID to query the nonce of * @return uint256 nonce of the owner */ function nonceOf(uint256 tokenId) external view returns (uint256); /// A signature function based on transferFrom inside Open Zeppelin's ERC721.sol. function transferFromFor(address from, address to, uint256 tokenId, bytes calldata signature) external; /// A signature function based on safeTransferFrom inside Open Zeppelin's ERC721.sol. function safeTransferFromFor(address from, address to, uint256 tokenId, bytes calldata _data, bytes calldata signature) external; function safeTransferFromFor(address from, address to, uint256 tokenId, bytes calldata signature) external; /// A signature function based on resolveTo inside ./IRegistry.sol. function resolveToFor(address to, uint256 tokenId, bytes calldata signature) external; /// A signature function based on burn inside ./IRegistry.sol. function burnFor(uint256 tokenId, bytes calldata signature) external; /// A signature function based on mintChild inside ./IChildController.sol. function mintChildFor(address to, uint256 tokenId, string calldata label, bytes calldata signature) external; /// A signature function based on transferFromChild inside ./IChildController.sol. function transferFromChildFor(address from, address to, uint256 tokenId, string calldata label, bytes calldata signature) external; /// A signature function based on safeTransferFromChild inside ./IChildController.sol. function safeTransferFromChildFor(address from, address to, uint256 tokenId, string calldata label, bytes calldata _data, bytes calldata signature) external; function safeTransferFromChildFor(address from, address to, uint256 tokenId, string calldata label, bytes calldata signature) external; /// A signature function based on burnChild inside ./IChildController.sol. function burnChildFor(uint256 tokenId, string calldata label, bytes calldata signature) external; } // File: @openzeppelin/contracts/cryptography/ECDSA.sol pragma solidity ^0.5.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * (.note) This call _does not revert_ if the signature is invalid, or * if the signer is otherwise unable to be retrieved. In those scenarios, * the zero address is returned. * * (.warning) `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise) * be too long), and then calling `toEthSignedMessageHash` on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length if (signature.length != 65) { return (address(0)); } // Divide the signature in r, s and v variables bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. // solhint-disable-next-line no-inline-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return address(0); } if (v != 27 && v != 28) { return address(0); } // If the signature is valid (and not malleable), return the signer address return ecrecover(hash, v, r, s); } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * replicates the behavior of the * [`eth_sign`](https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign) * JSON-RPC method. * * See `recover`. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } } // File: @openzeppelin/contracts/introspection/IERC165.sol pragma solidity ^0.5.0; /** * @dev Interface of the ERC165 standard, as defined in the * [EIP](https://eips.ethereum.org/EIPS/eip-165). * * Implementers can declare support of contract interfaces, which can then be * queried by others (`ERC165Checker`). * * For an implementation, see `ERC165`. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.5.0; /** * @dev Required interface of an ERC721 compliant contract. */ 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); /** * @dev Returns the number of NFTs in `owner`'s account. */ function balanceOf(address owner) public view returns (uint256 balance); /** * @dev Returns the owner of the NFT specified by `tokenId`. */ function ownerOf(uint256 tokenId) public view returns (address owner); /** * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to * another (`to`). * * * * Requirements: * - `from`, `to` cannot be zero. * - `tokenId` must be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this * NFT by either `approve` or `setApproveForAll`. */ function safeTransferFrom(address from, address to, uint256 tokenId) public; /** * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to * another (`to`). * * Requirements: * - If the caller is not `from`, it must be approved to move this NFT by * either `approve` or `setApproveForAll`. */ function transferFrom(address from, address to, uint256 tokenId) public; 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 safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public; } // File: @openzeppelin/contracts/token/ERC721/IERC721Metadata.sol pragma solidity ^0.5.0; /** * @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: contracts/IRegistry.sol pragma solidity 0.5.12; contract IRegistry is IERC721Metadata { event NewURI(uint256 indexed tokenId, string uri); event NewURIPrefix(string prefix); event Resolve(uint256 indexed tokenId, address indexed to); event Sync(address indexed resolver, uint256 indexed updateId, uint256 indexed tokenId); /** * @dev Controlled function to set the token URI Prefix for all tokens. * @param prefix string URI to assign */ function controlledSetTokenURIPrefix(string calldata prefix) external; /** * @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) external view returns (bool); /** * @dev Mints a new a child token. * Calculates child token ID using a namehash function. * Requires the msg.sender to be the owner, approved, or operator of tokenId. * Requires the token not exist. * @param to address to receive the ownership of the given token ID * @param tokenId uint256 ID of the parent token * @param label subdomain label of the child token ID */ function mintChild(address to, uint256 tokenId, string calldata label) external; /** * @dev Controlled function to mint a given token ID. * Requires the msg.sender to be controller. * Requires the token ID to not exist. * @param to address the given token ID will be minted to * @param label string that is a subdomain * @param tokenId uint256 ID of the parent token */ function controlledMintChild(address to, uint256 tokenId, string calldata label) external; /** * @dev Transfers the ownership of a child token ID to another address. * Calculates child token ID using a namehash function. * Requires the msg.sender to be the owner, approved, or operator of tokenId. * Requires the token already exist. * @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 label subdomain label of the child token ID */ function transferFromChild(address from, address to, uint256 tokenId, string calldata label) external; /** * @dev Controlled function to transfers the ownership of a token ID to * another address. * Requires the msg.sender to be controller. * Requires the token already exist. * @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 controlledTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Safely transfers the ownership of a child token ID to another address. * Calculates child token ID using a namehash function. * Implements a ERC721Reciever check unlike transferFromChild. * Requires the msg.sender to be the owner, approved, or operator of tokenId. * Requires the token already exist. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 parent ID of the token to be transferred * @param label subdomain label of the child token ID * @param _data bytes data to send along with a safe transfer check */ function safeTransferFromChild(address from, address to, uint256 tokenId, string calldata label, bytes calldata _data) external; /// Shorthand for calling the above ^^^ safeTransferFromChild function with an empty _data parameter. Similar to ERC721.safeTransferFrom. function safeTransferFromChild(address from, address to, uint256 tokenId, string calldata label) external; /** * @dev Controlled frunction to safely transfers the ownership of a token ID * to another address. * Implements a ERC721Reciever check unlike controlledSafeTransferFrom. * Requires the msg.sender to be controller. * Requires the token already exist. * @param from current owner of the token * @param to address to receive the ownership of the given token ID * @param tokenId uint256 parent ID of the token to be transferred * @param _data bytes data to send along with a safe transfer check */ function controlledSafeTransferFrom(address from, address to, uint256 tokenId, bytes calldata _data) external; /** * @dev Burns a child token ID. * Calculates child token ID using a namehash function. * Requires the msg.sender to be the owner, approved, or operator of tokenId. * Requires the token already exist. * @param tokenId uint256 ID of the token to be transferred * @param label subdomain label of the child token ID */ function burnChild(uint256 tokenId, string calldata label) external; /** * @dev Controlled function to burn a given token ID. * Requires the msg.sender to be controller. * Requires the token already exist. * @param tokenId uint256 ID of the token to be burned */ function controlledBurn(uint256 tokenId) external; /** * @dev Sets the resolver of a given token ID to another address. * Requires the msg.sender to be the owner, approved, or operator. * @param to address the given token ID will resolve to * @param tokenId uint256 ID of the token to be transferred */ function resolveTo(address to, uint256 tokenId) external; /** * @dev Gets the resolver of the specified token ID. * @param tokenId uint256 ID of the token to query the resolver of * @return address currently marked as the resolver of the given token ID */ function resolverOf(uint256 tokenId) external view returns (address); /** * @dev Controlled function to sets the resolver of a given token ID. * Requires the msg.sender to be controller. * @param to address the given token ID will resolve to * @param tokenId uint256 ID of the token to be transferred */ function controlledResolveTo(address to, uint256 tokenId) external; } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.5.0; /** * @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/contracts/math/SafeMath.sol pragma solidity ^0.5.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot 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-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath: division by zero"); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath: modulo by zero"); return a % b; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.5.0; /** * @dev Collection of functions related to the address type, */ library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing a contract. * * > It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } // File: @openzeppelin/contracts/drafts/Counters.sol pragma solidity ^0.5.0; /** * @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/contracts/introspection/ERC165.sol pragma solidity ^0.5.0; /** * @dev Implementation of the `IERC165` interface. * * Contracts may inherit from this and call `_registerInterface` to declare * their support of an interface. */ contract ERC165 is IERC165 { /* * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7 */ bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; /** * @dev Mapping of interface ids to whether or not it's supported. */ mapping(bytes4 => bool) private _supportedInterfaces; constructor () internal { // Derived contracts need only register support for their own interfaces, // we register support for ERC165 itself here _registerInterface(_INTERFACE_ID_ERC165); } /** * @dev See `IERC165.supportsInterface`. * * Time complexity O(1), guaranteed to always use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev Registers the contract as an implementer of the interface defined by * `interfaceId`. Support of the actual ERC165 interface is automatic and * registering its interface id is not required. * * See `IERC165.supportsInterface`. * * Requirements: * * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`). */ function _registerInterface(bytes4 interfaceId) internal { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.5.0; /** * @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(keccak256('balanceOf(address)')) == 0x70a08231 * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3 * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465 * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde * * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^ * 0xa22cb465 ^ 0xe985e9c ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd */ bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd; 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), "ERC721: balance query for the zero address"); 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), "ERC721: owner query for nonexistent token"); 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, "ERC721: approval to current owner"); require(msg.sender == owner || isApprovedForAll(owner, msg.sender), "ERC721: approve caller is not owner nor approved for all" ); _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), "ERC721: approved query for nonexistent token"); 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, "ERC721: approve to caller"); _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 { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved"); _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), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @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) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); 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), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _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, "ERC721: burn of token that is not own"); _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, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _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. * * This function is deprecated. * @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/contracts/token/ERC721/ERC721Burnable.sol pragma solidity ^0.5.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ contract ERC721Burnable is ERC721 { /** * @dev Burns a specific ERC721 token. * @param tokenId uint256 id of the ERC721 token to be burned. */ function burn(uint256 tokenId) public { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } } // File: @openzeppelin/contracts/access/Roles.sol pragma solidity ^0.5.0; /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } // File: contracts/util/ControllerRole.sol pragma solidity 0.5.12; // solium-disable error-reason /** * @title ControllerRole * @dev An Controller role defined using the Open Zeppelin Role system. */ contract ControllerRole { using Roles for Roles.Role; // NOTE: Commented out standard Role events to save gas. // event ControllerAdded(address indexed account); // event ControllerRemoved(address indexed account); Roles.Role private _controllers; constructor () public { _addController(msg.sender); } modifier onlyController() { require(isController(msg.sender)); _; } function isController(address account) public view returns (bool) { return _controllers.has(account); } function addController(address account) public onlyController { _addController(account); } function renounceController() public { _removeController(msg.sender); } function _addController(address account) internal { _controllers.add(account); // emit ControllerAdded(account); } function _removeController(address account) internal { _controllers.remove(account); // emit ControllerRemoved(account); } } // File: contracts/Registry.sol pragma solidity 0.5.12; // solium-disable no-empty-blocks,error-reason /** * @title Registry * @dev An ERC721 Token see https://eips.ethereum.org/EIPS/eip-721. With * additional functions so other trusted contracts to interact with the tokens. */ contract Registry is IRegistry, ControllerRole, ERC721Burnable { // Optional mapping for token URIs mapping(uint256 => string) internal _tokenURIs; string internal _prefix; // Mapping from token ID to resolver address mapping (uint256 => address) internal _tokenResolvers; // uint256(keccak256(abi.encodePacked(uint256(0x0), keccak256(abi.encodePacked("crypto"))))) uint256 private constant _CRYPTO_HASH = 0x0f4a10a4f46c288cea365fcf45cccf0e9d901b945b9829ccdb54c10dc3cb7a6f; modifier onlyApprovedOrOwner(uint256 tokenId) { require(_isApprovedOrOwner(msg.sender, tokenId)); _; } constructor () public { _mint(address(0xdead), _CRYPTO_HASH); // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(0x5b5e139f); // ERC721 Metadata Interface _tokenURIs[root()] = "crypto"; emit NewURI(root(), "crypto"); } /// ERC721 Metadata extension function name() external view returns (string memory) { return ".crypto"; } function symbol() external view returns (string memory) { return "UD"; } function tokenURI(uint256 tokenId) external view returns (string memory) { require(_exists(tokenId)); return string(abi.encodePacked(_prefix, _tokenURIs[tokenId])); } function controlledSetTokenURIPrefix(string calldata prefix) external onlyController { _prefix = prefix; emit NewURIPrefix(prefix); } /// Ownership function isApprovedOrOwner(address spender, uint256 tokenId) external view returns (bool) { return _isApprovedOrOwner(spender, tokenId); } /// Registry Constants function root() public pure returns (uint256) { return _CRYPTO_HASH; } function childIdOf(uint256 tokenId, string calldata label) external pure returns (uint256) { return _childId(tokenId, label); } /// Minting function mintChild(address to, uint256 tokenId, string calldata label) external onlyApprovedOrOwner(tokenId) { _mintChild(to, tokenId, label); } function controlledMintChild(address to, uint256 tokenId, string calldata label) external onlyController { _mintChild(to, tokenId, label); } function safeMintChild(address to, uint256 tokenId, string calldata label) external onlyApprovedOrOwner(tokenId) { _safeMintChild(to, tokenId, label, ""); } function safeMintChild(address to, uint256 tokenId, string calldata label, bytes calldata _data) external onlyApprovedOrOwner(tokenId) { _safeMintChild(to, tokenId, label, _data); } function controlledSafeMintChild(address to, uint256 tokenId, string calldata label, bytes calldata _data) external onlyController { _safeMintChild(to, tokenId, label, _data); } /// Transfering function setOwner(address to, uint256 tokenId) external onlyApprovedOrOwner(tokenId) { super._transferFrom(ownerOf(tokenId), to, tokenId); } function transferFromChild(address from, address to, uint256 tokenId, string calldata label) external onlyApprovedOrOwner(tokenId) { _transferFrom(from, to, _childId(tokenId, label)); } function controlledTransferFrom(address from, address to, uint256 tokenId) external onlyController { _transferFrom(from, to, tokenId); } function safeTransferFromChild( address from, address to, uint256 tokenId, string memory label, bytes memory _data ) public onlyApprovedOrOwner(tokenId) { uint256 childId = _childId(tokenId, label); _transferFrom(from, to, childId); require(_checkOnERC721Received(from, to, childId, _data)); } function safeTransferFromChild(address from, address to, uint256 tokenId, string calldata label) external { safeTransferFromChild(from, to, tokenId, label, ""); } function controlledSafeTransferFrom(address from, address to, uint256 tokenId, bytes calldata _data) external onlyController { _transferFrom(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data)); } /// Burning function burnChild(uint256 tokenId, string calldata label) external onlyApprovedOrOwner(tokenId) { _burn(_childId(tokenId, label)); } function controlledBurn(uint256 tokenId) external onlyController { _burn(tokenId); } /// Resolution function resolverOf(uint256 tokenId) external view returns (address) { address resolver = _tokenResolvers[tokenId]; require(resolver != address(0)); return resolver; } function resolveTo(address to, uint256 tokenId) external onlyApprovedOrOwner(tokenId) { _resolveTo(to, tokenId); } function controlledResolveTo(address to, uint256 tokenId) external onlyController { _resolveTo(to, tokenId); } function sync(uint256 tokenId, uint256 updateId) external { require(_tokenResolvers[tokenId] == msg.sender); emit Sync(msg.sender, updateId, tokenId); } /// Internal function _childId(uint256 tokenId, string memory label) internal pure returns (uint256) { require(bytes(label).length != 0); return uint256(keccak256(abi.encodePacked(tokenId, keccak256(abi.encodePacked(label))))); } function _mintChild(address to, uint256 tokenId, string memory label) internal { uint256 childId = _childId(tokenId, label); _mint(to, childId); require(bytes(label).length != 0); require(_exists(childId)); bytes memory domain = abi.encodePacked(label, ".", _tokenURIs[tokenId]); _tokenURIs[childId] = string(domain); emit NewURI(childId, string(domain)); } function _safeMintChild(address to, uint256 tokenId, string memory label, bytes memory _data) internal { _mintChild(to, tokenId, label); require(_checkOnERC721Received(address(0), to, _childId(tokenId, label), _data)); } function _transferFrom(address from, address to, uint256 tokenId) internal { super._transferFrom(from, to, tokenId); // Clear resolver (if any) if (_tokenResolvers[tokenId] != address(0x0)) { delete _tokenResolvers[tokenId]; } } function _burn(uint256 tokenId) internal { super._burn(tokenId); // Clear resolver (if any) if (_tokenResolvers[tokenId] != address(0x0)) { delete _tokenResolvers[tokenId]; } // Clear metadata (if any) if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } function _resolveTo(address to, uint256 tokenId) internal { require(_exists(tokenId)); emit Resolve(tokenId, to); _tokenResolvers[tokenId] = to; } } // File: contracts/util/SignatureUtil.sol pragma solidity 0.5.12; // solium-disable error-reason contract SignatureUtil { using ECDSA for bytes32; // Mapping from owner to a nonce mapping (uint256 => uint256) internal _nonces; Registry internal _registry; constructor(Registry registry) public { _registry = registry; } function registry() external view returns (address) { return address(_registry); } /** * @dev Gets the nonce of the specified address. * @param tokenId token ID for nonce query * @return nonce of the given address */ function nonceOf(uint256 tokenId) external view returns (uint256) { return _nonces[tokenId]; } function _validate(bytes32 hash, uint256 tokenId, bytes memory signature) internal { uint256 nonce = _nonces[tokenId]; address signer = keccak256(abi.encodePacked(hash, address(this), nonce)).toEthSignedMessageHash().recover(signature); require( signer != address(0) && _registry.isApprovedOrOwner( signer, tokenId ) ); _nonces[tokenId] += 1; } } // File: contracts/controllers/SignatureController.sol pragma solidity 0.5.12; // solium-disable error-reason /** * @title SignatureController * @dev The SignatureController allows any account to submit select management * transactions on behalf of a token owner. */ contract SignatureController is ISignatureController, SignatureUtil { constructor (Registry registry) public SignatureUtil(registry) {} /* * 0x23b872dd == bytes4(keccak256('transferFrom(address,address,uint256)')) */ function transferFromFor(address from, address to, uint256 tokenId, bytes calldata signature) external { _validate( keccak256(abi.encodeWithSelector(0x23b872dd, from, to, tokenId)), tokenId, signature ); _registry.controlledTransferFrom(from, to, tokenId); } /* * 0xb88d4fde == bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) */ function safeTransferFromFor( address from, address to, uint256 tokenId, bytes calldata _data, bytes calldata signature ) external { _validate( keccak256(abi.encodeWithSelector(0xb88d4fde, from, to, tokenId, _data)), tokenId, signature ); _registry.controlledSafeTransferFrom(from, to, tokenId, _data); } /* * 0x42842e0e == bytes4(keccak256('safeTransferFrom(address,address,uint256)')) */ function safeTransferFromFor(address from, address to, uint256 tokenId, bytes calldata signature) external { _validate( keccak256(abi.encodeWithSelector(0x42842e0e, from, to, tokenId)), tokenId, signature ); _registry.controlledSafeTransferFrom(from, to, tokenId, ""); } /* * 0x42966c68 == bytes4(keccak256('burn(uint256)')) */ function burnFor(uint256 tokenId, bytes calldata signature) external { _validate( keccak256(abi.encodeWithSelector(0x42966c68, tokenId)), tokenId, signature ); _registry.controlledBurn(tokenId); } /* * 0xd8d3cc6e == bytes4(keccak256('mintChild(address,uint256,string)')) */ function mintChildFor(address to, uint256 tokenId, string calldata label, bytes calldata signature) external { _validate( keccak256(abi.encodeWithSelector(0xd8d3cc6e, to, tokenId, label)), tokenId, signature ); _registry.controlledMintChild(to, tokenId, label); } /* * 0xce9fb82b == bytes4(keccak256('safeMintChild(address,uint256,string,bytes)')) */ function safeMintChildFor(address to, uint256 tokenId, string calldata label, bytes calldata _data, bytes calldata signature) external { _validate( keccak256(abi.encodeWithSelector(0xce9fb82b, to, tokenId, label, _data)), tokenId, signature ); _registry.controlledSafeMintChild(to, tokenId, label, _data); } /* * 0x7c69eae2 == bytes4(keccak256('safeMintChild(address,uint256,string)')) */ function safeMintChildFor(address to, uint256 tokenId, string calldata label, bytes calldata signature) external { _validate( keccak256(abi.encodeWithSelector(0x7c69eae2, to, tokenId, label)), tokenId, signature ); _registry.controlledSafeMintChild(to, tokenId, label, ""); } /* * 0x9e5be9a5 == bytes4(keccak256('transferFromChild(address,address,uint256,string)')) */ function transferFromChildFor( address from, address to, uint256 tokenId, string calldata label, bytes calldata signature ) external { _validate( keccak256(abi.encodeWithSelector(0x9e5be9a5, from, to, tokenId, label)), tokenId, signature ); _registry.controlledTransferFrom(from, to, _registry.childIdOf(tokenId, label)); } /* * 0xc29b52f9 == bytes4(keccak256('safeTransferFromChild(address,address,uint256,string,bytes)')) */ function safeTransferFromChildFor( address from, address to, uint256 tokenId, string calldata label, bytes calldata _data, bytes calldata signature ) external { _validate( keccak256(abi.encodeWithSelector(0xc29b52f9, from, to, tokenId, label, _data)), tokenId, signature ); _registry.controlledSafeTransferFrom(from, to, _registry.childIdOf(tokenId, label), _data); } /* * 0x9d743989 == bytes4(keccak256('safeTransferFromChild(address,address,uint256,string)')) */ function safeTransferFromChildFor( address from, address to, uint256 tokenId, string calldata label, bytes calldata signature ) external { _validate( keccak256(abi.encodeWithSelector(0x9d743989, from, to, tokenId, label)), tokenId, signature ); _registry.controlledSafeTransferFrom(from, to, _registry.childIdOf(tokenId, label), ""); } /* * 0x5cbe1112 == bytes4(keccak256('burnChild(uint256,string)')) */ function burnChildFor(uint256 tokenId, string calldata label, bytes calldata signature) external { _validate( keccak256(abi.encodeWithSelector(0x5cbe1112, tokenId, label)), tokenId, signature ); _registry.controlledBurn(_registry.childIdOf(tokenId, label)); } /* * 0x2392c189 == bytes4(keccak256('resolveTo(address,uint256)')) */ function resolveToFor(address to, uint256 tokenId, bytes calldata signature) external { _validate( keccak256(abi.encodeWithSelector(0x2392c189, to, tokenId)), tokenId, signature ); _registry.controlledResolveTo(to, tokenId); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract Registry","name":"registry","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"burnChildFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"burnFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mintChildFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"nonceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"registry","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"resolveToFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"safeMintChildFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"safeMintChildFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"safeTransferFromChildFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"safeTransferFromChildFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"safeTransferFromFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"safeTransferFromFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"label","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"transferFromChildFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"transferFromFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516120453803806120458339818101604052602081101561003357600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055611fe2806100636000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636debcb8d1161008c578063b34f33c511610066578063b34f33c514610741578063d0778d6c14610814578063ef2c3088146108f2578063f5090c1e14610980576100ea565b80636debcb8d146105ca5780636fab95b3146106585780637b1039991461071d576100ea565b8063511f1112116100c8578063511f1112146103c557806361603dd91461044857806368b6154f146104bd5780636ccbae5f1461059b576100ea565b806307eca395146100ef578063280d9b051461021457806330135293146102f2575b600080fd5b610212600480360360a081101561010557600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561013457600080fd5b82018360208201111561014657600080fd5b803590602001918460018302840111600160201b8311171561016757600080fd5b919390929091602081019035600160201b81111561018457600080fd5b82018360208201111561019657600080fd5b803590602001918460018302840111600160201b831117156101b757600080fd5b919390929091602081019035600160201b8111156101d457600080fd5b8201836020820111156101e657600080fd5b803590602001918460018302840111600160201b8311171561020757600080fd5b509092509050610aae565b005b610212600480360360a081101561022a57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561026457600080fd5b82018360208201111561027657600080fd5b803590602001918460018302840111600160201b8311171561029757600080fd5b919390929091602081019035600160201b8111156102b457600080fd5b8201836020820111156102c657600080fd5b803590602001918460018302840111600160201b831117156102e757600080fd5b509092509050610c92565b6102126004803603608081101561030857600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561033757600080fd5b82018360208201111561034957600080fd5b803590602001918460018302840111600160201b8311171561036a57600080fd5b919390929091602081019035600160201b81111561038757600080fd5b82018360208201111561039957600080fd5b803590602001918460018302840111600160201b831117156103ba57600080fd5b509092509050610e3d565b610212600480360360608110156103db57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561040a57600080fd5b82018360208201111561041c57600080fd5b803590602001918460018302840111600160201b8311171561043d57600080fd5b509092509050610fcc565b6102126004803603604081101561045e57600080fd5b81359190810190604081016020820135600160201b81111561047f57600080fd5b82018360208201111561049157600080fd5b803590602001918460018302840111600160201b831117156104b257600080fd5b5090925090506110c9565b610212600480360360a08110156104d357600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561050d57600080fd5b82018360208201111561051f57600080fd5b803590602001918460018302840111600160201b8311171561054057600080fd5b919390929091602081019035600160201b81111561055d57600080fd5b82018360208201111561056f57600080fd5b803590602001918460018302840111600160201b8311171561059057600080fd5b5090925090506111ae565b6105b8600480360360208110156105b157600080fd5b50356113a8565b60408051918252519081900360200190f35b610212600480360360808110156105e057600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561061a57600080fd5b82018360208201111561062c57600080fd5b803590602001918460018302840111600160201b8311171561064d57600080fd5b5090925090506113ba565b6102126004803603606081101561066e57600080fd5b81359190810190604081016020820135600160201b81111561068f57600080fd5b8201836020820111156106a157600080fd5b803590602001918460018302840111600160201b831117156106c257600080fd5b919390929091602081019035600160201b8111156106df57600080fd5b8201836020820111156106f157600080fd5b803590602001918460018302840111600160201b8311171561071257600080fd5b5090925090506114d4565b610725611675565b604080516001600160a01b039092168252519081900360200190f35b6102126004803603608081101561075757600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561078657600080fd5b82018360208201111561079857600080fd5b803590602001918460018302840111600160201b831117156107b957600080fd5b919390929091602081019035600160201b8111156107d657600080fd5b8201836020820111156107e857600080fd5b803590602001918460018302840111600160201b8311171561080957600080fd5b509092509050611684565b610212600480360360a081101561082a57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561086457600080fd5b82018360208201111561087657600080fd5b803590602001918460018302840111600160201b8311171561089757600080fd5b919390929091602081019035600160201b8111156108b457600080fd5b8201836020820111156108c657600080fd5b803590602001918460018302840111600160201b831117156108e757600080fd5b5090925090506117de565b6102126004803603608081101561090857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561094257600080fd5b82018360208201111561095457600080fd5b803590602001918460018302840111600160201b8311171561097557600080fd5b5090925090506119e4565b610212600480360360c081101561099657600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156109d057600080fd5b8201836020820111156109e257600080fd5b803590602001918460018302840111600160201b83111715610a0357600080fd5b919390929091602081019035600160201b811115610a2057600080fd5b820183602082011115610a3257600080fd5b803590602001918460018302840111600160201b83111715610a5357600080fd5b919390929091602081019035600160201b811115610a7057600080fd5b820183602082011115610a8257600080fd5b803590602001918460018302840111600160201b83111715610aa357600080fd5b509092509050611ad3565b610bb163ce9fb82b89898989898960405160240180876001600160a01b03166001600160a01b0316815260200186815260200180602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f820116905080830192505050985050505050505050506040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050805190602001208884848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d5492505050565b600154604051630119f80560e21b81526001600160a01b038a811660048301908152602483018b9052608060448401908152608484018a90529190931692630467e014928c928c928c928c928c928c92909190606481019060a401878780828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f82011690508083019250505098505050505050505050600060405180830381600087803b158015610c7057600080fd5b505af1158015610c84573d6000803e3d6000fd5b505050505050505050505050565b610d8363b88d4fde888888888860405160240180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505096505050505050506040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050805190602001208684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d5492505050565b6001546040516315eab15d60e21b81526001600160a01b03898116600483019081528982166024840152604483018990526080606484019081526084840188905291909316926357aac574928b928b928b928b928b929160a401848480828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610e1c57600080fd5b505af1158015610e30573d6000803e3d6000fd5b5050505050505050505050565b610f09637c69eae28787878760405160240180856001600160a01b03166001600160a01b0316815260200184815260200180602001828103825284848281815260200192508082843760008382015260408051601f928301601f199081169095018181039095018152938152602080850180516001600160e01b031660e09d909d1b9c909c178c529351909a208a51918d01849004840282018401909a528b81528f985096508b95508a94508493505085019050838280828437600092019190915250611d5492505050565b600154604051630119f80560e21b81526001600160a01b038881166004830190815260248301899052608060448401908152608484018890529190931692630467e014928a928a928a928a9290606481019060a401858580828437600081840152601f19601f8201169050808301925050508381038252600081526020016020019650505050505050600060405180830381600087803b158015610fac57600080fd5b505af1158015610fc0573d6000803e3d6000fd5b50505050505050505050565b604080516001600160a01b038616602482015260448082018690528251808303909101815260649091018252602081810180516001600160e01b0316632392c18960e01b17815291519091208251601f85018390048302810183019093528383526110569290918691908690869081908401838280828437600092019190915250611d5492505050565b60015460408051631292e83560e11b81526001600160a01b0387811660048301526024820187905291519190921691632525d06a91604480830192600092919082900301818387803b1580156110ab57600080fd5b505af11580156110bf573d6000803e3d6000fd5b5050505050505050565b6040805160248082018690528251808303909101815260449091018252602081810180516001600160e01b0316630852cd8d60e31b17815291519091208251601f85018390048302810183019093528383526111449290918691908690869081908401838280828437600092019190915250611d5492505050565b6001546040805163e67ca8a360e01b81526004810186905290516001600160a01b039092169163e67ca8a39160248082019260009290919082900301818387803b15801561119157600080fd5b505af11580156111a5573d6000803e3d6000fd5b50505050505050565b61129f639e5be9a5888888888860405160240180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505096505050505050506040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050805190602001208684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d5492505050565b6001546040805163345b169960e11b81526004810188815260248201928352604482018790526001600160a01b03909316926302759c37928b928b9286926368b62d32928d928d928d92606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b15801561132757600080fd5b505afa15801561133b573d6000803e3d6000fd5b505050506040513d602081101561135157600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b158015610e1c57600080fd5b60009081526020819052604090205490565b604080516001600160a01b0380881660248301528616604482015260648082018690528251808303909101815260849091018252602081810180516001600160e01b0316632142170760e11b17815291519091208251601f850183900483028101830190935283835261144c9290918691908690869081908401838280828437600092019190915250611d5492505050565b600154604080516315eab15d60e21b81526001600160a01b0388811660048301528781166024830152604482018790526080606483015260006084830181905292519316926357aac5749260c48084019391929182900301818387803b1580156114b557600080fd5b505af11580156114c9573d6000803e3d6000fd5b505050505050505050565b611585635cbe11128686866040516024018084815260200180602001828103825284848281815260200192508082843760008382015260408051601f928301601f199081169095018181039095018152938152602080850180516001600160e01b031660e09c909c1b9b909b178b5293519099208951918c018490048402820184019099528a81528e975095508a9450899350839250508401838280828437600092019190915250611d5492505050565b6001546040805163345b169960e11b81526004810188815260248201928352604482018790526001600160a01b039093169263e67ca8a39284926368b62d32928b928b928b929190606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b15801561160b57600080fd5b505afa15801561161f573d6000803e3d6000fd5b505050506040513d602081101561163557600080fd5b5051604080516001600160e01b031960e085901b168152600481019290925251602480830192600092919082900301818387803b1580156114b557600080fd5b6001546001600160a01b031690565b61175063d8d3cc6e8787878760405160240180856001600160a01b03166001600160a01b0316815260200184815260200180602001828103825284848281815260200192508082843760008382015260408051601f928301601f199081169095018181039095018152938152602080850180516001600160e01b031660e09d909d1b9c909c178c529351909a208a51918d01849004840282018401909a528b81528f985096508b95508a94508493505085019050838280828437600092019190915250611d5492505050565b60015460405163b546666960e01b81526001600160a01b03888116600483019081526024830189905260606044840190815260648401889052919093169263b5466669928a928a928a928a9290608401848480828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015610fac57600080fd5b6118cf639d743989888888888860405160240180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505096505050505050506040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050805190602001208684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d5492505050565b6001546040805163345b169960e11b81526004810188815260248201928352604482018790526001600160a01b03909316926357aac574928b928b9286926368b62d32928d928d928d92606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b15801561195757600080fd5b505afa15801561196b573d6000803e3d6000fd5b505050506040513d602081101561198157600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152929093166024830152604482015260806064820152600060848201819052915160c4808301939282900301818387803b158015610e1c57600080fd5b604080516001600160a01b0380881660248301528616604482015260648082018690528251808303909101815260849091018252602081810180516001600160e01b03166323b872dd60e01b17815291519091208251601f8501839004830281018301909352838352611a769290918691908690869081908401838280828437600092019190915250611d5492505050565b600154604080516302759c3760e01b81526001600160a01b038881166004830152878116602483015260448201879052915191909216916302759c3791606480830192600092919082900301818387803b1580156114b557600080fd5b611bf063c29b52f98a8a8a8a8a8a8a60405160240180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b0316815260200186815260200180602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f82011690508083019250505099505050505050505050506040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050805190602001208884848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d5492505050565b6001546040805163345b169960e11b8152600481018a815260248201928352604482018990526001600160a01b03909316926357aac574928d928d9286926368b62d32928f928f928f92606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b158015611c7857600080fd5b505afa158015611c8c573d6000803e3d6000fd5b505050506040513d6020811015611ca257600080fd5b50516040516001600160e01b031960e086901b1681526001600160a01b0380851660048301908152908416602483015260448201839052608060648301908152608483018b90528b928b92919060a401848480828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015611d3157600080fd5b505af1158015611d45573d6000803e3d6000fd5b50505050505050505050505050565b6000828152602081815260408083205481518084018890523060601b81840152605480820183905283518083039091018152607490910190925281519190920120909190611db3908490611da790611e6d565b9063ffffffff611ebe16565b90506001600160a01b03811615801590611e4957506001546040805163430c208160e01b81526001600160a01b038481166004830152602482018890529151919092169163430c2081916044808301926020929190829003018186803b158015611e1c57600080fd5b505afa158015611e30573d6000803e3d6000fd5b505050506040513d6020811015611e4657600080fd5b50515b611e5257600080fd5b50505060009081526020819052604090208054600101905550565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b60008151604114611ed157506000611fa7565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f175760009350505050611fa7565b8060ff16601b14158015611f2f57508060ff16601c14155b15611f405760009350505050611fa7565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015611f97573d6000803e3d6000fd5b5050506020604051035193505050505b9291505056fea265627a7a72315820e3c41a026f657885e385c213de0d7c11617b87a376972a5ecf6a853601a8ddb264736f6c634300050c0032000000000000000000000000d1e5b0ff1287aa9f9a268759062e4ab08b9dacbe
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80636debcb8d1161008c578063b34f33c511610066578063b34f33c514610741578063d0778d6c14610814578063ef2c3088146108f2578063f5090c1e14610980576100ea565b80636debcb8d146105ca5780636fab95b3146106585780637b1039991461071d576100ea565b8063511f1112116100c8578063511f1112146103c557806361603dd91461044857806368b6154f146104bd5780636ccbae5f1461059b576100ea565b806307eca395146100ef578063280d9b051461021457806330135293146102f2575b600080fd5b610212600480360360a081101561010557600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561013457600080fd5b82018360208201111561014657600080fd5b803590602001918460018302840111600160201b8311171561016757600080fd5b919390929091602081019035600160201b81111561018457600080fd5b82018360208201111561019657600080fd5b803590602001918460018302840111600160201b831117156101b757600080fd5b919390929091602081019035600160201b8111156101d457600080fd5b8201836020820111156101e657600080fd5b803590602001918460018302840111600160201b8311171561020757600080fd5b509092509050610aae565b005b610212600480360360a081101561022a57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561026457600080fd5b82018360208201111561027657600080fd5b803590602001918460018302840111600160201b8311171561029757600080fd5b919390929091602081019035600160201b8111156102b457600080fd5b8201836020820111156102c657600080fd5b803590602001918460018302840111600160201b831117156102e757600080fd5b509092509050610c92565b6102126004803603608081101561030857600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561033757600080fd5b82018360208201111561034957600080fd5b803590602001918460018302840111600160201b8311171561036a57600080fd5b919390929091602081019035600160201b81111561038757600080fd5b82018360208201111561039957600080fd5b803590602001918460018302840111600160201b831117156103ba57600080fd5b509092509050610e3d565b610212600480360360608110156103db57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561040a57600080fd5b82018360208201111561041c57600080fd5b803590602001918460018302840111600160201b8311171561043d57600080fd5b509092509050610fcc565b6102126004803603604081101561045e57600080fd5b81359190810190604081016020820135600160201b81111561047f57600080fd5b82018360208201111561049157600080fd5b803590602001918460018302840111600160201b831117156104b257600080fd5b5090925090506110c9565b610212600480360360a08110156104d357600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561050d57600080fd5b82018360208201111561051f57600080fd5b803590602001918460018302840111600160201b8311171561054057600080fd5b919390929091602081019035600160201b81111561055d57600080fd5b82018360208201111561056f57600080fd5b803590602001918460018302840111600160201b8311171561059057600080fd5b5090925090506111ae565b6105b8600480360360208110156105b157600080fd5b50356113a8565b60408051918252519081900360200190f35b610212600480360360808110156105e057600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561061a57600080fd5b82018360208201111561062c57600080fd5b803590602001918460018302840111600160201b8311171561064d57600080fd5b5090925090506113ba565b6102126004803603606081101561066e57600080fd5b81359190810190604081016020820135600160201b81111561068f57600080fd5b8201836020820111156106a157600080fd5b803590602001918460018302840111600160201b831117156106c257600080fd5b919390929091602081019035600160201b8111156106df57600080fd5b8201836020820111156106f157600080fd5b803590602001918460018302840111600160201b8311171561071257600080fd5b5090925090506114d4565b610725611675565b604080516001600160a01b039092168252519081900360200190f35b6102126004803603608081101561075757600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561078657600080fd5b82018360208201111561079857600080fd5b803590602001918460018302840111600160201b831117156107b957600080fd5b919390929091602081019035600160201b8111156107d657600080fd5b8201836020820111156107e857600080fd5b803590602001918460018302840111600160201b8311171561080957600080fd5b509092509050611684565b610212600480360360a081101561082a57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561086457600080fd5b82018360208201111561087657600080fd5b803590602001918460018302840111600160201b8311171561089757600080fd5b919390929091602081019035600160201b8111156108b457600080fd5b8201836020820111156108c657600080fd5b803590602001918460018302840111600160201b831117156108e757600080fd5b5090925090506117de565b6102126004803603608081101561090857600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561094257600080fd5b82018360208201111561095457600080fd5b803590602001918460018302840111600160201b8311171561097557600080fd5b5090925090506119e4565b610212600480360360c081101561099657600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156109d057600080fd5b8201836020820111156109e257600080fd5b803590602001918460018302840111600160201b83111715610a0357600080fd5b919390929091602081019035600160201b811115610a2057600080fd5b820183602082011115610a3257600080fd5b803590602001918460018302840111600160201b83111715610a5357600080fd5b919390929091602081019035600160201b811115610a7057600080fd5b820183602082011115610a8257600080fd5b803590602001918460018302840111600160201b83111715610aa357600080fd5b509092509050611ad3565b610bb163ce9fb82b89898989898960405160240180876001600160a01b03166001600160a01b0316815260200186815260200180602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f820116905080830192505050985050505050505050506040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050805190602001208884848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d5492505050565b600154604051630119f80560e21b81526001600160a01b038a811660048301908152602483018b9052608060448401908152608484018a90529190931692630467e014928c928c928c928c928c928c92909190606481019060a401878780828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f82011690508083019250505098505050505050505050600060405180830381600087803b158015610c7057600080fd5b505af1158015610c84573d6000803e3d6000fd5b505050505050505050505050565b610d8363b88d4fde888888888860405160240180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505096505050505050506040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050805190602001208684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d5492505050565b6001546040516315eab15d60e21b81526001600160a01b03898116600483019081528982166024840152604483018990526080606484019081526084840188905291909316926357aac574928b928b928b928b928b929160a401848480828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610e1c57600080fd5b505af1158015610e30573d6000803e3d6000fd5b5050505050505050505050565b610f09637c69eae28787878760405160240180856001600160a01b03166001600160a01b0316815260200184815260200180602001828103825284848281815260200192508082843760008382015260408051601f928301601f199081169095018181039095018152938152602080850180516001600160e01b031660e09d909d1b9c909c178c529351909a208a51918d01849004840282018401909a528b81528f985096508b95508a94508493505085019050838280828437600092019190915250611d5492505050565b600154604051630119f80560e21b81526001600160a01b038881166004830190815260248301899052608060448401908152608484018890529190931692630467e014928a928a928a928a9290606481019060a401858580828437600081840152601f19601f8201169050808301925050508381038252600081526020016020019650505050505050600060405180830381600087803b158015610fac57600080fd5b505af1158015610fc0573d6000803e3d6000fd5b50505050505050505050565b604080516001600160a01b038616602482015260448082018690528251808303909101815260649091018252602081810180516001600160e01b0316632392c18960e01b17815291519091208251601f85018390048302810183019093528383526110569290918691908690869081908401838280828437600092019190915250611d5492505050565b60015460408051631292e83560e11b81526001600160a01b0387811660048301526024820187905291519190921691632525d06a91604480830192600092919082900301818387803b1580156110ab57600080fd5b505af11580156110bf573d6000803e3d6000fd5b5050505050505050565b6040805160248082018690528251808303909101815260449091018252602081810180516001600160e01b0316630852cd8d60e31b17815291519091208251601f85018390048302810183019093528383526111449290918691908690869081908401838280828437600092019190915250611d5492505050565b6001546040805163e67ca8a360e01b81526004810186905290516001600160a01b039092169163e67ca8a39160248082019260009290919082900301818387803b15801561119157600080fd5b505af11580156111a5573d6000803e3d6000fd5b50505050505050565b61129f639e5be9a5888888888860405160240180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505096505050505050506040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050805190602001208684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d5492505050565b6001546040805163345b169960e11b81526004810188815260248201928352604482018790526001600160a01b03909316926302759c37928b928b9286926368b62d32928d928d928d92606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b15801561132757600080fd5b505afa15801561133b573d6000803e3d6000fd5b505050506040513d602081101561135157600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015292909316602483015260448201529051606480830192600092919082900301818387803b158015610e1c57600080fd5b60009081526020819052604090205490565b604080516001600160a01b0380881660248301528616604482015260648082018690528251808303909101815260849091018252602081810180516001600160e01b0316632142170760e11b17815291519091208251601f850183900483028101830190935283835261144c9290918691908690869081908401838280828437600092019190915250611d5492505050565b600154604080516315eab15d60e21b81526001600160a01b0388811660048301528781166024830152604482018790526080606483015260006084830181905292519316926357aac5749260c48084019391929182900301818387803b1580156114b557600080fd5b505af11580156114c9573d6000803e3d6000fd5b505050505050505050565b611585635cbe11128686866040516024018084815260200180602001828103825284848281815260200192508082843760008382015260408051601f928301601f199081169095018181039095018152938152602080850180516001600160e01b031660e09c909c1b9b909b178b5293519099208951918c018490048402820184019099528a81528e975095508a9450899350839250508401838280828437600092019190915250611d5492505050565b6001546040805163345b169960e11b81526004810188815260248201928352604482018790526001600160a01b039093169263e67ca8a39284926368b62d32928b928b928b929190606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b15801561160b57600080fd5b505afa15801561161f573d6000803e3d6000fd5b505050506040513d602081101561163557600080fd5b5051604080516001600160e01b031960e085901b168152600481019290925251602480830192600092919082900301818387803b1580156114b557600080fd5b6001546001600160a01b031690565b61175063d8d3cc6e8787878760405160240180856001600160a01b03166001600160a01b0316815260200184815260200180602001828103825284848281815260200192508082843760008382015260408051601f928301601f199081169095018181039095018152938152602080850180516001600160e01b031660e09d909d1b9c909c178c529351909a208a51918d01849004840282018401909a528b81528f985096508b95508a94508493505085019050838280828437600092019190915250611d5492505050565b60015460405163b546666960e01b81526001600160a01b03888116600483019081526024830189905260606044840190815260648401889052919093169263b5466669928a928a928a928a9290608401848480828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015610fac57600080fd5b6118cf639d743989888888888860405160240180866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505096505050505050506040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050805190602001208684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d5492505050565b6001546040805163345b169960e11b81526004810188815260248201928352604482018790526001600160a01b03909316926357aac574928b928b9286926368b62d32928d928d928d92606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b15801561195757600080fd5b505afa15801561196b573d6000803e3d6000fd5b505050506040513d602081101561198157600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b039485166004820152929093166024830152604482015260806064820152600060848201819052915160c4808301939282900301818387803b158015610e1c57600080fd5b604080516001600160a01b0380881660248301528616604482015260648082018690528251808303909101815260849091018252602081810180516001600160e01b03166323b872dd60e01b17815291519091208251601f8501839004830281018301909352838352611a769290918691908690869081908401838280828437600092019190915250611d5492505050565b600154604080516302759c3760e01b81526001600160a01b038881166004830152878116602483015260448201879052915191909216916302759c3791606480830192600092919082900301818387803b1580156114b557600080fd5b611bf063c29b52f98a8a8a8a8a8a8a60405160240180886001600160a01b03166001600160a01b03168152602001876001600160a01b03166001600160a01b0316815260200186815260200180602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f82011690508083019250505099505050505050505050506040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050805190602001208884848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d5492505050565b6001546040805163345b169960e11b8152600481018a815260248201928352604482018990526001600160a01b03909316926357aac574928d928d9286926368b62d32928f928f928f92606401848480828437600083820152604051601f909101601f1916909201965060209550909350505081840390508186803b158015611c7857600080fd5b505afa158015611c8c573d6000803e3d6000fd5b505050506040513d6020811015611ca257600080fd5b50516040516001600160e01b031960e086901b1681526001600160a01b0380851660048301908152908416602483015260448201839052608060648301908152608483018b90528b928b92919060a401848480828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015611d3157600080fd5b505af1158015611d45573d6000803e3d6000fd5b50505050505050505050505050565b6000828152602081815260408083205481518084018890523060601b81840152605480820183905283518083039091018152607490910190925281519190920120909190611db3908490611da790611e6d565b9063ffffffff611ebe16565b90506001600160a01b03811615801590611e4957506001546040805163430c208160e01b81526001600160a01b038481166004830152602482018890529151919092169163430c2081916044808301926020929190829003018186803b158015611e1c57600080fd5b505afa158015611e30573d6000803e3d6000fd5b505050506040513d6020811015611e4657600080fd5b50515b611e5257600080fd5b50505060009081526020819052604090208054600101905550565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b60008151604114611ed157506000611fa7565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611f175760009350505050611fa7565b8060ff16601b14158015611f2f57508060ff16601c14155b15611f405760009350505050611fa7565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015611f97573d6000803e3d6000fd5b5050506020604051035193505050505b9291505056fea265627a7a72315820e3c41a026f657885e385c213de0d7c11617b87a376972a5ecf6a853601a8ddb264736f6c634300050c0032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d1e5b0ff1287aa9f9a268759062e4ab08b9dacbe
-----Decoded View---------------
Arg [0] : registry (address): 0xD1E5b0FF1287aA9f9A268759062E4Ab08b9Dacbe
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000d1e5b0ff1287aa9f9a268759062e4ab08b9dacbe
Deployed Bytecode Sourcemap
50746:5938:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50746:5938:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53226:378;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;53226:378:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;53226:378:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;53226:378:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;53226:378:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;53226:378:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;53226:378:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;53226:378:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;53226:378:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;53226:378:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;53226:378:0;;-1:-1:-1;53226:378:0;-1:-1:-1;53226:378:0;:::i;:::-;;51439:439;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;51439:439:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;51439:439:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;51439:439:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;51439:439:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;51439:439:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;51439:439:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;51439:439:0;;-1:-1:-1;51439:439:0;-1:-1:-1;51439:439:0;:::i;53710:346::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;53710:346:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;53710:346:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;53710:346:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;53710:346:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;53710:346:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;53710:346:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;53710:346:0;;-1:-1:-1;53710:346:0;-1:-1:-1;53710:346:0;:::i;56382:297::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;56382:297:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;56382:297:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;56382:297:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;56382:297:0;;-1:-1:-1;56382:297:0;-1:-1:-1;56382:297:0;:::i;52411:267::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;52411:267:0;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;52411:267:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;52411:267:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;52411:267:0;;-1:-1:-1;52411:267:0;-1:-1:-1;52411:267:0;:::i;54174:458::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;54174:458:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;54174:458:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;54174:458:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;54174:458:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;54174:458:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;54174:458:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;54174:458:0;;-1:-1:-1;54174:458:0;-1:-1:-1;54174:458:0;:::i;49857:108::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49857:108:0;;:::i;:::-;;;;;;;;;;;;;;;;51988:341;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;51988:341:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;51988:341:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;51988:341:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;51988:341:0;;-1:-1:-1;51988:341:0;-1:-1:-1;51988:341:0;:::i;55957:330::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;55957:330:0;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;55957:330:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;55957:330:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;55957:330:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;55957:330:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;55957:330:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;55957:330:0;;-1:-1:-1;55957:330:0;-1:-1:-1;55957:330:0;:::i;49590:96::-;;;:::i;:::-;;;;-1:-1:-1;;;;;49590:96:0;;;;;;;;;;;;;;52780:334;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;52780:334:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;52780:334:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;52780:334:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;52780:334:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;52780:334:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;52780:334:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;52780:334:0;;-1:-1:-1;52780:334:0;-1:-1:-1;52780:334:0;:::i;55393:470::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;55393:470:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;55393:470:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;55393:470:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;55393:470:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;55393:470:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;55393:470:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;55393:470:0;;-1:-1:-1;55393:470:0;-1:-1:-1;55393:470:0;:::i;50994:329::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;50994:329:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;50994:329:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;50994:329:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;50994:329:0;;-1:-1:-1;50994:329:0;-1:-1:-1;50994:329:0;:::i;54760:511::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;54760:511:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;54760:511:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;54760:511:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;54760:511:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;54760:511:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;54760:511:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;54760:511:0;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;54760:511:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;54760:511:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;54760:511:0;;-1:-1:-1;54760:511:0;-1:-1:-1;54760:511:0;:::i;53226:378::-;53372:153;53429:10;53441:2;53445:7;53454:5;;53461;;53406:61;;;;;;-1:-1:-1;;;;;53406:61:0;-1:-1:-1;;;;;53406:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;53406:61:0;;;;;;;;;;;-1:-1:-1;53406:61:0;;;;;1:33:-1;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;;53406:61:0;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;53406:61:0;;;;;;38:4:-1;29:7;25:18;67:10;61:17;-1:-1;;;;;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;53406:61:0;53396:72;;;;;;53483:7;53505:9;;53372:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;53372:9:0;;-1:-1:-1;;;53372:153:0:i;:::-;53536:9;;:60;;-1:-1:-1;;;53536:60:0;;-1:-1:-1;;;;;53536:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;;;;;:33;;53570:2;;53574:7;;53583:5;;;;53590;;;;53536:60;;;;;;;;;53583:5;;;;53536:60;1:33:-1;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;53536:60:0;;;;;;;;;;;-1:-1:-1;53536:60:0;;;;;1:33:-1;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;;53536:60:0;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53536:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;53536:60:0;;;;53226:378;;;;;;;;:::o;51439:439::-;51645:152;51702:10;51714:4;51720:2;51724:7;51733:5;;51679:60;;;;;;-1:-1:-1;;;;;51679:60:0;-1:-1:-1;;;;;51679:60:0;;;;;;-1:-1:-1;;;;;51679:60:0;-1:-1:-1;;;;;51679:60: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;;51679:60:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;51679:60:0;;;;;;38:4:-1;29:7;25:18;67:10;61:17;-1:-1;;;;;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;51679:60:0;51669:71;;;;;;51755:7;51777:9;;51645:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;51645:9:0;;-1:-1:-1;;;51645:152:0:i;:::-;51808:9;;:62;;-1:-1:-1;;;51808:62:0;;-1:-1:-1;;;;;51808:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;;;;;:36;;51845:4;;51851:2;;51855:7;;51864:5;;;;51808:62;;;51864:5;;;;51808:62;1:33:-1;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;;51808:62:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51808:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51808:62:0;;;;51439:439;;;;;;;:::o;53710:346::-;53834:146;53891:10;53903:2;53907:7;53916:5;;53868:54;;;;;;-1:-1:-1;;;;;53868:54:0;-1:-1:-1;;;;;53868:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;53868:54:0;;;137:4:-1;117:14;;;-1:-1;;113:30;;;157:16;;;26:21;;;22:32;;;6:49;;53868:54:0;;;49:4:-1;25:18;;;61:17;;-1:-1;;;;;182:15;53868:54:0;;;;;179:29:-1;;;;160:49;;53858:65:0;;;;;53834:146;;;;;;;;;;;;;;;;;;;;53938:7;;-1:-1:-1;53834:146:0;-1:-1:-1;53960:9:0;;-1:-1:-1;53960:9:0;;-1:-1:-1;53960:9:0;;-1:-1:-1;;53834:146:0;;;-1:-1:-1;53960:9:0;;;;53834:146;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;53834:9:0;;-1:-1:-1;;;53834:146:0:i;:::-;53991:9;;:57;;-1:-1:-1;;;53991:57:0;;-1:-1:-1;;;;;53991:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;;;;;:33;;54025:2;;54029:7;;54038:5;;;;53991:57;;;;;;;54038:5;;;;53991:57;1:33:-1;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;;53991:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;53991:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;53991:57:0;;;;53710:346;;;;;;:::o;56382:297::-;56513:47;;;-1:-1:-1;;;;;56513:47:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;56513:47:0;;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;56503:58:0;;;;;56479:139;;;;;;;;;;;;;;;;;;;;;;56503:58;;56552:7;;56479:139;56598:9;;;;;;56479:139;;56598:9;;;;56479:139;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;56479:9:0;;-1:-1:-1;;;56479:139:0:i;:::-;56629:9;;:42;;;-1:-1:-1;;;56629:42:0;;-1:-1:-1;;;;;56629:42:0;;;;;;;;;;;;;;;:9;;;;;:29;;:42;;;;;:9;;:42;;;;;;;:9;;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;56629:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56629:42:0;;;;56382:297;;;;:::o;52411:267::-;52525:43;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;52525:43:0;;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;52515:54:0;;;;;52491:135;;;;;;;;;;;;;;;;;;;;;;52515:54;;52560:7;;52491:135;52606:9;;;;;;52491:135;;52606:9;;;;52491:135;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;52491:9:0;;-1:-1:-1;;;52491:135:0:i;:::-;52637:9;;:33;;;-1:-1:-1;;;52637:33:0;;;;;;;;;;-1:-1:-1;;;;;52637:9:0;;;;:24;;:33;;;;;:9;;:33;;;;;;;;:9;;:33;;;5:2:-1;;;;30:1;27;20:12;5:2;52637:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;52637:33:0;;;;52411:267;;;:::o;54174:458::-;54382:152;54439:10;54451:4;54457:2;54461:7;54470:5;;54416:60;;;;;;-1:-1:-1;;;;;54416:60:0;-1:-1:-1;;;;;54416:60:0;;;;;;-1:-1:-1;;;;;54416:60:0;-1:-1:-1;;;;;54416:60: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;;54416:60:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;54416:60:0;;;;;;38:4:-1;29:7;25:18;67:10;61:17;-1:-1;;;;;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;54416:60:0;54406:71;;;;;;54492:7;54514:9;;54382:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;54382:9:0;;-1:-1:-1;;;54382:152:0:i;:::-;54545:9;;54588:35;;;-1:-1:-1;;;54588:35:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54545:9:0;;;;:32;;54578:4;;54584:2;;54545:9;;54588:19;;54608:7;;54617:5;;;;54588:35;;54617:5;;;;54588:35;1:33:-1;99:1;81:16;;;74:27;54588:35:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;;-1:-1;54588:35:0;;-1:-1:-1;54588:35:0;;-1:-1:-1;;;54588:35:0;;;;-1:-1:-1;54588:35:0;;;;;5:2:-1;;;;30:1;27;20:12;5:2;54588:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;54588:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;54588:35:0;54545:79;;;-1:-1:-1;;;;;;54545:79:0;;;;;;;-1:-1:-1;;;;;54545:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;54545:79:0;;;;;;;-1:-1:-1;54545:79:0;;;;5:2:-1;;;;30:1;27;20:12;49857:108:0;49914:7;49941:16;;;;;;;;;;;;49857:108::o;51988:341::-;52140:53;;;-1:-1:-1;;;;;52140:53:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;52140:53:0;;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;52130:64:0;;;;;52106:145;;;;;;;;;;;;;;;;;;;;;;52130:64;;52185:7;;52106:145;52231:9;;;;;;52106:145;;52231:9;;;;52106:145;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;52106:9:0;;-1:-1:-1;;;52106:145:0:i;:::-;52262:9;;:59;;;-1:-1:-1;;;52262:59:0;;-1:-1:-1;;;;;52262:59:0;;;;;;;;;;;;;;;;;;;;;;;;;:9;:59;;;;;;;;:9;;;:36;;:59;;;;;:9;;:59;;;;;;:9;;:59;;;5:2:-1;;;;30:1;27;20:12;5:2;52262:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;52262:59:0;;;;51988:341;;;;;:::o;55957:330::-;56065:142;56122:10;56134:7;56143:5;;56099:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;56099:50:0;;;137:4:-1;117:14;;;-1:-1;;113:30;;;157:16;;;26:21;;;22:32;;;6:49;;56099:50:0;;;49:4:-1;25:18;;;61:17;;-1:-1;;;;;182:15;56099:50:0;;;;;179:29:-1;;;;160:49;;56089:61:0;;;;;56065:142;;;;;;;;;;;;;;;;;;;;56165:7;;-1:-1:-1;56065:142:0;-1:-1:-1;56187:9:0;;-1:-1:-1;56187:9:0;;-1:-1:-1;56187:9:0;;-1:-1:-1;;56065:142:0;;56187:9;;;;56065:142;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;56065:9:0;;-1:-1:-1;;;56065:142:0:i;:::-;56218:9;;56243:35;;;-1:-1:-1;;;56243:35:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;56218:9:0;;;;:24;;:9;;56243:19;;56263:7;;56272:5;;;;56243:35;;;;56272:5;;;;56243:35;1:33:-1;99:1;81:16;;;74:27;56243:35:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;;-1:-1;56243:35:0;;-1:-1:-1;56243:35:0;;-1:-1:-1;;;56243:35:0;;;;-1:-1:-1;56243:35:0;;;;;5:2:-1;;;;30:1;27;20:12;5:2;56243:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;56243:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;56243:35:0;56218:61;;;-1:-1:-1;;;;;;56218:61:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;56218:61:0;;;;;;;-1:-1:-1;56218:61:0;;;;5:2:-1;;;;30:1;27;20:12;49590:96:0;49668:9;;-1:-1:-1;;;;;49668:9:0;49590:96;:::o;52780:334::-;52900:146;52957:10;52969:2;52973:7;52982:5;;52934:54;;;;;;-1:-1:-1;;;;;52934:54:0;-1:-1:-1;;;;;52934:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;52934:54:0;;;137:4:-1;117:14;;;-1:-1;;113:30;;;157:16;;;26:21;;;22:32;;;6:49;;52934:54:0;;;49:4:-1;25:18;;;61:17;;-1:-1;;;;;182:15;52934:54:0;;;;;179:29:-1;;;;160:49;;52924:65:0;;;;;52900:146;;;;;;;;;;;;;;;;;;;;53004:7;;-1:-1:-1;52900:146:0;-1:-1:-1;53026:9:0;;-1:-1:-1;53026:9:0;;-1:-1:-1;53026:9:0;;-1:-1:-1;;52900:146:0;;;-1:-1:-1;53026:9:0;;;;52900:146;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;52900:9:0;;-1:-1:-1;;;52900:146:0:i;:::-;53057:9;;:49;;-1:-1:-1;;;53057:49:0;;-1:-1:-1;;;;;53057:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;;;;;:29;;53087:2;;53091:7;;53100:5;;;;53057:49;;;53100:5;;;;53057:49;1:33:-1;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;;53057:49:0;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;55393:470:0;55605:152;55662:10;55674:4;55680:2;55684:7;55693:5;;55639:60;;;;;;-1:-1:-1;;;;;55639:60:0;-1:-1:-1;;;;;55639:60:0;;;;;;-1:-1:-1;;;;;55639:60:0;-1:-1:-1;;;;;55639:60: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;;55639:60:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;55639:60:0;;;;;;38:4:-1;29:7;25:18;67:10;61:17;-1:-1;;;;;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;55639:60:0;55629:71;;;;;;55715:7;55737:9;;55605:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;55605:9:0;;-1:-1:-1;;;55605:152:0:i;:::-;55768:9;;55815:35;;;-1:-1:-1;;;55815:35:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;55768:9:0;;;;:36;;55805:4;;55811:2;;55768:9;;55815:19;;55835:7;;55844:5;;;;55815:35;;55844:5;;;;55815:35;1:33:-1;99:1;81:16;;;74:27;55815:35:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;;-1:-1;55815:35:0;;-1:-1:-1;55815:35:0;;-1:-1:-1;;;55815:35:0;;;;-1:-1:-1;55815:35:0;;;;;5:2:-1;;;;30:1;27;20:12;5:2;55815:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55815:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55815:35:0;55768:87;;;-1:-1:-1;;;;;;55768:87:0;;;;;;;-1:-1:-1;;;;;55768:87:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55768:87:0;;;;;;;;;;;;;-1:-1:-1;55768:87:0;;;;;-1:-1:-1;55768:87:0;;;;5:2:-1;;;;30:1;27;20:12;50994:329:0;51142:53;;;-1:-1:-1;;;;;51142:53:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;51142:53:0;;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;51132:64:0;;;;;51108:145;;;;;;;;;;;;;;;;;;;;;;51132:64;;51187:7;;51108:145;51233:9;;;;;;51108:145;;51233:9;;;;51108:145;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;51108:9:0;;-1:-1:-1;;;51108:145:0:i;:::-;51264:9;;:51;;;-1:-1:-1;;;51264:51:0;;-1:-1:-1;;;;;51264:51:0;;;;;;;;;;;;;;;;;;;;;;:9;;;;;:32;;:51;;;;;:9;;:51;;;;;;;:9;;:51;;;5:2:-1;;;;30:1;27;20:12;54760:511:0;55003:159;55060:10;55072:4;55078:2;55082:7;55091:5;;55098;;55037:67;;;;;;-1:-1:-1;;;;;55037:67:0;-1:-1:-1;;;;;55037:67:0;;;;;;-1:-1:-1;;;;;55037:67:0;-1:-1:-1;;;;;55037:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;137:4;117:14;-1:-1;;113:30;157:16;;;55037:67:0;;;;;;;;;;;-1:-1:-1;55037:67:0;;;;;1:33:-1;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;;55037:67:0;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;55037:67:0;;;;;;38:4:-1;29:7;25:18;67:10;61:17;-1:-1;;;;;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;55037:67:0;55027:78;;;;;;55120:7;55142:9;;55003:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;55003:9:0;;-1:-1:-1;;;55003:159:0:i;:::-;55173:9;;55220:35;;;-1:-1:-1;;;55220:35:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;55173:9:0;;;;:36;;55210:4;;55216:2;;55173:9;;55220:19;;55240:7;;55249:5;;;;55220:35;;55249:5;;;;55220:35;1:33:-1;99:1;81:16;;;74:27;55220:35:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;;-1:-1;55220:35:0;;-1:-1:-1;55220:35:0;;-1:-1:-1;;;55220:35:0;;;;-1:-1:-1;55220:35:0;;;;;5:2:-1;;;;30:1;27;20:12;5:2;55220:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55220:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;55220:35:0;55173:90;;-1:-1:-1;;;;;;55173:90:0;;;;;;;-1:-1:-1;;;;;55173:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55257:5;;;;55173:90;;;;55257:5;;;;55173:90;1:33:-1;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;;55173:90:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;55173:90:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;55173:90:0;;;;54760:511;;;;;;;;;:::o;49973:471::-;50067:13;50083:16;;;;;;;;;;;;50139:44;;;;;;;;50170:4;50139:44;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;50139:44:0;;;;;;;50129:55;;;;;;;50083:16;;50067:13;50129:99;;50218:9;;50129:80;;:78;:80::i;:::-;:88;:99;:88;:99;:::i;:::-;50112:116;-1:-1:-1;;;;;;50261:20:0;;;;;;:130;;-1:-1:-1;50298:9:0;;:93;;;-1:-1:-1;;;50298:93:0;;-1:-1:-1;;;;;50298:93:0;;;;;;;;;;;;;;;:9;;;;;:27;;:93;;;;;;;;;;;;;;:9;:93;;;5:2:-1;;;;30:1;27;20:12;5:2;50298:93:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;50298:93:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50298:93:0;50261:130;50239:163;;;;;;-1:-1:-1;;;50415:7:0;:16;;;;;;;;;;:21;;50435:1;50415:21;;;-1:-1:-1;49973:471:0:o;6664:269::-;6866:58;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;6866:58:0;;;;;;;6856:69;;;;;;6664:269::o;4458:1930::-;4536:7;4599:9;:16;4619:2;4599:22;4595:74;;-1:-1:-1;4654:1:0;4638:19;;4595:74;5030:4;5015:20;;5009:27;5076:4;5061:20;;5055:27;5130:4;5115:20;;5109:27;4738:9;5101:36;6060:66;6047:79;;6043:129;;;6158:1;6143:17;;;;;;;6043:129;6188:1;:7;;6193:2;6188:7;;:18;;;;;6199:1;:7;;6204:2;6199:7;;6188:18;6184:68;;;6238:1;6223:17;;;;;;;6184:68;6356:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6356:24:0;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6356:24:0;;;;;;;;6349:31;;;;;4458:1930;;;;;:::o
Swarm Source
bzzr://e3c41a026f657885e385c213de0d7c11617b87a376972a5ecf6a853601a8ddb2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.