ETH Price: $2,737.18 (+7.10%)
Gas: 3 Gwei

Contract

0xfE78EBD1FE6aB976C058A795d9683d85c3929AeD
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Flush Pool128398022021-07-16 19:38:301123 days ago1626464310IN
0xfE78EBD1...5c3929AeD
0 ETH0.0015825235
Flush Pool119046052021-02-22 4:10:311267 days ago1613967031IN
0xfE78EBD1...5c3929AeD
0 ETH0.00848128158
Un Stake118487272021-02-13 14:10:301276 days ago1613225430IN
0xfE78EBD1...5c3929AeD
0 ETH0.0029571100
Un Stake118485932021-02-13 13:42:541276 days ago1613223774IN
0xfE78EBD1...5c3929AeD
0 ETH0.00301624102
Un Stake117263802021-01-25 18:00:181295 days ago1611597618IN
0xfE78EBD1...5c3929AeD
0 ETH0.0116736969
Un Stake117262962021-01-25 17:41:111295 days ago1611596471IN
0xfE78EBD1...5c3929AeD
0 ETH0.0089439458.00000156
Un Stake116189852021-01-09 6:27:151311 days ago1610173635IN
0xfE78EBD1...5c3929AeD
0 ETH0.0071182252.00000145
Take Rewards116189492021-01-09 6:19:331311 days ago1610173173IN
0xfE78EBD1...5c3929AeD
0 ETH0.0103527756
Take Rewards116188782021-01-09 6:04:181311 days ago1610172258IN
0xfE78EBD1...5c3929AeD
0 ETH0.0088427955
Un Stake116188652021-01-09 6:01:591311 days ago1610172119IN
0xfE78EBD1...5c3929AeD
0 ETH0.0097689955
Take Rewards115388682020-12-27 23:38:411324 days ago1609112321IN
0xfE78EBD1...5c3929AeD
0 ETH0.0138844358.3
Take Rewards115338102020-12-27 5:02:341324 days ago1609045354IN
0xfE78EBD1...5c3929AeD
0 ETH0.0080332236
Un Stake114423062020-12-13 4:03:171338 days ago1607832197IN
0xfE78EBD1...5c3929AeD
0 ETH0.0033957920.9000016
Stake114391832020-12-12 16:23:011339 days ago1607790181IN
0xfE78EBD1...5c3929AeD
0 ETH0.0061250731.00000145
Un Stake114391782020-12-12 16:21:381339 days ago1607790098IN
0xfE78EBD1...5c3929AeD
0 ETH0.0050368131.00000145
Stake114391302020-12-12 16:10:571339 days ago1607789457IN
0xfE78EBD1...5c3929AeD
0 ETH0.0059274930
Take Rewards114326382020-12-11 16:16:101340 days ago1607703370IN
0xfE78EBD1...5c3929AeD
0 ETH0.021555896.60000167
Take Rewards114219132020-12-10 0:15:351341 days ago1607559335IN
0xfE78EBD1...5c3929AeD
0 ETH0.0055045431.00000145
Un Stake114219072020-12-10 0:14:071341 days ago1607559247IN
0xfE78EBD1...5c3929AeD
0 ETH0.0055017531.00000145
Stake113850992020-12-04 8:40:481347 days ago1607071248IN
0xfE78EBD1...5c3929AeD
0 ETH0.0107776444.42540495
Un Stake113450132020-11-28 5:03:501353 days ago1606539830IN
0xfE78EBD1...5c3929AeD
0 ETH0.0024669113.9
Take Rewards113448702020-11-28 4:31:011353 days ago1606537861IN
0xfE78EBD1...5c3929AeD
0 ETH0.002994214.1
Stake113367092020-11-26 22:20:591355 days ago1606429259IN
0xfE78EBD1...5c3929AeD
0 ETH0.0050971623
Stake113187162020-11-24 4:07:081357 days ago1606190828IN
0xfE78EBD1...5c3929AeD
0 ETH0.0186810477
Take Rewards112470212020-11-13 4:00:001368 days ago1605240000IN
0xfE78EBD1...5c3929AeD
0 ETH0.0030810516
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DeFiat_EXTFarming_V2

Compiler Version
v0.6.0+commit.26b70077

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 1 of 3: DeFiatEXT_Farming.sol
pragma solidity ^0.6.0;

import "./SafeMath.sol";
import {IERC20, IDungeon} from "./_Interfaces.sol";

// File: @defiat-crypto/defiat/blob/master/contracts/XXXXXX.sol
/**
 * @dev Delegated Farming Contract.
 * Implements a conditoin on the DFT-DFT farming pool for users to generate more rewards
 */
