More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 167 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 12835679 | 1303 days ago | IN | 0 ETH | 0.00141626 | ||||
Reclaim Gra Stak... | 12732028 | 1319 days ago | IN | 0 ETH | 0.00137606 | ||||
Reclaim BLW Stak... | 12732021 | 1319 days ago | IN | 0 ETH | 0.00072032 | ||||
Deposit | 12722891 | 1321 days ago | IN | 0 ETH | 0.00355092 | ||||
Withdraw | 12722738 | 1321 days ago | IN | 0 ETH | 0.00255582 | ||||
Withdraw | 12716317 | 1322 days ago | IN | 0 ETH | 0.00018274 | ||||
Withdraw | 12716316 | 1322 days ago | IN | 0 ETH | 0.00018274 | ||||
Reclaim Gra Stak... | 12716276 | 1322 days ago | IN | 0 ETH | 0.00078076 | ||||
Reclaim BLW Stak... | 12716115 | 1322 days ago | IN | 0 ETH | 0.00097674 | ||||
Reclaim Gra Stak... | 12716114 | 1322 days ago | IN | 0 ETH | 0.00156153 | ||||
Reclaim BLW Stak... | 12716102 | 1322 days ago | IN | 0 ETH | 0.00076787 | ||||
Withdraw | 12647236 | 1333 days ago | IN | 0 ETH | 0.0006396 | ||||
Deposit | 12607421 | 1339 days ago | IN | 0 ETH | 0.00355092 | ||||
Withdraw | 12534070 | 1350 days ago | IN | 0 ETH | 0.00134449 | ||||
Withdraw | 12502302 | 1355 days ago | IN | 0 ETH | 0.0049203 | ||||
Reclaim BLW Stak... | 12501699 | 1355 days ago | IN | 0 ETH | 0.00196517 | ||||
Withdraw | 12501687 | 1355 days ago | IN | 0 ETH | 0.00234303 | ||||
Withdraw | 12493720 | 1356 days ago | IN | 0 ETH | 0.00533032 | ||||
Withdraw | 12493628 | 1356 days ago | IN | 0 ETH | 0.00249997 | ||||
Reclaim BLW Stak... | 12489166 | 1357 days ago | IN | 0 ETH | 0.00209548 | ||||
Withdraw | 12489130 | 1357 days ago | IN | 0 ETH | 0.00182985 | ||||
Withdraw | 12488462 | 1357 days ago | IN | 0 ETH | 0.00430526 | ||||
Withdraw | 12486370 | 1358 days ago | IN | 0 ETH | 0.0021619 | ||||
Reclaim BLW Stak... | 12332960 | 1381 days ago | IN | 0 ETH | 0.00445455 | ||||
Reclaim BLW Stak... | 12318923 | 1383 days ago | IN | 0 ETH | 0.00284496 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
GraRewardPool
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-13 */ pragma solidity ^0.5.0; pragma experimental ABIEncoderV2; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Context { function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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 * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Converts an `address` into `address payable`. Note that this is * simply a type cast: the actual underlying value is not changed. * * _Available since v2.4.0._ */ function toPayable(address account) internal pure returns (address payable) { return address(uint160(account)); } /** * @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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. * * _Available since v2.4.0._ */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-call-value (bool success, ) = recipient.call.value(amount)(""); require(success, "Address: unable to send value, recipient may have reverted"); } } interface IERC20 { /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); function mint(address recipient, uint256 amount) external returns (bool); function burn(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 `sender` to `recipient` 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 sender, address recipient, uint256 amount) external returns (bool); /** * @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); } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } 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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } contract GraRewardPool is Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; struct UserInfo { uint256 Gratotalreward; uint256 rewarded; uint256 amount; uint256 GrarewardDebt; uint256 Grapending; uint256 BLWrewardDebt; uint256 BLWpending; } struct PoolInfo { IERC20 token; uint256 startBlock; uint256 endBlock; uint256 GraPerBlock; uint256 BLWPerBlock; uint256 lastRewardBlock; uint256 accGraPerShare; uint256 accBLWPerShare; uint256 totalStake; } uint256 public lockperiod; uint256 public startrelease; IERC20 public Gratoken; IERC20 public BLWtoken; PoolInfo[] public poolinfo; mapping (uint256 => mapping (address => UserInfo)) public users; event Deposit(address indexed user,uint256 amount); event Withdraw(address indexed user,uint256 amount); event ReclaimStakingReward(address user, uint256 amount); event Set(uint256 pid, uint256 allocPoint, bool withUpdate); constructor(IERC20 _Gratoken, IERC20 _BLWtoken, uint256 _lockperiod, uint256 _startrelease) public { Gratoken = _Gratoken; BLWtoken = _BLWtoken; lockperiod = _lockperiod; startrelease = _startrelease; } function setparms(uint256 _lockperiod, uint256 _startrelease) public onlyOwner{ lockperiod = _lockperiod; startrelease = _startrelease; } modifier validatePool(uint256 _pid) { require(_pid < poolinfo.length, " pool exists?"); _; } function getpool() view public returns(PoolInfo[] memory){ return poolinfo; } //添加pool池 function addPool(IERC20 _token, uint256 _startblock, uint256 _endblock, uint256 _GraPerBlock, uint256 _BLWPerBlock, bool _withUpdate) public onlyOwner { for (uint i = 0; i < poolinfo.length; ++i) { require(address(poolinfo[i].token) != address(_token), "pool already exist"); } if (_withUpdate) { massUpdatePools(); } uint256 lastRewardBlock = block.number > _startblock ? block.number : _startblock; poolinfo.push(PoolInfo({ token: _token, startBlock: _startblock, endBlock: _endblock, GraPerBlock: _GraPerBlock, BLWPerBlock: _BLWPerBlock, lastRewardBlock: lastRewardBlock, accGraPerShare: 0, accBLWPerShare: 0, totalStake: 0 })); } function getMultiplier(PoolInfo storage pool) internal view returns (uint256) { if (block.number <= pool.lastRewardBlock) { return 0; } uint256 from = pool.lastRewardBlock; uint256 to = block.number < pool.endBlock ? block.number : pool.endBlock; if (from >= to) { return 0; } return to.sub(from); } function massUpdatePools() public { uint256 length = poolinfo.length; for (uint256 pid = 0; pid < length; pid++) { updatePool(pid); } } function updatePool(uint256 _pid) public validatePool(_pid) { PoolInfo storage pool = poolinfo[_pid]; if (block.number <= pool.lastRewardBlock || pool.lastRewardBlock > pool.endBlock) { return; } uint256 totalStake = pool.totalStake; if (totalStake == 0) { pool.lastRewardBlock = block.number <= pool.endBlock ? block.number : pool.endBlock; return; } uint256 multiplier = getMultiplier(pool); uint256 GraReward = multiplier.mul(pool.GraPerBlock); uint256 BLWReward = multiplier.mul(pool.BLWPerBlock); pool.accGraPerShare = pool.accGraPerShare.add(GraReward.mul(1e18).div(totalStake)); pool.accBLWPerShare = pool.accBLWPerShare.add(BLWReward.mul(1e18).div(totalStake)); pool.lastRewardBlock = block.number < pool.endBlock ? block.number : pool.endBlock; } function pendingGra(uint256 _pid, address _user) public view validatePool(_pid) returns (uint256) { PoolInfo storage pool = poolinfo[_pid]; UserInfo storage user = users[_pid][_user]; uint256 accGraPerShare = pool.accGraPerShare; uint256 totalStake = pool.totalStake; if (block.number > pool.lastRewardBlock && totalStake > 0) { uint256 multiplier = getMultiplier(pool); uint256 GraReward = multiplier.mul(pool.GraPerBlock); accGraPerShare = accGraPerShare.add(GraReward.mul(1e18).div(totalStake)); } return user.Grapending.add(user.amount.mul(accGraPerShare).div(1e18)).sub(user.GrarewardDebt); } function pendingBLW(uint256 _pid, address _user) public view validatePool(_pid) returns (uint256) { PoolInfo storage pool = poolinfo[_pid]; UserInfo storage user = users[_pid][_user]; uint256 accBLWPerShare = pool.accBLWPerShare; uint256 totalStake = pool.totalStake; if (block.number > pool.lastRewardBlock && totalStake > 0) { uint256 multiplier = getMultiplier(pool); uint256 BLWReward = multiplier.mul(pool.BLWPerBlock); accBLWPerShare = accBLWPerShare.add(BLWReward.mul(1e18).div(totalStake)); } return user.BLWpending.add(user.amount.mul(accBLWPerShare).div(1e18)).sub(user.BLWrewardDebt); } //抵押 function deposit(uint256 _pid, uint256 _amount) public validatePool(_pid){ PoolInfo storage pool = poolinfo[_pid]; UserInfo storage user = users[_pid][msg.sender]; updatePool(_pid); if (user.amount > 0) { uint256 Grapending = user.amount.mul(pool.accGraPerShare).div(1e18).sub(user.GrarewardDebt); uint256 BLWpending = user.amount.mul(pool.accBLWPerShare).div(1e18).sub(user.BLWrewardDebt); user.Grapending = user.Grapending.add(Grapending); user.Gratotalreward = user.Gratotalreward.add(Grapending); user.BLWpending = user.BLWpending.add(BLWpending); } pool.token.safeTransferFrom(address(msg.sender), address(this), _amount); pool.totalStake = pool.totalStake.add(_amount); user.amount = user.amount.add(_amount); user.GrarewardDebt = user.amount.mul(pool.accGraPerShare).div(1e18); user.BLWrewardDebt = user.amount.mul(pool.accBLWPerShare).div(1e18); emit Deposit(msg.sender, _amount); } //提取抵押 function withdraw(uint256 _pid, uint256 _amount) public validatePool(_pid){ PoolInfo storage pool = poolinfo[_pid]; UserInfo storage user = users[_pid][msg.sender]; require(block.number >= pool.endBlock, "withdraw time not reached"); require(user.amount >= _amount, "withdraw: insufficient balance"); updatePool(_pid); uint256 Grapending = user.amount.mul(pool.accGraPerShare).div(1e18).sub(user.GrarewardDebt); uint256 BLWpending = user.amount.mul(pool.accBLWPerShare).div(1e18).sub(user.BLWrewardDebt); if (Grapending > 0 || BLWpending > 0) { user.Gratotalreward = user.Gratotalreward.add(Grapending); user.Grapending = user.Grapending.add(Grapending); user.BLWpending = user.BLWpending.add(BLWpending); } user.amount = user.amount.sub(_amount); user.GrarewardDebt = user.amount.mul(pool.accGraPerShare).div(1e18); user.BLWrewardDebt = user.amount.mul(pool.accBLWPerShare).div(1e18); pool.token.safeTransfer(msg.sender, _amount); pool.totalStake = pool.totalStake.sub(_amount); emit Withdraw(msg.sender,_amount); } function reclaimBLWStakingReward(uint256 _pid) public validatePool(_pid) { PoolInfo storage pool = poolinfo[_pid]; UserInfo storage user = users[_pid][msg.sender]; updatePool(_pid); uint256 BLWpending = user.BLWpending.add(user.amount.mul(pool.accBLWPerShare).div(1e18).sub(user.BLWrewardDebt)); if (BLWpending > 0) { safeBLWTransfer(msg.sender, BLWpending); } user.BLWpending = 0; user.BLWrewardDebt = user.amount.mul(pool.accBLWPerShare).div(1e18); emit ReclaimStakingReward(msg.sender, BLWpending); } function reclaimGraStakingReward(uint256 _pid) public validatePool(_pid){ PoolInfo storage pool = poolinfo[_pid]; UserInfo storage user = users[_pid][msg.sender]; updatePool(_pid); uint256 Grapending = user.amount.mul(pool.accGraPerShare).div(1e18).sub(user.GrarewardDebt); if (Grapending > 0) { user.Grapending = user.Grapending.add(Grapending); user.Gratotalreward = user.Gratotalreward.add(Grapending); } uint256 time = block.timestamp.sub(startrelease).div(86400); if (time < lockperiod) { if (user.Gratotalreward.mul(time).div(lockperiod) > user.rewarded){ uint256 amount = user.Gratotalreward.mul(time).div(lockperiod).sub(user.rewarded); safegraTransfer(msg.sender, amount); user.rewarded = user.rewarded.add(amount); user.Grapending = user.Grapending.sub(amount); emit ReclaimStakingReward(msg.sender, amount); } }else{ uint256 amount = user.Gratotalreward > user.rewarded ? user.Gratotalreward.sub(user.rewarded) : 0; safegraTransfer(msg.sender, amount); user.rewarded = user.rewarded.add(amount); user.Grapending = user.Grapending.sub(amount); emit ReclaimStakingReward(msg.sender, amount); } user.GrarewardDebt = user.amount.mul(pool.accGraPerShare).div(1e18); } function getGraclaimamount(uint256 _pid, address _user) view public returns(uint256){ PoolInfo storage pool = poolinfo[_pid]; UserInfo storage user = users[_pid][_user]; uint256 accGraPerShare = pool.accGraPerShare; uint256 totalStake = pool.totalStake; if (block.number > pool.lastRewardBlock && totalStake > 0) { uint256 multiplier = getMultiplier(pool); uint256 GraReward = multiplier.mul(pool.GraPerBlock); accGraPerShare = accGraPerShare.add(GraReward.mul(1e18).div(totalStake)); } if (block.timestamp <= startrelease){ return 0; } uint256 Gratotalreward = user.Gratotalreward.add(user.amount.mul(accGraPerShare).div(1e18).sub(user.GrarewardDebt)); uint256 time = block.timestamp.sub(startrelease).div(86400); uint256 amount = Gratotalreward.mul(time).div(lockperiod); if (user.rewarded == Gratotalreward || Gratotalreward == 0 || amount <= user.rewarded) { return 0; } if (time < lockperiod) { return amount.sub(user.rewarded); }else{ return Gratotalreward > user.rewarded ? Gratotalreward.sub(user.rewarded) : 0; } } function safegraTransfer(address _to, uint256 _amount) internal { uint256 GraBalance = Gratoken.balanceOf(address(this)); if (_amount > GraBalance) { Gratoken.transfer(_to, GraBalance); } else { Gratoken.transfer(_to, _amount); } } function safeBLWTransfer(address _to, uint256 _amount) internal { uint256 BLWBalance = BLWtoken.balanceOf(address(this)); if (_amount > BLWBalance) { BLWtoken.transfer(_to, BLWBalance); } else { BLWtoken.transfer(_to, _amount); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_Gratoken","type":"address"},{"internalType":"contract IERC20","name":"_BLWtoken","type":"address"},{"internalType":"uint256","name":"_lockperiod","type":"uint256"},{"internalType":"uint256","name":"_startrelease","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReclaimStakingReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":false,"internalType":"bool","name":"withUpdate","type":"bool"}],"name":"Set","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"constant":true,"inputs":[],"name":"BLWtoken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"Gratoken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_startblock","type":"uint256"},{"internalType":"uint256","name":"_endblock","type":"uint256"},{"internalType":"uint256","name":"_GraPerBlock","type":"uint256"},{"internalType":"uint256","name":"_BLWPerBlock","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"addPool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"getGraclaimamount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getpool","outputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"GraPerBlock","type":"uint256"},{"internalType":"uint256","name":"BLWPerBlock","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accGraPerShare","type":"uint256"},{"internalType":"uint256","name":"accBLWPerShare","type":"uint256"},{"internalType":"uint256","name":"totalStake","type":"uint256"}],"internalType":"struct GraRewardPool.PoolInfo[]","name":"","type":"tuple[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lockperiod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"massUpdatePools","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingBLW","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingGra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolinfo","outputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"GraPerBlock","type":"uint256"},{"internalType":"uint256","name":"BLWPerBlock","type":"uint256"},{"internalType":"uint256","name":"lastRewardBlock","type":"uint256"},{"internalType":"uint256","name":"accGraPerShare","type":"uint256"},{"internalType":"uint256","name":"accBLWPerShare","type":"uint256"},{"internalType":"uint256","name":"totalStake","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"reclaimBLWStakingReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"reclaimGraStakingReward","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_lockperiod","type":"uint256"},{"internalType":"uint256","name":"_startrelease","type":"uint256"}],"name":"setparms","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"startrelease","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"users","outputs":[{"internalType":"uint256","name":"Gratotalreward","type":"uint256"},{"internalType":"uint256","name":"rewarded","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"GrarewardDebt","type":"uint256"},{"internalType":"uint256","name":"Grapending","type":"uint256"},{"internalType":"uint256","name":"BLWrewardDebt","type":"uint256"},{"internalType":"uint256","name":"BLWpending","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002714380380620027148339810160408190526200003491620000f6565b6000620000496001600160e01b03620000d216565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600380546001600160a01b039586166001600160a01b0319918216179091556004805494909516931692909217909255600191909155600255620001ae565b3390565b8051620000e38162000189565b92915050565b8051620000e381620001a3565b600080600080608085870312156200010d57600080fd5b60006200011b8787620000d6565b94505060206200012e87828801620000d6565b93505060406200014187828801620000e9565b92505060606200015487828801620000e9565b91505092959194509250565b6000620000e3826200017a565b6000620000e38262000160565b6001600160a01b031690565b90565b62000194816200016d565b8114620001a057600080fd5b50565b620001948162000186565b61255680620001be6000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80638da5cb5b116100b8578063cd5452311161007c578063cd54523114610266578063cd9ab4a414610279578063e2bbb1581461028e578063ef19506b146102a1578063f2fde38b146102b4578063f5705cd1146102c757610137565b80638da5cb5b146101fd578063ac17288914610212578063ae109f3e1461021a578063b9d02df41461022d578063ca2515421461025357610137565b806351eb05a6116100ff57806351eb05a6146101b257806353dbaf8a146101c5578063630b5ba1146101d8578063715018a6146101e0578063751981eb146101e857610137565b806306c1fa511461013c57806330978bdb1461015a5780633a6786761461016f5780633f43d79714610177578063441a3e701461019f575b600080fd5b6101446102da565b60405161015191906123f9565b60405180910390f35b61016d610168366004611cd0565b6102e0565b005b610144610572565b61018a610185366004611d57565b610578565b604051610151999897969594939291906122b2565b61016d6101ad366004611dcd565b6105da565b61016d6101c0366004611d57565b61084b565b61016d6101d3366004611d57565b6109b9565b61016d610ae7565b61016d610b06565b6101f0610b85565b60405161015191906122a4565b610205610b94565b6040516101519190612234565b6101f0610ba3565b610144610228366004611d93565b610bb2565b61024061023b366004611d93565b610d99565b6040516101519796959493929190612407565b61016d610261366004611dcd565b610ddf565b610144610274366004611d93565b610e1f565b610281610f46565b6040516101519190612293565b61016d61029c366004611dcd565b611004565b61016d6102af366004611d57565b61120b565b61016d6102c2366004611c8c565b6114ae565b6101446102d5366004611d93565b611564565b60015481565b6102e861166a565b6000546001600160a01b0390811691161461031e5760405162461bcd60e51b8152600401610315906123b9565b60405180910390fd5b60005b60055481101561038257866001600160a01b03166005828154811061034257fe5b60009182526020909120600990910201546001600160a01b0316141561037a5760405162461bcd60e51b8152600401610315906123e9565b600101610321565b50801561039157610391610ae7565b60008543116103a057856103a2565b435b60408051610120810182526001600160a01b03998a16815260208101988952908101968752606081019586526080810194855260a08101918252600060c0820181815260e08301828152610100840183815260058054600181018255945293517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0600990940293840180546001600160a01b03191691909d1617909b5598517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db182015596517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db288015594517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db387015592517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db48601555050517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db583015591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db682015591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db7830155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db890910155565b60025481565b6005818154811061058557fe5b60009182526020909120600990910201805460018201546002830154600384015460048501546005860154600687015460078801546008909801546001600160a01b0390971698509496939592949193909289565b600554829081106105fd5760405162461bcd60e51b815260040161031590612389565b60006005848154811061060c57fe5b600091825260208083208784526006825260408085203386529092529220600260099092029092019081015490925043101561065a5760405162461bcd60e51b815260040161031590612379565b838160020154101561067e5760405162461bcd60e51b815260040161031590612399565b6106878561084b565b60006106d082600301546106c4670de0b6b3a76400006106b88760060154876002015461166e90919063ffffffff16565b9063ffffffff6116af16565b9063ffffffff6116f116565b9050600061070383600501546106c4670de0b6b3a76400006106b88860070154886002015461166e90919063ffffffff16565b905060008211806107145750600081115b1561076257825461072b908363ffffffff61173316565b83556004830154610742908363ffffffff61173316565b6004840155600683015461075c908263ffffffff61173316565b60068401555b6002830154610777908763ffffffff6116f116565b6002840181905560068501546107a191670de0b6b3a7640000916106b8919063ffffffff61166e16565b6003840155600784015460028401546107cd91670de0b6b3a7640000916106b89163ffffffff61166e16565b600584015583546107ee906001600160a01b0316338863ffffffff61175816565b6008840154610803908763ffffffff6116f116565b600885015560405133907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649061083a9089906123f9565b60405180910390a250505050505050565b6005548190811061086e5760405162461bcd60e51b815260040161031590612389565b60006005838154811061087d57fe5b906000526020600020906009020190508060050154431115806108a7575080600201548160050154115b156108b257506109b5565b6008810154806108e35781600201544311156108d25781600201546108d4565b435b826005018190555050506109b5565b60006108ee836117b6565b9050600061090984600301548361166e90919063ffffffff16565b9050600061092485600401548461166e90919063ffffffff16565b9050610956610945856106b885670de0b6b3a764000063ffffffff61166e16565b60068701549063ffffffff61173316565b600686015561098b61097a856106b884670de0b6b3a764000063ffffffff61166e16565b60078701549063ffffffff61173316565b6007860155600285015443106109a55784600201546109a7565b435b856005018190555050505050505b5050565b600554819081106109dc5760405162461bcd60e51b815260040161031590612389565b6000600583815481106109eb57fe5b60009182526020808320868452600682526040808520338652909252922060099091029091019150610a1c8461084b565b6000610a61610a5083600501546106c4670de0b6b3a76400006106b88860070154886002015461166e90919063ffffffff16565b60068401549063ffffffff61173316565b90508015610a7357610a733382611818565b6000600683015560078301546002830154610aa191670de0b6b3a7640000916106b89163ffffffff61166e16565b60058301556040517fc4f631358fe7d4f3f0301cdcc3914b651ae9eb9aace72a4930737f6cde8c704190610ad89033908490612242565b60405180910390a15050505050565b60055460005b818110156109b557610afe8161084b565b600101610aed565b610b0e61166a565b6000546001600160a01b03908116911614610b3b5760405162461bcd60e51b8152600401610315906123b9565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6003546001600160a01b031681565b6000546001600160a01b031690565b6004546001600160a01b031681565b60008060058481548110610bc257fe5b60009182526020808320878452600680835260408086206001600160a01b038a1687529093529190932060099092029092019182015460088301546005840154939450919290919043118015610c185750600081115b15610c76576000610c28856117b6565b90506000610c4386600301548361166e90919063ffffffff16565b9050610c71610c64846106b884670de0b6b3a764000063ffffffff61166e16565b859063ffffffff61173316565b935050505b6002544211610c8c576000945050505050610d93565b6000610cca610cbc85600301546106c4670de0b6b3a76400006106b8888a6002015461166e90919063ffffffff16565b85549063ffffffff61173316565b90506000610cea620151806106b8600254426116f190919063ffffffff16565b90506000610d076001546106b8848661166e90919063ffffffff16565b90508286600101541480610d19575082155b80610d28575085600101548111155b15610d3d576000975050505050505050610d93565b600154821015610d6b576001860154610d5d90829063ffffffff6116f116565b975050505050505050610d93565b85600101548311610d7d576000610d5d565b6001860154610d5d90849063ffffffff6116f116565b92915050565b6006602081815260009384526040808520909152918352912080546001820154600283015460038401546004850154600586015495909601549395929491939092919087565b610de761166a565b6000546001600160a01b03908116911614610e145760405162461bcd60e51b8152600401610315906123b9565b600191909155600255565b60055460009083908110610e455760405162461bcd60e51b815260040161031590612389565b600060058581548110610e5457fe5b60009182526020808320888452600680835260408086206001600160a01b038b1687529093529190932060099092029092019182015460088301546005840154939450919290919043118015610eaa5750600081115b15610efb576000610eba856117b6565b90506000610ed586600301548361166e90919063ffffffff16565b9050610ef6610c64846106b884670de0b6b3a764000063ffffffff61166e16565b935050505b610f3a83600301546106c4610f29670de0b6b3a76400006106b887896002015461166e90919063ffffffff16565b60048701549063ffffffff61173316565b98975050505050505050565b60606005805480602002602001604051908101604052809291908181526020016000905b82821015610ffb57600084815260209081902060408051610120810182526009860290920180546001600160a01b03168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e0840152600801546101008301529083529092019101610f6a565b50505050905090565b600554829081106110275760405162461bcd60e51b815260040161031590612389565b60006005848154811061103657fe5b600091825260208083208784526006825260408085203386529092529220600990910290910191506110678561084b565b6002810154156111235760006110a282600301546106c4670de0b6b3a76400006106b88760060154876002015461166e90919063ffffffff16565b905060006110d583600501546106c4670de0b6b3a76400006106b88860070154886002015461166e90919063ffffffff16565b60048401549091506110ed908363ffffffff61173316565b60048401558254611104908363ffffffff61173316565b8355600683015461111b908263ffffffff61173316565b600684015550505b8154611140906001600160a01b031633308763ffffffff6119b616565b6008820154611155908563ffffffff61173316565b6008830155600281015461116f908563ffffffff61173316565b60028201819055600683015461119991670de0b6b3a7640000916106b8919063ffffffff61166e16565b6003820155600782015460028201546111c591670de0b6b3a7640000916106b89163ffffffff61166e16565b600582015560405133907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c906111fc9087906123f9565b60405180910390a25050505050565b6005548190811061122e5760405162461bcd60e51b815260040161031590612389565b60006005838154811061123d57fe5b6000918252602080832086845260068252604080852033865290925292206009909102909101915061126e8461084b565b600061129f82600301546106c4670de0b6b3a76400006106b88760060154876002015461166e90919063ffffffff16565b905080156112d65760048201546112bc908263ffffffff61173316565b600483015581546112d3908263ffffffff61173316565b82555b60006112f4620151806106b8600254426116f190919063ffffffff16565b90506001548110156113cd576001808401549054845461131f91906106b8908563ffffffff61166e16565b11156113c857600061134c84600101546106c46001546106b886896000015461166e90919063ffffffff16565b905061135833826119da565b600184015461136d908263ffffffff61173316565b60018501556004840154611387908263ffffffff6116f116565b60048501556040517fc4f631358fe7d4f3f0301cdcc3914b651ae9eb9aace72a4930737f6cde8c7041906113be9033908490612242565b60405180910390a1505b611477565b600083600101548460000154116113e55760006113fb565b600184015484546113fb9163ffffffff6116f116565b905061140733826119da565b600184015461141c908263ffffffff61173316565b60018501556004840154611436908263ffffffff6116f116565b60048501556040517fc4f631358fe7d4f3f0301cdcc3914b651ae9eb9aace72a4930737f6cde8c70419061146d9033908490612242565b60405180910390a1505b61149e670de0b6b3a76400006106b88660060154866002015461166e90919063ffffffff16565b8360030181905550505050505050565b6114b661166a565b6000546001600160a01b039081169116146114e35760405162461bcd60e51b8152600401610315906123b9565b6001600160a01b0381166115095760405162461bcd60e51b815260040161031590612349565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000908390811061158a5760405162461bcd60e51b815260040161031590612389565b60006005858154811061159957fe5b600091825260208083208884526006825260408085206001600160a01b038a16865290925292206007600990920290920190810154600882015460058301549294509091431180156115eb5750600081115b1561163c5760006115fb856117b6565b9050600061161686600401548361166e90919063ffffffff16565b9050611637610c64846106b884670de0b6b3a764000063ffffffff61166e16565b935050505b610f3a83600501546106c4610945670de0b6b3a76400006106b887896002015461166e90919063ffffffff16565b3390565b60008261167d57506000610d93565b8282028284828161168a57fe5b04146116a85760405162461bcd60e51b8152600401610315906123a9565b9392505050565b60006116a883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ac9565b60006116a883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b00565b6000828201838110156116a85760405162461bcd60e51b815260040161031590612359565b6040516117b190849063a9059cbb60e01b9061177a9086908690602401612285565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611b2c565b505050565b6000816005015443116117cb57506000611813565b6005820154600283015460009043106117e85783600201546117ea565b435b90508082106117fe57600092505050611813565b61180e818363ffffffff6116f116565b925050505b919050565b600480546040516370a0823160e01b81526000926001600160a01b03909216916370a082319161184a91309101612234565b60206040518083038186803b15801561186257600080fd5b505afa158015611876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061189a9190810190611d75565b90508082111561192d576004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb916118d5918791869101612285565b602060405180830381600087803b1580156118ef57600080fd5b505af1158015611903573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119279190810190611cb2565b506117b1565b6004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb9161195e918791879101612285565b602060405180830381600087803b15801561197857600080fd5b505af115801561198c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119b09190810190611cb2565b50505050565b6040516119b09085906323b872dd60e01b9061177a9087908790879060240161225d565b6003546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611a0b903090600401612234565b60206040518083038186803b158015611a2357600080fd5b505afa158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a5b9190810190611d75565b905080821115611a975760035460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906118d59086908590600401612285565b60035460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061195e9086908690600401612285565b60008183611aea5760405162461bcd60e51b81526004016103159190612338565b506000838581611af657fe5b0495945050505050565b60008184841115611b245760405162461bcd60e51b81526004016103159190612338565b505050900390565b611b3e826001600160a01b0316611c11565b611b5a5760405162461bcd60e51b8152600401610315906123d9565b60006060836001600160a01b031683604051611b769190612228565b6000604051808303816000865af19150503d8060008114611bb3576040519150601f19603f3d011682016040523d82523d6000602084013e611bb8565b606091505b509150915081611bda5760405162461bcd60e51b815260040161031590612369565b8051156119b05780806020019051611bf59190810190611cb2565b6119b05760405162461bcd60e51b8152600401610315906123c9565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061180e575050151592915050565b8035610d93816124e1565b8035610d93816124f8565b8051610d93816124f8565b8035610d9381612501565b8035610d938161250a565b8051610d938161250a565b600060208284031215611c9e57600080fd5b6000611caa8484611c4a565b949350505050565b600060208284031215611cc457600080fd5b6000611caa8484611c60565b60008060008060008060c08789031215611ce957600080fd5b6000611cf58989611c6b565b9650506020611d0689828a01611c76565b9550506040611d1789828a01611c76565b9450506060611d2889828a01611c76565b9350506080611d3989828a01611c76565b92505060a0611d4a89828a01611c55565b9150509295509295509295565b600060208284031215611d6957600080fd5b6000611caa8484611c76565b600060208284031215611d8757600080fd5b6000611caa8484611c81565b60008060408385031215611da657600080fd5b6000611db28585611c76565b9250506020611dc385828601611c4a565b9150509250929050565b60008060408385031215611de057600080fd5b6000611dec8585611c76565b9250506020611dc385828601611c76565b6000611e098383612177565b50506101200190565b611e1b816124a0565b82525050565b611e1b81612476565b6000611e3582612469565b611e3f818561246d565b9350611e4a83612463565b8060005b83811015611e78578151611e628882611dfd565b9750611e6d83612463565b925050600101611e4e565b509495945050505050565b6000611e8e82612469565b611e988185611813565b9350611ea88185602086016124ab565b9290920192915050565b611e1b81612486565b6000611ec682612469565b611ed0818561246d565b9350611ee08185602086016124ab565b611ee9816124d7565b9093019392505050565b6000611f0060268361246d565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000611f48601b8361246d565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000611f8160208361246d565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000611fba60198361246d565b7f77697468647261772074696d65206e6f74207265616368656400000000000000815260200192915050565b6000611ff3600d8361246d565b6c20706f6f6c206578697374733f60981b815260200192915050565b600061201c601e8361246d565b7f77697468647261773a20696e73756666696369656e742062616c616e63650000815260200192915050565b600061205560218361246d565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061209860208361246d565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006120d1602a8361246d565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b600061211d601f8361246d565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b600061215660128361246d565b711c1bdbdb08185b1c9958591e48195e1a5cdd60721b815260200192915050565b80516101208301906121898482611eb2565b50602082015161219c602085018261221f565b5060408201516121af604085018261221f565b5060608201516121c2606085018261221f565b5060808201516121d5608085018261221f565b5060a08201516121e860a085018261221f565b5060c08201516121fb60c085018261221f565b5060e082015161220e60e085018261221f565b506101008201516119b06101008501825b611e1b8161249d565b60006116a88284611e83565b60208101610d938284611e21565b604081016122508285611e12565b6116a8602083018461221f565b6060810161226b8286611e21565b6122786020830185611e21565b611caa604083018461221f565b604081016122508285611e21565b602080825281016116a88184611e2a565b60208101610d938284611eb2565b61012081016122c1828c611eb2565b6122ce602083018b61221f565b6122db604083018a61221f565b6122e8606083018961221f565b6122f5608083018861221f565b61230260a083018761221f565b61230f60c083018661221f565b61231c60e083018561221f565b61232a61010083018461221f565b9a9950505050505050505050565b602080825281016116a88184611ebb565b60208082528101610d9381611ef3565b60208082528101610d9381611f3b565b60208082528101610d9381611f74565b60208082528101610d9381611fad565b60208082528101610d9381611fe6565b60208082528101610d938161200f565b60208082528101610d9381612048565b60208082528101610d938161208b565b60208082528101610d93816120c4565b60208082528101610d9381612110565b60208082528101610d9381612149565b60208101610d93828461221f565b60e08101612415828a61221f565b612422602083018961221f565b61242f604083018861221f565b61243c606083018761221f565b612449608083018661221f565b61245660a083018561221f565b610f3a60c083018461221f565b60200190565b5190565b90815260200190565b6000610d9382612491565b151590565b6000610d9382612476565b6001600160a01b031690565b90565b6000610d9382612486565b60005b838110156124c65781810151838201526020016124ae565b838111156119b05750506000910152565b601f01601f191690565b6124ea81612476565b81146124f557600080fd5b50565b6124ea81612481565b6124ea81612486565b6124ea8161249d56fea365627a7a723158203e8da2d58b9cb515e65e89920142baa146b9f8952ddedc12d7e50ec2484238946c6578706572696d656e74616cf564736f6c634300051100400000000000000000000000005a23b7e3bb936c7753b5e7a6c304a8fb43979d200000000000000000000000006767d3789ff7c678612e771b7b78db7fa04a063c000000000000000000000000000000000000000000000000000000000000016d0000000000000000000000000000000000000000000000000000000060771180
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101375760003560e01c80638da5cb5b116100b8578063cd5452311161007c578063cd54523114610266578063cd9ab4a414610279578063e2bbb1581461028e578063ef19506b146102a1578063f2fde38b146102b4578063f5705cd1146102c757610137565b80638da5cb5b146101fd578063ac17288914610212578063ae109f3e1461021a578063b9d02df41461022d578063ca2515421461025357610137565b806351eb05a6116100ff57806351eb05a6146101b257806353dbaf8a146101c5578063630b5ba1146101d8578063715018a6146101e0578063751981eb146101e857610137565b806306c1fa511461013c57806330978bdb1461015a5780633a6786761461016f5780633f43d79714610177578063441a3e701461019f575b600080fd5b6101446102da565b60405161015191906123f9565b60405180910390f35b61016d610168366004611cd0565b6102e0565b005b610144610572565b61018a610185366004611d57565b610578565b604051610151999897969594939291906122b2565b61016d6101ad366004611dcd565b6105da565b61016d6101c0366004611d57565b61084b565b61016d6101d3366004611d57565b6109b9565b61016d610ae7565b61016d610b06565b6101f0610b85565b60405161015191906122a4565b610205610b94565b6040516101519190612234565b6101f0610ba3565b610144610228366004611d93565b610bb2565b61024061023b366004611d93565b610d99565b6040516101519796959493929190612407565b61016d610261366004611dcd565b610ddf565b610144610274366004611d93565b610e1f565b610281610f46565b6040516101519190612293565b61016d61029c366004611dcd565b611004565b61016d6102af366004611d57565b61120b565b61016d6102c2366004611c8c565b6114ae565b6101446102d5366004611d93565b611564565b60015481565b6102e861166a565b6000546001600160a01b0390811691161461031e5760405162461bcd60e51b8152600401610315906123b9565b60405180910390fd5b60005b60055481101561038257866001600160a01b03166005828154811061034257fe5b60009182526020909120600990910201546001600160a01b0316141561037a5760405162461bcd60e51b8152600401610315906123e9565b600101610321565b50801561039157610391610ae7565b60008543116103a057856103a2565b435b60408051610120810182526001600160a01b03998a16815260208101988952908101968752606081019586526080810194855260a08101918252600060c0820181815260e08301828152610100840183815260058054600181018255945293517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0600990940293840180546001600160a01b03191691909d1617909b5598517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db182015596517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db288015594517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db387015592517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db48601555050517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db583015591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db682015591517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db7830155517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db890910155565b60025481565b6005818154811061058557fe5b60009182526020909120600990910201805460018201546002830154600384015460048501546005860154600687015460078801546008909801546001600160a01b0390971698509496939592949193909289565b600554829081106105fd5760405162461bcd60e51b815260040161031590612389565b60006005848154811061060c57fe5b600091825260208083208784526006825260408085203386529092529220600260099092029092019081015490925043101561065a5760405162461bcd60e51b815260040161031590612379565b838160020154101561067e5760405162461bcd60e51b815260040161031590612399565b6106878561084b565b60006106d082600301546106c4670de0b6b3a76400006106b88760060154876002015461166e90919063ffffffff16565b9063ffffffff6116af16565b9063ffffffff6116f116565b9050600061070383600501546106c4670de0b6b3a76400006106b88860070154886002015461166e90919063ffffffff16565b905060008211806107145750600081115b1561076257825461072b908363ffffffff61173316565b83556004830154610742908363ffffffff61173316565b6004840155600683015461075c908263ffffffff61173316565b60068401555b6002830154610777908763ffffffff6116f116565b6002840181905560068501546107a191670de0b6b3a7640000916106b8919063ffffffff61166e16565b6003840155600784015460028401546107cd91670de0b6b3a7640000916106b89163ffffffff61166e16565b600584015583546107ee906001600160a01b0316338863ffffffff61175816565b6008840154610803908763ffffffff6116f116565b600885015560405133907f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a94243649061083a9089906123f9565b60405180910390a250505050505050565b6005548190811061086e5760405162461bcd60e51b815260040161031590612389565b60006005838154811061087d57fe5b906000526020600020906009020190508060050154431115806108a7575080600201548160050154115b156108b257506109b5565b6008810154806108e35781600201544311156108d25781600201546108d4565b435b826005018190555050506109b5565b60006108ee836117b6565b9050600061090984600301548361166e90919063ffffffff16565b9050600061092485600401548461166e90919063ffffffff16565b9050610956610945856106b885670de0b6b3a764000063ffffffff61166e16565b60068701549063ffffffff61173316565b600686015561098b61097a856106b884670de0b6b3a764000063ffffffff61166e16565b60078701549063ffffffff61173316565b6007860155600285015443106109a55784600201546109a7565b435b856005018190555050505050505b5050565b600554819081106109dc5760405162461bcd60e51b815260040161031590612389565b6000600583815481106109eb57fe5b60009182526020808320868452600682526040808520338652909252922060099091029091019150610a1c8461084b565b6000610a61610a5083600501546106c4670de0b6b3a76400006106b88860070154886002015461166e90919063ffffffff16565b60068401549063ffffffff61173316565b90508015610a7357610a733382611818565b6000600683015560078301546002830154610aa191670de0b6b3a7640000916106b89163ffffffff61166e16565b60058301556040517fc4f631358fe7d4f3f0301cdcc3914b651ae9eb9aace72a4930737f6cde8c704190610ad89033908490612242565b60405180910390a15050505050565b60055460005b818110156109b557610afe8161084b565b600101610aed565b610b0e61166a565b6000546001600160a01b03908116911614610b3b5760405162461bcd60e51b8152600401610315906123b9565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6003546001600160a01b031681565b6000546001600160a01b031690565b6004546001600160a01b031681565b60008060058481548110610bc257fe5b60009182526020808320878452600680835260408086206001600160a01b038a1687529093529190932060099092029092019182015460088301546005840154939450919290919043118015610c185750600081115b15610c76576000610c28856117b6565b90506000610c4386600301548361166e90919063ffffffff16565b9050610c71610c64846106b884670de0b6b3a764000063ffffffff61166e16565b859063ffffffff61173316565b935050505b6002544211610c8c576000945050505050610d93565b6000610cca610cbc85600301546106c4670de0b6b3a76400006106b8888a6002015461166e90919063ffffffff16565b85549063ffffffff61173316565b90506000610cea620151806106b8600254426116f190919063ffffffff16565b90506000610d076001546106b8848661166e90919063ffffffff16565b90508286600101541480610d19575082155b80610d28575085600101548111155b15610d3d576000975050505050505050610d93565b600154821015610d6b576001860154610d5d90829063ffffffff6116f116565b975050505050505050610d93565b85600101548311610d7d576000610d5d565b6001860154610d5d90849063ffffffff6116f116565b92915050565b6006602081815260009384526040808520909152918352912080546001820154600283015460038401546004850154600586015495909601549395929491939092919087565b610de761166a565b6000546001600160a01b03908116911614610e145760405162461bcd60e51b8152600401610315906123b9565b600191909155600255565b60055460009083908110610e455760405162461bcd60e51b815260040161031590612389565b600060058581548110610e5457fe5b60009182526020808320888452600680835260408086206001600160a01b038b1687529093529190932060099092029092019182015460088301546005840154939450919290919043118015610eaa5750600081115b15610efb576000610eba856117b6565b90506000610ed586600301548361166e90919063ffffffff16565b9050610ef6610c64846106b884670de0b6b3a764000063ffffffff61166e16565b935050505b610f3a83600301546106c4610f29670de0b6b3a76400006106b887896002015461166e90919063ffffffff16565b60048701549063ffffffff61173316565b98975050505050505050565b60606005805480602002602001604051908101604052809291908181526020016000905b82821015610ffb57600084815260209081902060408051610120810182526009860290920180546001600160a01b03168352600180820154848601526002820154928401929092526003810154606084015260048101546080840152600581015460a0840152600681015460c0840152600781015460e0840152600801546101008301529083529092019101610f6a565b50505050905090565b600554829081106110275760405162461bcd60e51b815260040161031590612389565b60006005848154811061103657fe5b600091825260208083208784526006825260408085203386529092529220600990910290910191506110678561084b565b6002810154156111235760006110a282600301546106c4670de0b6b3a76400006106b88760060154876002015461166e90919063ffffffff16565b905060006110d583600501546106c4670de0b6b3a76400006106b88860070154886002015461166e90919063ffffffff16565b60048401549091506110ed908363ffffffff61173316565b60048401558254611104908363ffffffff61173316565b8355600683015461111b908263ffffffff61173316565b600684015550505b8154611140906001600160a01b031633308763ffffffff6119b616565b6008820154611155908563ffffffff61173316565b6008830155600281015461116f908563ffffffff61173316565b60028201819055600683015461119991670de0b6b3a7640000916106b8919063ffffffff61166e16565b6003820155600782015460028201546111c591670de0b6b3a7640000916106b89163ffffffff61166e16565b600582015560405133907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c906111fc9087906123f9565b60405180910390a25050505050565b6005548190811061122e5760405162461bcd60e51b815260040161031590612389565b60006005838154811061123d57fe5b6000918252602080832086845260068252604080852033865290925292206009909102909101915061126e8461084b565b600061129f82600301546106c4670de0b6b3a76400006106b88760060154876002015461166e90919063ffffffff16565b905080156112d65760048201546112bc908263ffffffff61173316565b600483015581546112d3908263ffffffff61173316565b82555b60006112f4620151806106b8600254426116f190919063ffffffff16565b90506001548110156113cd576001808401549054845461131f91906106b8908563ffffffff61166e16565b11156113c857600061134c84600101546106c46001546106b886896000015461166e90919063ffffffff16565b905061135833826119da565b600184015461136d908263ffffffff61173316565b60018501556004840154611387908263ffffffff6116f116565b60048501556040517fc4f631358fe7d4f3f0301cdcc3914b651ae9eb9aace72a4930737f6cde8c7041906113be9033908490612242565b60405180910390a1505b611477565b600083600101548460000154116113e55760006113fb565b600184015484546113fb9163ffffffff6116f116565b905061140733826119da565b600184015461141c908263ffffffff61173316565b60018501556004840154611436908263ffffffff6116f116565b60048501556040517fc4f631358fe7d4f3f0301cdcc3914b651ae9eb9aace72a4930737f6cde8c70419061146d9033908490612242565b60405180910390a1505b61149e670de0b6b3a76400006106b88660060154866002015461166e90919063ffffffff16565b8360030181905550505050505050565b6114b661166a565b6000546001600160a01b039081169116146114e35760405162461bcd60e51b8152600401610315906123b9565b6001600160a01b0381166115095760405162461bcd60e51b815260040161031590612349565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546000908390811061158a5760405162461bcd60e51b815260040161031590612389565b60006005858154811061159957fe5b600091825260208083208884526006825260408085206001600160a01b038a16865290925292206007600990920290920190810154600882015460058301549294509091431180156115eb5750600081115b1561163c5760006115fb856117b6565b9050600061161686600401548361166e90919063ffffffff16565b9050611637610c64846106b884670de0b6b3a764000063ffffffff61166e16565b935050505b610f3a83600501546106c4610945670de0b6b3a76400006106b887896002015461166e90919063ffffffff16565b3390565b60008261167d57506000610d93565b8282028284828161168a57fe5b04146116a85760405162461bcd60e51b8152600401610315906123a9565b9392505050565b60006116a883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611ac9565b60006116a883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b00565b6000828201838110156116a85760405162461bcd60e51b815260040161031590612359565b6040516117b190849063a9059cbb60e01b9061177a9086908690602401612285565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611b2c565b505050565b6000816005015443116117cb57506000611813565b6005820154600283015460009043106117e85783600201546117ea565b435b90508082106117fe57600092505050611813565b61180e818363ffffffff6116f116565b925050505b919050565b600480546040516370a0823160e01b81526000926001600160a01b03909216916370a082319161184a91309101612234565b60206040518083038186803b15801561186257600080fd5b505afa158015611876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061189a9190810190611d75565b90508082111561192d576004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb916118d5918791869101612285565b602060405180830381600087803b1580156118ef57600080fd5b505af1158015611903573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119279190810190611cb2565b506117b1565b6004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb9161195e918791879101612285565b602060405180830381600087803b15801561197857600080fd5b505af115801561198c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506119b09190810190611cb2565b50505050565b6040516119b09085906323b872dd60e01b9061177a9087908790879060240161225d565b6003546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611a0b903090600401612234565b60206040518083038186803b158015611a2357600080fd5b505afa158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611a5b9190810190611d75565b905080821115611a975760035460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906118d59086908590600401612285565b60035460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061195e9086908690600401612285565b60008183611aea5760405162461bcd60e51b81526004016103159190612338565b506000838581611af657fe5b0495945050505050565b60008184841115611b245760405162461bcd60e51b81526004016103159190612338565b505050900390565b611b3e826001600160a01b0316611c11565b611b5a5760405162461bcd60e51b8152600401610315906123d9565b60006060836001600160a01b031683604051611b769190612228565b6000604051808303816000865af19150503d8060008114611bb3576040519150601f19603f3d011682016040523d82523d6000602084013e611bb8565b606091505b509150915081611bda5760405162461bcd60e51b815260040161031590612369565b8051156119b05780806020019051611bf59190810190611cb2565b6119b05760405162461bcd60e51b8152600401610315906123c9565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061180e575050151592915050565b8035610d93816124e1565b8035610d93816124f8565b8051610d93816124f8565b8035610d9381612501565b8035610d938161250a565b8051610d938161250a565b600060208284031215611c9e57600080fd5b6000611caa8484611c4a565b949350505050565b600060208284031215611cc457600080fd5b6000611caa8484611c60565b60008060008060008060c08789031215611ce957600080fd5b6000611cf58989611c6b565b9650506020611d0689828a01611c76565b9550506040611d1789828a01611c76565b9450506060611d2889828a01611c76565b9350506080611d3989828a01611c76565b92505060a0611d4a89828a01611c55565b9150509295509295509295565b600060208284031215611d6957600080fd5b6000611caa8484611c76565b600060208284031215611d8757600080fd5b6000611caa8484611c81565b60008060408385031215611da657600080fd5b6000611db28585611c76565b9250506020611dc385828601611c4a565b9150509250929050565b60008060408385031215611de057600080fd5b6000611dec8585611c76565b9250506020611dc385828601611c76565b6000611e098383612177565b50506101200190565b611e1b816124a0565b82525050565b611e1b81612476565b6000611e3582612469565b611e3f818561246d565b9350611e4a83612463565b8060005b83811015611e78578151611e628882611dfd565b9750611e6d83612463565b925050600101611e4e565b509495945050505050565b6000611e8e82612469565b611e988185611813565b9350611ea88185602086016124ab565b9290920192915050565b611e1b81612486565b6000611ec682612469565b611ed0818561246d565b9350611ee08185602086016124ab565b611ee9816124d7565b9093019392505050565b6000611f0060268361246d565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181526564647265737360d01b602082015260400192915050565b6000611f48601b8361246d565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000611f8160208361246d565b7f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815260200192915050565b6000611fba60198361246d565b7f77697468647261772074696d65206e6f74207265616368656400000000000000815260200192915050565b6000611ff3600d8361246d565b6c20706f6f6c206578697374733f60981b815260200192915050565b600061201c601e8361246d565b7f77697468647261773a20696e73756666696369656e742062616c616e63650000815260200192915050565b600061205560218361246d565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061209860208361246d565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b60006120d1602a8361246d565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015260400192915050565b600061211d601f8361246d565b7f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400815260200192915050565b600061215660128361246d565b711c1bdbdb08185b1c9958591e48195e1a5cdd60721b815260200192915050565b80516101208301906121898482611eb2565b50602082015161219c602085018261221f565b5060408201516121af604085018261221f565b5060608201516121c2606085018261221f565b5060808201516121d5608085018261221f565b5060a08201516121e860a085018261221f565b5060c08201516121fb60c085018261221f565b5060e082015161220e60e085018261221f565b506101008201516119b06101008501825b611e1b8161249d565b60006116a88284611e83565b60208101610d938284611e21565b604081016122508285611e12565b6116a8602083018461221f565b6060810161226b8286611e21565b6122786020830185611e21565b611caa604083018461221f565b604081016122508285611e21565b602080825281016116a88184611e2a565b60208101610d938284611eb2565b61012081016122c1828c611eb2565b6122ce602083018b61221f565b6122db604083018a61221f565b6122e8606083018961221f565b6122f5608083018861221f565b61230260a083018761221f565b61230f60c083018661221f565b61231c60e083018561221f565b61232a61010083018461221f565b9a9950505050505050505050565b602080825281016116a88184611ebb565b60208082528101610d9381611ef3565b60208082528101610d9381611f3b565b60208082528101610d9381611f74565b60208082528101610d9381611fad565b60208082528101610d9381611fe6565b60208082528101610d938161200f565b60208082528101610d9381612048565b60208082528101610d938161208b565b60208082528101610d93816120c4565b60208082528101610d9381612110565b60208082528101610d9381612149565b60208101610d93828461221f565b60e08101612415828a61221f565b612422602083018961221f565b61242f604083018861221f565b61243c606083018761221f565b612449608083018661221f565b61245660a083018561221f565b610f3a60c083018461221f565b60200190565b5190565b90815260200190565b6000610d9382612491565b151590565b6000610d9382612476565b6001600160a01b031690565b90565b6000610d9382612486565b60005b838110156124c65781810151838201526020016124ae565b838111156119b05750506000910152565b601f01601f191690565b6124ea81612476565b81146124f557600080fd5b50565b6124ea81612481565b6124ea81612486565b6124ea8161249d56fea365627a7a723158203e8da2d58b9cb515e65e89920142baa146b9f8952ddedc12d7e50ec2484238946c6578706572696d656e74616cf564736f6c63430005110040
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005a23b7e3bb936c7753b5e7a6c304a8fb43979d200000000000000000000000006767d3789ff7c678612e771b7b78db7fa04a063c000000000000000000000000000000000000000000000000000000000000016d0000000000000000000000000000000000000000000000000000000060771180
-----Decoded View---------------
Arg [0] : _Gratoken (address): 0x5a23b7E3bb936C7753B5e7A6C304a8FB43979d20
Arg [1] : _BLWtoken (address): 0x6767D3789FF7c678612E771b7b78dB7Fa04a063C
Arg [2] : _lockperiod (uint256): 365
Arg [3] : _startrelease (uint256): 1618416000
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000005a23b7e3bb936c7753b5e7a6c304a8fb43979d20
Arg [1] : 0000000000000000000000006767d3789ff7c678612e771b7b78db7fa04a063c
Arg [2] : 000000000000000000000000000000000000000000000000000000000000016d
Arg [3] : 0000000000000000000000000000000000000000000000000000000060771180
Deployed Bytecode Sourcemap
16908:11975:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16908:11975:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17561:25;;;:::i;:::-;;;;;;;;;;;;;;;;18712:844;;;;;;;;;:::i;:::-;;17593:27;;;:::i;17688:26::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23659:1199;;;;;;;;;:::i;20177:922::-;;;;;;;;;:::i;24866:602::-;;;;;;;;;:::i;19989:180::-;;;:::i;16364:141::-;;;:::i;17627:22::-;;;:::i;:::-;;;;;;;;15722:79;;;:::i;:::-;;;;;;;;17656:22;;;:::i;26986:1284::-;;;;;;;;;:::i;17723:63::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;18291:170;;;;;;;;;:::i;21109:717::-;;;;;;;;;:::i;18592:91::-;;;:::i;:::-;;;;;;;;22569:1060;;;;;;;;;:::i;25476:1502::-;;;;;;;;;:::i;16660:237::-;;;;;;;;;:::i;21832:717::-;;;;;;;;;:::i;17561:25::-;;;;:::o;18712:844::-;15944:12;:10;:12::i;:::-;15934:6;;-1:-1:-1;;;;;15934:6:0;;;:22;;;15926:67;;;;-1:-1:-1;;;15926:67:0;;;;;;;;;;;;;;;;;18879:6;18874:146;18895:8;:15;18891:19;;18874:146;;;18978:6;-1:-1:-1;;;;;18940:45:0;18948:8;18957:1;18948:11;;;;;;;;;;;;;;;;;;;;;:17;-1:-1:-1;;;;;18948:17:0;18940:45;;18932:76;;;;-1:-1:-1;;;18932:76:0;;;;;;;;;18912:3;;18874:146;;;;19034:11;19030:61;;;19062:17;:15;:17::i;:::-;19101:23;19142:11;19127:12;:26;:55;;19171:11;19127:55;;;19156:12;19127:55;19207:340;;;;;;;;-1:-1:-1;;;;;19207:340:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19207:340:0;;;;;;;;;;;;;;;;;;19193:8;27:10:-1;;39:1;23:18;;45:23;;19193:355:0;;;;;;;;;;;;;;-1:-1:-1;;;;;;19193:355:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19193:355:0;;;;;;;;;;;;;;;;;;;;;;;18712:844::o;17593:27::-;;;;:::o;17688:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17688:26:0;;;;-1:-1:-1;17688:26:0;;;;;;;;;;;:::o;23659:1199::-;18529:8;:15;23728:4;;18522:22;;18514:48;;;;-1:-1:-1;;;18514:48:0;;;;;;;;;23744:21;23768:8;23777:4;23768:14;;;;;;;;;;;;;;;;23817:11;;;:5;:11;;;;;;23829:10;23817:23;;;;;;;23875:13;23768:14;;;;;;;23875:13;;;;23768:14;;-1:-1:-1;23859:12:0;:29;;23851:67;;;;-1:-1:-1;;;23851:67:0;;;;;;;;;23952:7;23937:4;:11;;;:22;;23929:65;;;;-1:-1:-1;;;23929:65:0;;;;;;;;;24005:16;24016:4;24005:10;:16::i;:::-;24032:18;24053:70;24104:4;:18;;;24053:46;24094:4;24053:36;24069:4;:19;;;24053:4;:11;;;:15;;:36;;;;:::i;:::-;:40;:46;:40;:46;:::i;:::-;:50;:70;:50;:70;:::i;:::-;24032:91;;24134:18;24155:70;24206:4;:18;;;24155:46;24196:4;24155:36;24171:4;:19;;;24155:4;:11;;;:15;;:36;;;;:::i;:70::-;24134:91;;24253:1;24240:10;:14;:32;;;;24271:1;24258:10;:14;24240:32;24236:250;;;24311:19;;:35;;24335:10;24311:35;:23;:35;:::i;:::-;24289:57;;24379:15;;;;:31;;24399:10;24379:31;:19;:31;:::i;:::-;24361:15;;;:49;24443:15;;;;:31;;24463:10;24443:31;:19;:31;:::i;:::-;24425:15;;;:49;24236:250;24510:11;;;;:24;;24526:7;24510:24;:15;:24;:::i;:::-;24496:11;;;:38;;;24582:19;;;;24566:46;;24607:4;;24566:36;;24496:38;24566:36;:15;:36;:::i;:46::-;24545:18;;;:67;24660:19;;;;24644:11;;;;:46;;24685:4;;24644:36;;;:15;:36;:::i;:46::-;24623:18;;;:67;24701:10;;:44;;-1:-1:-1;;;;;24701:10:0;24725;24737:7;24701:44;:23;:44;:::i;:::-;24774:15;;;;:28;;24794:7;24774:28;:19;:28;:::i;:::-;24756:15;;;:46;24818:28;;24827:10;;24818:28;;;;24838:7;;24818:28;;;;;;;;;;18573:1;;;;23659:1199;;;:::o;20177:922::-;18529:8;:15;20231:4;;18522:22;;18514:48;;;;-1:-1:-1;;;18514:48:0;;;;;;;;;20258:21;20282:8;20291:4;20282:14;;;;;;;;;;;;;;;;;;20258:38;;20327:4;:20;;;20311:12;:36;;:76;;;;20374:4;:13;;;20351:4;:20;;;:36;20311:76;20307:116;;;20405:7;;;20307:116;20456:15;;;;20486;20482:152;;20557:4;:13;;;20541:12;:29;;:60;;20588:4;:13;;;20541:60;;;20573:12;20541:60;20518:4;:20;;:83;;;;20616:7;;;;20482:152;20646:18;20667:19;20681:4;20667:13;:19::i;:::-;20646:40;;20697:17;20717:32;20732:4;:16;;;20717:10;:14;;:32;;;;:::i;:::-;20697:52;;20760:17;20780:32;20795:4;:16;;;20780:10;:14;;:32;;;;:::i;:::-;20760:52;-1:-1:-1;20845:60:0;20869:35;20893:10;20869:19;:9;20883:4;20869:19;:13;:19;:::i;:35::-;20845:19;;;;;:60;:23;:60;:::i;:::-;20823:19;;;:82;20938:60;20962:35;20986:10;20962:19;:9;20976:4;20962:19;:13;:19;:::i;:35::-;20938:19;;;;;:60;:23;:60;:::i;:::-;20916:19;;;:82;21047:13;;;;21032:12;:28;:59;;21078:4;:13;;;21032:59;;;21063:12;21032:59;21009:4;:20;;:82;;;;18573:1;;;;;;20177:922;;:::o;24866:602::-;18529:8;:15;24933:4;;18522:22;;18514:48;;;;-1:-1:-1;;;18514:48:0;;;;;;;;;24950:21;24974:8;24983:4;24974:14;;;;;;;;;;;;;;;;25023:11;;;:5;:11;;;;;;25035:10;25023:23;;;;;;;24974:14;;;;;;;;-1:-1:-1;25057:16:0;25029:4;25057:10;:16::i;:::-;25084:18;25105:91;25125:70;25176:4;:18;;;25125:46;25166:4;25125:36;25141:4;:19;;;25125:4;:11;;;:15;;:36;;;;:::i;:70::-;25105:15;;;;;:91;:19;:91;:::i;:::-;25084:112;-1:-1:-1;25211:14:0;;25207:86;;25242:39;25258:10;25270;25242:15;:39::i;:::-;25321:1;25303:15;;;:19;25370;;;;25354:11;;;;:46;;25395:4;;25354:36;;;:15;:36;:::i;:46::-;25333:18;;;:67;25416:44;;;;;;25437:10;;25449;;25416:44;;;;;;;;;;18573:1;;;24866:602;;:::o;19989:180::-;20051:8;:15;20034:14;20077:85;20105:6;20099:3;:12;20077:85;;;20135:15;20146:3;20135:10;:15::i;:::-;20113:5;;20077:85;;16364:141;15944:12;:10;:12::i;:::-;15934:6;;-1:-1:-1;;;;;15934:6:0;;;:22;;;15926:67;;;;-1:-1:-1;;;15926:67:0;;;;;;;;;16464:1;16448:6;;16427:40;;-1:-1:-1;;;;;16448:6:0;;;;16427:40;;16464:1;;16427:40;16495:1;16478:19;;-1:-1:-1;;;;;;16478:19:0;;;16364:141::o;17627:22::-;;;-1:-1:-1;;;;;17627:22:0;;:::o;15722:79::-;15760:7;15787:6;-1:-1:-1;;;;;15787:6:0;15722:79;:::o;17656:22::-;;;-1:-1:-1;;;;;17656:22:0;;:::o;26986:1284::-;27062:7;27081:21;27105:8;27114:4;27105:14;;;;;;;;;;;;;;;;27154:11;;;:5;:11;;;;;;;-1:-1:-1;;;;;27154:18:0;;;;;;;;;;;27105:14;;;;;;;27208:19;;;;27261:15;;;;27306:20;;;;27105:14;;-1:-1:-1;27154:18:0;;27208:19;;27261:15;27291:12;:35;:53;;;;;27343:1;27330:10;:14;27291:53;27287:280;;;27361:18;27382:19;27396:4;27382:13;:19::i;:::-;27361:40;;27416:17;27436:32;27451:4;:16;;;27436:10;:14;;:32;;;;:::i;:::-;27416:52;-1:-1:-1;27500:55:0;27519:35;27543:10;27519:19;27416:52;27533:4;27519:19;:13;:19;:::i;:35::-;27500:14;;:55;:18;:55;:::i;:::-;27483:72;;27287:280;;;27600:12;;27581:15;:31;27577:71;;27635:1;27628:8;;;;;;;;27577:71;27660:22;27685:90;27709:65;27755:4;:18;;;27709:41;27745:4;27709:31;27725:14;27709:4;:11;;;:15;;:31;;;;:::i;:65::-;27685:19;;;:90;:23;:90;:::i;:::-;27660:115;;27788:12;27803:44;27841:5;27803:33;27823:12;;27803:15;:19;;:33;;;;:::i;:44::-;27788:59;;27860:14;27877:40;27906:10;;27877:24;27896:4;27877:14;:18;;:24;;;;:::i;:40::-;27860:57;;27952:14;27934:4;:13;;;:32;:55;;;-1:-1:-1;27970:19:0;;27934:55;:82;;;;28003:4;:13;;;27993:6;:23;;27934:82;27930:123;;;28040:1;28033:8;;;;;;;;;;;27930:123;28084:10;;28077:4;:17;28073:190;;;28129:13;;;;28118:25;;:6;;:25;:10;:25;:::i;:::-;28111:32;;;;;;;;;;;28073:190;28198:4;:13;;;28181:14;:30;:70;;28250:1;28181:70;;;28233:13;;;;28214:33;;:14;;:33;:18;:33;:::i;26986:1284::-;;;;;:::o;17723:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18291:170::-;15944:12;:10;:12::i;:::-;15934:6;;-1:-1:-1;;;;;15934:6:0;;;:22;;;15926:67;;;;-1:-1:-1;;;15926:67:0;;;;;;;;;18380:10;:24;;;;18415:12;:28;18291:170::o;21109:717::-;18529:8;:15;21198:7;;21183:4;;18522:22;;18514:48;;;;-1:-1:-1;;;18514:48:0;;;;;;;;;21219:21;21243:8;21252:4;21243:14;;;;;;;;;;;;;;;;21292:11;;;:5;:11;;;;;;;-1:-1:-1;;;;;21292:18:0;;;;;;;;;;;21243:14;;;;;;;21346:19;;;;21399:15;;;;21444:20;;;;21243:14;;-1:-1:-1;21292:18:0;;21346:19;;21399:15;21429:12;:35;:53;;;;;21481:1;21468:10;:14;21429:53;21425:290;;;21499:18;21520:19;21534:4;21520:13;:19::i;:::-;21499:40;;21554:17;21574:32;21589:4;:16;;;21574:10;:14;;:32;;;;:::i;:::-;21554:52;-1:-1:-1;21638:55:0;21657:35;21681:10;21657:19;21554:52;21671:4;21657:19;:13;:19;:::i;21638:55::-;21621:72;;21425:290;;;21732:86;21799:4;:18;;;21732:62;21752:41;21788:4;21752:31;21768:14;21752:4;:11;;;:15;;:31;;;;:::i;:41::-;21732:15;;;;;:62;:19;:62;:::i;:86::-;21725:93;21109:717;-1:-1:-1;;;;;;;;21109:717:0:o;18592:91::-;18631:17;18667:8;18660:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18660:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18592:91;:::o;22569:1060::-;18529:8;:15;22637:4;;18522:22;;18514:48;;;;-1:-1:-1;;;18514:48:0;;;;;;;;;22653:21;22677:8;22686:4;22677:14;;;;;;;;;;;;;;;;22726:11;;;:5;:11;;;;;;22738:10;22726:23;;;;;;;22677:14;;;;;;;;-1:-1:-1;22760:16:0;22732:4;22760:10;:16::i;:::-;22791:11;;;;:15;22787:446;;22824:18;22845:70;22896:4;:18;;;22845:46;22886:4;22845:36;22861:4;:19;;;22845:4;:11;;;:15;;:36;;;;:::i;:70::-;22824:91;;22930:18;22951:70;23002:4;:18;;;22951:46;22992:4;22951:36;22967:4;:19;;;22951:4;:11;;;:15;;:36;;;;:::i;:70::-;23054:15;;;;22930:91;;-1:-1:-1;23054:31:0;;23074:10;23054:31;:19;:31;:::i;:::-;23036:15;;;:49;23122:19;;:35;;23146:10;23122:35;:23;:35;:::i;:::-;23100:57;;23190:15;;;;:31;;23210:10;23190:31;:19;:31;:::i;:::-;23172:15;;;:49;-1:-1:-1;;22787:446:0;23243:10;;:72;;-1:-1:-1;;;;;23243:10:0;23279;23300:4;23307:7;23243:72;:27;:72;:::i;:::-;23344:15;;;;:28;;23364:7;23344:28;:19;:28;:::i;:::-;23326:15;;;:46;23397:11;;;;:24;;23413:7;23397:24;:15;:24;:::i;:::-;23383:11;;;:38;;;23469:19;;;;23453:46;;23494:4;;23453:36;;23383:38;23453:36;:15;:36;:::i;:46::-;23432:18;;;:67;23547:19;;;;23531:11;;;;:46;;23572:4;;23531:36;;;:15;:36;:::i;:46::-;23510:18;;;:67;23593:28;;23601:10;;23593:28;;;;23613:7;;23593:28;;;;;;;;;;18573:1;;22569:1060;;;:::o;25476:1502::-;18529:8;:15;25543:4;;18522:22;;18514:48;;;;-1:-1:-1;;;18514:48:0;;;;;;;;;25559:21;25583:8;25592:4;25583:14;;;;;;;;;;;;;;;;25632:11;;;:5;:11;;;;;;25644:10;25632:23;;;;;;;25583:14;;;;;;;;-1:-1:-1;25666:16:0;25638:4;25666:10;:16::i;:::-;25693:18;25714:70;25765:4;:18;;;25714:46;25755:4;25714:36;25730:4;:19;;;25714:4;:11;;;:15;;:36;;;;:::i;:70::-;25693:91;-1:-1:-1;25799:14:0;;25795:171;;25848:15;;;;:31;;25868:10;25848:31;:19;:31;:::i;:::-;25830:15;;;:49;25916:19;;:35;;25940:10;25916:35;:23;:35;:::i;:::-;25894:57;;25795:171;25976:12;25991:44;26029:5;25991:33;26011:12;;25991:15;:19;;:33;;;;:::i;:44::-;25976:59;;26057:10;;26050:4;:17;26046:827;;;26136:13;;;;;26122:10;;26088:19;;:45;;26122:10;26088:29;;26112:4;26088:29;:23;:29;:::i;:45::-;:61;26084:424;;;26169:14;26186:64;26236:4;:13;;;26186:45;26220:10;;26186:29;26210:4;26186;:19;;;:23;;:29;;;;:::i;:64::-;26169:81;;26269:35;26285:10;26297:6;26269:15;:35::i;:::-;26339:13;;;;:25;;26357:6;26339:25;:17;:25;:::i;:::-;26323:13;;;:41;26401:15;;;;:27;;26421:6;26401:27;:19;:27;:::i;:::-;26383:15;;;:45;26452:40;;;;;;26473:10;;26485:6;;26452:40;;;;;;;;;;26084:424;;26046:827;;;26538:14;26577:4;:13;;;26555:4;:19;;;:35;:80;;26634:1;26555:80;;;26617:13;;;;26593:19;;:38;;;:23;:38;:::i;:::-;26538:97;;26650:35;26666:10;26678:6;26650:15;:35::i;:::-;26716:13;;;;:25;;26734:6;26716:25;:17;:25;:::i;:::-;26700:13;;;:41;26774:15;;;;:27;;26794:6;26774:27;:19;:27;:::i;:::-;26756:15;;;:45;26821:40;;;;;;26842:10;;26854:6;;26821:40;;;;;;;;;;26046:827;;26914:46;26955:4;26914:36;26930:4;:19;;;26914:4;:11;;;:15;;:36;;;;:::i;:46::-;26893:4;:18;;:67;;;;18573:1;;;;25476:1502;;:::o;16660:237::-;15944:12;:10;:12::i;:::-;15934:6;;-1:-1:-1;;;;;15934:6:0;;;:22;;;15926:67;;;;-1:-1:-1;;;15926:67:0;;;;;;;;;-1:-1:-1;;;;;16742:22:0;;16734:73;;;;-1:-1:-1;;;16734:73:0;;;;;;;;;16844:6;;;16823:38;;-1:-1:-1;;;;;16823:38:0;;;;16844:6;;;16823:38;;;16872:6;:17;;-1:-1:-1;;;;;;16872:17:0;-1:-1:-1;;;;;16872:17:0;;;;;;;;;;16660:237::o;21832:717::-;18529:8;:15;21921:7;;21906:4;;18522:22;;18514:48;;;;-1:-1:-1;;;18514:48:0;;;;;;;;;21942:21;21966:8;21975:4;21966:14;;;;;;;;;;;;;;;;22015:11;;;:5;:11;;;;;;-1:-1:-1;;;;;22015:18:0;;;;;;;;;22069:19;21966:14;;;;;;;22069:19;;;;22122:15;;;;22167:20;;;;21966:14;;-1:-1:-1;22069:19:0;;22152:12;:35;:53;;;;;22204:1;22191:10;:14;22152:53;22148:290;;;22222:18;22243:19;22257:4;22243:13;:19::i;:::-;22222:40;;22277:17;22297:32;22312:4;:16;;;22297:10;:14;;:32;;;;:::i;:::-;22277:52;-1:-1:-1;22361:55:0;22380:35;22404:10;22380:19;22277:52;22394:4;22380:19;:13;:19;:::i;22361:55::-;22344:72;;22148:290;;;22455:86;22522:4;:18;;;22455:62;22475:41;22511:4;22475:31;22491:14;22475:4;:11;;;:15;;:31;;;;:::i;5386:99::-;5467:10;5386:99;:::o;2258:471::-;2316:7;2561:6;2557:47;;-1:-1:-1;2591:1:0;2584:8;;2557:47;2628:5;;;2632:1;2628;:5;:1;2652:5;;;;;:10;2644:56;;;;-1:-1:-1;;;2644:56:0;;;;;;;;;2720:1;2258:471;-1:-1:-1;;;2258:471:0:o;3205:132::-;3263:7;3290:39;3294:1;3297;3290:39;;;;;;;;;;;;;;;;;:3;:39::i;1368:136::-;1426:7;1453:43;1457:1;1460;1453:43;;;;;;;;;;;;;;;;;:3;:43::i;904:181::-;962:7;994:5;;;1018:6;;;;1010:46;;;;-1:-1:-1;;;1010:46:0;;;;;;;;12063:176;12172:58;;12146:85;;12165:5;;-1:-1:-1;;;12195:23:0;12172:58;;12220:2;;12224:5;;12172:58;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;12172:58:0;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;;12172:58:0;;;179:29:-1;;;;160:49;;;12146:18:0;:85::i;:::-;12063:176;;;:::o;19572:409::-;19641:7;19681:4;:20;;;19665:12;:36;19661:77;;-1:-1:-1;19725:1:0;19718:8;;19661:77;19763:20;;;;19822:13;;;;19748:12;;19807;:28;:59;;19853:4;:13;;;19807:59;;;19838:12;19807:59;19794:72;;19889:2;19881:4;:10;19877:51;;19915:1;19908:8;;;;;;19877:51;19945:12;:2;19952:4;19945:12;:6;:12;:::i;:::-;19938:19;;;;19572:409;;;;:::o;28582:298::-;28678:8;;;:33;;-1:-1:-1;;;28678:33:0;;28657:18;;-1:-1:-1;;;;;28678:8:0;;;;:18;;:33;;28705:4;;28678:33;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28678:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28678:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;28678:33:0;;;;;;;;;28657:54;;28736:10;28726:7;:20;28722:151;;;28763:8;;;:34;;-1:-1:-1;;;28763:34:0;;-1:-1:-1;;;;;28763:8:0;;;;:17;;:34;;28781:3;;28786:10;;28763:34;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28763:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28763:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;28763:34:0;;;;;;;;;;28722:151;;;28830:8;;;:31;;-1:-1:-1;;;28830:31:0;;-1:-1:-1;;;;;28830:8:0;;;;:17;;:31;;28848:3;;28853:7;;28830:31;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28830:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28830:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;28830:31:0;;;;;;;;;;28582:298;;;:::o;12247:204::-;12374:68;;12348:95;;12367:5;;-1:-1:-1;;;12397:27:0;12374:68;;12426:4;;12432:2;;12436:5;;12374:68;;;;28278:298;28374:8;;:33;;-1:-1:-1;;;28374:33:0;;28353:18;;-1:-1:-1;;;;;28374:8:0;;:18;;:33;;28401:4;;28374:33;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28374:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28374:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;28374:33:0;;;;;;;;;28353:54;;28432:10;28422:7;:20;28418:151;;;28459:8;;:34;;-1:-1:-1;;;28459:34:0;;-1:-1:-1;;;;;28459:8:0;;;;:17;;:34;;28477:3;;28482:10;;28459:34;;;;28418:151;28526:8;;:31;;-1:-1:-1;;;28526:31:0;;-1:-1:-1;;;;;28526:8:0;;;;:17;;:31;;28544:3;;28549:7;;28526:31;;;;3833:278;3919:7;3954:12;3947:5;3939:28;;;;-1:-1:-1;;;3939:28:0;;;;;;;;;;;3978:9;3994:1;3990;:5;;;;;;;3833:278;-1:-1:-1;;;;;3833:278:0:o;1807:192::-;1893:7;1929:12;1921:6;;;;1913:29;;;;-1:-1:-1;;;1913:29:0;;;;;;;;;;-1:-1:-1;;;1965:5:0;;;1807:192::o;14102:1114::-;14706:27;14714:5;-1:-1:-1;;;;;14706:25:0;;:27::i;:::-;14698:71;;;;-1:-1:-1;;;14698:71:0;;;;;;;;;14843:12;14857:23;14892:5;-1:-1:-1;;;;;14884:19:0;14904:4;14884:25;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;14842:67:0;;;;14928:7;14920:52;;;;-1:-1:-1;;;14920:52:0;;;;;;;;;14989:17;;:21;14985:224;;15131:10;15120:30;;;;;;;;;;;;;;15112:85;;;;-1:-1:-1;;;15112:85:0;;;;;;;;6408:619;6468:4;6936:20;;6779:66;6976:23;;;;;;:42;;-1:-1:-1;;7003:15:0;;;6408:619;-1:-1:-1;;6408:619:0:o;5:130:-1:-;72:20;;97:33;72:20;97:33;;142:124;206:20;;231:30;206:20;231:30;;273:128;348:13;;366:30;348:13;366:30;;408:158;489:20;;514:47;489:20;514:47;;573:130;640:20;;665:33;640:20;665:33;;710:134;788:13;;806:33;788:13;806:33;;851:241;;955:2;943:9;934:7;930:23;926:32;923:2;;;971:1;968;961:12;923:2;1006:1;1023:53;1068:7;1048:9;1023:53;;;1013:63;917:175;-1:-1;;;;917:175;1099:257;;1211:2;1199:9;1190:7;1186:23;1182:32;1179:2;;;1227:1;1224;1217:12;1179:2;1262:1;1279:61;1332:7;1312:9;1279:61;;1363:891;;;;;;;1563:3;1551:9;1542:7;1538:23;1534:33;1531:2;;;1580:1;1577;1570:12;1531:2;1615:1;1632:67;1691:7;1671:9;1632:67;;;1622:77;;1594:111;1736:2;1754:53;1799:7;1790:6;1779:9;1775:22;1754:53;;;1744:63;;1715:98;1844:2;1862:53;1907:7;1898:6;1887:9;1883:22;1862:53;;;1852:63;;1823:98;1952:2;1970:53;2015:7;2006:6;1995:9;1991:22;1970:53;;;1960:63;;1931:98;2060:3;2079:53;2124:7;2115:6;2104:9;2100:22;2079:53;;;2069:63;;2039:99;2169:3;2188:50;2230:7;2221:6;2210:9;2206:22;2188:50;;;2178:60;;2148:96;1525:729;;;;;;;;;2261:241;;2365:2;2353:9;2344:7;2340:23;2336:32;2333:2;;;2381:1;2378;2371:12;2333:2;2416:1;2433:53;2478:7;2458:9;2433:53;;2509:263;;2624:2;2612:9;2603:7;2599:23;2595:32;2592:2;;;2640:1;2637;2630:12;2592:2;2675:1;2692:64;2748:7;2728:9;2692:64;;2779:366;;;2900:2;2888:9;2879:7;2875:23;2871:32;2868:2;;;2916:1;2913;2906:12;2868:2;2951:1;2968:53;3013:7;2993:9;2968:53;;;2958:63;;2930:97;3058:2;3076:53;3121:7;3112:6;3101:9;3097:22;3076:53;;;3066:63;;3037:98;2862:283;;;;;;3152:366;;;3273:2;3261:9;3252:7;3248:23;3244:32;3241:2;;;3289:1;3286;3279:12;3241:2;3324:1;3341:53;3386:7;3366:9;3341:53;;;3331:63;;3303:97;3431:2;3449:53;3494:7;3485:6;3474:9;3470:22;3449:53;;3526:263;;3655:92;3743:3;3735:6;3655:92;;;-1:-1;;3776:6;3767:16;;3648:141;3797:142;3888:45;3927:5;3888:45;;;3883:3;3876:58;3870:69;;;3946:113;4029:24;4047:5;4029:24;;4141:858;;4328:75;4397:5;4328:75;;;4416:107;4516:6;4511:3;4416:107;;;4409:114;;4544:77;4615:5;4544:77;;;4641:7;4669:1;4654:323;4679:6;4676:1;4673:13;4654:323;;;4746:6;4740:13;4767:105;4868:3;4853:13;4767:105;;;4760:112;;4889:81;4963:6;4889:81;;;4879:91;-1:-1;;4701:1;4694:9;4654:323;;;-1:-1;4990:3;;4307:692;-1:-1;;;;;4307:692;5007:356;;5135:38;5167:5;5135:38;;;5185:88;5266:6;5261:3;5185:88;;;5178:95;;5278:52;5323:6;5318:3;5311:4;5304:5;5300:16;5278:52;;;5342:16;;;;;5115:248;-1:-1;;5115:248;5370:144;5457:51;5502:5;5457:51;;5682:347;;5794:39;5827:5;5794:39;;;5845:71;5909:6;5904:3;5845:71;;;5838:78;;5921:52;5966:6;5961:3;5954:4;5947:5;5943:16;5921:52;;;5994:29;6016:6;5994:29;;;5985:39;;;;5774:255;-1:-1;;;5774:255;6037:375;;6197:67;6261:2;6256:3;6197:67;;;6297:34;6277:55;;-1:-1;;;6361:2;6352:12;;6345:30;6403:2;6394:12;;6183:229;-1:-1;;6183:229;6421:327;;6581:67;6645:2;6640:3;6581:67;;;6681:29;6661:50;;6739:2;6730:12;;6567:181;-1:-1;;6567:181;6757:332;;6917:67;6981:2;6976:3;6917:67;;;7017:34;6997:55;;7080:2;7071:12;;6903:186;-1:-1;;6903:186;7098:325;;7258:67;7322:2;7317:3;7258:67;;;7358:27;7338:48;;7414:2;7405:12;;7244:179;-1:-1;;7244:179;7432:313;;7592:67;7656:2;7651:3;7592:67;;;-1:-1;;;7672:36;;7736:2;7727:12;;7578:167;-1:-1;;7578:167;7754:330;;7914:67;7978:2;7973:3;7914:67;;;8014:32;7994:53;;8075:2;8066:12;;7900:184;-1:-1;;7900:184;8093:370;;8253:67;8317:2;8312:3;8253:67;;;8353:34;8333:55;;-1:-1;;;8417:2;8408:12;;8401:25;8454:2;8445:12;;8239:224;-1:-1;;8239:224;8472:332;;8632:67;8696:2;8691:3;8632:67;;;8732:34;8712:55;;8795:2;8786:12;;8618:186;-1:-1;;8618:186;8813:379;;8973:67;9037:2;9032:3;8973:67;;;9073:34;9053:55;;-1:-1;;;9137:2;9128:12;;9121:34;9183:2;9174:12;;8959:233;-1:-1;;8959:233;9201:331;;9361:67;9425:2;9420:3;9361:67;;;9461:33;9441:54;;9523:2;9514:12;;9347:185;-1:-1;;9347:185;9541:318;;9701:67;9765:2;9760:3;9701:67;;;-1:-1;;;9781:41;;9850:2;9841:12;;9687:172;-1:-1;;9687:172;9936:1622;10134:23;;10065:6;10056:16;;;10163:77;10060:3;10134:23;10163:77;;;10087:159;10325:4;10318:5;10314:16;10308:23;10337:63;10394:4;10389:3;10385:14;10371:12;10337:63;;;10256:150;10483:4;10476:5;10472:16;10466:23;10495:63;10552:4;10547:3;10543:14;10529:12;10495:63;;;10416:148;10644:4;10637:5;10633:16;10627:23;10656:63;10713:4;10708:3;10704:14;10690:12;10656:63;;;10574:151;10805:4;10798:5;10794:16;10788:23;10817:63;10874:4;10869:3;10865:14;10851:12;10817:63;;;10735:151;10970:4;10963:5;10959:16;10953:23;10982:63;11039:4;11034:3;11030:14;11016:12;10982:63;;;10896:155;11134:4;11127:5;11123:16;11117:23;11146:63;11203:4;11198:3;11194:14;11180:12;11146:63;;;11061:154;11298:4;11291:5;11287:16;11281:23;11310:63;11367:4;11362:3;11358:14;11344:12;11310:63;;;11225:154;11458:6;11451:5;11447:18;11441:25;11472:65;11529:6;11524:3;11520:16;11506:12;11565:103;11638:24;11656:5;11638:24;;11795:262;;11939:93;12028:3;12019:6;11939:93;;12064:213;12182:2;12167:18;;12196:71;12171:9;12240:6;12196:71;;12284:340;12438:2;12423:18;;12452:79;12427:9;12504:6;12452:79;;;12542:72;12610:2;12599:9;12595:18;12586:6;12542:72;;12631:435;12805:2;12790:18;;12819:71;12794:9;12863:6;12819:71;;;12901:72;12969:2;12958:9;12954:18;12945:6;12901:72;;;12984;13052:2;13041:9;13037:18;13028:6;12984:72;;13073:324;13219:2;13204:18;;13233:71;13208:9;13277:6;13233:71;;13404:445;13614:2;13628:47;;;13599:18;;13689:150;13599:18;13825:6;13689:150;;13856:241;13988:2;13973:18;;14002:85;13977:9;14060:6;14002:85;;14104:1135;14460:3;14445:19;;14475:85;14449:9;14533:6;14475:85;;;14571:72;14639:2;14628:9;14624:18;14615:6;14571:72;;;14654;14722:2;14711:9;14707:18;14698:6;14654:72;;;14737;14805:2;14794:9;14790:18;14781:6;14737:72;;;14820:73;14888:3;14877:9;14873:19;14864:6;14820:73;;;14904;14972:3;14961:9;14957:19;14948:6;14904:73;;;14988;15056:3;15045:9;15041:19;15032:6;14988:73;;;15072;15140:3;15129:9;15125:19;15116:6;15072:73;;;15156;15224:3;15213:9;15209:19;15200:6;15156:73;;;14431:808;;;;;;;;;;;;;15246:301;15384:2;15398:47;;;15369:18;;15459:78;15369:18;15523:6;15459:78;;15554:407;15745:2;15759:47;;;15730:18;;15820:131;15730:18;15820:131;;15968:407;16159:2;16173:47;;;16144:18;;16234:131;16144:18;16234:131;;16382:407;16573:2;16587:47;;;16558:18;;16648:131;16558:18;16648:131;;16796:407;16987:2;17001:47;;;16972:18;;17062:131;16972:18;17062:131;;17210:407;17401:2;17415:47;;;17386:18;;17476:131;17386:18;17476:131;;17624:407;17815:2;17829:47;;;17800:18;;17890:131;17800:18;17890:131;;18038:407;18229:2;18243:47;;;18214:18;;18304:131;18214:18;18304:131;;18452:407;18643:2;18657:47;;;18628:18;;18718:131;18628:18;18718:131;;18866:407;19057:2;19071:47;;;19042:18;;19132:131;19042:18;19132:131;;19280:407;19471:2;19485:47;;;19456:18;;19546:131;19456:18;19546:131;;19694:407;19885:2;19899:47;;;19870:18;;19960:131;19870:18;19960:131;;20108:213;20226:2;20211:18;;20240:71;20215:9;20284:6;20240:71;;20328:883;20614:3;20599:19;;20629:71;20603:9;20673:6;20629:71;;;20711:72;20779:2;20768:9;20764:18;20755:6;20711:72;;;20794;20862:2;20851:9;20847:18;20838:6;20794:72;;;20877;20945:2;20934:9;20930:18;20921:6;20877:72;;;20960:73;21028:3;21017:9;21013:19;21004:6;20960:73;;;21044;21112:3;21101:9;21097:19;21088:6;21044:73;;;21128;21196:3;21185:9;21181:19;21172:6;21128:73;;21218:172;21363:4;21354:14;;21311:79;21397:158;21521:12;;21492:63;21956:199;22095:19;;;22144:4;22135:14;;22088:67;22488:91;;22550:24;22568:5;22550:24;;22586:85;22652:13;22645:21;;22628:43;22678:105;;22754:24;22772:5;22754:24;;22790:121;-1:-1;;;;;22852:54;;22835:76;22918:72;22980:5;22963:27;22997:129;;23084:37;23115:5;23084:37;;23662:268;23727:1;23734:101;23748:6;23745:1;23742:13;23734:101;;;23815:11;;;23809:18;23796:11;;;23789:39;23770:2;23763:10;23734:101;;;23850:6;23847:1;23844:13;23841:2;;;-1:-1;;23915:1;23897:16;;23890:27;23711:219;23938:97;24026:2;24006:14;-1:-1;;24002:28;;23986:49;24043:117;24112:24;24130:5;24112:24;;;24105:5;24102:35;24092:2;;24151:1;24148;24141:12;24092:2;24086:74;;24167:111;24233:21;24248:5;24233:21;;24285:145;24368:38;24400:5;24368:38;;24437:117;24506:24;24524:5;24506:24;
Swarm Source
bzzr://3e8da2d58b9cb515e65e89920142baa146b9f8952ddedc12d7e50ec248423894
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.