Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 54 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim With Proof... | 20453631 | 4 days ago | IN | 0 ETH | 0.00003741 | ||||
Claim For Share ... | 20428746 | 8 days ago | IN | 0 ETH | 0.00288978 | ||||
Claim For Share ... | 20428160 | 8 days ago | IN | 0 ETH | 0.0052781 | ||||
Claim For Share ... | 20427777 | 8 days ago | IN | 0 ETH | 0.0048858 | ||||
Claim For Share ... | 20415139 | 10 days ago | IN | 0 ETH | 0.00085892 | ||||
Claim With Proof... | 20266971 | 30 days ago | IN | 0 ETH | 0.00078928 | ||||
Claim With Proof... | 20204171 | 39 days ago | IN | 0 ETH | 0.00075019 | ||||
Claim With Proof... | 20201190 | 40 days ago | IN | 0 ETH | 0.00062012 | ||||
Claim With Proof... | 20197224 | 40 days ago | IN | 0 ETH | 0.00062227 | ||||
Claim With Proof... | 20152754 | 46 days ago | IN | 0 ETH | 0.00065995 | ||||
Claim With Proof... | 20123846 | 50 days ago | IN | 0 ETH | 0.00110211 | ||||
Claim With Proof... | 20110199 | 52 days ago | IN | 0 ETH | 0.0011604 | ||||
Claim With Proof... | 20059926 | 59 days ago | IN | 0 ETH | 0.0017706 | ||||
Claim With Proof... | 19944013 | 76 days ago | IN | 0 ETH | 0.00152223 | ||||
Claim With Proof... | 19937313 | 77 days ago | IN | 0 ETH | 0.00232167 | ||||
Claim With Proof... | 19905061 | 81 days ago | IN | 0 ETH | 0.0010828 | ||||
Claim With Proof... | 19899984 | 82 days ago | IN | 0 ETH | 0.00109582 | ||||
Claim With Proof... | 19875066 | 85 days ago | IN | 0 ETH | 0.00177873 | ||||
Claim With Proof... | 19855221 | 88 days ago | IN | 0 ETH | 0.00120952 | ||||
Claim With Proof... | 19850597 | 89 days ago | IN | 0 ETH | 0.00121197 | ||||
Claim With Proof... | 19842841 | 90 days ago | IN | 0 ETH | 0.00202375 | ||||
Claim With Proof... | 19834097 | 91 days ago | IN | 0 ETH | 0.00140276 | ||||
Claim With Proof... | 19815105 | 94 days ago | IN | 0 ETH | 0.00143292 | ||||
Claim With Proof... | 19811131 | 94 days ago | IN | 0 ETH | 0.00251744 | ||||
Claim With Proof... | 19809991 | 94 days ago | IN | 0 ETH | 0.00248994 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
HubAirdrop
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-02-08 */ pragma solidity ^0.8.19; // // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) /** * @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 amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` 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 amount) 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 `amount` 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 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` 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 amount) external returns (bool); } // // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol) /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // // OpenZeppelin Contracts (last updated v4.9.2) (utils/cryptography/MerkleProof.sol) /** * @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 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} * * _Available since v4.7._ */ 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. * * _Available since v4.4._ */ 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} * * _Available since v4.7._ */ 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. * * _Available since v4.7._ */ 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. * * _Available since v4.7._ */ 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). * * _Available since v4.7._ */ 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. require(leavesLen + proofLen - 1 == totalHashes, "MerkleProof: invalid multiproof"); // 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) { require(proofPos == proofLen, "MerkleProof: invalid multiproof"); 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. * * _Available since v4.7._ */ 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. require(leavesLen + proofLen - 1 == totalHashes, "MerkleProof: invalid multiproof"); // 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) { require(proofPos == proofLen, "MerkleProof: invalid multiproof"); 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) } } } // struct LockArg { uint256 platform; address asset; address receiver; uint48 vestingStart; uint16 firstUnlockRatio; uint48 unlockInterval; uint48 lockDuration; uint192 totalAmount; bytes32 reason; bool allowTax; address paymentAsset; } bytes32 constant PRESALE_REASON = keccak256("Presale"); bytes32 constant LP_REASON = keccak256("Liquidity"); interface ICryptohubLockFactory { function setInternalLocker(address _locker, bool _isInternal) external; function lock(LockArg memory _lockArg) external returns (uint256, address); function internalFreeLock( LockArg calldata _lockArg ) external returns (uint256, address); function increaseCredits( uint256 _platform, address _user, uint256 _amount ) external; function increaseAmountForLock( uint256 _platform, uint256 _lockId, uint256 _amount ) external; function claimUnlockedToken( uint256 _platform, uint256 _lockId ) external returns (uint256 unlockedAmount); } // // import pauseable // import ownable // import merkletree // 784.52 /2401516.4333059166 contract HubAirdrop is Ownable, Pausable { uint256 public SHARE_TO_HUB = 150000 * 10 ** 18; IERC20 constant hub = IERC20(0x6923F9B683111DCc0e20124e9A031dEeAE5DaD93); IERC721 constant shareNft = IERC721(0xD2e53A95FaCbd47fe3973B913cB91FA3b013bbF5); address constant treasury = 0xDD48fA33AB3e6A094B1cA89c1578B9ca96d0e563; ICryptohubLockFactory public constant lockFactory = ICryptohubLockFactory(0x46A43cf26743BA40d05aE350A85ABBa4883A6299); // merkle root bytes32 constant merkleRoot = 0xaa6ae5be7358e4b66589c70ef41b513254f673f77634ee6108e395ccf84f3b35; // 0xc16062aae93cac69c3ec3e811f24177509c2fe8c64a97743a95827bcb4e3b8eb; mapping(address => bool) public claimed; constructor() //IERC20 _hub, //IERC721 _shareNft, //address _treasury, //ICryptohubLockFactory _lockFactory, //uint48 _vestingStart { //hub = _hub; //shareNft = _shareNft; //treasury = _treasury; // lockFactory = _lockFactory; //vestingStart = _vestingStart; address[17] memory alreadyClaimed = [ 0xe6A3Fc461bF791340A5167de0b36Fb672F7D0e9E, 0x6ed91BF4cae5f8FaF3681B75D3F7b085ba52ce8e, 0x2454bB212dc355b2d34aA0a7bCA48ca00831826A, 0xBE519970889Ce4b0E8a943546b3D2cA9D0FFcaB0, 0xC479d61faFAd7374af8eE1902d3797E8cCAb0522, 0x68dFA343ADbA1b082Bc1e0a08d30DAc42a6b01F1, 0x228FB49438278f653db9Aaf079c9dE0725DEFe21, 0xF92A0B81144f28A6174b1BBeE09aEe2FA0f40fA5, 0x8689FBE4c9EDB797Ce89FC0De12016272060DAF0, 0xDC9D84Bb8B7e090bE93D51F0f6B751f9E498Ad04, 0x8fBFD3faBD443334B6f413b5931477d4DeBEAFa9, 0x354f433658C541Ee62439A879d50c796B0671397, 0xd65B547cee39dd1D54680616FE466753Dbdde842, 0x9238A15D59Eb5484E7F1CddCF5E23539c50a05B2, 0x76c07087bb4EB86d2516081F79F400507ac2370F, 0xF0854C4dC9d3f1EBD4f0e44eb91587F7fc5Bd518, 0x47717FbD06594ed9faA16Ec1C60a3Dd4f70bf2D2 ]; for (uint256 i = 0; i < alreadyClaimed.length; i++) { claimed[alreadyClaimed[i]] = true; } // transfer ownership to multisig transferOwnership(treasury); } /* uint256 platform; address asset; address receiver; uint48 vestingStart; uint16 firstUnlockRatio; uint48 unlockInterval; uint48 lockDuration; uint192 totalAmount; bytes32 reason; bool allowTax; address paymentAsset; */ uint48 constant vestingStart = 1699387200; uint16 constant firstUnlockRatio = 1000; uint48 constant unlockInterval = 30 days; uint48 constant lockDuration = 6 * 30 days; function claimForShareHolder( uint256[] calldata _tokenIds ) external whenNotPaused { for (uint256 i = 0; i < _tokenIds.length; i++) { uint256 tokenId = _tokenIds[i]; require( shareNft.ownerOf(tokenId) == msg.sender, "HubAirdrop: not owner" ); shareNft.transferFrom(msg.sender, owner(), tokenId); } uint256 amount = _tokenIds.length * SHARE_TO_HUB; LockArg memory _lockArg = LockArg({ platform: 0, asset: address(hub), receiver: msg.sender, vestingStart: vestingStart, firstUnlockRatio: firstUnlockRatio, unlockInterval: unlockInterval, lockDuration: lockDuration, totalAmount: uint192(amount), reason: PRESALE_REASON, allowTax: false, paymentAsset: address(0) }); // approve hub hub.approve(address(lockFactory), amount); (uint256 lockId, ) = lockFactory.internalFreeLock(_lockArg); // if vesting start has arived claim if (block.timestamp >= vestingStart) { lockFactory.claimUnlockedToken(0, lockId); } } function claimWithProofFor( address _user, uint256 _amount, bytes32[] calldata _proof ) external whenNotPaused { _claimWithProof(_user, _amount, _proof); } function claimWithProof( uint256 _amount, bytes32[] calldata _proof ) external whenNotPaused { _claimWithProof(msg.sender, _amount, _proof); } function batchClaimWithProof( address[] calldata _users, uint256[] calldata _amounts, bytes32[][] calldata _proofs ) external whenNotPaused { require( _users.length == _amounts.length && _users.length == _proofs.length, "HubAirdrop: invalid input" ); for (uint256 i = 0; i < _users.length; i++) { _claimWithProof(_users[i], _amounts[i], _proofs[i]); } } function _claimWithProof( address _user, uint256 _amount, bytes32[] calldata _proof ) internal { require(!claimed[_user], "HubAirdrop: already claimed"); // Verify the merkle proof. bytes32 node = keccak256(abi.encodePacked(_user, _amount)); require( MerkleProof.verify(_proof, merkleRoot, node), "HubAirdrop: Invalid proof." ); claimed[_user] = true; LockArg memory _lockArg = LockArg({ platform: 0, asset: address(hub), receiver: _user, vestingStart: vestingStart, firstUnlockRatio: firstUnlockRatio, unlockInterval: unlockInterval, lockDuration: lockDuration, totalAmount: uint192(_amount), reason: PRESALE_REASON, allowTax: false, paymentAsset: address(0) }); // approve hub hub.approve(address(lockFactory), _amount); (uint256 lockId, ) = lockFactory.internalFreeLock(_lockArg); // if vesting start has arived claim if (block.timestamp >= vestingStart) { lockFactory.claimUnlockedToken(0, lockId); } } function recoverLostTokens(address _token) external onlyOwner { if (address(0) == _token) { // use call to transfer eth (bool success, ) = payable(owner()).call{ value: address(this).balance }(""); require(success, "HubAirdrop: ETH_TRANSFER_FAILED"); } else { IERC20(_token).transfer( owner(), IERC20(_token).balanceOf(address(this)) ); } } function setClaimed(address _user, bool _claimed) external onlyOwner { claimed[_user] = _claimed; } function setManyClaimed(address[] calldata _users) external onlyOwner { for (uint256 i = 0; i < _users.length; i++) { claimed[_users[i]] = true; } } function setPaused(bool _paused) external onlyOwner { if (_paused) { _pause(); } else { _unpause(); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"SHARE_TO_HUB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"bytes32[][]","name":"_proofs","type":"bytes32[][]"}],"name":"batchClaimWithProof","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"claimForShareHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"claimWithProof","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"claimWithProofFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockFactory","outputs":[{"internalType":"contract ICryptohubLockFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"recoverLostTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_claimed","type":"bool"}],"name":"setClaimed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"setManyClaimed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052691fc3842bd1f071c000006001553480156200001e575f80fd5b506200002a3362000288565b5f805460ff60a01b19168155604080516102208101825273e6a3fc461bf791340a5167de0b36fb672f7d0e9e8152736ed91bf4cae5f8faf3681b75d3f7b085ba52ce8e6020820152732454bb212dc355b2d34aa0a7bca48ca00831826a9181019190915273be519970889ce4b0e8a943546b3d2ca9d0ffcab0606082015273c479d61fafad7374af8ee1902d3797e8ccab052260808201527368dfa343adba1b082bc1e0a08d30dac42a6b01f160a082015273228fb49438278f653db9aaf079c9de0725defe2160c082015273f92a0b81144f28a6174b1bbee09aee2fa0f40fa560e0820152738689fbe4c9edb797ce89fc0de12016272060daf061010082015273dc9d84bb8b7e090be93d51f0f6b751f9e498ad04610120820152738fbfd3fabd443334b6f413b5931477d4debeafa961014082015273354f433658c541ee62439a879d50c796b067139761016082015273d65b547cee39dd1d54680616fe466753dbdde842610180820152739238a15d59eb5484e7f1cddcf5e23539c50a05b26101a08201527376c07087bb4eb86d2516081f79f400507ac2370f6101c082015273f0854c4dc9d3f1ebd4f0e44eb91587f7fc5bd5186101e08201527347717fbd06594ed9faa16ec1c60a3dd4f70bf2d2610200820152905b60118110156200026157600160025f848460118110620002295762000229620003b7565b602090810291909101516001600160a01b031682528101919091526040015f20805460ff191691151591909117905560010162000205565b506200028173dd48fa33ab3e6a094b1ca89c1578b9ca96d0e563620002d7565b50620003cb565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620002e16200035a565b6001600160a01b0381166200034c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620003578162000288565b50565b5f546001600160a01b03163314620003b55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000343565b565b634e487b7160e01b5f52603260045260245ffd5b61147080620003d95f395ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063834fa31011610093578063c884ef8311610063578063c884ef83146101ec578063cc1befb81461020e578063ef67bbf414610221578063f2fde38b14610234575f80fd5b8063834fa310146101a35780638da5cb5b146101b65780639811445c146101c6578063b9e8ce2c146101d9575f80fd5b806322c8018f116100ce57806322c8018f146101585780632a7c6fbd1461016b5780635c975abb1461017e578063715018a61461019b575f80fd5b806316c38b3c146100f457806317a3cc82146101095780631db9be1b14610125575b5f80fd5b610107610102366004611020565b610247565b005b61011260015481565b6040519081526020015b60405180910390f35b6101407346a43cf26743ba40d05ae350a85abba4883a629981565b6040516001600160a01b03909116815260200161011c565b610107610166366004611083565b610268565b6101076101793660046110df565b610281565b5f54600160a01b900460ff165b604051901515815260200161011c565b61010761029b565b6101076101b1366004611137565b6102ae565b5f546001600160a01b0316610140565b6101076101d43660046111ca565b61039c565b6101076101e7366004611209565b61075a565b61018b6101fa366004611209565b60026020525f908152604090205460ff1681565b61010761021c366004611224565b610908565b61010761022f3660046111ca565b61093a565b610107610242366004611209565b6109a7565b61024f610a1d565b80156102605761025d610a76565b50565b61025d610ad5565b610270610b10565b61027c33848484610b5c565b505050565b610289610b10565b61029584848484610b5c565b50505050565b6102a3610a1d565b6102ac5f610eed565b565b6102b6610b10565b84831480156102c457508481145b6103155760405162461bcd60e51b815260206004820152601960248201527f48756241697264726f703a20696e76616c696420696e7075740000000000000060448201526064015b60405180910390fd5b5f5b858110156103935761038b8787838181106103345761033461125b565b90506020020160208101906103499190611209565b86868481811061035b5761035b61125b565b905060200201358585858181106103745761037461125b565b9050602002810190610386919061126f565b610b5c565b600101610317565b50505050505050565b6103a4610b10565b5f5b8181101561052c575f8383838181106103c1576103c161125b565b6040516331a9108f60e11b81526020919091029290920135600483018190529250339173d2e53a95facbd47fe3973b913cb91fa3b013bbf59150636352211e90602401602060405180830381865afa15801561041f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061044391906112b5565b6001600160a01b0316146104915760405162461bcd60e51b8152602060048201526015602482015274243ab120b4b9323937b81d103737ba1037bbb732b960591b604482015260640161030c565b73d2e53a95facbd47fe3973b913cb91fa3b013bbf56323b872dd336104bd5f546001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018490526064015f604051808303815f87803b158015610509575f80fd5b505af115801561051b573d5f803e3d5ffd5b5050600190930192506103a6915050565b506001545f9061053c90836112d0565b60408051610160810182525f808252736923f9b683111dcc0e20124e9a031deeae5dad9360208301819052338385015263654a974060608401526103e8608084015262278d0060a084015262ed4e0060c08401526001600160c01b03851660e08401527fcff8a2a4dc9d8050baca90b7a315a144de7e38fa773edf442d524939ffcce3fa6101008401526101208301829052610140830191909152915163095ea7b360e01b81527346a43cf26743ba40d05ae350a85abba4883a62996004820152602481018490529293509163095ea7b3906044016020604051808303815f875af115801561062d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065191906112f3565b5060405163688a048560e11b81525f907346a43cf26743ba40d05ae350a85abba4883a62999063d114090a9061068b90859060040161130e565b60408051808303815f875af11580156106a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ca9190611400565b50905063654a97404210610753576040516333e04d9160e21b81525f6004820152602481018290527346a43cf26743ba40d05ae350a85abba4883a62999063cf813644906044016020604051808303815f875af115801561072d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107519190611423565b505b5050505050565b610762610a1d565b6001600160a01b0381165f03610816575f80546040516001600160a01b039091169047908381818185875af1925050503d805f81146107bc576040519150601f19603f3d011682016040523d82523d5f602084013e6107c1565b606091505b50509050806108125760405162461bcd60e51b815260206004820152601f60248201527f48756241697264726f703a204554485f5452414e534645525f4641494c454400604482015260640161030c565b5050565b806001600160a01b031663a9059cbb6108365f546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610878573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089c9190611423565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156108e4573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081291906112f3565b610910610a1d565b6001600160a01b03919091165f908152600260205260409020805460ff1916911515919091179055565b610942610a1d565b5f5b8181101561027c57600160025f8585858181106109635761096361125b565b90506020020160208101906109789190611209565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610944565b6109af610a1d565b6001600160a01b038116610a145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161030c565b61025d81610eed565b5f546001600160a01b031633146102ac5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161030c565b610a7e610b10565b5f805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ab83390565b6040516001600160a01b03909116815260200160405180910390a1565b610add610f3c565b5f805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610ab8565b5f54600160a01b900460ff16156102ac5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161030c565b6001600160a01b0384165f9081526002602052604090205460ff1615610bc45760405162461bcd60e51b815260206004820152601b60248201527f48756241697264726f703a20616c726561647920636c61696d65640000000000604482015260640161030c565b6040516bffffffffffffffffffffffff19606086901b166020820152603481018490525f90605401604051602081830303815290604052805190602001209050610c638383808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152507faa6ae5be7358e4b66589c70ef41b513254f673f77634ee6108e395ccf84f3b359250859150610f8b9050565b610caf5760405162461bcd60e51b815260206004820152601a60248201527f48756241697264726f703a20496e76616c69642070726f6f662e000000000000604482015260640161030c565b6001600160a01b0385165f818152600260209081526040808320805460ff19166001179055805161016081018252838152736923f9b683111dcc0e20124e9a031deeae5dad939281018390528082019490945263654a974060608501526103e8608085015262278d0060a085015262ed4e0060c08501526001600160c01b03881660e08501527fcff8a2a4dc9d8050baca90b7a315a144de7e38fa773edf442d524939ffcce3fa6101008501526101208401839052610140840192909252905163095ea7b360e01b81527346a43cf26743ba40d05ae350a85abba4883a629960048201526024810187905263095ea7b3906044016020604051808303815f875af1158015610dbf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de391906112f3565b5060405163688a048560e11b81525f907346a43cf26743ba40d05ae350a85abba4883a62999063d114090a90610e1d90859060040161130e565b60408051808303815f875af1158015610e38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5c9190611400565b50905063654a97404210610393576040516333e04d9160e21b81525f6004820152602481018290527346a43cf26743ba40d05ae350a85abba4883a62999063cf813644906044016020604051808303815f875af1158015610ebf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee39190611423565b5050505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f54600160a01b900460ff166102ac5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161030c565b5f82610f978584610fa0565b14949350505050565b5f81815b8451811015610fda57610fd082868381518110610fc357610fc361125b565b6020026020010151610fe4565b9150600101610fa4565b5090505b92915050565b5f818310610ffe575f82815260208490526040902061100c565b5f8381526020839052604090205b9392505050565b801515811461025d575f80fd5b5f60208284031215611030575f80fd5b813561100c81611013565b5f8083601f84011261104b575f80fd5b50813567ffffffffffffffff811115611062575f80fd5b6020830191508360208260051b850101111561107c575f80fd5b9250929050565b5f805f60408486031215611095575f80fd5b83359250602084013567ffffffffffffffff8111156110b2575f80fd5b6110be8682870161103b565b9497909650939450505050565b6001600160a01b038116811461025d575f80fd5b5f805f80606085870312156110f2575f80fd5b84356110fd816110cb565b935060208501359250604085013567ffffffffffffffff81111561111f575f80fd5b61112b8782880161103b565b95989497509550505050565b5f805f805f806060878903121561114c575f80fd5b863567ffffffffffffffff80821115611163575f80fd5b61116f8a838b0161103b565b90985096506020890135915080821115611187575f80fd5b6111938a838b0161103b565b909650945060408901359150808211156111ab575f80fd5b506111b889828a0161103b565b979a9699509497509295939492505050565b5f80602083850312156111db575f80fd5b823567ffffffffffffffff8111156111f1575f80fd5b6111fd8582860161103b565b90969095509350505050565b5f60208284031215611219575f80fd5b813561100c816110cb565b5f8060408385031215611235575f80fd5b8235611240816110cb565b9150602083013561125081611013565b809150509250929050565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112611284575f80fd5b83018035915067ffffffffffffffff82111561129e575f80fd5b6020019150600581901b360382131561107c575f80fd5b5f602082840312156112c5575f80fd5b815161100c816110cb565b8082028115828204841417610fde57634e487b7160e01b5f52601160045260245ffd5b5f60208284031215611303575f80fd5b815161100c81611013565b81518152602080830151610160830191611332908401826001600160a01b03169052565b50604083015161134d60408401826001600160a01b03169052565b506060830151611367606084018265ffffffffffff169052565b50608083015161137d608084018261ffff169052565b5060a083015161139760a084018265ffffffffffff169052565b5060c08301516113b160c084018265ffffffffffff169052565b5060e08301516113cc60e08401826001600160c01b03169052565b50610100838101519083015261012080840151151590830152610140928301516001600160a01b0316929091019190915290565b5f8060408385031215611411575f80fd5b825191506020830151611250816110cb565b5f60208284031215611433575f80fd5b505191905056fea264697066735822122033739262555366ae33796b5602cf3bcf374a8522ef338e316fd7b9341dc856ec64736f6c63430008180033
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106100f0575f3560e01c8063834fa31011610093578063c884ef8311610063578063c884ef83146101ec578063cc1befb81461020e578063ef67bbf414610221578063f2fde38b14610234575f80fd5b8063834fa310146101a35780638da5cb5b146101b65780639811445c146101c6578063b9e8ce2c146101d9575f80fd5b806322c8018f116100ce57806322c8018f146101585780632a7c6fbd1461016b5780635c975abb1461017e578063715018a61461019b575f80fd5b806316c38b3c146100f457806317a3cc82146101095780631db9be1b14610125575b5f80fd5b610107610102366004611020565b610247565b005b61011260015481565b6040519081526020015b60405180910390f35b6101407346a43cf26743ba40d05ae350a85abba4883a629981565b6040516001600160a01b03909116815260200161011c565b610107610166366004611083565b610268565b6101076101793660046110df565b610281565b5f54600160a01b900460ff165b604051901515815260200161011c565b61010761029b565b6101076101b1366004611137565b6102ae565b5f546001600160a01b0316610140565b6101076101d43660046111ca565b61039c565b6101076101e7366004611209565b61075a565b61018b6101fa366004611209565b60026020525f908152604090205460ff1681565b61010761021c366004611224565b610908565b61010761022f3660046111ca565b61093a565b610107610242366004611209565b6109a7565b61024f610a1d565b80156102605761025d610a76565b50565b61025d610ad5565b610270610b10565b61027c33848484610b5c565b505050565b610289610b10565b61029584848484610b5c565b50505050565b6102a3610a1d565b6102ac5f610eed565b565b6102b6610b10565b84831480156102c457508481145b6103155760405162461bcd60e51b815260206004820152601960248201527f48756241697264726f703a20696e76616c696420696e7075740000000000000060448201526064015b60405180910390fd5b5f5b858110156103935761038b8787838181106103345761033461125b565b90506020020160208101906103499190611209565b86868481811061035b5761035b61125b565b905060200201358585858181106103745761037461125b565b9050602002810190610386919061126f565b610b5c565b600101610317565b50505050505050565b6103a4610b10565b5f5b8181101561052c575f8383838181106103c1576103c161125b565b6040516331a9108f60e11b81526020919091029290920135600483018190529250339173d2e53a95facbd47fe3973b913cb91fa3b013bbf59150636352211e90602401602060405180830381865afa15801561041f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061044391906112b5565b6001600160a01b0316146104915760405162461bcd60e51b8152602060048201526015602482015274243ab120b4b9323937b81d103737ba1037bbb732b960591b604482015260640161030c565b73d2e53a95facbd47fe3973b913cb91fa3b013bbf56323b872dd336104bd5f546001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018490526064015f604051808303815f87803b158015610509575f80fd5b505af115801561051b573d5f803e3d5ffd5b5050600190930192506103a6915050565b506001545f9061053c90836112d0565b60408051610160810182525f808252736923f9b683111dcc0e20124e9a031deeae5dad9360208301819052338385015263654a974060608401526103e8608084015262278d0060a084015262ed4e0060c08401526001600160c01b03851660e08401527fcff8a2a4dc9d8050baca90b7a315a144de7e38fa773edf442d524939ffcce3fa6101008401526101208301829052610140830191909152915163095ea7b360e01b81527346a43cf26743ba40d05ae350a85abba4883a62996004820152602481018490529293509163095ea7b3906044016020604051808303815f875af115801561062d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065191906112f3565b5060405163688a048560e11b81525f907346a43cf26743ba40d05ae350a85abba4883a62999063d114090a9061068b90859060040161130e565b60408051808303815f875af11580156106a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106ca9190611400565b50905063654a97404210610753576040516333e04d9160e21b81525f6004820152602481018290527346a43cf26743ba40d05ae350a85abba4883a62999063cf813644906044016020604051808303815f875af115801561072d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107519190611423565b505b5050505050565b610762610a1d565b6001600160a01b0381165f03610816575f80546040516001600160a01b039091169047908381818185875af1925050503d805f81146107bc576040519150601f19603f3d011682016040523d82523d5f602084013e6107c1565b606091505b50509050806108125760405162461bcd60e51b815260206004820152601f60248201527f48756241697264726f703a204554485f5452414e534645525f4641494c454400604482015260640161030c565b5050565b806001600160a01b031663a9059cbb6108365f546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610878573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089c9190611423565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156108e4573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081291906112f3565b610910610a1d565b6001600160a01b03919091165f908152600260205260409020805460ff1916911515919091179055565b610942610a1d565b5f5b8181101561027c57600160025f8585858181106109635761096361125b565b90506020020160208101906109789190611209565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610944565b6109af610a1d565b6001600160a01b038116610a145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161030c565b61025d81610eed565b5f546001600160a01b031633146102ac5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161030c565b610a7e610b10565b5f805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610ab83390565b6040516001600160a01b03909116815260200160405180910390a1565b610add610f3c565b5f805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610ab8565b5f54600160a01b900460ff16156102ac5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161030c565b6001600160a01b0384165f9081526002602052604090205460ff1615610bc45760405162461bcd60e51b815260206004820152601b60248201527f48756241697264726f703a20616c726561647920636c61696d65640000000000604482015260640161030c565b6040516bffffffffffffffffffffffff19606086901b166020820152603481018490525f90605401604051602081830303815290604052805190602001209050610c638383808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152507faa6ae5be7358e4b66589c70ef41b513254f673f77634ee6108e395ccf84f3b359250859150610f8b9050565b610caf5760405162461bcd60e51b815260206004820152601a60248201527f48756241697264726f703a20496e76616c69642070726f6f662e000000000000604482015260640161030c565b6001600160a01b0385165f818152600260209081526040808320805460ff19166001179055805161016081018252838152736923f9b683111dcc0e20124e9a031deeae5dad939281018390528082019490945263654a974060608501526103e8608085015262278d0060a085015262ed4e0060c08501526001600160c01b03881660e08501527fcff8a2a4dc9d8050baca90b7a315a144de7e38fa773edf442d524939ffcce3fa6101008501526101208401839052610140840192909252905163095ea7b360e01b81527346a43cf26743ba40d05ae350a85abba4883a629960048201526024810187905263095ea7b3906044016020604051808303815f875af1158015610dbf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610de391906112f3565b5060405163688a048560e11b81525f907346a43cf26743ba40d05ae350a85abba4883a62999063d114090a90610e1d90859060040161130e565b60408051808303815f875af1158015610e38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5c9190611400565b50905063654a97404210610393576040516333e04d9160e21b81525f6004820152602481018290527346a43cf26743ba40d05ae350a85abba4883a62999063cf813644906044016020604051808303815f875af1158015610ebf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ee39190611423565b5050505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f54600160a01b900460ff166102ac5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161030c565b5f82610f978584610fa0565b14949350505050565b5f81815b8451811015610fda57610fd082868381518110610fc357610fc361125b565b6020026020010151610fe4565b9150600101610fa4565b5090505b92915050565b5f818310610ffe575f82815260208490526040902061100c565b5f8381526020839052604090205b9392505050565b801515811461025d575f80fd5b5f60208284031215611030575f80fd5b813561100c81611013565b5f8083601f84011261104b575f80fd5b50813567ffffffffffffffff811115611062575f80fd5b6020830191508360208260051b850101111561107c575f80fd5b9250929050565b5f805f60408486031215611095575f80fd5b83359250602084013567ffffffffffffffff8111156110b2575f80fd5b6110be8682870161103b565b9497909650939450505050565b6001600160a01b038116811461025d575f80fd5b5f805f80606085870312156110f2575f80fd5b84356110fd816110cb565b935060208501359250604085013567ffffffffffffffff81111561111f575f80fd5b61112b8782880161103b565b95989497509550505050565b5f805f805f806060878903121561114c575f80fd5b863567ffffffffffffffff80821115611163575f80fd5b61116f8a838b0161103b565b90985096506020890135915080821115611187575f80fd5b6111938a838b0161103b565b909650945060408901359150808211156111ab575f80fd5b506111b889828a0161103b565b979a9699509497509295939492505050565b5f80602083850312156111db575f80fd5b823567ffffffffffffffff8111156111f1575f80fd5b6111fd8582860161103b565b90969095509350505050565b5f60208284031215611219575f80fd5b813561100c816110cb565b5f8060408385031215611235575f80fd5b8235611240816110cb565b9150602083013561125081611013565b809150509250929050565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112611284575f80fd5b83018035915067ffffffffffffffff82111561129e575f80fd5b6020019150600581901b360382131561107c575f80fd5b5f602082840312156112c5575f80fd5b815161100c816110cb565b8082028115828204841417610fde57634e487b7160e01b5f52601160045260245ffd5b5f60208284031215611303575f80fd5b815161100c81611013565b81518152602080830151610160830191611332908401826001600160a01b03169052565b50604083015161134d60408401826001600160a01b03169052565b506060830151611367606084018265ffffffffffff169052565b50608083015161137d608084018261ffff169052565b5060a083015161139760a084018265ffffffffffff169052565b5060c08301516113b160c084018265ffffffffffff169052565b5060e08301516113cc60e08401826001600160c01b03169052565b50610100838101519083015261012080840151151590830152610140928301516001600160a01b0316929091019190915290565b5f8060408385031215611411575f80fd5b825191506020830151611250816110cb565b5f60208284031215611433575f80fd5b505191905056fea264697066735822122033739262555366ae33796b5602cf3bcf374a8522ef338e316fd7b9341dc856ec64736f6c63430008180033
Deployed Bytecode Sourcemap
25526:7214:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32576:161;;;;;;:::i;:::-;;:::i;:::-;;25574:47;;;;;;;;;529:25:1;;;517:2;502:18;25574:47:0;;;;;;;;25881:126;;25964:42;25881:126;;;;;-1:-1:-1;;;;;759:32:1;;;741:51;;729:2;714:18;25881:126:0;565:233:1;29821:179:0;;;;;;:::i;:::-;;:::i;29612:201::-;;;;;;:::i;:::-;;:::i;10916:86::-;10963:4;10987:7;-1:-1:-1;;;10987:7:0;;;;10916:86;;;2727:14:1;;2720:22;2702:41;;2690:2;2675:18;10916:86:0;2562:187:1;13691:103:0;;;:::i;30008:467::-;;;;;;:::i;:::-;;:::i;13050:87::-;13096:7;13123:6;-1:-1:-1;;;;;13123:6:0;13050:87;;28326:1278;;;;;;:::i;:::-;;:::i;31754:501::-;;;;;;:::i;:::-;;:::i;26226:39::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;32263:113;;;;;;:::i;:::-;;:::i;32384:184::-;;;;;;:::i;:::-;;:::i;13949:201::-;;;;;;:::i;:::-;;:::i;32576:161::-;12936:13;:11;:13::i;:::-;32643:7:::1;32639:91;;;32667:8;:6;:8::i;:::-;32576:161:::0;:::o;32639:91::-:1;32708:10;:8;:10::i;29821:179::-:0;10521:19;:17;:19::i;:::-;29948:44:::1;29964:10;29976:7;29985:6;;29948:15;:44::i;:::-;29821:179:::0;;;:::o;29612:201::-;10521:19;:17;:19::i;:::-;29766:39:::1;29782:5;29789:7;29798:6;;29766:15;:39::i;:::-;29612:201:::0;;;;:::o;13691:103::-;12936:13;:11;:13::i;:::-;13756:30:::1;13783:1;13756:18;:30::i;:::-;13691:103::o:0;30008:467::-;10521:19;:17;:19::i;:::-;30213:32;;::::1;:67:::0;::::1;;;-1:-1:-1::0;30249:31:0;;::::1;30213:67;30191:142;;;::::0;-1:-1:-1;;;30191:142:0;;5916:2:1;30191:142:0::1;::::0;::::1;5898:21:1::0;5955:2;5935:18;;;5928:30;5994:27;5974:18;;;5967:55;6039:18;;30191:142:0::1;;;;;;;;;30351:9;30346:122;30366:17:::0;;::::1;30346:122;;;30405:51;30421:6;;30428:1;30421:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;30432:8;;30441:1;30432:11;;;;;;;:::i;:::-;;;;;;;30445:7;;30453:1;30445:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;30405:15;:51::i;:::-;30385:3;;30346:122;;;;30008:467:::0;;;;;;:::o;28326:1278::-;10521:19;:17;:19::i;:::-;28440:9:::1;28435:309;28455:20:::0;;::::1;28435:309;;;28497:15;28515:9;;28525:1;28515:12;;;;;;;:::i;:::-;28568:25;::::0;-1:-1:-1;;;28568:25:0;;28515:12:::1;::::0;;;::::1;::::0;;;::::1;;28568:25;::::0;::::1;529::1::0;;;28515:12:0;-1:-1:-1;28597:10:0::1;::::0;25754:42:::1;::::0;-1:-1:-1;28568:16:0::1;::::0;502:18:1;;28568:25:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28568:39:0::1;;28542:122;;;::::0;-1:-1:-1;;;28542:122:0;;7208:2:1;28542:122:0::1;::::0;::::1;7190:21:1::0;7247:2;7227:18;;;7220:30;-1:-1:-1;;;7266:18:1;;;7259:51;7327:18;;28542:122:0::1;7006:345:1::0;28542:122:0::1;25754:42;28681:21;28703:10;28715:7;13096::::0;13123:6;-1:-1:-1;;;;;13123:6:0;;13050:87;28715:7:::1;28681:51;::::0;-1:-1:-1;;;;;;28681:51:0::1;::::0;;;;;;-1:-1:-1;;;;;7614:15:1;;;28681:51:0::1;::::0;::::1;7596:34:1::0;7666:15;;7646:18;;;7639:43;7698:18;;;7691:34;;;7531:18;;28681:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;28477:3:0::1;::::0;;::::1;::::0;-1:-1:-1;28435:309:0::1;::::0;-1:-1:-1;;28435:309:0::1;;-1:-1:-1::0;28792:12:0::1;::::0;28756:14:::1;::::0;28773:31:::1;::::0;:9;:31:::1;:::i;:::-;28843:440;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;28843:440:0;;;25659:42:::1;28843:440;::::0;::::1;::::0;;;28936:10:::1;28843:440:::0;;;;28165:10:::1;28843:440:::0;;;;28217:4:::1;28843:440:::0;;;;28261:7:::1;28843:440:::0;;;;28306:11:::1;28843:440:::0;;;;-1:-1:-1;;;;;28843:440:0;::::1;::::0;;;;24634:20:::1;28843:440:::0;;;;;;;;;;;;;;;;;29320:41;;-1:-1:-1;;;29320:41:0;;25964:42:::1;29320:41;::::0;::::1;8180:51:1::0;8247:18;;;8240:34;;;28843:440:0;;-1:-1:-1;28843:440:0;29320:11:::1;::::0;8153:18:1;;29320:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;29395:38:0::1;::::0;-1:-1:-1;;;29395:38:0;;29375:14:::1;::::0;25964:42:::1;::::0;29395:28:::1;::::0;:38:::1;::::0;29424:8;;29395:38:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;29374:59:0;-1:-1:-1;28165:10:0::1;29496:15;:31;29492:105;;29544:41;::::0;-1:-1:-1;;;29544:41:0;;29575:1:::1;29544:41;::::0;::::1;10774:25:1::0;10815:18;;;10808:34;;;25964:42:0::1;::::0;29544:30:::1;::::0;10747:18:1;;29544:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29492:105;28424:1180;;;28326:1278:::0;;:::o;31754:501::-;12936:13;:11;:13::i;:::-;-1:-1:-1;;;;;31831:20:0;::::1;31839:1;31831:20:::0;31827:421:::1;;31910:12;13123:6:::0;;31928:87:::1;::::0;-1:-1:-1;;;;;13123:6:0;;;;31975:21:::1;::::0;31910:12;31928:87;31910:12;31928:87;31975:21;13123:6;31928:87:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31909:106;;;32038:7;32030:51;;;::::0;-1:-1:-1;;;32030:51:0;;11454:2:1;32030:51:0::1;::::0;::::1;11436:21:1::0;11493:2;11473:18;;;11466:30;11532:33;11512:18;;;11505:61;11583:18;;32030:51:0::1;11252:355:1::0;32030:51:0::1;31853:240;32576:161:::0;:::o;31827:421::-:1;32121:6;-1:-1:-1::0;;;;;32114:23:0::1;;32156:7;13096::::0;13123:6;-1:-1:-1;;;;;13123:6:0;;13050:87;32156:7:::1;32182:39;::::0;-1:-1:-1;;;32182:39:0;;32215:4:::1;32182:39;::::0;::::1;741:51:1::0;-1:-1:-1;;;;;32182:24:0;::::1;::::0;::::1;::::0;714:18:1;;32182:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32114:122;::::0;-1:-1:-1;;;;;;32114:122:0::1;::::0;;;;;;-1:-1:-1;;;;;8198:32:1;;;32114:122:0::1;::::0;::::1;8180:51:1::0;8247:18;;;8240:34;8153:18;;32114:122:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32263:113::-:0;12936:13;:11;:13::i;:::-;-1:-1:-1;;;;;32343:14:0;;;::::1;;::::0;;;:7:::1;:14;::::0;;;;:25;;-1:-1:-1;;32343:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32263:113::o;32384:184::-;12936:13;:11;:13::i;:::-;32470:9:::1;32465:96;32485:17:::0;;::::1;32465:96;;;32545:4;32524:7;:18;32532:6;;32539:1;32532:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32524:18:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;32524:18:0;:25;;-1:-1:-1;;32524:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;32504:3:0::1;32465:96;;13949:201:::0;12936:13;:11;:13::i;:::-;-1:-1:-1;;;;;14038:22:0;::::1;14030:73;;;::::0;-1:-1:-1;;;14030:73:0;;11814:2:1;14030:73:0::1;::::0;::::1;11796:21:1::0;11853:2;11833:18;;;11826:30;11892:34;11872:18;;;11865:62;-1:-1:-1;;;11943:18:1;;;11936:36;11989:19;;14030:73:0::1;11612:402:1::0;14030:73:0::1;14114:28;14133:8;14114:18;:28::i;13215:132::-:0;13096:7;13123:6;-1:-1:-1;;;;;13123:6:0;9195:10;13279:23;13271:68;;;;-1:-1:-1;;;13271:68:0;;12221:2:1;13271:68:0;;;12203:21:1;;;12240:18;;;12233:30;12299:34;12279:18;;;12272:62;12351:18;;13271:68:0;12019:356:1;11512:118:0;10521:19;:17;:19::i;:::-;11572:7:::1;:14:::0;;-1:-1:-1;;;;11572:14:0::1;-1:-1:-1::0;;;11572:14:0::1;::::0;;11602:20:::1;11609:12;9195:10:::0;;9115:98;11609:12:::1;11602:20;::::0;-1:-1:-1;;;;;759:32:1;;;741:51;;729:2;714:18;11602:20:0::1;;;;;;;11512:118::o:0;11771:120::-;10780:16;:14;:16::i;:::-;11840:5:::1;11830:15:::0;;-1:-1:-1;;;;11830:15:0::1;::::0;;11861:22:::1;9195:10:::0;11870:12:::1;9115:98:::0;11075:108;10963:4;10987:7;-1:-1:-1;;;10987:7:0;;;;11145:9;11137:38;;;;-1:-1:-1;;;11137:38:0;;12582:2:1;11137:38:0;;;12564:21:1;12621:2;12601:18;;;12594:30;-1:-1:-1;;;12640:18:1;;;12633:46;12696:18;;11137:38:0;12380:340:1;30483:1263:0;-1:-1:-1;;;;;30630:14:0;;;;;;:7;:14;;;;;;;;30629:15;30621:55;;;;-1:-1:-1;;;30621:55:0;;12927:2:1;30621:55:0;;;12909:21:1;12966:2;12946:18;;;12939:30;13005:29;12985:18;;;12978:57;13052:18;;30621:55:0;12725:351:1;30621:55:0;30751:32;;-1:-1:-1;;13258:2:1;13254:15;;;13250:53;30751:32:0;;;13238:66:1;13320:12;;;13313:28;;;30726:12:0;;13357::1;;30751:32:0;;;;;;;;;;;;30741:43;;;;;;30726:58;;30817:44;30836:6;;30817:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26075:66:0;;-1:-1:-1;30856:4:0;;-1:-1:-1;30817:18:0;;-1:-1:-1;30817:44:0:i;:::-;30795:120;;;;-1:-1:-1;;;30795:120:0;;13582:2:1;30795:120:0;;;13564:21:1;13621:2;13601:18;;;13594:30;13660:28;13640:18;;;13633:56;13706:18;;30795:120:0;13380:350:1;30795:120:0;-1:-1:-1;;;;;30928:14:0;;;;;;:7;:14;;;;;;;;:21;;-1:-1:-1;;30928:21:0;30945:4;30928:21;;;30988:436;;;;;;;;;;25659:42;30988:436;;;;;;;;;;;;;28165:10;30988:436;;;;28217:4;30988:436;;;;28261:7;30988:436;;;;28306:11;30988:436;;;;-1:-1:-1;;;;;30988:436:0;;;;;;24634:20;30928:21;30988:436;;;;;;;;;;;;;;;;31461:42;;-1:-1:-1;;;31461:42:0;;25964;31461;;;8180:51:1;8247:18;;;8240:34;;;31461:11:0;;8153:18:1;;31461:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;31537:38:0;;-1:-1:-1;;;31537:38:0;;31517:14;;25964:42;;31537:28;;:38;;31566:8;;31537:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;31516:59:0;-1:-1:-1;28165:10:0;31638:15;:31;31634:105;;31686:41;;-1:-1:-1;;;31686:41:0;;31717:1;31686:41;;;10774:25:1;10815:18;;;10808:34;;;25964:42:0;;31686:30;;10747:18:1;;31686:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30610:1136;;;30483:1263;;;;:::o;14310:191::-;14384:16;14403:6;;-1:-1:-1;;;;;14420:17:0;;;-1:-1:-1;;;;;;14420:17:0;;;;;;14453:40;;14403:6;;;;;;;14453:40;;14384:16;14453:40;14373:128;14310:191;:::o;11260:108::-;10963:4;10987:7;-1:-1:-1;;;10987:7:0;;;;11319:41;;;;-1:-1:-1;;;11319:41:0;;13937:2:1;11319:41:0;;;13919:21:1;13976:2;13956:18;;;13949:30;-1:-1:-1;;;13995:18:1;;;13988:50;14055:18;;11319:41:0;13735:344:1;15633:156:0;15724:4;15777;15748:25;15761:5;15768:4;15748:12;:25::i;:::-;:33;;15633:156;-1:-1:-1;;;;15633:156:0:o;16432:296::-;16515:7;16558:4;16515:7;16573:118;16597:5;:12;16593:1;:16;16573:118;;;16646:33;16656:12;16670:5;16676:1;16670:8;;;;;;;;:::i;:::-;;;;;;;16646:9;:33::i;:::-;16631:48;-1:-1:-1;16611:3:0;;16573:118;;;-1:-1:-1;16708:12:0;-1:-1:-1;16432:296:0;;;;;:::o;23870:149::-;23933:7;23964:1;23960;:5;:51;;24095:13;24189:15;;;24225:4;24218:15;;;24272:4;24256:21;;23960:51;;;24095:13;24189:15;;;24225:4;24218:15;;;24272:4;24256:21;;23968:20;23953:58;23870:149;-1:-1:-1;;;23870:149:0:o;14:118:1:-;100:5;93:13;86:21;79:5;76:32;66:60;;122:1;119;112:12;137:241;193:6;246:2;234:9;225:7;221:23;217:32;214:52;;;262:1;259;252:12;214:52;301:9;288:23;320:28;342:5;320:28;:::i;803:367::-;866:8;876:6;930:3;923:4;915:6;911:17;907:27;897:55;;948:1;945;938:12;897:55;-1:-1:-1;971:20:1;;1014:18;1003:30;;1000:50;;;1046:1;1043;1036:12;1000:50;1083:4;1075:6;1071:17;1059:29;;1143:3;1136:4;1126:6;1123:1;1119:14;1111:6;1107:27;1103:38;1100:47;1097:67;;;1160:1;1157;1150:12;1097:67;803:367;;;;;:::o;1175:505::-;1270:6;1278;1286;1339:2;1327:9;1318:7;1314:23;1310:32;1307:52;;;1355:1;1352;1345:12;1307:52;1391:9;1378:23;1368:33;;1452:2;1441:9;1437:18;1424:32;1479:18;1471:6;1468:30;1465:50;;;1511:1;1508;1501:12;1465:50;1550:70;1612:7;1603:6;1592:9;1588:22;1550:70;:::i;:::-;1175:505;;1639:8;;-1:-1:-1;1524:96:1;;-1:-1:-1;;;;1175:505:1:o;1685:131::-;-1:-1:-1;;;;;1760:31:1;;1750:42;;1740:70;;1806:1;1803;1796:12;1821:640;1925:6;1933;1941;1949;2002:2;1990:9;1981:7;1977:23;1973:32;1970:52;;;2018:1;2015;2008:12;1970:52;2057:9;2044:23;2076:31;2101:5;2076:31;:::i;:::-;2126:5;-1:-1:-1;2178:2:1;2163:18;;2150:32;;-1:-1:-1;2233:2:1;2218:18;;2205:32;2260:18;2249:30;;2246:50;;;2292:1;2289;2282:12;2246:50;2331:70;2393:7;2384:6;2373:9;2369:22;2331:70;:::i;:::-;1821:640;;;;-1:-1:-1;2420:8:1;-1:-1:-1;;;;1821:640:1:o;2754:1115::-;2939:6;2947;2955;2963;2971;2979;3032:2;3020:9;3011:7;3007:23;3003:32;3000:52;;;3048:1;3045;3038:12;3000:52;3088:9;3075:23;3117:18;3158:2;3150:6;3147:14;3144:34;;;3174:1;3171;3164:12;3144:34;3213:70;3275:7;3266:6;3255:9;3251:22;3213:70;:::i;:::-;3302:8;;-1:-1:-1;3187:96:1;-1:-1:-1;3390:2:1;3375:18;;3362:32;;-1:-1:-1;3406:16:1;;;3403:36;;;3435:1;3432;3425:12;3403:36;3474:72;3538:7;3527:8;3516:9;3512:24;3474:72;:::i;:::-;3565:8;;-1:-1:-1;3448:98:1;-1:-1:-1;3653:2:1;3638:18;;3625:32;;-1:-1:-1;3669:16:1;;;3666:36;;;3698:1;3695;3688:12;3666:36;;3737:72;3801:7;3790:8;3779:9;3775:24;3737:72;:::i;:::-;2754:1115;;;;-1:-1:-1;2754:1115:1;;-1:-1:-1;2754:1115:1;;3828:8;;2754:1115;-1:-1:-1;;;2754:1115:1:o;4191:437::-;4277:6;4285;4338:2;4326:9;4317:7;4313:23;4309:32;4306:52;;;4354:1;4351;4344:12;4306:52;4394:9;4381:23;4427:18;4419:6;4416:30;4413:50;;;4459:1;4456;4449:12;4413:50;4498:70;4560:7;4551:6;4540:9;4536:22;4498:70;:::i;:::-;4587:8;;4472:96;;-1:-1:-1;4191:437:1;-1:-1:-1;;;;4191:437:1:o;4633:247::-;4692:6;4745:2;4733:9;4724:7;4720:23;4716:32;4713:52;;;4761:1;4758;4751:12;4713:52;4800:9;4787:23;4819:31;4844:5;4819:31;:::i;4885:382::-;4950:6;4958;5011:2;4999:9;4990:7;4986:23;4982:32;4979:52;;;5027:1;5024;5017:12;4979:52;5066:9;5053:23;5085:31;5110:5;5085:31;:::i;:::-;5135:5;-1:-1:-1;5192:2:1;5177:18;;5164:32;5205:30;5164:32;5205:30;:::i;:::-;5254:7;5244:17;;;4885:382;;;;;:::o;6068:127::-;6129:10;6124:3;6120:20;6117:1;6110:31;6160:4;6157:1;6150:15;6184:4;6181:1;6174:15;6200:545;6293:4;6299:6;6359:11;6346:25;6453:2;6449:7;6438:8;6422:14;6418:29;6414:43;6394:18;6390:68;6380:96;;6472:1;6469;6462:12;6380:96;6499:33;;6551:20;;;-1:-1:-1;6594:18:1;6583:30;;6580:50;;;6626:1;6623;6616:12;6580:50;6659:4;6647:17;;-1:-1:-1;6710:1:1;6706:14;;;6690;6686:35;6676:46;;6673:66;;;6735:1;6732;6725:12;6750:251;6820:6;6873:2;6861:9;6852:7;6848:23;6844:32;6841:52;;;6889:1;6886;6879:12;6841:52;6921:9;6915:16;6940:31;6965:5;6940:31;:::i;7736:265::-;7809:9;;;7840;;7857:15;;;7851:22;;7837:37;7827:168;;7917:10;7912:3;7908:20;7905:1;7898:31;7952:4;7949:1;7942:15;7980:4;7977:1;7970:15;8285:245;8352:6;8405:2;8393:9;8384:7;8380:23;8376:32;8373:52;;;8421:1;8418;8411:12;8373:52;8453:9;8447:16;8472:28;8494:5;8472:28;:::i;8842:1428::-;9055:13;;9037:32;;9116:4;9104:17;;;9098:24;9024:3;9009:19;;;9131:54;;9164:20;;9098:24;-1:-1:-1;;;;;3940:31:1;3928:44;;3874:104;9131:54;;9234:4;9226:6;9222:17;9216:24;9249:56;9299:4;9288:9;9284:20;9268:14;-1:-1:-1;;;;;3940:31:1;3928:44;;3874:104;9249:56;;9354:4;9346:6;9342:17;9336:24;9369:55;9418:4;9407:9;9403:20;9387:14;8611;8600:26;8588:39;;8535:98;9369:55;;9473:4;9465:6;9461:17;9455:24;9488:55;9537:4;9526:9;9522:20;9506:14;8714:6;8703:18;8691:31;;8638:90;9488:55;;9592:4;9584:6;9580:17;9574:24;9607:55;9656:4;9645:9;9641:20;9625:14;8611;8600:26;8588:39;;8535:98;9607:55;;9711:4;9703:6;9699:17;9693:24;9726:55;9775:4;9764:9;9760:20;9744:14;8611;8600:26;8588:39;;8535:98;9726:55;;9830:4;9822:6;9818:17;9812:24;9845:56;9895:4;9884:9;9880:20;9864:14;-1:-1:-1;;;;;8799:31:1;8787:44;;8733:104;9845:56;-1:-1:-1;9920:6:1;9968:15;;;9962:22;9942:18;;;9935:50;10004:6;10047:15;;;10041:22;2536:13;2529:21;10104:18;;;2517:34;10142:6;10185:15;;;10179:22;-1:-1:-1;;;;;3940:31:1;10245:18;;;;3928:44;;;;8842:1428;:::o;10275:312::-;10354:6;10362;10415:2;10403:9;10394:7;10390:23;10386:32;10383:52;;;10431:1;10428;10421:12;10383:52;10460:9;10454:16;10444:26;;10513:2;10502:9;10498:18;10492:25;10526:31;10551:5;10526:31;:::i;10853:184::-;10923:6;10976:2;10964:9;10955:7;10951:23;10947:32;10944:52;;;10992:1;10989;10982:12;10944:52;-1:-1:-1;11015:16:1;;10853:184;-1:-1:-1;10853:184:1:o
Swarm Source
ipfs://33739262555366ae33796b5602cf3bcf374a8522ef338e316fd7b9341dc856ec
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.001617 | 2,108,767.6748 | $3,410.17 |
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.