More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 147 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Batch | 16335911 | 745 days ago | IN | 0 ETH | 0.00329017 | ||||
Batch | 16329551 | 746 days ago | IN | 0 ETH | 0.00178678 | ||||
Harvest | 16329452 | 746 days ago | IN | 0 ETH | 0.00167682 | ||||
Batch | 15128671 | 921 days ago | IN | 0 ETH | 0.00356182 | ||||
Batch | 15128660 | 921 days ago | IN | 0 ETH | 0.00587434 | ||||
Batch | 15116696 | 923 days ago | IN | 0 ETH | 0.00947984 | ||||
Batch | 15116696 | 923 days ago | IN | 0 ETH | 0.00998665 | ||||
Batch | 15115027 | 923 days ago | IN | 0 ETH | 0.00141481 | ||||
Harvest | 15115021 | 923 days ago | IN | 0 ETH | 0.00112352 | ||||
Batch | 15088847 | 927 days ago | IN | 0 ETH | 0.00349086 | ||||
Harvest | 15035360 | 936 days ago | IN | 0 ETH | 0.0121141 | ||||
Batch | 15035295 | 936 days ago | IN | 0 ETH | 0.00695852 | ||||
Harvest | 14992845 | 944 days ago | IN | 0 ETH | 0.00580303 | ||||
Batch | 14992818 | 944 days ago | IN | 0 ETH | 0.00582403 | ||||
Batch | 14985935 | 945 days ago | IN | 0 ETH | 0.00353421 | ||||
Batch | 14965049 | 949 days ago | IN | 0 ETH | 0.00318038 | ||||
Batch | 14965040 | 949 days ago | IN | 0 ETH | 0.00389026 | ||||
Harvest | 14965037 | 949 days ago | IN | 0 ETH | 0.00307332 | ||||
Batch | 14965036 | 949 days ago | IN | 0 ETH | 0.00329442 | ||||
Batch | 14867070 | 965 days ago | IN | 0 ETH | 0.00230879 | ||||
Harvest | 14846439 | 969 days ago | IN | 0 ETH | 0.00280549 | ||||
Harvest | 14842633 | 969 days ago | IN | 0 ETH | 0.00514778 | ||||
Batch | 14809599 | 975 days ago | IN | 0 ETH | 0.00178553 | ||||
Batch | 14771795 | 981 days ago | IN | 0 ETH | 0.00268854 | ||||
Batch | 14760335 | 982 days ago | IN | 0 ETH | 0.03329123 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
genericFarmV2
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; pragma experimental ABIEncoderV2; import "@boringcrypto/boring-solidity/contracts/libraries/BoringMath.sol"; import "@boringcrypto/boring-solidity/contracts/BoringBatchable.sol"; import "@boringcrypto/boring-solidity/contracts/BoringOwnable.sol"; import "./lib/SignedSafeMath.sol"; contract genericFarmV2 is BoringOwnable, BoringBatchable { using BoringMath for uint256; using BoringMath128 for uint128; using BoringERC20 for IERC20; using SignedSafeMath for int256; /// @notice Info of each GFV2 user. /// `amount` LP token amount the user has provided. /// `rewardDebt` The amount of rewards tokens entitled to the user. struct UserInfo { uint256 amount; int256 rewardDebt; } /// @notice Info of each GFV2 pool. /// `allocPoint` The amount of allocation points assigned to the pool. /// Also known as the amount of reward tokens to distribute per block. struct PoolInfo { uint128 accRewardTokensPerShare; uint64 lastRewardBlock; uint64 allocPoint; } /// @dev Address of Reward Token contract. IERC20 public immutable REWARD_TOKEN; /// @notice Info of each GFV2 pool. PoolInfo[] public poolInfo; /// @notice Address of the LP token for each GFV2 pool. IERC20[] public lpToken; /// @dev List of all added LP tokens. mapping (address => bool) private addedLPs; /// @notice Info of each user that stakes LP tokens. mapping (uint256 => mapping (address => UserInfo)) public userInfo; /// @notice Total allocation points. Must be the sum of all allocation points in all pools. uint256 public totalAllocPoint; /// @notice rewards tokens created per block. uint256 public rewardTokensPerBlock; /// @dev Extra decimals for pool's accTokensPerShare attribute. Needed in order to accomodate different types of LPs. uint256 private constant ACC_TOKEN_PRECISION = 1e18; /// @dev nonReentrant flag used to secure functions with external calls. bool private nonReentrant; event Deposit(address indexed user, uint256 indexed pid, uint256 amount, address indexed to); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount, address indexed to); event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount, address indexed to); event Harvest(address indexed user, uint256 indexed pid, uint256 amount); event LogPoolAddition(uint256 indexed pid, uint256 allocPoint, IERC20 indexed lpToken); event LogSetPool(uint256 indexed pid, uint256 allocPoint); event LogUpdatePool(uint256 indexed pid, uint64 lastRewardBlock, uint256 lpSupply, uint256 accRewardTokensPerShare); event SetRewardTokensPerBlock(uint256 rewardTokensPerBlock, bool withUpdate); /// @param _rewardToken The reward token contract address. /// @param _rewardTokensPerBlock reward tokens created per block. constructor(IERC20 _rewardToken, uint256 _rewardTokensPerBlock) public { REWARD_TOKEN = _rewardToken; rewardTokensPerBlock = _rewardTokensPerBlock; totalAllocPoint = 0; } /// @notice Update number of reward tokens created per block. Can only be called by the owner. /// @param _rewardTokensPerBlock reward tokens created per block. /// @param _withUpdate true if massUpdatePools should be triggered as well. function setRewardTokensPerBlock(uint256 _rewardTokensPerBlock, bool _withUpdate) external onlyOwner { if (_withUpdate) { massUpdateAllPools(); } rewardTokensPerBlock = _rewardTokensPerBlock; emit SetRewardTokensPerBlock(_rewardTokensPerBlock, _withUpdate); } /// @notice Set the nonReentrant flag. Could be used to pause/resume the farm operations. Can only be called by the owner. /// @param _val nonReentrant flag value to be set. function setNonReentrant(bool _val) external onlyOwner returns (bool) { nonReentrant = _val; return nonReentrant; } /// @notice Returns the number of GFV2 pools. function poolLength() external view returns (uint256 pools) { pools = poolInfo.length; } /// @notice Returns the reward value for a specific pool. function poolReward(uint256 _pid) external view returns (uint256) { if (totalAllocPoint == 0) return 0; return rewardTokensPerBlock.mul(poolInfo[_pid].allocPoint) / totalAllocPoint; } /// @notice Returns the total number of LPs staked in the farm. function getLPSupply(uint256 _pid) external view returns (uint256) { uint256 lpSupply = lpToken[_pid].balanceOf(address(this)); return lpSupply; } /// @notice Add a new LP to the pool. Can only be called by the owner. /// DO NOT add the same LP token more than once. Rewards will be messed up if you do. /// @param allocPoint AP of the new pool. /// @param _lpToken Address of the LP ERC-20 token. function add(uint256 allocPoint, IERC20 _lpToken) external onlyOwner { require(!addedLPs[address(_lpToken)], "genericFarmV2::there is already a pool with this LP"); uint256 lastRewardBlock = block.number; totalAllocPoint = totalAllocPoint.add(allocPoint); lpToken.push(_lpToken); addedLPs[address(_lpToken)] = true; poolInfo.push(PoolInfo({ allocPoint: allocPoint.to64(), lastRewardBlock: lastRewardBlock.to64(), accRewardTokensPerShare: 0 })); emit LogPoolAddition(lpToken.length.sub(1), allocPoint, _lpToken); } /// @notice Update the given pool's reward tokens allocation point. Can only be called by the owner. /// @param _pid The index of the pool. See `poolInfo`. /// @param _allocPoint New AP of the pool. function set(uint256 _pid, uint256 _allocPoint) external onlyOwner { totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); poolInfo[_pid].allocPoint = _allocPoint.to64(); emit LogSetPool(_pid, _allocPoint); } /// @notice View function to see pending rewards on frontend. /// @param _pid The index of the pool. See `poolInfo`. /// @param _user Address of user. /// @return pending reward for a given user. function pendingReward(uint256 _pid, address _user) external view returns (uint256 pending) { PoolInfo memory pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accRewardTokensPerShare = pool.accRewardTokensPerShare; uint256 lpSupply = lpToken[_pid].balanceOf(address(this)); if (block.number > pool.lastRewardBlock && lpSupply > 0 && totalAllocPoint > 0) { uint256 blocks = block.number.sub(pool.lastRewardBlock); accRewardTokensPerShare = accRewardTokensPerShare.add( (blocks.mul(rewardTokensPerBlock).mul(pool.allocPoint).mul(ACC_TOKEN_PRECISION) / totalAllocPoint) / lpSupply); } pending = int256(user.amount.mul(accRewardTokensPerShare) / ACC_TOKEN_PRECISION).sub(user.rewardDebt).toUInt256(); } /// @notice Update reward variables for all pools. Be careful of gas spending! function massUpdateAllPools() public { uint256 len = poolInfo.length; for (uint256 pid = 0; pid < len; ++pid) { updatePool(pid); } } /// @notice Update reward variables for specified pools. Be careful of gas spending! /// @param pids Pool IDs of all to be updated. Make sure to update all active pools. function massUpdatePools(uint256[] calldata pids) external { uint256 len = pids.length; for (uint256 i = 0; i < len; ++i) { updatePool(pids[i]); } } /// @notice Update reward variables of the given pool. /// @param pid The index of the pool. See `poolInfo`. /// @return pool Returns the pool that was updated. function updatePool(uint256 pid) public returns (PoolInfo memory pool) { pool = poolInfo[pid]; if (block.number > pool.lastRewardBlock) { uint256 lpSupply = lpToken[pid].balanceOf(address(this)); if (lpSupply > 0 && totalAllocPoint > 0) { uint256 blocks = block.number.sub(pool.lastRewardBlock); pool.accRewardTokensPerShare = pool.accRewardTokensPerShare.add( ((blocks.mul(rewardTokensPerBlock).mul(pool.allocPoint).mul(ACC_TOKEN_PRECISION) / totalAllocPoint) / lpSupply).to128()); } pool.lastRewardBlock = block.number.to64(); poolInfo[pid] = pool; emit LogUpdatePool(pid, pool.lastRewardBlock, lpSupply, pool.accRewardTokensPerShare); } } /// @notice Deposit LP tokens to GFV2 for rewards allocation. /// @param pid The index of the pool. See `poolInfo`. /// @param amount LP token amount to deposit. /// @param to The receiver of `amount` deposit benefit. function deposit(uint256 pid, uint256 amount, address to) external { require(!nonReentrant, "genericFarmV2::nonReentrant - try again"); nonReentrant = true; PoolInfo memory pool = updatePool(pid); UserInfo storage user = userInfo[pid][to]; // Effects user.amount = user.amount.add(amount); user.rewardDebt = user.rewardDebt.add(int256(amount.mul(pool.accRewardTokensPerShare) / ACC_TOKEN_PRECISION)); // Interactions lpToken[pid].safeTransferFrom(msg.sender, address(this), amount); emit Deposit(msg.sender, pid, amount, to); nonReentrant = false; } /// @notice Withdraw LP tokens from GFV2. /// @param pid The index of the pool. See `poolInfo`. /// @param amount LP token amount to withdraw. /// @param to Receiver of the LP tokens. function withdraw(uint256 pid, uint256 amount, address to) external { require(!nonReentrant, "genericFarmV2::nonReentrant - try again"); nonReentrant = true; PoolInfo memory pool = updatePool(pid); UserInfo storage user = userInfo[pid][msg.sender]; // Effects user.rewardDebt = user.rewardDebt.sub(int256(amount.mul(pool.accRewardTokensPerShare) / ACC_TOKEN_PRECISION)); user.amount = user.amount.sub(amount); // Interactions lpToken[pid].safeTransfer(to, amount); emit Withdraw(msg.sender, pid, amount, to); nonReentrant = false; } /// @notice Harvest proceeds for transaction sender to `to`. /// @param pid The index of the pool. See `poolInfo`. /// @param to Receiver of the rewards. function harvest(uint256 pid, address to) external { require(!nonReentrant, "genericFarmV2::nonReentrant - try again"); nonReentrant = true; PoolInfo memory pool = updatePool(pid); UserInfo storage user = userInfo[pid][msg.sender]; int256 accumulatedRewardTokens = int256(user.amount.mul(pool.accRewardTokensPerShare) / ACC_TOKEN_PRECISION); uint256 _pendingRewardTokens = accumulatedRewardTokens.sub(user.rewardDebt).toUInt256(); // Effects user.rewardDebt = accumulatedRewardTokens; // Interactions if (_pendingRewardTokens > 0) { REWARD_TOKEN.safeTransfer(to, _pendingRewardTokens); } emit Harvest(msg.sender, pid, _pendingRewardTokens); nonReentrant = false; } /// @notice Withdraw without caring about rewards. EMERGENCY ONLY. /// @param pid The index of the pool. See `poolInfo`. /// @param to Receiver of the LP tokens. function emergencyWithdraw(uint256 pid, address to) public { require(address(0) != to, "genericFarmV2::can't withdraw to address zero"); UserInfo storage user = userInfo[pid][msg.sender]; uint256 amount = user.amount; user.amount = 0; user.rewardDebt = 0; // Note: transfer can fail or succeed if `amount` is zero. lpToken[pid].safeTransfer(to, amount); emit EmergencyWithdraw(msg.sender, pid, amount, to); } }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; // a library for performing overflow-safe math, updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math) library BoringMath { function add(uint256 a, uint256 b) internal pure returns (uint256 c) {require((c = a + b) >= b, "BoringMath: Add Overflow");} function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {require((c = a - b) <= a, "BoringMath: Underflow");} function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {require(b == 0 || (c = a * b)/b == a, "BoringMath: Mul Overflow");} function to128(uint256 a) internal pure returns (uint128 c) { require(a <= uint128(-1), "BoringMath: uint128 Overflow"); c = uint128(a); } function to64(uint256 a) internal pure returns (uint64 c) { require(a <= uint64(-1), "BoringMath: uint64 Overflow"); c = uint64(a); } function to32(uint256 a) internal pure returns (uint32 c) { require(a <= uint32(-1), "BoringMath: uint32 Overflow"); c = uint32(a); } } library BoringMath128 { function add(uint128 a, uint128 b) internal pure returns (uint128 c) {require((c = a + b) >= b, "BoringMath: Add Overflow");} function sub(uint128 a, uint128 b) internal pure returns (uint128 c) {require((c = a - b) <= a, "BoringMath: Underflow");} } library BoringMath64 { function add(uint64 a, uint64 b) internal pure returns (uint64 c) {require((c = a + b) >= b, "BoringMath: Add Overflow");} function sub(uint64 a, uint64 b) internal pure returns (uint64 c) {require((c = a - b) <= a, "BoringMath: Underflow");} } library BoringMath32 { function add(uint32 a, uint32 b) internal pure returns (uint32 c) {require((c = a + b) >= b, "BoringMath: Add Overflow");} function sub(uint32 a, uint32 b) internal pure returns (uint32 c) {require((c = a - b) <= a, "BoringMath: Underflow");} }
// SPDX-License-Identifier: UNLICENSED // Audit on 5-Jan-2021 by Keno and BoringCrypto // P1 - P3: OK pragma solidity 0.6.12; pragma experimental ABIEncoderV2; // solhint-disable avoid-low-level-calls import "./libraries/BoringERC20.sol"; // T1 - T4: OK contract BaseBoringBatchable { function _getRevertMsg(bytes memory _returnData) internal pure returns (string memory) { // If the _res length is less than 68, then the transaction failed silently (without a revert message) if (_returnData.length < 68) return "Transaction reverted silently"; assembly { // Slice the sighash. _returnData := add(_returnData, 0x04) } return abi.decode(_returnData, (string)); // All that remains is the revert string } // F3 - F9: OK // F1: External is ok here because this is the batch function, adding it to a batch makes no sense // F2: Calls in the batch may be payable, delegatecall operates in the same context, so each call in the batch has access to msg.value // C1 - C21: OK // C3: The length of the loop is fully under user control, so can't be exploited // C7: Delegatecall is only used on the same contract, so it's safe function batch(bytes[] calldata calls, bool revertOnFail) external payable returns(bool[] memory successes, bytes[] memory results) { // Interactions successes = new bool[](calls.length); results = new bytes[](calls.length); for (uint256 i = 0; i < calls.length; i++) { (bool success, bytes memory result) = address(this).delegatecall(calls[i]); require(success || !revertOnFail, _getRevertMsg(result)); successes[i] = success; results[i] = result; } } } // T1 - T4: OK contract BoringBatchable is BaseBoringBatchable { // F1 - F9: OK // F6: Parameters can be used front-run the permit and the user's permit will fail (due to nonce or other revert) // if part of a batch this could be used to grief once as the second call would not need the permit // C1 - C21: OK function permitToken(IERC20 token, address from, address to, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { // Interactions // X1 - X5 token.permit(from, to, amount, deadline, v, r, s); } }
// SPDX-License-Identifier: MIT // Audit on 5-Jan-2021 by Keno and BoringCrypto // P1 - P3: OK pragma solidity 0.6.12; // Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol + Claimable.sol // Edited by BoringCrypto // T1 - T4: OK contract BoringOwnableData { // V1 - V5: OK address public owner; // V1 - V5: OK address public pendingOwner; } // T1 - T4: OK contract BoringOwnable is BoringOwnableData { // E1: OK event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () public { owner = msg.sender; emit OwnershipTransferred(address(0), msg.sender); } // F1 - F9: OK // C1 - C21: OK function transferOwnership(address newOwner, bool direct, bool renounce) public onlyOwner { if (direct) { // Checks require(newOwner != address(0) || renounce, "Ownable: zero address"); // Effects emit OwnershipTransferred(owner, newOwner); owner = newOwner; pendingOwner = address(0); } else { // Effects pendingOwner = newOwner; } } // F1 - F9: OK // C1 - C21: OK function claimOwnership() public { address _pendingOwner = pendingOwner; // Checks require(msg.sender == _pendingOwner, "Ownable: caller != pending owner"); // Effects emit OwnershipTransferred(owner, _pendingOwner); owner = _pendingOwner; pendingOwner = address(0); } // M1 - M5: OK // C1 - C21: OK modifier onlyOwner() { require(msg.sender == owner, "Ownable: caller is not the owner"); _; } }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; library SignedSafeMath { int256 constant private _INT256_MIN = -2**255; /** * @dev Returns the multiplication of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { // 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; } require(!(a == -1 && b == _INT256_MIN), "SignedSafeMath: multiplication overflow"); int256 c = a * b; require(c / a == b, "SignedSafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two signed 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(int256 a, int256 b) internal pure returns (int256) { require(b != 0, "SignedSafeMath: division by zero"); require(!(b == -1 && a == _INT256_MIN), "SignedSafeMath: division overflow"); int256 c = a / b; return c; } /** * @dev Returns the subtraction of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a), "SignedSafeMath: subtraction overflow"); return c; } /** * @dev Returns the addition of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a), "SignedSafeMath: addition overflow"); return c; } function toUInt256(int256 a) internal pure returns (uint256) { require(a >= 0, "Integer < 0"); return uint256(a); } }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.6.12; import "../interfaces/IERC20.sol"; library BoringERC20 { function safeSymbol(IERC20 token) internal view returns(string memory) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x95d89b41)); return success && data.length > 0 ? abi.decode(data, (string)) : "???"; } function safeName(IERC20 token) internal view returns(string memory) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x06fdde03)); return success && data.length > 0 ? abi.decode(data, (string)) : "???"; } function safeDecimals(IERC20 token) internal view returns (uint8) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x313ce567)); return success && data.length == 32 ? abi.decode(data, (uint8)) : 18; } function safeTransfer(IERC20 token, address to, uint256 amount) internal { (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0xa9059cbb, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: Transfer failed"); } function safeTransferFrom(IERC20 token, address from, address to, uint256 amount) internal { (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0x23b872dd, from, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: TransferFrom failed"); } }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); // EIP 2612 function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_rewardToken","type":"address"},{"internalType":"uint256","name":"_rewardTokensPerBlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"lpToken","type":"address"}],"name":"LogPoolAddition","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"}],"name":"LogSetPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"lastRewardBlock","type":"uint64"},{"indexed":false,"internalType":"uint256","name":"lpSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accRewardTokensPerShare","type":"uint256"}],"name":"LogUpdatePool","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":"uint256","name":"rewardTokensPerBlock","type":"uint256"},{"indexed":false,"internalType":"bool","name":"withUpdate","type":"bool"}],"name":"SetRewardTokensPerBlock","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"REWARD_TOKEN","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"calls","type":"bytes[]"},{"internalType":"bool","name":"revertOnFail","type":"bool"}],"name":"batch","outputs":[{"internalType":"bool[]","name":"successes","type":"bool[]"},{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"getLPSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lpToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdateAllPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pids","type":"uint256[]"}],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"pending","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permitToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"uint128","name":"accRewardTokensPerShare","type":"uint128"},{"internalType":"uint64","name":"lastRewardBlock","type":"uint64"},{"internalType":"uint64","name":"allocPoint","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"pools","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"poolReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardTokensPerBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_val","type":"bool"}],"name":"setNonReentrant","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardTokensPerBlock","type":"uint256"},{"internalType":"bool","name":"_withUpdate","type":"bool"}],"name":"setRewardTokensPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"bool","name":"direct","type":"bool"},{"internalType":"bool","name":"renounce","type":"bool"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"updatePool","outputs":[{"components":[{"internalType":"uint128","name":"accRewardTokensPerShare","type":"uint128"},{"internalType":"uint64","name":"lastRewardBlock","type":"uint64"},{"internalType":"uint64","name":"allocPoint","type":"uint64"}],"internalType":"struct genericFarmV2.PoolInfo","name":"pool","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"int256","name":"rewardDebt","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b506040516200265138038062002651833981016040819052620000349162000094565b600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360609190911b6001600160601b0319166080526007556000600655620000ce565b60008060408385031215620000a7578182fd5b82516001600160a01b0381168114620000be578283fd5b6020939093015192949293505050565b60805160601c612560620000f16000398061084452806113e952506125606000f3fe60806040526004361061019c5760003560e01c806378ed5d1f116100ec57806399248ea71161008a578063d2423b5111610064578063d2423b5114610490578063e30c3978146104b1578063ed7abd01146104c6578063efd1a444146104e65761019c565b806399248ea7146104465780639e010fdc1461045b578063c1bcb4931461047b5761019c565b80638dbdbe6d116100c65780638dbdbe6d146103ab57806393abfaf1146103cb57806393f1a40b146103f857806398969e82146104265761019c565b806378ed5d1f146103495780637c516e94146103765780638da5cb5b146103965761019c565b80631ab06ee5116101595780632f940c70116101335780632f940c70146102c75780634e71e0c8146102e757806351eb05a6146102fc57806357a5b58c146103295761019c565b80631ab06ee51461027257806329d0fa3e146102925780632b8bbbe8146102a75761019c565b8063078dfbe7146101a1578063081e3eda146101c35780630ad58d2f146101ee5780631526fe271461020e57806317caf6f11461023d57806318fccc7614610252575b600080fd5b3480156101ad57600080fd5b506101c16101bc366004611ba1565b610506565b005b3480156101cf57600080fd5b506101d86105f5565b6040516101e59190612443565b60405180910390f35b3480156101fa57600080fd5b506101c1610209366004611e70565b6105fb565b34801561021a57600080fd5b5061022e610229366004611dcc565b610735565b6040516101e593929190612419565b34801561024957600080fd5b506101d8610777565b34801561025e57600080fd5b506101c161026d366004611dfc565b61077d565b34801561027e57600080fd5b506101c161028d366004611e4f565b6108bf565b34801561029e57600080fd5b506101d86109ae565b3480156102b357600080fd5b506101c16102c2366004611dfc565b6109b4565b3480156102d357600080fd5b506101c16102e2366004611dfc565b610b99565b3480156102f357600080fd5b506101c1610c51565b34801561030857600080fd5b5061031c610317366004611dcc565b610cde565b6040516101e591906123e0565b34801561033557600080fd5b506101c1610344366004611c34565b610f71565b34801561035557600080fd5b50610369610364366004611dcc565b610fa7565b6040516101e59190611ef5565b34801561038257600080fd5b506101c1610391366004611cab565b610fce565b3480156103a257600080fd5b50610369611042565b3480156103b757600080fd5b506101c16103c6366004611e70565b611051565b3480156103d757600080fd5b506103eb6103e6366004611c73565b61117a565b6040516101e59190612021565b34801561040457600080fd5b50610418610413366004611dfc565b6111bf565b6040516101e592919061245c565b34801561043257600080fd5b506101d8610441366004611dfc565b6111e3565b34801561045257600080fd5b506103696113e7565b34801561046757600080fd5b506101c1610476366004611e2b565b61140b565b34801561048757600080fd5b506101c1611486565b6104a361049e366004611beb565b6114aa565b6040516101e5929190611f87565b3480156104bd57600080fd5b5061036961163a565b3480156104d257600080fd5b506101d86104e1366004611dcc565b611649565b3480156104f257600080fd5b506101d8610501366004611dcc565b6116a4565b6000546001600160a01b031633146105395760405162461bcd60e51b81526004016105309061228f565b60405180910390fd5b81156105d4576001600160a01b0383161515806105535750805b61056f5760405162461bcd60e51b81526004016105309061219f565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b0319918216179091556001805490911690556105f0565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b60025490565b60085460ff161561061e5760405162461bcd60e51b8152600401610530906120ca565b6008805460ff19166001179055610633611b39565b61063c84610cde565b6000858152600560209081526040808320338452909152902081519192509061069190670de0b6b3a76400009061067d9087906001600160801b0316611744565b8161068457fe5b6001840154919004611781565b600182015580546106a290856117c7565b81600001819055506106d88385600388815481106106bc57fe5b6000918252602090912001546001600160a01b031691906117ea565b826001600160a01b031685336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec21328760405161071c9190612443565b60405180910390a450506008805460ff19169055505050565b6002818154811061074257fe5b6000918252602090912001546001600160801b03811691506001600160401b03600160801b8204811691600160c01b90041683565b60065481565b60085460ff16156107a05760405162461bcd60e51b8152600401610530906120ca565b6008805460ff191660011790556107b5611b39565b6107be83610cde565b60008481526005602090815260408083203384529091528120825181549394509092670de0b6b3a7640000916107fd91906001600160801b0316611744565b8161080457fe5b049050600061082861082384600101548461178190919063ffffffff16565b6118d8565b600184018390559050801561086b5761086b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686836117ea565b85336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae0660924954836040516108a59190612443565b60405180910390a350506008805460ff1916905550505050565b6000546001600160a01b031633146108e95760405162461bcd60e51b81526004016105309061228f565b61092881610922600285815481106108fd57fe5b60009182526020909120015460065490600160c01b90046001600160401b03166117c7565b906118fe565b60065561093481611921565b6002838154811061094157fe5b9060005260206000200160000160186101000a8154816001600160401b0302191690836001600160401b03160217905550817f942cc7e17a17c164bd977f32ab8c54265d5b9d481e4e352bf874f1e568874e7c826040516109a29190612443565b60405180910390a25050565b60075481565b6000546001600160a01b031633146109de5760405162461bcd60e51b81526004016105309061228f565b6001600160a01b03811660009081526004602052604090205460ff1615610a175760405162461bcd60e51b81526004016105309061223c565b6006544390610a2690846118fe565b6006556003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0385169081179091556000908152600460209081526040808320805460ff1916909417909355825160608101909352908252600291908101610aab84611921565b6001600160401b03168152602001610ac286611921565b6001600160401b039081169091528254600181810185556000948552602094859020845192018054958501516040909501518416600160c01b026001600160c01b0395909416600160801b0267ffffffffffffffff60801b196001600160801b039094166001600160801b0319909716969096179290921694909417929092161790556003546001600160a01b03841691610b5d91906117c7565b7f4710feb78e3bce8d2e3ca2989a8eb2f8bcd32a6a55b4535942c180fc4d2e295285604051610b8c9190612443565b60405180910390a3505050565b6001600160a01b038116610bbf5760405162461bcd60e51b815260040161053090612152565b600082815260056020908152604080832033845290915281208054828255600182019290925560038054919291610bff918591849190889081106106bc57fe5b826001600160a01b031684336001600160a01b03167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b84604051610c439190612443565b60405180910390a450505050565b6001546001600160a01b0316338114610c7c5760405162461bcd60e51b8152600401610530906122c4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b610ce6611b39565b60028281548110610cf357fe5b60009182526020918290206040805160608101825292909101546001600160801b03811683526001600160401b03600160801b82048116948401859052600160c01b90910416908201529150431115610f6c57600060038381548110610d5557fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190610d8e903090600401611ef5565b60206040518083038186803b158015610da657600080fd5b505afa158015610dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dde9190611de4565b9050600081118015610df257506000600654115b15610e90576000610e1983602001516001600160401b0316436117c790919063ffffffff16565b9050610e83610e7283600654610e5d670de0b6b3a7640000610e5789604001516001600160401b0316610e576007548a61174490919063ffffffff16565b90611744565b81610e6457fe5b0481610e6c57fe5b0461194a565b84516001600160801b031690611973565b6001600160801b03168352505b610e9943611921565b6001600160401b031660208301526002805483919085908110610eb857fe5b6000918252602091829020835191018054848401516040958601516001600160801b03199092166001600160801b039094169390931767ffffffffffffffff60801b1916600160801b6001600160401b0394851602176001600160c01b0316600160c01b93909116929092029190911790558301518351915185927f0fc9545022a542541ad085d091fb09a2ab36fee366a4576ab63714ea907ad35392610f62929091869161246a565b60405180910390a2505b919050565b8060005b81811015610fa157610f98848483818110610f8c57fe5b90506020020135610cde565b50600101610f75565b50505050565b60038181548110610fb457fe5b6000918252602090912001546001600160a01b0316905081565b60405163d505accf60e01b81526001600160a01b0389169063d505accf90611006908a908a908a908a908a908a908a90600401611f2d565b600060405180830381600087803b15801561102057600080fd5b505af1158015611034573d6000803e3d6000fd5b505050505050505050505050565b6000546001600160a01b031681565b60085460ff16156110745760405162461bcd60e51b8152600401610530906120ca565b6008805460ff19166001179055611089611b39565b61109284610cde565b60008581526005602090815260408083206001600160a01b038716845290915290208054919250906110c490856118fe565b815581516110fe90670de0b6b3a7640000906110ea9087906001600160801b0316611744565b816110f157fe5b60018401549190046119a2565b81600101819055506111363330866003898154811061111957fe5b6000918252602090912001546001600160a01b03169291906119e8565b826001600160a01b031685336001600160a01b03167f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b478760405161071c9190612443565b600080546001600160a01b031633146111a55760405162461bcd60e51b81526004016105309061228f565b506008805460ff1916911515919091179081905560ff1690565b60056020908152600092835260408084209091529082529020805460019091015482565b60006111ed611b39565b600284815481106111fa57fe5b600091825260208083206040805160608101825291909301546001600160801b0380821683526001600160401b03600160801b8304811684860152600160c01b90920490911682850152888552600583528385206001600160a01b038916865290925291832082516003805494965091949216928890811061127857fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a08231906112b1903090600401611ef5565b60206040518083038186803b1580156112c957600080fd5b505afa1580156112dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113019190611de4565b905083602001516001600160401b03164311801561131f5750600081115b801561132d57506000600654115b156113ab57600061135485602001516001600160401b0316436117c790919063ffffffff16565b90506113a78260065461138f670de0b6b3a7640000610e578a604001516001600160401b0316610e576007548961174490919063ffffffff16565b8161139657fe5b048161139e57fe5b859190046118fe565b9250505b600183015483546113dc9161082391670de0b6b3a7640000906113ce9087611744565b816113d557fe5b0490611781565b979650505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031633146114355760405162461bcd60e51b81526004016105309061228f565b801561144357611443611486565b60078290556040517fcc069b8c9af94925359e6af7d93ca7b796d7808e214ac9a0ab912688f06c22f29061147a908490849061244c565b60405180910390a15050565b60025460005b818110156114a65761149d81610cde565b5060010161148c565b5050565b606080836001600160401b03811180156114c357600080fd5b506040519080825280602002602001820160405280156114ed578160200160208202803683370190505b509150836001600160401b038111801561150657600080fd5b5060405190808252806020026020018201604052801561153a57816020015b60608152602001906001900390816115255790505b50905060005b8481101561163157600060603088888581811061155957fe5b905060200281019061156b9190612494565b604051611579929190611ec9565b600060405180830381855af49150503d80600081146115b4576040519150601f19603f3d011682016040523d82523d6000602084013e6115b9565b606091505b509150915081806115c8575085155b6115d182611ad9565b906115ef5760405162461bcd60e51b8152600401610530919061202c565b50818584815181106115fd57fe5b6020026020010190151590811515815250508084848151811061161c57fe5b60209081029190910101525050600101611540565b50935093915050565b6001546001600160a01b031681565b60006006546000141561165e57506000610f6c565b6006546116966002848154811061167157fe5b60009182526020909120015460075490600160c01b90046001600160401b0316611744565b8161169d57fe5b0492915050565b600080600383815481106116b457fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a08231906116ed903090600401611ef5565b60206040518083038186803b15801561170557600080fd5b505afa158015611719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173d9190611de4565b9392505050565b600081158061175f5750508082028282828161175c57fe5b04145b61177b5760405162461bcd60e51b8152600401610530906123a9565b92915050565b60008183038183128015906117965750838113155b806117ab57506000831280156117ab57508381135b61173d5760405162461bcd60e51b815260040161053090612330565b8082038281111561177b5760405162461bcd60e51b81526004016105309061203f565b60006060846001600160a01b031663a9059cbb8585604051602401611810929190611f6e565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516118499190611ed9565b6000604051808303816000865af19150503d8060008114611886576040519150601f19603f3d011682016040523d82523d6000602084013e61188b565b606091505b50915091508180156118b55750805115806118b55750808060200190518101906118b59190611c8f565b6118d15760405162461bcd60e51b815260040161053090612093565b5050505050565b6000808212156118fa5760405162461bcd60e51b81526004016105309061206e565b5090565b8181018181101561177b5760405162461bcd60e51b815260040161053090612205565b60006001600160401b038211156118fa5760405162461bcd60e51b8152600401610530906122f9565b60006001600160801b038211156118fa5760405162461bcd60e51b8152600401610530906121ce565b8181016001600160801b03808316908216101561177b5760405162461bcd60e51b815260040161053090612205565b60008282018183128015906119b75750838112155b806119cc57506000831280156119cc57508381125b61173d5760405162461bcd60e51b815260040161053090612111565b60006060856001600160a01b03166323b872dd868686604051602401611a1093929190611f09565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611a499190611ed9565b6000604051808303816000865af19150503d8060008114611a86576040519150601f19603f3d011682016040523d82523d6000602084013e611a8b565b606091505b5091509150818015611ab5575080511580611ab5575080806020019051810190611ab59190611c8f565b611ad15760405162461bcd60e51b815260040161053090612374565b505050505050565b6060604482511015611b1f575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c790000006020820152610f6c565b6004820191508180602001905181019061177b9190611d32565b604080516060810182526000808252602082018190529181019190915290565b60008083601f840112611b6a578182fd5b5081356001600160401b03811115611b80578182fd5b6020830191508360208083028501011115611b9a57600080fd5b9250929050565b600080600060608486031215611bb5578283fd5b8335611bc081612504565b92506020840135611bd08161251c565b91506040840135611be08161251c565b809150509250925092565b600080600060408486031215611bff578283fd5b83356001600160401b03811115611c14578384fd5b611c2086828701611b59565b9094509250506020840135611be08161251c565b60008060208385031215611c46578182fd5b82356001600160401b03811115611c5b578283fd5b611c6785828601611b59565b90969095509350505050565b600060208284031215611c84578081fd5b813561173d8161251c565b600060208284031215611ca0578081fd5b815161173d8161251c565b600080600080600080600080610100898b031215611cc7578384fd5b8835611cd281612504565b97506020890135611ce281612504565b96506040890135611cf281612504565b9550606089013594506080890135935060a089013560ff81168114611d15578384fd5b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215611d43578081fd5b81516001600160401b0380821115611d59578283fd5b818401915084601f830112611d6c578283fd5b815181811115611d7a578384fd5b604051601f8201601f191681016020018381118282101715611d9a578586fd5b604052818152838201602001871015611db1578485fd5b611dc28260208301602087016124d8565b9695505050505050565b600060208284031215611ddd578081fd5b5035919050565b600060208284031215611df5578081fd5b5051919050565b60008060408385031215611e0e578182fd5b823591506020830135611e2081612504565b809150509250929050565b60008060408385031215611e3d578182fd5b823591506020830135611e208161251c565b60008060408385031215611e61578081fd5b50508035926020909101359150565b600080600060608486031215611e84578081fd5b83359250602084013591506040840135611be081612504565b60008151808452611eb58160208601602086016124d8565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b60008251611eeb8184602087016124d8565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b82811015611fc2578151151584529284019290840190600101611fa4565b50505083810382850152808551611fd98184612443565b91508192508381028201848801865b83811015612012578583038552612000838351611e9d565b94870194925090860190600101611fe8565b50909998505050505050505050565b901515815260200190565b60006020825261173d6020830184611e9d565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b6020808252600b908201526a0496e7465676572203c20360ac1b604082015260600190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526027908201527f67656e657269634661726d56323a3a6e6f6e5265656e7472616e74202d2074726040820152663c9030b3b0b4b760c91b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252602d908201527f67656e657269634661726d56323a3a63616e277420776974686472617720746f60408201526c2061646472657373207a65726f60981b606082015260800190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b60208082526033908201527f67656e657269634661726d56323a3a746865726520697320616c72656164792060408201527206120706f6f6c20776974682074686973204c5606c1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b81516001600160801b031681526020808301516001600160401b0390811691830191909152604092830151169181019190915260600190565b6001600160801b039390931683526001600160401b03918216602084015216604082015260600190565b90815260200190565b9182521515602082015260400190565b918252602082015260400190565b6001600160401b0393909316835260208301919091526001600160801b0316604082015260600190565b6000808335601e198436030181126124aa578283fd5b8301803591506001600160401b038211156124c3578283fd5b602001915036819003821315611b9a57600080fd5b60005b838110156124f35781810151838201526020016124db565b83811115610fa15750506000910152565b6001600160a01b038116811461251957600080fd5b50565b801515811461251957600080fdfea264697066735822122062fdf41212b4b6cd2581c897e822e6c629abbbe123b2b204f1147696f7e90e9d64736f6c634300060c0033000000000000000000000000970b9bb2c0444f5e81e9d0efb84c8ccdcdcaf84d0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x60806040526004361061019c5760003560e01c806378ed5d1f116100ec57806399248ea71161008a578063d2423b5111610064578063d2423b5114610490578063e30c3978146104b1578063ed7abd01146104c6578063efd1a444146104e65761019c565b806399248ea7146104465780639e010fdc1461045b578063c1bcb4931461047b5761019c565b80638dbdbe6d116100c65780638dbdbe6d146103ab57806393abfaf1146103cb57806393f1a40b146103f857806398969e82146104265761019c565b806378ed5d1f146103495780637c516e94146103765780638da5cb5b146103965761019c565b80631ab06ee5116101595780632f940c70116101335780632f940c70146102c75780634e71e0c8146102e757806351eb05a6146102fc57806357a5b58c146103295761019c565b80631ab06ee51461027257806329d0fa3e146102925780632b8bbbe8146102a75761019c565b8063078dfbe7146101a1578063081e3eda146101c35780630ad58d2f146101ee5780631526fe271461020e57806317caf6f11461023d57806318fccc7614610252575b600080fd5b3480156101ad57600080fd5b506101c16101bc366004611ba1565b610506565b005b3480156101cf57600080fd5b506101d86105f5565b6040516101e59190612443565b60405180910390f35b3480156101fa57600080fd5b506101c1610209366004611e70565b6105fb565b34801561021a57600080fd5b5061022e610229366004611dcc565b610735565b6040516101e593929190612419565b34801561024957600080fd5b506101d8610777565b34801561025e57600080fd5b506101c161026d366004611dfc565b61077d565b34801561027e57600080fd5b506101c161028d366004611e4f565b6108bf565b34801561029e57600080fd5b506101d86109ae565b3480156102b357600080fd5b506101c16102c2366004611dfc565b6109b4565b3480156102d357600080fd5b506101c16102e2366004611dfc565b610b99565b3480156102f357600080fd5b506101c1610c51565b34801561030857600080fd5b5061031c610317366004611dcc565b610cde565b6040516101e591906123e0565b34801561033557600080fd5b506101c1610344366004611c34565b610f71565b34801561035557600080fd5b50610369610364366004611dcc565b610fa7565b6040516101e59190611ef5565b34801561038257600080fd5b506101c1610391366004611cab565b610fce565b3480156103a257600080fd5b50610369611042565b3480156103b757600080fd5b506101c16103c6366004611e70565b611051565b3480156103d757600080fd5b506103eb6103e6366004611c73565b61117a565b6040516101e59190612021565b34801561040457600080fd5b50610418610413366004611dfc565b6111bf565b6040516101e592919061245c565b34801561043257600080fd5b506101d8610441366004611dfc565b6111e3565b34801561045257600080fd5b506103696113e7565b34801561046757600080fd5b506101c1610476366004611e2b565b61140b565b34801561048757600080fd5b506101c1611486565b6104a361049e366004611beb565b6114aa565b6040516101e5929190611f87565b3480156104bd57600080fd5b5061036961163a565b3480156104d257600080fd5b506101d86104e1366004611dcc565b611649565b3480156104f257600080fd5b506101d8610501366004611dcc565b6116a4565b6000546001600160a01b031633146105395760405162461bcd60e51b81526004016105309061228f565b60405180910390fd5b81156105d4576001600160a01b0383161515806105535750805b61056f5760405162461bcd60e51b81526004016105309061219f565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b0319918216179091556001805490911690556105f0565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b60025490565b60085460ff161561061e5760405162461bcd60e51b8152600401610530906120ca565b6008805460ff19166001179055610633611b39565b61063c84610cde565b6000858152600560209081526040808320338452909152902081519192509061069190670de0b6b3a76400009061067d9087906001600160801b0316611744565b8161068457fe5b6001840154919004611781565b600182015580546106a290856117c7565b81600001819055506106d88385600388815481106106bc57fe5b6000918252602090912001546001600160a01b031691906117ea565b826001600160a01b031685336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec21328760405161071c9190612443565b60405180910390a450506008805460ff19169055505050565b6002818154811061074257fe5b6000918252602090912001546001600160801b03811691506001600160401b03600160801b8204811691600160c01b90041683565b60065481565b60085460ff16156107a05760405162461bcd60e51b8152600401610530906120ca565b6008805460ff191660011790556107b5611b39565b6107be83610cde565b60008481526005602090815260408083203384529091528120825181549394509092670de0b6b3a7640000916107fd91906001600160801b0316611744565b8161080457fe5b049050600061082861082384600101548461178190919063ffffffff16565b6118d8565b600184018390559050801561086b5761086b6001600160a01b037f000000000000000000000000970b9bb2c0444f5e81e9d0efb84c8ccdcdcaf84d1686836117ea565b85336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae0660924954836040516108a59190612443565b60405180910390a350506008805460ff1916905550505050565b6000546001600160a01b031633146108e95760405162461bcd60e51b81526004016105309061228f565b61092881610922600285815481106108fd57fe5b60009182526020909120015460065490600160c01b90046001600160401b03166117c7565b906118fe565b60065561093481611921565b6002838154811061094157fe5b9060005260206000200160000160186101000a8154816001600160401b0302191690836001600160401b03160217905550817f942cc7e17a17c164bd977f32ab8c54265d5b9d481e4e352bf874f1e568874e7c826040516109a29190612443565b60405180910390a25050565b60075481565b6000546001600160a01b031633146109de5760405162461bcd60e51b81526004016105309061228f565b6001600160a01b03811660009081526004602052604090205460ff1615610a175760405162461bcd60e51b81526004016105309061223c565b6006544390610a2690846118fe565b6006556003805460018082019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0385169081179091556000908152600460209081526040808320805460ff1916909417909355825160608101909352908252600291908101610aab84611921565b6001600160401b03168152602001610ac286611921565b6001600160401b039081169091528254600181810185556000948552602094859020845192018054958501516040909501518416600160c01b026001600160c01b0395909416600160801b0267ffffffffffffffff60801b196001600160801b039094166001600160801b0319909716969096179290921694909417929092161790556003546001600160a01b03841691610b5d91906117c7565b7f4710feb78e3bce8d2e3ca2989a8eb2f8bcd32a6a55b4535942c180fc4d2e295285604051610b8c9190612443565b60405180910390a3505050565b6001600160a01b038116610bbf5760405162461bcd60e51b815260040161053090612152565b600082815260056020908152604080832033845290915281208054828255600182019290925560038054919291610bff918591849190889081106106bc57fe5b826001600160a01b031684336001600160a01b03167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b84604051610c439190612443565b60405180910390a450505050565b6001546001600160a01b0316338114610c7c5760405162461bcd60e51b8152600401610530906122c4565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b610ce6611b39565b60028281548110610cf357fe5b60009182526020918290206040805160608101825292909101546001600160801b03811683526001600160401b03600160801b82048116948401859052600160c01b90910416908201529150431115610f6c57600060038381548110610d5557fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190610d8e903090600401611ef5565b60206040518083038186803b158015610da657600080fd5b505afa158015610dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dde9190611de4565b9050600081118015610df257506000600654115b15610e90576000610e1983602001516001600160401b0316436117c790919063ffffffff16565b9050610e83610e7283600654610e5d670de0b6b3a7640000610e5789604001516001600160401b0316610e576007548a61174490919063ffffffff16565b90611744565b81610e6457fe5b0481610e6c57fe5b0461194a565b84516001600160801b031690611973565b6001600160801b03168352505b610e9943611921565b6001600160401b031660208301526002805483919085908110610eb857fe5b6000918252602091829020835191018054848401516040958601516001600160801b03199092166001600160801b039094169390931767ffffffffffffffff60801b1916600160801b6001600160401b0394851602176001600160c01b0316600160c01b93909116929092029190911790558301518351915185927f0fc9545022a542541ad085d091fb09a2ab36fee366a4576ab63714ea907ad35392610f62929091869161246a565b60405180910390a2505b919050565b8060005b81811015610fa157610f98848483818110610f8c57fe5b90506020020135610cde565b50600101610f75565b50505050565b60038181548110610fb457fe5b6000918252602090912001546001600160a01b0316905081565b60405163d505accf60e01b81526001600160a01b0389169063d505accf90611006908a908a908a908a908a908a908a90600401611f2d565b600060405180830381600087803b15801561102057600080fd5b505af1158015611034573d6000803e3d6000fd5b505050505050505050505050565b6000546001600160a01b031681565b60085460ff16156110745760405162461bcd60e51b8152600401610530906120ca565b6008805460ff19166001179055611089611b39565b61109284610cde565b60008581526005602090815260408083206001600160a01b038716845290915290208054919250906110c490856118fe565b815581516110fe90670de0b6b3a7640000906110ea9087906001600160801b0316611744565b816110f157fe5b60018401549190046119a2565b81600101819055506111363330866003898154811061111957fe5b6000918252602090912001546001600160a01b03169291906119e8565b826001600160a01b031685336001600160a01b03167f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b478760405161071c9190612443565b600080546001600160a01b031633146111a55760405162461bcd60e51b81526004016105309061228f565b506008805460ff1916911515919091179081905560ff1690565b60056020908152600092835260408084209091529082529020805460019091015482565b60006111ed611b39565b600284815481106111fa57fe5b600091825260208083206040805160608101825291909301546001600160801b0380821683526001600160401b03600160801b8304811684860152600160c01b90920490911682850152888552600583528385206001600160a01b038916865290925291832082516003805494965091949216928890811061127857fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a08231906112b1903090600401611ef5565b60206040518083038186803b1580156112c957600080fd5b505afa1580156112dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113019190611de4565b905083602001516001600160401b03164311801561131f5750600081115b801561132d57506000600654115b156113ab57600061135485602001516001600160401b0316436117c790919063ffffffff16565b90506113a78260065461138f670de0b6b3a7640000610e578a604001516001600160401b0316610e576007548961174490919063ffffffff16565b8161139657fe5b048161139e57fe5b859190046118fe565b9250505b600183015483546113dc9161082391670de0b6b3a7640000906113ce9087611744565b816113d557fe5b0490611781565b979650505050505050565b7f000000000000000000000000970b9bb2c0444f5e81e9d0efb84c8ccdcdcaf84d81565b6000546001600160a01b031633146114355760405162461bcd60e51b81526004016105309061228f565b801561144357611443611486565b60078290556040517fcc069b8c9af94925359e6af7d93ca7b796d7808e214ac9a0ab912688f06c22f29061147a908490849061244c565b60405180910390a15050565b60025460005b818110156114a65761149d81610cde565b5060010161148c565b5050565b606080836001600160401b03811180156114c357600080fd5b506040519080825280602002602001820160405280156114ed578160200160208202803683370190505b509150836001600160401b038111801561150657600080fd5b5060405190808252806020026020018201604052801561153a57816020015b60608152602001906001900390816115255790505b50905060005b8481101561163157600060603088888581811061155957fe5b905060200281019061156b9190612494565b604051611579929190611ec9565b600060405180830381855af49150503d80600081146115b4576040519150601f19603f3d011682016040523d82523d6000602084013e6115b9565b606091505b509150915081806115c8575085155b6115d182611ad9565b906115ef5760405162461bcd60e51b8152600401610530919061202c565b50818584815181106115fd57fe5b6020026020010190151590811515815250508084848151811061161c57fe5b60209081029190910101525050600101611540565b50935093915050565b6001546001600160a01b031681565b60006006546000141561165e57506000610f6c565b6006546116966002848154811061167157fe5b60009182526020909120015460075490600160c01b90046001600160401b0316611744565b8161169d57fe5b0492915050565b600080600383815481106116b457fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a08231906116ed903090600401611ef5565b60206040518083038186803b15801561170557600080fd5b505afa158015611719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173d9190611de4565b9392505050565b600081158061175f5750508082028282828161175c57fe5b04145b61177b5760405162461bcd60e51b8152600401610530906123a9565b92915050565b60008183038183128015906117965750838113155b806117ab57506000831280156117ab57508381135b61173d5760405162461bcd60e51b815260040161053090612330565b8082038281111561177b5760405162461bcd60e51b81526004016105309061203f565b60006060846001600160a01b031663a9059cbb8585604051602401611810929190611f6e565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516118499190611ed9565b6000604051808303816000865af19150503d8060008114611886576040519150601f19603f3d011682016040523d82523d6000602084013e61188b565b606091505b50915091508180156118b55750805115806118b55750808060200190518101906118b59190611c8f565b6118d15760405162461bcd60e51b815260040161053090612093565b5050505050565b6000808212156118fa5760405162461bcd60e51b81526004016105309061206e565b5090565b8181018181101561177b5760405162461bcd60e51b815260040161053090612205565b60006001600160401b038211156118fa5760405162461bcd60e51b8152600401610530906122f9565b60006001600160801b038211156118fa5760405162461bcd60e51b8152600401610530906121ce565b8181016001600160801b03808316908216101561177b5760405162461bcd60e51b815260040161053090612205565b60008282018183128015906119b75750838112155b806119cc57506000831280156119cc57508381125b61173d5760405162461bcd60e51b815260040161053090612111565b60006060856001600160a01b03166323b872dd868686604051602401611a1093929190611f09565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611a499190611ed9565b6000604051808303816000865af19150503d8060008114611a86576040519150601f19603f3d011682016040523d82523d6000602084013e611a8b565b606091505b5091509150818015611ab5575080511580611ab5575080806020019051810190611ab59190611c8f565b611ad15760405162461bcd60e51b815260040161053090612374565b505050505050565b6060604482511015611b1f575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c790000006020820152610f6c565b6004820191508180602001905181019061177b9190611d32565b604080516060810182526000808252602082018190529181019190915290565b60008083601f840112611b6a578182fd5b5081356001600160401b03811115611b80578182fd5b6020830191508360208083028501011115611b9a57600080fd5b9250929050565b600080600060608486031215611bb5578283fd5b8335611bc081612504565b92506020840135611bd08161251c565b91506040840135611be08161251c565b809150509250925092565b600080600060408486031215611bff578283fd5b83356001600160401b03811115611c14578384fd5b611c2086828701611b59565b9094509250506020840135611be08161251c565b60008060208385031215611c46578182fd5b82356001600160401b03811115611c5b578283fd5b611c6785828601611b59565b90969095509350505050565b600060208284031215611c84578081fd5b813561173d8161251c565b600060208284031215611ca0578081fd5b815161173d8161251c565b600080600080600080600080610100898b031215611cc7578384fd5b8835611cd281612504565b97506020890135611ce281612504565b96506040890135611cf281612504565b9550606089013594506080890135935060a089013560ff81168114611d15578384fd5b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215611d43578081fd5b81516001600160401b0380821115611d59578283fd5b818401915084601f830112611d6c578283fd5b815181811115611d7a578384fd5b604051601f8201601f191681016020018381118282101715611d9a578586fd5b604052818152838201602001871015611db1578485fd5b611dc28260208301602087016124d8565b9695505050505050565b600060208284031215611ddd578081fd5b5035919050565b600060208284031215611df5578081fd5b5051919050565b60008060408385031215611e0e578182fd5b823591506020830135611e2081612504565b809150509250929050565b60008060408385031215611e3d578182fd5b823591506020830135611e208161251c565b60008060408385031215611e61578081fd5b50508035926020909101359150565b600080600060608486031215611e84578081fd5b83359250602084013591506040840135611be081612504565b60008151808452611eb58160208601602086016124d8565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b60008251611eeb8184602087016124d8565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b82811015611fc2578151151584529284019290840190600101611fa4565b50505083810382850152808551611fd98184612443565b91508192508381028201848801865b83811015612012578583038552612000838351611e9d565b94870194925090860190600101611fe8565b50909998505050505050505050565b901515815260200190565b60006020825261173d6020830184611e9d565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b6020808252600b908201526a0496e7465676572203c20360ac1b604082015260600190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526027908201527f67656e657269634661726d56323a3a6e6f6e5265656e7472616e74202d2074726040820152663c9030b3b0b4b760c91b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252602d908201527f67656e657269634661726d56323a3a63616e277420776974686472617720746f60408201526c2061646472657373207a65726f60981b606082015260800190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b60208082526033908201527f67656e657269634661726d56323a3a746865726520697320616c72656164792060408201527206120706f6f6c20776974682074686973204c5606c1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b81516001600160801b031681526020808301516001600160401b0390811691830191909152604092830151169181019190915260600190565b6001600160801b039390931683526001600160401b03918216602084015216604082015260600190565b90815260200190565b9182521515602082015260400190565b918252602082015260400190565b6001600160401b0393909316835260208301919091526001600160801b0316604082015260600190565b6000808335601e198436030181126124aa578283fd5b8301803591506001600160401b038211156124c3578283fd5b602001915036819003821315611b9a57600080fd5b60005b838110156124f35781810151838201526020016124db565b83811115610fa15750506000910152565b6001600160a01b038116811461251957600080fd5b50565b801515811461251957600080fdfea264697066735822122062fdf41212b4b6cd2581c897e822e6c629abbbe123b2b204f1147696f7e90e9d64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000970b9bb2c0444f5e81e9d0efb84c8ccdcdcaf84d0000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _rewardToken (address): 0x970B9bB2C0444F5E81e9d0eFb84C8ccdcdcAf84d
Arg [1] : _rewardTokensPerBlock (uint256): 0
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000970b9bb2c0444f5e81e9d0efb84c8ccdcdcaf84d
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.02663 | 15,865.5534 | $422.5 |
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.