FTM Price: $0.40 (-0.35%)
Gas: 35 Gwei

Contract

0x8adE403913050EC3e49A1e0a63Ee8b7E396102D1
 

Overview

FTM Balance

Fantom LogoFantom LogoFantom Logo0 FTM

FTM Value

$0.00

Token Holdings

Sponsored

Transaction Hash
Method
Block
From
To
Value
Withdraw546090932023-01-28 19:04:30390 days 8 hrs ago1674932670IN
0x8adE40...396102D1
0 FTM0.0031374528.44499231
Claim Reward546056472023-01-28 17:56:10390 days 9 hrs ago1674928570IN
0x8adE40...396102D1
0 FTM0.002216440.76073756
Update546027022023-01-28 17:00:29390 days 10 hrs ago1674925229IN
0x8adE40...396102D1
0 FTM0.00216133.31699678
Update540298642023-01-19 10:46:30399 days 16 hrs ago1674125190IN
0x8adE40...396102D1
0 FTM0.0033523951.68510316
Exit531522962023-01-03 13:26:56415 days 14 hrs ago1672752416IN
0x8adE40...396102D1
0 FTM0.009334998.74547576
Update531519792023-01-03 13:18:30415 days 14 hrs ago1672751910IN
0x8adE40...396102D1
0 FTM0.0073198112.8519723
Update530863592023-01-02 2:53:32417 days 37 mins ago1672628012IN
0x8adE40...396102D1
0 FTM0.0064048298.74547576
Update530530232022-12-31 11:18:22418 days 16 hrs ago1672485502IN
0x8adE40...396102D1
0 FTM0.01192115183.79254639
Update530435792022-12-31 0:21:54419 days 3 hrs ago1672446114IN
0x8adE40...396102D1
0 FTM0.0037650458.04696381
Stake530040242022-12-29 7:49:02420 days 19 hrs ago1672300142IN
0x8adE40...396102D1
0 FTM0.00767915127.49502729
Exit530040092022-12-29 7:47:56420 days 19 hrs ago1672300076IN
0x8adE40...396102D1
0 FTM0.0079187862.2125
Update529675772022-12-28 9:44:01421 days 17 hrs ago1672220641IN
0x8adE40...396102D1
0 FTM0.0019234529.65449848
Exit528624072022-12-26 0:07:55424 days 3 hrs ago1672013275IN
0x8adE40...396102D1
0 FTM0.01358826115.92495905
Update528623942022-12-26 0:07:32424 days 3 hrs ago1672013252IN
0x8adE40...396102D1
0 FTM0.00789506115.92495905
Stake528552662022-12-25 20:43:11424 days 6 hrs ago1672000991IN
0x8adE40...396102D1
0 FTM0.0026055926.57391034
Update528427832022-12-25 13:17:03424 days 14 hrs ago1671974223IN
0x8adE40...396102D1
0 FTM0.00763374112.08784585
Update528368702022-12-25 9:24:29424 days 18 hrs ago1671960269IN
0x8adE40...396102D1
0 FTM0.00791579116.22921502
Update528227042022-12-25 1:48:38425 days 1 hr ago1671932918IN
0x8adE40...396102D1
0 FTM0.00301453121.6324458
Stake528199772022-12-25 0:33:30425 days 2 hrs ago1671928410IN
0x8adE40...396102D1
0 FTM0.0026985828.93889109
Update528056462022-12-24 18:40:14425 days 8 hrs ago1671907214IN
0x8adE40...396102D1
0 FTM0.00834917122.59275168
Stake527973412022-12-24 14:11:16425 days 13 hrs ago1671891076IN
0x8adE40...396102D1
0 FTM0.011416118.82017408
Claim Reward527911452022-12-24 10:39:54425 days 16 hrs ago1671878394IN
0x8adE40...396102D1
0 FTM0.00920101122.60011548
Update527908802022-12-24 10:31:12425 days 16 hrs ago1671877872IN
0x8adE40...396102D1
0 FTM0.00837644122.99312587
Update527692672022-12-24 0:13:58426 days 3 hrs ago1671840838IN
0x8adE40...396102D1
0 FTM0.00854223125.42735498
Update527603092022-12-23 20:07:13426 days 7 hrs ago1671826033IN
0x8adE40...396102D1
0 FTM0.00843477123.84960242
View all transactions

Latest 1 internal transaction

Parent Txn Hash Block From To Value
490260402022-10-12 18:44:20498 days 8 hrs ago1665600260  Contract Creation0 FTM
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CherryForest

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at ftmscan.com on 2022-10-12
*/

// CherryForest.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**

The Forest:
The goal of that smart contract is to give rewards to people who have
contributed to the CHRY-FTM liquidity pool.

1) LP providers stake their spLP tokens at the forest.

2) every epoch, the Forest distributes some rewards to stakers.

The reward is given in Cherry pools (CHRT)
The reward is equal to one thousandth of the CHRT tokens
the Forest has, rounded up.

Imagine the Forest has 4567 CHRT in reserve, it will give 5 CHRT
to stakers every epoch. Once the supply goes below 4000, it will only
give 4 CHRT / epoch, etc ...

Owner powers:
  - none


TRUST (and gas fees) over governance

*/



// From OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
// simplified (not is Context)
abstract contract Ownable {

  // ==== Events      ====
  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  // ==== Storage     ====
  // Private so it cannot be changed by inherited contracts
  address private _owner;


  // ==== Constructor ====
  constructor() {
    _transferOwnership(msg.sender);
  }


  // ==== Modifiers   ====
  modifier onlyOwner() {
    require(_owner == msg.sender, "Ownable: caller is not the owner");
    _;
  }


  // ==== Views       ====
  function owner() public view virtual returns (address) {
    return _owner;
  }


  // ==== Mutators    ====

  function renounceOwnership() public virtual onlyOwner {
    _transferOwnership(address(0));
  }

  function transferOwnership(address newOwner_) public virtual onlyOwner {
    require(newOwner_ != address(0), "Ownable: new owner is the zero address");
    _transferOwnership(newOwner_);
  }


  // ==== Internals   ====

  function _transferOwnership(address newOwner_) internal virtual {
    address oldOwner = owner();
    _owner = newOwner_;
    emit OwnershipTransferred(oldOwner, newOwner_);
  }
}



// IERC20.sol
// From OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
interface IERC20 {

    event Transfer(address indexed from,  address indexed to,      uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply()                             external view returns (uint256);
    function balanceOf(address account)                external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);

    function transfer(     address to,                uint256 amount)  external returns (bool);
    function approve(      address spender,           uint256 amount)  external returns (bool);
    function transferFrom( address from,  address to, uint256 amount ) external returns (bool);
}

// IERC20Metadata.sol
// From OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
interface IERC20Metadata is IERC20 {
    function name()     external view returns (string memory);
    function symbol()   external view returns (string memory);
    function decimals() external view returns (uint8);
}