contract DeFiat_EXTFarming_V2 {
    using SafeMath for uint256;

    //Structs
    struct PoolMetrics {
        address stakedToken;
        uint256 staked;         // sum of tokens staked in the contract
        uint256 stakingFee;     // entry fee
        
        uint256 stakingPoints;

        address rewardToken;
        uint256 rewards;        // current rewards in the pool
        uint256 totalRewards;

        uint256 startTime;      // when the pool opens
        uint256 closingTime;    // when the pool closes. 
        uint256 duration;       // duration of the staking
        uint256 lastEvent;      // last time metrics were updated.
        
        uint256  ratePerToken;  // CALCULATED pool reward Rate per Token (calculated based on total stake and time)
        
        address DftDungeon;     // used to calculate the DeFiatScore
        bool boostedRewards;
    }
    PoolMetrics public poolMetrics;

    struct UserMetrics {
        uint256 stake;          // native token stake (balanceOf)
        uint256 stakingPoints;  // staking points at lastEvent
        uint256 poolPoints;     // pool point at lastEvent
        uint256 lastEvent;

        uint256 rewardAccrued;  // accrued rewards over time based on staking points
        uint256 rewardsPaid;    // for information only

        uint256 lastTxBlock;    // latest transaction from the user (antiSpam)
    }
    mapping(address => UserMetrics) public userMetrics;
    
        address public poolOperator; address public owner;
        

//== constructor 
    constructor(address _stakedToken, address _rewardToken, uint256 _feeBase1000, uint256 _durationHours) public {
        owner = msg.sender;
        poolOperator = msg.sender;
        
        poolMetrics.stakedToken = address(_stakedToken);
        poolMetrics.rewardToken = address(_rewardToken);
        poolMetrics.stakingFee = _feeBase1000; //10 = 1%
        
        poolMetrics.duration = _durationHours.mul(3600); //
        poolMetrics.startTime = block.timestamp;
        poolMetrics.closingTime = block.timestamp + poolMetrics.duration;
        
        poolMetrics.stakingPoints = 1; //avoirds div by 0 at start
        poolMetrics.boostedRewards = true;
    }

//==Events
    event PoolInitalized(uint256 amountAdded, string  _desc);
    event RewardTaken(address indexed user, uint256 reward, string  _desc);

    event userStaking(address indexed user, uint256 amount, string  _desc);
    event userWithdrawal(address indexed user, uint256 amount, string  _desc);

    modifier poolLive() {
        require(block.timestamp >= poolMetrics.startTime,"Pool not started Yet"); //good for delayed starts.
        require(block.timestamp <= poolMetrics.closingTime,"Pool closed"); //good for delayed starts.
        _;
    }
    modifier poolStarted() {
        require(block.timestamp >= poolMetrics.startTime,"Pool not started Yet"); //good for delayed starts.
        _;
    }
    modifier poolEnded() {
        require(block.timestamp > poolMetrics.closingTime,"Pool not ended Yet"); //good for delayed starts.
        _;
    }
    
    modifier antiSpam(uint256 _blocks) {
        require(block.number > userMetrics[msg.sender].lastTxBlock.add(_blocks), "Wait X BLOCKS between Transactions");
        userMetrics[msg.sender].lastTxBlock = block.number; //update
        _;
    } 
    modifier onlyPoolOperator() {
        require(msg.sender== poolOperator || msg.sender == owner, "msg.sender is not allowed to operate Pool");
        _;
    }
    modifier onlyOwner() {
        require(msg.sender== owner, "Only Owner");
        _;
    }
    modifier antiWhale(address _address) {
        require(myStakeShare(_address) < 20000, "User stake% share too high. Leave some for the smaller guys ;-)"); //max 20%
        _;
    } 
    // avoids stakes being deposited once a user reached 20%. 
    // Simplistic implementation as if we calculate "futureStake" value very 1st stakers will not be able to deposit.
    
    
//==Basics 
    function currentTime() public view returns (uint256) {
        return SafeMath.min(block.timestamp, poolMetrics.closingTime); //allows expiration
    } // SafeMath.min(now, endTime)
    
//==DeFiat Boost
    function setDungeon(address _dungeon) public onlyOwner {
        poolMetrics.DftDungeon = _dungeon;
    }
    
    /**
    * @dev Function gets the amount of DFT in the DFT dungeon farm 
    * to calculate a score that boosts the StakingRewards calculation
    * DFT requirements to get a boost are hard coded into the contract
    * 0DFT to 100 DFT staked respectfully generate a 0% to 100% bonus on Staking.
    * returned is a number between 50 and 100
    */
    function viewDftBoost(address _address) public view returns(uint256) {
        uint256 _userStake = IDungeon(poolMetrics.DftDungeon).myStake(_address).div(1e18);
        return SafeMath.min(200, _userStake.add(100));
    }
    
//==Points locking    
    function viewPoolPoints() public view returns(uint256) {
        uint256 _previousPoints = poolMetrics.stakingPoints;    // previous points shapshot 
        uint256 _previousStake = poolMetrics.staked;             // previous stake snapshot
        
        uint256 _timeHeld = currentTime().sub(
                    SafeMath.max(poolMetrics.lastEvent, poolMetrics.startTime)
                                                );                 // time held with _previous Event
                                                
        return  _previousPoints.add(_previousStake.mul(_timeHeld));    //generated points since event
    }

    function lockPoolPoints() internal returns (uint256) { //ON STAKE/UNSTAKE EVENT
        poolMetrics.stakingPoints = viewPoolPoints();
        poolMetrics.lastEvent = currentTime();   // update lastStakingEvent
        return poolMetrics.stakingPoints;
    } 
    
    function viewPointsOf(address _address) public view returns(uint256) {
        uint256 _previousPoints = userMetrics[_address].stakingPoints;    
        uint256 _previousStake = userMetrics[_address].stake; // boosted stake before event
    
        uint256 _timeHeld = currentTime().sub(
                    SafeMath.max(userMetrics[_address].lastEvent, poolMetrics.startTime)
                                                );                          // time held since lastEvent (take RWD, STK, unSTK)
        
        uint256 _result = _previousPoints.add(_previousStake.mul(_timeHeld));   
        
        if(_result > poolMetrics.stakingPoints){_result = poolMetrics.stakingPoints;}
        
        
        return _result;
    }

    function lockPointsOf(address _address) internal returns (uint256) {
        userMetrics[_address].poolPoints = viewPoolPoints();  // snapshot of pool points at lockEvent
        userMetrics[_address].stakingPoints = viewPointsOf(_address); 
        userMetrics[_address].lastEvent = currentTime(); 

        return userMetrics[_address].stakingPoints;
    }

    function pointsSnapshot(address _address) public returns (bool) {
        lockPointsOf(_address);
        lockPoolPoints();
        return true;
    }
     
    //==Rewards
    function viewTrancheReward(uint256 _period) internal view returns(uint256) {
        //uint256 _poolRewards = poolMetrics.rewards; //tokens in the pool. Note: This can be setup to a fixed amount (totalRewards)
        uint256 _poolRewards = poolMetrics.totalRewards; 
        
        if(poolMetrics.boostedRewards == false){ _poolRewards = SafeMath.min(poolMetrics.staked, _poolRewards);} 
        // baseline is the min( staked, rewards); avoids ultra_farming > staking pool - EXPERIMENTAL
        
        uint256 _timeRate = _period.mul(1e18).div(poolMetrics.duration);
        return _poolRewards.mul(_timeRate).div(1e18); //tranche of rewards on period
    }
    
    function userRateOnPeriod(address _address) public view returns (uint256){
        //calculates the delta of pool points and user points since last Event
        uint256 _deltaUser = viewPointsOf(_address).sub(userMetrics[_address].stakingPoints); // points generated since lastEvent
        uint256 _deltaPool = viewPoolPoints().sub(userMetrics[_address].poolPoints);          // pool points generated since lastEvent
        uint256 _rate = 0;
        if(_deltaUser == 0 || _deltaPool == 0 ){_rate = 0;} //rounding
        else {_rate = _deltaUser.mul(1e18).div(_deltaPool);}
        
        return viewDftBoost(_address).mul(_rate).div(200); //applies bossted rate on period based on the DFT in the dungeon.
    }
    
    function viewAdditionalRewardOf(address _address) public view returns(uint256) { // rewards generated since last Event
        require(poolMetrics.rewards > 0, "No Rewards in the Pool");
        
        // user weighted average share of Pool since lastEvent
        uint256 _userRateOnPeriod = userRateOnPeriod(_address); //can drop if pool size increases within period -> slows rewards generation
        
        // Pool Yield Rate 
        uint256 _period = currentTime().sub(
                            SafeMath.max(userMetrics[_address].lastEvent, poolMetrics.startTime)  
                            );        // time elapsed since last reward or pool started (if never taken rewards)

        // Calculate reward
        uint256 _reward = viewTrancheReward(_period).mul(_userRateOnPeriod).div(1e18);  //user rate on pool rewards' tranche

        return _reward;
    }
    
    function lockRewardOf(address _address) public returns(uint256) {
        uint256 _additional = viewAdditionalRewardOf(_address); //stakeShare(sinceLastEvent) * poolRewards(sinceLastEvent)
        userMetrics[_address].rewardAccrued = userMetrics[_address].rewardAccrued.add(_additional); //snapshot rewards.
        
        pointsSnapshot(_address); //updates lastEvent and points
        return userMetrics[_address].rewardAccrued;
    }  
    
    function takeRewards() public poolStarted antiSpam(1) { //1 blocks between rewards
        require(poolMetrics.rewards > 0, "No Rewards in the Pool");
        
        uint256 _reward = lockRewardOf(msg.sender); //returns already accrued + additional (also resets time counters)

        userMetrics[msg.sender].rewardsPaid = _reward;   // update user paid rewards
        
        userMetrics[msg.sender].rewardAccrued = 0; //flush previously accrued rewards.
        
        poolMetrics.rewards = poolMetrics.rewards.sub(_reward);           // update pool rewards
            
        IERC20(poolMetrics.rewardToken).transfer(msg.sender, _reward);  // transfer
            
        pointsSnapshot(msg.sender); //updates lastEvent
        //lockRewardOf(msg.sender);
            
        emit RewardTaken(msg.sender, _reward, "Rewards Sent");          
    }
    
//==staking & unstaking

    function stake(uint256 _amount) public poolLive antiSpam(1) antiWhale(msg.sender){
        require(_amount > 0, "Cannot stake 0");
        
        //initialize
        userMetrics[msg.sender].rewardAccrued = lockRewardOf(msg.sender); //Locks previous eligible rewards based on lastRewardEvent and lastStakingEvent
        pointsSnapshot(msg.sender);

        //receive staked
        uint256 _balanceNow = IERC20(address(poolMetrics.stakedToken)).balanceOf(address(this));
        IERC20(poolMetrics.stakedToken).transferFrom(msg.sender, address(this), _amount); //will require allowance
        uint256 amount = IERC20(address(poolMetrics.stakedToken)).balanceOf(address(this)).sub(_balanceNow); //actually received
        
        //update pool and user based on stake and fee
        uint256 _fee = amount.mul(poolMetrics.stakingFee).div(1000);
        amount = amount.sub(_fee);
        
        if(poolMetrics.stakedToken == poolMetrics.rewardToken){poolMetrics.rewards = poolMetrics.rewards.add(_fee);}
        poolMetrics.staked = poolMetrics.staked.add(amount);
        userMetrics[msg.sender].stake = userMetrics[msg.sender].stake.add(amount);

        //finalize
        pointsSnapshot(msg.sender); //updates lastEvent
        emit userStaking(msg.sender, amount, "Staking... ... ");
        
    } 
    
    function unStake(uint256 _amount) public poolStarted antiSpam(1) { 
        require(_amount > 0, "Cannot withdraw 0");
        require(_amount <= userMetrics[msg.sender].stake, "Cannot withdraw more than stake");

        //initialize
        userMetrics[msg.sender].rewardAccrued = lockRewardOf(msg.sender); //snapshot of  previous eligible rewards based on lastStakingEvent
        pointsSnapshot(msg.sender);

        // update metrics
        userMetrics[msg.sender].stake = userMetrics[msg.sender].stake.sub(_amount);
        poolMetrics.staked = poolMetrics.staked.sub(_amount);

        // transfer _amount. Put at the end of the function to avoid reentrancy.
        IERC20(poolMetrics.stakedToken).transfer(msg.sender, _amount);
        
        //finalize
        emit userWithdrawal(msg.sender, _amount, "Widhtdrawal");
    }

    function myStake(address _address) public view returns(uint256) {
        return userMetrics[_address].stake;
    }

    function myStakeShare(address _address) public view returns(uint256) {
        if(poolMetrics.staked == 0){return 0;}
        else {
        return (userMetrics[_address].stake).mul(100000).div(poolMetrics.staked);}
    } //base 100,000

    function myPointsShare(address _address) public view returns(uint256) {  //weighted average of your stake over time vs the pool
        return viewPointsOf(_address).mul(100000).div(viewPoolPoints());
    } //base 100,000. Drops when taking rewards.=> Refills after (favors strong hands)

    function myRewards(address _address) public view returns(uint256) {
        //delayed start obfuscation (avoids disturbances in the force...)
        if(block.timestamp <= poolMetrics.startTime || poolMetrics.rewards == 0){return 0;}
        else { return userMetrics[_address].rewardAccrued.add(viewAdditionalRewardOf(_address));} //previousLock + time based extra
    }
 

//== OPERATOR FUNCTIONS ==
    
    function setBoostedRewards(bool _bool) public onlyPoolOperator {
        poolMetrics.boostedRewards = _bool;
    }

    function loadRewards(uint256 _amount, uint256 _preStake) public onlyPoolOperator { //load tokens in the rewards pool.
        
        uint256 _balanceNow = IERC20(address(poolMetrics.rewardToken)).balanceOf(address(this));
        IERC20(address(poolMetrics.rewardToken)).transferFrom( msg.sender,  address(this),  _amount);
        uint256 amount = IERC20(address(poolMetrics.rewardToken)).balanceOf(address(this)).sub(_balanceNow); //actually received
        

        if(poolMetrics.rewards == 0){                                   // initialization
        poolMetrics.staked = SafeMath.add(poolMetrics.staked,_preStake);}  // creates baseline for pool. Avoids massive movements on rewards
        
        poolMetrics.rewards = SafeMath.add(poolMetrics.rewards,amount);
        poolMetrics.totalRewards = poolMetrics.totalRewards.add(_amount);
    }    
    
    function flushPool(address _recipient, address _ERC20address) external onlyPoolOperator poolEnded {
        uint256 _amount = IERC20(_ERC20address).balanceOf(address(this));
        IERC20(_ERC20address).transfer(_recipient, _amount); //use of the _ERC20 traditional transfer
        //return true;
    } //get tokens sent by error to contract

    function setPoolOperator(address _address) public onlyPoolOperator {
        poolOperator = _address;
    }
    
    function setFee(uint256 _fee) public onlyOwner {
        poolMetrics.stakingFee = _fee;
    }
    
    function killPool() public onlyOwner poolEnded returns(bool) {
        selfdestruct(msg.sender);
    } //frees space on the ETH chain

}

