More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 138 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Redeem | 15402229 | 877 days ago | IN | 0 ETH | 0.00049014 | ||||
Withdraw | 15363138 | 883 days ago | IN | 0 ETH | 0.00069438 | ||||
Set Discount Rat... | 15351939 | 885 days ago | IN | 0 ETH | 0.00025291 | ||||
Withdraw | 15341202 | 886 days ago | IN | 0 ETH | 0.00198961 | ||||
Withdraw | 15341195 | 886 days ago | IN | 0 ETH | 0.00204121 | ||||
Bond | 15331382 | 888 days ago | IN | 0 ETH | 0.00183539 | ||||
Withdraw | 15331218 | 888 days ago | IN | 0 ETH | 0.00158362 | ||||
Redeem | 15312707 | 891 days ago | IN | 0 ETH | 0.0005497 | ||||
Bond | 15308339 | 892 days ago | IN | 0 ETH | 0.0036557 | ||||
Redeem | 15307415 | 892 days ago | IN | 0 ETH | 0.00086201 | ||||
Bond | 15306739 | 892 days ago | IN | 0 ETH | 0.00265018 | ||||
Bond | 15297969 | 893 days ago | IN | 0 ETH | 0.00147538 | ||||
Withdraw | 15297937 | 893 days ago | IN | 0 ETH | 0.00070686 | ||||
Redeem | 15280872 | 896 days ago | IN | 0 ETH | 0.00074434 | ||||
Set Discount Rat... | 15277603 | 896 days ago | IN | 0 ETH | 0.00035705 | ||||
Bond | 15264663 | 898 days ago | IN | 0 ETH | 0.00288897 | ||||
Withdraw | 15264642 | 898 days ago | IN | 0 ETH | 0.00151775 | ||||
Bond | 15229231 | 904 days ago | IN | 0 ETH | 0.00160483 | ||||
Withdraw | 15219130 | 905 days ago | IN | 0 ETH | 0.00264075 | ||||
Bond | 15180929 | 911 days ago | IN | 0 ETH | 0.003964 | ||||
Withdraw | 15082113 | 927 days ago | IN | 0 ETH | 0.0015953 | ||||
Withdraw | 15081203 | 927 days ago | IN | 0 ETH | 0.00290033 | ||||
Withdraw | 15075699 | 928 days ago | IN | 0 ETH | 0.00217253 | ||||
Withdraw | 15057673 | 930 days ago | IN | 0 ETH | 0.00286477 | ||||
Bond | 15050019 | 932 days ago | IN | 0 ETH | 0.00659931 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Bonding
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-28 */ /** *Submitted for verification at Etherscan.io on 2022-02-28 */ // SPDX-License-Identifier: MIT pragma solidity >=0.7.0 <0.9.0; interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); function mint(address to, uint256 amount) external; function redeem(address to, uint256 amount) external; // New Redeem Fuction /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); /** * @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); } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } contract Bonding is Ownable, ReentrancyGuard, Pausable{ using SafeMath for uint256; /* ========== STATE VARIABLES ========== */ IERC20 public rewardsToken; IERC20 public stakingToken; IUniswapV2Pair public brainWETHUniswapPair; uint256 public periodFinish; uint256 public discountRateNumerator; uint256 public discountRateDenominator; uint256 public vestingPeriod; uint256 public lastUpdateTime; uint256 public rewardPerTokenStored; bool public isPaused; struct Deposit{ uint256 bondedAt; uint256 bondedQty; uint256 discountNumerator; uint256 discountDenominator; uint256 exchangeRate; uint256 vestingPeriod; bool isWithdrawn; } mapping(address => uint256) public userRewardPerTokenPaid; mapping(address => uint256) public rewards; uint256 private _totalSupply; mapping(address => Deposit[]) private _balances; /* ========== EVENTS ========== */ event RewardAdded(uint256 reward); event Staked(address indexed user, uint256 amount); event Withdrawn(address indexed user, uint256 amount); event RewardPaid(address indexed user, uint256 reward); event VestingPeriodUpdated(uint256 newDuration); event DiscountRateUpdated(uint256 newNumerator, uint256 newDenominator); /* ========== CONSTRUCTOR ========== */ constructor( address _rewardsToken, address _stakingToken, address _brainWETHUniswapPair, uint256 _discountRateNumerator, uint256 _discountRateDenominator, uint256 _vestingPeriod ) { rewardsToken = IERC20(_rewardsToken); stakingToken = IERC20(_stakingToken); brainWETHUniswapPair = IUniswapV2Pair(_brainWETHUniswapPair); discountRateNumerator = _discountRateNumerator; discountRateDenominator = _discountRateDenominator; vestingPeriod = _vestingPeriod; } /* ========== VIEWS ========== */ function getBonds(address bonder) public view returns (Deposit[] memory){ Deposit[] memory d = _balances[bonder]; return (d); } function getBrainPrice(uint256 amount) public view returns (uint256){ (uint Res0, uint Res1,) = brainWETHUniswapPair.getReserves(); return((amount*Res0)/Res1); // return amount of BRAIN that can be bought with amount wETH } /* ========== MUTATIVE FUNCTIONS ========== */ function bond(uint256 amount) external nonReentrant whenNotPaused { require(amount > 0, "Cannot stake 0"); address bonder = msg.sender; //get the current wETH/BRAIN price uint256 currentExchangeRate = getBrainPrice(10**18); _balances[bonder].push( Deposit( block.timestamp, amount, discountRateNumerator, discountRateDenominator, currentExchangeRate, vestingPeriod, false ) ); stakingToken.transferFrom(bonder, address(this), amount); emit Staked(msg.sender, amount); } function withdraw(uint256 id) public nonReentrant { require( _balances[msg.sender].length > id, "Deposit does not exist" ); require( block.timestamp > _balances[msg.sender][id].bondedAt.add(_balances[msg.sender][id].vestingPeriod), "vesting period has not passed yet" ); require( _balances[msg.sender][id].bondedQty > 0, "There is nothing to withdraw" ); require( _balances[msg.sender][id].isWithdrawn == false, "This bond has already been withdrawn" ); uint256 amount = _balances[msg.sender][id].bondedQty; uint256 oldExchangeRate = _balances[msg.sender][id].exchangeRate; uint256 oldNumerator = _balances[msg.sender][id].discountNumerator; uint256 oldDenominator = _balances[msg.sender][id].discountDenominator; //we are buying back brain, so divide by exhchange rate to get wETH / (wETH / Brain) to convert to the brain quantity //then multiply by the discount denominator and divide by the numerator to convert the discount price to a quantity returned uint256 brainReceived = amount.mul(oldExchangeRate).mul(oldDenominator).div(oldNumerator).div(10**18); //_totalSupply = _totalSupply.sub(amount); _balances[msg.sender][id].isWithdrawn = true; //get the reward after the discount rate is applied //rewardsToken.transfer(msg.sender, brainReceived); mint(msg.sender, brainReceived); emit Withdrawn(msg.sender, brainReceived); } function mint(address to, uint256 amount) internal{ rewardsToken.mint(to, amount); } /* ========== RESTRICTED FUNCTIONS ========== */ function setVestingPeriod(uint256 _vestingPeriod) external onlyOwner{ vestingPeriod = _vestingPeriod; emit VestingPeriodUpdated(vestingPeriod); } function setDiscountRate(uint256 _discountRateNumerator, uint256 _discountRateDenominator) external onlyOwner{ discountRateNumerator = _discountRateNumerator; discountRateDenominator = _discountRateDenominator; emit DiscountRateUpdated(discountRateNumerator, discountRateDenominator); } function redeem(address to, uint256 amount) external onlyOwner{ stakingToken.transfer(to, amount); } function unpause() external onlyOwner { isPaused = false; _unpause(); } function pause() external onlyOwner{ isPaused = true; _pause(); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"address","name":"_stakingToken","type":"address"},{"internalType":"address","name":"_brainWETHUniswapPair","type":"address"},{"internalType":"uint256","name":"_discountRateNumerator","type":"uint256"},{"internalType":"uint256","name":"_discountRateDenominator","type":"uint256"},{"internalType":"uint256","name":"_vestingPeriod","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newNumerator","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDenominator","type":"uint256"}],"name":"DiscountRateUpdated","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":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newDuration","type":"uint256"}],"name":"VestingPeriodUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"brainWETHUniswapPair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"discountRateDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"discountRateNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bonder","type":"address"}],"name":"getBonds","outputs":[{"components":[{"internalType":"uint256","name":"bondedAt","type":"uint256"},{"internalType":"uint256","name":"bondedQty","type":"uint256"},{"internalType":"uint256","name":"discountNumerator","type":"uint256"},{"internalType":"uint256","name":"discountDenominator","type":"uint256"},{"internalType":"uint256","name":"exchangeRate","type":"uint256"},{"internalType":"uint256","name":"vestingPeriod","type":"uint256"},{"internalType":"bool","name":"isWithdrawn","type":"bool"}],"internalType":"struct Bonding.Deposit[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getBrainPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"redeem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_discountRateNumerator","type":"uint256"},{"internalType":"uint256","name":"_discountRateDenominator","type":"uint256"}],"name":"setDiscountRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_vestingPeriod","type":"uint256"}],"name":"setVestingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002872380380620028728339818101604052810190620000379190620002ce565b620000576200004b6200015d60201b60201c565b6200016560201b60201c565b600180819055506000600260006101000a81548160ff02191690831515021790555085600260016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260068190555081600781905550806008819055505050505050506200036a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200025b826200022e565b9050919050565b6200026d816200024e565b81146200027957600080fd5b50565b6000815190506200028d8162000262565b92915050565b6000819050919050565b620002a88162000293565b8114620002b457600080fd5b50565b600081519050620002c8816200029d565b92915050565b60008060008060008060c08789031215620002ee57620002ed62000229565b5b6000620002fe89828a016200027c565b96505060206200031189828a016200027c565b95505060406200032489828a016200027c565b94505060606200033789828a01620002b7565b93505060806200034a89828a01620002b7565b92505060a06200035d89828a01620002b7565b9150509295509295509295565b6124f8806200037a6000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c80638456cb59116100de578063d19b862111610097578063ebe2b12b11610071578063ebe2b12b146103f0578063f20d52c31461040e578063f2fde38b1461042c578063fd0f0aa41461044857610173565b8063d19b862114610384578063d1af0c7d146103b4578063df136d65146103d257610173565b80638456cb59146102d45780638b876347146102de5780638da5cb5b1461030e5780639940686e1461032c578063b187bd2614610348578063c8f33c911461036657610173565b80633f4ba83a116101305780633f4ba83a1461024a57806340bee0ed146102545780635c975abb14610270578063715018a61461028e57806372f702f3146102985780637313ee5a146102b657610173565b80630700037d1461017857806310c61c0c146101a85780631180d760146101c45780631e9a6950146101f457806321a2f8dc146102105780632e1a7d4d1461022e575b600080fd5b610192600480360381019061018d9190611915565b610466565b60405161019f919061195b565b60405180910390f35b6101c260048036038101906101bd91906119a2565b61047e565b005b6101de60048036038101906101d99190611915565b610549565b6040516101eb9190611b49565b60405180910390f35b61020e60048036038101906102099190611b6b565b610644565b005b610218610765565b604051610225919061195b565b60405180910390f35b61024860048036038101906102439190611bab565b61076b565b005b610252610d83565b005b61026e60048036038101906102699190611bab565b610e24565b005b610278610ee3565b6040516102859190611be7565b60405180910390f35b610296610efa565b005b6102a0610f82565b6040516102ad9190611c61565b60405180910390f35b6102be610fa8565b6040516102cb919061195b565b60405180910390f35b6102dc610fae565b005b6102f860048036038101906102f39190611915565b61104f565b604051610305919061195b565b60405180910390f35b610316611067565b6040516103239190611c8b565b60405180910390f35b61034660048036038101906103419190611bab565b611090565b005b610350611382565b60405161035d9190611be7565b60405180910390f35b61036e611395565b60405161037b919061195b565b60405180910390f35b61039e60048036038101906103999190611bab565b61139b565b6040516103ab919061195b565b60405180910390f35b6103bc611476565b6040516103c99190611c61565b60405180910390f35b6103da61149c565b6040516103e7919061195b565b60405180910390f35b6103f86114a2565b604051610405919061195b565b60405180910390f35b6104166114a8565b6040516104239190611cc7565b60405180910390f35b61044660048036038101906104419190611915565b6114ce565b005b6104506115c6565b60405161045d919061195b565b60405180910390f35b600d6020528060005260406000206000915090505481565b6104866115cc565b73ffffffffffffffffffffffffffffffffffffffff166104a4611067565b73ffffffffffffffffffffffffffffffffffffffff16146104fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f190611d3f565b60405180910390fd5b81600681905550806007819055507f227be254fa4b9a8595aa4c4633298eb0f7b486f2cabef39d251c9cf8f3a0c20660065460075460405161053d929190611d5f565b60405180910390a15050565b60606000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561063557838290600052602060002090600702016040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff161515151581525050815260200190600101906105ac565b50505050905080915050919050565b61064c6115cc565b73ffffffffffffffffffffffffffffffffffffffff1661066a611067565b73ffffffffffffffffffffffffffffffffffffffff16146106c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b790611d3f565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161071d929190611d88565b6020604051808303816000875af115801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190611ddd565b505050565b60065481565b600260015414156107b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a890611e56565b60405180910390fd5b600260018190555080600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501161083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083490611ec2565b60405180910390fd5b610914600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061089157610890611ee2565b5b906000526020600020906007020160050154600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106108f4576108f3611ee2565b5b9060005260206000209060070201600001546115d490919063ffffffff16565b4211610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094c90611f83565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106109a8576109a7611ee2565b5b906000526020600020906007020160010154116109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190611fef565b60405180910390fd5b60001515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610a4f57610a4e611ee2565b5b906000526020600020906007020160060160009054906101000a900460ff16151514610ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa790612081565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610b0357610b02611ee2565b5b90600052602060002090600702016001015490506000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110610b6a57610b69611ee2565b5b90600052602060002090600702016004015490506000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110610bd157610bd0611ee2565b5b90600052602060002090600702016002015490506000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208581548110610c3857610c37611ee2565b5b90600052602060002090600702016003015490506000610c9f670de0b6b3a7640000610c9185610c8386610c758a8c6115ea90919063ffffffff16565b6115ea90919063ffffffff16565b61160090919063ffffffff16565b61160090919063ffffffff16565b90506001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208781548110610cf457610cf3611ee2565b5b906000526020600020906007020160060160006101000a81548160ff021916908315150217905550610d263382611616565b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d582604051610d6c919061195b565b60405180910390a250505050506001808190555050565b610d8b6115cc565b73ffffffffffffffffffffffffffffffffffffffff16610da9611067565b73ffffffffffffffffffffffffffffffffffffffff1614610dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df690611d3f565b60405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550610e226116a9565b565b610e2c6115cc565b73ffffffffffffffffffffffffffffffffffffffff16610e4a611067565b73ffffffffffffffffffffffffffffffffffffffff1614610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9790611d3f565b60405180910390fd5b806008819055507fc21cb0f112058f1eb0e3313a577dfc27e6be5b39127591e05245343a422e4915600854604051610ed8919061195b565b60405180910390a150565b6000600260009054906101000a900460ff16905090565b610f026115cc565b73ffffffffffffffffffffffffffffffffffffffff16610f20611067565b73ffffffffffffffffffffffffffffffffffffffff1614610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90611d3f565b60405180910390fd5b610f80600061174b565b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b610fb66115cc565b73ffffffffffffffffffffffffffffffffffffffff16610fd4611067565b73ffffffffffffffffffffffffffffffffffffffff161461102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102190611d3f565b60405180910390fd5b6001600b60006101000a81548160ff02191690831515021790555061104d61180f565b565b600c6020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600260015414156110d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cd90611e56565b60405180910390fd5b60026001819055506110e6610ee3565b15611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d906120ed565b60405180910390fd5b60008111611169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116090612159565b60405180910390fd5b60003390506000611181670de0b6b3a764000061139b565b9050600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060e00160405280428152602001858152602001600654815260200160075481526020018381526020016008548152602001600015158152509080600181540180825580915050600190039060005260206000209060070201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff0219169083151502179055505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330866040518463ffffffff1660e01b81526004016112e493929190612179565b6020604051808303816000875af1158015611303573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113279190611ddd565b503373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d8460405161136e919061195b565b60405180910390a250506001808190555050565b600b60009054906101000a900460ff1681565b60095481565b6000806000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561140d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114319190612232565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff16915080828561146391906122b4565b61146d919061233d565b92505050919050565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60055481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114d66115cc565b73ffffffffffffffffffffffffffffffffffffffff166114f4611067565b73ffffffffffffffffffffffffffffffffffffffff161461154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190611d3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b1906123e0565b60405180910390fd5b6115c38161174b565b50565b60075481565b600033905090565b600081836115e29190612400565b905092915050565b600081836115f891906122b4565b905092915050565b6000818361160e919061233d565b905092915050565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401611673929190611d88565b600060405180830381600087803b15801561168d57600080fd5b505af11580156116a1573d6000803e3d6000fd5b505050505050565b6116b1610ee3565b6116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e7906124a2565b60405180910390fd5b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6117346115cc565b6040516117419190611c8b565b60405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611817610ee3565b15611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e906120ed565b60405180910390fd5b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861189b6115cc565b6040516118a89190611c8b565b60405180910390a1565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118e2826118b7565b9050919050565b6118f2816118d7565b81146118fd57600080fd5b50565b60008135905061190f816118e9565b92915050565b60006020828403121561192b5761192a6118b2565b5b600061193984828501611900565b91505092915050565b6000819050919050565b61195581611942565b82525050565b6000602082019050611970600083018461194c565b92915050565b61197f81611942565b811461198a57600080fd5b50565b60008135905061199c81611976565b92915050565b600080604083850312156119b9576119b86118b2565b5b60006119c78582860161198d565b92505060206119d88582860161198d565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611a1781611942565b82525050565b60008115159050919050565b611a3281611a1d565b82525050565b60e082016000820151611a4e6000850182611a0e565b506020820151611a616020850182611a0e565b506040820151611a746040850182611a0e565b506060820151611a876060850182611a0e565b506080820151611a9a6080850182611a0e565b5060a0820151611aad60a0850182611a0e565b5060c0820151611ac060c0850182611a29565b50505050565b6000611ad28383611a38565b60e08301905092915050565b6000602082019050919050565b6000611af6826119e2565b611b0081856119ed565b9350611b0b836119fe565b8060005b83811015611b3c578151611b238882611ac6565b9750611b2e83611ade565b925050600181019050611b0f565b5085935050505092915050565b60006020820190508181036000830152611b638184611aeb565b905092915050565b60008060408385031215611b8257611b816118b2565b5b6000611b9085828601611900565b9250506020611ba18582860161198d565b9150509250929050565b600060208284031215611bc157611bc06118b2565b5b6000611bcf8482850161198d565b91505092915050565b611be181611a1d565b82525050565b6000602082019050611bfc6000830184611bd8565b92915050565b6000819050919050565b6000611c27611c22611c1d846118b7565b611c02565b6118b7565b9050919050565b6000611c3982611c0c565b9050919050565b6000611c4b82611c2e565b9050919050565b611c5b81611c40565b82525050565b6000602082019050611c766000830184611c52565b92915050565b611c85816118d7565b82525050565b6000602082019050611ca06000830184611c7c565b92915050565b6000611cb182611c2e565b9050919050565b611cc181611ca6565b82525050565b6000602082019050611cdc6000830184611cb8565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611d29602083611ce2565b9150611d3482611cf3565b602082019050919050565b60006020820190508181036000830152611d5881611d1c565b9050919050565b6000604082019050611d74600083018561194c565b611d81602083018461194c565b9392505050565b6000604082019050611d9d6000830185611c7c565b611daa602083018461194c565b9392505050565b611dba81611a1d565b8114611dc557600080fd5b50565b600081519050611dd781611db1565b92915050565b600060208284031215611df357611df26118b2565b5b6000611e0184828501611dc8565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000611e40601f83611ce2565b9150611e4b82611e0a565b602082019050919050565b60006020820190508181036000830152611e6f81611e33565b9050919050565b7f4465706f73697420646f6573206e6f7420657869737400000000000000000000600082015250565b6000611eac601683611ce2565b9150611eb782611e76565b602082019050919050565b60006020820190508181036000830152611edb81611e9f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f76657374696e6720706572696f6420686173206e6f742070617373656420796560008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f6d602183611ce2565b9150611f7882611f11565b604082019050919050565b60006020820190508181036000830152611f9c81611f60565b9050919050565b7f5468657265206973206e6f7468696e6720746f20776974686472617700000000600082015250565b6000611fd9601c83611ce2565b9150611fe482611fa3565b602082019050919050565b6000602082019050818103600083015261200881611fcc565b9050919050565b7f5468697320626f6e642068617320616c7265616479206265656e20776974686460008201527f7261776e00000000000000000000000000000000000000000000000000000000602082015250565b600061206b602483611ce2565b91506120768261200f565b604082019050919050565b6000602082019050818103600083015261209a8161205e565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006120d7601083611ce2565b91506120e2826120a1565b602082019050919050565b60006020820190508181036000830152612106816120ca565b9050919050565b7f43616e6e6f74207374616b652030000000000000000000000000000000000000600082015250565b6000612143600e83611ce2565b915061214e8261210d565b602082019050919050565b6000602082019050818103600083015261217281612136565b9050919050565b600060608201905061218e6000830186611c7c565b61219b6020830185611c7c565b6121a8604083018461194c565b949350505050565b60006dffffffffffffffffffffffffffff82169050919050565b6121d3816121b0565b81146121de57600080fd5b50565b6000815190506121f0816121ca565b92915050565b600063ffffffff82169050919050565b61220f816121f6565b811461221a57600080fd5b50565b60008151905061222c81612206565b92915050565b60008060006060848603121561224b5761224a6118b2565b5b6000612259868287016121e1565b935050602061226a868287016121e1565b925050604061227b8682870161221d565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006122bf82611942565b91506122ca83611942565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561230357612302612285565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061234882611942565b915061235383611942565b9250826123635761236261230e565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006123ca602683611ce2565b91506123d58261236e565b604082019050919050565b600060208201905081810360008301526123f9816123bd565b9050919050565b600061240b82611942565b915061241683611942565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561244b5761244a612285565b5b828201905092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061248c601483611ce2565b915061249782612456565b602082019050919050565b600060208201905081810360008301526124bb8161247f565b905091905056fea264697066735822122003e6b0ba5d271104699813015706259eb599a7da82edad65453fca2040876c0464736f6c634300080c003300000000000000000000000039317b8a1ae06c30bb615d88cdc5522781499f1c000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000e5d6fc7323d74ad440ca53d3e53252427ad632ed000000000000000000000000000000000000000000000000000000000000005a00000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000069780
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101735760003560e01c80638456cb59116100de578063d19b862111610097578063ebe2b12b11610071578063ebe2b12b146103f0578063f20d52c31461040e578063f2fde38b1461042c578063fd0f0aa41461044857610173565b8063d19b862114610384578063d1af0c7d146103b4578063df136d65146103d257610173565b80638456cb59146102d45780638b876347146102de5780638da5cb5b1461030e5780639940686e1461032c578063b187bd2614610348578063c8f33c911461036657610173565b80633f4ba83a116101305780633f4ba83a1461024a57806340bee0ed146102545780635c975abb14610270578063715018a61461028e57806372f702f3146102985780637313ee5a146102b657610173565b80630700037d1461017857806310c61c0c146101a85780631180d760146101c45780631e9a6950146101f457806321a2f8dc146102105780632e1a7d4d1461022e575b600080fd5b610192600480360381019061018d9190611915565b610466565b60405161019f919061195b565b60405180910390f35b6101c260048036038101906101bd91906119a2565b61047e565b005b6101de60048036038101906101d99190611915565b610549565b6040516101eb9190611b49565b60405180910390f35b61020e60048036038101906102099190611b6b565b610644565b005b610218610765565b604051610225919061195b565b60405180910390f35b61024860048036038101906102439190611bab565b61076b565b005b610252610d83565b005b61026e60048036038101906102699190611bab565b610e24565b005b610278610ee3565b6040516102859190611be7565b60405180910390f35b610296610efa565b005b6102a0610f82565b6040516102ad9190611c61565b60405180910390f35b6102be610fa8565b6040516102cb919061195b565b60405180910390f35b6102dc610fae565b005b6102f860048036038101906102f39190611915565b61104f565b604051610305919061195b565b60405180910390f35b610316611067565b6040516103239190611c8b565b60405180910390f35b61034660048036038101906103419190611bab565b611090565b005b610350611382565b60405161035d9190611be7565b60405180910390f35b61036e611395565b60405161037b919061195b565b60405180910390f35b61039e60048036038101906103999190611bab565b61139b565b6040516103ab919061195b565b60405180910390f35b6103bc611476565b6040516103c99190611c61565b60405180910390f35b6103da61149c565b6040516103e7919061195b565b60405180910390f35b6103f86114a2565b604051610405919061195b565b60405180910390f35b6104166114a8565b6040516104239190611cc7565b60405180910390f35b61044660048036038101906104419190611915565b6114ce565b005b6104506115c6565b60405161045d919061195b565b60405180910390f35b600d6020528060005260406000206000915090505481565b6104866115cc565b73ffffffffffffffffffffffffffffffffffffffff166104a4611067565b73ffffffffffffffffffffffffffffffffffffffff16146104fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f190611d3f565b60405180910390fd5b81600681905550806007819055507f227be254fa4b9a8595aa4c4633298eb0f7b486f2cabef39d251c9cf8f3a0c20660065460075460405161053d929190611d5f565b60405180910390a15050565b60606000600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561063557838290600052602060002090600702016040518060e00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff161515151581525050815260200190600101906105ac565b50505050905080915050919050565b61064c6115cc565b73ffffffffffffffffffffffffffffffffffffffff1661066a611067565b73ffffffffffffffffffffffffffffffffffffffff16146106c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b790611d3f565b60405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161071d929190611d88565b6020604051808303816000875af115801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190611ddd565b505050565b60065481565b600260015414156107b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a890611e56565b60405180910390fd5b600260018190555080600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490501161083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083490611ec2565b60405180910390fd5b610914600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020828154811061089157610890611ee2565b5b906000526020600020906007020160050154600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106108f4576108f3611ee2565b5b9060005260206000209060070201600001546115d490919063ffffffff16565b4211610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094c90611f83565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106109a8576109a7611ee2565b5b906000526020600020906007020160010154116109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190611fef565b60405180910390fd5b60001515600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610a4f57610a4e611ee2565b5b906000526020600020906007020160060160009054906101000a900460ff16151514610ab0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa790612081565b60405180910390fd5b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610b0357610b02611ee2565b5b90600052602060002090600702016001015490506000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208381548110610b6a57610b69611ee2565b5b90600052602060002090600702016004015490506000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208481548110610bd157610bd0611ee2565b5b90600052602060002090600702016002015490506000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208581548110610c3857610c37611ee2565b5b90600052602060002090600702016003015490506000610c9f670de0b6b3a7640000610c9185610c8386610c758a8c6115ea90919063ffffffff16565b6115ea90919063ffffffff16565b61160090919063ffffffff16565b61160090919063ffffffff16565b90506001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208781548110610cf457610cf3611ee2565b5b906000526020600020906007020160060160006101000a81548160ff021916908315150217905550610d263382611616565b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d582604051610d6c919061195b565b60405180910390a250505050506001808190555050565b610d8b6115cc565b73ffffffffffffffffffffffffffffffffffffffff16610da9611067565b73ffffffffffffffffffffffffffffffffffffffff1614610dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df690611d3f565b60405180910390fd5b6000600b60006101000a81548160ff021916908315150217905550610e226116a9565b565b610e2c6115cc565b73ffffffffffffffffffffffffffffffffffffffff16610e4a611067565b73ffffffffffffffffffffffffffffffffffffffff1614610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9790611d3f565b60405180910390fd5b806008819055507fc21cb0f112058f1eb0e3313a577dfc27e6be5b39127591e05245343a422e4915600854604051610ed8919061195b565b60405180910390a150565b6000600260009054906101000a900460ff16905090565b610f026115cc565b73ffffffffffffffffffffffffffffffffffffffff16610f20611067565b73ffffffffffffffffffffffffffffffffffffffff1614610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90611d3f565b60405180910390fd5b610f80600061174b565b565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60085481565b610fb66115cc565b73ffffffffffffffffffffffffffffffffffffffff16610fd4611067565b73ffffffffffffffffffffffffffffffffffffffff161461102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102190611d3f565b60405180910390fd5b6001600b60006101000a81548160ff02191690831515021790555061104d61180f565b565b600c6020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600260015414156110d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cd90611e56565b60405180910390fd5b60026001819055506110e6610ee3565b15611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d906120ed565b60405180910390fd5b60008111611169576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116090612159565b60405180910390fd5b60003390506000611181670de0b6b3a764000061139b565b9050600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060e00160405280428152602001858152602001600654815260200160075481526020018381526020016008548152602001600015158152509080600181540180825580915050600190039060005260206000209060070201600090919091909150600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff0219169083151502179055505050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8330866040518463ffffffff1660e01b81526004016112e493929190612179565b6020604051808303816000875af1158015611303573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113279190611ddd565b503373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d8460405161136e919061195b565b60405180910390a250506001808190555050565b600b60009054906101000a900460ff1681565b60095481565b6000806000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561140d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114319190612232565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff16915080828561146391906122b4565b61146d919061233d565b92505050919050565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b60055481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114d66115cc565b73ffffffffffffffffffffffffffffffffffffffff166114f4611067565b73ffffffffffffffffffffffffffffffffffffffff161461154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190611d3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b1906123e0565b60405180910390fd5b6115c38161174b565b50565b60075481565b600033905090565b600081836115e29190612400565b905092915050565b600081836115f891906122b4565b905092915050565b6000818361160e919061233d565b905092915050565b600260019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff1660e01b8152600401611673929190611d88565b600060405180830381600087803b15801561168d57600080fd5b505af11580156116a1573d6000803e3d6000fd5b505050505050565b6116b1610ee3565b6116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e7906124a2565b60405180910390fd5b6000600260006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6117346115cc565b6040516117419190611c8b565b60405180910390a1565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611817610ee3565b15611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e906120ed565b60405180910390fd5b6001600260006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861189b6115cc565b6040516118a89190611c8b565b60405180910390a1565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118e2826118b7565b9050919050565b6118f2816118d7565b81146118fd57600080fd5b50565b60008135905061190f816118e9565b92915050565b60006020828403121561192b5761192a6118b2565b5b600061193984828501611900565b91505092915050565b6000819050919050565b61195581611942565b82525050565b6000602082019050611970600083018461194c565b92915050565b61197f81611942565b811461198a57600080fd5b50565b60008135905061199c81611976565b92915050565b600080604083850312156119b9576119b86118b2565b5b60006119c78582860161198d565b92505060206119d88582860161198d565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611a1781611942565b82525050565b60008115159050919050565b611a3281611a1d565b82525050565b60e082016000820151611a4e6000850182611a0e565b506020820151611a616020850182611a0e565b506040820151611a746040850182611a0e565b506060820151611a876060850182611a0e565b506080820151611a9a6080850182611a0e565b5060a0820151611aad60a0850182611a0e565b5060c0820151611ac060c0850182611a29565b50505050565b6000611ad28383611a38565b60e08301905092915050565b6000602082019050919050565b6000611af6826119e2565b611b0081856119ed565b9350611b0b836119fe565b8060005b83811015611b3c578151611b238882611ac6565b9750611b2e83611ade565b925050600181019050611b0f565b5085935050505092915050565b60006020820190508181036000830152611b638184611aeb565b905092915050565b60008060408385031215611b8257611b816118b2565b5b6000611b9085828601611900565b9250506020611ba18582860161198d565b9150509250929050565b600060208284031215611bc157611bc06118b2565b5b6000611bcf8482850161198d565b91505092915050565b611be181611a1d565b82525050565b6000602082019050611bfc6000830184611bd8565b92915050565b6000819050919050565b6000611c27611c22611c1d846118b7565b611c02565b6118b7565b9050919050565b6000611c3982611c0c565b9050919050565b6000611c4b82611c2e565b9050919050565b611c5b81611c40565b82525050565b6000602082019050611c766000830184611c52565b92915050565b611c85816118d7565b82525050565b6000602082019050611ca06000830184611c7c565b92915050565b6000611cb182611c2e565b9050919050565b611cc181611ca6565b82525050565b6000602082019050611cdc6000830184611cb8565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611d29602083611ce2565b9150611d3482611cf3565b602082019050919050565b60006020820190508181036000830152611d5881611d1c565b9050919050565b6000604082019050611d74600083018561194c565b611d81602083018461194c565b9392505050565b6000604082019050611d9d6000830185611c7c565b611daa602083018461194c565b9392505050565b611dba81611a1d565b8114611dc557600080fd5b50565b600081519050611dd781611db1565b92915050565b600060208284031215611df357611df26118b2565b5b6000611e0184828501611dc8565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000611e40601f83611ce2565b9150611e4b82611e0a565b602082019050919050565b60006020820190508181036000830152611e6f81611e33565b9050919050565b7f4465706f73697420646f6573206e6f7420657869737400000000000000000000600082015250565b6000611eac601683611ce2565b9150611eb782611e76565b602082019050919050565b60006020820190508181036000830152611edb81611e9f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f76657374696e6720706572696f6420686173206e6f742070617373656420796560008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000611f6d602183611ce2565b9150611f7882611f11565b604082019050919050565b60006020820190508181036000830152611f9c81611f60565b9050919050565b7f5468657265206973206e6f7468696e6720746f20776974686472617700000000600082015250565b6000611fd9601c83611ce2565b9150611fe482611fa3565b602082019050919050565b6000602082019050818103600083015261200881611fcc565b9050919050565b7f5468697320626f6e642068617320616c7265616479206265656e20776974686460008201527f7261776e00000000000000000000000000000000000000000000000000000000602082015250565b600061206b602483611ce2565b91506120768261200f565b604082019050919050565b6000602082019050818103600083015261209a8161205e565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006120d7601083611ce2565b91506120e2826120a1565b602082019050919050565b60006020820190508181036000830152612106816120ca565b9050919050565b7f43616e6e6f74207374616b652030000000000000000000000000000000000000600082015250565b6000612143600e83611ce2565b915061214e8261210d565b602082019050919050565b6000602082019050818103600083015261217281612136565b9050919050565b600060608201905061218e6000830186611c7c565b61219b6020830185611c7c565b6121a8604083018461194c565b949350505050565b60006dffffffffffffffffffffffffffff82169050919050565b6121d3816121b0565b81146121de57600080fd5b50565b6000815190506121f0816121ca565b92915050565b600063ffffffff82169050919050565b61220f816121f6565b811461221a57600080fd5b50565b60008151905061222c81612206565b92915050565b60008060006060848603121561224b5761224a6118b2565b5b6000612259868287016121e1565b935050602061226a868287016121e1565b925050604061227b8682870161221d565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006122bf82611942565b91506122ca83611942565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561230357612302612285565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061234882611942565b915061235383611942565b9250826123635761236261230e565b5b828204905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006123ca602683611ce2565b91506123d58261236e565b604082019050919050565b600060208201905081810360008301526123f9816123bd565b9050919050565b600061240b82611942565b915061241683611942565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561244b5761244a612285565b5b828201905092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061248c601483611ce2565b915061249782612456565b602082019050919050565b600060208201905081810360008301526124bb8161247f565b905091905056fea264697066735822122003e6b0ba5d271104699813015706259eb599a7da82edad65453fca2040876c0464736f6c634300080c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000039317b8a1ae06c30bb615d88cdc5522781499f1c000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000e5d6fc7323d74ad440ca53d3e53252427ad632ed000000000000000000000000000000000000000000000000000000000000005a00000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000069780
-----Decoded View---------------
Arg [0] : _rewardsToken (address): 0x39317B8A1aE06C30bb615d88CDC5522781499f1c
Arg [1] : _stakingToken (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
Arg [2] : _brainWETHUniswapPair (address): 0xe5D6Fc7323D74AD440CA53d3e53252427Ad632ED
Arg [3] : _discountRateNumerator (uint256): 90
Arg [4] : _discountRateDenominator (uint256): 100
Arg [5] : _vestingPeriod (uint256): 432000
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 00000000000000000000000039317b8a1ae06c30bb615d88cdc5522781499f1c
Arg [1] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [2] : 000000000000000000000000e5d6fc7323d74ad440ca53d3e53252427ad632ed
Arg [3] : 000000000000000000000000000000000000000000000000000000000000005a
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [5] : 0000000000000000000000000000000000000000000000000000000000069780
Deployed Bytecode Sourcemap
15307:5869:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16159:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20528:320;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17372:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20856:114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15609:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18546:1638;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20978:95;;;:::i;:::-;;20352:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8962:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7158:103;;;:::i;:::-;;15493:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15704:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21082:88;;;:::i;:::-;;16095:57;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6507:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17841:697;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15817:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15739:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17530:248;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15460:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15775:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15575:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15526:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7416:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15652:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16159:42;;;;;;;;;;;;;;;;;:::o;20528:320::-;6738:12;:10;:12::i;:::-;6727:23;;:7;:5;:7::i;:::-;:23;;;6719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20672:22:::1;20648:21;:46;;;;20731:24;20705:23;:50;;;;20773:67;20793:21;;20816:23;;20773:67;;;;;;;:::i;:::-;;;;;;;;20528:320:::0;;:::o;17372:150::-;17427:16;17455:18;17476:9;:17;17486:6;17476:17;;;;;;;;;;;;;;;17455:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17512:1;17504:10;;;17372:150;;;:::o;20856:114::-;6738:12;:10;:12::i;:::-;6727:23;;:7;:5;:7::i;:::-;:23;;;6719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20929:12:::1;;;;;;;;;;;:21;;;20951:2;20955:6;20929:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20856:114:::0;;:::o;15609:36::-;;;;:::o;18546:1638::-;11804:1;12402:7;;:19;;12394:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;11804:1;12535:7;:18;;;;18660:2:::1;18629:9;:21;18639:10;18629:21;;;;;;;;;;;;;;;:28;;;;:33;18607:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;18764:79;18803:9;:21;18813:10;18803:21;;;;;;;;;;;;;;;18825:2;18803:25;;;;;;;;:::i;:::-;;;;;;;;;;;;:39;;;18764:9;:21;18774:10;18764:21;;;;;;;;;;;;;;;18786:2;18764:25;;;;;;;;:::i;:::-;;;;;;;;;;;;:34;;;:38;;:79;;;;:::i;:::-;18746:15;:97;18724:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;18975:1;18937:9;:21;18947:10;18937:21;;;;;;;;;;;;;;;18959:2;18937:25;;;;;;;;:::i;:::-;;;;;;;;;;;;:35;;;:39;18915:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;19106:5;19065:46;;:9;:21;19075:10;19065:21;;;;;;;;;;;;;;;19087:2;19065:25;;;;;;;;:::i;:::-;;;;;;;;;;;;:37;;;;;;;;;;;;:46;;;19043:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;19188:14;19205:9;:21;19215:10;19205:21;;;;;;;;;;;;;;;19227:2;19205:25;;;;;;;;:::i;:::-;;;;;;;;;;;;:35;;;19188:52;;19251:23;19277:9;:21;19287:10;19277:21;;;;;;;;;;;;;;;19299:2;19277:25;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;19251:64;;19326:20;19349:9;:21;19359:10;19349:21;;;;;;;;;;;;;;;19371:2;19349:25;;;;;;;;:::i;:::-;;;;;;;;;;;;:43;;;19326:66;;19403:22;19428:9;:21;19438:10;19428:21;;;;;;;;;;;;;;;19450:2;19428:25;;;;;;;;:::i;:::-;;;;;;;;;;;;:45;;;19403:70;;19748:21;19772:77;19842:6;19772:65;19824:12;19772:47;19804:14;19772:27;19783:15;19772:6;:10;;:27;;;;:::i;:::-;:31;;:47;;;;:::i;:::-;:51;;:65;;;;:::i;:::-;:69;;:77;;;;:::i;:::-;19748:101;;19954:4;19914:9;:21;19924:10;19914:21;;;;;;;;;;;;;;;19936:2;19914:25;;;;;;;;:::i;:::-;;;;;;;;;;;;:37;;;:44;;;;;;;;;;;;;;;;;;20093:31;20098:10;20110:13;20093:4;:31::i;:::-;20150:10;20140:36;;;20162:13;20140:36;;;;;;:::i;:::-;;;;;;;;18596:1588;;;;;11760:1:::0;12714:7;:22;;;;18546:1638;:::o;20978:95::-;6738:12;:10;:12::i;:::-;6727:23;;:7;:5;:7::i;:::-;:23;;;6719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21038:5:::1;21027:8;;:16;;;;;;;;;;;;;;;;;;21054:10;:8;:10::i;:::-;20978:95::o:0;20352:168::-;6738:12;:10;:12::i;:::-;6727:23;;:7;:5;:7::i;:::-;:23;;;6719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20447:14:::1;20431:13;:30;;;;20477:35;20498:13;;20477:35;;;;;;:::i;:::-;;;;;;;;20352:168:::0;:::o;8962:86::-;9009:4;9033:7;;;;;;;;;;;9026:14;;8962:86;:::o;7158:103::-;6738:12;:10;:12::i;:::-;6727:23;;:7;:5;:7::i;:::-;:23;;;6719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7223:30:::1;7250:1;7223:18;:30::i;:::-;7158:103::o:0;15493:26::-;;;;;;;;;;;;;:::o;15704:28::-;;;;:::o;21082:88::-;6738:12;:10;:12::i;:::-;6727:23;;:7;:5;:7::i;:::-;:23;;;6719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21139:4:::1;21128:8;;:15;;;;;;;;;;;;;;;;;;21154:8;:6;:8::i;:::-;21082:88::o:0;16095:57::-;;;;;;;;;;;;;;;;;:::o;6507:87::-;6553:7;6580:6;;;;;;;;;;;6573:13;;6507:87;:::o;17841:697::-;11804:1;12402:7;;:19;;12394:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;11804:1;12535:7;:18;;;;9288:8:::1;:6;:8::i;:::-;9287:9;9279:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;17935:1:::2;17926:6;:10;17918:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;17966:14;17983:10;17966:27;;18050;18080:21;18094:6;18080:13;:21::i;:::-;18050:51;;18114:9;:17;18124:6;18114:17;;;;;;;;;;;;;;;18151:257;;;;;;;;18177:15;18151:257;;;;18211:6;18151:257;;;;18236:21;;18151:257;;;;18276:23;;18151:257;;;;18318:19;18151:257;;;;18356:13;;18151:257;;;;18388:5;18151:257;;;;::::0;18114:305:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18432:12;;;;;;;;;;;:25;;;18458:6;18474:4;18481:6;18432:56;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18511:10;18504:26;;;18523:6;18504:26;;;;;;:::i;:::-;;;;;;;;17907:631;;11760:1:::0;12714:7;:22;;;;17841:697;:::o;15817:20::-;;;;;;;;;;;;;:::o;15739:29::-;;;;:::o;17530:248::-;17590:7;17610:9;17621;17635:20;;;;;;;;;;;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17609:60;;;;;;;;;17703:4;17697;17690:6;:11;;;;:::i;:::-;17689:18;;;;:::i;:::-;17682:26;;;;17530:248;;;:::o;15460:26::-;;;;;;;;;;;;;:::o;15775:35::-;;;;:::o;15575:27::-;;;;:::o;15526:42::-;;;;;;;;;;;;;:::o;7416:201::-;6738:12;:10;:12::i;:::-;6727:23;;:7;:5;:7::i;:::-;:23;;;6719:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7525:1:::1;7505:22;;:8;:22;;;;7497:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7581:28;7600:8;7581:18;:28::i;:::-;7416:201:::0;:::o;15652:38::-;;;;:::o;5881:98::-;5934:7;5961:10;5954:17;;5881:98;:::o;14133:::-;14191:7;14222:1;14218;:5;;;;:::i;:::-;14211:12;;14133:98;;;;:::o;14345:::-;14403:7;14434:1;14430;:5;;;;:::i;:::-;14423:12;;14345:98;;;;:::o;14451:::-;14509:7;14540:1;14536;:5;;;;:::i;:::-;14529:12;;14451:98;;;;:::o;20192:::-;20253:12;;;;;;;;;;;:17;;;20271:2;20275:6;20253:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20192:98;;:::o;10021:120::-;9565:8;:6;:8::i;:::-;9557:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;10090:5:::1;10080:7;;:15;;;;;;;;;;;;;;;;;;10111:22;10120:12;:10;:12::i;:::-;10111:22;;;;;;:::i;:::-;;;;;;;;10021:120::o:0;7777:191::-;7851:16;7870:6;;;;;;;;;;;7851:25;;7896:8;7887:6;;:17;;;;;;;;;;;;;;;;;;7951:8;7920:40;;7941:8;7920:40;;;;;;;;;;;;7840:128;7777:191;:::o;9762:118::-;9288:8;:6;:8::i;:::-;9287:9;9279:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;9832:4:::1;9822:7;;:14;;;;;;;;;;;;;;;;;;9852:20;9859:12;:10;:12::i;:::-;9852:20;;;;;;:::i;:::-;;;;;;;;9762:118::o:0;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:222::-;1476:4;1514:2;1503:9;1499:18;1491:26;;1527:71;1595:1;1584:9;1580:17;1571:6;1527:71;:::i;:::-;1383:222;;;;:::o;1611:122::-;1684:24;1702:5;1684:24;:::i;:::-;1677:5;1674:35;1664:63;;1723:1;1720;1713:12;1664:63;1611:122;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:474::-;1952:6;1960;2009:2;1997:9;1988:7;1984:23;1980:32;1977:119;;;2015:79;;:::i;:::-;1977:119;2135:1;2160:53;2205:7;2196:6;2185:9;2181:22;2160:53;:::i;:::-;2150:63;;2106:117;2262:2;2288:53;2333:7;2324:6;2313:9;2309:22;2288:53;:::i;:::-;2278:63;;2233:118;1884:474;;;;;:::o;2364:138::-;2455:6;2489:5;2483:12;2473:22;;2364:138;;;:::o;2508:208::-;2631:11;2665:6;2660:3;2653:19;2705:4;2700:3;2696:14;2681:29;;2508:208;;;;:::o;2722:156::-;2813:4;2836:3;2828:11;;2866:4;2861:3;2857:14;2849:22;;2722:156;;;:::o;2884:108::-;2961:24;2979:5;2961:24;:::i;:::-;2956:3;2949:37;2884:108;;:::o;2998:90::-;3032:7;3075:5;3068:13;3061:21;3050:32;;2998:90;;;:::o;3094:99::-;3165:21;3180:5;3165:21;:::i;:::-;3160:3;3153:34;3094:99;;:::o;3255:1420::-;3390:4;3385:3;3381:14;3481:4;3474:5;3470:16;3464:23;3500:63;3557:4;3552:3;3548:14;3534:12;3500:63;:::i;:::-;3405:168;3660:4;3653:5;3649:16;3643:23;3679:63;3736:4;3731:3;3727:14;3713:12;3679:63;:::i;:::-;3583:169;3847:4;3840:5;3836:16;3830:23;3866:63;3923:4;3918:3;3914:14;3900:12;3866:63;:::i;:::-;3762:177;4036:4;4029:5;4025:16;4019:23;4055:63;4112:4;4107:3;4103:14;4089:12;4055:63;:::i;:::-;3949:179;4218:4;4211:5;4207:16;4201:23;4237:63;4294:4;4289:3;4285:14;4271:12;4237:63;:::i;:::-;4138:172;4401:4;4394:5;4390:16;4384:23;4420:63;4477:4;4472:3;4468:14;4454:12;4420:63;:::i;:::-;4320:173;4582:4;4575:5;4571:16;4565:23;4601:57;4652:4;4647:3;4643:14;4629:12;4601:57;:::i;:::-;4503:165;3359:1316;3255:1420;;:::o;4681:275::-;4798:10;4819:94;4909:3;4901:6;4819:94;:::i;:::-;4945:4;4940:3;4936:14;4922:28;;4681:275;;;;:::o;4962:137::-;5056:4;5088;5083:3;5079:14;5071:22;;4962:137;;;:::o;5165:924::-;5332:3;5361:78;5433:5;5361:78;:::i;:::-;5455:110;5558:6;5553:3;5455:110;:::i;:::-;5448:117;;5589:80;5663:5;5589:80;:::i;:::-;5692:7;5723:1;5708:356;5733:6;5730:1;5727:13;5708:356;;;5809:6;5803:13;5836:111;5943:3;5928:13;5836:111;:::i;:::-;5829:118;;5970:84;6047:6;5970:84;:::i;:::-;5960:94;;5768:296;5755:1;5752;5748:9;5743:14;;5708:356;;;5712:14;6080:3;6073:10;;5337:752;;;5165:924;;;;:::o;6095:469::-;6286:4;6324:2;6313:9;6309:18;6301:26;;6373:9;6367:4;6363:20;6359:1;6348:9;6344:17;6337:47;6401:156;6552:4;6543:6;6401:156;:::i;:::-;6393:164;;6095:469;;;;:::o;6570:474::-;6638:6;6646;6695:2;6683:9;6674:7;6670:23;6666:32;6663:119;;;6701:79;;:::i;:::-;6663:119;6821:1;6846:53;6891:7;6882:6;6871:9;6867:22;6846:53;:::i;:::-;6836:63;;6792:117;6948:2;6974:53;7019:7;7010:6;6999:9;6995:22;6974:53;:::i;:::-;6964:63;;6919:118;6570:474;;;;;:::o;7050:329::-;7109:6;7158:2;7146:9;7137:7;7133:23;7129:32;7126:119;;;7164:79;;:::i;:::-;7126:119;7284:1;7309:53;7354:7;7345:6;7334:9;7330:22;7309:53;:::i;:::-;7299:63;;7255:117;7050:329;;;;:::o;7385:109::-;7466:21;7481:5;7466:21;:::i;:::-;7461:3;7454:34;7385:109;;:::o;7500:210::-;7587:4;7625:2;7614:9;7610:18;7602:26;;7638:65;7700:1;7689:9;7685:17;7676:6;7638:65;:::i;:::-;7500:210;;;;:::o;7716:60::-;7744:3;7765:5;7758:12;;7716:60;;;:::o;7782:142::-;7832:9;7865:53;7883:34;7892:24;7910:5;7892:24;:::i;:::-;7883:34;:::i;:::-;7865:53;:::i;:::-;7852:66;;7782:142;;;:::o;7930:126::-;7980:9;8013:37;8044:5;8013:37;:::i;:::-;8000:50;;7930:126;;;:::o;8062:139::-;8125:9;8158:37;8189:5;8158:37;:::i;:::-;8145:50;;8062:139;;;:::o;8207:157::-;8307:50;8351:5;8307:50;:::i;:::-;8302:3;8295:63;8207:157;;:::o;8370:248::-;8476:4;8514:2;8503:9;8499:18;8491:26;;8527:84;8608:1;8597:9;8593:17;8584:6;8527:84;:::i;:::-;8370:248;;;;:::o;8624:118::-;8711:24;8729:5;8711:24;:::i;:::-;8706:3;8699:37;8624:118;;:::o;8748:222::-;8841:4;8879:2;8868:9;8864:18;8856:26;;8892:71;8960:1;8949:9;8945:17;8936:6;8892:71;:::i;:::-;8748:222;;;;:::o;8976:148::-;9048:9;9081:37;9112:5;9081:37;:::i;:::-;9068:50;;8976:148;;;:::o;9130:175::-;9239:59;9292:5;9239:59;:::i;:::-;9234:3;9227:72;9130:175;;:::o;9311:266::-;9426:4;9464:2;9453:9;9449:18;9441:26;;9477:93;9567:1;9556:9;9552:17;9543:6;9477:93;:::i;:::-;9311:266;;;;:::o;9583:169::-;9667:11;9701:6;9696:3;9689:19;9741:4;9736:3;9732:14;9717:29;;9583:169;;;;:::o;9758:182::-;9898:34;9894:1;9886:6;9882:14;9875:58;9758:182;:::o;9946:366::-;10088:3;10109:67;10173:2;10168:3;10109:67;:::i;:::-;10102:74;;10185:93;10274:3;10185:93;:::i;:::-;10303:2;10298:3;10294:12;10287:19;;9946:366;;;:::o;10318:419::-;10484:4;10522:2;10511:9;10507:18;10499:26;;10571:9;10565:4;10561:20;10557:1;10546:9;10542:17;10535:47;10599:131;10725:4;10599:131;:::i;:::-;10591:139;;10318:419;;;:::o;10743:332::-;10864:4;10902:2;10891:9;10887:18;10879:26;;10915:71;10983:1;10972:9;10968:17;10959:6;10915:71;:::i;:::-;10996:72;11064:2;11053:9;11049:18;11040:6;10996:72;:::i;:::-;10743:332;;;;;:::o;11081:::-;11202:4;11240:2;11229:9;11225:18;11217:26;;11253:71;11321:1;11310:9;11306:17;11297:6;11253:71;:::i;:::-;11334:72;11402:2;11391:9;11387:18;11378:6;11334:72;:::i;:::-;11081:332;;;;;:::o;11419:116::-;11489:21;11504:5;11489:21;:::i;:::-;11482:5;11479:32;11469:60;;11525:1;11522;11515:12;11469:60;11419:116;:::o;11541:137::-;11595:5;11626:6;11620:13;11611:22;;11642:30;11666:5;11642:30;:::i;:::-;11541:137;;;;:::o;11684:345::-;11751:6;11800:2;11788:9;11779:7;11775:23;11771:32;11768:119;;;11806:79;;:::i;:::-;11768:119;11926:1;11951:61;12004:7;11995:6;11984:9;11980:22;11951:61;:::i;:::-;11941:71;;11897:125;11684:345;;;;:::o;12035:181::-;12175:33;12171:1;12163:6;12159:14;12152:57;12035:181;:::o;12222:366::-;12364:3;12385:67;12449:2;12444:3;12385:67;:::i;:::-;12378:74;;12461:93;12550:3;12461:93;:::i;:::-;12579:2;12574:3;12570:12;12563:19;;12222:366;;;:::o;12594:419::-;12760:4;12798:2;12787:9;12783:18;12775:26;;12847:9;12841:4;12837:20;12833:1;12822:9;12818:17;12811:47;12875:131;13001:4;12875:131;:::i;:::-;12867:139;;12594:419;;;:::o;13019:172::-;13159:24;13155:1;13147:6;13143:14;13136:48;13019:172;:::o;13197:366::-;13339:3;13360:67;13424:2;13419:3;13360:67;:::i;:::-;13353:74;;13436:93;13525:3;13436:93;:::i;:::-;13554:2;13549:3;13545:12;13538:19;;13197:366;;;:::o;13569:419::-;13735:4;13773:2;13762:9;13758:18;13750:26;;13822:9;13816:4;13812:20;13808:1;13797:9;13793:17;13786:47;13850:131;13976:4;13850:131;:::i;:::-;13842:139;;13569:419;;;:::o;13994:180::-;14042:77;14039:1;14032:88;14139:4;14136:1;14129:15;14163:4;14160:1;14153:15;14180:220;14320:34;14316:1;14308:6;14304:14;14297:58;14389:3;14384:2;14376:6;14372:15;14365:28;14180:220;:::o;14406:366::-;14548:3;14569:67;14633:2;14628:3;14569:67;:::i;:::-;14562:74;;14645:93;14734:3;14645:93;:::i;:::-;14763:2;14758:3;14754:12;14747:19;;14406:366;;;:::o;14778:419::-;14944:4;14982:2;14971:9;14967:18;14959:26;;15031:9;15025:4;15021:20;15017:1;15006:9;15002:17;14995:47;15059:131;15185:4;15059:131;:::i;:::-;15051:139;;14778:419;;;:::o;15203:178::-;15343:30;15339:1;15331:6;15327:14;15320:54;15203:178;:::o;15387:366::-;15529:3;15550:67;15614:2;15609:3;15550:67;:::i;:::-;15543:74;;15626:93;15715:3;15626:93;:::i;:::-;15744:2;15739:3;15735:12;15728:19;;15387:366;;;:::o;15759:419::-;15925:4;15963:2;15952:9;15948:18;15940:26;;16012:9;16006:4;16002:20;15998:1;15987:9;15983:17;15976:47;16040:131;16166:4;16040:131;:::i;:::-;16032:139;;15759:419;;;:::o;16184:223::-;16324:34;16320:1;16312:6;16308:14;16301:58;16393:6;16388:2;16380:6;16376:15;16369:31;16184:223;:::o;16413:366::-;16555:3;16576:67;16640:2;16635:3;16576:67;:::i;:::-;16569:74;;16652:93;16741:3;16652:93;:::i;:::-;16770:2;16765:3;16761:12;16754:19;;16413:366;;;:::o;16785:419::-;16951:4;16989:2;16978:9;16974:18;16966:26;;17038:9;17032:4;17028:20;17024:1;17013:9;17009:17;17002:47;17066:131;17192:4;17066:131;:::i;:::-;17058:139;;16785:419;;;:::o;17210:166::-;17350:18;17346:1;17338:6;17334:14;17327:42;17210:166;:::o;17382:366::-;17524:3;17545:67;17609:2;17604:3;17545:67;:::i;:::-;17538:74;;17621:93;17710:3;17621:93;:::i;:::-;17739:2;17734:3;17730:12;17723:19;;17382:366;;;:::o;17754:419::-;17920:4;17958:2;17947:9;17943:18;17935:26;;18007:9;18001:4;17997:20;17993:1;17982:9;17978:17;17971:47;18035:131;18161:4;18035:131;:::i;:::-;18027:139;;17754:419;;;:::o;18179:164::-;18319:16;18315:1;18307:6;18303:14;18296:40;18179:164;:::o;18349:366::-;18491:3;18512:67;18576:2;18571:3;18512:67;:::i;:::-;18505:74;;18588:93;18677:3;18588:93;:::i;:::-;18706:2;18701:3;18697:12;18690:19;;18349:366;;;:::o;18721:419::-;18887:4;18925:2;18914:9;18910:18;18902:26;;18974:9;18968:4;18964:20;18960:1;18949:9;18945:17;18938:47;19002:131;19128:4;19002:131;:::i;:::-;18994:139;;18721:419;;;:::o;19146:442::-;19295:4;19333:2;19322:9;19318:18;19310:26;;19346:71;19414:1;19403:9;19399:17;19390:6;19346:71;:::i;:::-;19427:72;19495:2;19484:9;19480:18;19471:6;19427:72;:::i;:::-;19509;19577:2;19566:9;19562:18;19553:6;19509:72;:::i;:::-;19146:442;;;;;;:::o;19594:114::-;19631:7;19671:30;19664:5;19660:42;19649:53;;19594:114;;;:::o;19714:122::-;19787:24;19805:5;19787:24;:::i;:::-;19780:5;19777:35;19767:63;;19826:1;19823;19816:12;19767:63;19714:122;:::o;19842:143::-;19899:5;19930:6;19924:13;19915:22;;19946:33;19973:5;19946:33;:::i;:::-;19842:143;;;;:::o;19991:93::-;20027:7;20067:10;20060:5;20056:22;20045:33;;19991:93;;;:::o;20090:120::-;20162:23;20179:5;20162:23;:::i;:::-;20155:5;20152:34;20142:62;;20200:1;20197;20190:12;20142:62;20090:120;:::o;20216:141::-;20272:5;20303:6;20297:13;20288:22;;20319:32;20345:5;20319:32;:::i;:::-;20216:141;;;;:::o;20363:661::-;20450:6;20458;20466;20515:2;20503:9;20494:7;20490:23;20486:32;20483:119;;;20521:79;;:::i;:::-;20483:119;20641:1;20666:64;20722:7;20713:6;20702:9;20698:22;20666:64;:::i;:::-;20656:74;;20612:128;20779:2;20805:64;20861:7;20852:6;20841:9;20837:22;20805:64;:::i;:::-;20795:74;;20750:129;20918:2;20944:63;20999:7;20990:6;20979:9;20975:22;20944:63;:::i;:::-;20934:73;;20889:128;20363:661;;;;;:::o;21030:180::-;21078:77;21075:1;21068:88;21175:4;21172:1;21165:15;21199:4;21196:1;21189:15;21216:348;21256:7;21279:20;21297:1;21279:20;:::i;:::-;21274:25;;21313:20;21331:1;21313:20;:::i;:::-;21308:25;;21501:1;21433:66;21429:74;21426:1;21423:81;21418:1;21411:9;21404:17;21400:105;21397:131;;;21508:18;;:::i;:::-;21397:131;21556:1;21553;21549:9;21538:20;;21216:348;;;;:::o;21570:180::-;21618:77;21615:1;21608:88;21715:4;21712:1;21705:15;21739:4;21736:1;21729:15;21756:185;21796:1;21813:20;21831:1;21813:20;:::i;:::-;21808:25;;21847:20;21865:1;21847:20;:::i;:::-;21842:25;;21886:1;21876:35;;21891:18;;:::i;:::-;21876:35;21933:1;21930;21926:9;21921:14;;21756:185;;;;:::o;21947:225::-;22087:34;22083:1;22075:6;22071:14;22064:58;22156:8;22151:2;22143:6;22139:15;22132:33;21947:225;:::o;22178:366::-;22320:3;22341:67;22405:2;22400:3;22341:67;:::i;:::-;22334:74;;22417:93;22506:3;22417:93;:::i;:::-;22535:2;22530:3;22526:12;22519:19;;22178:366;;;:::o;22550:419::-;22716:4;22754:2;22743:9;22739:18;22731:26;;22803:9;22797:4;22793:20;22789:1;22778:9;22774:17;22767:47;22831:131;22957:4;22831:131;:::i;:::-;22823:139;;22550:419;;;:::o;22975:305::-;23015:3;23034:20;23052:1;23034:20;:::i;:::-;23029:25;;23068:20;23086:1;23068:20;:::i;:::-;23063:25;;23222:1;23154:66;23150:74;23147:1;23144:81;23141:107;;;23228:18;;:::i;:::-;23141:107;23272:1;23269;23265:9;23258:16;;22975:305;;;;:::o;23286:170::-;23426:22;23422:1;23414:6;23410:14;23403:46;23286:170;:::o;23462:366::-;23604:3;23625:67;23689:2;23684:3;23625:67;:::i;:::-;23618:74;;23701:93;23790:3;23701:93;:::i;:::-;23819:2;23814:3;23810:12;23803:19;;23462:366;;;:::o;23834:419::-;24000:4;24038:2;24027:9;24023:18;24015:26;;24087:9;24081:4;24077:20;24073:1;24062:9;24058:17;24051:47;24115:131;24241:4;24115:131;:::i;:::-;24107:139;;23834:419;;;:::o
Swarm Source
ipfs://03e6b0ba5d271104699813015706259eb599a7da82edad65453fca2040876c04
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.