Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Latest 25 from a total of 593 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Update Compound ... | 20150678 | 647 days ago | IN | 0 ETH | 0.00014472 | ||||
| Update Compound ... | 19671502 | 714 days ago | IN | 0 ETH | 0.00050656 | ||||
| Update Compound ... | 19513037 | 737 days ago | IN | 0 ETH | 0.00460782 | ||||
| Update Compound ... | 19222592 | 777 days ago | IN | 0 ETH | 0.00150523 | ||||
| Update Compound ... | 19179747 | 783 days ago | IN | 0 ETH | 0.0031221 | ||||
| Update Compound ... | 19172615 | 784 days ago | IN | 0 ETH | 0.0017345 | ||||
| Update Compound ... | 19165490 | 785 days ago | IN | 0 ETH | 0.00125712 | ||||
| Update Compound ... | 19158380 | 786 days ago | IN | 0 ETH | 0.00090493 | ||||
| Update Compound ... | 19151273 | 787 days ago | IN | 0 ETH | 0.00111008 | ||||
| Update Compound ... | 19144176 | 788 days ago | IN | 0 ETH | 0.00083808 | ||||
| Update Compound ... | 19137017 | 789 days ago | IN | 0 ETH | 0.00153142 | ||||
| Update Compound ... | 19129915 | 790 days ago | IN | 0 ETH | 0.00146664 | ||||
| Update Compound ... | 19122785 | 791 days ago | IN | 0 ETH | 0.00133133 | ||||
| Update Compound ... | 19115703 | 792 days ago | IN | 0 ETH | 0.00159574 | ||||
| Update Compound ... | 19108472 | 793 days ago | IN | 0 ETH | 0.0006938 | ||||
| Update Compound ... | 19101334 | 794 days ago | IN | 0 ETH | 0.00062442 | ||||
| Update Compound ... | 19094208 | 795 days ago | IN | 0 ETH | 0.00083256 | ||||
| Update Compound ... | 19087067 | 796 days ago | IN | 0 ETH | 0.00131822 | ||||
| Update Compound ... | 19079929 | 797 days ago | IN | 0 ETH | 0.00076318 | ||||
| Update Compound ... | 19072788 | 798 days ago | IN | 0 ETH | 0.00076318 | ||||
| Update Compound ... | 19065671 | 799 days ago | IN | 0 ETH | 0.00076318 | ||||
| Update Compound ... | 19058587 | 800 days ago | IN | 0 ETH | 0.00083668 | ||||
| Update Compound ... | 19044349 | 802 days ago | IN | 0 ETH | 0.00126954 | ||||
| Update Compound ... | 19037941 | 803 days ago | IN | 0 ETH | 0.00175175 | ||||
| Update Compound ... | 19030033 | 804 days ago | IN | 0 ETH | 0.00235892 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
MetaxStaking
Compiler Version
v0.7.0+commit.9e61f92b
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-07-04
*/
/**
*Submitted for verification at BscScan.com on 2021-07-12
*/
pragma solidity ^0.7.0;
library DSMath {
/// @dev github.com/makerdao/dss implementation
/// of exponentiation by squaring
// nth power of x mod b
function rpow(uint x, uint n, uint b) internal pure returns (uint z) {
assembly {
switch x case 0 {switch n case 0 {z := b} default {z := 0}}
default {
switch mod(n, 2) case 0 { z := b } default { z := x }
let half := div(b, 2) // for rounding.
for { n := div(n, 2) } n { n := div(n,2) } {
let xx := mul(x, x)
if iszero(eq(div(xx, x), x)) { revert(0,0) }
let xxRound := add(xx, half)
if lt(xxRound, xx) { revert(0,0) }
x := div(xxRound, b)
if mod(n,2) {
let zx := mul(z, x)
if and(iszero(iszero(x)), iszero(eq(div(zx, x), z))) { revert(0,0) }
let zxRound := add(zx, half)
if lt(zxRound, zx) { revert(0,0) }
z := div(zxRound, b)
}
}
}
}
}
}
abstract contract Context {
function _msgSender() internal view virtual returns (address payable) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
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 () internal {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
contract CompoundRateKeeper is Ownable {
using SafeMath for uint256;
struct CompoundRate {
uint256 rate;
uint256 lastUpdate;
}
CompoundRate public compoundRate;
constructor () {
compoundRate.rate = 1 * 10 ** 27;
compoundRate.lastUpdate = block.timestamp;
}
function getCurrentRate() view external returns(uint256) {
return compoundRate.rate;
}
function getLastUpdate() view external returns(uint256) {
return compoundRate.lastUpdate;
}
function update(uint256 _interestRate) external onlyOwner returns(uint256) {
uint256 _decimal = 10 ** 27;
uint256 _period = (block.timestamp).sub(compoundRate.lastUpdate);
uint256 _newRate = compoundRate.rate
.mul(DSMath.rpow(_interestRate.add(_decimal), _period, _decimal)).div(_decimal);
compoundRate.rate = _newRate;
compoundRate.lastUpdate = block.timestamp;
return _newRate;
}
}
interface IMetaxStaking {
/**
* @notice Update compound rate
*/
function updateCompoundRate() external;
/**
* @notice Update compound rate timeframe
*/
function updateCompoundRateTimeframe() external;
/**
* @notice Update both compound rates
*/
function updateCompoundRates() external;
/**
* @notice Update compound rate and stake tokens to user balance
* @param _amount Amount to stake
* @param _isTimeframe If true, stake to timeframe structure
*/
function updateCompoundAndStake(uint256 _amount, bool _isTimeframe) external returns (bool);
/**
* @notice Update compound rate and withdraw tokens from contract
* @param _amount Amount to stake
* @param _isTimeframe If true, withdraw from timeframe structure
*/
function updateCompoundAndWithdraw(uint256 _amount, bool _isTimeframe) external returns (bool);
/**
* @notice Stake tokens to user balance
* @param _amount Amount to stake
* @param _isTimeframe If true, stake to timeframe structure
*/
function stake(uint256 _amount, bool _isTimeframe) external returns (bool);
/**
* @notice Withdraw tokens from user balance. Only for timeframe stake
* @param _amount Amount to withdraw
* @param _isTimeframe If true, withdraws from timeframe structure
*/
function withdraw(uint256 _amount, bool _isTimeframe) external returns (bool);
/**
* @notice Returns the staking balance of the user
* @param _isTimeframe If true, return balance from timeframe structure
*/
function getBalance(bool _isTimeframe) external view returns (uint256);
/**
* @notice Set interest rate
*/
function setInterestRate(uint256 _newInterestRate) external;
/**
* @notice Set interest rate timeframe
* @param _newInterestRate New interest rate
*/
function setInterestRateTimeframe(uint256 _newInterestRate) external;
/**
* @notice Set interest rates
* @param _newInterestRateTimeframe New interest rate timeframe
*/
function setInterestRates(uint256 _newInterestRate, uint256 _newInterestRateTimeframe) external;
/**
* @notice Add tokens to contract address to be spent as rewards
* @param _amount Token amount that will be added to contract as reward
*/
function supplyRewardPool(uint256 _amount) external returns (bool);
/**
* @notice Get reward amount for sender address
* @param _isTimeframe If timeframe, calculate reward for user from timeframe structure
*/
function getRewardAmount(bool _isTimeframe) external view returns (uint256);
/**
* @notice Get coefficient. Tokens on the contract / reward to be paid
*/
function monitorSecurityMargin() external view returns (uint256);
}
contract MetaxStaking is IMetaxStaking, Ownable {
using SafeMath for uint;
uint256 constant INTEREST_500_THRESHOLD = 51034942716352291304;
CompoundRateKeeper public compRateKeeper;
CompoundRateKeeper public compRateKeeperTimeframe;
IERC20 public token;
struct Stake {
uint256 amount;
uint256 normalizedAmount;
}
struct StakeTimeframe {
uint256 amount;
uint256 normalizedAmount;
uint256 lastStakeTime;
}
uint256 public interestRate;
uint256 public interestRateTimeframe;
mapping(address => Stake) public userStakes;
mapping(address => StakeTimeframe) public userStakesTimeframe;
uint256 public aggregatedNormalizedStake;
uint256 public aggregatedNormalizedStakeTimeframe;
constructor(address _token, address _compRateKeeper, address _compRateKeeperTimeframe) {
compRateKeeper = CompoundRateKeeper(_compRateKeeper);
compRateKeeperTimeframe = CompoundRateKeeper(_compRateKeeperTimeframe);
token = IERC20(_token);
}
/**
* @notice Update compound rate
*/
function updateCompoundRate() public override {
compRateKeeper.update(interestRate);
}
/**
* @notice Update compound rate timeframe
*/
function updateCompoundRateTimeframe() public override {
compRateKeeperTimeframe.update(interestRateTimeframe);
}
/**
* @notice Update both compound rates
*/
function updateCompoundRates() public override {
updateCompoundRate();
updateCompoundRateTimeframe();
}
/**
* @notice Update compound rate and stake tokens to user balance
* @param _amount Amount to stake
* @param _isTimeframe If true, stake to timeframe structure
*/
function updateCompoundAndStake(uint256 _amount, bool _isTimeframe) external override returns (bool) {
updateCompoundRates();
return stake(_amount, _isTimeframe);
}
/**
* @notice Update compound rate and withdraw tokens from contract
* @param _amount Amount to stake
* @param _isTimeframe If true, withdraw from timeframe structure
*/
function updateCompoundAndWithdraw(uint256 _amount, bool _isTimeframe) external override returns (bool) {
updateCompoundRates();
return withdraw(_amount, _isTimeframe);
}
/**
* @notice Stake tokens to user balance
* @param _amount Amount to stake
* @param _isTimeframe If true, stake to timeframe structure
*/
function stake(uint256 _amount, bool _isTimeframe) public override returns (bool) {
require(_amount > 0, "[E-11]-Invalid value for the stake amount, failed to stake a zero value.");
if (_isTimeframe) {
StakeTimeframe memory _stake = userStakesTimeframe[msg.sender];
uint256 _newAmount = _getBalance(_stake.normalizedAmount, true).add(_amount);
uint256 _newNormalizedAmount = _newAmount.mul(10 ** 27).div(compRateKeeperTimeframe.getCurrentRate());
aggregatedNormalizedStakeTimeframe = aggregatedNormalizedStakeTimeframe.add(_newNormalizedAmount)
.sub(_stake.normalizedAmount);
userStakesTimeframe[msg.sender].amount = _stake.amount.add(_amount);
userStakesTimeframe[msg.sender].normalizedAmount = _newNormalizedAmount;
userStakesTimeframe[msg.sender].lastStakeTime = block.timestamp;
} else {
Stake memory _stake = userStakes[msg.sender];
uint256 _newAmount = _getBalance(_stake.normalizedAmount, false).add(_amount);
uint256 _newNormalizedAmount = _newAmount.mul(10 ** 27).div(compRateKeeper.getCurrentRate());
aggregatedNormalizedStake = aggregatedNormalizedStake.add(_newNormalizedAmount)
.sub(_stake.normalizedAmount);
userStakes[msg.sender].amount = _stake.amount.add(_amount);
userStakes[msg.sender].normalizedAmount = _newNormalizedAmount;
}
require(token.transferFrom(msg.sender, address(this), _amount), "[E-12]-Failed to transfer token.");
return true;
}
/**
* @notice Withdraw tokens from user balance. Only for timeframe stake
* @param _amount Amount to withdraw
* @param _isTimeframe If true, withdraws from timeframe structure
*/
function withdraw(uint256 _amount, bool _isTimeframe) public override returns (bool) {
uint256 _withdrawAmount = _amount;
if (_isTimeframe) {
StakeTimeframe memory _stake = userStakesTimeframe[msg.sender];
uint256 _userAmount = _getBalance(_stake.normalizedAmount, true);
require(_userAmount != 0, "[E-31]-The deposit does not exist, failed to withdraw.");
require(block.timestamp - _stake.lastStakeTime > 180 days, "[E-32]-Funds are not available for withdraw.");
if (_userAmount < _withdrawAmount) _withdrawAmount = _userAmount;
uint256 _newAmount = _userAmount.sub(_withdrawAmount);
uint256 _newNormalizedAmount = _newAmount.mul(10 ** 27).div(compRateKeeperTimeframe.getCurrentRate());
aggregatedNormalizedStakeTimeframe = aggregatedNormalizedStakeTimeframe.add(_newNormalizedAmount)
.sub(_stake.normalizedAmount);
if (_withdrawAmount > _getRewardAmount(_stake.amount, _stake.normalizedAmount, _isTimeframe)) {
userStakesTimeframe[msg.sender].amount = _newAmount;
}
userStakesTimeframe[msg.sender].normalizedAmount = _newNormalizedAmount;
} else {
Stake memory _stake = userStakes[msg.sender];
uint256 _userAmount = _getBalance(_stake.normalizedAmount, false);
require(_userAmount != 0, "[E-33]-The deposit does not exist, failed to withdraw.");
if (_userAmount < _withdrawAmount) _withdrawAmount = _userAmount;
uint256 _newAmount = _getBalance(_stake.normalizedAmount, false).sub(_withdrawAmount);
uint256 _newNormalizedAmount = _newAmount.mul(10 ** 27).div(compRateKeeper.getCurrentRate());
aggregatedNormalizedStake = aggregatedNormalizedStake.add(_newNormalizedAmount)
.sub(_stake.normalizedAmount);
if (_withdrawAmount > _getRewardAmount(_stake.amount, _stake.normalizedAmount, _isTimeframe)) {
userStakes[msg.sender].amount = _newAmount;
}
userStakes[msg.sender].normalizedAmount = _newNormalizedAmount;
}
require(token.transfer(msg.sender, _withdrawAmount), "[E-34]-Failed to transfer token.");
return true;
}
/**
* @notice Returns the staking balance of the user
* @param _isTimeframe If true, return balance from timeframe structure
*/
function getBalance(bool _isTimeframe) public view override returns (uint256) {
if (_isTimeframe) {
return _getBalance(userStakesTimeframe[msg.sender].normalizedAmount, true);
}
return _getBalance(userStakes[msg.sender].normalizedAmount, false);
}
/**
* @notice Returns the staking balance of the user
* @param _normalizedAmount User normalized amount
* @param _isTimeframe If true, return balance from timeframe structure
*/
function _getBalance(uint256 _normalizedAmount, bool _isTimeframe) private view returns (uint256) {
if (_isTimeframe) {
return _normalizedAmount.mul(compRateKeeperTimeframe.getCurrentRate()).div(10 ** 27);
}
return _normalizedAmount.mul(compRateKeeper.getCurrentRate()).div(10 ** 27);
}
/**
* @notice Set interest rate
*/
function setInterestRate(uint256 _newInterestRate) external override onlyOwner {
require(_newInterestRate <= INTEREST_500_THRESHOLD, "[E-202]-Can't be more than 500%.");
updateCompoundRate();
interestRate = _newInterestRate;
}
/**
* @notice Set interest rate timeframe
* @param _newInterestRate New interest rate
*/
function setInterestRateTimeframe(uint256 _newInterestRate) external override onlyOwner {
require(_newInterestRate <= INTEREST_500_THRESHOLD, "[E-211]-Can't be more than 500%.");
updateCompoundRateTimeframe();
interestRateTimeframe = _newInterestRate;
}
/**
* @notice Set interest rates
* @param _newInterestRateTimeframe New interest rate timeframe
*/
function setInterestRates(uint256 _newInterestRate, uint256 _newInterestRateTimeframe) external override onlyOwner {
require(_newInterestRate <= INTEREST_500_THRESHOLD && _newInterestRateTimeframe <= INTEREST_500_THRESHOLD,
"[E-221]-Can't be more than 500%.");
updateCompoundRate();
updateCompoundRateTimeframe();
interestRate = _newInterestRate;
interestRateTimeframe = _newInterestRateTimeframe;
}
/**
* @notice Add tokens to contract address to be spent as rewards
* @param _amount Token amount that will be added to contract as reward
*/
function supplyRewardPool(uint256 _amount) external override onlyOwner returns (bool) {
require(token.transferFrom(msg.sender, address(this), _amount), "[E-231]-Failed to transfer token.");
return true;
}
/**
* @notice Get reward amount for sender address
* @param _isTimeframe If timeframe, calculate reward for user from timeframe structure
*/
function getRewardAmount(bool _isTimeframe) external view override returns (uint256) {
if (_isTimeframe) {
StakeTimeframe memory _stake = userStakesTimeframe[msg.sender];
return _getRewardAmount(_stake.amount, _stake.normalizedAmount, true);
}
Stake memory _stake = userStakes[msg.sender];
return _getRewardAmount(_stake.amount, _stake.normalizedAmount, false);
}
/**
* @notice Get reward amount by params
* @param _amount Token amount
* @param _normalizedAmount Normalized token amount
* @param _isTimeframe If timeframe, calculate reward for user from timeframe structure
*/
function _getRewardAmount(uint256 _amount, uint256 _normalizedAmount, bool _isTimeframe) private view returns (uint256) {
uint256 _balance = 0;
if (_isTimeframe) {
_balance = _getBalance(_normalizedAmount, _isTimeframe);
} else {
_balance = _getBalance(_normalizedAmount, _isTimeframe);
}
if (_balance <= _amount) return 0;
return _balance.sub(_amount);
}
/**
* @notice Get coefficient. Tokens on the contract / total stake + total reward to be paid
*/
function monitorSecurityMargin() external view override onlyOwner returns (uint256) {
uint256 _contractBalance = token.balanceOf(address(this));
uint256 _toReward = aggregatedNormalizedStake.mul(compRateKeeper.getCurrentRate()).div(10 ** 27);
uint256 _toRewardTimeframe = aggregatedNormalizedStakeTimeframe.mul(compRateKeeperTimeframe.getCurrentRate())
.div(10 ** 27);
return _contractBalance.mul(10 ** 27).div(_toReward.add(_toRewardTimeframe));
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_compRateKeeper","type":"address"},{"internalType":"address","name":"_compRateKeeperTimeframe","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"aggregatedNormalizedStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aggregatedNormalizedStakeTimeframe","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"compRateKeeper","outputs":[{"internalType":"contract CompoundRateKeeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"compRateKeeperTimeframe","outputs":[{"internalType":"contract CompoundRateKeeper","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_isTimeframe","type":"bool"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_isTimeframe","type":"bool"}],"name":"getRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"interestRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"interestRateTimeframe","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"monitorSecurityMargin","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newInterestRate","type":"uint256"}],"name":"setInterestRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newInterestRate","type":"uint256"}],"name":"setInterestRateTimeframe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newInterestRate","type":"uint256"},{"internalType":"uint256","name":"_newInterestRateTimeframe","type":"uint256"}],"name":"setInterestRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_isTimeframe","type":"bool"}],"name":"stake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"supplyRewardPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","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":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_isTimeframe","type":"bool"}],"name":"updateCompoundAndStake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_isTimeframe","type":"bool"}],"name":"updateCompoundAndWithdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateCompoundRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateCompoundRateTimeframe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateCompoundRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userStakes","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"normalizedAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userStakesTimeframe","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"normalizedAmount","type":"uint256"},{"internalType":"uint256","name":"lastStakeTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_isTimeframe","type":"bool"}],"name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b5060405162002f6738038062002f67833981810160405260608110156200003757600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505060006200006e620001d860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620001e0565b600033905090565b612d7780620001f06000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80638da5cb5b116100de578063e660e74711610097578063f502f77311610071578063f502f773146105fc578063f6888d1d1461061a578063f9f65de51461065e578063fc0c546a146106965761018e565b8063e660e74714610534578063e95efda014610552578063f2fde38b146105b85761018e565b80638da5cb5b146104335780638da7ad2314610467578063947ef8a4146104c6578063abe50f19146104d0578063b6715b5a14610520578063c0ab9cbc1461052a5761018e565b8063715018a61161014b5780637c3a00fd116101255780637c3a00fd146103415780637d70b7d91461035f5780638220946814610393578063864daf81146103e35761018e565b8063715018a6146102af5780637921b072146102b95780637bf34671146102fd5761018e565b80630c4d01c51461019357806338d07436146101b15780634d020e06146102015780635f84f3021461022f57806360e59e7b1461025d5780636532834f14610291575b600080fd5b61019b6106ca565b6040518082815260200191505060405180910390f35b6101e9600480360360408110156101c757600080fd5b81019080803590602001909291908035151590602001909291905050506106d0565b60405180821515815260200191505060405180910390f35b61022d6004803603602081101561021757600080fd5b8101908080359060200190929190505050610e00565b005b61025b6004803603602081101561024557600080fd5b8101908080359060200190929190505050610f59565b005b6102656110b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102996110d8565b6040518082815260200191505060405180910390f35b6102b76110de565b005b6102e7600480360360208110156102cf57600080fd5b81019080803515159060200190929190505050611264565b6040518082815260200191505060405180910390f35b6103296004803603602081101561031357600080fd5b810190808035906020019092919050505061137f565b60405180821515815260200191505060405180910390f35b610349611593565b6040518082815260200191505060405180910390f35b610367611599565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103cb600480360360408110156103a957600080fd5b81019080803590602001909291908035151590602001909291905050506115bf565b60405180821515815260200191505060405180910390f35b61041b600480360360408110156103f957600080fd5b81019080803590602001909291908035151590602001909291905050506115db565b60405180821515815260200191505060405180910390f35b61043b6115f7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104a96004803603602081101561047d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611620565b604051808381526020018281526020019250505060405180910390f35b6104ce611644565b005b610508600480360360408110156104e657600080fd5b81019080803590602001909291908035151590602001909291905050506116f9565b60405180821515815260200191505060405180910390f35b610528611d90565b005b610532611da2565b005b61053c611e57565b6040518082815260200191505060405180910390f35b6105946004803603602081101561056857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e5d565b60405180848152602001838152602001828152602001935050505060405180910390f35b6105fa600480360360208110156105ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e87565b005b610604612092565b6040518082815260200191505060405180910390f35b6106486004803603602081101561063057600080fd5b81019080803515159060200190929190505050612421565b6040518082815260200191505060405180910390f35b6106946004803603604081101561067457600080fd5b8101908080359060200190929190803590602001909291905050506124d2565b005b61069e612650565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60085481565b60008083905082156109f9576106e4612bbe565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180606001604052908160008201548152602001600182015481526020016002820154815250509050600061075f82602001516001612676565b905060008114156107bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180612c206036913960400191505060405180910390fd5b62ed4e00826040015142031161081c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612d16602c913960400191505060405180910390fd5b82811015610828578092505b600061083d848361283490919063ffffffff16565b90506000610914600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7fb07b06040518163ffffffff1660e01b815260040160206040518083038186803b1580156108ac57600080fd5b505afa1580156108c0573d6000803e3d6000fd5b505050506040513d60208110156108d657600080fd5b81019080805190602001909291905050506109066b033b2e3c9fd0803ce80000008561287e90919063ffffffff16565b61290490919063ffffffff16565b905061094184602001516109338360095461294e90919063ffffffff16565b61283490919063ffffffff16565b60098190555061095a84600001518560200151896129d6565b8511156109a95781600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555050505050610cb5565b610a01612bdf565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820154815260200160018201548152505090506000610a7282602001516000612676565b90506000811415610ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180612c566036913960400191505060405180910390fd5b82811015610ada578092505b6000610afd84610aef85602001516000612676565b61283490919063ffffffff16565b90506000610bd4600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7fb07b06040518163ffffffff1660e01b815260040160206040518083038186803b158015610b6c57600080fd5b505afa158015610b80573d6000803e3d6000fd5b505050506040513d6020811015610b9657600080fd5b8101908080519060200190929190505050610bc66b033b2e3c9fd0803ce80000008561287e90919063ffffffff16565b61290490919063ffffffff16565b9050610c018460200151610bf38360085461294e90919063ffffffff16565b61283490919063ffffffff16565b600881905550610c1a84600001518560200151896129d6565b851115610c695781600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505050505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610d4857600080fd5b505af1158015610d5c573d6000803e3d6000fd5b505050506040513d6020811015610d7257600080fd5b8101908080519060200190929190505050610df5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5b452d33345d2d4661696c656420746f207472616e7366657220746f6b656e2e81525060200191505060405180910390fd5b600191505092915050565b610e08612a30565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6802c4408a017c9661e8811115610f47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5b452d3231315d2d43616e2774206265206d6f7265207468616e20353030252e81525060200191505060405180910390fd5b610f4f611644565b8060058190555050565b610f61612a30565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611021576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6802c4408a017c9661e88111156110a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5b452d3230325d2d43616e2774206265206d6f7265207468616e20353030252e81525060200191505060405180910390fd5b6110a8611da2565b8060048190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6110e6612a30565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600081156112fa57611274612bbe565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806060016040529081600082015481526020016001820154815260200160028201548152505090506112f28160000151826020015160016129d6565b91505061137a565b611302612bdf565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820154815260200160018201548152505090506113768160000151826020015160006129d6565b9150505b919050565b6000611389612a30565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611449576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156114fa57600080fd5b505af115801561150e573d6000803e3d6000fd5b505050506040513d602081101561152457600080fd5b810190808051906020019092919050505061158a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c8c6021913960400191505060405180910390fd5b60019050919050565b60045481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006115c9611d90565b6115d383836106d0565b905092915050565b60006115e5611d90565b6115ef83836116f9565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60066020528060005260406000206000915090508060000154908060010154905082565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166382ab890a6005546040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156116bb57600080fd5b505af11580156116cf573d6000803e3d6000fd5b505050506040513d60208110156116e557600080fd5b810190808051906020019092919050505050565b6000808311611753576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526048815260200180612cce6048913960600191505060405180910390fd5b81156119eb57611761612bbe565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050905060006117ee856117e084602001516001612676565b61294e90919063ffffffff16565b905060006118c5600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7fb07b06040518163ffffffff1660e01b815260040160206040518083038186803b15801561185d57600080fd5b505afa158015611871573d6000803e3d6000fd5b505050506040513d602081101561188757600080fd5b81019080805190602001909291905050506118b76b033b2e3c9fd0803ce80000008561287e90919063ffffffff16565b61290490919063ffffffff16565b90506118f283602001516118e48360095461294e90919063ffffffff16565b61283490919063ffffffff16565b60098190555061190f86846000015161294e90919063ffffffff16565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555042600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550505050611c28565b6119f3612bdf565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820154815260200160018201548152505090506000611a7685611a6884602001516000612676565b61294e90919063ffffffff16565b90506000611b4d600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7fb07b06040518163ffffffff1660e01b815260040160206040518083038186803b158015611ae557600080fd5b505afa158015611af9573d6000803e3d6000fd5b505050506040513d6020811015611b0f57600080fd5b8101908080519060200190929190505050611b3f6b033b2e3c9fd0803ce80000008561287e90919063ffffffff16565b61290490919063ffffffff16565b9050611b7a8360200151611b6c8360085461294e90919063ffffffff16565b61283490919063ffffffff16565b600881905550611b9786846000015161294e90919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611cd957600080fd5b505af1158015611ced573d6000803e3d6000fd5b505050506040513d6020811015611d0357600080fd5b8101908080519060200190929190505050611d86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5b452d31325d2d4661696c656420746f207472616e7366657220746f6b656e2e81525060200191505060405180910390fd5b6001905092915050565b611d98611da2565b611da0611644565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166382ab890a6004546040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015611e1957600080fd5b505af1158015611e2d573d6000803e3d6000fd5b505050506040513d6020811015611e4357600080fd5b810190808051906020019092919050505050565b60055481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b611e8f612a30565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612bfa6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061209c612a30565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461215c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156121e757600080fd5b505afa1580156121fb573d6000803e3d6000fd5b505050506040513d602081101561221157600080fd5b8101908080519060200190929190505050905060006122fb6b033b2e3c9fd0803ce80000006122ed600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7fb07b06040518163ffffffff1660e01b815260040160206040518083038186803b1580156122a157600080fd5b505afa1580156122b5573d6000803e3d6000fd5b505050506040513d60208110156122cb57600080fd5b810190808051906020019092919050505060085461287e90919063ffffffff16565b61290490919063ffffffff16565b905060006123d46b033b2e3c9fd0803ce80000006123c6600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7fb07b06040518163ffffffff1660e01b815260040160206040518083038186803b15801561237a57600080fd5b505afa15801561238e573d6000803e3d6000fd5b505050506040513d60208110156123a457600080fd5b810190808051906020019092919050505060095461287e90919063ffffffff16565b61290490919063ffffffff16565b90506124196123ec828461294e90919063ffffffff16565b61240b6b033b2e3c9fd0803ce80000008661287e90919063ffffffff16565b61290490919063ffffffff16565b935050505090565b6000811561247d57612476600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546001612676565b90506124cd565b6124ca600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546000612676565b90505b919050565b6124da612a30565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461259a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6802c4408a017c9661e882111580156125bc57506802c4408a017c9661e88111155b61262e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5b452d3232315d2d43616e2774206265206d6f7265207468616e20353030252e81525060200191505060405180910390fd5b612636611da2565b61263e611644565b81600481905550806005819055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008115612758576127516b033b2e3c9fd0803ce8000000612743600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7fb07b06040518163ffffffff1660e01b815260040160206040518083038186803b1580156126f957600080fd5b505afa15801561270d573d6000803e3d6000fd5b505050506040513d602081101561272357600080fd5b81019080805190602001909291905050508661287e90919063ffffffff16565b61290490919063ffffffff16565b905061282e565b61282b6b033b2e3c9fd0803ce800000061281d600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7fb07b06040518163ffffffff1660e01b815260040160206040518083038186803b1580156127d357600080fd5b505afa1580156127e7573d6000803e3d6000fd5b505050506040513d60208110156127fd57600080fd5b81019080805190602001909291905050508661287e90919063ffffffff16565b61290490919063ffffffff16565b90505b92915050565b600061287683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a38565b905092915050565b60008083141561289157600090506128fe565b60008284029050828482816128a257fe5b04146128f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612cad6021913960400191505060405180910390fd5b809150505b92915050565b600061294683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612af8565b905092915050565b6000808284019050838110156129cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000905082156129f4576129ed8484612676565b9050612a01565b6129fe8484612676565b90505b848111612a12576000915050612a29565b612a25858261283490919063ffffffff16565b9150505b9392505050565b600033905090565b6000838311158290612ae5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612aaa578082015181840152602081019050612a8f565b50505050905090810190601f168015612ad75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290612ba4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b69578082015181840152602081019050612b4e565b50505050905090810190601f168015612b965780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612bb057fe5b049050809150509392505050565b60405180606001604052806000815260200160008152602001600081525090565b60405180604001604052806000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735b452d33315d2d546865206465706f73697420646f6573206e6f742065786973742c206661696c656420746f2077697468647261772e5b452d33335d2d546865206465706f73697420646f6573206e6f742065786973742c206661696c656420746f2077697468647261772e5b452d3233315d2d4661696c656420746f207472616e7366657220746f6b656e2e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775b452d31315d2d496e76616c69642076616c756520666f7220746865207374616b6520616d6f756e742c206661696c656420746f207374616b652061207a65726f2076616c75652e5b452d33325d2d46756e647320617265206e6f7420617661696c61626c6520666f722077697468647261772ea26469706673582212209431720040c675874656f573cd156dadd5414fc33bea27e4365b0bf4954e858164736f6c634300070000330000000000000000000000004fa520f8dc3f5d57af0441b9f4ae24100c38a71f000000000000000000000000bea7e25b8530a05c5553dcb3d4a9d769e8287bea000000000000000000000000dba6a5e50ee2440f4651d8ae8cb966e816df7e03
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80638da5cb5b116100de578063e660e74711610097578063f502f77311610071578063f502f773146105fc578063f6888d1d1461061a578063f9f65de51461065e578063fc0c546a146106965761018e565b8063e660e74714610534578063e95efda014610552578063f2fde38b146105b85761018e565b80638da5cb5b146104335780638da7ad2314610467578063947ef8a4146104c6578063abe50f19146104d0578063b6715b5a14610520578063c0ab9cbc1461052a5761018e565b8063715018a61161014b5780637c3a00fd116101255780637c3a00fd146103415780637d70b7d91461035f5780638220946814610393578063864daf81146103e35761018e565b8063715018a6146102af5780637921b072146102b95780637bf34671146102fd5761018e565b80630c4d01c51461019357806338d07436146101b15780634d020e06146102015780635f84f3021461022f57806360e59e7b1461025d5780636532834f14610291575b600080fd5b61019b6106ca565b6040518082815260200191505060405180910390f35b6101e9600480360360408110156101c757600080fd5b81019080803590602001909291908035151590602001909291905050506106d0565b60405180821515815260200191505060405180910390f35b61022d6004803603602081101561021757600080fd5b8101908080359060200190929190505050610e00565b005b61025b6004803603602081101561024557600080fd5b8101908080359060200190929190505050610f59565b005b6102656110b2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102996110d8565b6040518082815260200191505060405180910390f35b6102b76110de565b005b6102e7600480360360208110156102cf57600080fd5b81019080803515159060200190929190505050611264565b6040518082815260200191505060405180910390f35b6103296004803603602081101561031357600080fd5b810190808035906020019092919050505061137f565b60405180821515815260200191505060405180910390f35b610349611593565b6040518082815260200191505060405180910390f35b610367611599565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103cb600480360360408110156103a957600080fd5b81019080803590602001909291908035151590602001909291905050506115bf565b60405180821515815260200191505060405180910390f35b61041b600480360360408110156103f957600080fd5b81019080803590602001909291908035151590602001909291905050506115db565b60405180821515815260200191505060405180910390f35b61043b6115f7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104a96004803603602081101561047d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611620565b604051808381526020018281526020019250505060405180910390f35b6104ce611644565b005b610508600480360360408110156104e657600080fd5b81019080803590602001909291908035151590602001909291905050506116f9565b60405180821515815260200191505060405180910390f35b610528611d90565b005b610532611da2565b005b61053c611e57565b6040518082815260200191505060405180910390f35b6105946004803603602081101561056857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e5d565b60405180848152602001838152602001828152602001935050505060405180910390f35b6105fa600480360360208110156105ce57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e87565b005b610604612092565b6040518082815260200191505060405180910390f35b6106486004803603602081101561063057600080fd5b81019080803515159060200190929190505050612421565b6040518082815260200191505060405180910390f35b6106946004803603604081101561067457600080fd5b8101908080359060200190929190803590602001909291905050506124d2565b005b61069e612650565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60085481565b60008083905082156109f9576106e4612bbe565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060405180606001604052908160008201548152602001600182015481526020016002820154815250509050600061075f82602001516001612676565b905060008114156107bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180612c206036913960400191505060405180910390fd5b62ed4e00826040015142031161081c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612d16602c913960400191505060405180910390fd5b82811015610828578092505b600061083d848361283490919063ffffffff16565b90506000610914600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7fb07b06040518163ffffffff1660e01b815260040160206040518083038186803b1580156108ac57600080fd5b505afa1580156108c0573d6000803e3d6000fd5b505050506040513d60208110156108d657600080fd5b81019080805190602001909291905050506109066b033b2e3c9fd0803ce80000008561287e90919063ffffffff16565b61290490919063ffffffff16565b905061094184602001516109338360095461294e90919063ffffffff16565b61283490919063ffffffff16565b60098190555061095a84600001518560200151896129d6565b8511156109a95781600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555050505050610cb5565b610a01612bdf565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820154815260200160018201548152505090506000610a7282602001516000612676565b90506000811415610ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180612c566036913960400191505060405180910390fd5b82811015610ada578092505b6000610afd84610aef85602001516000612676565b61283490919063ffffffff16565b90506000610bd4600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7fb07b06040518163ffffffff1660e01b815260040160206040518083038186803b158015610b6c57600080fd5b505afa158015610b80573d6000803e3d6000fd5b505050506040513d6020811015610b9657600080fd5b8101908080519060200190929190505050610bc66b033b2e3c9fd0803ce80000008561287e90919063ffffffff16565b61290490919063ffffffff16565b9050610c018460200151610bf38360085461294e90919063ffffffff16565b61283490919063ffffffff16565b600881905550610c1a84600001518560200151896129d6565b851115610c695781600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505050505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610d4857600080fd5b505af1158015610d5c573d6000803e3d6000fd5b505050506040513d6020811015610d7257600080fd5b8101908080519060200190929190505050610df5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5b452d33345d2d4661696c656420746f207472616e7366657220746f6b656e2e81525060200191505060405180910390fd5b600191505092915050565b610e08612a30565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6802c4408a017c9661e8811115610f47576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5b452d3231315d2d43616e2774206265206d6f7265207468616e20353030252e81525060200191505060405180910390fd5b610f4f611644565b8060058190555050565b610f61612a30565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611021576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6802c4408a017c9661e88111156110a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5b452d3230325d2d43616e2774206265206d6f7265207468616e20353030252e81525060200191505060405180910390fd5b6110a8611da2565b8060048190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6110e6612a30565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600081156112fa57611274612bbe565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020604051806060016040529081600082015481526020016001820154815260200160028201548152505090506112f28160000151826020015160016129d6565b91505061137a565b611302612bdf565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820154815260200160018201548152505090506113768160000151826020015160006129d6565b9150505b919050565b6000611389612a30565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611449576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156114fa57600080fd5b505af115801561150e573d6000803e3d6000fd5b505050506040513d602081101561152457600080fd5b810190808051906020019092919050505061158a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c8c6021913960400191505060405180910390fd5b60019050919050565b60045481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006115c9611d90565b6115d383836106d0565b905092915050565b60006115e5611d90565b6115ef83836116f9565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60066020528060005260406000206000915090508060000154908060010154905082565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166382ab890a6005546040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156116bb57600080fd5b505af11580156116cf573d6000803e3d6000fd5b505050506040513d60208110156116e557600080fd5b810190808051906020019092919050505050565b6000808311611753576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526048815260200180612cce6048913960600191505060405180910390fd5b81156119eb57611761612bbe565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820154815260200160018201548152602001600282015481525050905060006117ee856117e084602001516001612676565b61294e90919063ffffffff16565b905060006118c5600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7fb07b06040518163ffffffff1660e01b815260040160206040518083038186803b15801561185d57600080fd5b505afa158015611871573d6000803e3d6000fd5b505050506040513d602081101561188757600080fd5b81019080805190602001909291905050506118b76b033b2e3c9fd0803ce80000008561287e90919063ffffffff16565b61290490919063ffffffff16565b90506118f283602001516118e48360095461294e90919063ffffffff16565b61283490919063ffffffff16565b60098190555061190f86846000015161294e90919063ffffffff16565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555080600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555042600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550505050611c28565b6119f3612bdf565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820154815260200160018201548152505090506000611a7685611a6884602001516000612676565b61294e90919063ffffffff16565b90506000611b4d600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7fb07b06040518163ffffffff1660e01b815260040160206040518083038186803b158015611ae557600080fd5b505afa158015611af9573d6000803e3d6000fd5b505050506040513d6020811015611b0f57600080fd5b8101908080519060200190929190505050611b3f6b033b2e3c9fd0803ce80000008561287e90919063ffffffff16565b61290490919063ffffffff16565b9050611b7a8360200151611b6c8360085461294e90919063ffffffff16565b61283490919063ffffffff16565b600881905550611b9786846000015161294e90919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555080600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050505b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611cd957600080fd5b505af1158015611ced573d6000803e3d6000fd5b505050506040513d6020811015611d0357600080fd5b8101908080519060200190929190505050611d86576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5b452d31325d2d4661696c656420746f207472616e7366657220746f6b656e2e81525060200191505060405180910390fd5b6001905092915050565b611d98611da2565b611da0611644565b565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166382ab890a6004546040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b158015611e1957600080fd5b505af1158015611e2d573d6000803e3d6000fd5b505050506040513d6020811015611e4357600080fd5b810190808051906020019092919050505050565b60055481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b611e8f612a30565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f4f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612bfa6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061209c612a30565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461215c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156121e757600080fd5b505afa1580156121fb573d6000803e3d6000fd5b505050506040513d602081101561221157600080fd5b8101908080519060200190929190505050905060006122fb6b033b2e3c9fd0803ce80000006122ed600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7fb07b06040518163ffffffff1660e01b815260040160206040518083038186803b1580156122a157600080fd5b505afa1580156122b5573d6000803e3d6000fd5b505050506040513d60208110156122cb57600080fd5b810190808051906020019092919050505060085461287e90919063ffffffff16565b61290490919063ffffffff16565b905060006123d46b033b2e3c9fd0803ce80000006123c6600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7fb07b06040518163ffffffff1660e01b815260040160206040518083038186803b15801561237a57600080fd5b505afa15801561238e573d6000803e3d6000fd5b505050506040513d60208110156123a457600080fd5b810190808051906020019092919050505060095461287e90919063ffffffff16565b61290490919063ffffffff16565b90506124196123ec828461294e90919063ffffffff16565b61240b6b033b2e3c9fd0803ce80000008661287e90919063ffffffff16565b61290490919063ffffffff16565b935050505090565b6000811561247d57612476600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546001612676565b90506124cd565b6124ca600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546000612676565b90505b919050565b6124da612a30565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461259a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6802c4408a017c9661e882111580156125bc57506802c4408a017c9661e88111155b61262e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5b452d3232315d2d43616e2774206265206d6f7265207468616e20353030252e81525060200191505060405180910390fd5b612636611da2565b61263e611644565b81600481905550806005819055505050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008115612758576127516b033b2e3c9fd0803ce8000000612743600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7fb07b06040518163ffffffff1660e01b815260040160206040518083038186803b1580156126f957600080fd5b505afa15801561270d573d6000803e3d6000fd5b505050506040513d602081101561272357600080fd5b81019080805190602001909291905050508661287e90919063ffffffff16565b61290490919063ffffffff16565b905061282e565b61282b6b033b2e3c9fd0803ce800000061281d600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f7fb07b06040518163ffffffff1660e01b815260040160206040518083038186803b1580156127d357600080fd5b505afa1580156127e7573d6000803e3d6000fd5b505050506040513d60208110156127fd57600080fd5b81019080805190602001909291905050508661287e90919063ffffffff16565b61290490919063ffffffff16565b90505b92915050565b600061287683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a38565b905092915050565b60008083141561289157600090506128fe565b60008284029050828482816128a257fe5b04146128f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612cad6021913960400191505060405180910390fd5b809150505b92915050565b600061294683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612af8565b905092915050565b6000808284019050838110156129cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000905082156129f4576129ed8484612676565b9050612a01565b6129fe8484612676565b90505b848111612a12576000915050612a29565b612a25858261283490919063ffffffff16565b9150505b9392505050565b600033905090565b6000838311158290612ae5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612aaa578082015181840152602081019050612a8f565b50505050905090810190601f168015612ad75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008083118290612ba4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b69578082015181840152602081019050612b4e565b50505050905090810190601f168015612b965780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612bb057fe5b049050809150509392505050565b60405180606001604052806000815260200160008152602001600081525090565b60405180604001604052806000815260200160008152509056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735b452d33315d2d546865206465706f73697420646f6573206e6f742065786973742c206661696c656420746f2077697468647261772e5b452d33335d2d546865206465706f73697420646f6573206e6f742065786973742c206661696c656420746f2077697468647261772e5b452d3233315d2d4661696c656420746f207472616e7366657220746f6b656e2e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775b452d31315d2d496e76616c69642076616c756520666f7220746865207374616b6520616d6f756e742c206661696c656420746f207374616b652061207a65726f2076616c75652e5b452d33325d2d46756e647320617265206e6f7420617661696c61626c6520666f722077697468647261772ea26469706673582212209431720040c675874656f573cd156dadd5414fc33bea27e4365b0bf4954e858164736f6c63430007000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004fa520f8dc3f5d57af0441b9f4ae24100c38a71f000000000000000000000000bea7e25b8530a05c5553dcb3d4a9d769e8287bea000000000000000000000000dba6a5e50ee2440f4651d8ae8cb966e816df7e03
-----Decoded View---------------
Arg [0] : _token (address): 0x4fA520F8Dc3F5D57af0441B9f4ae24100c38a71F
Arg [1] : _compRateKeeper (address): 0xbeA7E25b8530A05C5553DCb3D4A9d769e8287bEA
Arg [2] : _compRateKeeperTimeframe (address): 0xdba6A5e50eE2440f4651d8aE8cB966E816Df7E03
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000004fa520f8dc3f5d57af0441b9f4ae24100c38a71f
Arg [1] : 000000000000000000000000bea7e25b8530a05c5553dcb3d4a9d769e8287bea
Arg [2] : 000000000000000000000000dba6a5e50ee2440f4651d8ae8cb966e816df7e03
Deployed Bytecode Sourcemap
14537:11458:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15248:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19000:2343;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22785:287;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22400:268;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14746:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15295;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2683:148;;;:::i;:::-;;24238:432;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23839:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15049:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14699:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16778:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16384:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2041:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15128:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;15861:127;;;:::i;:::-;;17147:1637;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16057:126;;;:::i;:::-;;15688:100;;;:::i;:::-;;15083:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15178:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2986:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25492:500;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21502:292;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23202:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14802:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15248:40;;;;:::o;19000:2343::-;19079:4;19096:23;19122:7;19096:33;;19146:12;19142:2069;;;19175:28;;:::i;:::-;19206:19;:31;19226:10;19206:31;;;;;;;;;;;;;;;19175:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19254:19;19276:42;19288:6;:23;;;19313:4;19276:11;:42::i;:::-;19254:64;;19358:1;19343:11;:16;;19335:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19482:8;19459:6;:20;;;19441:15;:38;:49;19433:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19574:15;19560:11;:29;19556:64;;;19609:11;19591:29;;19556:64;19637:18;19658:32;19674:15;19658:11;:15;;:32;;;;:::i;:::-;19637:53;;19705:28;19736:70;19765:23;;;;;;;;;;;:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19736:24;19751:8;19736:10;:14;;:24;;;;:::i;:::-;:28;;:70;;;;:::i;:::-;19705:101;;19860:103;19939:6;:23;;;19860:60;19899:20;19860:34;;:38;;:60;;;;:::i;:::-;:78;;:103;;;;:::i;:::-;19823:34;:140;;;;20002:70;20019:6;:13;;;20034:6;:23;;;20059:12;20002:16;:70::i;:::-;19984:15;:88;19980:180;;;20134:10;20093:19;:31;20113:10;20093:31;;;;;;;;;;;;;;;:38;;:51;;;;19980:180;20225:20;20174:19;:31;20194:10;20174:31;;;;;;;;;;;;;;;:48;;:71;;;;19142:2069;;;;;;;20280:19;;:::i;:::-;20302:10;:22;20313:10;20302:22;;;;;;;;;;;;;;;20280:44;;;;;;;;;;;;;;;;;;;;;;;;;;;20341:19;20363:43;20375:6;:23;;;20400:5;20363:11;:43::i;:::-;20341:65;;20446:1;20431:11;:16;;20423:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20541:15;20527:11;:29;20523:64;;;20576:11;20558:29;;20523:64;20604:18;20625:64;20673:15;20625:43;20637:6;:23;;;20662:5;20625:11;:43::i;:::-;:47;;:64;;;;:::i;:::-;20604:85;;20704:28;20735:61;20764:14;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20735:24;20750:8;20735:10;:14;;:24;;;;:::i;:::-;:28;;:61;;;;:::i;:::-;20704:92;;20841:94;20911:6;:23;;;20841:51;20871:20;20841:25;;:29;;:51;;;;:::i;:::-;:69;;:94;;;;:::i;:::-;20813:25;:122;;;;20974:70;20991:6;:13;;;21006:6;:23;;;21031:12;20974:16;:70::i;:::-;20956:15;:88;20952:171;;;21097:10;21065;:22;21076:10;21065:22;;;;;;;;;;;;;;;:29;;:42;;;;20952:171;21179:20;21137:10;:22;21148:10;21137:22;;;;;;;;;;;;;;;:39;;:62;;;;19142:2069;;;;;21231:5;;;;;;;;;;;:14;;;21246:10;21258:15;21231:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21223:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21331:4;21324:11;;;19000:2343;;;;:::o;22785:287::-;2263:12;:10;:12::i;:::-;2253:22;;:6;;;;;;;;;;:22;;;2245:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14670:20:::1;22892:16;:42;;22884:87;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;22984:29;:27;:29::i;:::-;23048:16;23024:21;:40;;;;22785:287:::0;:::o;22400:268::-;2263:12;:10;:12::i;:::-;2253:22;;:6;;;;;;;;;;:22;;;2245:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14670:20:::1;22498:16;:42;;22490:87;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;22598:20;:18;:20::i;:::-;22644:16;22629:12;:31;;;;22400:268:::0;:::o;14746:49::-;;;;;;;;;;;;;:::o;15295:::-;;;;:::o;2683:148::-;2263:12;:10;:12::i;:::-;2253:22;;:6;;;;;;;;;;:22;;;2245:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2790:1:::1;2753:40;;2774:6;::::0;::::1;;;;;;;;2753:40;;;;;;;;;;;;2821:1;2804:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2683:148::o:0;24238:432::-;24314:7;24338:12;24334:191;;;24367:28;;:::i;:::-;24398:19;:31;24418:10;24398:31;;;;;;;;;;;;;;;24367:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24451;24468:6;:13;;;24483:6;:23;;;24508:4;24451:16;:62::i;:::-;24444:69;;;;;24334:191;24537:19;;:::i;:::-;24559:10;:22;24570:10;24559:22;;;;;;;;;;;;;;;24537:44;;;;;;;;;;;;;;;;;;;;;;;;;;;24599:63;24616:6;:13;;;24631:6;:23;;;24656:5;24599:16;:63::i;:::-;24592:70;;;24238:432;;;;:::o;23839:227::-;23919:4;2263:12;:10;:12::i;:::-;2253:22;;:6;;;;;;;;;;:22;;;2245:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23944:5:::1;;;;;;;;;;;:18;;;23963:10;23983:4;23990:7;23944:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;23936:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24054:4;24047:11;;23839:227:::0;;;:::o;15049:27::-;;;;:::o;14699:40::-;;;;;;;;;;;;;:::o;16778:193::-;16876:4;16893:21;:19;:21::i;:::-;16932:31;16941:7;16950:12;16932:8;:31::i;:::-;16925:38;;16778:193;;;;:::o;16384:187::-;16479:4;16496:21;:19;:21::i;:::-;16535:28;16541:7;16550:12;16535:5;:28::i;:::-;16528:35;;16384:187;;;;:::o;2041:79::-;2079:7;2106:6;;;;;;;;;;;2099:13;;2041:79;:::o;15128:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15861:127::-;15927:23;;;;;;;;;;;:30;;;15958:21;;15927:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15861:127::o;17147:1637::-;17223:4;17258:1;17248:7;:11;17240:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17353:12;17349:1292;;;17382:28;;:::i;:::-;17413:19;:31;17433:10;17413:31;;;;;;;;;;;;;;;17382:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17461:18;17482:55;17529:7;17482:42;17494:6;:23;;;17519:4;17482:11;:42::i;:::-;:46;;:55;;;;:::i;:::-;17461:76;;17552:28;17583:70;17612:23;;;;;;;;;;;:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17583:24;17598:8;17583:10;:14;;:24;;;;:::i;:::-;:28;;:70;;;;:::i;:::-;17552:101;;17707:103;17786:6;:23;;;17707:60;17746:20;17707:34;;:38;;:60;;;;:::i;:::-;:78;;:103;;;;:::i;:::-;17670:34;:140;;;;17868:26;17886:7;17868:6;:13;;;:17;;:26;;;;:::i;:::-;17827:19;:31;17847:10;17827:31;;;;;;;;;;;;;;;:38;;:67;;;;17960:20;17909:19;:31;17929:10;17909:31;;;;;;;;;;;;;;;:48;;:71;;;;18043:15;17995:19;:31;18015:10;17995:31;;;;;;;;;;;;;;;:45;;:63;;;;17349:1292;;;;;;18093:19;;:::i;:::-;18115:10;:22;18126:10;18115:22;;;;;;;;;;;;;;;18093:44;;;;;;;;;;;;;;;;;;;;;;;;;;;18154:18;18175:56;18223:7;18175:43;18187:6;:23;;;18212:5;18175:11;:43::i;:::-;:47;;:56;;;;:::i;:::-;18154:77;;18246:28;18277:61;18306:14;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18277:24;18292:8;18277:10;:14;;:24;;;;:::i;:::-;:28;;:61;;;;:::i;:::-;18246:92;;18383:94;18453:6;:23;;;18383:51;18413:20;18383:25;;:29;;:51;;;;:::i;:::-;:69;;:94;;;;:::i;:::-;18355:25;:122;;;;18526:26;18544:7;18526:6;:13;;;:17;;:26;;;;:::i;:::-;18494:10;:22;18505:10;18494:22;;;;;;;;;;;;;;;:29;;:58;;;;18609:20;18567:10;:22;18578:10;18567:22;;;;;;;;;;;;;;;:39;;:62;;;;17349:1292;;;;18661:5;;;;;;;;;;;:18;;;18680:10;18700:4;18707:7;18661:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18653:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18772:4;18765:11;;17147:1637;;;;:::o;16057:126::-;16115:20;:18;:20::i;:::-;16146:29;:27;:29::i;:::-;16057:126::o;15688:100::-;15745:14;;;;;;;;;;;:21;;;15767:12;;15745:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15688:100::o;15083:36::-;;;;:::o;15178:61::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2986:244::-;2263:12;:10;:12::i;:::-;2253:22;;:6;;;;;;;;;;:22;;;2245:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3095:1:::1;3075:22;;:8;:22;;;;3067:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3185:8;3156:38;;3177:6;::::0;::::1;;;;;;;;3156:38;;;;;;;;;;;;3214:8;3205:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;2986:244:::0;:::o;25492:500::-;25567:7;2263:12;:10;:12::i;:::-;2253:22;;:6;;;;;;;;;;:22;;;2245:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25587:24:::1;25614:5;;;;;;;;;;;:15;;;25638:4;25614:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;25587:57;;25655:17;25675:76;25742:8;25675:62;25705:14;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;25675:25;;:29;;:62;;;;:::i;:::-;:66;;:76;;;;:::i;:::-;25655:96;;25762:26;25791:104;25886:8;25791:80;25830:23;;;;;;;;;;;:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;25791:34;;:38;;:80;;;;:::i;:::-;:94;;:104;;;;:::i;:::-;25762:133;;25915:69;25950:33;25964:18;25950:9;:13;;:33;;;;:::i;:::-;25915:30;25936:8;25915:16;:20;;:30;;;;:::i;:::-;:34;;:69;;;;:::i;:::-;25908:76;;;;;25492:500:::0;:::o;21502:292::-;21571:7;21595:12;21591:119;;;21631:67;21643:19;:31;21663:10;21643:31;;;;;;;;;;;;;;;:48;;;21693:4;21631:11;:67::i;:::-;21624:74;;;;21591:119;21727:59;21739:10;:22;21750:10;21739:22;;;;;;;;;;;;;;;:39;;;21780:5;21727:11;:59::i;:::-;21720:66;;21502:292;;;;:::o;23202:464::-;2263:12;:10;:12::i;:::-;2253:22;;:6;;;;;;;;;;:22;;;2245:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14670:20:::1;23336:16;:42;;:97;;;;;14670:20;23382:25;:51;;23336:97;23328:155;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;23496:20;:18;:20::i;:::-;23527:29;:27;:29::i;:::-;23582:16;23567:12;:31;;;;23633:25;23609:21;:49;;;;23202:464:::0;;:::o;14802:19::-;;;;;;;;;;;;;:::o;22009:331::-;22098:7;22122:12;22118:129;;;22158:77;22226:8;22158:63;22180:23;;;;;;;;;;;:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22158:17;:21;;:63;;;;:::i;:::-;:67;;:77;;;;:::i;:::-;22151:84;;;;22118:129;22264:68;22323:8;22264:54;22286:14;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22264:17;:21;;:54;;;;:::i;:::-;:58;;:68;;;;:::i;:::-;22257:75;;22009:331;;;;;:::o;3966:136::-;4024:7;4051:43;4055:1;4058;4051:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4044:50;;3966:136;;;;:::o;4856:471::-;4914:7;5164:1;5159;:6;5155:47;;;5189:1;5182:8;;;;5155:47;5214:9;5230:1;5226;:5;5214:17;;5259:1;5254;5250;:5;;;;;;:10;5242:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5318:1;5311:8;;;4856:471;;;;;:::o;5803:132::-;5861:7;5888:39;5892:1;5895;5888:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5881:46;;5803:132;;;;:::o;3502:181::-;3560:7;3580:9;3596:1;3592;:5;3580:17;;3621:1;3616;:6;;3608:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3674:1;3667:8;;;3502:181;;;;:::o;24926:444::-;25037:7;25057:16;25076:1;25057:20;;25094:12;25090:188;;;25134:44;25146:17;25165:12;25134:11;:44::i;:::-;25123:55;;25090:188;;;25222:44;25234:17;25253:12;25222:11;:44::i;:::-;25211:55;;25090:188;25306:7;25294:8;:19;25290:33;;25322:1;25315:8;;;;;25290:33;25341:21;25354:7;25341:8;:12;;:21;;;;:::i;:::-;25334:28;;;24926:444;;;;;;:::o;1175:106::-;1228:15;1263:10;1256:17;;1175:106;:::o;4405:192::-;4491:7;4524:1;4519;:6;;4527:12;4511:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4551:9;4567:1;4563;:5;4551:17;;4588:1;4581:8;;;4405:192;;;;;:::o;6431:278::-;6517:7;6549:1;6545;:5;6552:12;6537:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6576:9;6592:1;6588;:5;;;;;;6576:17;;6700:1;6693:8;;;6431:278;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://9431720040c675874656f573cd156dadd5414fc33bea27e4365b0bf4954e8581
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.