File 2 of 3: SafeMath.sol
// File: @openzeppelin/contracts/math/Math.sol
//

// File: @openzeppelin/contracts/math/SafeMath.sol
pragma solidity ^0.6.0;
/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath{
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    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.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        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.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
    
        /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }
}

File 3 of 3: _Interfaces.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IDungeon {
    function myStake(address _address) external view returns(uint256);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_stakedToken","type":"address"},{"internalType":"address","name":"_rewardToken","type":"address"},{"internalType":"uint256","name":"_feeBase1000","type":"uint256"},{"internalType":"uint256","name":"_durationHours","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountAdded","type":"uint256"},{"indexed":false,"internalType":"string","name":"_desc","type":"string"}],"name":"PoolInitalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"string","name":"_desc","type":"string"}],"name":"RewardTaken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"_desc","type":"string"}],"name":"userStaking","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"_desc","type":"string"}],"name":"userWithdrawal","type":"event"},{"inputs":[],"name":"currentTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_ERC20address","type":"address"}],"name":"flushPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"killPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_preStake","type":"uint256"}],"name":"loadRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"lockRewardOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"myPointsShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"myRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"myStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"myStakeShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"pointsSnapshot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"poolMetrics","outputs":[{"internalType":"address","name":"stakedToken","type":"address"},{"internalType":"uint256","name":"staked","type":"uint256"},{"internalType":"uint256","name":"stakingFee","type":"uint256"},{"internalType":"uint256","name":"stakingPoints","type":"uint256"},{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"uint256","name":"rewards","type":"uint256"},{"internalType":"uint256","name":"totalRewards","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"closingTime","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"lastEvent","type":"uint256"},{"internalType":"uint256","name":"ratePerToken","type":"uint256"},{"internalType":"address","name":"DftDungeon","type":"address"},{"internalType":"bool","name":"boostedRewards","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolOperator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setBoostedRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dungeon","type":"address"}],"name":"setDungeon","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setPoolOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"takeRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"unStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userMetrics","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"stakingPoints","type":"uint256"},{"internalType":"uint256","name":"poolPoints","type":"uint256"},{"internalType":"uint256","name":"lastEvent","type":"uint256"},{"internalType":"uint256","name":"rewardAccrued","type":"uint256"},{"internalType":"uint256","name":"rewardsPaid","type":"uint256"},{"internalType":"uint256","name":"lastTxBlock","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"userRateOnPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"viewAdditionalRewardOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"viewDftBoost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"viewPointsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"viewPoolPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b5060405162003a5338038062003a53833981810160405260808110156200003757600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505033600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550836000800160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160006002018190555062000195610e1082620001ec60201b620032f51790919060201c565b600060090181905550426000600701819055506000600901544201600060080181905550600160006003018190555060016000600c0160146101000a81548160ff0219169083151502179055505050505062000277565b60008083141562000201576000905062000271565b60008284029050828482816200021357fe5b04146200026c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018062003a326021913960400191505060405180910390fd5b809150505b92915050565b6137ab80620002876000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80637adaa21a116100de578063ad12101d11610097578063cf604bc911610071578063cf604bc91461079f578063d18e81b3146107e9578063fcecc4df14610807578063ff939f96146109085761018e565b8063ad12101d146106ab578063bb2c2556146106e3578063beaa369a146107475761018e565b80637adaa21a146105215780638883cb0e1461052b5780638da5cb5b14610583578063918771cd146105cd5780639e05da6a14610625578063a694fc3a1461067d5761018e565b8063430c45321161014b5780635d3eea91116101255780635d3eea911461044b57806361546cc01461047957806369fe0e2d146104d15780637a39b8d8146104ff5761018e565b8063430c4532146103b95780634a6013d9146103fd5780635c6187aa1461042d5761018e565b80631f227e481461019357806320b9588c146102155780632612798d1461026d5780632d2d1008146102c557806335ad1e031461031d57806342819fc414610361575b600080fd5b6101d5600480360360208110156101a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610964565b6040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b6102576004803603602081101561022b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109a6565b6040518082815260200191505060405180910390f35b6102af6004803603602081101561028357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a32565b6040518082815260200191505060405180910390f35b610307600480360360208110156102db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b6d565b6040518082815260200191505060405180910390f35b61035f6004803603602081101561033357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bfc565b005b6103a36004803603602081101561037757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d3e565b6040518082815260200191505060405180910390f35b6103fb600480360360208110156103cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e8a565b005b61042b6004803603602081101561041357600080fd5b81019080803515159060200190929190505050610f94565b005b6104356110b2565b6040518082815260200191505060405180910390f35b6104776004803603602081101561046157600080fd5b8101908080359060200190929190505050611124565b005b6104bb6004803603602081101561048f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611649565b6040518082815260200191505060405180910390f35b6104fd600480360360208110156104e757600080fd5b8101908080359060200190929190505050611689565b005b610507611759565b604051808215151515815260200191505060405180910390f35b6105296118b1565b005b61056d6004803603602081101561054157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cd5565b6040518082815260200191505060405180910390f35b61058b611df7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61060f600480360360208110156105e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e1d565b6040518082815260200191505060405180910390f35b6106676004803603602081101561063b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f1b565b6040518082815260200191505060405180910390f35b6106a96004803603602081101561069357600080fd5b8101908080359060200190929190505050612063565b005b6106e1600480360360408110156106c157600080fd5b8101908080359060200190929190803590602001909291905050506128a6565b005b610745600480360360408110156106f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cf8565b005b6107896004803603602081101561075d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ff4565b6040518082815260200191505060405180910390f35b6107a7613040565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f1613066565b6040518082815260200191505060405180910390f35b61080f61307c565b604051808f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018e81526020018d81526020018c81526020018b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019e50505050505050505050505050505060405180910390f35b61094a6004803603602081101561091e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613143565b604051808215151515815260200191505060405180910390f35b600d6020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b60008060070154421115806109bf575060008060050154145b156109cd5760009050610a2d565b610a2a6109d983610a32565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015461316190919063ffffffff16565b90505b919050565b60008060006005015411610aae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4e6f205265776172647320696e2074686520506f6f6c0000000000000000000081525060200191505060405180910390fd5b6000610ab983610d3e565b90506000610b27610b11600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546000600701546131e9565b610b19613066565b61320390919063ffffffff16565b90506000610b60670de0b6b3a7640000610b5285610b448661324d565b6132f590919063ffffffff16565b61337b90919063ffffffff16565b9050809350505050919050565b6000806000600101541415610b855760009050610bf7565b610bf4600060010154610be6620186a0600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546132f590919063ffffffff16565b61337b90919063ffffffff16565b90505b919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ca55750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610cfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136cb6029913960400191505060405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610d9e600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154610d9085611f1b565b61320390919063ffffffff16565b90506000610dfe600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154610df06110b2565b61320390919063ffffffff16565b905060008090506000831480610e145750600082145b15610e225760009050610e52565b610e4f82610e41670de0b6b3a7640000866132f590919063ffffffff16565b61337b90919063ffffffff16565b90505b610e8060c8610e7283610e6489611cd5565b6132f590919063ffffffff16565b61337b90919063ffffffff16565b9350505050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f6e6c79204f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806000600c0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061103d5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611092576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136cb6029913960400191505060405180910390fd5b806000600c0160146101000a81548160ff02191690831515021790555050565b600080600060030154905060008060010154905060006110f56110df6000600a01546000600701546131e9565b6110e7613066565b61320390919063ffffffff16565b905061111c61110d82846132f590919063ffffffff16565b8461316190919063ffffffff16565b935050505090565b60006007015442101561119f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f506f6f6c206e6f7420737461727465642059657400000000000000000000000081525060200191505060405180910390fd5b60016111f681600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006015461316190919063ffffffff16565b431161124d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806137156022913960400191505060405180910390fd5b43600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506000821161130a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74207769746864726177203000000000000000000000000000000081525060200191505060405180910390fd5b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548211156113c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f74207769746864726177206d6f7265207468616e207374616b650081525060200191505060405180910390fd5b6113cb33611e1d565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004018190555061141a33613143565b5061147082600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461320390919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506114ce8260006001015461320390919063ffffffff16565b6000600101819055506000800160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561158257600080fd5b505af1158015611596573d6000803e3d6000fd5b505050506040513d60208110156115ac57600080fd5b8101908080519060200190929190505050503373ffffffffffffffffffffffffffffffffffffffff167ff81475acca41b6158ffa94b90c0570165f1052684e7df9ab735e66ca1f57435f8360405180828152602001806020018281038252600b8152602001807f576964687464726177616c0000000000000000000000000000000000000000008152506020019250505060405180910390a25050565b60006116826116566110b2565b611674620186a061166686611f1b565b6132f590919063ffffffff16565b61337b90919063ffffffff16565b9050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461174c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f6e6c79204f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060006002018190555050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f6e6c79204f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600801544211611898576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f6f6c206e6f7420656e64656420596574000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16ff5b60006007015442101561192c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f506f6f6c206e6f7420737461727465642059657400000000000000000000000081525060200191505060405180910390fd5b600161198381600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006015461316190919063ffffffff16565b43116119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806137156022913960400191505060405180910390fd5b43600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506000806005015411611a9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4e6f205265776172647320696e2074686520506f6f6c0000000000000000000081525060200191505060405180910390fd5b6000611aa633611e1d565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501819055506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550611b4f8160006005015461320390919063ffffffff16565b600060050181905550600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611c0457600080fd5b505af1158015611c18573d6000803e3d6000fd5b505050506040513d6020811015611c2e57600080fd5b810190808051906020019092919050505050611c4933613143565b503373ffffffffffffffffffffffffffffffffffffffff167f2fc029baad553950fe705b54adac427ede59ec14428d842ec4f83ee1a090e8fb8260405180828152602001806020018281038252600c8152602001807f526577617264732053656e7400000000000000000000000000000000000000008152506020019250505060405180910390a25050565b600080611dcf670de0b6b3a76400006000600c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beaa369a866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d8657600080fd5b505afa158015611d9a573d6000803e3d6000fd5b505050506040513d6020811015611db057600080fd5b810190808051906020019092919050505061337b90919063ffffffff16565b9050611def60c8611dea60648461316190919063ffffffff16565b6133c5565b915050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611e2983610a32565b9050611e8081600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015461316190919063ffffffff16565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550611ecf83613143565b50600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154915050919050565b600080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000612016612000600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546000600701546131e9565b612008613066565b61320390919063ffffffff16565b9050600061203f61203083856132f590919063ffffffff16565b8561316190919063ffffffff16565b90506000600301548111156120575760006003015490505b80945050505050919050565b6000600701544210156120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f506f6f6c206e6f7420737461727465642059657400000000000000000000000081525060200191505060405180910390fd5b600060080154421115612159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f506f6f6c20636c6f73656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016121b081600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006015461316190919063ffffffff16565b4311612207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806137156022913960400191505060405180910390fd5b43600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018190555033614e2061225b82610b6d565b106122b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613737603f913960400191505060405180910390fd5b60008311612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b61233033611e1d565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004018190555061237f33613143565b5060008060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561242357600080fd5b505afa158015612437573d6000803e3d6000fd5b505050506040513d602081101561244d57600080fd5b810190808051906020019092919050505090506000800160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561253f57600080fd5b505af1158015612553573d6000803e3d6000fd5b505050506040513d602081101561256957600080fd5b810190808051906020019092919050505050600061266b826000800160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561262257600080fd5b505afa158015612636573d6000803e3d6000fd5b505050506040513d602081101561264c57600080fd5b810190808051906020019092919050505061320390919063ffffffff16565b9050600061269b6103e861268d600060020154856132f590919063ffffffff16565b61337b90919063ffffffff16565b90506126b0818361320390919063ffffffff16565b9150600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000800160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612751576127478160006005015461316190919063ffffffff16565b6000600501819055505b6127698260006001015461316190919063ffffffff16565b6000600101819055506127c782600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461316190919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061281633613143565b503373ffffffffffffffffffffffffffffffffffffffff167f167ca5543be7bdd4d64d74a1255ec46c74aa0b2ad274a73b1a5c910f8d65d26f8360405180828152602001806020018281038252600f8152602001807f5374616b696e672e2e2e202e2e2e2000000000000000000000000000000000008152506020019250505060405180910390a2505050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061294f5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6129a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136cb6029913960400191505060405180910390fd5b60008060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612a4757600080fd5b505afa158015612a5b573d6000803e3d6000fd5b505050506040513d6020811015612a7157600080fd5b81019080805190602001909291905050509050600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015612b6457600080fd5b505af1158015612b78573d6000803e3d6000fd5b505050506040513d6020811015612b8e57600080fd5b8101908080519060200190929190505050506000612c9182600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c4857600080fd5b505afa158015612c5c573d6000803e3d6000fd5b505050506040513d6020811015612c7257600080fd5b810190808051906020019092919050505061320390919063ffffffff16565b9050600080600501541415612cb957612caf60006001015484613161565b6000600101819055505b612cc860006005015482613161565b600060050181905550612ce98460006006015461316190919063ffffffff16565b60006006018190555050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612da15750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612df6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136cb6029913960400191505060405180910390fd5b6000600801544211612e70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f6f6c206e6f7420656e64656420596574000000000000000000000000000081525060200191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612eef57600080fd5b505afa158015612f03573d6000803e3d6000fd5b505050506040513d6020811015612f1957600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612fb357600080fd5b505af1158015612fc7573d6000803e3d6000fd5b505050506040513d6020811015612fdd57600080fd5b810190808051906020019092919050505050505050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000613077426000600801546133c5565b905090565b60008060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600501549080600601549080600701549080600801549080600901549080600a01549080600b01549080600c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600c0160149054906101000a900460ff1690508e565b600061314e826133de565b50613157613515565b5060019050919050565b6000808284019050838110156131df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000818310156131f957816131fb565b825b905092915050565b600061324583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613544565b905092915050565b6000806000600601549050600015156000600c0160149054906101000a900460ff161515141561328957613286600060010154826133c5565b90505b60006132bd6000600901546132af670de0b6b3a7640000876132f590919063ffffffff16565b61337b90919063ffffffff16565b90506132ec670de0b6b3a76400006132de83856132f590919063ffffffff16565b61337b90919063ffffffff16565b92505050919050565b6000808314156133085760009050613375565b600082840290508284828161331957fe5b0414613370576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136f46021913960400191505060405180910390fd5b809150505b92915050565b60006133bd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613604565b905092915050565b60008183106133d457816133d6565b825b905092915050565b60006133e86110b2565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061343782611f1b565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550613485613066565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b600061351f6110b2565b600060030181905550613530613066565b6000600a0181905550600060030154905090565b60008383111582906135f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135b657808201518184015260208101905061359b565b50505050905090810190601f1680156135e35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906136b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561367557808201518184015260208101905061365a565b50505050905090810190601f1680156136a25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816136bc57fe5b04905080915050939250505056fe6d73672e73656e646572206973206e6f7420616c6c6f77656420746f206f70657261746520506f6f6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7757616974205820424c4f434b53206265747765656e205472616e73616374696f6e7355736572207374616b652520736861726520746f6f20686967682e204c6561766520736f6d6520666f722074686520736d616c6c65722067757973203b2d29a26469706673582212202131e5f6f85019179498cb6df8d7b124b50da1f0e8386b0c85fa70690eb221a864736f6c63430006000033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77000000000000000000000000b469899812f74ee43bffe2d2022590111da864250000000000000000000000009a7a4c141a3bcce4a31e42c1192ac6add35069b40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088e

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80637adaa21a116100de578063ad12101d11610097578063cf604bc911610071578063cf604bc91461079f578063d18e81b3146107e9578063fcecc4df14610807578063ff939f96146109085761018e565b8063ad12101d146106ab578063bb2c2556146106e3578063beaa369a146107475761018e565b80637adaa21a146105215780638883cb0e1461052b5780638da5cb5b14610583578063918771cd146105cd5780639e05da6a14610625578063a694fc3a1461067d5761018e565b8063430c45321161014b5780635d3eea91116101255780635d3eea911461044b57806361546cc01461047957806369fe0e2d146104d15780637a39b8d8146104ff5761018e565b8063430c4532146103b95780634a6013d9146103fd5780635c6187aa1461042d5761018e565b80631f227e481461019357806320b9588c146102155780632612798d1461026d5780632d2d1008146102c557806335ad1e031461031d57806342819fc414610361575b600080fd5b6101d5600480360360208110156101a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610964565b6040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b6102576004803603602081101561022b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506109a6565b6040518082815260200191505060405180910390f35b6102af6004803603602081101561028357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a32565b6040518082815260200191505060405180910390f35b610307600480360360208110156102db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b6d565b6040518082815260200191505060405180910390f35b61035f6004803603602081101561033357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bfc565b005b6103a36004803603602081101561037757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d3e565b6040518082815260200191505060405180910390f35b6103fb600480360360208110156103cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e8a565b005b61042b6004803603602081101561041357600080fd5b81019080803515159060200190929190505050610f94565b005b6104356110b2565b6040518082815260200191505060405180910390f35b6104776004803603602081101561046157600080fd5b8101908080359060200190929190505050611124565b005b6104bb6004803603602081101561048f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611649565b6040518082815260200191505060405180910390f35b6104fd600480360360208110156104e757600080fd5b8101908080359060200190929190505050611689565b005b610507611759565b604051808215151515815260200191505060405180910390f35b6105296118b1565b005b61056d6004803603602081101561054157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cd5565b6040518082815260200191505060405180910390f35b61058b611df7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61060f600480360360208110156105e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e1d565b6040518082815260200191505060405180910390f35b6106676004803603602081101561063b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f1b565b6040518082815260200191505060405180910390f35b6106a96004803603602081101561069357600080fd5b8101908080359060200190929190505050612063565b005b6106e1600480360360408110156106c157600080fd5b8101908080359060200190929190803590602001909291905050506128a6565b005b610745600480360360408110156106f957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cf8565b005b6107896004803603602081101561075d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ff4565b6040518082815260200191505060405180910390f35b6107a7613040565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f1613066565b6040518082815260200191505060405180910390f35b61080f61307c565b604051808f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018e81526020018d81526020018c81526020018b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001821515151581526020019e50505050505050505050505050505060405180910390f35b61094a6004803603602081101561091e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613143565b604051808215151515815260200191505060405180910390f35b600d6020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b60008060070154421115806109bf575060008060050154145b156109cd5760009050610a2d565b610a2a6109d983610a32565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015461316190919063ffffffff16565b90505b919050565b60008060006005015411610aae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4e6f205265776172647320696e2074686520506f6f6c0000000000000000000081525060200191505060405180910390fd5b6000610ab983610d3e565b90506000610b27610b11600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546000600701546131e9565b610b19613066565b61320390919063ffffffff16565b90506000610b60670de0b6b3a7640000610b5285610b448661324d565b6132f590919063ffffffff16565b61337b90919063ffffffff16565b9050809350505050919050565b6000806000600101541415610b855760009050610bf7565b610bf4600060010154610be6620186a0600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546132f590919063ffffffff16565b61337b90919063ffffffff16565b90505b919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ca55750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610cfa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136cb6029913960400191505060405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080610d9e600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154610d9085611f1b565b61320390919063ffffffff16565b90506000610dfe600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154610df06110b2565b61320390919063ffffffff16565b905060008090506000831480610e145750600082145b15610e225760009050610e52565b610e4f82610e41670de0b6b3a7640000866132f590919063ffffffff16565b61337b90919063ffffffff16565b90505b610e8060c8610e7283610e6489611cd5565b6132f590919063ffffffff16565b61337b90919063ffffffff16565b9350505050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f6e6c79204f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806000600c0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061103d5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611092576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136cb6029913960400191505060405180910390fd5b806000600c0160146101000a81548160ff02191690831515021790555050565b600080600060030154905060008060010154905060006110f56110df6000600a01546000600701546131e9565b6110e7613066565b61320390919063ffffffff16565b905061111c61110d82846132f590919063ffffffff16565b8461316190919063ffffffff16565b935050505090565b60006007015442101561119f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f506f6f6c206e6f7420737461727465642059657400000000000000000000000081525060200191505060405180910390fd5b60016111f681600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006015461316190919063ffffffff16565b431161124d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806137156022913960400191505060405180910390fd5b43600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506000821161130a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f74207769746864726177203000000000000000000000000000000081525060200191505060405180910390fd5b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001548211156113c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f43616e6e6f74207769746864726177206d6f7265207468616e207374616b650081525060200191505060405180910390fd5b6113cb33611e1d565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004018190555061141a33613143565b5061147082600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461320390919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506114ce8260006001015461320390919063ffffffff16565b6000600101819055506000800160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561158257600080fd5b505af1158015611596573d6000803e3d6000fd5b505050506040513d60208110156115ac57600080fd5b8101908080519060200190929190505050503373ffffffffffffffffffffffffffffffffffffffff167ff81475acca41b6158ffa94b90c0570165f1052684e7df9ab735e66ca1f57435f8360405180828152602001806020018281038252600b8152602001807f576964687464726177616c0000000000000000000000000000000000000000008152506020019250505060405180910390a25050565b60006116826116566110b2565b611674620186a061166686611f1b565b6132f590919063ffffffff16565b61337b90919063ffffffff16565b9050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461174c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f6e6c79204f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8060006002018190555050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461181e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600a8152602001807f4f6e6c79204f776e65720000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600801544211611898576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f6f6c206e6f7420656e64656420596574000000000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16ff5b60006007015442101561192c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f506f6f6c206e6f7420737461727465642059657400000000000000000000000081525060200191505060405180910390fd5b600161198381600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006015461316190919063ffffffff16565b43116119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806137156022913960400191505060405180910390fd5b43600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055506000806005015411611a9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4e6f205265776172647320696e2074686520506f6f6c0000000000000000000081525060200191505060405180910390fd5b6000611aa633611e1d565b905080600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501819055506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550611b4f8160006005015461320390919063ffffffff16565b600060050181905550600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015611c0457600080fd5b505af1158015611c18573d6000803e3d6000fd5b505050506040513d6020811015611c2e57600080fd5b810190808051906020019092919050505050611c4933613143565b503373ffffffffffffffffffffffffffffffffffffffff167f2fc029baad553950fe705b54adac427ede59ec14428d842ec4f83ee1a090e8fb8260405180828152602001806020018281038252600c8152602001807f526577617264732053656e7400000000000000000000000000000000000000008152506020019250505060405180910390a25050565b600080611dcf670de0b6b3a76400006000600c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beaa369a866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d8657600080fd5b505afa158015611d9a573d6000803e3d6000fd5b505050506040513d6020811015611db057600080fd5b810190808051906020019092919050505061337b90919063ffffffff16565b9050611def60c8611dea60648461316190919063ffffffff16565b6133c5565b915050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080611e2983610a32565b9050611e8081600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004015461316190919063ffffffff16565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040181905550611ecf83613143565b50600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040154915050919050565b600080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000612016612000600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301546000600701546131e9565b612008613066565b61320390919063ffffffff16565b9050600061203f61203083856132f590919063ffffffff16565b8561316190919063ffffffff16565b90506000600301548111156120575760006003015490505b80945050505050919050565b6000600701544210156120de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f506f6f6c206e6f7420737461727465642059657400000000000000000000000081525060200191505060405180910390fd5b600060080154421115612159576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f506f6f6c20636c6f73656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016121b081600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006015461316190919063ffffffff16565b4311612207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806137156022913960400191505060405180910390fd5b43600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206006018190555033614e2061225b82610b6d565b106122b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180613737603f913960400191505060405180910390fd5b60008311612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74207374616b65203000000000000000000000000000000000000081525060200191505060405180910390fd5b61233033611e1d565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206004018190555061237f33613143565b5060008060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561242357600080fd5b505afa158015612437573d6000803e3d6000fd5b505050506040513d602081101561244d57600080fd5b810190808051906020019092919050505090506000800160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561253f57600080fd5b505af1158015612553573d6000803e3d6000fd5b505050506040513d602081101561256957600080fd5b810190808051906020019092919050505050600061266b826000800160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561262257600080fd5b505afa158015612636573d6000803e3d6000fd5b505050506040513d602081101561264c57600080fd5b810190808051906020019092919050505061320390919063ffffffff16565b9050600061269b6103e861268d600060020154856132f590919063ffffffff16565b61337b90919063ffffffff16565b90506126b0818361320390919063ffffffff16565b9150600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000800160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612751576127478160006005015461316190919063ffffffff16565b6000600501819055505b6127698260006001015461316190919063ffffffff16565b6000600101819055506127c782600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461316190919063ffffffff16565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061281633613143565b503373ffffffffffffffffffffffffffffffffffffffff167f167ca5543be7bdd4d64d74a1255ec46c74aa0b2ad274a73b1a5c910f8d65d26f8360405180828152602001806020018281038252600f8152602001807f5374616b696e672e2e2e202e2e2e2000000000000000000000000000000000008152506020019250505060405180910390a2505050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061294f5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6129a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136cb6029913960400191505060405180910390fd5b60008060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612a4757600080fd5b505afa158015612a5b573d6000803e3d6000fd5b505050506040513d6020811015612a7157600080fd5b81019080805190602001909291905050509050600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015612b6457600080fd5b505af1158015612b78573d6000803e3d6000fd5b505050506040513d6020811015612b8e57600080fd5b8101908080519060200190929190505050506000612c9182600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c4857600080fd5b505afa158015612c5c573d6000803e3d6000fd5b505050506040513d6020811015612c7257600080fd5b810190808051906020019092919050505061320390919063ffffffff16565b9050600080600501541415612cb957612caf60006001015484613161565b6000600101819055505b612cc860006005015482613161565b600060050181905550612ce98460006006015461316190919063ffffffff16565b60006006018190555050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612da15750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b612df6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806136cb6029913960400191505060405180910390fd5b6000600801544211612e70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f506f6f6c206e6f7420656e64656420596574000000000000000000000000000081525060200191505060405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612eef57600080fd5b505afa158015612f03573d6000803e3d6000fd5b505050506040513d6020811015612f1957600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612fb357600080fd5b505af1158015612fc7573d6000803e3d6000fd5b505050506040513d6020811015612fdd57600080fd5b810190808051906020019092919050505050505050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000613077426000600801546133c5565b905090565b60008060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600501549080600601549080600701549080600801549080600901549080600a01549080600b01549080600c0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600c0160149054906101000a900460ff1690508e565b600061314e826133de565b50613157613515565b5060019050919050565b6000808284019050838110156131df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000818310156131f957816131fb565b825b905092915050565b600061324583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613544565b905092915050565b6000806000600601549050600015156000600c0160149054906101000a900460ff161515141561328957613286600060010154826133c5565b90505b60006132bd6000600901546132af670de0b6b3a7640000876132f590919063ffffffff16565b61337b90919063ffffffff16565b90506132ec670de0b6b3a76400006132de83856132f590919063ffffffff16565b61337b90919063ffffffff16565b92505050919050565b6000808314156133085760009050613375565b600082840290508284828161331957fe5b0414613370576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806136f46021913960400191505060405180910390fd5b809150505b92915050565b60006133bd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613604565b905092915050565b60008183106133d457816133d6565b825b905092915050565b60006133e86110b2565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002018190555061343782611f1b565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550613485613066565b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b600061351f6110b2565b600060030181905550613530613066565b6000600a0181905550600060030154905090565b60008383111582906135f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156135b657808201518184015260208101905061359b565b50505050905090810190601f1680156135e35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080831182906136b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561367557808201518184015260208101905061365a565b50505050905090810190601f1680156136a25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816136bc57fe5b04905080915050939250505056fe6d73672e73656e646572206973206e6f7420616c6c6f77656420746f206f70657261746520506f6f6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7757616974205820424c4f434b53206265747765656e205472616e73616374696f6e7355736572207374616b652520736861726520746f6f20686967682e204c6561766520736f6d6520666f722074686520736d616c6c65722067757973203b2d29a26469706673582212202131e5f6f85019179498cb6df8d7b124b50da1f0e8386b0c85fa70690eb221a864736f6c63430006000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000b469899812f74ee43bffe2d2022590111da864250000000000000000000000009a7a4c141a3bcce4a31e42c1192ac6add35069b40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088e