contract CherryForest is Ownable {

  // ==== Events ====
  event Staked      (address indexed user, uint80 amount);
  event Withdrawn   (address indexed user, uint80 amount);
  event RewardPaid  (address indexed user, uint80 reward);
  event RewardAdded (address indexed user, uint80 reward);
  event ReserveAdded(address indexed user, uint80 amount);


  // ==== Structs ====

  // only 1 slot
  struct StakerSeat {
    uint32  lastSnapshotIndex;
    uint32  epochTimerStart;
    uint80  balance;  // max value: 1 208 925 tokens
                      // please don't stake more than 1 208 925 spLP tokens
                      // stake() will revert because of overflow if you do anyway
    uint112 rewardEarned;
  }

  // only 1 slot
  struct Snapshot {
      uint32  epoch;               // epoch of the snapshot
      uint112 rewardDistributed;   // amount distributed during that Epoch
      uint112 rewardPerLPtoken;    // accumulated reward per spLP up to that snapshot
  }


  // ==== Constants ====

  uint32 public constant PERIOD = 6 hours;
  uint32 public constant withdrawLockupEpochs = 6;  // 6 epochs before can withdraw
  uint32 public constant rewardLockupEpochs   = 3;  // 3 epochs before can claimReward

  address public constant pool = 0xF2aDD870885c1B3E50B7cBA81a87C4d0291cBf6F;
  address public constant tree = 0x8Dc673878d325C028D08d73C24cD59E15df62a4c;


  // ==== Storage ====
  // ---- 1 slot  ----
  uint32  public epoch;       // last update epoch
  uint112 public totalSupply; // total spLP staked
  uint80  public reserve;     // total CHRT left to distribute
                              // this is < this balance of tree because
                              // some stakers won't have withdrawn their rewards

  mapping(address => StakerSeat) public stakers;

  Snapshot[] public history;


  // ==== Constructor ====

//  constructor(address pool_, address tree_) {
  constructor() {
//    require(pool_ != address(0), "pool cannot be 0x00");

    // deploy checks to make sure I'm not an idiot

    // check pool symbol is spLP
    require(
      keccak256(abi.encodePacked(IERC20Metadata(pool).symbol())) == keccak256(abi.encodePacked('spLP')),
      "pool_ is not a SpookySwap liquidity pool"
    );

    // check tree symbol is CHRT
    require(
      keccak256(abi.encodePacked(IERC20Metadata(tree).symbol())) == keccak256(abi.encodePacked('CHRT')),
      "tree_ is not the Cherry Tree token contract"
    );

    // set immutables in constructor
    // pool       = pool_;
    // tree       = tree_;

    // create initial snapshop
    Snapshot memory initialSnapshot = Snapshot({
      epoch : uint32(getEpoch()),
      rewardDistributed : 0,
      rewardPerLPtoken  : 0
    });
    history.push(initialSnapshot);

    // set first epoch
    epoch = uint32(getEpoch());

    // Important: stake at least one spLP before first reward
    // or the application will not start
  }


  // ==== Pseudo - ERC20 ====

  function balanceOf(address account_) public view returns (uint256) {
    return stakers[account_].balance;
  }

  // Pseudo ERC20Metadata so people can watch their st-spLP-CHRY-FTM tokens in MetaMask
  // with balanceOf() the 4 following functions are the only implementation of the ERC20 token specification
  // they are just here so that users can easily view how many spLP tokens they have staked at the Forest easily
  // from their MetaMask wallet: they just need to add the Forest contract address as a token in MM
  // Other functions of the ERC20 standard are not implemented
  function symbol()   external pure returns (string memory) { return "stSpLP-Y"; }
  function name()     external pure returns (string memory) { return "CHRY-FTM spLP staked at the Forest"; }
  function decimals() external pure returns (uint8)         { return 18; }

  // ==== Modifiers ====

  // ==== Governance ====
  // Less Governance == more Trust


  // ==== Views ====

  // Current epoch
  function getEpoch() public view returns (uint256) {
    return block.timestamp / PERIOD;
  }

  // === Read snapshots ===

  function getLatestSnapshotIndex() public view returns (uint256) {
    return history.length - 1;
  }

  function getLatestSnapshot() public view returns (Snapshot memory) {
    return history[history.length - 1];
  }

  function getLastSnapshotIndexOf(address staker_) public view returns (uint256) {
    return stakers[staker_].lastSnapshotIndex;
  }

  function getLastSnapshotOf(address staker_) public view returns (Snapshot memory) {
    return history[stakers[staker_].lastSnapshotIndex];
  }

  function canWithdraw(address staker_) external view returns (bool) {
    return stakers[staker_].epochTimerStart + withdrawLockupEpochs <= getEpoch();
  }

  function canClaimReward(address staker_) external view returns (bool) {
    return stakers[staker_].epochTimerStart + rewardLockupEpochs <= getEpoch();
  }

  function rewardPerLPtoken() public view returns (uint256) {
    return history[history.length - 1].rewardPerLPtoken;
  }

  function earned(address staker_) public view returns (uint256) {
    StakerSeat memory staker = stakers[staker_];

    uint256 latestRPT = history[history.length - 1].rewardPerLPtoken;
    uint256 storedRPT = history[staker.lastSnapshotIndex ].rewardPerLPtoken;

    return ( uint(staker.balance) * (latestRPT - storedRPT) / 1e18 ) + staker.rewardEarned;
  }


  // ==== Mutators ====

  function stake(uint256 amount_) public returns(bool) {
    uint newEpoch = getEpoch();

    // check Forest is not lagging in time
    if (newEpoch > epoch) {
      // Forest is lagging
      update();

      // After that, Forest will be updated for the whole epoch
    }

    StakerSeat memory staker = stakers[msg.sender];
    staker = _updateStaker(staker);

    IERC20(pool).transferFrom(msg.sender, address(this), amount_);
    totalSupply    += uint80(amount_);
    staker.balance += uint80(amount_);
    staker.epochTimerStart = uint32(newEpoch); // reset timer

    stakers[msg.sender] = staker; // only one swrite !!!!

    emit Staked(msg.sender, uint80(amount_));

    return true;
  }


  // withdraw automatically claims
  function withdraw(uint256 amount_) public returns(bool) {
    uint newEpoch = getEpoch();

    // check Forest is not lagging in time
    if (newEpoch > epoch) {
      update();
    }

    StakerSeat memory staker = stakers[msg.sender];
    staker = _updateStaker(staker);

    require(
      staker.epochTimerStart + withdrawLockupEpochs <= newEpoch,
      "Forest: you're still in withdraw lockup"
    );

    staker = _claim(staker, newEpoch);

    require(staker.balance >= amount_, "Forest: you asked for too much");

    totalSupply    -= uint80(amount_);  // swrite 5 000 gas
    require(totalSupply > 1e18, "Forest: at least one spLP must remain");
    staker.balance -= uint80(amount_);

    stakers[msg.sender] = staker; // only one swrite for staker

    IERC20(pool).transfer(msg.sender, amount_);

    emit Withdrawn(msg.sender, uint80(amount_));

    return true;
  }


  function exit() external {
    // withdraw automatically claims
    withdraw(balanceOf(msg.sender));
  }


  function claimReward() public returns(bool) {
    uint newEpoch = getEpoch();

    // check Forest is not lagging in time
    if (newEpoch > epoch) {
      update();
    }

    StakerSeat memory staker = stakers[msg.sender];
    staker = _updateStaker(staker);
    staker = _claim(staker, newEpoch);

    stakers[msg.sender] = staker; // only one swrite for staker

    return true;
  }

  // add reserve to be distributed
  // anyone can add reserve if they want to give CHRT
  // to spLP CHRY-FTM stakers
  function addReserve(uint amount_) public returns(bool) {

    IERC20(tree).transferFrom(msg.sender, address(this), amount_);
    reserve += uint80(amount_);

    emit ReserveAdded(msg.sender, uint80(amount_));

    return true;
  }


  /**
    * This can only run once an epoch.
    */
  function update() public returns (bool) {

    uint newEpoch = getEpoch();
    if (newEpoch <= epoch) {
      return false;
    }

    // below code will only run once per epoch

    epoch = uint32(newEpoch);

    // Forest is empty
    if (reserve < 1e18) {
      return false;
    }

    // no stake
    if (totalSupply < 1e18) {
      return false;
    }

    // compute reward
    uint reward = ((reserve / 1e21) + 1) * 1e18;

    // distribute reward
    // new snapshot is a copy of the previous one:
    Snapshot memory newSnapshot = getLatestSnapshot();

    newSnapshot.epoch              = uint32(newEpoch);
    newSnapshot.rewardDistributed  = uint112(reward);
    newSnapshot.rewardPerLPtoken  += uint112(reward * 1e18 / totalSupply);

    history.push(newSnapshot);

    reserve -= uint80(reward);

    emit RewardAdded(msg.sender, uint80(reward));

    return true;
  }


  // ==== Privates ====

  function _updateStaker(StakerSeat memory staker_) private view returns (StakerSeat memory) {
    uint latestSnapshotIdx = history.length - 1;
    // update staker if he lags
    if (staker_.lastSnapshotIndex < latestSnapshotIdx) {
      Snapshot memory latestSnapshot = history[latestSnapshotIdx];
      Snapshot memory stakerSnapshot = history[staker_.lastSnapshotIndex];

      unchecked {
        staker_.rewardEarned += uint112((uint(staker_.balance) * (latestSnapshot.rewardPerLPtoken - stakerSnapshot.rewardPerLPtoken)) / 1e18);
      }
      staker_.lastSnapshotIndex = uint32(latestSnapshotIdx);
    }
    return staker_;
  }

  function _claim(StakerSeat memory staker_, uint newEpoch_) private returns (StakerSeat memory) {
    if (staker_.rewardEarned > 0) {
      require(
        staker_.epochTimerStart + rewardLockupEpochs <=  newEpoch_,
        "Forest: you're still in reward lockup"
      );
      staker_.epochTimerStart = uint32(newEpoch_); // reset timer
      IERC20(tree).transfer(msg.sender, staker_.rewardEarned);  // we trust tree (no re-entrancy)
      emit RewardPaid(msg.sender, uint80(staker_.rewardEarned));
      staker_.rewardEarned = 0;
    }
    return staker_;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint80","name":"amount","type":"uint80"}],"name":"ReserveAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint80","name":"reward","type":"uint80"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint80","name":"reward","type":"uint80"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint80","name":"amount","type":"uint80"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint80","name":"amount","type":"uint80"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"PERIOD","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"addReserve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker_","type":"address"}],"name":"canClaimReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker_","type":"address"}],"name":"canWithdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"staker_","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epoch","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker_","type":"address"}],"name":"getLastSnapshotIndexOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker_","type":"address"}],"name":"getLastSnapshotOf","outputs":[{"components":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint112","name":"rewardDistributed","type":"uint112"},{"internalType":"uint112","name":"rewardPerLPtoken","type":"uint112"}],"internalType":"struct CherryForest.Snapshot","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestSnapshot","outputs":[{"components":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint112","name":"rewardDistributed","type":"uint112"},{"internalType":"uint112","name":"rewardPerLPtoken","type":"uint112"}],"internalType":"struct CherryForest.Snapshot","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestSnapshotIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"history","outputs":[{"internalType":"uint32","name":"epoch","type":"uint32"},{"internalType":"uint112","name":"rewardDistributed","type":"uint112"},{"internalType":"uint112","name":"rewardPerLPtoken","type":"uint112"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserve","outputs":[{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardLockupEpochs","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerLPtoken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"stake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakers","outputs":[{"internalType":"uint32","name":"lastSnapshotIndex","type":"uint32"},{"internalType":"uint32","name":"epochTimerStart","type":"uint32"},{"internalType":"uint80","name":"balance","type":"uint80"},{"internalType":"uint112","name":"rewardEarned","type":"uint112"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint112","name":"","type":"uint112"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tree","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"update","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawLockupEpochs","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506200001d3362000368565b60405163073704c560e41b60208201526024016040516020818303038152906040528051906020012073f2add870885c1b3e50b7cba81a87c4d0291cbf6f6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000099573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620000c3919081019062000409565b604051602001620000d59190620004c1565b60405160208183030381529060405280519060200120146200014f5760405162461bcd60e51b815260206004820152602860248201527f706f6f6c5f206973206e6f7420612053706f6f6b7953776170206c69717569646044820152671a5d1e481c1bdbdb60c21b60648201526084015b60405180910390fd5b6040516310d2149560e21b602082015260240160405160208183030381529060405280519060200120738dc673878d325c028d08d73c24cd59e15df62a4c6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620001cb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620001f5919081019062000409565b604051602001620002079190620004c1565b6040516020818303038152906040528051906020012014620002805760405162461bcd60e51b815260206004820152602b60248201527f747265655f206973206e6f742074686520436865727279205472656520746f6b60448201526a195b8818dbdb9d1c9858dd60aa1b606482015260840162000146565b600060405180606001604052806200029d620003b860201b60201c565b63ffffffff908116825260006020808401829052604093840182905260038054600181018255925284517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b909201805491860151948601516001600160701b03908116600160901b026001600160901b0396909116640100000000026001600160901b031990931693909416929092171792909216179055905062000341620003b8565b600060146101000a81548163ffffffff021916908363ffffffff1602179055505062000502565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000620003c861546042620004df565b905090565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000400578181015183820152602001620003e6565b50506000910152565b6000602082840312156200041c57600080fd5b81516001600160401b03808211156200043457600080fd5b818401915084601f8301126200044957600080fd5b8151818111156200045e576200045e620003cd565b604051601f8201601f19908116603f01168101908382118183101715620004895762000489620003cd565b81604052828152876020848701011115620004a357600080fd5b620004b6836020830160208801620003e3565b979650505050505050565b60008251620004d5818460208701620003e3565b9190910192915050565b600082620004fd57634e487b7160e01b600052601260045260246000fd5b500490565b611c4a80620005126000396000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c8063757991a81161010f578063b4d1d795116100a2578063d518f24311610071578063d518f24314610586578063e9fad8ee1461058e578063f2fde38b14610596578063fd54b228146105a957600080fd5b8063b4d1d795146104f7578063b6f3c6c014610500578063b88a802f1461054c578063cd3293de1461055457600080fd5b806395d89b41116100de57806395d89b4114610464578063a2e620451461049d578063a694fc3a146104a5578063a7a38f0b146104b857600080fd5b8063757991a81461039f5780638da5cb5b146103a7578063900cf0cf146103b85780639168ae72146103cf57600080fd5b80631e85cd651161018757806365c97bd01161015657806365c97bd01461032557806370a082311461032d578063714b465814610366578063715018a61461039557600080fd5b80631e85cd65146102e85780632e1a7d4d146102f0578063313ce567146103035780634b8243c91461031257600080fd5b80630d491992116101c35780630d4919921461026f57806316f0115b1461027757806318160ddd146102aa57806319262d30146102d557600080fd5b80628cc262146101f4578063022ba18d1461021a578063046335d01461023757806306fdde031461025a575b600080fd5b6102076102023660046119b1565b6105c4565b6040519081526020015b60405180910390f35b610222600381565b60405163ffffffff9091168152602001610211565b61024a6102453660046119b1565b6106fd565b6040519015158152602001610211565b610262610748565b60405161021191906119e1565b610207610768565b61029273f2add870885c1b3e50b7cba81a87c4d0291cbf6f81565b6040516001600160a01b039091168152602001610211565b6001546102bd906001600160701b031681565b6040516001600160701b039091168152602001610211565b61024a6102e33660046119b1565b6107ad565b610222600681565b61024a6102fe366004611a2f565b6107ea565b60405160128152602001610211565b61024a610320366004611a2f565b610bc1565b610207610ce7565b61020761033b3660046119b1565b6001600160a01b0316600090815260026020526040902054600160401b90046001600160501b031690565b6102076103743660046119b1565b6001600160a01b031660009081526002602052604090205463ffffffff1690565b61039d610cfe565b005b610207610d64565b6000546001600160a01b0316610292565b60005461022290600160a01b900463ffffffff1681565b6104256103dd3660046119b1565b60026020526000908152604090205463ffffffff80821691640100000000810490911690600160401b81046001600160501b031690600160901b90046001600160701b031684565b6040805163ffffffff95861681529490931660208501526001600160501b03909116918301919091526001600160701b03166060820152608001610211565b60408051808201909152600881527f737453704c502d590000000000000000000000000000000000000000000000006020820152610262565b61024a610d72565b61024a6104b3366004611a2f565b611022565b6104cb6104c6366004611a2f565b611279565b6040805163ffffffff90941684526001600160701b039283166020850152911690820152606001610211565b61022261546081565b61051361050e3660046119b1565b6112bc565b60408051825163ffffffff1681526020808401516001600160701b03908116918301919091529282015190921690820152606001610211565b61024a611359565b60015461056e90600160701b90046001600160501b031681565b6040516001600160501b039091168152602001610211565b6105136114a4565b61039d611530565b61039d6105a43660046119b1565b61155c565b610292738dc673878d325c028d08d73c24cd59e15df62a4c81565b6001600160a01b03811660009081526002602090815260408083208151608081018352905463ffffffff808216835264010000000082041693820193909352600160401b83046001600160501b031691810191909152600160901b9091046001600160701b031660608201526003805483919061064390600190611a5e565b8154811061065357610653611a71565b6000918252602082200154835160038054600160901b9093046001600160701b031694509163ffffffff90911690811061068f5761068f611a71565b60009182526020909120015460608401516001600160701b03600160901b9092048216925016670de0b6b3a76400006106c88385611a5e565b85604001516001600160501b03166106e09190611a87565b6106ea9190611ab4565b6106f49190611ac8565b95945050505050565b6000610707610d64565b6001600160a01b03831660009081526002602052604090205461073a90600390640100000000900463ffffffff16611adb565b63ffffffff16111592915050565b6060604051806060016040528060228152602001611bf360229139905090565b600380546000919061077c90600190611a5e565b8154811061078c5761078c611a71565b600091825260209091200154600160901b90046001600160701b0316919050565b60006107b7610d64565b6001600160a01b03831660009081526002602052604090205461073a90600690640100000000900463ffffffff16611adb565b6000806107f5610d64565b600054909150600160a01b900463ffffffff1681111561081957610817610d72565b505b336000908152600260209081526040918290208251608081018452905463ffffffff808216835264010000000082041692820192909252600160401b82046001600160501b031692810192909252600160901b90046001600160701b031660608201526108858161163b565b905081600682602001516108999190611adb565b63ffffffff1611156109185760405162461bcd60e51b815260206004820152602760248201527f466f726573743a20796f75277265207374696c6c20696e20776974686472617760448201527f206c6f636b75700000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610922818361179a565b90508381604001516001600160501b031610156109815760405162461bcd60e51b815260206004820152601e60248201527f466f726573743a20796f752061736b656420666f7220746f6f206d7563680000604482015260640161090f565b600180546001600160501b03861691906000906109a89084906001600160701b0316611aff565b82546101009290920a6001600160701b03818102199093169183160217909155600154670de0b6b3a76400009116119050610a4b5760405162461bcd60e51b815260206004820152602560248201527f466f726573743a206174206c65617374206f6e652073704c50206d757374207260448201527f656d61696e000000000000000000000000000000000000000000000000000000606482015260840161090f565b8381604001818151610a5d9190611b1f565b6001600160501b039081169091523360008181526002602090815260409182902086518154928801518885015160608a01516001600160701b0316600160901b0271ffffffffffffffffffffffffffffffffffff91909816600160401b021667ffffffffffffffff63ffffffff9283166401000000000267ffffffffffffffff19909616929093169190911793909317169190911793909317909255905163a9059cbb60e01b815260048101919091526024810186905273f2add870885c1b3e50b7cba81a87c4d0291cbf6f915063a9059cbb906044016020604051808303816000875af1158015610b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b779190611b3f565b506040516001600160501b038516815233907fae86ed1aedb40b4431d4ad7e73e176a61719aa184e16b3a07abca01a33b36990906020015b60405180910390a25060019392505050565b6040516323b872dd60e01b815233600482015230602482015260448101829052600090738dc673878d325c028d08d73c24cd59e15df62a4c906323b872dd906064016020604051808303816000875af1158015610c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c469190611b3f565b50816001600e8282829054906101000a90046001600160501b0316610c6b9190611b61565b92506101000a8154816001600160501b0302191690836001600160501b03160217905550336001600160a01b03167f1748dd3942e03e376927624575a3d84f83afa86f16da95cd16f5cf750a2e079683604051610cd791906001600160501b0391909116815260200190565b60405180910390a2506001919050565b600354600090610cf990600190611a5e565b905090565b6000546001600160a01b03163314610d585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161090f565b610d626000611949565b565b6000610cf961546042611ab4565b600080610d7d610d64565b600054909150600160a01b900463ffffffff168111610d9e57600091505090565b600080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff16600160a01b63ffffffff841602179055600154670de0b6b3a7640000600160701b9091046001600160501b03161015610dff57600091505090565b600154670de0b6b3a76400006001600160701b039091161015610e2457600091505090565b600154600090610e4e90683635c9adc5dea0000090600160701b90046001600160501b0316611b81565b610e59906001611b61565b610e6b90670de0b6b3a7640000611ba7565b6001600160501b031690506000610e806114a4565b63ffffffff841681526001600160701b03808416602083015260015491925016610eb283670de0b6b3a7640000611a87565b610ebc9190611ab4565b81604001818151610ecd9190611bd2565b6001600160701b03908116909152600380546001818101835560009290925284517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9091018054602087015160408801518616600160901b0271ffffffffffffffffffffffffffffffffffff91909616640100000000027fffffffffffffffffffffffffffff00000000000000000000000000000000000090921663ffffffff909416939093171791909116929092179091558054849250600e90610fa49084906001600160501b03600160701b90910416611b1f565b92506101000a8154816001600160501b0302191690836001600160501b03160217905550336001600160a01b03167fb4b1f9f4a997d0b9333ada0140b3aaf162b951cb6a9e7f0f8da5d2daa53545858360405161101091906001600160501b0391909116815260200190565b60405180910390a26001935050505090565b60008061102d610d64565b600054909150600160a01b900463ffffffff168111156110515761104f610d72565b505b336000908152600260209081526040918290208251608081018452905463ffffffff808216835264010000000082041692820192909252600160401b82046001600160501b031692810192909252600160901b90046001600160701b031660608201526110bd8161163b565b6040516323b872dd60e01b81523360048201523060248201526044810186905290915073f2add870885c1b3e50b7cba81a87c4d0291cbf6f906323b872dd906064016020604051808303816000875af115801561111e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111429190611b3f565b50600180546001600160501b038616919060009061116a9084906001600160701b0316611bd2565b92506101000a8154816001600160701b0302191690836001600160701b0316021790555083816040018181516111a09190611b61565b6001600160501b0390811690915263ffffffff848116602085810191825233600081815260028352604090819020885181549551838b015160608c01516001600160701b0316600160901b0271ffffffffffffffffffffffffffffffffffff918b16600160401b029190911667ffffffffffffffff928a166401000000000267ffffffffffffffff19909916939099169290921796909617959095169590951793909317909355905192881683529092507fa30980b51b66079e4d77346786093ffc1fb7580f4a38b0fa2a1d73506ae22cc29101610baf565b6003818154811061128957600080fd5b60009182526020909120015463ffffffff811691506001600160701b036401000000008204811691600160901b90041683565b60408051606081018252600080825260208083018290528284018290526001600160a01b038516825260029052919091205460038054909163ffffffff1690811061130957611309611a71565b600091825260209182902060408051606081018252919092015463ffffffff811682526001600160701b036401000000008204811694830194909452600160901b90049092169082015292915050565b600080611364610d64565b600054909150600160a01b900463ffffffff1681111561138857611386610d72565b505b336000908152600260209081526040918290208251608081018452905463ffffffff808216835264010000000082041692820192909252600160401b82046001600160501b031692810192909252600160901b90046001600160701b031660608201526113f48161163b565b9050611400818361179a565b336000908152600260209081526040918290208351815492850151938501516060909501516001600160701b0316600160901b0271ffffffffffffffffffffffffffffffffffff6001600160501b03909616600160401b029590951667ffffffffffffffff63ffffffff9586166401000000000267ffffffffffffffff19909516959092169490941792909217919091169190911791909117905550600192915050565b6040805160608101825260008082526020820181905291810191909152600380546114d190600190611a5e565b815481106114e1576114e1611a71565b600091825260209182902060408051606081018252919092015463ffffffff811682526001600160701b036401000000008204811694830194909452600160901b900490921690820152919050565b3360009081526002602052604090205461155990600160401b90046001600160501b03166107ea565b50565b6000546001600160a01b031633146115b65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161090f565b6001600160a01b0381166116325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161090f565b61155981611949565b60408051608081018252600080825260208201819052918101829052606081019190915260035460009061167190600190611a5e565b905080836000015163ffffffff1610156117935760006003828154811061169a5761169a611a71565b6000918252602080832060408051606081018252939091015463ffffffff80821685526001600160701b036401000000008304811694860194909452600160901b9091049092169083015286516003805493955092911690811061170057611700611a71565b600091825260209182902060408051606081018252919092015463ffffffff811682526001600160701b036401000000008204811694830194909452600160901b900483168183018190528583015192890151919450670de0b6b3a7640000936001600160501b0390921692031602606087018051929091049091016001600160701b03169052505063ffffffff811683525b5090919050565b60408051608081018252600080825260208201819052918101829052606081019190915260608301516001600160701b0316156119405781600384602001516117e39190611adb565b63ffffffff16111561185d5760405162461bcd60e51b815260206004820152602560248201527f466f726573743a20796f75277265207374696c6c20696e20726577617264206c60448201527f6f636b7570000000000000000000000000000000000000000000000000000000606482015260840161090f565b63ffffffff82166020840152606083015160405163a9059cbb60e01b81523360048201526001600160701b039091166024820152738dc673878d325c028d08d73c24cd59e15df62a4c9063a9059cbb906044016020604051808303816000875af11580156118cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f39190611b3f565b5060608301516040516001600160501b03909116815233907f08011f9b08e22dea00d80f640cf312a59df67dec442483f5c7041d2b08719d409060200160405180910390a2600060608401525b50815b92915050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156119c357600080fd5b81356001600160a01b03811681146119da57600080fd5b9392505050565b600060208083528351808285015260005b81811015611a0e578581018301518582016040015282016119f2565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215611a4157600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561194357611943611a48565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761194357611943611a48565b634e487b7160e01b600052601260045260246000fd5b600082611ac357611ac3611a9e565b500490565b8082018082111561194357611943611a48565b63ffffffff818116838216019080821115611af857611af8611a48565b5092915050565b6001600160701b03828116828216039080821115611af857611af8611a48565b6001600160501b03828116828216039080821115611af857611af8611a48565b600060208284031215611b5157600080fd5b815180151581146119da57600080fd5b6001600160501b03818116838216019080821115611af857611af8611a48565b60006001600160501b0380841680611b9b57611b9b611a9e565b92169190910492915050565b6001600160501b03818116838216028082169190828114611bca57611bca611a48565b505092915050565b6001600160701b03818116838216019080821115611af857611af8611a4856fe434852592d46544d2073704c50207374616b65642061742074686520466f72657374a2646970667358221220b4a4a61a436849d93ee57aa6e78ecabb6990186898b8d453102ff2129569021764736f6c63430008110033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101ef5760003560e01c8063757991a81161010f578063b4d1d795116100a2578063d518f24311610071578063d518f24314610586578063e9fad8ee1461058e578063f2fde38b14610596578063fd54b228146105a957600080fd5b8063b4d1d795146104f7578063b6f3c6c014610500578063b88a802f1461054c578063cd3293de1461055457600080fd5b806395d89b41116100de57806395d89b4114610464578063a2e620451461049d578063a694fc3a146104a5578063a7a38f0b146104b857600080fd5b8063757991a81461039f5780638da5cb5b146103a7578063900cf0cf146103b85780639168ae72146103cf57600080fd5b80631e85cd651161018757806365c97bd01161015657806365c97bd01461032557806370a082311461032d578063714b465814610366578063715018a61461039557600080fd5b80631e85cd65146102e85780632e1a7d4d146102f0578063313ce567146103035780634b8243c91461031257600080fd5b80630d491992116101c35780630d4919921461026f57806316f0115b1461027757806318160ddd146102aa57806319262d30146102d557600080fd5b80628cc262146101f4578063022ba18d1461021a578063046335d01461023757806306fdde031461025a575b600080fd5b6102076102023660046119b1565b6105c4565b6040519081526020015b60405180910390f35b610222600381565b60405163ffffffff9091168152602001610211565b61024a6102453660046119b1565b6106fd565b6040519015158152602001610211565b610262610748565b60405161021191906119e1565b610207610768565b61029273f2add870885c1b3e50b7cba81a87c4d0291cbf6f81565b6040516001600160a01b039091168152602001610211565b6001546102bd906001600160701b031681565b6040516001600160701b039091168152602001610211565b61024a6102e33660046119b1565b6107ad565b610222600681565b61024a6102fe366004611a2f565b6107ea565b60405160128152602001610211565b61024a610320366004611a2f565b610bc1565b610207610ce7565b61020761033b3660046119b1565b6001600160a01b0316600090815260026020526040902054600160401b90046001600160501b031690565b6102076103743660046119b1565b6001600160a01b031660009081526002602052604090205463ffffffff1690565b61039d610cfe565b005b610207610d64565b6000546001600160a01b0316610292565b60005461022290600160a01b900463ffffffff1681565b6104256103dd3660046119b1565b60026020526000908152604090205463ffffffff80821691640100000000810490911690600160401b81046001600160501b031690600160901b90046001600160701b031684565b6040805163ffffffff95861681529490931660208501526001600160501b03909116918301919091526001600160701b03166060820152608001610211565b60408051808201909152600881527f737453704c502d590000000000000000000000000000000000000000000000006020820152610262565b61024a610d72565b61024a6104b3366004611a2f565b611022565b6104cb6104c6366004611a2f565b611279565b6040805163ffffffff90941684526001600160701b039283166020850152911690820152606001610211565b61022261546081565b61051361050e3660046119b1565b6112bc565b60408051825163ffffffff1681526020808401516001600160701b03908116918301919091529282015190921690820152606001610211565b61024a611359565b60015461056e90600160701b90046001600160501b031681565b6040516001600160501b039091168152602001610211565b6105136114a4565b61039d611530565b61039d6105a43660046119b1565b61155c565b610292738dc673878d325c028d08d73c24cd59e15df62a4c81565b6001600160a01b03811660009081526002602090815260408083208151608081018352905463ffffffff808216835264010000000082041693820193909352600160401b83046001600160501b031691810191909152600160901b9091046001600160701b031660608201526003805483919061064390600190611a5e565b8154811061065357610653611a71565b6000918252602082200154835160038054600160901b9093046001600160701b031694509163ffffffff90911690811061068f5761068f611a71565b60009182526020909120015460608401516001600160701b03600160901b9092048216925016670de0b6b3a76400006106c88385611a5e565b85604001516001600160501b03166106e09190611a87565b6106ea9190611ab4565b6106f49190611ac8565b95945050505050565b6000610707610d64565b6001600160a01b03831660009081526002602052604090205461073a90600390640100000000900463ffffffff16611adb565b63ffffffff16111592915050565b6060604051806060016040528060228152602001611bf360229139905090565b600380546000919061077c90600190611a5e565b8154811061078c5761078c611a71565b600091825260209091200154600160901b90046001600160701b0316919050565b60006107b7610d64565b6001600160a01b03831660009081526002602052604090205461073a90600690640100000000900463ffffffff16611adb565b6000806107f5610d64565b600054909150600160a01b900463ffffffff1681111561081957610817610d72565b505b336000908152600260209081526040918290208251608081018452905463ffffffff808216835264010000000082041692820192909252600160401b82046001600160501b031692810192909252600160901b90046001600160701b031660608201526108858161163b565b905081600682602001516108999190611adb565b63ffffffff1611156109185760405162461bcd60e51b815260206004820152602760248201527f466f726573743a20796f75277265207374696c6c20696e20776974686472617760448201527f206c6f636b75700000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610922818361179a565b90508381604001516001600160501b031610156109815760405162461bcd60e51b815260206004820152601e60248201527f466f726573743a20796f752061736b656420666f7220746f6f206d7563680000604482015260640161090f565b600180546001600160501b03861691906000906109a89084906001600160701b0316611aff565b82546101009290920a6001600160701b03818102199093169183160217909155600154670de0b6b3a76400009116119050610a4b5760405162461bcd60e51b815260206004820152602560248201527f466f726573743a206174206c65617374206f6e652073704c50206d757374207260448201527f656d61696e000000000000000000000000000000000000000000000000000000606482015260840161090f565b8381604001818151610a5d9190611b1f565b6001600160501b039081169091523360008181526002602090815260409182902086518154928801518885015160608a01516001600160701b0316600160901b0271ffffffffffffffffffffffffffffffffffff91909816600160401b021667ffffffffffffffff63ffffffff9283166401000000000267ffffffffffffffff19909616929093169190911793909317169190911793909317909255905163a9059cbb60e01b815260048101919091526024810186905273f2add870885c1b3e50b7cba81a87c4d0291cbf6f915063a9059cbb906044016020604051808303816000875af1158015610b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b779190611b3f565b506040516001600160501b038516815233907fae86ed1aedb40b4431d4ad7e73e176a61719aa184e16b3a07abca01a33b36990906020015b60405180910390a25060019392505050565b6040516323b872dd60e01b815233600482015230602482015260448101829052600090738dc673878d325c028d08d73c24cd59e15df62a4c906323b872dd906064016020604051808303816000875af1158015610c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c469190611b3f565b50816001600e8282829054906101000a90046001600160501b0316610c6b9190611b61565b92506101000a8154816001600160501b0302191690836001600160501b03160217905550336001600160a01b03167f1748dd3942e03e376927624575a3d84f83afa86f16da95cd16f5cf750a2e079683604051610cd791906001600160501b0391909116815260200190565b60405180910390a2506001919050565b600354600090610cf990600190611a5e565b905090565b6000546001600160a01b03163314610d585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161090f565b610d626000611949565b565b6000610cf961546042611ab4565b600080610d7d610d64565b600054909150600160a01b900463ffffffff168111610d9e57600091505090565b600080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff16600160a01b63ffffffff841602179055600154670de0b6b3a7640000600160701b9091046001600160501b03161015610dff57600091505090565b600154670de0b6b3a76400006001600160701b039091161015610e2457600091505090565b600154600090610e4e90683635c9adc5dea0000090600160701b90046001600160501b0316611b81565b610e59906001611b61565b610e6b90670de0b6b3a7640000611ba7565b6001600160501b031690506000610e806114a4565b63ffffffff841681526001600160701b03808416602083015260015491925016610eb283670de0b6b3a7640000611a87565b610ebc9190611ab4565b81604001818151610ecd9190611bd2565b6001600160701b03908116909152600380546001818101835560009290925284517fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9091018054602087015160408801518616600160901b0271ffffffffffffffffffffffffffffffffffff91909616640100000000027fffffffffffffffffffffffffffff00000000000000000000000000000000000090921663ffffffff909416939093171791909116929092179091558054849250600e90610fa49084906001600160501b03600160701b90910416611b1f565b92506101000a8154816001600160501b0302191690836001600160501b03160217905550336001600160a01b03167fb4b1f9f4a997d0b9333ada0140b3aaf162b951cb6a9e7f0f8da5d2daa53545858360405161101091906001600160501b0391909116815260200190565b60405180910390a26001935050505090565b60008061102d610d64565b600054909150600160a01b900463ffffffff168111156110515761104f610d72565b505b336000908152600260209081526040918290208251608081018452905463ffffffff808216835264010000000082041692820192909252600160401b82046001600160501b031692810192909252600160901b90046001600160701b031660608201526110bd8161163b565b6040516323b872dd60e01b81523360048201523060248201526044810186905290915073f2add870885c1b3e50b7cba81a87c4d0291cbf6f906323b872dd906064016020604051808303816000875af115801561111e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111429190611b3f565b50600180546001600160501b038616919060009061116a9084906001600160701b0316611bd2565b92506101000a8154816001600160701b0302191690836001600160701b0316021790555083816040018181516111a09190611b61565b6001600160501b0390811690915263ffffffff848116602085810191825233600081815260028352604090819020885181549551838b015160608c01516001600160701b0316600160901b0271ffffffffffffffffffffffffffffffffffff918b16600160401b029190911667ffffffffffffffff928a166401000000000267ffffffffffffffff19909916939099169290921796909617959095169590951793909317909355905192881683529092507fa30980b51b66079e4d77346786093ffc1fb7580f4a38b0fa2a1d73506ae22cc29101610baf565b6003818154811061128957600080fd5b60009182526020909120015463ffffffff811691506001600160701b036401000000008204811691600160901b90041683565b60408051606081018252600080825260208083018290528284018290526001600160a01b038516825260029052919091205460038054909163ffffffff1690811061130957611309611a71565b600091825260209182902060408051606081018252919092015463ffffffff811682526001600160701b036401000000008204811694830194909452600160901b90049092169082015292915050565b600080611364610d64565b600054909150600160a01b900463ffffffff1681111561138857611386610d72565b505b336000908152600260209081526040918290208251608081018452905463ffffffff808216835264010000000082041692820192909252600160401b82046001600160501b031692810192909252600160901b90046001600160701b031660608201526113f48161163b565b9050611400818361179a565b336000908152600260209081526040918290208351815492850151938501516060909501516001600160701b0316600160901b0271ffffffffffffffffffffffffffffffffffff6001600160501b03909616600160401b029590951667ffffffffffffffff63ffffffff9586166401000000000267ffffffffffffffff19909516959092169490941792909217919091169190911791909117905550600192915050565b6040805160608101825260008082526020820181905291810191909152600380546114d190600190611a5e565b815481106114e1576114e1611a71565b600091825260209182902060408051606081018252919092015463ffffffff811682526001600160701b036401000000008204811694830194909452600160901b900490921690820152919050565b3360009081526002602052604090205461155990600160401b90046001600160501b03166107ea565b50565b6000546001600160a01b031633146115b65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161090f565b6001600160a01b0381166116325760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161090f565b61155981611949565b60408051608081018252600080825260208201819052918101829052606081019190915260035460009061167190600190611a5e565b905080836000015163ffffffff1610156117935760006003828154811061169a5761169a611a71565b6000918252602080832060408051606081018252939091015463ffffffff80821685526001600160701b036401000000008304811694860194909452600160901b9091049092169083015286516003805493955092911690811061170057611700611a71565b600091825260209182902060408051606081018252919092015463ffffffff811682526001600160701b036401000000008204811694830194909452600160901b900483168183018190528583015192890151919450670de0b6b3a7640000936001600160501b0390921692031602606087018051929091049091016001600160701b03169052505063ffffffff811683525b5090919050565b60408051608081018252600080825260208201819052918101829052606081019190915260608301516001600160701b0316156119405781600384602001516117e39190611adb565b63ffffffff16111561185d5760405162461bcd60e51b815260206004820152602560248201527f466f726573743a20796f75277265207374696c6c20696e20726577617264206c60448201527f6f636b7570000000000000000000000000000000000000000000000000000000606482015260840161090f565b63ffffffff82166020840152606083015160405163a9059cbb60e01b81523360048201526001600160701b039091166024820152738dc673878d325c028d08d73c24cd59e15df62a4c9063a9059cbb906044016020604051808303816000875af11580156118cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f39190611b3f565b5060608301516040516001600160501b03909116815233907f08011f9b08e22dea00d80f640cf312a59df67dec442483f5c7041d2b08719d409060200160405180910390a2600060608401525b50815b92915050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156119c357600080fd5b81356001600160a01b03811681146119da57600080fd5b9392505050565b600060208083528351808285015260005b81811015611a0e578581018301518582016040015282016119f2565b506000604082860101526040601f19601f8301168501019250505092915050565b600060208284031215611a4157600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561194357611943611a48565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761194357611943611a48565b634e487b7160e01b600052601260045260246000fd5b600082611ac357611ac3611a9e565b500490565b8082018082111561194357611943611a48565b63ffffffff818116838216019080821115611af857611af8611a48565b5092915050565b6001600160701b03828116828216039080821115611af857611af8611a48565b6001600160501b03828116828216039080821115611af857611af8611a48565b600060208284031215611b5157600080fd5b815180151581146119da57600080fd5b6001600160501b03818116838216019080821115611af857611af8611a48565b60006001600160501b0380841680611b9b57611b9b611a9e565b92169190910492915050565b6001600160501b03818116838216028082169190828114611bca57611bca611a48565b505092915050565b6001600160701b03818116838216019080821115611af857611af8611a4856fe434852592d46544d2073704c50207374616b65642061742074686520466f72657374a2646970667358221220b4a4a61a436849d93ee57aa6e78ecabb6990186898b8d453102ff2129569021764736f6c63430008110033

Deployed Bytecode Sourcemap

3201:10379:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8362:365;;;;;;:::i;:::-;;:::i;:::-;;;474:25:1;;;462:2;447:18;8362:365:0;;;;;;;;4374:47;;4420:1;4374:47;;;;;684:10:1;672:23;;;654:42;;642:2;627:18;4374:47:0;510:192:1;8071:157:0;;;;;;:::i;:::-;;:::i;:::-;;;872:14:1;;865:22;847:41;;835:2;820:18;8071:157:0;707:187:1;6933:106:0;;;:::i;:::-;;;;;;;:::i;8234:122::-;;;:::i;4464:73::-;;4495:42;4464:73;;;;;-1:-1:-1;;;;;1616:55:1;;;1598:74;;1586:2;1571:18;4464:73:0;1452:226:1;4724:26:0;;;;;-1:-1:-1;;;;;4724:26:0;;;;;;-1:-1:-1;;;;;1847:43:1;;;1829:62;;1817:2;1802:18;4724:26:0;1683:214:1;7909:156:0;;;;;;:::i;:::-;;:::i;4289:47::-;;4335:1;4289:47;;9527:912;;;;;;:::i;:::-;;:::i;7043:72::-;;;7110:2;2229:36:1;;2217:2;2202:18;7043:72:0;2087:184:1;11091:239:0;;;;;;:::i;:::-;;:::i;7391:102::-;;;:::i;6253:112::-;;;;;;:::i;:::-;-1:-1:-1;;;;;6334:17:0;6311:7;6334:17;;;:7;:17;;;;;:25;-1:-1:-1;;;6334:25:0;;-1:-1:-1;;;;;6334:25:0;;6253:112;7619:133;;;;;;:::i;:::-;-1:-1:-1;;;;;7712:16:0;7689:7;7712:16;;;:7;:16;;;;;:34;;;;7619:133;1488:97;;;:::i;:::-;;7260:94;;;:::i;1369:81::-;1415:7;1438:6;-1:-1:-1;;;;;1438:6:0;1369:81;;4672:20;;;;;-1:-1:-1;;;4672:20:0;;;;;;4997:45;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4997:45:0;;-1:-1:-1;;;;;4997:45:0;;-1:-1:-1;;;4997:45:0;;-1:-1:-1;;;;;4997:45:0;;;;;;;2511:10:1;2548:15;;;2530:34;;2600:15;;;;2595:2;2580:18;;2573:43;-1:-1:-1;;;;;2652:35:1;;;2632:18;;;2625:63;;;;-1:-1:-1;;;;;2724:43:1;2719:2;2704:18;;2697:71;2488:3;2473:19;4997:45:0;2276:498:1;6849:80:0;6909:17;;;;;;;;;;;;;;;;;6849:80;;11393:922;;;:::i;8762:721::-;;;;;;:::i;:::-;;:::i;5049:25::-;;;;;;:::i;:::-;;:::i;:::-;;;;3009:10:1;2997:23;;;2979:42;;-1:-1:-1;;;;;3106:15:1;;;3101:2;3086:18;;3079:43;3158:15;;3138:18;;;3131:43;2967:2;2952:18;5049:25:0;2779:401:1;4245:39:0;;4277:7;4245:39;;7758:145;;;;;;:::i;:::-;;:::i;:::-;;;;3403:13:1;;3418:10;3399:30;3381:49;;3477:4;3465:17;;;3459:24;-1:-1:-1;;;;;3570:21:1;;;3548:20;;;3541:51;;;;3640:17;;;3634:24;3630:33;;;3608:20;;;3601:63;3369:2;3354:18;7758:145:0;3185:485:1;10562:401:0;;;:::i;4776:22::-;;;;;-1:-1:-1;;;4776:22:0;;-1:-1:-1;;;;;4776:22:0;;;;;;-1:-1:-1;;;;;3837:35:1;;;3819:54;;3807:2;3792:18;4776:22:0;3675:204:1;7499:114:0;;;:::i;10447:107::-;;;:::i;1591:194::-;;;;;;:::i;:::-;;:::i;4542:73::-;;4573:42;4542:73;;8362:365;-1:-1:-1;;;;;8459:16:0;;8416:7;8459:16;;;:7;:16;;;;;;;;8432:43;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8432:43:0;;-1:-1:-1;;;;;8432:43:0;;;;;;;;-1:-1:-1;;;8432:43:0;;;-1:-1:-1;;;;;8432:43:0;;;;;8504:7;8512:14;;8416:7;;8504;8512:18;;8432:43;;8512:18;:::i;:::-;8504:27;;;;;;;;:::i;:::-;;;;;;;;;:44;8583:24;;8575:7;:34;;-1:-1:-1;;;8504:44:0;;;-1:-1:-1;;;;;8504:44:0;;-1:-1:-1;8575:7:0;:34;;;;;;;;;;;:::i;:::-;;;;;;;;;;:51;8702:19;;;;-1:-1:-1;;;;;;;;8575:51:0;;;;;;-1:-1:-1;8642:79:0;8693:4;8668:21;8575:51;8668:9;:21;:::i;:::-;8649:6;:14;;;-1:-1:-1;;;;;8644:20:0;:46;;;;:::i;:::-;:53;;;;:::i;:::-;8642:79;;;;:::i;:::-;8635:86;8362:365;-1:-1:-1;;;;;8362:365:0:o;8071:157::-;8135:4;8212:10;:8;:10::i;:::-;-1:-1:-1;;;;;8155:16:0;;;;;;:7;:16;;;;;:32;:53;;4420:1;;8155:32;;;;;:53;:::i;:::-;:67;;;;;8071:157;-1:-1:-1;;8071:157:0:o;6933:106::-;6976:13;6993:43;;;;;;;;;;;;;;;;;;;6933:106;:::o;8234:122::-;8306:7;8314:14;;8283:7;;8306;8314:18;;8331:1;;8314:18;:::i;:::-;8306:27;;;;;;;;:::i;:::-;;;;;;;;;;:44;-1:-1:-1;;;8306:44:0;;-1:-1:-1;;;;;8306:44:0;;;-1:-1:-1;8234:122:0:o;7909:156::-;7970:4;8049:10;:8;:10::i;:::-;-1:-1:-1;;;;;7990:16:0;;;;;;:7;:16;;;;;:32;:55;;4335:1;;7990:32;;;;;:55;:::i;9527:912::-;9577:4;9590:13;9606:10;:8;:10::i;:::-;9684:5;;9590:26;;-1:-1:-1;;;;9684:5:0;;;;9673:16;;9669:47;;;9700:8;:6;:8::i;:::-;;9669:47;9759:10;9724:24;9751:19;;;:7;:19;;;;;;;;;9724:46;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9724:46:0;;-1:-1:-1;;;;;9724:46:0;;;;;;;;-1:-1:-1;;;9724:46:0;;-1:-1:-1;;;;;9724:46:0;;;;;9786:21;9724:46;9786:13;:21::i;:::-;9777:30;;9881:8;4335:1;9832:6;:22;;;:45;;;;:::i;:::-;:57;;;;9816:130;;;;-1:-1:-1;;;9816:130:0;;5391:2:1;9816:130:0;;;5373:21:1;5430:2;5410:18;;;5403:30;5469:34;5449:18;;;5442:62;5540:9;5520:18;;;5513:37;5567:19;;9816:130:0;;;;;;;;;9964:24;9971:6;9979:8;9964:6;:24::i;:::-;9955:33;;10023:7;10005:6;:14;;;-1:-1:-1;;;;;10005:25:0;;;9997:68;;;;-1:-1:-1;;;9997:68:0;;5799:2:1;9997:68:0;;;5781:21:1;5838:2;5818:18;;;5811:30;5877:32;5857:18;;;5850:60;5927:18;;9997:68:0;5597:354:1;9997:68:0;10074:11;:33;;-1:-1:-1;;;;;10074:33:0;;;:11;;;:33;;;;-1:-1:-1;;;;;10074:33:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;10074:33:0;;;;;;;;;;;;;;;-1:-1:-1;10143:11:0;10157:4;10143:11;;:18;;-1:-1:-1;10135:68:0;;;;-1:-1:-1;;;10135:68:0;;6359:2:1;10135:68:0;;;6341:21:1;6398:2;6378:18;;;6371:30;6437:34;6417:18;;;6410:62;6508:7;6488:18;;;6481:35;6533:19;;10135:68:0;6157:401:1;10135:68:0;10235:7;10210:6;:14;;:33;;;;;;;:::i;:::-;-1:-1:-1;;;;;10210:33:0;;;;;;10260:10;10252:19;;;;:7;:19;;;;;;;;;:28;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10252:28:0;-1:-1:-1;;;10252:28:0;;;;;;-1:-1:-1;;;10252:28:0;;;;;;;;;-1:-1:-1;;10252:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10319:42;;-1:-1:-1;;;10319:42:0;;10252:28;10319:42;;6929:74:1;;;;7019:18;;;7012:34;;;4495:42:0;;-1:-1:-1;10319:21:0;;6902:18:1;;10319:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;10375:38:0;;-1:-1:-1;;;;;3837:35:1;;3819:54;;10385:10:0;;10375:38;;3807:2:1;3792:18;10375:38:0;;;;;;;;-1:-1:-1;10429:4:0;;9527:912;-1:-1:-1;;;9527:912:0:o;11091:239::-;11155:61;;-1:-1:-1;;;11155:61:0;;11181:10;11155:61;;;7602:34:1;11201:4:0;7652:18:1;;;7645:43;7704:18;;;7697:34;;;11140:4:0;;4573:42;;11155:25;;7514:18:1;;11155:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11241:7;11223;;:26;;;;;;;;;;-1:-1:-1;;;;;11223:26:0;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;11223:26:0;;;;;-1:-1:-1;;;;;11223:26:0;;;;;;11276:10;-1:-1:-1;;;;;11263:41:0;;11295:7;11263:41;;;;;-1:-1:-1;;;;;3837:35:1;;;;3819:54;;3807:2;3792:18;;3675:204;11263:41:0;;;;;;;;-1:-1:-1;11320:4:0;;11091:239;-1:-1:-1;11091:239:0:o;7391:102::-;7469:7;:14;7446:7;;7469:18;;7486:1;;7469:18;:::i;:::-;7462:25;;7391:102;:::o;1488:97::-;1262:6;;-1:-1:-1;;;;;1262:6:0;1272:10;1262:20;1254:65;;;;-1:-1:-1;;;1254:65:0;;8133:2:1;1254:65:0;;;8115:21:1;;;8152:18;;;8145:30;8211:34;8191:18;;;8184:62;8263:18;;1254:65:0;7931:356:1;1254:65:0;1549:30:::1;1576:1;1549:18;:30::i;:::-;1488:97::o:0;7260:94::-;7301:7;7324:24;4277:7;7324:15;:24;:::i;11393:922::-;11427:4;11442:13;11458:10;:8;:10::i;:::-;11491:5;;11442:26;;-1:-1:-1;;;;11491:5:0;;;;11479:17;;11475:52;;11514:5;11507:12;;;11393:922;:::o;11475:52::-;11585:5;:24;;;;-1:-1:-1;;;11585:24:0;;;;;;;-1:-1:-1;11646:7:0;11656:4;-1:-1:-1;;;11646:7:0;;;-1:-1:-1;;;;;11646:7:0;:14;11642:49;;;11678:5;11671:12;;;11393:922;:::o;11642:49::-;11720:11;;11734:4;-1:-1:-1;;;;;11720:11:0;;;:18;11716:53;;;11756:5;11749:12;;;11393:922;:::o;11716:53::-;11816:7;;11800:11;;11816:14;;11826:4;;-1:-1:-1;;;11816:7:0;;-1:-1:-1;;;;;11816:7:0;:14;:::i;:::-;11815:20;;11834:1;11815:20;:::i;:::-;11814:29;;11839:4;11814:29;:::i;:::-;-1:-1:-1;;;;;11800:43:0;;;11930:27;11960:19;:17;:19::i;:::-;11988:49;;;;;-1:-1:-1;;;;;12044:48:0;;;:29;;;:48;12156:11;;11930:49;;-1:-1:-1;12156:11:0;12140:13;12085:6;12149:4;12140:13;:::i;:::-;:27;;;;:::i;:::-;12099:11;:28;;:69;;;;;;;:::i;:::-;-1:-1:-1;;;;;12099:69:0;;;;;;12177:7;:25;;;;;;;;-1:-1:-1;12177:25:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12177:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12211;;12229:6;;-1:-1:-1;12211:7:0;;:25;;12229:6;;-1:-1:-1;;;;;;;;12211:25:0;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;12211:25:0;;;;;-1:-1:-1;;;;;12211:25:0;;;;;;12262:10;-1:-1:-1;;;;;12250:39:0;;12281:6;12250:39;;;;;-1:-1:-1;;;;;3837:35:1;;;;3819:54;;3807:2;3792:18;;3675:204;12250:39:0;;;;;;;;12305:4;12298:11;;;;;11393:922;:::o;8762:721::-;8809:4;8822:13;8838:10;:8;:10::i;:::-;8916:5;;8822:26;;-1:-1:-1;;;;8916:5:0;;;;8905:16;;8901:142;;;8960:8;:6;:8::i;:::-;;8901:142;9086:10;9051:24;9078:19;;;:7;:19;;;;;;;;;9051:46;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9051:46:0;;-1:-1:-1;;;;;9051:46:0;;;;;;;;-1:-1:-1;;;9051:46:0;;-1:-1:-1;;;;;9051:46:0;;;;;9113:21;9051:46;9113:13;:21::i;:::-;9143:61;;-1:-1:-1;;;9143:61:0;;9169:10;9143:61;;;7602:34:1;9189:4:0;7652:18:1;;;7645:43;7704:18;;;7697:34;;;9104:30:0;;-1:-1:-1;4495:42:0;;9143:25;;7514:18:1;;9143:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;9211:11:0;:33;;-1:-1:-1;;;;;9211:33:0;;;:11;;;:33;;;;-1:-1:-1;;;;;9211:33:0;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;9211:33:0;;;;;-1:-1:-1;;;;;9211:33:0;;;;;;9276:7;9251:6;:14;;:33;;;;;;;:::i;:::-;-1:-1:-1;;;;;9251:33:0;;;;;;9291:41;;;;:22;;;;:41;;;9364:10;9356:19;;;;:7;:19;;;;;;;:28;;;;;;;;;;;;;;-1:-1:-1;;;;;9356:28:0;-1:-1:-1;;;9356:28:0;;;;;-1:-1:-1;;;9356:28:0;;;;;;;;;;;-1:-1:-1;;9356:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9422:35;;3837::1;;;3819:54;;9364:10:0;;-1:-1:-1;9422:35:0;;3792:18:1;9422:35:0;3675:204:1;5049:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5049:25:0;;;;;;-1:-1:-1;;;5049:25:0;;;;:::o;7758:145::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7862:16:0;;;;:7;:16;;;;;;:34;7854:7;:43;;:7;;7862:34;;;7854:43;;;;;;:::i;:::-;;;;;;;;;;7847:50;;;;;;;;7854:43;;;;7847:50;;;;;;-1:-1:-1;;;;;7847:50:0;;;;;;;;;;;;-1:-1:-1;;;7847:50:0;;;;;;;;;;7758:145;-1:-1:-1;;7758:145:0:o;10562:401::-;10600:4;10613:13;10629:10;:8;:10::i;:::-;10707:5;;10613:26;;-1:-1:-1;;;;10707:5:0;;;;10696:16;;10692:47;;;10723:8;:6;:8::i;:::-;;10692:47;10782:10;10747:24;10774:19;;;:7;:19;;;;;;;;;10747:46;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10747:46:0;;-1:-1:-1;;;;;10747:46:0;;;;;;;;-1:-1:-1;;;10747:46:0;;-1:-1:-1;;;;;10747:46:0;;;;;10809:21;10747:46;10809:13;:21::i;:::-;10800:30;;10846:24;10853:6;10861:8;10846:6;:24::i;:::-;10887:10;10879:19;;;;:7;:19;;;;;;;;;:28;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10879:28:0;-1:-1:-1;;;10879:28:0;;-1:-1:-1;;;;;10879:28:0;;;-1:-1:-1;;;10879:28:0;;;;;;;;;;;;-1:-1:-1;;10879:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10879:28:0;;10562:401;-1:-1:-1;;10562:401:0:o;7499:114::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;7580:7:0;7588:14;;:18;;7605:1;;7588:18;:::i;:::-;7580:27;;;;;;;;:::i;:::-;;;;;;;;;;7573:34;;;;;;;;7580:27;;;;7573:34;;;;;;-1:-1:-1;;;;;7573:34:0;;;;;;;;;;;;-1:-1:-1;;;7573:34:0;;;;;;;;;;7499:114;-1:-1:-1;7499:114:0:o;10447:107::-;10536:10;6311:7;6334:17;;;:7;:17;;;;;:25;10517:31;;-1:-1:-1;;;6334:25:0;;-1:-1:-1;;;;;6334:25:0;9527:912;:::i;10517:31::-;;10447:107::o;1591:194::-;1262:6;;-1:-1:-1;;;;;1262:6:0;1272:10;1262:20;1254:65;;;;-1:-1:-1;;;1254:65:0;;8133:2:1;1254:65:0;;;8115:21:1;;;8152:18;;;8145:30;8211:34;8191:18;;;8184:62;8263:18;;1254:65:0;7931:356:1;1254:65:0;-1:-1:-1;;;;;1677:23:0;::::1;1669:74;;;::::0;-1:-1:-1;;;1669:74:0;;9166:2:1;1669:74:0::1;::::0;::::1;9148:21:1::0;9205:2;9185:18;;;9178:30;9244:34;9224:18;;;9217:62;9315:8;9295:18;;;9288:36;9341:19;;1669:74:0::1;8964:402:1::0;1669:74:0::1;1750:29;1769:9;1750:18;:29::i;12350:646::-:0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12473:7:0;:14;12448:22;;12473:18;;12490:1;;12473:18;:::i;:::-;12448:43;;12563:17;12535:7;:25;;;:45;;;12531:439;;;12591:30;12624:7;12632:17;12624:26;;;;;;;;:::i;:::-;;;;;;;;;12591:59;;;;;;;;12624:26;;;;12591:59;;;;;;;-1:-1:-1;;;;;12591:59:0;;;;;;;;;;;;-1:-1:-1;;;12591:59:0;;;;;;;;;;12700:25;;12692:7;:34;;12591:59;;-1:-1:-1;12692:7:0;:34;;;;;;;;;:::i;:::-;;;;;;;;;;12659:67;;;;;;;;12692:34;;;;12659:67;;;;;;-1:-1:-1;;;;;12659:67:0;;;;;;;;;;;;-1:-1:-1;;;12659:67:0;;;;;;;;;;12816:31;;;;12796:15;;;;12659:67;;-1:-1:-1;12886:4:0;;-1:-1:-1;;;;;12791:21:0;;;12816:65;;12791:91;;12758:20;;;:133;;12790:100;;;;12758:133;;;-1:-1:-1;;;;;12758:133:0;;;-1:-1:-1;;12909:53:0;;;;;12531:439;-1:-1:-1;12983:7:0;;12350:646;-1:-1:-1;12350:646:0:o;13002:575::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13108:20:0;;;;-1:-1:-1;;;;;13108:24:0;;13104:447;;13210:9;4420:1;13161:7;:23;;;:44;;;;:::i;:::-;:58;;;;13143:135;;;;-1:-1:-1;;;13143:135:0;;9573:2:1;13143:135:0;;;9555:21:1;9612:2;9592:18;;;9585:30;9651:34;9631:18;;;9624:62;9722:7;9702:18;;;9695:35;9747:19;;13143:135:0;9371:401:1;13143:135:0;13287:43;;;:23;;;:43;13388:20;;;;13354:55;;-1:-1:-1;;;13354:55:0;;13376:10;13354:55;;;9951:74:1;-1:-1:-1;;;;;10061:43:1;;;10041:18;;;10034:71;4573:42:0;;13354:21;;9924:18:1;;13354:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;13488:20:0;;;;13458:52;;-1:-1:-1;;;;;3837:35:1;;;3819:54;;13469:10:0;;13458:52;;3807:2:1;3792:18;13458:52:0;;;;;;;13542:1;13519:20;;;:24;13104:447;-1:-1:-1;13564:7:0;13002:575;;;;;:::o;1823:181::-;1894:16;1438:6;;-1:-1:-1;;;;;1927:18:0;;;;;;;;;;1957:41;;1438:6;;;;;;;1957:41;;1894:16;1957:41;1887:117;1823:181;:::o;14:309:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;-1:-1:-1;;;;;224:5:1;220:54;213:5;210:65;200:93;;289:1;286;279:12;200:93;312:5;14:309;-1:-1:-1;;;14:309:1:o;899:548::-;1011:4;1040:2;1069;1058:9;1051:21;1101:6;1095:13;1144:6;1139:2;1128:9;1124:18;1117:34;1169:1;1179:140;1193:6;1190:1;1187:13;1179:140;;;1288:14;;;1284:23;;1278:30;1254:17;;;1273:2;1250:26;1243:66;1208:10;;1179:140;;;1183:3;1368:1;1363:2;1354:6;1343:9;1339:22;1335:31;1328:42;1438:2;1431;1427:7;1422:2;1414:6;1410:15;1406:29;1395:9;1391:45;1387:54;1379:62;;;;899:548;;;;:::o;1902:180::-;1961:6;2014:2;2002:9;1993:7;1989:23;1985:32;1982:52;;;2030:1;2027;2020:12;1982:52;-1:-1:-1;2053:23:1;;1902:180;-1:-1:-1;1902:180:1:o;3884:184::-;-1:-1:-1;;;3933:1:1;3926:88;4033:4;4030:1;4023:15;4057:4;4054:1;4047:15;4073:128;4140:9;;;4161:11;;;4158:37;;;4175:18;;:::i;4206:184::-;-1:-1:-1;;;4255:1:1;4248:88;4355:4;4352:1;4345:15;4379:4;4376:1;4369:15;4395:168;4468:9;;;4499;;4516:15;;;4510:22;;4496:37;4486:71;;4537:18;;:::i;4568:184::-;-1:-1:-1;;;4617:1:1;4610:88;4717:4;4714:1;4707:15;4741:4;4738:1;4731:15;4757:120;4797:1;4823;4813:35;;4828:18;;:::i;:::-;-1:-1:-1;4862:9:1;;4757:120::o;4882:125::-;4947:9;;;4968:10;;;4965:36;;;4981:18;;:::i;5012:172::-;5079:10;5109;;;5121;;;5105:27;;5144:11;;;5141:37;;;5158:18;;:::i;:::-;5141:37;5012:172;;;;:::o;5956:196::-;-1:-1:-1;;;;;6088:10:1;;;6076;;;6072:27;;6111:12;;;6108:38;;;6126:18;;:::i;6563:187::-;-1:-1:-1;;;;;6686:10:1;;;6674;;;6670:27;;6709:12;;;6706:38;;;6724:18;;:::i;7057:277::-;7124:6;7177:2;7165:9;7156:7;7152:23;7148:32;7145:52;;;7193:1;7190;7183:12;7145:52;7225:9;7219:16;7278:5;7271:13;7264:21;7257:5;7254:32;7244:60;;7300:1;7297;7290:12;7742:184;-1:-1:-1;;;;;7851:10:1;;;7863;;;7847:27;;7886:11;;;7883:37;;;7900:18;;:::i;8292:203::-;8331:1;-1:-1:-1;;;;;8406:2:1;8403:1;8399:10;8428:3;8418:37;;8435:18;;:::i;:::-;8473:10;;8469:20;;;;;8292:203;-1:-1:-1;;8292:203:1:o;8500:261::-;-1:-1:-1;;;;;8625:10:1;;;8637;;;8621:27;8668:20;;;;8571:22;8707:24;;;8697:58;;8735:18;;:::i;:::-;8697:58;;8500:261;;;;:::o;8766:193::-;-1:-1:-1;;;;;8884:10:1;;;8896;;;8880:27;;8919:11;;;8916:37;;;8933:18;;:::i

Swarm Source

ipfs://b4a4a61a436849d93ee57aa6e78ecabb6990186898b8d453102ff21295690217

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

Txn Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]
[ 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.