More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Freeze Contract | 17180777 | 573 days ago | IN | 0 ETH | 0.00395079 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17080476 | 587 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
LUKSOGenesisValidatorsDepositContract
Compiler Version
v0.8.15+commit.e14f2714
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// _ _ _ _ ______ ___ ____ _ __ __ _ _ _ _ // | | | | | | |/ / ___| / _ \ / ___| ___ _ __ ___ ___(_)___ \ \ / /_ _| (_) __| | __ _| |_ ___ _ __ ___ // | | | | | | ' /\___ \| | | | | | _ / _ \ '_ \ / _ \/ __| / __| \ \ / / _` | | |/ _` |/ _` | __/ _ \| '__/ __| // | |__| |_| | . \ ___) | |_| | | |_| | __/ | | | __/\__ \ \__ \ \ V / (_| | | | (_| | (_| | || (_) | | \__ \ // |_____\___/|_|\_\____/ \___/ \____|\___|_| |_|\___||___/_|___/ \_/ \__,_|_|_|\__,_|\__,_|\__\___/|_| |___/ // SPDX-License-Identifier: CC0-1.0 pragma solidity 0.8.15; import {IERC165} from "./interfaces/IERC165.sol"; import {IERC1820Registry} from "./interfaces/IERC1820Registry.sol"; /** * @title LUKSO Genesis Validators Deposit Contract * @author LUKSO * * @notice This contract allows anyone to register as Genesis Validators for the LUKSO Blockchain. * To become a Genesis Validator, a participant must send 32 LYXe to this contract alongside its validator data * (public key, withdrawal credentials, signature, deposit data root and initial supply vote). * * This smart contract allows deposits from 2023-04-20 at 04:20pm UTC on. They will revert before that time. * * Once enough Genesis Validator keys are present, the `FREEZER` can initiate the freeze of this contract, * which will happen exactly 46,523 blocks after the initiation (~1 week). * After this contract is frozen, it only functions as a historical reference and all LYXe in it will be forever locked. * * The `genesis.szz` for the LUKSO Blockchain, will be generated out of this smart contract using the `getDepositData()` function and * Genesis Validators will have their LYX balance on the LUKSO Blockchain after the network start. * * @dev The LUKSO Genesis Validators Deposit Contract will be deployed on the Ethereum network. * The contract automatically registers deposits and their related deposit validator data when receiving * the callback from the LYXe token contract via the `tokensReceived` function. * * Once the contract is frozen, no more deposits can be made. * */ contract LUKSOGenesisValidatorsDepositContract is IERC165 { /** * @dev The `FREEZER` of the contract can freeze the contract via the `freezeContract()` function */ address public constant FREEZER = 0x6109dcd72b8a2485A5b3Ac4E76965159e9893aB7; // The address of the LYXe token contract. address public constant LYX_TOKEN_CONTRACT_ADDRESS = 0xA8b919680258d369114910511cc87595aec0be6D; // The address of the registry contract (ERC1820 Registry) address public constant ERC1820_REGISTRY_ADDRESS = 0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24; // The hash of the interface of the contract that receives tokens bytes32 public constant TOKENS_RECIPIENT_INTERFACE_HASH = 0xb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b; // _to_little_endian_64(uint64(32 ether / 1 gwei)) bytes constant AMOUNT_TO_LITTLE_ENDIAN_64 = hex"0040597307000000"; // Timestamp from which the deposits are accepted (2023-04-20 04:20PM UTC) uint256 public constant DEPOSIT_START_TIMESTAMP = 1682007600; // The current number of deposits in the contract uint256 internal deposit_count; // The delay in blocks for the contract to be frozen (46,523 blocks ~ 1 week) uint256 public constant FREEZE_DELAY = 46_523; // The block number when the contract will be frozen uint256 public freezeBlockNumber; /** * @notice New LYXe deposit made * @dev Emitted when an address made a deposit of 32 LYXe to become a genesis validator on LUKSO * @param pubkey the public key of the genesis validator * @param withdrawal_credentials the withdrawal credentials of the genesis validator * @param amount the amount of LYXe deposited (32 LYXe) * @param signature the BLS signature of the genesis validator * @param index the deposit number for this deposit */ event DepositEvent( bytes pubkey, bytes withdrawal_credentials, uint256 amount, bytes signature, uint256 index ); /** * @dev Emitted when the `FREEZER` of the contract freezes the contract * @param initiatedAt the block number when freezing the contract was initiated * @param freezeAt the block number when the contract will be frozen */ event FreezeInitiated(uint256 initiatedAt, uint256 freezeAt); /** * @dev Storing all the deposit data which should be sliced * in order to get the following parameters: * - pubkey - the first 48 bytes * - withdrawal_credentials - the following 32 bytes * - signature - the following 96 bytes * - deposit_data_root - the following 32 bytes * - initial_supply_vote - the last byte is the initial supply of LYX (in millions) * the genesis validator voted for (0 means non-vote) */ mapping(uint256 => bytes) internal deposit_data; /** * @dev Storing the amount of votes for each supply where the index is the initial supply of LYX in million */ mapping(uint256 => uint256) public supplyVoteCounter; /** * @dev Storing the hash of the public key in order to check if it is already registered */ mapping(bytes32 => bool) private _registeredPubKeyHash; /** * @dev Set the `TOKENS_RECIPIENT_INTERFACE_HASH` for the deposit contract */ constructor() { // Set this contract as the implementer of the tokens recipient interface in the registry contract IERC1820Registry(ERC1820_REGISTRY_ADDRESS).setInterfaceImplementer( address(this), TOKENS_RECIPIENT_INTERFACE_HASH, address(this) ); } /** * @dev Whenever this contract receives LYXe tokens, it must be for the reason of becoming a Genesis Validator. * * Requirements: * - `amount` MUST be exactly 32 LYXe * - `depositData` MUST be encoded properly * - `depositData` MUST contain: * • pubkey - the first 48 bytes * • withdrawal_credentials - the following 32 bytes * • signature - the following 96 bytes * • deposit_data_root - the following 32 bytes * • supply - that last byte is the initial supply of LYX in million where 0 means non-vote */ function tokensReceived( address /* operator */, address /* from */, address /* to */, uint256 amount, bytes calldata depositData, bytes calldata /* operatorData */ ) external { // Check that the current timestamp is after the deposit start timestamp (2023-04-20 04:20PM UTC) require(block.timestamp >= DEPOSIT_START_TIMESTAMP, "LUKSOGenesisValidatorsDepositContract: Deposits not yet allowed"); uint256 freezeBlockNumberValue = freezeBlockNumber; // Check the contract is not frozen require( freezeBlockNumberValue == 0 || block.number < freezeBlockNumberValue, "LUKSOGenesisValidatorsDepositContract: Contract is frozen" ); // Check the calls can only come from the LYXe token contract require( msg.sender == LYX_TOKEN_CONTRACT_ADDRESS, "LUKSOGenesisValidatorsDepositContract: Not called on LYXe transfer" ); // Check the amount received is exactly 32 LYXe require( amount == 32 ether, "LUKSOGenesisValidatorsDepositContract: Cannot send an amount different from 32 LYXe" ); /** * Check the deposit data has the correct length (209 bytes) * - 48 bytes for the pubkey * - 32 bytes for the withdrawal_credentials * - 96 bytes for the BLS signature * - 32 bytes for the deposit_data_root * - 1 byte for the initialSupplyVote */ require( depositData.length == 209, "LUKSOGenesisValidatorsDepositContract: depositData not encoded properly" ); uint256 initialSupplyVote = uint256(uint8(depositData[208])); // Check the `initialSupplyVote` is a value between 0 and 100 (inclusive), where 0 is a non-vote require( initialSupplyVote <= 100, "LUKSOGenesisValidatorsDepositContract: Invalid initialSupplyVote vote" ); // increment the counter for the given initial supply vote supplyVoteCounter[initialSupplyVote]++; // Store the deposit data in the contract state deposit_data[deposit_count] = depositData; // Extract the validator deposit data from the `depositData` bytes calldata pubkey = depositData[:48]; bytes calldata withdrawal_credentials = depositData[48:80]; bytes calldata signature = depositData[80:176]; bytes32 deposit_data_root = bytes32(depositData[176:208]); // Compute the SHA256 hash of the pubkey bytes32 pubKeyHash = sha256(pubkey); // Prevent depositing twice for the same pubkey require( !_registeredPubKeyHash[pubKeyHash], "LUKSOGenesisValidatorsDepositContract: Deposit already processed" ); // Mark the pubkey as registered _registeredPubKeyHash[pubKeyHash] = true; // Compute deposit data root (`DepositData` hash tree root) bytes32 pubkey_root = sha256(abi.encodePacked(pubkey, bytes16(0))); // Compute the root of the BLS signature data bytes32 signature_root = sha256( abi.encodePacked( sha256(abi.encodePacked(signature[:64])), sha256(abi.encodePacked(signature[64:], bytes32(0))) ) ); // Compute the root of the deposit data bytes32 computedDataRoot = sha256( abi.encodePacked( sha256(abi.encodePacked(pubkey_root, withdrawal_credentials)), sha256(abi.encodePacked(AMOUNT_TO_LITTLE_ENDIAN_64, bytes24(0), signature_root)) ) ); // Verify computed and expected deposit data roots match require( computedDataRoot == deposit_data_root, "LUKSOGenesisValidatorsDepositContract: reconstructed DepositData does not match supplied deposit_data_root" ); // Emit `DepositEvent` log emit DepositEvent( pubkey, withdrawal_credentials, 32 ether, signature, deposit_count ); deposit_count++; } /** * @dev This function will freeze the LUKSO Genesis Deposit Contract after 46,523 blocks (~ 1 week). * This function can only be called by the `FREEZER` once! */ function freezeContract() external { // Check the contract is not already frozen require( freezeBlockNumber == 0, "LUKSOGenesisValidatorsDepositContract: Contract is already frozen" ); // Check this function can only be called by the `FREEZER` require(msg.sender == FREEZER, "LUKSOGenesisValidatorsDepositContract: Caller is not the freezer"); // Set the freeze block number to the current block number + FREEZE_DELAY uint256 freezeAt = block.number + FREEZE_DELAY; freezeBlockNumber = freezeAt; emit FreezeInitiated(block.number, freezeAt); } /** * @dev Returns whether the public key is registered or not * * @param pubkey The public key of the genesis validator * @return bool `true` if the public key is registered, `false` otherwise */ function isPubkeyRegistered(bytes calldata pubkey) external view returns (bool) { return _registeredPubKeyHash[sha256(pubkey)]; } /** * @dev Returns the current number of deposits * * @return The number of deposits at the time the function was called */ function depositCount() external view returns (uint256) { return deposit_count; } /** * @dev Retrieves an array of votes per supply and the total number of votes */ function getsVotesPerSupply() external view returns (uint256[101] memory votesPerSupply, uint256 totalVotes) { for (uint256 i = 0; i <= 100; i++) { votesPerSupply[i] = supplyVoteCounter[i]; } return (votesPerSupply, deposit_count); } /** * @dev Get an array of all encoded deposit data */ function getDepositData() external view returns (bytes[] memory returnedArray) { returnedArray = new bytes[](deposit_count); for (uint256 i = 0; i < deposit_count; i++) returnedArray[i] = deposit_data[i]; } /** * @dev Get the encoded deposit data at a given `index` */ function getDepositDataByIndex(uint256 index) external view returns (bytes memory) { return deposit_data[index]; } /** * @dev Determines whether the contract supports a given interface * * @param interfaceId The interface ID to check * @return `true` if the contract supports the interface, `false` otherwise */ function supportsInterface(bytes4 interfaceId) external pure override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: CC0-1.0 pragma solidity 0.8.15; // Based on official specification in https://eips.ethereum.org/EIPS/eip-165 interface IERC165 { /// @notice Query if a contract implements an interface /// @param interfaceId The interface identifier, as specified in ERC-165 /// @dev Interface identification is specified in ERC-165. This function /// uses less than 30,000 gas. /// @return `true` if the contract implements `interfaceId` and /// `interfaceId` is not 0xffffffff, `false` otherwise function supportsInterface(bytes4 interfaceId) external pure returns (bool); }
// SPDX-License-Identifier: CC0-1.0 pragma solidity 0.8.15; interface IERC1820Registry { function setInterfaceImplementer( address _addr, bytes32 _interfaceHash, address _implementer ) external; }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"pubkey","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"withdrawal_credentials","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"signature","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"}],"name":"DepositEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"initiatedAt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"freezeAt","type":"uint256"}],"name":"FreezeInitiated","type":"event"},{"inputs":[],"name":"DEPOSIT_START_TIMESTAMP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ERC1820_REGISTRY_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREEZER","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREEZE_DELAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LYX_TOKEN_CONTRACT_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKENS_RECIPIENT_INTERFACE_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freezeBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freezeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getDepositData","outputs":[{"internalType":"bytes[]","name":"returnedArray","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getDepositDataByIndex","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getsVotesPerSupply","outputs":[{"internalType":"uint256[101]","name":"votesPerSupply","type":"uint256[101]"},{"internalType":"uint256","name":"totalVotes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"pubkey","type":"bytes"}],"name":"isPubkeyRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"supplyVoteCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"depositData","type":"bytes"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"tokensReceived","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50731820a4b7618bde71dce8cdc73aab6c95905fad2473ffffffffffffffffffffffffffffffffffffffff166329965a1d307fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b60001b306040518463ffffffff1660e01b8152600401620000889392919062000122565b600060405180830381600087803b158015620000a357600080fd5b505af1158015620000b8573d6000803e3d6000fd5b505050506200015f565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000ef82620000c2565b9050919050565b6200010181620000e2565b82525050565b6000819050919050565b6200011c8162000107565b82525050565b6000606082019050620001396000830186620000f6565b62000148602083018562000111565b620001576040830184620000f6565b949350505050565b6125dc806200016f6000396000f3fe608060405234801561001057600080fd5b50600436106100ff5760003560e01c80637e84159a11610097578063a584a9b511610066578063a584a9b51461028f578063d7ae894214610299578063e0197c7e146102b7578063f0cd185e146102e7576100ff565b80637e84159a146102045780638614d41114610223578063a427989d14610253578063a46a3cf614610271576100ff565b806338a42159116100d357806338a421591461018c5780633c9fc5f7146101aa5780636807ca94146101c857806372581cc0146101e6576100ff565b806223de291461010457806301ffc9a71461012057806327db25d5146101505780632dfdf0b51461016e575b600080fd5b61011e60048036038101906101199190611127565b610317565b005b61013a6004803603810190610135919061124e565b610b1c565b6040516101479190611296565b60405180910390f35b610158610b86565b60405161016591906112c0565b60405180910390f35b610176610b9e565b60405161018391906112ea565b60405180910390f35b610194610ba7565b6040516101a19190611460565b60405180910390f35b6101b2610cd9565b6040516101bf91906112c0565b60405180910390f35b6101d0610cf1565b6040516101dd91906112ea565b60405180910390f35b6101ee610cf7565b6040516101fb919061149b565b60405180910390f35b61020c610d1e565b60405161021a929190611561565b60405180910390f35b61023d6004803603810190610238919061158c565b610d86565b60405161024a9190611296565b60405180910390f35b61025b610e02565b60405161026891906112ea565b60405180910390f35b610279610e0a565b60405161028691906112c0565b60405180910390f35b610297610e22565b005b6102a1610f3e565b6040516102ae91906112ea565b60405180910390f35b6102d160048036038101906102cc91906115d9565b610f44565b6040516102de91906112ea565b60405180910390f35b61030160048036038101906102fc91906115d9565b610f5c565b60405161030e9190611650565b60405180910390f35b636441663042101561035e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610355906116f5565b60405180910390fd5b60006001549050600081148061037357508043105b6103b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a990611787565b60405180910390fd5b73a8b919680258d369114910511cc87595aec0be6d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042b9061183f565b60405180910390fd5b6801bc16d674ec800000861461047f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610476906118f7565b60405180910390fd5b60d185859050146104c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bc906119af565b60405180910390fd5b6000858560d08181106104db576104da6119cf565b5b9050013560f81c60f81b60f81c60ff1690506064811115610531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052890611a96565b60405180910390fd5b60036000828152602001908152602001600020600081548092919061055590611ae5565b919050555085856002600080548152602001908152602001600020918261057d929190611d73565b50366000878760009060309261059593929190611e4d565b9150915036600089896030906050926105b093929190611e4d565b915091503660008b8b60509060b0926105cb93929190611e4d565b9150915060008c8c60b09060d0926105e593929190611e4d565b906105f09190611e88565b9050600060028888604051610606929190611f26565b602060405180830381855afa158015610623573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906106469190611f6b565b90506004600082815260200190815260200160002060009054906101000a900460ff16156106a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a09061200a565b60405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff021916908315150217905550600060028989600060801b6040516020016106f293929190612077565b60405160208183030381529060405260405161070e91906120d2565b602060405180830381855afa15801561072b573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061074e9190611f6b565b90506000600280878760009060409261076993929190611e4d565b60405160200161077a9291906120e9565b60405160208183030381529060405260405161079691906120d2565b602060405180830381855afa1580156107b3573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906107d69190611f6b565b6002888860409080926107eb93929190611e4d565b6000801b60405160200161080193929190612123565b60405160208183030381529060405260405161081d91906120d2565b602060405180830381855afa15801561083a573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061085d9190611f6b565b60405160200161086e92919061214d565b60405160208183030381529060405260405161088a91906120d2565b602060405180830381855afa1580156108a7573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906108ca9190611f6b565b90506000600280848b8b6040516020016108e693929190612179565b60405160208183030381529060405260405161090291906120d2565b602060405180830381855afa15801561091f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906109429190611f6b565b60026040518060400160405280600881526020017e40597307000000000000000000000000000000000000000000000000000000815250600060401b86604051602001610991939291906121f0565b6040516020818303038152906040526040516109ad91906120d2565b602060405180830381855afa1580156109ca573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906109ed9190611f6b565b6040516020016109fe92919061214d565b604051602081830303815290604052604051610a1a91906120d2565b602060405180830381855afa158015610a37573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610a5a9190611f6b565b9050848114610a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a95906122e7565b60405180910390fd5b7fa57fd2bfae1c46ee48e66e9b1168c6cb20be3fbed56cc46f58c300d6654fe6f38b8b8b8b6801bc16d674ec8000008c8c600054604051610ae698979695949392919061236f565b60405180910390a1600080815480929190610b0090611ae5565b9190505550505050505050505050505050505050505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b73a8b919680258d369114910511cc87595aec0be6d81565b60008054905090565b606060005467ffffffffffffffff811115610bc557610bc4611b38565b5b604051908082528060200260200182016040528015610bf857816020015b6060815260200190600190039081610be35790505b50905060005b600054811015610cd557600260008281526020019081526020016000208054610c2690611b96565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5290611b96565b8015610c9f5780601f10610c7457610100808354040283529160200191610c9f565b820191906000526020600020905b815481529060010190602001808311610c8257829003601f168201915b5050505050828281518110610cb757610cb66119cf565b5b60200260200101819052508080610ccd90611ae5565b915050610bfe565b5090565b731820a4b7618bde71dce8cdc73aab6c95905fad2481565b60015481565b7fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b60001b81565b610d26611001565b600080600090505b60648111610d79576003600082815260200190815260200160002054838260658110610d5d57610d5c6119cf565b5b6020020181815250508080610d7190611ae5565b915050610d2e565b5081600054915091509091565b60006004600060028585604051610d9e929190611f26565b602060405180830381855afa158015610dbb573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610dde9190611f6b565b815260200190815260200160002060009054906101000a900460ff16905092915050565b636441663081565b736109dcd72b8a2485a5b3ac4e76965159e9893ab781565b600060015414610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e90612475565b60405180910390fd5b736109dcd72b8a2485a5b3ac4e76965159e9893ab773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090612507565b60405180910390fd5b600061b5bb43610ef99190612527565b9050806001819055507ffa4968f0ab3792f416cf3811c8227cc4ca8747011d859851e27df9a0b8287bdd4382604051610f3392919061257d565b60405180910390a150565b61b5bb81565b60036020528060005260406000206000915090505481565b6060600260008381526020019081526020016000208054610f7c90611b96565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa890611b96565b8015610ff55780601f10610fca57610100808354040283529160200191610ff5565b820191906000526020600020905b815481529060010190602001808311610fd857829003601f168201915b50505050509050919050565b60405180610ca00160405280606590602082028036833780820191505090505090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006110598261102e565b9050919050565b6110698161104e565b811461107457600080fd5b50565b60008135905061108681611060565b92915050565b6000819050919050565b61109f8161108c565b81146110aa57600080fd5b50565b6000813590506110bc81611096565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126110e7576110e66110c2565b5b8235905067ffffffffffffffff811115611104576111036110c7565b5b6020830191508360018202830111156111205761111f6110cc565b5b9250929050565b60008060008060008060008060c0898b03121561114757611146611024565b5b60006111558b828c01611077565b98505060206111668b828c01611077565b97505060406111778b828c01611077565b96505060606111888b828c016110ad565b955050608089013567ffffffffffffffff8111156111a9576111a8611029565b5b6111b58b828c016110d1565b945094505060a089013567ffffffffffffffff8111156111d8576111d7611029565b5b6111e48b828c016110d1565b92509250509295985092959890939650565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61122b816111f6565b811461123657600080fd5b50565b60008135905061124881611222565b92915050565b60006020828403121561126457611263611024565b5b600061127284828501611239565b91505092915050565b60008115159050919050565b6112908161127b565b82525050565b60006020820190506112ab6000830184611287565b92915050565b6112ba8161104e565b82525050565b60006020820190506112d560008301846112b1565b92915050565b6112e48161108c565b82525050565b60006020820190506112ff60008301846112db565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561136b578082015181840152602081019050611350565b8381111561137a576000848401525b50505050565b6000601f19601f8301169050919050565b600061139c82611331565b6113a6818561133c565b93506113b681856020860161134d565b6113bf81611380565b840191505092915050565b60006113d68383611391565b905092915050565b6000602082019050919050565b60006113f682611305565b6114008185611310565b93508360208202850161141285611321565b8060005b8581101561144e578484038952815161142f85826113ca565b945061143a836113de565b925060208a01995050600181019050611416565b50829750879550505050505092915050565b6000602082019050818103600083015261147a81846113eb565b905092915050565b6000819050919050565b61149581611482565b82525050565b60006020820190506114b0600083018461148c565b92915050565b600060659050919050565b600081905092915050565b6000819050919050565b6114df8161108c565b82525050565b60006114f183836114d6565b60208301905092915050565b6000602082019050919050565b611513816114b6565b61151d81846114c1565b9250611528826114cc565b8060005b8381101561155957815161154087826114e5565b965061154b836114fd565b92505060018101905061152c565b505050505050565b6000610cc082019050611577600083018561150a565b611585610ca08301846112db565b9392505050565b600080602083850312156115a3576115a2611024565b5b600083013567ffffffffffffffff8111156115c1576115c0611029565b5b6115cd858286016110d1565b92509250509250929050565b6000602082840312156115ef576115ee611024565b5b60006115fd848285016110ad565b91505092915050565b600082825260208201905092915050565b600061162282611331565b61162c8185611606565b935061163c81856020860161134d565b61164581611380565b840191505092915050565b6000602082019050818103600083015261166a8184611617565b905092915050565b600082825260208201905092915050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a204465706f73697473206e6f742079657420616c6c6f77656400602082015250565b60006116df603f83611672565b91506116ea82611683565b604082019050919050565b6000602082019050818103600083015261170e816116d2565b9050919050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a20436f6e74726163742069732066726f7a656e00000000000000602082015250565b6000611771603983611672565b915061177c82611715565b604082019050919050565b600060208201905081810360008301526117a081611764565b9050919050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a204e6f742063616c6c6564206f6e204c595865207472616e736660208201527f6572000000000000000000000000000000000000000000000000000000000000604082015250565b6000611829604283611672565b9150611834826117a7565b606082019050919050565b600060208201905081810360008301526118588161181c565b9050919050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a2043616e6e6f742073656e6420616e20616d6f756e742064696660208201527f666572656e742066726f6d203332204c59586500000000000000000000000000604082015250565b60006118e1605383611672565b91506118ec8261185f565b606082019050919050565b60006020820190508181036000830152611910816118d4565b9050919050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a206465706f73697444617461206e6f7420656e636f646564207060208201527f726f7065726c7900000000000000000000000000000000000000000000000000604082015250565b6000611999604783611672565b91506119a482611917565b606082019050919050565b600060208201905081810360008301526119c88161198c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a20496e76616c696420696e697469616c537570706c79566f746560208201527f20766f7465000000000000000000000000000000000000000000000000000000604082015250565b6000611a80604583611672565b9150611a8b826119fe565b606082019050919050565b60006020820190508181036000830152611aaf81611a73565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611af08261108c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b2257611b21611ab6565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611bae57607f821691505b602082108103611bc157611bc0611b67565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611c297fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611bec565b611c338683611bec565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611c70611c6b611c668461108c565b611c4b565b61108c565b9050919050565b6000819050919050565b611c8a83611c55565b611c9e611c9682611c77565b848454611bf9565b825550505050565b600090565b611cb3611ca6565b611cbe818484611c81565b505050565b5b81811015611ce257611cd7600082611cab565b600181019050611cc4565b5050565b601f821115611d2757611cf881611bc7565b611d0184611bdc565b81016020851015611d10578190505b611d24611d1c85611bdc565b830182611cc3565b50505b505050565b600082821c905092915050565b6000611d4a60001984600802611d2c565b1980831691505092915050565b6000611d638383611d39565b9150826002028217905092915050565b611d7d8383611b2d565b67ffffffffffffffff811115611d9657611d95611b38565b5b611da08254611b96565b611dab828285611ce6565b6000601f831160018114611dda5760008415611dc8578287013590505b611dd28582611d57565b865550611e3a565b601f198416611de886611bc7565b60005b82811015611e1057848901358255600182019150602085019450602081019050611deb565b86831015611e2d5784890135611e29601f891682611d39565b8355505b6001600288020188555050505b50505050505050565b600080fd5b600080fd5b60008085851115611e6157611e60611e43565b5b83861115611e7257611e71611e48565b5b6001850283019150848603905094509492505050565b6000611e948383611b2d565b82611e9f8135611482565b92506020821015611edf57611eda7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802611bec565b831692505b505092915050565b600081905092915050565b82818337600083830152505050565b6000611f0d8385611ee7565b9350611f1a838584611ef2565b82840190509392505050565b6000611f33828486611f01565b91508190509392505050565b611f4881611482565b8114611f5357600080fd5b50565b600081519050611f6581611f3f565b92915050565b600060208284031215611f8157611f80611024565b5b6000611f8f84828501611f56565b91505092915050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a204465706f73697420616c72656164792070726f636573736564602082015250565b6000611ff4604083611672565b9150611fff82611f98565b604082019050919050565b6000602082019050818103600083015261202381611fe7565b9050919050565b60007fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169050919050565b6000819050919050565b61207161206c8261202a565b612056565b82525050565b6000612084828587611f01565b91506120908284612060565b601082019150819050949350505050565b60006120ac82611331565b6120b68185611ee7565b93506120c681856020860161134d565b80840191505092915050565b60006120de82846120a1565b915081905092915050565b60006120f6828486611f01565b91508190509392505050565b6000819050919050565b61211d61211882611482565b612102565b82525050565b6000612130828587611f01565b915061213c828461210c565b602082019150819050949350505050565b6000612159828561210c565b602082019150612169828461210c565b6020820191508190509392505050565b6000612185828661210c565b602082019150612196828486611f01565b9150819050949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082169050919050565b6000819050919050565b6121ea6121e5826121a3565b6121cf565b82525050565b60006121fc82866120a1565b915061220882856121d9565b601882019150612218828461210c565b602082019150819050949350505050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a207265636f6e7374727563746564204465706f7369744461746160208201527f20646f6573206e6f74206d6174636820737570706c696564206465706f73697460408201527f5f646174615f726f6f7400000000000000000000000000000000000000000000606082015250565b60006122d1606a83611672565b91506122dc82612229565b608082019050919050565b60006020820190508181036000830152612300816122c4565b9050919050565b60006123138385611606565b9350612320838584611ef2565b61232983611380565b840190509392505050565b6000819050919050565b600061235961235461234f84612334565b611c4b565b61108c565b9050919050565b6123698161233e565b82525050565b600060a082019050818103600083015261238a818a8c612307565b9050818103602083015261239f81888a612307565b90506123ae6040830187612360565b81810360608301526123c1818587612307565b90506123d060808301846112db565b9998505050505050505050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a20436f6e747261637420697320616c72656164792066726f7a6560208201527f6e00000000000000000000000000000000000000000000000000000000000000604082015250565b600061245f604183611672565b915061246a826123dd565b606082019050919050565b6000602082019050818103600083015261248e81612452565b9050919050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a2043616c6c6572206973206e6f742074686520667265657a6572602082015250565b60006124f1604083611672565b91506124fc82612495565b604082019050919050565b60006020820190508181036000830152612520816124e4565b9050919050565b60006125328261108c565b915061253d8361108c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561257257612571611ab6565b5b828201905092915050565b600060408201905061259260008301856112db565b61259f60208301846112db565b939250505056fea2646970667358221220ff55c424fcc726367c42b4c4fb0d2b77db383da098efa7e604b296c45ca7d7ee64736f6c634300080f0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ff5760003560e01c80637e84159a11610097578063a584a9b511610066578063a584a9b51461028f578063d7ae894214610299578063e0197c7e146102b7578063f0cd185e146102e7576100ff565b80637e84159a146102045780638614d41114610223578063a427989d14610253578063a46a3cf614610271576100ff565b806338a42159116100d357806338a421591461018c5780633c9fc5f7146101aa5780636807ca94146101c857806372581cc0146101e6576100ff565b806223de291461010457806301ffc9a71461012057806327db25d5146101505780632dfdf0b51461016e575b600080fd5b61011e60048036038101906101199190611127565b610317565b005b61013a6004803603810190610135919061124e565b610b1c565b6040516101479190611296565b60405180910390f35b610158610b86565b60405161016591906112c0565b60405180910390f35b610176610b9e565b60405161018391906112ea565b60405180910390f35b610194610ba7565b6040516101a19190611460565b60405180910390f35b6101b2610cd9565b6040516101bf91906112c0565b60405180910390f35b6101d0610cf1565b6040516101dd91906112ea565b60405180910390f35b6101ee610cf7565b6040516101fb919061149b565b60405180910390f35b61020c610d1e565b60405161021a929190611561565b60405180910390f35b61023d6004803603810190610238919061158c565b610d86565b60405161024a9190611296565b60405180910390f35b61025b610e02565b60405161026891906112ea565b60405180910390f35b610279610e0a565b60405161028691906112c0565b60405180910390f35b610297610e22565b005b6102a1610f3e565b6040516102ae91906112ea565b60405180910390f35b6102d160048036038101906102cc91906115d9565b610f44565b6040516102de91906112ea565b60405180910390f35b61030160048036038101906102fc91906115d9565b610f5c565b60405161030e9190611650565b60405180910390f35b636441663042101561035e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610355906116f5565b60405180910390fd5b60006001549050600081148061037357508043105b6103b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a990611787565b60405180910390fd5b73a8b919680258d369114910511cc87595aec0be6d73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042b9061183f565b60405180910390fd5b6801bc16d674ec800000861461047f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610476906118f7565b60405180910390fd5b60d185859050146104c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104bc906119af565b60405180910390fd5b6000858560d08181106104db576104da6119cf565b5b9050013560f81c60f81b60f81c60ff1690506064811115610531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052890611a96565b60405180910390fd5b60036000828152602001908152602001600020600081548092919061055590611ae5565b919050555085856002600080548152602001908152602001600020918261057d929190611d73565b50366000878760009060309261059593929190611e4d565b9150915036600089896030906050926105b093929190611e4d565b915091503660008b8b60509060b0926105cb93929190611e4d565b9150915060008c8c60b09060d0926105e593929190611e4d565b906105f09190611e88565b9050600060028888604051610606929190611f26565b602060405180830381855afa158015610623573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906106469190611f6b565b90506004600082815260200190815260200160002060009054906101000a900460ff16156106a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a09061200a565b60405180910390fd5b60016004600083815260200190815260200160002060006101000a81548160ff021916908315150217905550600060028989600060801b6040516020016106f293929190612077565b60405160208183030381529060405260405161070e91906120d2565b602060405180830381855afa15801561072b573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061074e9190611f6b565b90506000600280878760009060409261076993929190611e4d565b60405160200161077a9291906120e9565b60405160208183030381529060405260405161079691906120d2565b602060405180830381855afa1580156107b3573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906107d69190611f6b565b6002888860409080926107eb93929190611e4d565b6000801b60405160200161080193929190612123565b60405160208183030381529060405260405161081d91906120d2565b602060405180830381855afa15801561083a573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061085d9190611f6b565b60405160200161086e92919061214d565b60405160208183030381529060405260405161088a91906120d2565b602060405180830381855afa1580156108a7573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906108ca9190611f6b565b90506000600280848b8b6040516020016108e693929190612179565b60405160208183030381529060405260405161090291906120d2565b602060405180830381855afa15801561091f573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906109429190611f6b565b60026040518060400160405280600881526020017e40597307000000000000000000000000000000000000000000000000000000815250600060401b86604051602001610991939291906121f0565b6040516020818303038152906040526040516109ad91906120d2565b602060405180830381855afa1580156109ca573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906109ed9190611f6b565b6040516020016109fe92919061214d565b604051602081830303815290604052604051610a1a91906120d2565b602060405180830381855afa158015610a37573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610a5a9190611f6b565b9050848114610a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a95906122e7565b60405180910390fd5b7fa57fd2bfae1c46ee48e66e9b1168c6cb20be3fbed56cc46f58c300d6654fe6f38b8b8b8b6801bc16d674ec8000008c8c600054604051610ae698979695949392919061236f565b60405180910390a1600080815480929190610b0090611ae5565b9190505550505050505050505050505050505050505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b73a8b919680258d369114910511cc87595aec0be6d81565b60008054905090565b606060005467ffffffffffffffff811115610bc557610bc4611b38565b5b604051908082528060200260200182016040528015610bf857816020015b6060815260200190600190039081610be35790505b50905060005b600054811015610cd557600260008281526020019081526020016000208054610c2690611b96565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5290611b96565b8015610c9f5780601f10610c7457610100808354040283529160200191610c9f565b820191906000526020600020905b815481529060010190602001808311610c8257829003601f168201915b5050505050828281518110610cb757610cb66119cf565b5b60200260200101819052508080610ccd90611ae5565b915050610bfe565b5090565b731820a4b7618bde71dce8cdc73aab6c95905fad2481565b60015481565b7fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b60001b81565b610d26611001565b600080600090505b60648111610d79576003600082815260200190815260200160002054838260658110610d5d57610d5c6119cf565b5b6020020181815250508080610d7190611ae5565b915050610d2e565b5081600054915091509091565b60006004600060028585604051610d9e929190611f26565b602060405180830381855afa158015610dbb573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190610dde9190611f6b565b815260200190815260200160002060009054906101000a900460ff16905092915050565b636441663081565b736109dcd72b8a2485a5b3ac4e76965159e9893ab781565b600060015414610e67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5e90612475565b60405180910390fd5b736109dcd72b8a2485a5b3ac4e76965159e9893ab773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090612507565b60405180910390fd5b600061b5bb43610ef99190612527565b9050806001819055507ffa4968f0ab3792f416cf3811c8227cc4ca8747011d859851e27df9a0b8287bdd4382604051610f3392919061257d565b60405180910390a150565b61b5bb81565b60036020528060005260406000206000915090505481565b6060600260008381526020019081526020016000208054610f7c90611b96565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa890611b96565b8015610ff55780601f10610fca57610100808354040283529160200191610ff5565b820191906000526020600020905b815481529060010190602001808311610fd857829003601f168201915b50505050509050919050565b60405180610ca00160405280606590602082028036833780820191505090505090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006110598261102e565b9050919050565b6110698161104e565b811461107457600080fd5b50565b60008135905061108681611060565b92915050565b6000819050919050565b61109f8161108c565b81146110aa57600080fd5b50565b6000813590506110bc81611096565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126110e7576110e66110c2565b5b8235905067ffffffffffffffff811115611104576111036110c7565b5b6020830191508360018202830111156111205761111f6110cc565b5b9250929050565b60008060008060008060008060c0898b03121561114757611146611024565b5b60006111558b828c01611077565b98505060206111668b828c01611077565b97505060406111778b828c01611077565b96505060606111888b828c016110ad565b955050608089013567ffffffffffffffff8111156111a9576111a8611029565b5b6111b58b828c016110d1565b945094505060a089013567ffffffffffffffff8111156111d8576111d7611029565b5b6111e48b828c016110d1565b92509250509295985092959890939650565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61122b816111f6565b811461123657600080fd5b50565b60008135905061124881611222565b92915050565b60006020828403121561126457611263611024565b5b600061127284828501611239565b91505092915050565b60008115159050919050565b6112908161127b565b82525050565b60006020820190506112ab6000830184611287565b92915050565b6112ba8161104e565b82525050565b60006020820190506112d560008301846112b1565b92915050565b6112e48161108c565b82525050565b60006020820190506112ff60008301846112db565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561136b578082015181840152602081019050611350565b8381111561137a576000848401525b50505050565b6000601f19601f8301169050919050565b600061139c82611331565b6113a6818561133c565b93506113b681856020860161134d565b6113bf81611380565b840191505092915050565b60006113d68383611391565b905092915050565b6000602082019050919050565b60006113f682611305565b6114008185611310565b93508360208202850161141285611321565b8060005b8581101561144e578484038952815161142f85826113ca565b945061143a836113de565b925060208a01995050600181019050611416565b50829750879550505050505092915050565b6000602082019050818103600083015261147a81846113eb565b905092915050565b6000819050919050565b61149581611482565b82525050565b60006020820190506114b0600083018461148c565b92915050565b600060659050919050565b600081905092915050565b6000819050919050565b6114df8161108c565b82525050565b60006114f183836114d6565b60208301905092915050565b6000602082019050919050565b611513816114b6565b61151d81846114c1565b9250611528826114cc565b8060005b8381101561155957815161154087826114e5565b965061154b836114fd565b92505060018101905061152c565b505050505050565b6000610cc082019050611577600083018561150a565b611585610ca08301846112db565b9392505050565b600080602083850312156115a3576115a2611024565b5b600083013567ffffffffffffffff8111156115c1576115c0611029565b5b6115cd858286016110d1565b92509250509250929050565b6000602082840312156115ef576115ee611024565b5b60006115fd848285016110ad565b91505092915050565b600082825260208201905092915050565b600061162282611331565b61162c8185611606565b935061163c81856020860161134d565b61164581611380565b840191505092915050565b6000602082019050818103600083015261166a8184611617565b905092915050565b600082825260208201905092915050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a204465706f73697473206e6f742079657420616c6c6f77656400602082015250565b60006116df603f83611672565b91506116ea82611683565b604082019050919050565b6000602082019050818103600083015261170e816116d2565b9050919050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a20436f6e74726163742069732066726f7a656e00000000000000602082015250565b6000611771603983611672565b915061177c82611715565b604082019050919050565b600060208201905081810360008301526117a081611764565b9050919050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a204e6f742063616c6c6564206f6e204c595865207472616e736660208201527f6572000000000000000000000000000000000000000000000000000000000000604082015250565b6000611829604283611672565b9150611834826117a7565b606082019050919050565b600060208201905081810360008301526118588161181c565b9050919050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a2043616e6e6f742073656e6420616e20616d6f756e742064696660208201527f666572656e742066726f6d203332204c59586500000000000000000000000000604082015250565b60006118e1605383611672565b91506118ec8261185f565b606082019050919050565b60006020820190508181036000830152611910816118d4565b9050919050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a206465706f73697444617461206e6f7420656e636f646564207060208201527f726f7065726c7900000000000000000000000000000000000000000000000000604082015250565b6000611999604783611672565b91506119a482611917565b606082019050919050565b600060208201905081810360008301526119c88161198c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a20496e76616c696420696e697469616c537570706c79566f746560208201527f20766f7465000000000000000000000000000000000000000000000000000000604082015250565b6000611a80604583611672565b9150611a8b826119fe565b606082019050919050565b60006020820190508181036000830152611aaf81611a73565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611af08261108c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b2257611b21611ab6565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611bae57607f821691505b602082108103611bc157611bc0611b67565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611c297fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611bec565b611c338683611bec565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611c70611c6b611c668461108c565b611c4b565b61108c565b9050919050565b6000819050919050565b611c8a83611c55565b611c9e611c9682611c77565b848454611bf9565b825550505050565b600090565b611cb3611ca6565b611cbe818484611c81565b505050565b5b81811015611ce257611cd7600082611cab565b600181019050611cc4565b5050565b601f821115611d2757611cf881611bc7565b611d0184611bdc565b81016020851015611d10578190505b611d24611d1c85611bdc565b830182611cc3565b50505b505050565b600082821c905092915050565b6000611d4a60001984600802611d2c565b1980831691505092915050565b6000611d638383611d39565b9150826002028217905092915050565b611d7d8383611b2d565b67ffffffffffffffff811115611d9657611d95611b38565b5b611da08254611b96565b611dab828285611ce6565b6000601f831160018114611dda5760008415611dc8578287013590505b611dd28582611d57565b865550611e3a565b601f198416611de886611bc7565b60005b82811015611e1057848901358255600182019150602085019450602081019050611deb565b86831015611e2d5784890135611e29601f891682611d39565b8355505b6001600288020188555050505b50505050505050565b600080fd5b600080fd5b60008085851115611e6157611e60611e43565b5b83861115611e7257611e71611e48565b5b6001850283019150848603905094509492505050565b6000611e948383611b2d565b82611e9f8135611482565b92506020821015611edf57611eda7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802611bec565b831692505b505092915050565b600081905092915050565b82818337600083830152505050565b6000611f0d8385611ee7565b9350611f1a838584611ef2565b82840190509392505050565b6000611f33828486611f01565b91508190509392505050565b611f4881611482565b8114611f5357600080fd5b50565b600081519050611f6581611f3f565b92915050565b600060208284031215611f8157611f80611024565b5b6000611f8f84828501611f56565b91505092915050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a204465706f73697420616c72656164792070726f636573736564602082015250565b6000611ff4604083611672565b9150611fff82611f98565b604082019050919050565b6000602082019050818103600083015261202381611fe7565b9050919050565b60007fffffffffffffffffffffffffffffffff0000000000000000000000000000000082169050919050565b6000819050919050565b61207161206c8261202a565b612056565b82525050565b6000612084828587611f01565b91506120908284612060565b601082019150819050949350505050565b60006120ac82611331565b6120b68185611ee7565b93506120c681856020860161134d565b80840191505092915050565b60006120de82846120a1565b915081905092915050565b60006120f6828486611f01565b91508190509392505050565b6000819050919050565b61211d61211882611482565b612102565b82525050565b6000612130828587611f01565b915061213c828461210c565b602082019150819050949350505050565b6000612159828561210c565b602082019150612169828461210c565b6020820191508190509392505050565b6000612185828661210c565b602082019150612196828486611f01565b9150819050949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000082169050919050565b6000819050919050565b6121ea6121e5826121a3565b6121cf565b82525050565b60006121fc82866120a1565b915061220882856121d9565b601882019150612218828461210c565b602082019150819050949350505050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a207265636f6e7374727563746564204465706f7369744461746160208201527f20646f6573206e6f74206d6174636820737570706c696564206465706f73697460408201527f5f646174615f726f6f7400000000000000000000000000000000000000000000606082015250565b60006122d1606a83611672565b91506122dc82612229565b608082019050919050565b60006020820190508181036000830152612300816122c4565b9050919050565b60006123138385611606565b9350612320838584611ef2565b61232983611380565b840190509392505050565b6000819050919050565b600061235961235461234f84612334565b611c4b565b61108c565b9050919050565b6123698161233e565b82525050565b600060a082019050818103600083015261238a818a8c612307565b9050818103602083015261239f81888a612307565b90506123ae6040830187612360565b81810360608301526123c1818587612307565b90506123d060808301846112db565b9998505050505050505050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a20436f6e747261637420697320616c72656164792066726f7a6560208201527f6e00000000000000000000000000000000000000000000000000000000000000604082015250565b600061245f604183611672565b915061246a826123dd565b606082019050919050565b6000602082019050818103600083015261248e81612452565b9050919050565b7f4c554b534f47656e6573697356616c696461746f72734465706f736974436f6e60008201527f74726163743a2043616c6c6572206973206e6f742074686520667265657a6572602082015250565b60006124f1604083611672565b91506124fc82612495565b604082019050919050565b60006020820190508181036000830152612520816124e4565b9050919050565b60006125328261108c565b915061253d8361108c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561257257612571611ab6565b5b828201905092915050565b600060408201905061259260008301856112db565b61259f60208301846112db565b939250505056fea2646970667358221220ff55c424fcc726367c42b4c4fb0d2b77db383da098efa7e604b296c45ca7d7ee64736f6c634300080f0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $1.78 | 330,752 | $587,739.77 |
Loading...
Loading
[ Download: CSV Export ]
[ 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.