ETH Price: $3,235.24 (-1.62%)

Contract

0xB9bd79C00827AcA04aBbAA5D1545c5b141626dBF
 

Overview

ETH Balance

0.00165207839237618 ETH

Eth Value

$5.34 (@ $3,235.24/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer145139592022-04-03 15:37:46954 days ago1649000266IN
0xB9bd79C0...141626dBF
0 ETH0.0027399949.64209004
Transfer143956272022-03-16 5:02:57973 days ago1647406977IN
0xB9bd79C0...141626dBF
0.04 ETH0.0027326821.36146587
Transfer107383442020-08-26 20:32:521539 days ago1598473972IN
0xB9bd79C0...141626dBF
0 ETH0.0039130
Transfer105751882020-08-01 17:12:171564 days ago1596301937IN
0xB9bd79C0...141626dBF
0 ETH0.00107151
Transfer105632712020-07-30 21:14:501566 days ago1596143690IN
0xB9bd79C0...141626dBF
0 ETH0.00770782135
Transfer105558832020-07-29 17:31:021567 days ago1596043862IN
0xB9bd79C0...141626dBF
2.46 ETH0.0149299164
Transfer105558732020-07-29 17:29:101567 days ago1596043750IN
0xB9bd79C0...141626dBF
0.01 ETH0.0149299164
Disqualify Addre...105106602020-07-22 17:55:491574 days ago1595440549IN
0xB9bd79C0...141626dBF
0 ETH0.0013994480
Transfer105077462020-07-22 7:08:221575 days ago1595401702IN
0xB9bd79C0...141626dBF
0 ETH0.0042250374
Transfer104947142020-07-20 6:12:581577 days ago1595225578IN
0xB9bd79C0...141626dBF
0 ETH0.0034827961
Transfer104861332020-07-18 22:27:031578 days ago1595111223IN
0xB9bd79C0...141626dBF
0.0122 ETH0.0034593638
Transfer104850102020-07-18 18:21:181578 days ago1595096478IN
0xB9bd79C0...141626dBF
0.023 ETH0.0059173465
Transfer104843282020-07-18 15:42:391578 days ago1595086959IN
0xB9bd79C0...141626dBF
0 ETH0.0030831354
Transfer104143012020-07-07 19:42:551589 days ago1594150975IN
0xB9bd79C0...141626dBF
0.01 ETH0.0023669326
Transfer104141402020-07-07 19:03:381589 days ago1594148618IN
0xB9bd79C0...141626dBF
0 ETH0.0015415627
Transfer104070782020-07-06 16:56:341590 days ago1594054594IN
0xB9bd79C0...141626dBF
0 ETH0.0015415627
Transfer103791692020-07-02 9:21:561595 days ago1593681716IN
0xB9bd79C0...141626dBF
0 ETH0.0016557529
Transfer103758912020-07-01 21:08:311595 days ago1593637711IN
0xB9bd79C0...141626dBF
0 ETH0.0031402255
Transfer103745092020-07-01 16:08:011595 days ago1593619681IN
0xB9bd79C0...141626dBF
0 ETH0.0055667697.5
Transfer103681252020-06-30 16:06:451596 days ago1593533205IN
0xB9bd79C0...141626dBF
0 ETH0.002920451.15
Transfer103681252020-06-30 16:06:451596 days ago1593533205IN
0xB9bd79C0...141626dBF
0 ETH0.0053954794.5
Transfer103680152020-06-30 15:46:191596 days ago1593531979IN
0xB9bd79C0...141626dBF
0 ETH0.004567680
Transfer103627282020-06-29 20:02:061597 days ago1593460926IN
0xB9bd79C0...141626dBF
0 ETH0.000970230
Transfer103616522020-06-29 15:58:201597 days ago1593446300IN
0xB9bd79C0...141626dBF
0.01 ETH0.0037324741
Transfer103616512020-06-29 15:58:181597 days ago1593446298IN
0xB9bd79C0...141626dBF
0.01 ETH0.0037324741
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
145139592022-04-03 15:37:46954 days ago1649000266
0xB9bd79C0...141626dBF
0.07375 ETH
143956272022-03-16 5:02:57973 days ago1647406977
0xB9bd79C0...141626dBF
0.0022 ETH
143956272022-03-16 5:02:57973 days ago1647406977
0xB9bd79C0...141626dBF
0.0038 ETH
105632712020-07-30 21:14:501566 days ago1596143690
0xB9bd79C0...141626dBF
2.46415202 ETH
105558832020-07-29 17:31:021567 days ago1596043862
0xB9bd79C0...141626dBF
0.1353 ETH
105558832020-07-29 17:31:021567 days ago1596043862
0xB9bd79C0...141626dBF
0.2337 ETH
105558732020-07-29 17:29:101567 days ago1596043750
0xB9bd79C0...141626dBF
0.00055 ETH
105558732020-07-29 17:29:101567 days ago1596043750
0xB9bd79C0...141626dBF
0.00095 ETH
105077462020-07-22 7:08:221575 days ago1595401702
0xB9bd79C0...141626dBF
0.01142493 ETH
104947142020-07-20 6:12:581577 days ago1595225578
0xB9bd79C0...141626dBF
0.00740866 ETH
104861332020-07-18 22:27:031578 days ago1595111223
0xB9bd79C0...141626dBF
0.000671 ETH
104861332020-07-18 22:27:031578 days ago1595111223
0xB9bd79C0...141626dBF
0.001159 ETH
104850102020-07-18 18:21:181578 days ago1595096478
0xB9bd79C0...141626dBF
0.001265 ETH
104850102020-07-18 18:21:181578 days ago1595096478
0xB9bd79C0...141626dBF
0.002185 ETH
104843282020-07-18 15:42:391578 days ago1595086959
0xB9bd79C0...141626dBF
0.02167533 ETH
104143012020-07-07 19:42:551589 days ago1594150975
0xB9bd79C0...141626dBF
0.00055 ETH
104143012020-07-07 19:42:551589 days ago1594150975
0xB9bd79C0...141626dBF
0.00095 ETH
104141402020-07-07 19:03:381589 days ago1594148618
0xB9bd79C0...141626dBF
0.00108333 ETH
104070782020-07-06 16:56:341590 days ago1594054594
0xB9bd79C0...141626dBF
0.0043125 ETH
103791692020-07-02 9:21:561595 days ago1593681716
0xB9bd79C0...141626dBF
0.00281944 ETH
103758912020-07-01 21:08:311595 days ago1593637711
0xB9bd79C0...141626dBF
0.68997737 ETH
103745092020-07-01 16:08:011595 days ago1593619681
0xB9bd79C0...141626dBF
8.58158055 ETH
103681252020-06-30 16:06:451596 days ago1593533205
0xB9bd79C0...141626dBF
12.97535706 ETH
103681252020-06-30 16:06:451596 days ago1593533205
0xB9bd79C0...141626dBF
8.58158055 ETH
103680152020-06-30 15:46:191596 days ago1593531979
0xB9bd79C0...141626dBF
0.56452694 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoEtherFund

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-01-17
*/

pragma solidity 0.4.25;

/**
* 
* EtherFund is a hedge fund based on the cryptocurrencies that helps to all investors in our fund 
* to Minimize the risks of investing in cryptocurrencies and 
* Maximize your ETH profits from 10% per day, 310% per month, 3720% per year. 
* Join Us www.Cryptoetherfund.com
* 
*/ 

library Math {
  function min(uint a, uint b) internal pure returns(uint) {
    if (a > b) {
      return b;
    }
    return a;
  }
}


library Zero {
  function requireNotZero(address addr) internal pure {
    require(addr != address(0), "require not zero address");
  }

  function requireNotZero(uint val) internal pure {
    require(val != 0, "require not zero value");
  }

  function notZero(address addr) internal pure returns(bool) {
    return !(addr == address(0));
  }

  function isZero(address addr) internal pure returns(bool) {
    return addr == address(0);
  }

  function isZero(uint a) internal pure returns(bool) {
    return a == 0;
  }

  function notZero(uint a) internal pure returns(bool) {
    return a != 0;
  }
}


library Percent {
  struct percent {
    uint num;
    uint den;
  }
  
  function mul(percent storage p, uint a) internal view returns (uint) {
    if (a == 0) {
      return 0;
    }
    return a*p.num/p.den;
  }

  function div(percent storage p, uint a) internal view returns (uint) {
    return a/p.num*p.den;
  }

  function sub(percent storage p, uint a) internal view returns (uint) {
    uint b = mul(p, a);
    if (b >= a) {
      return 0;
    }
    return a - b;
  }

  function add(percent storage p, uint a) internal view returns (uint) {
    return a + mul(p, a);
  }

  function toMemory(percent storage p) internal view returns (Percent.percent memory) {
    return Percent.percent(p.num, p.den);
  }

  function mmul(percent memory p, uint a) internal pure returns (uint) {
    if (a == 0) {
      return 0;
    }
    return a*p.num/p.den;
  }

  function mdiv(percent memory p, uint a) internal pure returns (uint) {
    return a/p.num*p.den;
  }

  function msub(percent memory p, uint a) internal pure returns (uint) {
    uint b = mmul(p, a);
    if (b >= a) {
      return 0;
    }
    return a - b;
  }

  function madd(percent memory p, uint a) internal pure returns (uint) {
    return a + mmul(p, a);
  }
}


library Address {
  function toAddress(bytes source) internal pure returns(address addr) {
    assembly { addr := mload(add(source,0x14)) }
    return addr;
  }

  function isNotContract(address addr) internal view returns(bool) {
    uint length;
    assembly { length := extcodesize(addr) }
    return length == 0;
  }
}


/**
 * @title SafeMath
 * @dev Math operations with safety checks that revert on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, reverts on overflow.
  */
  function mul(uint256 _a, uint256 _b) internal pure returns (uint256) {
    if (_a == 0) {
      return 0;
    }

    uint256 c = _a * _b;
    require(c / _a == _b);

    return c;
  }

  /**
  * @dev Integer division of two numbers truncating the quotient, reverts on division by zero.
  */
  function div(uint256 _a, uint256 _b) internal pure returns (uint256) {
    require(_b > 0); // Solidity only automatically asserts when dividing by 0
    uint256 c = _a / _b;
    // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold

    return c;
  }

  /**
  * @dev Subtracts two numbers, reverts on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 _a, uint256 _b) internal pure returns (uint256) {
    require(_b <= _a);
    uint256 c = _a - _b;

    return c;
  }

  /**
  * @dev Adds two numbers, reverts on overflow.
  */
  function add(uint256 _a, uint256 _b) internal pure returns (uint256) {
    uint256 c = _a + _b;
    require(c >= _a);

    return c;
  }

  /**
  * @dev Divides two numbers and returns the remainder (unsigned integer modulo),
  * reverts when dividing by zero.
  */
  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0);
    return a % b;
  }
}


contract Accessibility {
  address private owner;
  modifier onlyOwner() {
    require(msg.sender == owner, "access denied");
    _;
  }

  constructor() public {
    owner = msg.sender;
  }

  function disown() internal {
    delete owner;
  }
}


contract Rev1Storage {
  function investorShortInfo(address addr) public view returns(uint value, uint refBonus); 
}


contract Rev2Storage {
  function investorInfo(address addr) public view returns(uint investment, uint paymentTime); 
}


