More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 663 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 18187777 | 472 days ago | IN | 0 ETH | 0.00035909 | ||||
Claim | 18187767 | 472 days ago | IN | 0 ETH | 0.00086981 | ||||
Withdraw | 18091029 | 486 days ago | IN | 0 ETH | 0.00202233 | ||||
Withdraw | 18079406 | 487 days ago | IN | 0 ETH | 0.00111714 | ||||
Withdraw | 18073500 | 488 days ago | IN | 0 ETH | 0.00122004 | ||||
Claim | 18073497 | 488 days ago | IN | 0 ETH | 0.00284235 | ||||
Deposit | 18068826 | 489 days ago | IN | 0 ETH | 0.00115477 | ||||
Deposit | 18068485 | 489 days ago | IN | 0 ETH | 0.00119224 | ||||
Claim | 18063872 | 489 days ago | IN | 0 ETH | 0.00263882 | ||||
Deposit | 18062647 | 490 days ago | IN | 0 ETH | 0.00160916 | ||||
Deposit | 18062284 | 490 days ago | IN | 0 ETH | 0.0018033 | ||||
Deposit | 18061629 | 490 days ago | IN | 0 ETH | 0.001728 | ||||
Deposit | 18061572 | 490 days ago | IN | 0 ETH | 0.00160478 | ||||
Deposit | 18061260 | 490 days ago | IN | 0 ETH | 0.00141368 | ||||
Withdraw | 18061146 | 490 days ago | IN | 0 ETH | 0.00046658 | ||||
Claim | 18061145 | 490 days ago | IN | 0 ETH | 0.00112884 | ||||
Deposit | 18049554 | 491 days ago | IN | 0 ETH | 0.00103481 | ||||
Claim | 18049544 | 491 days ago | IN | 0 ETH | 0.00049168 | ||||
Claim | 18049542 | 491 days ago | IN | 0 ETH | 0.00049762 | ||||
Claim | 18049540 | 491 days ago | IN | 0 ETH | 0.00241342 | ||||
Withdraw | 18049537 | 491 days ago | IN | 0 ETH | 0.00255387 | ||||
Deposit | 18047017 | 492 days ago | IN | 0 ETH | 0.00127789 | ||||
Deposit | 18046595 | 492 days ago | IN | 0 ETH | 0.00122766 | ||||
Deposit | 18046196 | 492 days ago | IN | 0 ETH | 0.00151317 | ||||
Deposit | 18045837 | 492 days ago | IN | 0 ETH | 0.00068381 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Staking
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-27 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @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/Context.sol) pragma solidity ^0.8.0; /** * @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.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @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.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data ) internal returns (bytes memory) { return functionCallWithValue( target, data, 0, "Address: low-level call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data ) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data ) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget( target, success, returndata, errorMessage ); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert( bytes memory returndata, string memory errorMessage ) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } pragma solidity 0.8.21; contract Staking is Ownable { struct Share { uint depositTime; uint initialDeposit; uint sumReward; } mapping(address => Share) public shares; IERC20 public stakingToken; IERC20 public rewardToken; uint public sumReward; uint private constant PRECISION = 1e18; address private _taxWallet; uint public totalReward; uint256 public totalDistributed; bool public initialized; constructor() { _taxWallet = _msgSender(); } function init(address _rewardToken, address _stakingToken) external { require(!initialized, "alrealy initialized"); stakingToken = IERC20(_stakingToken); rewardToken = IERC20(_rewardToken); initialized = true; } function setStakeToken(IERC20 token_) external onlyOwner { stakingToken = token_; } function setRewardToken(IERC20 token_) external onlyOwner { stakingToken = token_; } function deposit(uint amount) external { require(amount > 0, "Amount must be greater than zero"); Share memory share = shares[_msgSender()]; stakingToken.transferFrom(_msgSender(), address(this), amount); _payoutGainsUpdateShare( _msgSender(), share, share.initialDeposit + amount, true ); } function withdraw() external { Share memory share = shares[_msgSender()]; require(share.initialDeposit > 0, "No initial deposit"); require( share.depositTime + 1 days < block.timestamp, "withdraw after one week" ); stakingToken.transfer(_msgSender(), share.initialDeposit); _payoutGainsUpdateShare(_msgSender(), share, 0, true); } function claim() external { Share memory share = shares[_msgSender()]; require(share.initialDeposit > 0, "No initial deposit"); _payoutGainsUpdateShare( _msgSender(), share, share.initialDeposit, false ); } function _payoutGainsUpdateShare( address who, Share memory share, uint newAmount, bool resetTimer ) private { uint gains; if (share.initialDeposit != 0) gains = (share.initialDeposit * (sumReward - share.sumReward)) / PRECISION; if (newAmount == 0) delete shares[who]; else if (resetTimer) shares[who] = Share(block.timestamp, newAmount, sumReward); else shares[who] = Share(share.depositTime, newAmount, sumReward); if (gains > 0) { rewardToken.transfer(who, gains); totalDistributed = totalDistributed + gains; } } function pending(address who) external view returns (uint) { Share memory share = shares[who]; return (share.initialDeposit * (sumReward - share.sumReward)) / PRECISION; } function updateReward(uint256 _amount) external { require( _msgSender() == address(rewardToken), "only accept token contract" ); uint balance = stakingToken.balanceOf(address(this)); if (_amount == 0 || balance == 0) return; uint gpus = (_amount * PRECISION) / balance; sumReward += gpus; totalReward += _amount; } }
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"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"address","name":"_stakingToken","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"pending","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token_","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token_","type":"address"}],"name":"setStakeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"depositTime","type":"uint256"},{"internalType":"uint256","name":"initialDeposit","type":"uint256"},{"internalType":"uint256","name":"sumReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sumReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReward","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":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561000f575f80fd5b5061002c61002161007e60201b60201c565b61008560201b60201c565b61003a61007e60201b60201c565b60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610146565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611808806101535f395ff3fe608060405234801561000f575f80fd5b5060043610610114575f3560e01c80638a2dced9116100a0578063ce7c2ac21161006f578063ce7c2ac21461026c578063efca2eed1461029e578063f09a4016146102bc578063f2fde38b146102d8578063f7c618c1146102f457610114565b80638a2dced9146101f85780638aee8127146102165780638da5cb5b14610232578063b6b55f251461025057610114565b80634e71d92d116100e75780634e71d92d146101785780635eebea2014610182578063715018a6146101b257806372f702f3146101bc578063750142e6146101da57610114565b80630397d45814610118578063158ef93e146101345780633ccfd60b14610152578063425c8abd1461015c575b5f80fd5b610132600480360381019061012d919061105b565b610312565b005b61013c61035d565b60405161014991906110a0565b60405180910390f35b61015a61036f565b005b610176600480360381019061017191906110ec565b610536565b005b6101806106d8565b005b61019c60048036038101906101979190611141565b6107a7565b6040516101a9919061117b565b60405180910390f35b6101ba61084c565b005b6101c461085f565b6040516101d191906111ef565b60405180910390f35b6101e2610884565b6040516101ef919061117b565b60405180910390f35b61020061088a565b60405161020d919061117b565b60405180910390f35b610230600480360381019061022b919061105b565b610890565b005b61023a6108db565b6040516102479190611217565b60405180910390f35b61026a600480360381019061026591906110ec565b610902565b005b61028660048036038101906102819190611141565b610a80565b60405161029593929190611230565b60405180910390f35b6102a6610aa6565b6040516102b3919061117b565b60405180910390f35b6102d660048036038101906102d19190611265565b610aac565b005b6102f260048036038101906102ed9190611141565b610b99565b005b6102fc610c1b565b60405161030991906111ef565b60405180910390f35b61031a610c40565b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085f9054906101000a900460ff1681565b5f60015f61037b610cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060600160405290815f82015481526020016001820154815260200160028201548152505090505f816020015111610424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041b906112fd565b60405180910390fd5b4262015180825f01516104379190611348565b10610477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046e906113c5565b60405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6104bc610cbe565b83602001516040518363ffffffff1660e01b81526004016104de9291906113e3565b6020604051808303815f875af11580156104fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061051e9190611434565b5061053361052a610cbe565b825f6001610cc5565b50565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610576610cbe565b73ffffffffffffffffffffffffffffffffffffffff16146105cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c3906114a9565b60405180910390fd5b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106279190611217565b602060405180830381865afa158015610642573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066691906114db565b90505f82148061067557505f81145b1561068057506106d5565b5f81670de0b6b3a7640000846106969190611506565b6106a09190611574565b90508060045f8282546106b39190611348565b925050819055508260065f8282546106cb9190611348565b9250508190555050505b50565b5f60015f6106e4610cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060600160405290815f82015481526020016001820154815260200160028201548152505090505f81602001511161078d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610784906112fd565b60405180910390fd5b6107a4610798610cbe565b8283602001515f610cc5565b50565b5f8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060600160405290815f8201548152602001600182015481526020016002820154815250509050670de0b6b3a7640000816040015160045461082b91906115a4565b826020015161083a9190611506565b6108449190611574565b915050919050565b610854610c40565b61085d5f610f2b565b565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b60045481565b610898610c40565b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f8111610944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093b90611621565b60405180910390fd5b5f60015f610950610cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060600160405290815f820154815260200160018201548152602001600282015481525050905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd6109f8610cbe565b30856040518463ffffffff1660e01b8152600401610a189392919061163f565b6020604051808303815f875af1158015610a34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a589190611434565b50610a7c610a64610cbe565b82848460200151610a759190611348565b6001610cc5565b5050565b6001602052805f5260405f205f91509050805f0154908060010154908060020154905083565b60075481565b60085f9054906101000a900460ff1615610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af2906116be565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160085f6101000a81548160ff0219169083151502179055505050565b610ba1610c40565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c069061174c565b60405180910390fd5b610c1881610f2b565b50565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c48610cbe565b73ffffffffffffffffffffffffffffffffffffffff16610c666108db565b73ffffffffffffffffffffffffffffffffffffffff1614610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb3906117b4565b60405180910390fd5b565b5f33905090565b5f80846020015114610d0857670de0b6b3a76400008460400151600454610cec91906115a4565b8560200151610cfb9190611506565b610d059190611574565b90505b5f8303610d685760015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8082015f9055600182015f9055600282015f90555050610e6a565b8115610dec57604051806060016040528042815260200184815260200160045481525060015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f01556020820151816001015560408201518160020155905050610e69565b6040518060600160405280855f0151815260200184815260200160045481525060015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015560208201518160010155604082015181600201559050505b5b5f811115610f245760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86836040518363ffffffff1660e01b8152600401610ece9291906113e3565b6020604051808303815f875af1158015610eea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f0e9190611434565b5080600754610f1d9190611348565b6007819055505b5050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61101982610ff0565b9050919050565b5f61102a8261100f565b9050919050565b61103a81611020565b8114611044575f80fd5b50565b5f8135905061105581611031565b92915050565b5f602082840312156110705761106f610fec565b5b5f61107d84828501611047565b91505092915050565b5f8115159050919050565b61109a81611086565b82525050565b5f6020820190506110b35f830184611091565b92915050565b5f819050919050565b6110cb816110b9565b81146110d5575f80fd5b50565b5f813590506110e6816110c2565b92915050565b5f6020828403121561110157611100610fec565b5b5f61110e848285016110d8565b91505092915050565b6111208161100f565b811461112a575f80fd5b50565b5f8135905061113b81611117565b92915050565b5f6020828403121561115657611155610fec565b5b5f6111638482850161112d565b91505092915050565b611175816110b9565b82525050565b5f60208201905061118e5f83018461116c565b92915050565b5f819050919050565b5f6111b76111b26111ad84610ff0565b611194565b610ff0565b9050919050565b5f6111c88261119d565b9050919050565b5f6111d9826111be565b9050919050565b6111e9816111cf565b82525050565b5f6020820190506112025f8301846111e0565b92915050565b6112118161100f565b82525050565b5f60208201905061122a5f830184611208565b92915050565b5f6060820190506112435f83018661116c565b611250602083018561116c565b61125d604083018461116c565b949350505050565b5f806040838503121561127b5761127a610fec565b5b5f6112888582860161112d565b92505060206112998582860161112d565b9150509250929050565b5f82825260208201905092915050565b7f4e6f20696e697469616c206465706f73697400000000000000000000000000005f82015250565b5f6112e76012836112a3565b91506112f2826112b3565b602082019050919050565b5f6020820190508181035f830152611314816112db565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611352826110b9565b915061135d836110b9565b92508282019050808211156113755761137461131b565b5b92915050565b7f7769746864726177206166746572206f6e65207765656b0000000000000000005f82015250565b5f6113af6017836112a3565b91506113ba8261137b565b602082019050919050565b5f6020820190508181035f8301526113dc816113a3565b9050919050565b5f6040820190506113f65f830185611208565b611403602083018461116c565b9392505050565b61141381611086565b811461141d575f80fd5b50565b5f8151905061142e8161140a565b92915050565b5f6020828403121561144957611448610fec565b5b5f61145684828501611420565b91505092915050565b7f6f6e6c792061636365707420746f6b656e20636f6e74726163740000000000005f82015250565b5f611493601a836112a3565b915061149e8261145f565b602082019050919050565b5f6020820190508181035f8301526114c081611487565b9050919050565b5f815190506114d5816110c2565b92915050565b5f602082840312156114f0576114ef610fec565b5b5f6114fd848285016114c7565b91505092915050565b5f611510826110b9565b915061151b836110b9565b9250828202611529816110b9565b915082820484148315176115405761153f61131b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61157e826110b9565b9150611589836110b9565b92508261159957611598611547565b5b828204905092915050565b5f6115ae826110b9565b91506115b9836110b9565b92508282039050818111156115d1576115d061131b565b5b92915050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f61160b6020836112a3565b9150611616826115d7565b602082019050919050565b5f6020820190508181035f830152611638816115ff565b9050919050565b5f6060820190506116525f830186611208565b61165f6020830185611208565b61166c604083018461116c565b949350505050565b7f616c7265616c7920696e697469616c697a6564000000000000000000000000005f82015250565b5f6116a86013836112a3565b91506116b382611674565b602082019050919050565b5f6020820190508181035f8301526116d58161169c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6117366026836112a3565b9150611741826116dc565b604082019050919050565b5f6020820190508181035f8301526117638161172a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61179e6020836112a3565b91506117a98261176a565b602082019050919050565b5f6020820190508181035f8301526117cb81611792565b905091905056fea2646970667358221220f220e7ccedd3094fa2e680c6c1012f7b9fd2b7ef50246131aa497e4ec5f2993364736f6c63430008150033
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610114575f3560e01c80638a2dced9116100a0578063ce7c2ac21161006f578063ce7c2ac21461026c578063efca2eed1461029e578063f09a4016146102bc578063f2fde38b146102d8578063f7c618c1146102f457610114565b80638a2dced9146101f85780638aee8127146102165780638da5cb5b14610232578063b6b55f251461025057610114565b80634e71d92d116100e75780634e71d92d146101785780635eebea2014610182578063715018a6146101b257806372f702f3146101bc578063750142e6146101da57610114565b80630397d45814610118578063158ef93e146101345780633ccfd60b14610152578063425c8abd1461015c575b5f80fd5b610132600480360381019061012d919061105b565b610312565b005b61013c61035d565b60405161014991906110a0565b60405180910390f35b61015a61036f565b005b610176600480360381019061017191906110ec565b610536565b005b6101806106d8565b005b61019c60048036038101906101979190611141565b6107a7565b6040516101a9919061117b565b60405180910390f35b6101ba61084c565b005b6101c461085f565b6040516101d191906111ef565b60405180910390f35b6101e2610884565b6040516101ef919061117b565b60405180910390f35b61020061088a565b60405161020d919061117b565b60405180910390f35b610230600480360381019061022b919061105b565b610890565b005b61023a6108db565b6040516102479190611217565b60405180910390f35b61026a600480360381019061026591906110ec565b610902565b005b61028660048036038101906102819190611141565b610a80565b60405161029593929190611230565b60405180910390f35b6102a6610aa6565b6040516102b3919061117b565b60405180910390f35b6102d660048036038101906102d19190611265565b610aac565b005b6102f260048036038101906102ed9190611141565b610b99565b005b6102fc610c1b565b60405161030991906111ef565b60405180910390f35b61031a610c40565b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085f9054906101000a900460ff1681565b5f60015f61037b610cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060600160405290815f82015481526020016001820154815260200160028201548152505090505f816020015111610424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041b906112fd565b60405180910390fd5b4262015180825f01516104379190611348565b10610477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161046e906113c5565b60405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6104bc610cbe565b83602001516040518363ffffffff1660e01b81526004016104de9291906113e3565b6020604051808303815f875af11580156104fa573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061051e9190611434565b5061053361052a610cbe565b825f6001610cc5565b50565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610576610cbe565b73ffffffffffffffffffffffffffffffffffffffff16146105cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c3906114a9565b60405180910390fd5b5f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016106279190611217565b602060405180830381865afa158015610642573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066691906114db565b90505f82148061067557505f81145b1561068057506106d5565b5f81670de0b6b3a7640000846106969190611506565b6106a09190611574565b90508060045f8282546106b39190611348565b925050819055508260065f8282546106cb9190611348565b9250508190555050505b50565b5f60015f6106e4610cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060600160405290815f82015481526020016001820154815260200160028201548152505090505f81602001511161078d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610784906112fd565b60405180910390fd5b6107a4610798610cbe565b8283602001515f610cc5565b50565b5f8060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060600160405290815f8201548152602001600182015481526020016002820154815250509050670de0b6b3a7640000816040015160045461082b91906115a4565b826020015161083a9190611506565b6108449190611574565b915050919050565b610854610c40565b61085d5f610f2b565b565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b60045481565b610898610c40565b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f8111610944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093b90611621565b60405180910390fd5b5f60015f610950610cbe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206040518060600160405290815f820154815260200160018201548152602001600282015481525050905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd6109f8610cbe565b30856040518463ffffffff1660e01b8152600401610a189392919061163f565b6020604051808303815f875af1158015610a34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a589190611434565b50610a7c610a64610cbe565b82848460200151610a759190611348565b6001610cc5565b5050565b6001602052805f5260405f205f91509050805f0154908060010154908060020154905083565b60075481565b60085f9054906101000a900460ff1615610afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af2906116be565b60405180910390fd5b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160085f6101000a81548160ff0219169083151502179055505050565b610ba1610c40565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c069061174c565b60405180910390fd5b610c1881610f2b565b50565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c48610cbe565b73ffffffffffffffffffffffffffffffffffffffff16610c666108db565b73ffffffffffffffffffffffffffffffffffffffff1614610cbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb3906117b4565b60405180910390fd5b565b5f33905090565b5f80846020015114610d0857670de0b6b3a76400008460400151600454610cec91906115a4565b8560200151610cfb9190611506565b610d059190611574565b90505b5f8303610d685760015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8082015f9055600182015f9055600282015f90555050610e6a565b8115610dec57604051806060016040528042815260200184815260200160045481525060015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f01556020820151816001015560408201518160020155905050610e69565b6040518060600160405280855f0151815260200184815260200160045481525060015f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015560208201518160010155604082015181600201559050505b5b5f811115610f245760035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86836040518363ffffffff1660e01b8152600401610ece9291906113e3565b6020604051808303815f875af1158015610eea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f0e9190611434565b5080600754610f1d9190611348565b6007819055505b5050505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61101982610ff0565b9050919050565b5f61102a8261100f565b9050919050565b61103a81611020565b8114611044575f80fd5b50565b5f8135905061105581611031565b92915050565b5f602082840312156110705761106f610fec565b5b5f61107d84828501611047565b91505092915050565b5f8115159050919050565b61109a81611086565b82525050565b5f6020820190506110b35f830184611091565b92915050565b5f819050919050565b6110cb816110b9565b81146110d5575f80fd5b50565b5f813590506110e6816110c2565b92915050565b5f6020828403121561110157611100610fec565b5b5f61110e848285016110d8565b91505092915050565b6111208161100f565b811461112a575f80fd5b50565b5f8135905061113b81611117565b92915050565b5f6020828403121561115657611155610fec565b5b5f6111638482850161112d565b91505092915050565b611175816110b9565b82525050565b5f60208201905061118e5f83018461116c565b92915050565b5f819050919050565b5f6111b76111b26111ad84610ff0565b611194565b610ff0565b9050919050565b5f6111c88261119d565b9050919050565b5f6111d9826111be565b9050919050565b6111e9816111cf565b82525050565b5f6020820190506112025f8301846111e0565b92915050565b6112118161100f565b82525050565b5f60208201905061122a5f830184611208565b92915050565b5f6060820190506112435f83018661116c565b611250602083018561116c565b61125d604083018461116c565b949350505050565b5f806040838503121561127b5761127a610fec565b5b5f6112888582860161112d565b92505060206112998582860161112d565b9150509250929050565b5f82825260208201905092915050565b7f4e6f20696e697469616c206465706f73697400000000000000000000000000005f82015250565b5f6112e76012836112a3565b91506112f2826112b3565b602082019050919050565b5f6020820190508181035f830152611314816112db565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611352826110b9565b915061135d836110b9565b92508282019050808211156113755761137461131b565b5b92915050565b7f7769746864726177206166746572206f6e65207765656b0000000000000000005f82015250565b5f6113af6017836112a3565b91506113ba8261137b565b602082019050919050565b5f6020820190508181035f8301526113dc816113a3565b9050919050565b5f6040820190506113f65f830185611208565b611403602083018461116c565b9392505050565b61141381611086565b811461141d575f80fd5b50565b5f8151905061142e8161140a565b92915050565b5f6020828403121561144957611448610fec565b5b5f61145684828501611420565b91505092915050565b7f6f6e6c792061636365707420746f6b656e20636f6e74726163740000000000005f82015250565b5f611493601a836112a3565b915061149e8261145f565b602082019050919050565b5f6020820190508181035f8301526114c081611487565b9050919050565b5f815190506114d5816110c2565b92915050565b5f602082840312156114f0576114ef610fec565b5b5f6114fd848285016114c7565b91505092915050565b5f611510826110b9565b915061151b836110b9565b9250828202611529816110b9565b915082820484148315176115405761153f61131b565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61157e826110b9565b9150611589836110b9565b92508261159957611598611547565b5b828204905092915050565b5f6115ae826110b9565b91506115b9836110b9565b92508282039050818111156115d1576115d061131b565b5b92915050565b7f416d6f756e74206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f61160b6020836112a3565b9150611616826115d7565b602082019050919050565b5f6020820190508181035f830152611638816115ff565b9050919050565b5f6060820190506116525f830186611208565b61165f6020830185611208565b61166c604083018461116c565b949350505050565b7f616c7265616c7920696e697469616c697a6564000000000000000000000000005f82015250565b5f6116a86013836112a3565b91506116b382611674565b602082019050919050565b5f6020820190508181035f8301526116d58161169c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6117366026836112a3565b9150611741826116dc565b604082019050919050565b5f6020820190508181035f8301526117638161172a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61179e6020836112a3565b91506117a98261176a565b602082019050919050565b5f6020820190508181035f8301526117cb81611792565b905091905056fea2646970667358221220f220e7ccedd3094fa2e680c6c1012f7b9fd2b7ef50246131aa497e4ec5f2993364736f6c63430008150033
Deployed Bytecode Sourcemap
16956:3487:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17745:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17387:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18357:415;;;:::i;:::-;;20026:414;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18780:299;;;:::i;:::-;;19811:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5591:103;;;:::i;:::-;;17148:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17319:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17213:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17850:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4950:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17956:393;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17102:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;17349:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17485:252;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5849:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17181:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17745:97;4836:13;:11;:13::i;:::-;17828:6:::1;17813:12;;:21;;;;;;;;;;;;;;;;;;17745:97:::0;:::o;17387:23::-;;;;;;;;;;;;;:::o;18357:415::-;18397:18;18418:6;:20;18425:12;:10;:12::i;:::-;18418:20;;;;;;;;;;;;;;;18397:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18480:1;18457:5;:20;;;:24;18449:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;18566:15;18557:6;18537:5;:17;;;:26;;;;:::i;:::-;:44;18515:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;18643:12;;;;;;;;;;;:21;;;18665:12;:10;:12::i;:::-;18679:5;:20;;;18643:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18711:53;18735:12;:10;:12::i;:::-;18749:5;18756:1;18759:4;18711:23;:53::i;:::-;18386:386;18357:415::o;20026:414::-;20131:11;;;;;;;;;;;20107:36;;:12;:10;:12::i;:::-;:36;;;20085:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;20210:12;20225;;;;;;;;;;;:22;;;20256:4;20225:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20210:52;;20290:1;20279:7;:12;:28;;;;20306:1;20295:7;:12;20279:28;20275:41;;;20309:7;;;20275:41;20328:9;20364:7;17275:4;20341:7;:19;;;;:::i;:::-;20340:31;;;;:::i;:::-;20328:43;;20395:4;20382:9;;:17;;;;;;;:::i;:::-;;;;;;;;20425:7;20410:11;;:22;;;;;;;:::i;:::-;;;;;;;;20074:366;;20026:414;;:::o;18780:299::-;18817:18;18838:6;:20;18845:12;:10;:12::i;:::-;18838:20;;;;;;;;;;;;;;;18817:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18900:1;18877:5;:20;;;:24;18869:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;18935:136;18973:12;:10;:12::i;:::-;19000:5;19020;:20;;;19055:5;18935:23;:136::i;:::-;18806:273;18780:299::o;19811:207::-;19864:4;19881:18;19902:6;:11;19909:3;19902:11;;;;;;;;;;;;;;;19881:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17275:4;19981:5;:15;;;19969:9;;:27;;;;:::i;:::-;19945:5;:20;;;:52;;;;:::i;:::-;19944:66;;;;:::i;:::-;19924:86;;;19811:207;;;:::o;5591:103::-;4836:13;:11;:13::i;:::-;5656:30:::1;5683:1;5656:18;:30::i;:::-;5591:103::o:0;17148:26::-;;;;;;;;;;;;;:::o;17319:23::-;;;;:::o;17213:21::-;;;;:::o;17850:98::-;4836:13;:11;:13::i;:::-;17934:6:::1;17919:12;;:21;;;;;;;;;;;;;;;;;;17850:98:::0;:::o;4950:87::-;4996:7;5023:6;;;;;;;;;;;5016:13;;4950:87;:::o;17956:393::-;18023:1;18014:6;:10;18006:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;18072:18;18093:6;:20;18100:12;:10;:12::i;:::-;18093:20;;;;;;;;;;;;;;;18072:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18124:12;;;;;;;;;;;:25;;;18150:12;:10;:12::i;:::-;18172:4;18179:6;18124:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18197:144;18235:12;:10;:12::i;:::-;18262:5;18305:6;18282:5;:20;;;:29;;;;:::i;:::-;18326:4;18197:23;:144::i;:::-;17995:354;17956:393;:::o;17102:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17349:31::-;;;;:::o;17485:252::-;17573:11;;;;;;;;;;;17572:12;17564:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;17641:13;17619:12;;:36;;;;;;;;;;;;;;;;;;17687:12;17666:11;;:34;;;;;;;;;;;;;;;;;;17725:4;17711:11;;:18;;;;;;;;;;;;;;;;;;17485:252;;:::o;5849:238::-;4836:13;:11;:13::i;:::-;5972:1:::1;5952:22;;:8;:22;;::::0;5930:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6051:28;6070:8;6051:18;:28::i;:::-;5849:238:::0;:::o;17181:25::-;;;;;;;;;;;;;:::o;5115:132::-;5190:12;:10;:12::i;:::-;5179:23;;:7;:5;:7::i;:::-;:23;;;5171:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5115:132::o;3535:98::-;3588:7;3615:10;3608:17;;3535:98;:::o;19087:716::-;19248:10;19297:1;19273:5;:20;;;:25;19269:152;;17275:4;19375:5;:15;;;19363:9;;:27;;;;:::i;:::-;19339:5;:20;;;:52;;;;:::i;:::-;19338:83;;;;:::i;:::-;19313:108;;19269:152;19451:1;19438:9;:14;19434:217;;19461:6;:11;19468:3;19461:11;;;;;;;;;;;;;;;;19454:18;;;;;;;;;;;;;;;;;;;;19434:217;;;19492:10;19488:163;;;19531:44;;;;;;;;19537:15;19531:44;;;;19554:9;19531:44;;;;19565:9;;19531:44;;;19517:6;:11;19524:3;19517:11;;;;;;;;;;;;;;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;19488:163;;;19605:46;;;;;;;;19611:5;:17;;;19605:46;;;;19630:9;19605:46;;;;19641:9;;19605:46;;;19591:6;:11;19598:3;19591:11;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;;;;;;;;;;19488:163;19434:217;19676:1;19668:5;:9;19664:132;;;19694:11;;;;;;;;;;;:20;;;19715:3;19720:5;19694:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19779:5;19760:16;;:24;;;;:::i;:::-;19741:16;:43;;;;19664:132;19237:566;19087:716;;;;:::o;6247:191::-;6321:16;6340:6;;;;;;;;;;;6321:25;;6366:8;6357:6;;:17;;;;;;;;;;;;;;;;;;6421:8;6390:40;;6411:8;6390:40;;;;;;;;;;;;6310:128;6247:191;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:109::-;618:7;647:24;665:5;647:24;:::i;:::-;636:35;;568:109;;;:::o;683:148::-;769:37;800:5;769:37;:::i;:::-;762:5;759:48;749:76;;821:1;818;811:12;749:76;683:148;:::o;837:165::-;896:5;934:6;921:20;912:29;;950:46;990:5;950:46;:::i;:::-;837:165;;;;:::o;1008:355::-;1080:6;1129:2;1117:9;1108:7;1104:23;1100:32;1097:119;;;1135:79;;:::i;:::-;1097:119;1255:1;1280:66;1338:7;1329:6;1318:9;1314:22;1280:66;:::i;:::-;1270:76;;1226:130;1008:355;;;;:::o;1369:90::-;1403:7;1446:5;1439:13;1432:21;1421:32;;1369:90;;;:::o;1465:109::-;1546:21;1561:5;1546:21;:::i;:::-;1541:3;1534:34;1465:109;;:::o;1580:210::-;1667:4;1705:2;1694:9;1690:18;1682:26;;1718:65;1780:1;1769:9;1765:17;1756:6;1718:65;:::i;:::-;1580:210;;;;:::o;1796:77::-;1833:7;1862:5;1851:16;;1796:77;;;:::o;1879:122::-;1952:24;1970:5;1952:24;:::i;:::-;1945:5;1942:35;1932:63;;1991:1;1988;1981:12;1932:63;1879:122;:::o;2007:139::-;2053:5;2091:6;2078:20;2069:29;;2107:33;2134:5;2107:33;:::i;:::-;2007:139;;;;:::o;2152:329::-;2211:6;2260:2;2248:9;2239:7;2235:23;2231:32;2228:119;;;2266:79;;:::i;:::-;2228:119;2386:1;2411:53;2456:7;2447:6;2436:9;2432:22;2411:53;:::i;:::-;2401:63;;2357:117;2152:329;;;;:::o;2487:122::-;2560:24;2578:5;2560:24;:::i;:::-;2553:5;2550:35;2540:63;;2599:1;2596;2589:12;2540:63;2487:122;:::o;2615:139::-;2661:5;2699:6;2686:20;2677:29;;2715:33;2742:5;2715:33;:::i;:::-;2615:139;;;;:::o;2760:329::-;2819:6;2868:2;2856:9;2847:7;2843:23;2839:32;2836:119;;;2874:79;;:::i;:::-;2836:119;2994:1;3019:53;3064:7;3055:6;3044:9;3040:22;3019:53;:::i;:::-;3009:63;;2965:117;2760:329;;;;:::o;3095:118::-;3182:24;3200:5;3182:24;:::i;:::-;3177:3;3170:37;3095:118;;:::o;3219:222::-;3312:4;3350:2;3339:9;3335:18;3327:26;;3363:71;3431:1;3420:9;3416:17;3407:6;3363:71;:::i;:::-;3219:222;;;;:::o;3447:60::-;3475:3;3496:5;3489:12;;3447:60;;;:::o;3513:142::-;3563:9;3596:53;3614:34;3623:24;3641:5;3623:24;:::i;:::-;3614:34;:::i;:::-;3596:53;:::i;:::-;3583:66;;3513:142;;;:::o;3661:126::-;3711:9;3744:37;3775:5;3744:37;:::i;:::-;3731:50;;3661:126;;;:::o;3793:139::-;3856:9;3889:37;3920:5;3889:37;:::i;:::-;3876:50;;3793:139;;;:::o;3938:157::-;4038:50;4082:5;4038:50;:::i;:::-;4033:3;4026:63;3938:157;;:::o;4101:248::-;4207:4;4245:2;4234:9;4230:18;4222:26;;4258:84;4339:1;4328:9;4324:17;4315:6;4258:84;:::i;:::-;4101:248;;;;:::o;4355:118::-;4442:24;4460:5;4442:24;:::i;:::-;4437:3;4430:37;4355:118;;:::o;4479:222::-;4572:4;4610:2;4599:9;4595:18;4587:26;;4623:71;4691:1;4680:9;4676:17;4667:6;4623:71;:::i;:::-;4479:222;;;;:::o;4707:442::-;4856:4;4894:2;4883:9;4879:18;4871:26;;4907:71;4975:1;4964:9;4960:17;4951:6;4907:71;:::i;:::-;4988:72;5056:2;5045:9;5041:18;5032:6;4988:72;:::i;:::-;5070;5138:2;5127:9;5123:18;5114:6;5070:72;:::i;:::-;4707:442;;;;;;:::o;5155:474::-;5223:6;5231;5280:2;5268:9;5259:7;5255:23;5251:32;5248:119;;;5286:79;;:::i;:::-;5248:119;5406:1;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5377:117;5533:2;5559:53;5604:7;5595:6;5584:9;5580:22;5559:53;:::i;:::-;5549:63;;5504:118;5155:474;;;;;:::o;5635:169::-;5719:11;5753:6;5748:3;5741:19;5793:4;5788:3;5784:14;5769:29;;5635:169;;;;:::o;5810:168::-;5950:20;5946:1;5938:6;5934:14;5927:44;5810:168;:::o;5984:366::-;6126:3;6147:67;6211:2;6206:3;6147:67;:::i;:::-;6140:74;;6223:93;6312:3;6223:93;:::i;:::-;6341:2;6336:3;6332:12;6325:19;;5984:366;;;:::o;6356:419::-;6522:4;6560:2;6549:9;6545:18;6537:26;;6609:9;6603:4;6599:20;6595:1;6584:9;6580:17;6573:47;6637:131;6763:4;6637:131;:::i;:::-;6629:139;;6356:419;;;:::o;6781:180::-;6829:77;6826:1;6819:88;6926:4;6923:1;6916:15;6950:4;6947:1;6940:15;6967:191;7007:3;7026:20;7044:1;7026:20;:::i;:::-;7021:25;;7060:20;7078:1;7060:20;:::i;:::-;7055:25;;7103:1;7100;7096:9;7089:16;;7124:3;7121:1;7118:10;7115:36;;;7131:18;;:::i;:::-;7115:36;6967:191;;;;:::o;7164:173::-;7304:25;7300:1;7292:6;7288:14;7281:49;7164:173;:::o;7343:366::-;7485:3;7506:67;7570:2;7565:3;7506:67;:::i;:::-;7499:74;;7582:93;7671:3;7582:93;:::i;:::-;7700:2;7695:3;7691:12;7684:19;;7343:366;;;:::o;7715:419::-;7881:4;7919:2;7908:9;7904:18;7896:26;;7968:9;7962:4;7958:20;7954:1;7943:9;7939:17;7932:47;7996:131;8122:4;7996:131;:::i;:::-;7988:139;;7715:419;;;:::o;8140:332::-;8261:4;8299:2;8288:9;8284:18;8276:26;;8312:71;8380:1;8369:9;8365:17;8356:6;8312:71;:::i;:::-;8393:72;8461:2;8450:9;8446:18;8437:6;8393:72;:::i;:::-;8140:332;;;;;:::o;8478:116::-;8548:21;8563:5;8548:21;:::i;:::-;8541:5;8538:32;8528:60;;8584:1;8581;8574:12;8528:60;8478:116;:::o;8600:137::-;8654:5;8685:6;8679:13;8670:22;;8701:30;8725:5;8701:30;:::i;:::-;8600:137;;;;:::o;8743:345::-;8810:6;8859:2;8847:9;8838:7;8834:23;8830:32;8827:119;;;8865:79;;:::i;:::-;8827:119;8985:1;9010:61;9063:7;9054:6;9043:9;9039:22;9010:61;:::i;:::-;9000:71;;8956:125;8743:345;;;;:::o;9094:176::-;9234:28;9230:1;9222:6;9218:14;9211:52;9094:176;:::o;9276:366::-;9418:3;9439:67;9503:2;9498:3;9439:67;:::i;:::-;9432:74;;9515:93;9604:3;9515:93;:::i;:::-;9633:2;9628:3;9624:12;9617:19;;9276:366;;;:::o;9648:419::-;9814:4;9852:2;9841:9;9837:18;9829:26;;9901:9;9895:4;9891:20;9887:1;9876:9;9872:17;9865:47;9929:131;10055:4;9929:131;:::i;:::-;9921:139;;9648:419;;;:::o;10073:143::-;10130:5;10161:6;10155:13;10146:22;;10177:33;10204:5;10177:33;:::i;:::-;10073:143;;;;:::o;10222:351::-;10292:6;10341:2;10329:9;10320:7;10316:23;10312:32;10309:119;;;10347:79;;:::i;:::-;10309:119;10467:1;10492:64;10548:7;10539:6;10528:9;10524:22;10492:64;:::i;:::-;10482:74;;10438:128;10222:351;;;;:::o;10579:410::-;10619:7;10642:20;10660:1;10642:20;:::i;:::-;10637:25;;10676:20;10694:1;10676:20;:::i;:::-;10671:25;;10731:1;10728;10724:9;10753:30;10771:11;10753:30;:::i;:::-;10742:41;;10932:1;10923:7;10919:15;10916:1;10913:22;10893:1;10886:9;10866:83;10843:139;;10962:18;;:::i;:::-;10843:139;10627:362;10579:410;;;;:::o;10995:180::-;11043:77;11040:1;11033:88;11140:4;11137:1;11130:15;11164:4;11161:1;11154:15;11181:185;11221:1;11238:20;11256:1;11238:20;:::i;:::-;11233:25;;11272:20;11290:1;11272:20;:::i;:::-;11267:25;;11311:1;11301:35;;11316:18;;:::i;:::-;11301:35;11358:1;11355;11351:9;11346:14;;11181:185;;;;:::o;11372:194::-;11412:4;11432:20;11450:1;11432:20;:::i;:::-;11427:25;;11466:20;11484:1;11466:20;:::i;:::-;11461:25;;11510:1;11507;11503:9;11495:17;;11534:1;11528:4;11525:11;11522:37;;;11539:18;;:::i;:::-;11522:37;11372:194;;;;:::o;11572:182::-;11712:34;11708:1;11700:6;11696:14;11689:58;11572:182;:::o;11760:366::-;11902:3;11923:67;11987:2;11982:3;11923:67;:::i;:::-;11916:74;;11999:93;12088:3;11999:93;:::i;:::-;12117:2;12112:3;12108:12;12101:19;;11760:366;;;:::o;12132:419::-;12298:4;12336:2;12325:9;12321:18;12313:26;;12385:9;12379:4;12375:20;12371:1;12360:9;12356:17;12349:47;12413:131;12539:4;12413:131;:::i;:::-;12405:139;;12132:419;;;:::o;12557:442::-;12706:4;12744:2;12733:9;12729:18;12721:26;;12757:71;12825:1;12814:9;12810:17;12801:6;12757:71;:::i;:::-;12838:72;12906:2;12895:9;12891:18;12882:6;12838:72;:::i;:::-;12920;12988:2;12977:9;12973:18;12964:6;12920:72;:::i;:::-;12557:442;;;;;;:::o;13005:169::-;13145:21;13141:1;13133:6;13129:14;13122:45;13005:169;:::o;13180:366::-;13322:3;13343:67;13407:2;13402:3;13343:67;:::i;:::-;13336:74;;13419:93;13508:3;13419:93;:::i;:::-;13537:2;13532:3;13528:12;13521:19;;13180:366;;;:::o;13552:419::-;13718:4;13756:2;13745:9;13741:18;13733:26;;13805:9;13799:4;13795:20;13791:1;13780:9;13776:17;13769:47;13833:131;13959:4;13833:131;:::i;:::-;13825:139;;13552:419;;;:::o;13977:225::-;14117:34;14113:1;14105:6;14101:14;14094:58;14186:8;14181:2;14173:6;14169:15;14162:33;13977:225;:::o;14208:366::-;14350:3;14371:67;14435:2;14430:3;14371:67;:::i;:::-;14364:74;;14447:93;14536:3;14447:93;:::i;:::-;14565:2;14560:3;14556:12;14549:19;;14208:366;;;:::o;14580:419::-;14746:4;14784:2;14773:9;14769:18;14761:26;;14833:9;14827:4;14823:20;14819:1;14808:9;14804:17;14797:47;14861:131;14987:4;14861:131;:::i;:::-;14853:139;;14580:419;;;:::o;15005:182::-;15145:34;15141:1;15133:6;15129:14;15122:58;15005:182;:::o;15193:366::-;15335:3;15356:67;15420:2;15415:3;15356:67;:::i;:::-;15349:74;;15432:93;15521:3;15432:93;:::i;:::-;15550:2;15545:3;15541:12;15534:19;;15193:366;;;:::o;15565:419::-;15731:4;15769:2;15758:9;15754:18;15746:26;;15818:9;15812:4;15808:20;15804:1;15793:9;15789:17;15782:47;15846:131;15972:4;15846:131;:::i;:::-;15838:139;;15565:419;;;:::o
Swarm Source
ipfs://f220e7ccedd3094fa2e680c6c1012f7b9fd2b7ef50246131aa497e4ec5f29933
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.