-----Decoded View---------------
Arg [0] : _stakedToken (address): 0xB469899812F74EE43Bffe2D2022590111DA86425
Arg [1] : _rewardToken (address): 0x9a7a4C141a3BCCE4A31e42C1192Ac6Add35069b4
Arg [2] : _feeBase1000 (uint256): 0
Arg [3] : _durationHours (uint256): 2190

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000b469899812f74ee43bffe2d2022590111da86425
Arg [1] : 0000000000000000000000009a7a4c141a3bcce4a31e42c1192ac6add35069b4
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 000000000000000000000000000000000000000000000000000000000000088e


Deployed Bytecode Sourcemap

300:15676:0:-:0;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;300:15676:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1700:50;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1700:50:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13870:371;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13870:371:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8817:877;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8817:877:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;13335:221;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13335:221:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15620:107;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15620:107:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;8090:717;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8090:717:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4500:105;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4500:105:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;14281:114;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14281:114:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;5222:634;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12372:836;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12372:836:0;;;;;;;;;;;;;;;;;:::i;:::-;;13577:206;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13577:206:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15737:93;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15737:93:0;;;;;;;;;;;;;;;;;:::i;:::-;;15840:102;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10156:860;;;:::i;:::-;;4967:222;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4967:222:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1794:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;9704:440;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9704:440:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6130:739;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6130:739:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11051:1310;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11051:1310:0;;;;;;;;;;;;;;;;;:::i;:::-;;14401:856;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14401:856:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15271:304;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15271:304:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13214:115;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13214:115:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1765:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4292:151;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1195:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7239:150;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7239:150:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1700:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13870:371::-;13927:7;14042:11;:21;;;14023:15;:40;;:68;;;;14090:1;14067:11;:19;;;:24;14023:68;14020:181;;;14100:1;14093:8;;;;14020:181;14126:73;14166:32;14189:8;14166:22;:32::i;:::-;14126:11;:21;14138:8;14126:21;;;;;;;;;;;;;;;:35;;;:39;;:73;;;;:::i;:::-;14119:80;;13870:371;;;;:::o;8817:877::-;8887:7;8974:1;8952:11;:19;;;:23;8944:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9084:25;9112:26;9129:8;9112:16;:26::i;:::-;9084:54;;9261:15;9279:147;9326:68;9339:11;:21;9351:8;9339:21;;;;;;;;;;;;;;;:31;;;9372:11;:21;;;9326:12;:68::i;:::-;9279:13;:11;:13::i;:::-;:17;;:147;;;;:::i;:::-;9261:165;;9547:15;9565:59;9619:4;9565:49;9596:17;9565:26;9583:7;9565:17;:26::i;:::-;:30;;:49;;;;:::i;:::-;:53;;:59;;;;:::i;:::-;9547:77;;9680:7;9673:14;;;;;8817:877;;;:::o;13335:221::-;13395:7;13439:1;13417:11;:18;;;:23;13414:136;;;13449:1;13442:8;;;;13414:136;13483:65;13529:11;:18;;;13483:41;13517:6;13484:11;:21;13496:8;13484:21;;;;;;;;;;;;;;;:27;;;13483:33;;:41;;;;:::i;:::-;:45;;:65;;;;:::i;:::-;13476:72;;13335:221;;;;:::o;15620:107::-;3703:12;;;;;;;;;;;3690:25;;:10;:25;;;:48;;;;3733:5;;;;;;;;;;;3719:19;;:10;:19;;;3690:48;3682:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15712:8:::1;15697:12;;:23;;;;;;;;;;;;;;;;;;15620:107:::0;:::o;8090:717::-;8155:7;8252:18;8273:63;8300:11;:21;8312:8;8300:21;;;;;;;;;;;;;;;:35;;;8273:22;8286:8;8273:12;:22::i;:::-;:26;;:63;;;;:::i;:::-;8252:84;;8382:18;8403:54;8424:11;:21;8436:8;8424:21;;;;;;;;;;;;;;;:32;;;8403:16;:14;:16::i;:::-;:20;;:54;;;;:::i;:::-;8382:75;;8517:13;8533:1;8517:17;;8561:1;8547:10;:15;:34;;;;8580:1;8566:10;:15;8547:34;8544:123;;;8592:1;8584:9;;8544:123;;;8629:36;8654:10;8629:20;8644:4;8629:10;:14;;:20;;;;:::i;:::-;:24;;:36;;;;:::i;:::-;8621:44;;8544:123;8692:42;8730:3;8692:33;8719:5;8692:22;8705:8;8692:12;:22::i;:::-;:26;;:33;;;;:::i;:::-;:37;;:42;;;;:::i;:::-;8685:49;;;;;8090:717;;;:::o;4500:105::-;3859:5;;;;;;;;;;;3846:18;;:10;:18;;;3838:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4590:8:::1;4565:11;:22;;;:33;;;;;;;;;;;;;;;;;;4500:105:::0;:::o;14281:114::-;3703:12;;;;;;;;;;;3690:25;;:10;:25;;;:48;;;;3733:5;;;;;;;;;;;3719:19;;:10;:19;;;3690:48;3682:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14383:5:::1;14354:11;:26;;;:34;;;;;;;;;;;;;;;;;;14281:114:::0;:::o;5222:634::-;5268:7;5287:23;5313:11;:25;;;5287:51;;5380:22;5405:11;:18;;;5380:43;;5481:17;5501:147;5540:58;5553:11;:21;;;5576:11;:21;;;5540:12;:58::i;:::-;5501:13;:11;:13::i;:::-;:17;;:147;;;;:::i;:::-;5481:167;;5765:50;5785:29;5804:9;5785:14;:18;;:29;;;;:::i;:::-;5765:15;:19;;:50;;;;:::i;:::-;5757:58;;;;;5222:634;:::o;12372:836::-;3144:11;:21;;;3125:15;:40;;3117:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12434:1:::1;3464:48;3504:7;3464:11;:23;3476:10;3464:23;;;;;;;;;;;;;;;:35;;;:39;;:48;;;;:::i;:::-;3449:12;:63;3441:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3599:12;3561:11;:23;3573:10;3561:23;;;;;;;;;;;;;;;:35;;:50;;;;12466:1:::2;12456:7;:11;12448:41;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;12518:11;:23;12530:10;12518:23;;;;;;;;;;;;;;;:29;;;12507:7;:40;;12499:84;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;12655:24;12668:10;12655:12;:24::i;:::-;12615:11;:23;12627:10;12615:23;;;;;;;;;;;;;;;:37;;:64;;;;12756:26;12771:10;12756:14;:26::i;:::-;;12851:42;12885:7;12851:11;:23;12863:10;12851:23;;;;;;;;;;;;;;;:29;;;:33;;:42;;;;:::i;:::-;12819:11;:23;12831:10;12819:23;;;;;;;;;;;;;;;:29;;:74;;;;12924:31;12947:7;12924:11;:18;;;:22;;:31;;;;:::i;:::-;12903:11;:18;;:52;;;;13054:11;:23:::0;::::2;;;;;;;;;;;13047:40;;;13088:10;13100:7;13047:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::2;5:2;13047:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;13047:61:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::2;2:2;13047:61:0;;;;;;;;;;;;;;;;;13166:10;13151:50;;;13178:7;13151:50;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;3226:1:::1;12372:836:::0;:::o;13577:206::-;13638:7;13720:56;13759:16;:14;:16::i;:::-;13720:34;13747:6;13720:22;13733:8;13720:12;:22::i;:::-;:26;;:34;;;;:::i;:::-;:38;;:56;;;;:::i;:::-;13713:63;;13577:206;;;:::o;15737:93::-;3859:5;;;;;;;;;;;3846:18;;:10;:18;;;3838:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15819:4:::1;15794:11;:22;;:29;;;;15737:93:::0;:::o;15840:102::-;15895:4;3859:5;;;;;;;;;;;3846:18;;:10;:18;;;3838:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3296:11:::1;:23;;;3278:15;:41;3270:71;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;15924:10:::2;15911:24;;;10156:860:::0;3144:11;:21;;;3125:15;:40;;3117:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10207:1:::1;3464:48;3504:7;3464:11;:23;3476:10;3464:23;;;;;;;;;;;;;;;:35;;;:39;;:48;;;;:::i;:::-;3449:12;:63;3441:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3599:12;3561:11;:23;3573:10;3561:23;;;;;;;;;;;;;;;:35;;:50;;;;10277:1:::2;10255:11:::0;:19:::2;;;:23;10247:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;10324:15;10342:24;10355:10;10342:12;:24::i;:::-;10324:42;;10482:7;10444:11;:23;10456:10;10444:23;;;;;;;;;;;;;;;:35;;:45;;;;10578:1;10538:11;:23;10550:10;10538:23;;;;;;;;;;;;;;;:37;;:41;;;;10656:32;10680:7;10656:11;:19;;;:23;;:32;;;;:::i;:::-;10634:11;:19;;:54;;;;10751:11;:23;;;;;;;;;;;;10744:40;;;10785:10;10797:7;10744:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::2;5:2;10744:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;10744:61:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::2;2:2;10744:61:0;;;;;;;;;;;;;;;;;10841:26;10856:10;10841:14;:26::i;:::-;;10963:10;10951:48;;;10975:7;10951:48;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;3630:1;3226::::1;10156:860::o:0;4967:222::-;5027:7;5046:18;5067:60;5122:4;5076:11;:22;;;;;;;;;;;;5067:40;;;5108:8;5067:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5067:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5067:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5067:50:0;;;;;;;;;;;;;;;;:54;;:60;;;;:::i;:::-;5046:81;;5144:38;5157:3;5162:19;5177:3;5162:10;:14;;:19;;;;:::i;:::-;5144:12;:38::i;:::-;5137:45;;;4967:222;;;:::o;1794:20::-;;;;;;;;;;;;;:::o;9704:440::-;9759:7;9778:19;9800:32;9823:8;9800:22;:32::i;:::-;9778:54;;9939:52;9979:11;9939;:21;9951:8;9939:21;;;;;;;;;;;;;;;:35;;;:39;;:52;;;;:::i;:::-;9901:11;:21;9913:8;9901:21;;;;;;;;;;;;;;;:35;;:90;;;;10030:24;10045:8;10030:14;:24::i;:::-;;10102:11;:21;10114:8;10102:21;;;;;;;;;;;;;;;:35;;;10095:42;;;9704:440;;;:::o;6130:739::-;6190:7;6209:23;6235:11;:21;6247:8;6235:21;;;;;;;;;;;;;;;:35;;;6209:61;;6284:22;6309:11;:21;6321:8;6309:21;;;;;;;;;;;;;;;:27;;;6284:52;;6381:17;6401:157;6440:68;6453:11;:21;6465:8;6453:21;;;;;;;;;;;;;;;:31;;;6486:11;:21;;;6440:12;:68::i;:::-;6401:13;:11;:13::i;:::-;:17;;:157;;;;:::i;:::-;6381:177;;6654:15;6672:50;6692:29;6711:9;6692:14;:18;;:29;;;;:::i;:::-;6672:15;:19;;:50;;;;:::i;:::-;6654:68;;6757:11;:25;;;6747:7;:35;6744:77;;;6794:11;:25;;;6784:35;;6744:77;6855:7;6848:14;;;;;;6130:739;;;:::o;11051:1310::-;2887:11;:21;;;2868:15;:40;;2860:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2996:11;:23;;;2977:15;:42;;2969:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11108:1:::1;3464:48;3504:7;3464:11;:23;3476:10;3464:23;;;;;;;;;;;;;;;:35;;;:39;;:48;;;;:::i;:::-;3449:12;:63;3441:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3599:12;3561:11;:23;3573:10;3561:23;;;;;;;;;;;;;;;:35;;:50;;;;11121:10:::2;3982:5;3957:22;3970:8;3957:12;:22::i;:::-;:30;3949:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11160:1:::3;11150:7;:11;11142:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;11260:24;11273:10;11260:12;:24::i;:::-;11220:11;:23;11232:10;11220:23;;;;;;;;;;;;;;;:37;;:64;;;;11374:26;11389:10;11374:14;:26::i;:::-;;11436:19;11473:11:::0;:23:::3;;;;;;;;;;;;11458:50;;;11517:4;11458:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::3;5:2;11458:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::3;77:16;74:1;67:27;5:2;11458:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::3;2:2;11458:65:0;;;;;;;;;;;;;;;;11436:87;;11540:11;:23:::0;::::3;;;;;;;;;;;11533:44;;;11578:10;11598:4;11605:7;11533:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::3;5:2;11533:80:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::3;77:16;74:1;67:27;5:2;11533:80:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::3;2:2;11533:80:0;;;;;;;;;;;;;;;;;11648:14;11665:82;11735:11;11680;:23:::0;::::3;;;;;;;;;;;11665:50;;;11724:4;11665:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::3;5:2;11665:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::3;77:16;74:1;67:27;5:2;11665:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::3;2:2;11665:65:0;;;;;;;;;;;;;;;;:69;;:82;;;;:::i;:::-;11648:99;;11840:12;11855:44;11894:4;11855:34;11866:11;:22;;;11855:6;:10;;:34;;;;:::i;:::-;:38;;:44;;;;:::i;:::-;11840:59;;11918:16;11929:4;11918:6;:10;;:16;;;;:::i;:::-;11909:25;;11983:11;:23;;;;;;;;;;;;11956:50;;:11;:23:::0;::::3;;;;;;;;;;;:50;;;11953:108;;;12030:29;12054:4;12030:11;:19;;;:23;;:29;;;;:::i;:::-;12008:11;:19;;:51;;;;11953:108;12091:30;12114:6;12091:11;:18;;;:22;;:30;;;;:::i;:::-;12070:11;:18;;:51;;;;12163:41;12197:6;12163:11;:23;12175:10;12163:23;;;;;;;;;;;;;;;:29;;;:33;;:41;;;;:::i;:::-;12131:11;:23;12143:10;12131:23;;;;;;;;;;;;;;;:29;;:73;;;;12234:26;12249:10;12234:14;:26::i;:::-;;12307:10;12295:50;;;12319:6;12295:50;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;4075:1;;;3630::::2;3071::::1;11051:1310:::0;:::o;14401:856::-;3703:12;;;;;;;;;;;3690:25;;:10;:25;;;:48;;;;3733:5;;;;;;;;;;;3719:19;;:10;:19;;;3690:48;3682:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14536:19:::1;14573:11:::0;:23:::1;;;;;;;;;;;;14558:50;;;14617:4;14558:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;14558:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14558:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;14558:65:0;;;;;;;;;;;;;;;;14536:87;;14648:11;:23;;;;;;;;;;;;14633:53;;;14688:10;14709:4;14717:7;14633:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;14633:92:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14633:92:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;14633:92:0;;;;;;;;;;;;;;;;;14735:14;14752:82;14822:11;14767;:23;;;;;;;;;;;;14752:50;;;14811:4;14752:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;14752:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;14752:65:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;14752:65:0;;;;;;;;;;;;;;;;:69;;:82;;;;:::i;:::-;14735:99;;14900:1;14877:11:::0;:19:::1;;;:24;14874:155;;;14985:42;14998:11;:18;;;15017:9;14985:12;:42::i;:::-;14964:11;:18;;:63;;;;14874:155;15136:40;15149:11;:19;;;15169:6;15136:12;:40::i;:::-;15114:11;:19;;:62;;;;15213:37;15242:7;15213:11;:24;;;:28;;:37;;;;:::i;:::-;15186:11;:24;;:64;;;;3794:1;;14401:856:::0;;:::o;15271:304::-;3703:12;;;;;;;;;;;3690:25;;:10;:25;;;:48;;;;3733:5;;;;;;;;;;;3719:19;;:10;:19;;;3690:48;3682:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3296:11:::1;:23;;;3278:15;:41;3270:71;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;15379:15:::2;15404:13;15397:31;;;15437:4;15397:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::2;5:2;15397:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;15397:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::2;2:2;15397:46:0;;;;;;;;;;;;;;;;15379:64;;15460:13;15453:30;;;15484:10;15496:7;15453:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::2;5:2;15453:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::2;77:16;74:1;67:27;5:2;15453:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::2;2:2;15453:51:0;;;;;;;;;;;;;;;;;3378:1;15271:304:::0;;:::o;13214:115::-;13269:7;13295:11;:21;13307:8;13295:21;;;;;;;;;;;;;;;:27;;;13288:34;;13214:115;;;:::o;1765:27::-;;;;;;;;;;;;;:::o;4292:151::-;4336:7;4362:54;4375:15;4392:11;:23;;;4362:12;:54::i;:::-;4355:61;;4292:151;:::o;1195:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7239:150::-;7297:4;7313:22;7326:8;7313:12;:22::i;:::-;;7345:16;:14;:16::i;:::-;;7378:4;7371:11;;7239:150;;;:::o;934:176:1:-;992:7;1011:9;1027:1;1023;:5;1011:17;;1051:1;1046;:6;;1038:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1102:1;1095:8;;;934:176;;;;:::o;5473:105::-;5531:7;5562:1;5557;:6;;:14;;5570:1;5557:14;;;5566:1;5557:14;5550:21;;5473:105;;;;:::o;1374:134::-;1432:7;1458:43;1462:1;1465;1458:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1451:50;;1374:134;;;;:::o;7416:664:0:-;7482:7;7634:20;7657:11;:24;;;7634:47;;7734:5;7704:35;;:11;:26;;;;;;;;;;;;:35;;;7701:104;;;7757:46;7770:11;:18;;;7790:12;7757;:46::i;:::-;7742:61;;7701:104;7925:17;7945:43;7967:11;:20;;;7945:17;7957:4;7945:7;:11;;:17;;;;:::i;:::-;:21;;:43;;;;:::i;:::-;7925:63;;8005:37;8037:4;8005:27;8022:9;8005:12;:16;;:27;;;;:::i;:::-;:31;;:37;;;;:::i;:::-;7998:44;;;;7416:664;;;:::o;2259:459:1:-;2317:7;2563:1;2558;:6;2554:45;;;2587:1;2580:8;;;;2554:45;2609:9;2625:1;2621;:5;2609:17;;2653:1;2648;2644;:5;;;;;;:10;2636:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2710:1;2703:8;;;2259:459;;;;;:::o;3173:130::-;3231:7;3257:39;3261:1;3264;3257:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3250:46;;3173:130;;;;:::o;5649:104::-;5707:7;5737:1;5733;:5;:13;;5745:1;5733:13;;;5741:1;5733:13;5726:20;;5649:104;;;;:::o;6875:358:0:-;6933:7;6987:16;:14;:16::i;:::-;6952:11;:21;6964:8;6952:21;;;;;;;;;;;;;;;:32;;:51;;;;7092:22;7105:8;7092:12;:22::i;:::-;7054:11;:21;7066:8;7054:21;;;;;;;;;;;;;;;:35;;:60;;;;7159:13;:11;:13::i;:::-;7125:11;:21;7137:8;7125:21;;;;;;;;;;;;;;;:31;;:47;;;;7191:11;:21;7203:8;7191:21;;;;;;;;;;;;;;;:35;;;7184:42;;6875:358;;;:::o;5862:257::-;5906:7;5978:16;:14;:16::i;:::-;5950:11;:25;;:44;;;;6028:13;:11;:13::i;:::-;6004:11;:21;;:37;;;;6087:11;:25;;;6080:32;;5862:257;:::o;1832:187:1:-;1918:7;1950:1;1945;:6;;1953:12;1937:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1937:29:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1976:9;1992:1;1988;:5;1976:17;;2011:1;2004:8;;;1832:187;;;;;:::o;3818:338::-;3904:7;4001:1;3997;:5;4004:12;3989:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3989:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4027:9;4043:1;4039;:5;;;;;;4027:17;;4148:1;4141:8;;;3818:338;;;;;:::o

Swarm Source

ipfs://2131e5f6f85019179498cb6df8d7b124b50da1f0e8386b0c85fa70690eb221a8

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.