library PrivateEntrance {
  using PrivateEntrance for privateEntrance;
  using Math for uint;
  struct privateEntrance {
    Rev1Storage rev1Storage;
    Rev2Storage rev2Storage;
    uint investorMaxInvestment;
    uint endTimestamp;
    mapping(address=>bool) hasAccess;
  }

  function isActive(privateEntrance storage pe) internal view returns(bool) {
    return pe.endTimestamp > now;
  }

  function maxInvestmentFor(privateEntrance storage pe, address investorAddr) internal view returns(uint) {
    if (!pe.hasAccess[investorAddr]) {
      return 0;
    }

    (uint maxInvestment, ) = pe.rev1Storage.investorShortInfo(investorAddr);
    if (maxInvestment == 0) {
      return 0;
    }
    maxInvestment = Math.min(maxInvestment, pe.investorMaxInvestment);

    (uint currInvestment, ) = pe.rev2Storage.investorInfo(investorAddr);
    
    if (currInvestment >= maxInvestment) {
      return 0;
    }

    return maxInvestment-currInvestment;
  }

  function provideAccessFor(privateEntrance storage pe, address[] addrs) internal {
    for (uint16 i; i < addrs.length; i++) {
      pe.hasAccess[addrs[i]] = true;
    }
  }
}


contract InvestorsStorage is Accessibility {
  struct Investor {
    uint investment;
    uint paymentTime;
  }
  uint public size;

  mapping (address => Investor) private investors;

  function isInvestor(address addr) public view returns (bool) {
    return investors[addr].investment > 0;
  }

  function investorInfo(address addr) public view returns(uint investment, uint paymentTime) {
    investment = investors[addr].investment;
    paymentTime = investors[addr].paymentTime;
  }

  function newInvestor(address addr, uint investment, uint paymentTime) public onlyOwner returns (bool) {
    Investor storage inv = investors[addr];
    if (inv.investment != 0 || investment == 0) {
      return false;
    }
    inv.investment = investment;
    inv.paymentTime = paymentTime;
    size++;
    return true;
  }

  function addInvestment(address addr, uint investment) public onlyOwner returns (bool) {
    if (investors[addr].investment == 0) {
      return false;
    }
    investors[addr].investment += investment;
    return true;
  }

  function setPaymentTime(address addr, uint paymentTime) public onlyOwner returns (bool) {
    if (investors[addr].investment == 0) {
      return false;
    }
    investors[addr].paymentTime = paymentTime;
    return true;
  }

  function disqalify(address addr) public onlyOwner returns (bool) {
    if (isInvestor(addr)) {
      investors[addr].investment = 0;
    }
  }
}


library RapidGrowthProtection {
  using RapidGrowthProtection for rapidGrowthProtection;
  
  struct rapidGrowthProtection {
    uint startTimestamp;
    uint maxDailyTotalInvestment;
    uint8 activityDays;
    mapping(uint8 => uint) dailyTotalInvestment;
  }

  function maxInvestmentAtNow(rapidGrowthProtection storage rgp) internal view returns(uint) {
    uint day = rgp.currDay();
    if (day == 0 || day > rgp.activityDays) {
      return 0;
    }
    if (rgp.dailyTotalInvestment[uint8(day)] >= rgp.maxDailyTotalInvestment) {
      return 0;
    }
    return rgp.maxDailyTotalInvestment - rgp.dailyTotalInvestment[uint8(day)];
  }

  function isActive(rapidGrowthProtection storage rgp) internal view returns(bool) {
    uint day = rgp.currDay();
    return day != 0 && day <= rgp.activityDays;
  }

  function saveInvestment(rapidGrowthProtection storage rgp, uint investment) internal returns(bool) {
    uint day = rgp.currDay();
    if (day == 0 || day > rgp.activityDays) {
      return false;
    }
    if (rgp.dailyTotalInvestment[uint8(day)] + investment > rgp.maxDailyTotalInvestment) {
      return false;
    }
    rgp.dailyTotalInvestment[uint8(day)] += investment;
    return true;
  }

  function startAt(rapidGrowthProtection storage rgp, uint timestamp) internal { 
    rgp.startTimestamp = timestamp;

    // restart
    for (uint8 i = 1; i <= rgp.activityDays; i++) {
      if (rgp.dailyTotalInvestment[i] != 0) {
        delete rgp.dailyTotalInvestment[i];
      }
    }
  }

  function currDay(rapidGrowthProtection storage rgp) internal view returns(uint day) {
    if (rgp.startTimestamp > now) {
      return 0;
    }
    day = (now - rgp.startTimestamp) / 24 hours + 1; 
  }
}

contract CryptoEtherFund is Accessibility {
  using RapidGrowthProtection for RapidGrowthProtection.rapidGrowthProtection;
  using PrivateEntrance for PrivateEntrance.privateEntrance;
  using Percent for Percent.percent;
  using SafeMath for uint;
  using Math for uint;

  // easy read for investors
  using Address for *;
  using Zero for *; 
  
  RapidGrowthProtection.rapidGrowthProtection private m_rgp;
  PrivateEntrance.privateEntrance private m_privEnter;
  mapping(address => bool) private m_referrals;
  InvestorsStorage private m_investors;

  // automatically generates getters
  uint public constant minInvesment = 10 finney; 
  uint public constant maxBalance = 333e5 ether; 
  address public advertisingAddress;
  address public adminsAddress;
  uint public investmentsNumber;
  uint public waveStartup;

  // percents 
  Percent.percent private m_5_percent = Percent.percent(10,100);            // 10/100 *100% = 10%
  Percent.percent private m_6_percent = Percent.percent(15,100);            // 15/100 *100% = 15%
  Percent.percent private m_7_percent = Percent.percent(19,100);            // 19/100 *100% = 19%
  Percent.percent private m_8_percent = Percent.percent(18,100);            // 18/100 *100% = 12%
  Percent.percent private m_9_percent = Percent.percent(13,100);            // 13/100 *100% = 13%
  Percent.percent private m_10_percent = Percent.percent(14,100);          // 14/100 *100% = 14%
  Percent.percent private m_11_percent = Percent.percent(15,100);            // 15/100 *100% = 15%
  Percent.percent private m_12_percent = Percent.percent(16,100);            // 16/100 *100% = 16%
  Percent.percent private m_referal_percent = Percent.percent(10,100);        // 10/100 *100% = 10%
  Percent.percent private m_referrer_percent = Percent.percent(10,100);       // 10/100 *100% = 10%
  Percent.percent private m_referrer_percentMax = Percent.percent(15,100);   // 15/100 *100% = 15%
  Percent.percent private m_adminsPercent = Percent.percent(55, 1000);       //   55/100  *100% = 5.5%
  Percent.percent private m_advertisingPercent = Percent.percent(95, 1000);// 95/1000  *100% = 9.5%

  // more events for easy read from blockchain
  event LogPEInit(uint when, address rev1Storage, address rev2Storage, uint investorMaxInvestment, uint endTimestamp);
  event LogSendExcessOfEther(address indexed addr, uint when, uint value, uint investment, uint excess);
  event LogNewReferral(address indexed addr, address indexed referrerAddr, uint when, uint refBonus);
  event LogRGPInit(uint when, uint startTimestamp, uint maxDailyTotalInvestment, uint activityDays);
  event LogRGPInvestment(address indexed addr, uint when, uint investment, uint indexed day);
  event LogNewInvesment(address indexed addr, uint when, uint investment, uint value);
  event LogAutomaticReinvest(address indexed addr, uint when, uint investment);
  event LogPayDividends(address indexed addr, uint when, uint dividends);
  event LogNewInvestor(address indexed addr, uint when);
  event LogBalanceChanged(uint when, uint balance);
  event LogNextWave(uint when);
  event LogDisown(uint when);


  modifier balanceChanged {
    _;
    emit LogBalanceChanged(now, address(this).balance);
  }

  modifier notFromContract() {
    require(msg.sender.isNotContract(), "only externally accounts");
    _;
  }

  constructor() public {
    adminsAddress = msg.sender;
    advertisingAddress = msg.sender;
    nextWave();
  }

  function() public payable {
    // investor get him dividends
    if (msg.value.isZero()) {
      getMyDividends();
      return;
    }

    // sender do invest
    doInvest(msg.data.toAddress());
  }

  function disqualifyAddress(address addr) public onlyOwner {
    m_investors.disqalify(addr);
  }

  function doDisown() public onlyOwner {
    disown();
    emit LogDisown(now);
  }

  function init(address rev1StorageAddr, uint timestamp) public onlyOwner {
    // init Rapid Growth Protection
    m_rgp.startTimestamp = timestamp + 1;
    m_rgp.maxDailyTotalInvestment = 500 ether;
    m_rgp.activityDays = 21;
    emit LogRGPInit(
      now, 
      m_rgp.startTimestamp,
      m_rgp.maxDailyTotalInvestment,
      m_rgp.activityDays
    );


    // init Private Entrance
    m_privEnter.rev1Storage = Rev1Storage(rev1StorageAddr);
    m_privEnter.rev2Storage = Rev2Storage(address(m_investors));
    m_privEnter.investorMaxInvestment = 50 ether;
    m_privEnter.endTimestamp = timestamp;
    emit LogPEInit(
      now, 
      address(m_privEnter.rev1Storage), 
      address(m_privEnter.rev2Storage), 
      m_privEnter.investorMaxInvestment, 
      m_privEnter.endTimestamp
    );
  }

  function setAdvertisingAddress(address addr) public onlyOwner {
    addr.requireNotZero();
    advertisingAddress = addr;
  }

  function setAdminsAddress(address addr) public onlyOwner {
    addr.requireNotZero();
    adminsAddress = addr;
  }

  function privateEntranceProvideAccessFor(address[] addrs) public onlyOwner {
    m_privEnter.provideAccessFor(addrs);
  }

  function rapidGrowthProtectionmMaxInvestmentAtNow() public view returns(uint investment) {
    investment = m_rgp.maxInvestmentAtNow();
  }

  function investorsNumber() public view returns(uint) {
    return m_investors.size();
  }

  function balanceETH() public view returns(uint) {
    return address(this).balance;
  }

  function advertisingPercent() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_advertisingPercent.num, m_advertisingPercent.den);
  }

  function adminsPercent() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_adminsPercent.num, m_adminsPercent.den);
  }

  function investorInfo(address investorAddr) public view returns(uint investment, uint paymentTime, bool isReferral) {
    (investment, paymentTime) = m_investors.investorInfo(investorAddr);
    isReferral = m_referrals[investorAddr];
  }

  function investorDividendsAtNow(address investorAddr) public view returns(uint dividends) {
    dividends = calcDividends(investorAddr);
  }

  function dailyPercentAtNow() public view returns(uint numerator, uint denominator) {
    Percent.percent memory p = dailyPercent();
    (numerator, denominator) = (p.num, p.den);
  }

  function getMyDividends() public notFromContract balanceChanged {
    // calculate dividends
    
    //check if 1 day passed after last payment
    require(now.sub(getMemInvestor(msg.sender).paymentTime) > 24 hours);

    uint dividends = calcDividends(msg.sender);
    require (dividends.notZero(), "cannot to pay zero dividends");

    // update investor payment timestamp
    assert(m_investors.setPaymentTime(msg.sender, now));

    // check enough eth - goto next wave if needed
    if (address(this).balance <= dividends) {
      nextWave();
      dividends = address(this).balance;
    } 

    // transfer dividends to investor
    msg.sender.transfer(dividends);
    emit LogPayDividends(msg.sender, now, dividends);
  }

  function doInvest(address referrerAddr) public payable notFromContract balanceChanged {
    uint investment = msg.value;
    uint receivedEther = msg.value;
    require(investment >= minInvesment, "investment must be >= minInvesment");
    require(address(this).balance <= maxBalance, "the contract eth balance limit");

    if (m_rgp.isActive()) { 
      // use Rapid Growth Protection if needed
      uint rpgMaxInvest = m_rgp.maxInvestmentAtNow();
      rpgMaxInvest.requireNotZero();
      investment = Math.min(investment, rpgMaxInvest);
      assert(m_rgp.saveInvestment(investment));
      emit LogRGPInvestment(msg.sender, now, investment, m_rgp.currDay());
      
    } else if (m_privEnter.isActive()) {
      // use Private Entrance if needed
      uint peMaxInvest = m_privEnter.maxInvestmentFor(msg.sender);
      peMaxInvest.requireNotZero();
      investment = Math.min(investment, peMaxInvest);
    }

    // send excess of ether if needed
    if (receivedEther > investment) {
      uint excess = receivedEther - investment;
      msg.sender.transfer(excess);
      receivedEther = investment;
      emit LogSendExcessOfEther(msg.sender, now, msg.value, investment, excess);
    }

    // commission
    advertisingAddress.send(m_advertisingPercent.mul(receivedEther));
    adminsAddress.send(m_adminsPercent.mul(receivedEther));

    bool senderIsInvestor = m_investors.isInvestor(msg.sender);

    // ref system works only once and only on first invest
    if (referrerAddr.notZero() && !senderIsInvestor && !m_referrals[msg.sender] &&
      referrerAddr != msg.sender && m_investors.isInvestor(referrerAddr)) {
      
      m_referrals[msg.sender] = true;
      // add referral bonus to investor`s and referral`s investments
      uint referrerBonus = m_referrer_percent.mmul(investment);
      if (investment > 10 ether) {
        referrerBonus = m_referrer_percentMax.mmul(investment);
      }
      
      uint referalBonus = m_referal_percent.mmul(investment);
      assert(m_investors.addInvestment(referrerAddr, referrerBonus)); // add referrer bonus
      investment += referalBonus;                                    // add referral bonus
      emit LogNewReferral(msg.sender, referrerAddr, now, referalBonus);
    }

    // automatic reinvest - prevent burning dividends
    uint dividends = calcDividends(msg.sender);
    if (senderIsInvestor && dividends.notZero()) {
      investment += dividends;
      emit LogAutomaticReinvest(msg.sender, now, dividends);
    }

    if (senderIsInvestor) {
      // update existing investor
      assert(m_investors.addInvestment(msg.sender, investment));
      assert(m_investors.setPaymentTime(msg.sender, now));
    } else {
      // create new investor
      assert(m_investors.newInvestor(msg.sender, investment, now));
      emit LogNewInvestor(msg.sender, now);
    }

    investmentsNumber++;
    emit LogNewInvesment(msg.sender, now, investment, receivedEther);
  }

  function getMemInvestor(address investorAddr) internal view returns(InvestorsStorage.Investor memory) {
    (uint investment, uint paymentTime) = m_investors.investorInfo(investorAddr);
    return InvestorsStorage.Investor(investment, paymentTime);
  }

  function calcDividends(address investorAddr) internal view returns(uint dividends) {
    InvestorsStorage.Investor memory investor = getMemInvestor(investorAddr);

    // safe gas if dividends will be 0
    if (investor.investment.isZero() || now.sub(investor.paymentTime) < 10 minutes) {
      return 0;
    }
    
    // for prevent burning daily dividends if 24h did not pass - calculate it per 10 min interval
    Percent.percent memory p = dailyPercent();
    dividends = (now.sub(investor.paymentTime) / 10 minutes) * p.mmul(investor.investment) / 144;
  }

  function dailyPercent() internal view returns(Percent.percent memory p) {
    uint balance = address(this).balance;

    if (balance < 500 ether) { 
      p = m_5_percent.toMemory(); 
    } else if ( 500 ether <= balance && balance <= 1000 ether) {
      p = m_6_percent.toMemory();    
    } else if ( 1000 ether <= balance && balance <= 2500 ether) {
      p = m_7_percent.toMemory();   
    } else if ( 2500 ether <= balance && balance <= 10000 ether) {
      p = m_8_percent.toMemory();  
    } else if ( 10000 ether <= balance && balance <= 20000 ether) {
      p = m_9_percent.toMemory();    
    } else if ( 20000 ether <= balance && balance <= 30000 ether) {
      p = m_10_percent.toMemory();  
    } else if ( 30000 ether <= balance && balance <= 50000 ether) {
      p = m_11_percent.toMemory();   
    } else {
      p = m_12_percent.toMemory();    
    } 
  }

  function nextWave() private {
    m_investors = new InvestorsStorage();
    investmentsNumber = 0;
    waveStartup = now;
    m_rgp.startAt(now);
    emit LogRGPInit(now , m_rgp.startTimestamp, m_rgp.maxDailyTotalInvestment, m_rgp.activityDays);
    emit LogNextWave(now);
  }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"addrs","type":"address[]"}],"name":"privateEntranceProvideAccessFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"disqualifyAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"advertisingAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"rev1StorageAddr","type":"address"},{"name":"timestamp","type":"uint256"}],"name":"init","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"minInvesment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adminsAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"investorsNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"investorAddr","type":"address"}],"name":"investorDividendsAtNow","outputs":[{"name":"dividends","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rapidGrowthProtectionmMaxInvestmentAtNow","outputs":[{"name":"investment","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"advertisingPercent","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adminsPercent","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setAdminsAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"investmentsNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dailyPercentAtNow","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setAdvertisingAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"getMyDividends","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"referrerAddr","type":"address"}],"name":"doInvest","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"investorAddr","type":"address"}],"name":"investorInfo","outputs":[{"name":"investment","type":"uint256"},{"name":"paymentTime","type":"uint256"},{"name":"isReferral","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"waveStartup","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceETH","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"doDisown","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"rev1Storage","type":"address"},{"indexed":false,"name":"rev2Storage","type":"address"},{"indexed":false,"name":"investorMaxInvestment","type":"uint256"},{"indexed":false,"name":"endTimestamp","type":"uint256"}],"name":"LogPEInit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"investment","type":"uint256"},{"indexed":false,"name":"excess","type":"uint256"}],"name":"LogSendExcessOfEther","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":true,"name":"referrerAddr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"refBonus","type":"uint256"}],"name":"LogNewReferral","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"startTimestamp","type":"uint256"},{"indexed":false,"name":"maxDailyTotalInvestment","type":"uint256"},{"indexed":false,"name":"activityDays","type":"uint256"}],"name":"LogRGPInit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"investment","type":"uint256"},{"indexed":true,"name":"day","type":"uint256"}],"name":"LogRGPInvestment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"investment","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"}],"name":"LogNewInvesment","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"investment","type":"uint256"}],"name":"LogAutomaticReinvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"dividends","type":"uint256"}],"name":"LogPayDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"}],"name":"LogNewInvestor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"LogBalanceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"}],"name":"LogNextWave","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"}],"name":"LogDisown","type":"event"}]

