More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 322 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 19941841 | 143 days ago | IN | 0 ETH | 0.0026585 | ||||
Claim | 19852719 | 155 days ago | IN | 0 ETH | 0.00135981 | ||||
Claim | 19801916 | 162 days ago | IN | 0 ETH | 0.00120676 | ||||
Claim | 19743662 | 170 days ago | IN | 0 ETH | 0.00139809 | ||||
Claim | 19435429 | 214 days ago | IN | 0 ETH | 0.01614104 | ||||
Claim | 19307159 | 232 days ago | IN | 0 ETH | 0.0089307 | ||||
Claim | 19306294 | 232 days ago | IN | 0 ETH | 0.00772645 | ||||
Claim | 19225825 | 243 days ago | IN | 0 ETH | 0.00755963 | ||||
Claim | 19206144 | 246 days ago | IN | 0 ETH | 0.00652772 | ||||
Claim | 19204091 | 246 days ago | IN | 0 ETH | 0.00829667 | ||||
Claim | 19202627 | 246 days ago | IN | 0 ETH | 0.00701152 | ||||
Claim | 19190153 | 248 days ago | IN | 0 ETH | 0.01198949 | ||||
Claim | 18990197 | 276 days ago | IN | 0 ETH | 0.0036951 | ||||
Claim | 18966766 | 279 days ago | IN | 0 ETH | 0.00636134 | ||||
Claim | 18962677 | 280 days ago | IN | 0 ETH | 0.00728735 | ||||
Claim | 18961868 | 280 days ago | IN | 0 ETH | 0.00462244 | ||||
Claim | 18961187 | 280 days ago | IN | 0 ETH | 0.00802414 | ||||
Claim | 18960782 | 280 days ago | IN | 0 ETH | 0.00492337 | ||||
Claim | 18960654 | 280 days ago | IN | 0 ETH | 0.00719052 | ||||
Claim | 18960541 | 280 days ago | IN | 0 ETH | 0.00464121 | ||||
Claim | 18960067 | 280 days ago | IN | 0 ETH | 0.00644361 | ||||
Claim | 18959628 | 280 days ago | IN | 0 ETH | 0.00610837 | ||||
Claim | 18959381 | 280 days ago | IN | 0 ETH | 0.01107365 | ||||
Claim | 18958962 | 280 days ago | IN | 0 ETH | 0.0078987 | ||||
Claim | 18958131 | 281 days ago | IN | 0 ETH | 0.00651955 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
GuiseStakeDistributorTokenV2
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.2) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.7; /** * @dev These functions deal with verification of Merkle Tree proofs. * * The tree and the proofs can be generated using our * https://github.com/OpenZeppelin/merkle-tree[JavaScript library]. * You will find a quickstart guide in the readme. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. * OpenZeppelin's JavaScript library generates merkle trees that are safe * against this attack out of the box. */ library MerkleProof { /** *@dev The multiproof provided is not valid. */ error MerkleProofInvalidMultiproof(); /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Calldata version of {verify} */ function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { return processProofCalldata(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Calldata version of {processProof} */ function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. */ function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } /** * @dev Calldata version of {multiProofVerify} * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. */ function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false * respectively. * * CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer). */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 proofLen = proof.length; uint256 totalHashes = proofFlags.length; // Check proof validity. if (leavesLen + proofLen - 1 != totalHashes) { revert MerkleProofInvalidMultiproof(); } // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { if (proofPos != proofLen) { revert MerkleProofInvalidMultiproof(); } unchecked { return hashes[totalHashes - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Calldata version of {processMultiProof}. * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 proofLen = proof.length; uint256 totalHashes = proofFlags.length; // Check proof validity. if (leavesLen + proofLen - 1 != totalHashes) { revert MerkleProofInvalidMultiproof(); } // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { if (proofPos != proofLen) { revert MerkleProofInvalidMultiproof(); } unchecked { return hashes[totalHashes - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { /// @solidity memory-safe-assembly assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Ownership. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets a `value` amount of tokens as the allowance of `spender` over the * caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); } interface IGuiserDisTributorV1 { function claimUpToWeek(address to) external view returns (uint256); } contract GuiseStakeDistributorTokenV2 is Ownable { IERC20 public GUISE = IERC20(0x7721A4cb6190EDB11d47f51C20968436ECcDAFb8); IGuiserDisTributorV1 public distributorV1 = IGuiserDisTributorV1(0x9a6f0891564325AB3846A50cF256A2fe7f1506DA); uint256 public weekNo; mapping(uint256 => uint256) public rewards; uint256 public totalDistributedReward; mapping(uint256 => bytes32) public merkleRoots; mapping(uint256 => mapping(address => bool)) public hasClaimed; mapping(address => uint256) public totalClaimed; /// ============ Errors ============ error AlreadyClaimed(); error NotInMerkle(); /// ============ Events ============ event Claim(address indexed to, uint256 amount); /// ============ Functions ============ receive() external payable {} function distributeWeeklyReward(bytes32 _merkleRootOfWeek, uint256 _amountGuiseReward) external onlyOwner{ weekNo += 1; rewards[weekNo] = _amountGuiseReward; totalDistributedReward += _amountGuiseReward; merkleRoots[weekNo] = _merkleRootOfWeek; //GUISE.transferFrom(msg.sender, address(this), _amountGuiseReward); } function emergencyWithdrawETH() external onlyOwner{ payable(owner()).transfer(address(this).balance); } function emergencyWithdrawToken(address _token) external onlyOwner{ IERC20(_token).transfer(owner(), IERC20(_token).balanceOf(address(this))); } function claimUpToWeek(address to) public view returns (uint256){ uint claimFromV1 = distributorV1.claimUpToWeek(to); for(uint i = claimFromV1 + 1; i <= weekNo; i++){ if(!hasClaimed[i][to]){ return i-1; } } return weekNo; } struct Reward { uint week; uint256 amount; bytes32[] proof; } function claim(Reward[] calldata claims, address to) external { uint claimFromV1 = distributorV1.claimUpToWeek(to); uint256 totalAmount = 0; for(uint i = 0; i < claims.length; i++){ require(claims[i].week > claimFromV1 && claims[i].week <= weekNo, "Invalid week number"); if (hasClaimed[claims[i].week][to]) revert AlreadyClaimed(); // Verify merkle proof, or revert if not in tree bytes32 leaf = keccak256(abi.encodePacked(to, claims[i].amount)); bool isValidLeaf = MerkleProof.verify(claims[i].proof, merkleRoots[claims[i].week], leaf); if (!isValidLeaf) revert NotInMerkle(); totalAmount += claims[i].amount; // Set address to claimed hasClaimed[claims[i].week][to] = true; } // Claim tokens to address GUISE.transfer(to, totalAmount); totalClaimed[to] += totalAmount; // Emit claim event emit Claim(to, totalAmount); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"name":"AlreadyClaimed","type":"error"},{"inputs":[],"name":"NotInMerkle","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"GUISE","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"week","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"internalType":"struct GuiseStakeDistributorTokenV2.Reward[]","name":"claims","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"claimUpToWeek","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRootOfWeek","type":"bytes32"},{"internalType":"uint256","name":"_amountGuiseReward","type":"uint256"}],"name":"distributeWeeklyReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributorV1","outputs":[{"internalType":"contract IGuiserDisTributorV1","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"emergencyWithdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"hasClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"merkleRoots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDistributedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weekNo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052737721a4cb6190edb11d47f51c20968436eccdafb8600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739a6f0891564325ab3846a50cf256a2fe7f1506da600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156100ba57600080fd5b5060006100cb61016e60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350610176565b600033905090565b611b7d806101856000396000f3fe6080604052600436106100f75760003560e01c8063873f6f9e1161008a578063ef5d9ae811610059578063ef5d9ae81461030f578063f2fde38b1461034c578063f301af4214610375578063f7b39c6b146103b2576100fe565b8063873f6f9e146102515780638da5cb5b1461028e578063de0ac159146102b9578063deaa8afd146102e4576100fe565b80636191436f116100c65780636191436f146101bd578063715018a6146101e657806371c5ecb1146101fd578063845360171461023a576100fe565b8063019a526c146101035780631af032031461012e5780632dd7dcd7146101575780633fe1350214610180576100fe565b366100fe57005b600080fd5b34801561010f57600080fd5b506101186103dd565b604051610125919061136d565b60405180910390f35b34801561013a57600080fd5b50610155600480360381019061015091906113d0565b610403565b005b34801561016357600080fd5b5061017e60048036038101906101799190611462565b61059a565b005b34801561018c57600080fd5b506101a760048036038101906101a291906113d0565b610b18565b6040516101b491906114db565b60405180910390f35b3480156101c957600080fd5b506101e460048036038101906101df9190611558565b610c6c565b005b3480156101f257600080fd5b506101fb610d6c565b005b34801561020957600080fd5b50610224600480360381019061021f9190611598565b610ebf565b60405161023191906115d4565b60405180910390f35b34801561024657600080fd5b5061024f610ed7565b005b34801561025d57600080fd5b50610278600480360381019061027391906115ef565b610fbc565b604051610285919061164a565b60405180910390f35b34801561029a57600080fd5b506102a3610feb565b6040516102b09190611674565b60405180910390f35b3480156102c557600080fd5b506102ce611014565b6040516102db91906114db565b60405180910390f35b3480156102f057600080fd5b506102f961101a565b60405161030691906114db565b60405180910390f35b34801561031b57600080fd5b50610336600480360381019061033191906113d0565b611020565b60405161034391906114db565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e91906113d0565b611038565b005b34801561038157600080fd5b5061039c60048036038101906103979190611598565b6111f9565b6040516103a991906114db565b60405180910390f35b3480156103be57600080fd5b506103c7611211565b6040516103d491906116b0565b60405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61040b611237565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048f90611728565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6104bc610feb565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016104f59190611674565b602060405180830381865afa158015610512573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610536919061175d565b6040518363ffffffff1660e01b815260040161055392919061178a565b6020604051808303816000875af1158015610572573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059691906117df565b5050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633fe13502836040518263ffffffff1660e01b81526004016105f79190611674565b602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061175d565b90506000805b858590508110156109cb578286868381811061065d5761065c61180c565b5b905060200281019061066f919061184a565b600001351180156106aa57506003548686838181106106915761069061180c565b5b90506020028101906106a3919061184a565b6000013511155b6106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e0906118be565b60405180910390fd5b60076000878784818110610700576106ff61180c565b5b9050602002810190610712919061184a565b60000135815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156107a6576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848787848181106107bc576107bb61180c565b5b90506020028101906107ce919061184a565b602001356040516020016107e3929190611947565b60405160208183030381529060405280519060200120905060006108b68888858181106108135761081261180c565b5b9050602002810190610825919061184a565b80604001906108349190611973565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600660008b8b8881811061088b5761088a61180c565b5b905060200281019061089d919061184a565b600001358152602001908152602001600020548461123f565b9050806108ef576040517f8a585be200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8787848181106109025761090161180c565b5b9050602002810190610914919061184a565b60200135846109239190611a05565b93506001600760008a8a8781811061093e5761093d61180c565b5b9050602002810190610950919061184a565b60000135815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505080806109c390611a39565b91505061063e565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401610a2992919061178a565b6020604051808303816000875af1158015610a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6c91906117df565b5080600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610abc9190611a05565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d482604051610b0991906114db565b60405180910390a25050505050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633fe13502846040518263ffffffff1660e01b8152600401610b769190611674565b602060405180830381865afa158015610b93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb7919061175d565b90506000600182610bc89190611a05565b90505b6003548111610c5f576007600082815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c4c57600181610c439190611a81565b92505050610c67565b8080610c5790611a39565b915050610bcb565b506003549150505b919050565b610c74611237565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf890611728565b60405180910390fd5b600160036000828254610d149190611a05565b9250508190555080600460006003548152602001908152602001600020819055508060056000828254610d479190611a05565b9250508190555081600660006003548152602001908152602001600020819055505050565b610d74611237565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890611728565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60066020528060005260406000206000915090505481565b610edf611237565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6390611728565b60405180910390fd5b610f74610feb565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fb9573d6000803e3d6000fd5b50565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b60055481565b60086020528060005260406000206000915090505481565b611040611237565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c490611728565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361113c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113390611b27565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60046020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b60008261124c8584611256565b1490509392505050565b60008082905060005b84518110156112a15761128c8286838151811061127f5761127e61180c565b5b60200260200101516112ac565b9150808061129990611a39565b91505061125f565b508091505092915050565b60008183106112c4576112bf82846112d7565b6112cf565b6112ce83836112d7565b5b905092915050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061133361132e611329846112ee565b61130e565b6112ee565b9050919050565b600061134582611318565b9050919050565b60006113578261133a565b9050919050565b6113678161134c565b82525050565b6000602082019050611382600083018461135e565b92915050565b600080fd5b600080fd5b600061139d826112ee565b9050919050565b6113ad81611392565b81146113b857600080fd5b50565b6000813590506113ca816113a4565b92915050565b6000602082840312156113e6576113e5611388565b5b60006113f4848285016113bb565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611422576114216113fd565b5b8235905067ffffffffffffffff81111561143f5761143e611402565b5b60208301915083602082028301111561145b5761145a611407565b5b9250929050565b60008060006040848603121561147b5761147a611388565b5b600084013567ffffffffffffffff8111156114995761149861138d565b5b6114a58682870161140c565b935093505060206114b8868287016113bb565b9150509250925092565b6000819050919050565b6114d5816114c2565b82525050565b60006020820190506114f060008301846114cc565b92915050565b6000819050919050565b611509816114f6565b811461151457600080fd5b50565b60008135905061152681611500565b92915050565b611535816114c2565b811461154057600080fd5b50565b6000813590506115528161152c565b92915050565b6000806040838503121561156f5761156e611388565b5b600061157d85828601611517565b925050602061158e85828601611543565b9150509250929050565b6000602082840312156115ae576115ad611388565b5b60006115bc84828501611543565b91505092915050565b6115ce816114f6565b82525050565b60006020820190506115e960008301846115c5565b92915050565b6000806040838503121561160657611605611388565b5b600061161485828601611543565b9250506020611625858286016113bb565b9150509250929050565b60008115159050919050565b6116448161162f565b82525050565b600060208201905061165f600083018461163b565b92915050565b61166e81611392565b82525050565b60006020820190506116896000830184611665565b92915050565b600061169a8261133a565b9050919050565b6116aa8161168f565b82525050565b60006020820190506116c560008301846116a1565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006117126020836116cb565b915061171d826116dc565b602082019050919050565b6000602082019050818103600083015261174181611705565b9050919050565b6000815190506117578161152c565b92915050565b60006020828403121561177357611772611388565b5b600061178184828501611748565b91505092915050565b600060408201905061179f6000830185611665565b6117ac60208301846114cc565b9392505050565b6117bc8161162f565b81146117c757600080fd5b50565b6000815190506117d9816117b3565b92915050565b6000602082840312156117f5576117f4611388565b5b6000611803848285016117ca565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000823560016060038336030381126118665761186561183b565b5b80830191505092915050565b7f496e76616c6964207765656b206e756d62657200000000000000000000000000600082015250565b60006118a86013836116cb565b91506118b382611872565b602082019050919050565b600060208201905081810360008301526118d78161189b565b9050919050565b60008160601b9050919050565b60006118f6826118de565b9050919050565b6000611908826118eb565b9050919050565b61192061191b82611392565b6118fd565b82525050565b6000819050919050565b61194161193c826114c2565b611926565b82525050565b6000611953828561190f565b6014820191506119638284611930565b6020820191508190509392505050565b600080833560016020038436030381126119905761198f61183b565b5b80840192508235915067ffffffffffffffff8211156119b2576119b1611840565b5b6020830192506020820236038313156119ce576119cd611845565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a10826114c2565b9150611a1b836114c2565b9250828201905080821115611a3357611a326119d6565b5b92915050565b6000611a44826114c2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611a7657611a756119d6565b5b600182019050919050565b6000611a8c826114c2565b9150611a97836114c2565b9250828203905081811115611aaf57611aae6119d6565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611b116026836116cb565b9150611b1c82611ab5565b604082019050919050565b60006020820190508181036000830152611b4081611b04565b905091905056fea264697066735822122062d744a9be7f1c72faad1f6b8aee456c126bf760adc46574c21d0df2421665b364736f6c63430008120033
Deployed Bytecode
0x6080604052600436106100f75760003560e01c8063873f6f9e1161008a578063ef5d9ae811610059578063ef5d9ae81461030f578063f2fde38b1461034c578063f301af4214610375578063f7b39c6b146103b2576100fe565b8063873f6f9e146102515780638da5cb5b1461028e578063de0ac159146102b9578063deaa8afd146102e4576100fe565b80636191436f116100c65780636191436f146101bd578063715018a6146101e657806371c5ecb1146101fd578063845360171461023a576100fe565b8063019a526c146101035780631af032031461012e5780632dd7dcd7146101575780633fe1350214610180576100fe565b366100fe57005b600080fd5b34801561010f57600080fd5b506101186103dd565b604051610125919061136d565b60405180910390f35b34801561013a57600080fd5b50610155600480360381019061015091906113d0565b610403565b005b34801561016357600080fd5b5061017e60048036038101906101799190611462565b61059a565b005b34801561018c57600080fd5b506101a760048036038101906101a291906113d0565b610b18565b6040516101b491906114db565b60405180910390f35b3480156101c957600080fd5b506101e460048036038101906101df9190611558565b610c6c565b005b3480156101f257600080fd5b506101fb610d6c565b005b34801561020957600080fd5b50610224600480360381019061021f9190611598565b610ebf565b60405161023191906115d4565b60405180910390f35b34801561024657600080fd5b5061024f610ed7565b005b34801561025d57600080fd5b50610278600480360381019061027391906115ef565b610fbc565b604051610285919061164a565b60405180910390f35b34801561029a57600080fd5b506102a3610feb565b6040516102b09190611674565b60405180910390f35b3480156102c557600080fd5b506102ce611014565b6040516102db91906114db565b60405180910390f35b3480156102f057600080fd5b506102f961101a565b60405161030691906114db565b60405180910390f35b34801561031b57600080fd5b50610336600480360381019061033191906113d0565b611020565b60405161034391906114db565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e91906113d0565b611038565b005b34801561038157600080fd5b5061039c60048036038101906103979190611598565b6111f9565b6040516103a991906114db565b60405180910390f35b3480156103be57600080fd5b506103c7611211565b6040516103d491906116b0565b60405180910390f35b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61040b611237565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048f90611728565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6104bc610feb565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016104f59190611674565b602060405180830381865afa158015610512573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610536919061175d565b6040518363ffffffff1660e01b815260040161055392919061178a565b6020604051808303816000875af1158015610572573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059691906117df565b5050565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633fe13502836040518263ffffffff1660e01b81526004016105f79190611674565b602060405180830381865afa158015610614573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610638919061175d565b90506000805b858590508110156109cb578286868381811061065d5761065c61180c565b5b905060200281019061066f919061184a565b600001351180156106aa57506003548686838181106106915761069061180c565b5b90506020028101906106a3919061184a565b6000013511155b6106e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e0906118be565b60405180910390fd5b60076000878784818110610700576106ff61180c565b5b9050602002810190610712919061184a565b60000135815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156107a6576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000848787848181106107bc576107bb61180c565b5b90506020028101906107ce919061184a565b602001356040516020016107e3929190611947565b60405160208183030381529060405280519060200120905060006108b68888858181106108135761081261180c565b5b9050602002810190610825919061184a565b80604001906108349190611973565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600660008b8b8881811061088b5761088a61180c565b5b905060200281019061089d919061184a565b600001358152602001908152602001600020548461123f565b9050806108ef576040517f8a585be200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8787848181106109025761090161180c565b5b9050602002810190610914919061184a565b60200135846109239190611a05565b93506001600760008a8a8781811061093e5761093d61180c565b5b9050602002810190610950919061184a565b60000135815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505080806109c390611a39565b91505061063e565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401610a2992919061178a565b6020604051808303816000875af1158015610a48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6c91906117df565b5080600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610abc9190611a05565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d482604051610b0991906114db565b60405180910390a25050505050565b600080600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633fe13502846040518263ffffffff1660e01b8152600401610b769190611674565b602060405180830381865afa158015610b93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb7919061175d565b90506000600182610bc89190611a05565b90505b6003548111610c5f576007600082815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c4c57600181610c439190611a81565b92505050610c67565b8080610c5790611a39565b915050610bcb565b506003549150505b919050565b610c74611237565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf890611728565b60405180910390fd5b600160036000828254610d149190611a05565b9250508190555080600460006003548152602001908152602001600020819055508060056000828254610d479190611a05565b9250508190555081600660006003548152602001908152602001600020819055505050565b610d74611237565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df890611728565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60066020528060005260406000206000915090505481565b610edf611237565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6390611728565b60405180910390fd5b610f74610feb565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fb9573d6000803e3d6000fd5b50565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b60055481565b60086020528060005260406000206000915090505481565b611040611237565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c490611728565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361113c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113390611b27565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60046020528060005260406000206000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600033905090565b60008261124c8584611256565b1490509392505050565b60008082905060005b84518110156112a15761128c8286838151811061127f5761127e61180c565b5b60200260200101516112ac565b9150808061129990611a39565b91505061125f565b508091505092915050565b60008183106112c4576112bf82846112d7565b6112cf565b6112ce83836112d7565b5b905092915050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061133361132e611329846112ee565b61130e565b6112ee565b9050919050565b600061134582611318565b9050919050565b60006113578261133a565b9050919050565b6113678161134c565b82525050565b6000602082019050611382600083018461135e565b92915050565b600080fd5b600080fd5b600061139d826112ee565b9050919050565b6113ad81611392565b81146113b857600080fd5b50565b6000813590506113ca816113a4565b92915050565b6000602082840312156113e6576113e5611388565b5b60006113f4848285016113bb565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611422576114216113fd565b5b8235905067ffffffffffffffff81111561143f5761143e611402565b5b60208301915083602082028301111561145b5761145a611407565b5b9250929050565b60008060006040848603121561147b5761147a611388565b5b600084013567ffffffffffffffff8111156114995761149861138d565b5b6114a58682870161140c565b935093505060206114b8868287016113bb565b9150509250925092565b6000819050919050565b6114d5816114c2565b82525050565b60006020820190506114f060008301846114cc565b92915050565b6000819050919050565b611509816114f6565b811461151457600080fd5b50565b60008135905061152681611500565b92915050565b611535816114c2565b811461154057600080fd5b50565b6000813590506115528161152c565b92915050565b6000806040838503121561156f5761156e611388565b5b600061157d85828601611517565b925050602061158e85828601611543565b9150509250929050565b6000602082840312156115ae576115ad611388565b5b60006115bc84828501611543565b91505092915050565b6115ce816114f6565b82525050565b60006020820190506115e960008301846115c5565b92915050565b6000806040838503121561160657611605611388565b5b600061161485828601611543565b9250506020611625858286016113bb565b9150509250929050565b60008115159050919050565b6116448161162f565b82525050565b600060208201905061165f600083018461163b565b92915050565b61166e81611392565b82525050565b60006020820190506116896000830184611665565b92915050565b600061169a8261133a565b9050919050565b6116aa8161168f565b82525050565b60006020820190506116c560008301846116a1565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006117126020836116cb565b915061171d826116dc565b602082019050919050565b6000602082019050818103600083015261174181611705565b9050919050565b6000815190506117578161152c565b92915050565b60006020828403121561177357611772611388565b5b600061178184828501611748565b91505092915050565b600060408201905061179f6000830185611665565b6117ac60208301846114cc565b9392505050565b6117bc8161162f565b81146117c757600080fd5b50565b6000815190506117d9816117b3565b92915050565b6000602082840312156117f5576117f4611388565b5b6000611803848285016117ca565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000823560016060038336030381126118665761186561183b565b5b80830191505092915050565b7f496e76616c6964207765656b206e756d62657200000000000000000000000000600082015250565b60006118a86013836116cb565b91506118b382611872565b602082019050919050565b600060208201905081810360008301526118d78161189b565b9050919050565b60008160601b9050919050565b60006118f6826118de565b9050919050565b6000611908826118eb565b9050919050565b61192061191b82611392565b6118fd565b82525050565b6000819050919050565b61194161193c826114c2565b611926565b82525050565b6000611953828561190f565b6014820191506119638284611930565b6020820191508190509392505050565b600080833560016020038436030381126119905761198f61183b565b5b80840192508235915067ffffffffffffffff8211156119b2576119b1611840565b5b6020830192506020820236038313156119ce576119cd611845565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611a10826114c2565b9150611a1b836114c2565b9250828201905080821115611a3357611a326119d6565b5b92915050565b6000611a44826114c2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611a7657611a756119d6565b5b600182019050919050565b6000611a8c826114c2565b9150611a97836114c2565b9250828203905081811115611aaf57611aae6119d6565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611b116026836116cb565b9150611b1c82611ab5565b604082019050919050565b60006020820190508181036000830152611b4081611b04565b905091905056fea264697066735822122062d744a9be7f1c72faad1f6b8aee456c126bf760adc46574c21d0df2421665b364736f6c63430008120033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.011059 | 149,795.3848 | $1,656.54 |
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.