600a6080819052606460a081905260108281556011829055600f60c081905260e08390526012818155601384815561010081905261012085905260145560158490556101408190526101608490526016556017839055600d6101808190526101a08490526018556019839055600e6101c08190526101e0849052601a55601b839055610200819052610220839052601c819055601d839055610240829052610260839052601e91909155601f8290556102808390526102a0829052602083905560218290556102c08390526102e0829052602292909255602381905561030082905261032081905260249190915560255560376103408190526103e861036081905260269190915560278190556103c0604052605f6103808190526103a08290526028556029553480156200013357600080fd5b506000805433600160a060020a03199182168117909255600d8054821683179055600c805490911690911790556200017364010000000062000179810204565b620002d8565b62000183620002c7565b604051809103906000f080158015620001a0573d6000803e3d6000fd5b50600b8054600160a060020a031916600160a060020a03929092169190911790556000600e5542600f819055620001e8906001906401000000006200026f810262001ee31704565b6001546002546003546040805142815260208101949094528381019290925260ff166060830152517f16171a4e996b33ebb6320397242a4168f60c16e87fbd8b58f1744d68c4179caf9181900360800190a16040805142815290517fc66870ef5f6257a76295d443e9221488043ec691f830f6c6128755c3518e3c759181900360200190a1565b80825560015b600283015460ff90811690821611620002c25760ff8116600090815260038401602052604090205415620002b95760ff811660009081526003840160205260408120555b60010162000275565b505050565b6040516104c6806200277983390190565b61249180620002e86000396000f3006080604052600436106101275763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306127a11811461018657806315aa6833146101db5780631686531a146101fc578063399ae7241461022d5780633d7ac9f81461025157806362d2c55514610278578063653c31741461028d57806373ad468a146102a2578063900334b1146102b757806390b0636f146102d85780639396df32146102ed57806395a23c3a1461031b578063984d4a93146103305780639ec6e05414610351578063b8fde2a414610366578063cb192f2c1461037b578063d50030ad1461039c578063d82fa3f1146103b1578063dbcbaca4146103c5578063eafecc7a14610406578063ecbdbb321461041b578063fc7c41af14610430575b61013034610445565b156101425761013d61044d565b610184565b61018461017f6000368080601f0160208091040260200160405190810160405280939291908181526020018383808284375061069d945050505050565b6106a4565b005b34801561019257600080fd5b506040805160206004803580820135838102808601850190965280855261018495369593946024949385019291829185019084908082843750949750610ff39650505050505050565b3480156101e757600080fd5b50610184600160a060020a0360043516611057565b34801561020857600080fd5b5061021161113e565b60408051600160a060020a039092168252519081900360200190f35b34801561023957600080fd5b50610184600160a060020a036004351660243561114d565b34801561025d57600080fd5b506102666112b2565b60408051918252519081900360200190f35b34801561028457600080fd5b506102116112bd565b34801561029957600080fd5b506102666112cc565b3480156102ae57600080fd5b5061026661135c565b3480156102c357600080fd5b50610266600160a060020a036004351661136b565b3480156102e457600080fd5b5061026661137c565b3480156102f957600080fd5b5061030261138d565b6040805192835260208301919091528051918290030190f35b34801561032757600080fd5b50610302611397565b34801561033c57600080fd5b50610184600160a060020a03600435166113a1565b34801561035d57600080fd5b50610266611432565b34801561037257600080fd5b50610302611438565b34801561038757600080fd5b50610184600160a060020a036004351661145d565b3480156103a857600080fd5b5061018461044d565b610184600160a060020a03600435166106a4565b3480156103d157600080fd5b506103e6600160a060020a03600435166114ee565b604080519384526020840192909252151582820152519081900360600190f35b34801561041257600080fd5b506102666115b4565b34801561042757600080fd5b506102666115ba565b34801561043c57600080fd5b506101846115bf565b80155b919050565b60006104583361164c565b15156104ae576040805160e560020a62461bcd02815260206004820152601860248201527f6f6e6c792065787465726e616c6c79206163636f756e74730000000000000000604482015290519081900360640190fd5b620151806104cf6104be33611658565b60200151429063ffffffff61171c16565b116104d957600080fd5b6104e23361173a565b90506104ed816117ec565b1515610543576040805160e560020a62461bcd02815260206004820152601c60248201527f63616e6e6f7420746f20706179207a65726f206469766964656e647300000000604482015290519081900360640190fd5b600b54604080517f440135850000000000000000000000000000000000000000000000000000000081523360048201524260248201529051600160a060020a03909216916344013585916044808201926020929091908290030181600087803b1580156105af57600080fd5b505af11580156105c3573d6000803e3d6000fd5b505050506040513d60208110156105d957600080fd5b505115156105e357fe5b303181106105f7576105f36117f1565b5030315b604051339082156108fc029083906000818181858888f19350505050158015610624573d6000803e3d6000fd5b506040805142815260208101839052815133927f6710e0cad56444677ac916513b384a4acc6501cfb5219f59657ad4ddffef9d60928290030190a2604080514281523031602082015281517f32367fddaa1baa1c6a0fc5c3e8284df724bacc7b50e847c32c9f9765f9f96137929181900390910190a150565b6014015190565b600080808080808080806106b73361164c565b151561070d576040805160e560020a62461bcd02815260206004820152601860248201527f6f6e6c792065787465726e616c6c79206163636f756e74730000000000000000604482015290519081900360640190fd5b349850889750662386f26fc10000881015610798576040805160e560020a62461bcd02815260206004820152602260248201527f696e766573746d656e74206d757374206265203e3d206d696e496e7665736d6560448201527f6e74000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6a1b8b8c9e000e82a4800000303111156107fc576040805160e560020a62461bcd02815260206004820152601e60248201527f74686520636f6e7472616374206574682062616c616e6365206c696d69740000604482015290519081900360640190fd5b61080660016118e1565b1561088e57610815600161190c565b965061082087611986565b61082a89886119dd565b985061083d60018a63ffffffff6119f516565b151561084557fe5b61084f6001611a72565b60408051428152602081018c9052815133927f21cd51cc98547f9914bc0b314a40e645408acad21d1289eecb4dfb534fda7cfc928290030190a36108c6565b6108986005611a9c565b156108c6576108ae60053363ffffffff611aa516565b95506108b986611986565b6108c389876119dd565b98505b8888111561094e576040518989039550339086156108fc029087906000818181858888f19350505050158015610900573d6000803e3d6000fd5b50604080514281523460208201528082018b90526060810187905290518a995033917faac472d912a7451062b64c942775db41d65cce271603099e1c4760e072050951919081900360800190a25b600c54600160a060020a03166108fc61096e60288b63ffffffff611c3a16565b6040518115909202916000818181858888f15050600d54600160a060020a031692506108fc91506109a8905060268b63ffffffff611c3a16565b6040518115909202916000818181858888f15050600b54604080517fcee2a9cf0000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a03909216945063cee2a9cf935060248082019350602092918290030181600087803b158015610a2357600080fd5b505af1158015610a37573d6000803e3d6000fd5b505050506040513d6020811015610a4d57600080fd5b50519350610a63600160a060020a038b16611c65565b8015610a6d575083155b8015610a895750336000908152600a602052604090205460ff16155b8015610a9e5750600160a060020a038a163314155b8015610b3a5750600b54604080517fcee2a9cf000000000000000000000000000000000000000000000000000000008152600160a060020a038d811660048301529151919092169163cee2a9cf9160248083019260209291908290030181600087803b158015610b0d57600080fd5b505af1158015610b21573d6000803e3d6000fd5b505050506040513d6020811015610b3757600080fd5b50515b15610cd657336000908152600a6020908152604091829020805460ff191660011790558151808301909252602254825260235490820152610b81908a63ffffffff611c7316565b9250678ac7230489e80000891115610bbd576040805180820190915260245481526025546020820152610bba908a63ffffffff611c7316565b92505b6040805180820190915260208054825260215490820152610be4908a63ffffffff611c7316565b600b54604080517f20987e64000000000000000000000000000000000000000000000000000000008152600160a060020a038e811660048301526024820188905291519395509116916320987e64916044808201926020929091908290030181600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b505050506040513d6020811015610c7f57600080fd5b50511515610c8957fe5b604080514281526020810184905281519a84019a600160a060020a038d169233927fc04fb14bddd876003a335c37b1fe6524ac1dbf74eb64dd08cd085fba4b97d592929081900390910190a35b610cdf3361173a565b9050838015610cf25750610cf2816117ec565b15610d3657604080514281526020810183905281519a83019a33927f149822e3a65d38c9b6f40e835864c61ef5ca0866219afc2db638e3f85ae78866928290030190a25b8315610e8257600b54604080517f20987e64000000000000000000000000000000000000000000000000000000008152336004820152602481018c90529051600160a060020a03909216916320987e64916044808201926020929091908290030181600087803b158015610da957600080fd5b505af1158015610dbd573d6000803e3d6000fd5b505050506040513d6020811015610dd357600080fd5b50511515610ddd57fe5b600b54604080517f440135850000000000000000000000000000000000000000000000000000000081523360048201524260248201529051600160a060020a03909216916344013585916044808201926020929091908290030181600087803b158015610e4957600080fd5b505af1158015610e5d573d6000803e3d6000fd5b505050506040513d6020811015610e7357600080fd5b50511515610e7d57fe5b610f60565b600b54604080517f41b2121c000000000000000000000000000000000000000000000000000000008152336004820152602481018c90524260448201529051600160a060020a03909216916341b2121c916064808201926020929091908290030181600087803b158015610ef557600080fd5b505af1158015610f09573d6000803e3d6000fd5b505050506040513d6020811015610f1f57600080fd5b50511515610f2957fe5b60408051428152905133917fc8616cf56c542aa2540734215ee474180fc3b9cc7c2fad288000504632cacf18919081900360200190a25b600e8054600101905560408051428152602081018b90528082018a9052905133917fd5a986028ae9e04f72859f7d3c1d8ae8b649c26be5b99d4c2d98ca4a19a0502e919081900360600190a2604080514281523031602082015281517f32367fddaa1baa1c6a0fc5c3e8284df724bacc7b50e847c32c9f9765f9f96137929181900390910190a150505050505050505050565b600054600160a060020a03163314611043576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020612446833981519152604482015290519081900360640190fd5b61105460058263ffffffff611c9616565b50565b600054600160a060020a031633146110a7576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020612446833981519152604482015290519081900360640190fd5b600b54604080517fd597d06f000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301529151919092169163d597d06f9160248083019260209291908290030181600087803b15801561110f57600080fd5b505af1158015611123573d6000803e3d6000fd5b505050506040513d602081101561113957600080fd5b505050565b600c54600160a060020a031681565b600054600160a060020a0316331461119d576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020612446833981519152604482015290519081900360640190fd5b600180820190819055681b1ae4d6e2ef50000060028190556003805460ff1916601517908190556040805142815260208101949094528381019290925260ff166060830152517f16171a4e996b33ebb6320397242a4168f60c16e87fbd8b58f1744d68c4179caf9181900360800190a160058054600160a060020a0380851673ffffffffffffffffffffffffffffffffffffffff199283161792839055600b546006805490931690821617918290556802b5e3af16b1880000600781905560088590556040805142815294831660208601529290911683830152606083015260808201839052517f7e13d111fea1199cb6fb21cb38766240cfad970317820e8e5713da7a708285309181900360a00190a15050565b662386f26fc1000081565b600d54600160a060020a031681565b600b54604080517f949d225d0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163949d225d91600480830192602092919082900301818787803b15801561132b57600080fd5b505af115801561133f573d6000803e3d6000fd5b505050506040513d602081101561135557600080fd5b5051905090565b6a1b8b8c9e000e82a480000081565b60006113768261173a565b92915050565b6000611388600161190c565b905090565b6028546029549091565b6026546027549091565b600054600160a060020a031633146113f1576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020612446833981519152604482015290519081900360640190fd5b61140381600160a060020a0316611cfa565b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600e5481565b600080611443611f58565b61144b611d5a565b80516020909101519094909350915050565b600054600160a060020a031633146114ad576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020612446833981519152604482015290519081900360640190fd5b6114bf81600160a060020a0316611cfa565b600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600b54604080517fdbcbaca4000000000000000000000000000000000000000000000000000000008152600160a060020a038481166004830152825160009485948594939091169263dbcbaca4926024808301939282900301818787803b15801561155857600080fd5b505af115801561156c573d6000803e3d6000fd5b505050506040513d604081101561158257600080fd5b508051602091820151600160a060020a039096166000908152600a909252604090912054909560ff9091169350915050565b600f5481565b303190565b600054600160a060020a0316331461160f576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020612446833981519152604482015290519081900360640190fd5b611617611ec4565b6040805142815290517f5189687a7ec9d4aebe2f548f952ffbbad19e4cd545c4a05b5e2369cd272dd5519181900360200190a1565b803b8015905b50919050565b611660611f58565b600b54604080517fdbcbaca4000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528251600094859492169263dbcbaca492602480830193919282900301818787803b1580156116c757600080fd5b505af11580156116db573d6000803e3d6000fd5b505050506040513d60408110156116f157600080fd5b50805160209182015160408051808201909152828152928301819052919450925090505b5050919050565b6000808383111561172c57600080fd5b5050808203805b5092915050565b6000611744611f58565b61174c611f58565b61175584611658565b91506117648260000151610445565b80611786575061025861178483602001514261171c90919063ffffffff16565b105b156117945760009250611715565b61179c611d5a565b82519091506090906117b590839063ffffffff611c7316565b6102586117cf85602001514261171c90919063ffffffff16565b8115156117d857fe5b04028115156117e357fe5b04949350505050565b151590565b6117f9611f6f565b604051809103906000f080158015611815573d6000803e3d6000fd5b50600b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556000600e5542600f81905561185a90600190611ee3565b6001546002546003546040805142815260208101949094528381019290925260ff166060830152517f16171a4e996b33ebb6320397242a4168f60c16e87fbd8b58f1744d68c4179caf9181900360800190a16040805142815290517fc66870ef5f6257a76295d443e9221488043ec691f830f6c6128755c3518e3c759181900360200190a1565b6000806118ed83611a72565b905080158015906119055750600283015460ff168111155b9392505050565b60008061191883611a72565b905080158061192d5750600283015460ff1681115b1561193b5760009150611652565b600183015460ff82166000908152600385016020526040902054106119635760009150611652565b60ff81166000908152600384016020526040902054600184015403915050919050565b801515611054576040805160e560020a62461bcd02815260206004820152601660248201527f72657175697265206e6f74207a65726f2076616c756500000000000000000000604482015290519081900360640190fd5b6000818311156119ee575080611376565b5090919050565b600080611a0184611a72565b9050801580611a165750600284015460ff1681115b15611a245760009150611733565b600184015460ff8216600090815260038601602052604090205484011115611a4f5760009150611733565b60ff16600090815260039390930160205250604090912080549091019055600190565b60004282600001541115611a8857506000610448565b815462015180904203046001019050919050565b60030154421090565b600160a060020a03811660009081526004830160205260408120548190819060ff161515611ad65760009250611c32565b8454604080517f993d3489000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152825193169263993d3489926024808401939192918290030181600087803b158015611b3957600080fd5b505af1158015611b4d573d6000803e3d6000fd5b505050506040513d6040811015611b6357600080fd5b50519150811515611b775760009250611c32565b611b858286600201546119dd565b6001860154604080517fdbcbaca4000000000000000000000000000000000000000000000000000000008152600160a060020a03888116600483015282519496509092169263dbcbaca49260248082019392918290030181600087803b158015611bee57600080fd5b505af1158015611c02573d6000803e3d6000fd5b505050506040513d6040811015611c1857600080fd5b50519050818110611c2c5760009250611c32565b80820392505b505092915050565b6000811515611c4b57506000611376565b600183015483548302811515611c5d57fe5b049392505050565b600160a060020a0316151590565b6000811515611c8457506000611376565b602083015183518302811515611c5d57fe5b60005b81518161ffff161015611139576001836004016000848461ffff16815181101515611cc057fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff1916911515919091179055600101611c99565b600160a060020a0381161515611054576040805160e560020a62461bcd02815260206004820152601860248201527f72657175697265206e6f74207a65726f20616464726573730000000000000000604482015290519081900360640190fd5b611d62611f58565b3031681b1ae4d6e2ef500000811015611d8657611d7f6010611f33565b9150611ec0565b80681b1ae4d6e2ef50000011158015611da85750683635c9adc5dea000008111155b15611db757611d7f6012611f33565b80683635c9adc5dea0000011158015611dd9575068878678326eac9000008111155b15611de857611d7f6014611f33565b8068878678326eac90000011158015611e0b575069021e19e0c9bab24000008111155b15611e1a57611d7f6016611f33565b8069021e19e0c9bab240000011158015611e3e575069043c33c19375648000008111155b15611e4d57611d7f6018611f33565b8069043c33c193756480000011158015611e71575069065a4da25d3016c000008111155b15611e8057611d7f601a611f33565b8069065a4da25d3016c0000011158015611ea45750690a968163f0a57b4000008111155b15611eb357611d7f601c611f33565b611ebd601e611f33565b91505b5090565b6000805473ffffffffffffffffffffffffffffffffffffffff19169055565b80825560015b600283015460ff908116908216116111395760ff8116600090815260038401602052604090205415611f2b5760ff811660009081526003840160205260408120555b600101611ee9565b611f3b611f58565b506040805180820190915281548152600190910154602082015290565b604080518082019091526000808252602082015290565b6040516104c680611f80833901905600608060405260008054600160a060020a031916331790556104a1806100256000396000f3006080604052600436106100825763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166320987e64811461008757806341b2121c146100bf57806344013585146100e6578063949d225d1461010a578063cee2a9cf14610131578063d597d06f14610152578063dbcbaca414610173575b600080fd5b34801561009357600080fd5b506100ab600160a060020a03600435166024356101ad565b604080519115158252519081900360200190f35b3480156100cb57600080fd5b506100ab600160a060020a036004351660243560443561024d565b3480156100f257600080fd5b506100ab600160a060020a03600435166024356102f0565b34801561011657600080fd5b5061011f61038f565b60408051918252519081900360200190f35b34801561013d57600080fd5b506100ab600160a060020a0360043516610395565b34801561015e57600080fd5b506100ab600160a060020a03600435166103b5565b34801561017f57600080fd5b50610194600160a060020a0360043516610432565b6040805192835260208301919091528051918290030190f35b60008054600160a060020a031633146101fe576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610456833981519152604482015290519081900360640190fd5b600160a060020a038316600090815260026020526040902054151561022557506000610247565b50600160a060020a038216600090815260026020526040902080548201905560015b92915050565b600080548190600160a060020a031633146102a0576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610456833981519152604482015290519081900360640190fd5b50600160a060020a038416600090815260026020526040902080541515806102c6575083155b156102d457600091506102e8565b838155600180820184905580548101815591505b509392505050565b60008054600160a060020a03163314610341576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610456833981519152604482015290519081900360640190fd5b600160a060020a038316600090815260026020526040902054151561036857506000610247565b50600160a060020a0382166000908152600260205260409020600190810182905592915050565b60015481565b600160a060020a038116600090815260026020526040812054115b919050565b60008054600160a060020a03163314610406576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610456833981519152604482015290519081900360640190fd5b61040f82610395565b156103b057600160a060020a038216600090815260026020526040812055919050565b600160a060020a031660009081526002602052604090208054600190910154909156006163636573732064656e69656400000000000000000000000000000000000000a165627a7a72305820ec50ffc9039fd5756e7d11777a9c4e28d11ae4d0c225761d0602124fc39507b700296163636573732064656e69656400000000000000000000000000000000000000a165627a7a72305820a6113f0da789bee7c1d9b597f0d44cce27a0aa7561643b360fdbe9e71aa2372b0029608060405260008054600160a060020a031916331790556104a1806100256000396000f3006080604052600436106100825763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166320987e64811461008757806341b2121c146100bf57806344013585146100e6578063949d225d1461010a578063cee2a9cf14610131578063d597d06f14610152578063dbcbaca414610173575b600080fd5b34801561009357600080fd5b506100ab600160a060020a03600435166024356101ad565b604080519115158252519081900360200190f35b3480156100cb57600080fd5b506100ab600160a060020a036004351660243560443561024d565b3480156100f257600080fd5b506100ab600160a060020a03600435166024356102f0565b34801561011657600080fd5b5061011f61038f565b60408051918252519081900360200190f35b34801561013d57600080fd5b506100ab600160a060020a0360043516610395565b34801561015e57600080fd5b506100ab600160a060020a03600435166103b5565b34801561017f57600080fd5b50610194600160a060020a0360043516610432565b6040805192835260208301919091528051918290030190f35b60008054600160a060020a031633146101fe576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610456833981519152604482015290519081900360640190fd5b600160a060020a038316600090815260026020526040902054151561022557506000610247565b50600160a060020a038216600090815260026020526040902080548201905560015b92915050565b600080548190600160a060020a031633146102a0576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610456833981519152604482015290519081900360640190fd5b50600160a060020a038416600090815260026020526040902080541515806102c6575083155b156102d457600091506102e8565b838155600180820184905580548101815591505b509392505050565b60008054600160a060020a03163314610341576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610456833981519152604482015290519081900360640190fd5b600160a060020a038316600090815260026020526040902054151561036857506000610247565b50600160a060020a0382166000908152600260205260409020600190810182905592915050565b60015481565b600160a060020a038116600090815260026020526040812054115b919050565b60008054600160a060020a03163314610406576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610456833981519152604482015290519081900360640190fd5b61040f82610395565b156103b057600160a060020a038216600090815260026020526040812055919050565b600160a060020a031660009081526002602052604090208054600190910154909156006163636573732064656e69656400000000000000000000000000000000000000a165627a7a72305820ec50ffc9039fd5756e7d11777a9c4e28d11ae4d0c225761d0602124fc39507b70029

Deployed Bytecode

0x6080604052600436106101275763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306127a11811461018657806315aa6833146101db5780631686531a146101fc578063399ae7241461022d5780633d7ac9f81461025157806362d2c55514610278578063653c31741461028d57806373ad468a146102a2578063900334b1146102b757806390b0636f146102d85780639396df32146102ed57806395a23c3a1461031b578063984d4a93146103305780639ec6e05414610351578063b8fde2a414610366578063cb192f2c1461037b578063d50030ad1461039c578063d82fa3f1146103b1578063dbcbaca4146103c5578063eafecc7a14610406578063ecbdbb321461041b578063fc7c41af14610430575b61013034610445565b156101425761013d61044d565b610184565b61018461017f6000368080601f0160208091040260200160405190810160405280939291908181526020018383808284375061069d945050505050565b6106a4565b005b34801561019257600080fd5b506040805160206004803580820135838102808601850190965280855261018495369593946024949385019291829185019084908082843750949750610ff39650505050505050565b3480156101e757600080fd5b50610184600160a060020a0360043516611057565b34801561020857600080fd5b5061021161113e565b60408051600160a060020a039092168252519081900360200190f35b34801561023957600080fd5b50610184600160a060020a036004351660243561114d565b34801561025d57600080fd5b506102666112b2565b60408051918252519081900360200190f35b34801561028457600080fd5b506102116112bd565b34801561029957600080fd5b506102666112cc565b3480156102ae57600080fd5b5061026661135c565b3480156102c357600080fd5b50610266600160a060020a036004351661136b565b3480156102e457600080fd5b5061026661137c565b3480156102f957600080fd5b5061030261138d565b6040805192835260208301919091528051918290030190f35b34801561032757600080fd5b50610302611397565b34801561033c57600080fd5b50610184600160a060020a03600435166113a1565b34801561035d57600080fd5b50610266611432565b34801561037257600080fd5b50610302611438565b34801561038757600080fd5b50610184600160a060020a036004351661145d565b3480156103a857600080fd5b5061018461044d565b610184600160a060020a03600435166106a4565b3480156103d157600080fd5b506103e6600160a060020a03600435166114ee565b604080519384526020840192909252151582820152519081900360600190f35b34801561041257600080fd5b506102666115b4565b34801561042757600080fd5b506102666115ba565b34801561043c57600080fd5b506101846115bf565b80155b919050565b60006104583361164c565b15156104ae576040805160e560020a62461bcd02815260206004820152601860248201527f6f6e6c792065787465726e616c6c79206163636f756e74730000000000000000604482015290519081900360640190fd5b620151806104cf6104be33611658565b60200151429063ffffffff61171c16565b116104d957600080fd5b6104e23361173a565b90506104ed816117ec565b1515610543576040805160e560020a62461bcd02815260206004820152601c60248201527f63616e6e6f7420746f20706179207a65726f206469766964656e647300000000604482015290519081900360640190fd5b600b54604080517f440135850000000000000000000000000000000000000000000000000000000081523360048201524260248201529051600160a060020a03909216916344013585916044808201926020929091908290030181600087803b1580156105af57600080fd5b505af11580156105c3573d6000803e3d6000fd5b505050506040513d60208110156105d957600080fd5b505115156105e357fe5b303181106105f7576105f36117f1565b5030315b604051339082156108fc029083906000818181858888f19350505050158015610624573d6000803e3d6000fd5b506040805142815260208101839052815133927f6710e0cad56444677ac916513b384a4acc6501cfb5219f59657ad4ddffef9d60928290030190a2604080514281523031602082015281517f32367fddaa1baa1c6a0fc5c3e8284df724bacc7b50e847c32c9f9765f9f96137929181900390910190a150565b6014015190565b600080808080808080806106b73361164c565b151561070d576040805160e560020a62461bcd02815260206004820152601860248201527f6f6e6c792065787465726e616c6c79206163636f756e74730000000000000000604482015290519081900360640190fd5b349850889750662386f26fc10000881015610798576040805160e560020a62461bcd02815260206004820152602260248201527f696e766573746d656e74206d757374206265203e3d206d696e496e7665736d6560448201527f6e74000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6a1b8b8c9e000e82a4800000303111156107fc576040805160e560020a62461bcd02815260206004820152601e60248201527f74686520636f6e7472616374206574682062616c616e6365206c696d69740000604482015290519081900360640190fd5b61080660016118e1565b1561088e57610815600161190c565b965061082087611986565b61082a89886119dd565b985061083d60018a63ffffffff6119f516565b151561084557fe5b61084f6001611a72565b60408051428152602081018c9052815133927f21cd51cc98547f9914bc0b314a40e645408acad21d1289eecb4dfb534fda7cfc928290030190a36108c6565b6108986005611a9c565b156108c6576108ae60053363ffffffff611aa516565b95506108b986611986565b6108c389876119dd565b98505b8888111561094e576040518989039550339086156108fc029087906000818181858888f19350505050158015610900573d6000803e3d6000fd5b50604080514281523460208201528082018b90526060810187905290518a995033917faac472d912a7451062b64c942775db41d65cce271603099e1c4760e072050951919081900360800190a25b600c54600160a060020a03166108fc61096e60288b63ffffffff611c3a16565b6040518115909202916000818181858888f15050600d54600160a060020a031692506108fc91506109a8905060268b63ffffffff611c3a16565b6040518115909202916000818181858888f15050600b54604080517fcee2a9cf0000000000000000000000000000000000000000000000000000000081523360048201529051600160a060020a03909216945063cee2a9cf935060248082019350602092918290030181600087803b158015610a2357600080fd5b505af1158015610a37573d6000803e3d6000fd5b505050506040513d6020811015610a4d57600080fd5b50519350610a63600160a060020a038b16611c65565b8015610a6d575083155b8015610a895750336000908152600a602052604090205460ff16155b8015610a9e5750600160a060020a038a163314155b8015610b3a5750600b54604080517fcee2a9cf000000000000000000000000000000000000000000000000000000008152600160a060020a038d811660048301529151919092169163cee2a9cf9160248083019260209291908290030181600087803b158015610b0d57600080fd5b505af1158015610b21573d6000803e3d6000fd5b505050506040513d6020811015610b3757600080fd5b50515b15610cd657336000908152600a6020908152604091829020805460ff191660011790558151808301909252602254825260235490820152610b81908a63ffffffff611c7316565b9250678ac7230489e80000891115610bbd576040805180820190915260245481526025546020820152610bba908a63ffffffff611c7316565b92505b6040805180820190915260208054825260215490820152610be4908a63ffffffff611c7316565b600b54604080517f20987e64000000000000000000000000000000000000000000000000000000008152600160a060020a038e811660048301526024820188905291519395509116916320987e64916044808201926020929091908290030181600087803b158015610c5557600080fd5b505af1158015610c69573d6000803e3d6000fd5b505050506040513d6020811015610c7f57600080fd5b50511515610c8957fe5b604080514281526020810184905281519a84019a600160a060020a038d169233927fc04fb14bddd876003a335c37b1fe6524ac1dbf74eb64dd08cd085fba4b97d592929081900390910190a35b610cdf3361173a565b9050838015610cf25750610cf2816117ec565b15610d3657604080514281526020810183905281519a83019a33927f149822e3a65d38c9b6f40e835864c61ef5ca0866219afc2db638e3f85ae78866928290030190a25b8315610e8257600b54604080517f20987e64000000000000000000000000000000000000000000000000000000008152336004820152602481018c90529051600160a060020a03909216916320987e64916044808201926020929091908290030181600087803b158015610da957600080fd5b505af1158015610dbd573d6000803e3d6000fd5b505050506040513d6020811015610dd357600080fd5b50511515610ddd57fe5b600b54604080517f440135850000000000000000000000000000000000000000000000000000000081523360048201524260248201529051600160a060020a03909216916344013585916044808201926020929091908290030181600087803b158015610e4957600080fd5b505af1158015610e5d573d6000803e3d6000fd5b505050506040513d6020811015610e7357600080fd5b50511515610e7d57fe5b610f60565b600b54604080517f41b2121c000000000000000000000000000000000000000000000000000000008152336004820152602481018c90524260448201529051600160a060020a03909216916341b2121c916064808201926020929091908290030181600087803b158015610ef557600080fd5b505af1158015610f09573d6000803e3d6000fd5b505050506040513d6020811015610f1f57600080fd5b50511515610f2957fe5b60408051428152905133917fc8616cf56c542aa2540734215ee474180fc3b9cc7c2fad288000504632cacf18919081900360200190a25b600e8054600101905560408051428152602081018b90528082018a9052905133917fd5a986028ae9e04f72859f7d3c1d8ae8b649c26be5b99d4c2d98ca4a19a0502e919081900360600190a2604080514281523031602082015281517f32367fddaa1baa1c6a0fc5c3e8284df724bacc7b50e847c32c9f9765f9f96137929181900390910190a150505050505050505050565b600054600160a060020a03163314611043576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020612446833981519152604482015290519081900360640190fd5b61105460058263ffffffff611c9616565b50565b600054600160a060020a031633146110a7576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020612446833981519152604482015290519081900360640190fd5b600b54604080517fd597d06f000000000000000000000000000000000000000000000000000000008152600160a060020a0384811660048301529151919092169163d597d06f9160248083019260209291908290030181600087803b15801561110f57600080fd5b505af1158015611123573d6000803e3d6000fd5b505050506040513d602081101561113957600080fd5b505050565b600c54600160a060020a031681565b600054600160a060020a0316331461119d576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020612446833981519152604482015290519081900360640190fd5b600180820190819055681b1ae4d6e2ef50000060028190556003805460ff1916601517908190556040805142815260208101949094528381019290925260ff166060830152517f16171a4e996b33ebb6320397242a4168f60c16e87fbd8b58f1744d68c4179caf9181900360800190a160058054600160a060020a0380851673ffffffffffffffffffffffffffffffffffffffff199283161792839055600b546006805490931690821617918290556802b5e3af16b1880000600781905560088590556040805142815294831660208601529290911683830152606083015260808201839052517f7e13d111fea1199cb6fb21cb38766240cfad970317820e8e5713da7a708285309181900360a00190a15050565b662386f26fc1000081565b600d54600160a060020a031681565b600b54604080517f949d225d0000000000000000000000000000000000000000000000000000000081529051600092600160a060020a03169163949d225d91600480830192602092919082900301818787803b15801561132b57600080fd5b505af115801561133f573d6000803e3d6000fd5b505050506040513d602081101561135557600080fd5b5051905090565b6a1b8b8c9e000e82a480000081565b60006113768261173a565b92915050565b6000611388600161190c565b905090565b6028546029549091565b6026546027549091565b600054600160a060020a031633146113f1576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020612446833981519152604482015290519081900360640190fd5b61140381600160a060020a0316611cfa565b600d805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600e5481565b600080611443611f58565b61144b611d5a565b80516020909101519094909350915050565b600054600160a060020a031633146114ad576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020612446833981519152604482015290519081900360640190fd5b6114bf81600160a060020a0316611cfa565b600c805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600b54604080517fdbcbaca4000000000000000000000000000000000000000000000000000000008152600160a060020a038481166004830152825160009485948594939091169263dbcbaca4926024808301939282900301818787803b15801561155857600080fd5b505af115801561156c573d6000803e3d6000fd5b505050506040513d604081101561158257600080fd5b508051602091820151600160a060020a039096166000908152600a909252604090912054909560ff9091169350915050565b600f5481565b303190565b600054600160a060020a0316331461160f576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020612446833981519152604482015290519081900360640190fd5b611617611ec4565b6040805142815290517f5189687a7ec9d4aebe2f548f952ffbbad19e4cd545c4a05b5e2369cd272dd5519181900360200190a1565b803b8015905b50919050565b611660611f58565b600b54604080517fdbcbaca4000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528251600094859492169263dbcbaca492602480830193919282900301818787803b1580156116c757600080fd5b505af11580156116db573d6000803e3d6000fd5b505050506040513d60408110156116f157600080fd5b50805160209182015160408051808201909152828152928301819052919450925090505b5050919050565b6000808383111561172c57600080fd5b5050808203805b5092915050565b6000611744611f58565b61174c611f58565b61175584611658565b91506117648260000151610445565b80611786575061025861178483602001514261171c90919063ffffffff16565b105b156117945760009250611715565b61179c611d5a565b82519091506090906117b590839063ffffffff611c7316565b6102586117cf85602001514261171c90919063ffffffff16565b8115156117d857fe5b04028115156117e357fe5b04949350505050565b151590565b6117f9611f6f565b604051809103906000f080158015611815573d6000803e3d6000fd5b50600b805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556000600e5542600f81905561185a90600190611ee3565b6001546002546003546040805142815260208101949094528381019290925260ff166060830152517f16171a4e996b33ebb6320397242a4168f60c16e87fbd8b58f1744d68c4179caf9181900360800190a16040805142815290517fc66870ef5f6257a76295d443e9221488043ec691f830f6c6128755c3518e3c759181900360200190a1565b6000806118ed83611a72565b905080158015906119055750600283015460ff168111155b9392505050565b60008061191883611a72565b905080158061192d5750600283015460ff1681115b1561193b5760009150611652565b600183015460ff82166000908152600385016020526040902054106119635760009150611652565b60ff81166000908152600384016020526040902054600184015403915050919050565b801515611054576040805160e560020a62461bcd02815260206004820152601660248201527f72657175697265206e6f74207a65726f2076616c756500000000000000000000604482015290519081900360640190fd5b6000818311156119ee575080611376565b5090919050565b600080611a0184611a72565b9050801580611a165750600284015460ff1681115b15611a245760009150611733565b600184015460ff8216600090815260038601602052604090205484011115611a4f5760009150611733565b60ff16600090815260039390930160205250604090912080549091019055600190565b60004282600001541115611a8857506000610448565b815462015180904203046001019050919050565b60030154421090565b600160a060020a03811660009081526004830160205260408120548190819060ff161515611ad65760009250611c32565b8454604080517f993d3489000000000000000000000000000000000000000000000000000000008152600160a060020a038781166004830152825193169263993d3489926024808401939192918290030181600087803b158015611b3957600080fd5b505af1158015611b4d573d6000803e3d6000fd5b505050506040513d6040811015611b6357600080fd5b50519150811515611b775760009250611c32565b611b858286600201546119dd565b6001860154604080517fdbcbaca4000000000000000000000000000000000000000000000000000000008152600160a060020a03888116600483015282519496509092169263dbcbaca49260248082019392918290030181600087803b158015611bee57600080fd5b505af1158015611c02573d6000803e3d6000fd5b505050506040513d6040811015611c1857600080fd5b50519050818110611c2c5760009250611c32565b80820392505b505092915050565b6000811515611c4b57506000611376565b600183015483548302811515611c5d57fe5b049392505050565b600160a060020a0316151590565b6000811515611c8457506000611376565b602083015183518302811515611c5d57fe5b60005b81518161ffff161015611139576001836004016000848461ffff16815181101515611cc057fe5b602090810291909101810151600160a060020a03168252810191909152604001600020805460ff1916911515919091179055600101611c99565b600160a060020a0381161515611054576040805160e560020a62461bcd02815260206004820152601860248201527f72657175697265206e6f74207a65726f20616464726573730000000000000000604482015290519081900360640190fd5b611d62611f58565b3031681b1ae4d6e2ef500000811015611d8657611d7f6010611f33565b9150611ec0565b80681b1ae4d6e2ef50000011158015611da85750683635c9adc5dea000008111155b15611db757611d7f6012611f33565b80683635c9adc5dea0000011158015611dd9575068878678326eac9000008111155b15611de857611d7f6014611f33565b8068878678326eac90000011158015611e0b575069021e19e0c9bab24000008111155b15611e1a57611d7f6016611f33565b8069021e19e0c9bab240000011158015611e3e575069043c33c19375648000008111155b15611e4d57611d7f6018611f33565b8069043c33c193756480000011158015611e71575069065a4da25d3016c000008111155b15611e8057611d7f601a611f33565b8069065a4da25d3016c0000011158015611ea45750690a968163f0a57b4000008111155b15611eb357611d7f601c611f33565b611ebd601e611f33565b91505b5090565b6000805473ffffffffffffffffffffffffffffffffffffffff19169055565b80825560015b600283015460ff908116908216116111395760ff8116600090815260038401602052604090205415611f2b5760ff811660009081526003840160205260408120555b600101611ee9565b611f3b611f58565b506040805180820190915281548152600190910154602082015290565b604080518082019091526000808252602082015290565b6040516104c680611f80833901905600608060405260008054600160a060020a031916331790556104a1806100256000396000f3006080604052600436106100825763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166320987e64811461008757806341b2121c146100bf57806344013585146100e6578063949d225d1461010a578063cee2a9cf14610131578063d597d06f14610152578063dbcbaca414610173575b600080fd5b34801561009357600080fd5b506100ab600160a060020a03600435166024356101ad565b604080519115158252519081900360200190f35b3480156100cb57600080fd5b506100ab600160a060020a036004351660243560443561024d565b3480156100f257600080fd5b506100ab600160a060020a03600435166024356102f0565b34801561011657600080fd5b5061011f61038f565b60408051918252519081900360200190f35b34801561013d57600080fd5b506100ab600160a060020a0360043516610395565b34801561015e57600080fd5b506100ab600160a060020a03600435166103b5565b34801561017f57600080fd5b50610194600160a060020a0360043516610432565b6040805192835260208301919091528051918290030190f35b60008054600160a060020a031633146101fe576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610456833981519152604482015290519081900360640190fd5b600160a060020a038316600090815260026020526040902054151561022557506000610247565b50600160a060020a038216600090815260026020526040902080548201905560015b92915050565b600080548190600160a060020a031633146102a0576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610456833981519152604482015290519081900360640190fd5b50600160a060020a038416600090815260026020526040902080541515806102c6575083155b156102d457600091506102e8565b838155600180820184905580548101815591505b509392505050565b60008054600160a060020a03163314610341576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610456833981519152604482015290519081900360640190fd5b600160a060020a038316600090815260026020526040902054151561036857506000610247565b50600160a060020a0382166000908152600260205260409020600190810182905592915050565b60015481565b600160a060020a038116600090815260026020526040812054115b919050565b60008054600160a060020a03163314610406576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610456833981519152604482015290519081900360640190fd5b61040f82610395565b156103b057600160a060020a038216600090815260026020526040812055919050565b600160a060020a031660009081526002602052604090208054600190910154909156006163636573732064656e69656400000000000000000000000000000000000000a165627a7a72305820ec50ffc9039fd5756e7d11777a9c4e28d11ae4d0c225761d0602124fc39507b700296163636573732064656e69656400000000000000000000000000000000000000a165627a7a72305820a6113f0da789bee7c1d9b597f0d44cce27a0aa7561643b360fdbe9e71aa2372b0029

Deployed Bytecode Sourcemap

9186:12204:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12758:18;:9;:16;:18::i;:::-;12754:72;;;12787:16;:14;:16::i;:::-;12812:7;;12754:72;12859:30;12868:20;:8;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12868:18:0;;-1:-1:-1;;;;;12868:20:0:i;:::-;12859:8;:30::i;:::-;9186:12204;14187:123;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14187:123:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14187:123:0;;-1:-1:-1;14187:123:0;;-1:-1:-1;;;;;;;14187:123:0;12901:98;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12901:98:0;-1:-1:-1;;;;;12901:98:0;;;;;9897:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9897:33:0;;;;;;;;-1:-1:-1;;;;;9897:33:0;;;;;;;;;;;;;;13095:828;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13095:828:0;-1:-1:-1;;;;;13095:828:0;;;;;;;9795:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9795:45:0;;;;;;;;;;;;;;;;;;;;9935:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9935:28:0;;;;14463:91;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14463:91:0;;;;9846:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9846:45:0;;;;15250:142;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15250:142:0;-1:-1:-1;;;;;15250:142:0;;;;;14316:141;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14316:141:0;;;;14655:176;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14655:176:0;;;;;;;;;;;;;;;;;;;;;;;;;;;14837:161;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14837:161:0;;;;14063:118;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14063:118:0;-1:-1:-1;;;;;14063:118:0;;;;;9968:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9968:29:0;;;;15398:185;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15398:185:0;;;;13929:128;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13929:128:0;-1:-1:-1;;;;;13929:128:0;;;;;15589:750;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15589:750:0;;;;16345:3015;;-1:-1:-1;;;;;16345:3015:0;;;;;15004:240;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;15004:240:0;-1:-1:-1;;;;;15004:240:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10002:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10002:23:0;;;;14560:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14560:89:0;;;;13005:84;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13005:84:0;;;;934:78;1000:6;;934:78;;;;:::o;15589:750::-;15818:14;12490:26;:10;:24;:26::i;:::-;12482:63;;;;;;;-1:-1:-1;;;;;12482:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15800:8;15750:47;15758:26;15773:10;15758:14;:26::i;:::-;:38;;;15750:3;;:47;:7;:47;:::i;:::-;:58;15742:67;;;;;;15835:25;15849:10;15835:13;:25::i;:::-;15818:42;;15876:19;:9;:17;:19::i;:::-;15867:61;;;;;;;-1:-1:-1;;;;;15867:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15986:11;;:43;;;;;;16013:10;15986:43;;;;16025:3;15986:43;;;;;;-1:-1:-1;;;;;15986:11:0;;;;:26;;:43;;;;;;;;;;;;;;;:11;;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;15986:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15986:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15986:43:0;15979:51;;;;;;16103:4;16095:21;:34;-1:-1:-1;16091:109:0;;16140:10;:8;:10::i;:::-;-1:-1:-1;16179:4:0;16171:21;16091:109;16248:30;;:10;;:30;;;;;16268:9;;16248:30;;;;16268:9;16248:10;:30;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;16290:43:0;;;16318:3;16290:43;;;;;;;;;;16306:10;;16290:43;;;;;;;;12391:45;;;12409:3;12391:45;;12422:4;12414:21;12391:45;;;;;;;;;;;;;;;;;15589:750;:::o;2421:143::-;2533:4;2522:16;2516:23;;2421:143::o;16345:3015::-;16438:15;;;;;;;;;12490:26;:10;:24;:26::i;:::-;12482:63;;;;;;;-1:-1:-1;;;;;12482:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16456:9;;-1:-1:-1;16456:9:0;;-1:-1:-1;9831:9:0;16517:26;;;16509:73;;;;;-1:-1:-1;;;;;16509:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9880:11;16605:4;16597:21;:35;;16589:78;;;;;-1:-1:-1;;;;;16589:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16680:16;:5;:14;:16::i;:::-;16676:604;;;16776:26;:5;:24;:26::i;:::-;16756:46;;16811:29;:12;:27;:29::i;:::-;16862:34;16871:10;16883:12;16862:8;:34::i;:::-;16849:47;-1:-1:-1;16912:32:0;:5;16849:47;16912:32;:20;:32;:::i;:::-;16905:40;;;;;;17005:15;:5;:13;:15::i;:::-;16959:62;;;16988:3;16959:62;;;;;;;;;;16976:10;;16959:62;;;;;;;;16676:604;;;17047:22;:11;:20;:22::i;:::-;17043:237;;;17140:40;:11;17169:10;17140:40;:28;:40;:::i;:::-;17121:59;;17189:28;:11;:26;:28::i;:::-;17239:33;17248:10;17260:11;17239:8;:33::i;:::-;17226:46;;17043:237;17347:10;17331:13;:26;17327:242;;;17417:27;;17382:26;;;;-1:-1:-1;17417:10:0;;:27;;;;;17382:26;;17417:27;;;;17382:26;17417:10;:27;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;17493:68:0;;;17526:3;17493:68;;17531:9;17493:68;;;;;;;;;;;;;;;;;;17469:10;;-1:-1:-1;17514:10:0;;17493:68;;;;;;;;;;17327:242;17596:18;;-1:-1:-1;;;;;17596:18:0;:64;17620:39;:20;17645:13;17620:39;:24;:39;:::i;:::-;17596:64;;;;;;;;;;;;;;;;-1:-1:-1;;17667:13:0;;-1:-1:-1;;;;;17667:13:0;;-1:-1:-1;17667:54:0;;-1:-1:-1;17686:34:0;;-1:-1:-1;17686:15:0;17706:13;17686:34;:19;:34;:::i;:::-;17667:54;;;;;;;;;;;;;;;;-1:-1:-1;;17754:11:0;;:34;;;;;;17777:10;17754:34;;;;;;-1:-1:-1;;;;;17754:11:0;;;;-1:-1:-1;17754:22:0;;-1:-1:-1;17754:34:0;;;;;-1:-1:-1;17754:34:0;;;;;;;;:11;;:34;;;5:2:-1;;;;30:1;27;20:12;5:2;17754:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17754:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17754:34:0;;-1:-1:-1;17861:22:0;-1:-1:-1;;;;;17861:20:0;;;:22::i;:::-;:43;;;;;17888:16;17887:17;17861:43;:71;;;;-1:-1:-1;17921:10:0;17909:23;;;;:11;:23;;;;;;;;17908:24;17861:71;:108;;;;-1:-1:-1;;;;;;17943:26:0;;17959:10;17943:26;;17861:108;:148;;;;-1:-1:-1;17973:11:0;;:36;;;;;;-1:-1:-1;;;;;17973:36:0;;;;;;;;;:11;;;;;:22;;:36;;;;;;;;;;;;;;:11;;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;17973:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17973:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17973:36:0;17861:148;17857:783;;;18040:10;18028:23;;;;:11;:23;;;;;;;;;:30;;-1:-1:-1;;18028:30:0;18054:4;18028:30;;;18158:23;;;;;;;;:18;:23;;;;;;;;;:35;;18182:10;18158:35;:23;:35;:::i;:::-;18137:56;;18219:8;18206:10;:21;18202:102;;;18256:26;;;;;;;;;:21;:26;;;;;;;;;:38;;18283:10;18256:38;:26;:38;:::i;:::-;18240:54;;18202:102;18340:22;;;;;;;;;:17;:22;;;;;;;;;;:34;;18363:10;18340:34;:22;:34;:::i;:::-;18390:11;;:54;;;;;;-1:-1:-1;;;;;18390:54:0;;;;;;;;;;;;;;;18320;;-1:-1:-1;18390:11:0;;;:25;;:54;;;;;;;;;;;;;;;:11;;:54;;;5:2:-1;;;;30:1;27;20:12;5:2;18390:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18390:54:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18390:54:0;18383:62;;;;;;18573:59;;;18614:3;18573:59;;;;;;;;;;18476:26;;;;-1:-1:-1;;;;;18573:59:0;;;18588:10;;18573:59;;;;;;;;;;;17857:783;18720:25;18734:10;18720:13;:25::i;:::-;18703:42;;18756:16;:39;;;;;18776:19;:9;:17;:19::i;:::-;18752:147;;;18843:48;;;18876:3;18843:48;;;;;;;;;;18806:23;;;;18864:10;;18843:48;;;;;;;;18752:147;18911:16;18907:349;;;18980:11;;:49;;;;;;19006:10;18980:49;;;;;;;;;;;;-1:-1:-1;;;;;18980:11:0;;;;:25;;:49;;;;;;;;;;;;;;;:11;;:49;;;5:2:-1;;;;30:1;27;20:12;5:2;18980:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18980:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18980:49:0;18973:57;;;;;;19046:11;;:43;;;;;;19073:10;19046:43;;;;19085:3;19046:43;;;;;;-1:-1:-1;;;;;19046:11:0;;;;:26;;:43;;;;;;;;;;;;;;;:11;;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;19046:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19046:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19046:43:0;19039:51;;;;;;18907:349;;;19150:11;;:52;;;;;;19174:10;19150:52;;;;;;;;;;19198:3;19150:52;;;;;;-1:-1:-1;;;;;19150:11:0;;;;:23;;:52;;;;;;;;;;;;;;;:11;;:52;;;5:2:-1;;;;30:1;27;20:12;5:2;19150:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19150:52:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19150:52:0;19143:60;;;;;;19217:31;;;19244:3;19217:31;;;;19232:10;;19217:31;;;;;;;;;;18907:349;19264:17;:19;;;;;;19295:59;;;19323:3;19295:59;;;;;;;;;;;;;;;;19311:10;;19295:59;;;;;;;;;;12391:45;;;12409:3;12391:45;;12422:4;12414:21;12391:45;;;;;;;;;;;;;;;;;16345:3015;;;;;;;;;;:::o;14187:123::-;4352:5;;-1:-1:-1;;;;;4352:5:0;4338:10;:19;4330:45;;;;;-1:-1:-1;;;;;4330:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4330:45:0;;;;;;;;;;;;;;;14269:35;:11;14298:5;14269:35;:28;:35;:::i;:::-;14187:123;:::o;12901:98::-;4352:5;;-1:-1:-1;;;;;4352:5:0;4338:10;:19;4330:45;;;;;-1:-1:-1;;;;;4330:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4330:45:0;;;;;;;;;;;;;;;12966:11;;:27;;;;;;-1:-1:-1;;;;;12966:27:0;;;;;;;;;:11;;;;;:21;;:27;;;;;;;;;;;;;;:11;;:27;;;5:2:-1;;;;30:1;27;20:12;5:2;12966:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12966:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;12901:98:0:o;9897:33::-;;;-1:-1:-1;;;;;9897:33:0;;:::o;13095:828::-;4352:5;;-1:-1:-1;;;;;4352:5:0;4338:10;:19;4330:45;;;;;-1:-1:-1;;;;;4330:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4330:45:0;;;;;;;;;;;;;;;13246:1;13234:13;;;13211:36;;;;13286:9;13254:29;:41;;;13302:18;:23;;-1:-1:-1;;13302:23:0;13323:2;13302:23;;;;;13337:124;;;13356:3;13337:124;;;;;;;;;;;;;;;;13302:23;13436:18;13337:124;;;;;;;;;;;;;;13502:11;:54;;-1:-1:-1;;;;;13502:54:0;;;-1:-1:-1;;13502:54:0;;;;;;;;13609:11;;13563:23;:59;;;;;13609:11;;;13563:59;;;;;13665:8;13629:33;:44;;;13680:24;:36;;;13728:189;;;13746:3;13728:189;;13767:23;;;13728:189;;;;13809:23;;;;13728:189;;;;;;;;;;;;;;;;;;;;;;;;13095:828;;:::o;9795:45::-;9831:9;9795:45;:::o;9935:28::-;;;-1:-1:-1;;;;;9935:28:0;;:::o;14463:91::-;14530:11;;:18;;;;;;;;14510:4;;-1:-1:-1;;;;;14530:11:0;;:16;;:18;;;;;;;;;;;;;;14510:4;14530:11;:18;;;5:2:-1;;;;30:1;27;20:12;5:2;14530:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14530:18:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14530:18:0;;-1:-1:-1;14463:91:0;:::o;9846:45::-;9880:11;9846:45;:::o;15250:142::-;15324:14;15359:27;15373:12;15359:13;:27::i;:::-;15347:39;15250:142;-1:-1:-1;;15250:142:0:o;14316:141::-;14388:15;14425:26;:5;:24;:26::i;:::-;14412:39;;14316:141;:::o;14655:176::-;14774:20;:24;14800;;14774;;14655:176::o;14837:161::-;14951:15;:19;14972;;14951;;14837:161::o;14063:118::-;4352:5;;-1:-1:-1;;;;;4352:5:0;4338:10;:19;4330:45;;;;;-1:-1:-1;;;;;4330:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4330:45:0;;;;;;;;;;;;;;;14127:21;:4;-1:-1:-1;;;;;14127:19:0;;:21::i;:::-;14155:13;:20;;-1:-1:-1;;14155:20:0;-1:-1:-1;;;;;14155:20:0;;;;;;;;;;14063:118::o;9968:29::-;;;;:::o;15398:185::-;15447:14;15463:16;15488:24;;:::i;:::-;15515:14;:12;:14::i;:::-;15564:5;;15571;;;;;15564;;15571;;-1:-1:-1;15398:185:0;-1:-1:-1;;15398:185:0:o;13929:128::-;4352:5;;-1:-1:-1;;;;;4352:5:0;4338:10;:19;4330:45;;;;;-1:-1:-1;;;;;4330:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4330:45:0;;;;;;;;;;;;;;;13998:21;:4;-1:-1:-1;;;;;13998:19:0;;:21::i;:::-;14026:18;:25;;-1:-1:-1;;14026:25:0;-1:-1:-1;;;;;14026:25:0;;;;;;;;;;13929:128::o;15004:240::-;15155:11;;:38;;;;;;-1:-1:-1;;;;;15155:38:0;;;;;;;;;15068:15;;;;;;15155:11;;;;;:24;;:38;;;;;;;;;;;15068:15;15155:11;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;15155:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15155:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15155:38:0;;;;;;;-1:-1:-1;;;;;15213:25:0;;;;;;;:11;:25;;;15155:38;15213:25;;;;15155:38;;15213:25;;;;;-1:-1:-1;15004:240:0;-1:-1:-1;;15004:240:0:o;10002:23::-;;;;:::o;14560:89::-;14630:4;14622:21;14560:89;:::o;13005:84::-;4352:5;;-1:-1:-1;;;;;4352:5:0;4338:10;:19;4330:45;;;;;-1:-1:-1;;;;;4330:45:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4330:45:0;;;;;;;;;;;;;;;13049:8;:6;:8::i;:::-;13069:14;;;13079:3;13069:14;;;;;;;;;;;;;13005:84::o;2570:160::-;2681:17;;2713:11;;;2570:160;;;;;:::o;19366:255::-;19434:25;;:::i;:::-;19513:11;;:38;;;;;;-1:-1:-1;;;;;19513:38:0;;;;;;;;;19476:15;;;;19513:11;;;:24;;:38;;;;;;;;;;;;19476:15;19513:11;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;19513:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19513:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19513:38:0;;;;;;;;19565:50;;;;;;;;;;;;;;;;;;;-1:-1:-1;19513:38:0;-1:-1:-1;19513:38:0;-1:-1:-1;19366:255:0;;;;;;:::o;3636:142::-;3696:7;;3720:8;;;;3712:17;;;;;;-1:-1:-1;;3748:7:0;;;;3636:142;;;;;;:::o;19627:573::-;19694:14;19717:41;;:::i;:::-;20054:24;;:::i;:::-;19761:28;19776:12;19761:14;:28::i;:::-;19717:72;;19842:28;:8;:19;;;:26;:28::i;:::-;:74;;;;19906:10;19874:29;19882:8;:20;;;19874:3;:7;;:29;;;;:::i;:::-;:42;19842:74;19838:105;;;19934:1;19927:8;;;;19838:105;20081:14;:12;:14::i;:::-;20168:19;;20054:41;;-1:-1:-1;20191:3:0;;20161:27;;20054:41;;20161:27;:6;:27;:::i;:::-;20147:10;20115:29;20123:8;:20;;;20115:3;:7;;:29;;;;:::i;:::-;:42;;;;;;;;20114:74;:80;;;;;;;;;19627:573;-1:-1:-1;;;;19627:573:0:o;1018:79::-;1085:6;;;1018:79::o;21104:283::-;21153:22;;:::i;:::-;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;21139:11:0;:36;;-1:-1:-1;;21139:36:0;-1:-1:-1;;;;;21139:36:0;;;;;;;;;;-1:-1:-1;21182:17:0;:21;21224:3;21210:11;:17;;;21234:18;;-1:-1:-1;;21234:13:0;:18::i;:::-;21281:5;:20;21303:29;;21334:18;;21264:89;;;21275:3;21264:89;;;;;;;;;;;;;;;;21334:18;;21264:89;;;;;;;;;;;;;;21365:16;;;21377:3;21365:16;;;;;;;;;;;;;21104:283::o;8082:167::-;8157:4;8170:8;8181:13;:3;:11;:13::i;:::-;8170:24;-1:-1:-1;8208:8:0;;;;;:35;;-1:-1:-1;8227:16:0;;;;;;8220:23;;;8208:35;8201:42;8082:167;-1:-1:-1;;;8082:167:0:o;7693:383::-;7778:4;7791:8;7802:13;:3;:11;:13::i;:::-;7791:24;-1:-1:-1;7826:8:0;;;:34;;-1:-1:-1;7844:16:0;;;;;;7838:22;;7826:34;7822:65;;;7878:1;7871:8;;;;7822:65;7937:27;;;;7897:36;;;;;;;:24;;;:36;;;;;;:67;7893:98;;7982:1;7975:8;;;;7893:98;8034:36;;;;;;;:24;;;:36;;;;;;8004:27;;;;:66;;-1:-1:-1;7693:383:0;;;;:::o;616:104::-;679:8;;;671:43;;;;;-1:-1:-1;;;;;671:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;343:120;394:4;415:1;411;:5;407:36;;;-1:-1:-1;434:1:0;427:8;;407:36;-1:-1:-1;456:1:0;;343:120;-1:-1:-1;343:120:0:o;8255:406::-;8348:4;8361:8;8372:13;:3;:11;:13::i;:::-;8361:24;-1:-1:-1;8396:8:0;;;:34;;-1:-1:-1;8414:16:0;;;;;;8408:22;;8396:34;8392:69;;;8448:5;8441:12;;;;8392:69;8523:27;;;;8471:36;;;;;;;:24;;;:36;;;;;;:49;;:79;8467:114;;;8568:5;8561:12;;;;8467:114;8587:36;;;;;;:24;;;;;:36;;-1:-1:-1;8587:36:0;;;;:50;;;;;;;-1:-1:-1;;8255:406:0:o;8973:206::-;9047:8;9089:3;9068;:18;;;:24;9064:55;;;-1:-1:-1;9110:1:0;9103:8;;9064:55;9138:18;;9160:8;;9132:3;:24;9131:37;9171:1;9131:41;9125:47;;8973:206;;;:::o;5055:115::-;5143:15;;;5161:3;-1:-1:-1;;5055:115:0:o;5176:575::-;-1:-1:-1;;;;;5292:26:0;;5274:4;5292:26;;;:12;;;:26;;;;;;5274:4;;;;5292:26;;5291:27;5287:58;;;5336:1;5329:8;;;;5287:58;5378:14;;:46;;;;;;-1:-1:-1;;;;;5378:46:0;;;;;;;;;:14;;;:32;;:46;;;;;;;;;;;;;:14;;:46;;;5:2:-1;;;;30:1;27;20:12;5:2;5378:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5378:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5378:46:0;;-1:-1:-1;5435:18:0;;5431:49;;;5471:1;5464:8;;;;5431:49;5502;5511:13;5526:2;:24;;;5502:8;:49::i;:::-;5586:14;;;;:41;;;;;;-1:-1:-1;;;;;5586:41:0;;;;;;;;;5486:65;;-1:-1:-1;5586:14:0;;;;:27;;:41;;;;;;;;;;;;:14;;:41;;;5:2:-1;;;;30:1;27;20:12;5:2;5586:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5586:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5586:41:0;;-1:-1:-1;5644:31:0;;;5640:62;;5693:1;5686:8;;;;5640:62;5731:14;5717:13;:28;5710:35;;5176:575;;;;;;;:::o;1186:145::-;1249:4;1266:6;;1262:37;;;-1:-1:-1;1290:1:0;1283:8;;1262:37;1320:5;;;;1314;;1312:7;;:13;;;;;;;;;1186:145;-1:-1:-1;;;1186:145:0:o;726:100::-;-1:-1:-1;;;;;801:18:0;;799:21;;726:100::o;1860:145::-;1923:4;1940:6;;1936:37;;;-1:-1:-1;1964:1:0;1957:8;;1936:37;1994:5;;;;1988;;1986:7;;:13;;;;;;5757:176;5849:8;5844:84;5863:5;:12;5859:1;:16;;;5844:84;;;5916:4;5891:2;:12;;:22;5904:5;5910:1;5904:8;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5891:22:0;;;;;;;;;;;-1:-1:-1;5891:22:0;:29;;-1:-1:-1;;5891:29:0;;;;;;;;;;-1:-1:-1;5877:3:0;5844:84;;490:120;-1:-1:-1;;;;;557:18:0;;;;549:55;;;;;-1:-1:-1;;;;;549:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;20206:892;20252:24;;:::i;:::-;20308:4;20300:21;20344:9;20334:19;;20330:762;;;20369:22;:11;:20;:22::i;:::-;20365:26;;20330:762;;;20424:7;20411:9;:20;;:45;;;;;20446:10;20435:7;:21;;20411:45;20406:686;;;20471:22;:11;:20;:22::i;20406:686::-;20530:7;20516:10;:21;;:46;;;;;20552:10;20541:7;:21;;20516:46;20511:581;;;20577:22;:11;:20;:22::i;20511:581::-;20635:7;20621:10;:21;;:47;;;;;20657:11;20646:7;:22;;20621:47;20616:476;;;20683:22;:11;:20;:22::i;20616:476::-;20741:7;20726:11;:22;;:48;;;;;20763:11;20752:7;:22;;20726:48;20721:371;;;20789:22;:11;:20;:22::i;20721:371::-;20849:7;20834:11;:22;;:48;;;;;20871:11;20860:7;:22;;20834:48;20829:263;;;20897:23;:12;:21;:23::i;20829:263::-;20956:7;20941:11;:22;;:48;;;;;20978:11;20967:7;:22;;20941:48;20936:156;;;21004:23;:12;:21;:23::i;20936:156::-;21057:23;:12;:21;:23::i;:::-;21053:27;;20936:156;20206:892;;:::o;4453:52::-;4494:5;4487:12;;-1:-1:-1;;4487:12:0;;;4453:52::o;8667:300::-;8752:30;;;8822:1;8807:155;8830:16;;;;;;;;8825:21;;;;8807:155;;8866:27;;;;;;;:24;;;:27;;;;;;:32;8862:93;;8918:27;;;;;;;:24;;;:27;;;;;8911:34;8862:93;8848:3;;8807:155;;1721:133;1781:15;;:::i;:::-;-1:-1:-1;1819:29:0;;;;;;;;;1835:5;;1819:29;;1842:5;;;;;1819:29;;;;;1721:133::o;9186:12204::-;;;;;;;;;;-1:-1:-1;9186:12204:0;;;;;;;;:::o;:::-;;;;;;;;;;:::o

Swarm Source

bzzr://ec50ffc9039fd5756e7d11777a9c4e28d11ae4d0c225761d0602124fc39507b7

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  ]
[ 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.