ETH Price: $1,890.18 (-2.02%)
 

Overview

ETH Balance

0.0076160462 ETH

Eth Value

$14.40 (@ $1,890.18/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer146783832022-04-29 9:28:131049 days ago1651224493IN
0x46001AB6...3Ebb39714
0 ETH0.0029927446.03371036
Transfer144240462022-03-20 15:25:541088 days ago1647789954IN
0x46001AB6...3Ebb39714
0.031 ETH0.004667826.65868332
Transfer144240382022-03-20 15:24:131088 days ago1647789853IN
0x46001AB6...3Ebb39714
0.02 ETH0.0005079724.1894073
Transfer73269282019-03-08 6:12:122197 days ago1552025532IN
0x46001AB6...3Ebb39714
0 ETH0.002249929.1
Transfer73269192019-03-08 6:10:172197 days ago1552025417IN
0x46001AB6...3Ebb39714
0 ETH0.0004559.1
Transfer71823152019-02-06 8:12:292227 days ago1549440749IN
0x46001AB6...3Ebb39714
0 ETH0.000248065
Transfer71221512019-01-25 3:46:022239 days ago1548387962IN
0x46001AB6...3Ebb39714
0 ETH0.000248065
Transfer71098082019-01-22 17:14:392241 days ago1548177279IN
0x46001AB6...3Ebb39714
0 ETH0.000148833
Transfer70848722019-01-18 2:53:512246 days ago1547780031IN
0x46001AB6...3Ebb39714
0 ETH0.000248065
Transfer70536552019-01-12 12:40:222251 days ago1547296822IN
0x46001AB6...3Ebb39714
0 ETH0.000248065
Transfer70303622019-01-08 8:45:212256 days ago1546937121IN
0x46001AB6...3Ebb39714
0 ETH0.000132275
Transfer70303592019-01-08 8:44:572256 days ago1546937097IN
0x46001AB6...3Ebb39714
0 ETH0.000248065
Transfer70076012019-01-04 6:54:162260 days ago1546584856IN
0x46001AB6...3Ebb39714
0 ETH0.000248065
Transfer69726572018-12-29 7:27:442266 days ago1546068464IN
0x46001AB6...3Ebb39714
0 ETH0.000248065
Transfer69492522018-12-25 8:32:542270 days ago1545726774IN
0x46001AB6...3Ebb39714
0 ETH0.000248065
Transfer69149252018-12-19 12:39:412275 days ago1545223181IN
0x46001AB6...3Ebb39714
0 ETH0.000248065
Transfer68720152018-12-12 8:54:412283 days ago1544604881IN
0x46001AB6...3Ebb39714
0 ETH0.000248065
Transfer67697652018-11-25 11:27:292300 days ago1543145249IN
0x46001AB6...3Ebb39714
0 ETH0.000248065
Transfer67513852018-11-22 11:28:502303 days ago1542886130IN
0x46001AB6...3Ebb39714
0 ETH0.000248065
Transfer67369372018-11-20 2:12:482305 days ago1542679968IN
0x46001AB6...3Ebb39714
0 ETH0.000248065
Transfer67183282018-11-17 0:50:392308 days ago1542415839IN
0x46001AB6...3Ebb39714
0 ETH0.000248065
Transfer67075122018-11-15 6:42:152310 days ago1542264135IN
0x46001AB6...3Ebb39714
0 ETH0.000248065
Transfer67026482018-11-14 11:31:222311 days ago1542195082IN
0x46001AB6...3Ebb39714
0 ETH0.000148833
Transfer66989362018-11-13 20:50:452311 days ago1542142245IN
0x46001AB6...3Ebb39714
0 ETH0.000148833
Transfer66913162018-11-12 14:58:192312 days ago1542034699IN
0x46001AB6...3Ebb39714
0 ETH0.000248065
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-146783832022-04-29 9:28:131049 days ago1651224493
0x46001AB6...3Ebb39714
0.03627 ETH
-144240462022-03-20 15:25:541088 days ago1647789954
0x46001AB6...3Ebb39714
0.00155 ETH
-144240462022-03-20 15:25:541088 days ago1647789954
0x46001AB6...3Ebb39714
0.00465 ETH
-73269282019-03-08 6:12:122197 days ago1552025532
0x46001AB6...3Ebb39714
 Contract Creation0 ETH
-71823152019-02-06 8:12:292227 days ago1549440749
0x46001AB6...3Ebb39714
0.054 ETH
-71221512019-01-25 3:46:022239 days ago1548387962
0x46001AB6...3Ebb39714
0.0315 ETH
-71098082019-01-22 17:14:392241 days ago1548177279
0x46001AB6...3Ebb39714
0.067671 ETH
-70848722019-01-18 2:53:512246 days ago1547780031
0x46001AB6...3Ebb39714
0.0225 ETH
-70536552019-01-12 12:40:222251 days ago1547296822
0x46001AB6...3Ebb39714
0.018 ETH
-70303592019-01-08 8:44:572256 days ago1546937097
0x46001AB6...3Ebb39714
0.018 ETH
-70076012019-01-04 6:54:162260 days ago1546584856
0x46001AB6...3Ebb39714
0.0225 ETH
-69726572018-12-29 7:27:442266 days ago1546068464
0x46001AB6...3Ebb39714
0.0135 ETH
-69492522018-12-25 8:32:542270 days ago1545726774
0x46001AB6...3Ebb39714
0.0225 ETH
-69149252018-12-19 12:39:412275 days ago1545223181
0x46001AB6...3Ebb39714
0.0315 ETH
-68720152018-12-12 8:54:412283 days ago1544604881
0x46001AB6...3Ebb39714
0.072 ETH
Transfer67697652018-11-25 11:27:292300 days ago1543145249
0x46001AB6...3Ebb39714
0.009 ETH
Transfer67513852018-11-22 11:28:502303 days ago1542886130
0x46001AB6...3Ebb39714
0.009 ETH
Transfer67369372018-11-20 2:12:482305 days ago1542679968
0x46001AB6...3Ebb39714
0.0135 ETH
Transfer67183282018-11-17 0:50:392308 days ago1542415839
0x46001AB6...3Ebb39714
0.0045 ETH
Transfer67075122018-11-15 6:42:152310 days ago1542264135
0x46001AB6...3Ebb39714
0.009 ETH
Transfer67026482018-11-14 11:31:222311 days ago1542195082
0x46001AB6...3Ebb39714
0.0020394 ETH
Transfer66989362018-11-13 20:50:452311 days ago1542142245
0x46001AB6...3Ebb39714
0.00419875 ETH
Transfer66913162018-11-12 14:58:192312 days ago1542034699
0x46001AB6...3Ebb39714
0.0045 ETH
Transfer66860622018-11-11 18:15:252313 days ago1541960125
0x46001AB6...3Ebb39714
0.00339705 ETH
Transfer66860622018-11-11 18:15:252313 days ago1541960125
0x46001AB6...3Ebb39714
0.01019115 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Magic

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-11-10
*/

pragma solidity ^0.4.23;

/**
*
* Investment project for the distribution of cryptocurrency Ethereum
* Web              - http://magic-eth.com/ 
* Youtube          - https://www.youtube.com/channel/UCZ2P-5NMSHdveoK9e_BRUBw/ 
* Email:           - support(at sign)magic-eth.com 
* 
* 
* - Payments from 3% to 6% every 24 hours
* - Lifetime payments
* - Reliability Smart Contract
* - Minimum deposit 0.03 ETH
* - Currency and Payment - Ethereum (ETH)
* - Distribution of deposits:
* - 80% For payments to participants of the Fund
* - 5% INSURANCE FUND
* - 10% Advertising and project development
* - 1% Commission services and transactions
* - 2% Payroll fund
* - 2% Technical support
*    
*
*   ---About the Project
* Intellectual contracts with Blockchain support have opened a new era of secure relationships without intermediaries.
This technology opens up incredible financial opportunities. Our automated investment model
and asset allocation is written in a smart contract, loaded into the Ethereum blockchain and opened for public access on the Internet and in Blockchain. To ensure the complete safety of all our investors and safe investments, full control over the project was transferred from the organizers to the Smart contract - and now no one can influence continuous autonomous functioning of the system.
* 
* ---How to use:
*  1. Send from ETH wallet to the smart contract address
*     any amount from 0.03 ETH.
*  2. Verify your transaction in the history of your application or etherscan.io, specifying the address 
*     of your wallet.
*  3. Get your profit by sending 0 live transactions (every day, every week, at any time, but not more often than once per 24 hours.
*  4. To reinvest, you need to deposit the amount you want to reinvest, and the interest accrued is automatically added to your new deposit.
*  
* RECOMMENDED GAS LIMIT: 200000
* RECOMMENDED GAS PRICE: https://ethgasstation.info/
* You can check the payments on the etherscan.io site, in the "Internal Txns" tab of your wallet.
*
* ---Referral system:
*   Affiliate program has 3 levels: First level - 3%, second level - 2%, third level - 1%.
*
* Attention! It is not allowed to transfer from exchanges, only from your personal wallet ETH, for which you have private keys.
* 
* More information can be found on the website - http://magic-eth.com/ 
*
* Main contract - Magic. Scroll down to find it.
*/ 



contract InvestorsStorage {
  struct investor {
    uint keyIndex;
    uint value;
    uint paymentTime;
    uint refBonus;
  }
  struct itmap {
    mapping(address => investor) data;
    address[] keys;
  }
  itmap private s;
  address private owner;

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

  constructor() public {
    owner = msg.sender;
    s.keys.length++;
  }

  function insert(address addr, uint value) public onlyOwner returns (bool) {
    uint keyIndex = s.data[addr].keyIndex;
    if (keyIndex != 0) return false;
    s.data[addr].value = value;
    keyIndex = s.keys.length++;
    s.data[addr].keyIndex = keyIndex;
    s.keys[keyIndex] = addr;
    return true;
  }

  function investorFullInfo(address addr) public view returns(uint, uint, uint, uint) {
    return (
      s.data[addr].keyIndex,
      s.data[addr].value,
      s.data[addr].paymentTime,
      s.data[addr].refBonus
    );
  }

  function investorBaseInfo(address addr) public view returns(uint, uint, uint) {
    return (
      s.data[addr].value,
      s.data[addr].paymentTime,
      s.data[addr].refBonus
    );
  }

  function investorShortInfo(address addr) public view returns(uint, uint) {
    return (
      s.data[addr].value,
      s.data[addr].refBonus
    );
  }

  function addRefBonus(address addr, uint refBonus) public onlyOwner returns (bool) {
    if (s.data[addr].keyIndex == 0) return false;
    s.data[addr].refBonus += refBonus;
    return true;
  }

  function addValue(address addr, uint value) public onlyOwner returns (bool) {
    if (s.data[addr].keyIndex == 0) return false;
    s.data[addr].value += value;
    return true;
  }

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

  function setRefBonus(address addr, uint refBonus) public onlyOwner returns (bool) {
    if (s.data[addr].keyIndex == 0) return false;
    s.data[addr].refBonus = refBonus;
    return true;
  }

  function keyFromIndex(uint i) public view returns (address) {
    return s.keys[i];
  }

  function contains(address addr) public view returns (bool) {
    return s.data[addr].keyIndex > 0;
  }

  function size() public view returns (uint) {
    return s.keys.length;
  }

  function iterStart() public pure returns (uint) {
    return 1;
  }
}


library SafeMath {
  function mul(uint256 _a, uint256 _b) internal pure returns (uint256) {
    // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (_a == 0) {
      return 0;
    }

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

    return c;
  }

  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;
  }

  function sub(uint256 _a, uint256 _b) internal pure returns (uint256) {
    require(_b <= _a);
    uint256 c = _a - _b;

    return c;
  }

  function add(uint256 _a, uint256 _b) internal pure returns (uint256) {
    uint256 c = _a + _b;
    require(c >= _a);

    return c;
  }

  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0);
    return a % b;
  }
}



library Percent {
  // Solidity automatically throws when dividing by 0
  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);
  }
}


contract Accessibility {
  enum AccessRank { None, Payout, Paymode, Full }
  mapping(address => AccessRank) internal m_admins;
  modifier onlyAdmin(AccessRank  r) {
    require(
      m_admins[msg.sender] == r || m_admins[msg.sender] == AccessRank.Full,
      "access denied"
    );
    _;
  }
  event LogProvideAccess(address indexed whom, uint when,  AccessRank rank);

  constructor() public {
    m_admins[msg.sender] = AccessRank.Full;
    emit LogProvideAccess(msg.sender, now, AccessRank.Full);
  }

  function provideAccess(address addr, AccessRank rank) public onlyAdmin(AccessRank.Full) {
    require(rank <= AccessRank.Full, "invalid access rank");
    require(m_admins[addr] != AccessRank.Full, "cannot change full access rank");
    if (m_admins[addr] != rank) {
      m_admins[addr] = rank;
      emit LogProvideAccess(addr, now, rank);
    }
  }

  function access(address addr) public view returns(AccessRank rank) {
    rank = m_admins[addr];
  }
}


contract PaymentSystem {
  // https://consensys.github.io/smart-contract-best-practices/recommendations/#favor-pull-over-push-for-external-calls
  enum Paymode { Push, Pull }
  struct PaySys {
    uint latestTime;
    uint latestKeyIndex;
    Paymode mode;
  }
  PaySys internal m_paysys;

  modifier atPaymode(Paymode mode) {
    require(m_paysys.mode == mode, "pay mode does not the same");
    _;
  }
  event LogPaymodeChanged(uint when, Paymode indexed mode);

  function paymode() public view returns(Paymode mode) {
    mode = m_paysys.mode;
  }

  function changePaymode(Paymode mode) internal {
    require(mode <= Paymode.Pull, "invalid pay mode");
    if (mode == m_paysys.mode ) return;
    if (mode == Paymode.Pull) require(m_paysys.latestTime != 0, "cannot set pull pay mode if latest time is 0");
    if (mode == Paymode.Push) m_paysys.latestTime = 0;
    m_paysys.mode = mode;
    emit LogPaymodeChanged(now, m_paysys.mode);
  }
}


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

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

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

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


library ToAddress {
  function toAddr(uint source) internal pure returns(address) {
    return address(source);
  }

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


contract Magic is Accessibility, PaymentSystem {
  using Percent for Percent.percent;
  using SafeMath for uint;
  using Zero for *;
  using ToAddress for *;

  // investors storage - iterable map;
  InvestorsStorage private m_investors;
  mapping(address => bool) private m_referrals;
  bool private m_nextWave;

  // automatically generates getters
  address public adminAddr;
  address public payerAddr;
  uint public waveStartup;
  uint public investmentsNum;
  uint public constant minInvesment = 30 finney; // 0.03 eth
  uint public constant maxBalance = 333e5 ether; // 33,300,000 eth
  uint public constant pauseOnNextWave = 168 hours;

    //float percents
    Percent.percent private m_dividendsPercent30 = Percent.percent(30, 1000); // 30/1000*100% = 3%
    Percent.percent private m_dividendsPercent35 = Percent.percent(35, 1000); // 35/1000*100% = 3.5%
    Percent.percent private m_dividendsPercent40 = Percent.percent(40, 1000); // 40/1000*100% = 4%
    Percent.percent private m_dividendsPercent45 = Percent.percent(45, 1000); // 45/1000*100% = 4.5%
    Percent.percent private m_dividendsPercent50 = Percent.percent(50, 1000); // 50/1000*100% = 5%
    Percent.percent private m_dividendsPercent55 = Percent.percent(55, 1000); // 55/1000*100% = 5.5%
    Percent.percent private m_dividendsPercent60 = Percent.percent(60, 1000); // 60/1000*100% = 6%


  Percent.percent private m_adminPercent = Percent.percent(15, 100); // 15/100*100% = 15%
  Percent.percent private m_payerPercent = Percent.percent(5, 100); // 5/100*100% = 5%

  Percent.percent private m_refLvlOnePercent = Percent.percent(3, 100); // 3/100*100% = 3%
  Percent.percent private m_refLvlTwoPercent = Percent.percent(2, 100); // 2/100*100% = 2%
  Percent.percent private m_refLvlThreePercent = Percent.percent(1, 100); // 1/100*100% = 1%


  // more events for easy read from blockchain
  event LogNewInvestor(address indexed addr, uint when, uint value);
  event LogNewInvesment(address indexed addr, uint when, uint value);
  event LogNewReferral(address indexed addr, uint when, uint value);
  event LogPayDividends(address indexed addr, uint when, uint value);
  event LogPayReferrerBonus(address indexed addr, uint when, uint value);
  event LogBalanceChanged(uint when, uint balance);
  event LogAdminAddrChanged(address indexed addr, uint when);
  event LogPayerAddrChanged(address indexed addr, uint when);
  event LogNextWave(uint when);

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

  modifier notOnPause() {
    require(waveStartup+pauseOnNextWave <= now, "pause on next wave not expired");
    _;
  }

  constructor() public {
    adminAddr = msg.sender;
    emit LogAdminAddrChanged(msg.sender, now);

    payerAddr = msg.sender;
    emit LogPayerAddrChanged(msg.sender, now);

    nextWave();
    waveStartup = waveStartup.sub(pauseOnNextWave);
  }

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

    // sender do invest
    address a = msg.data.toAddr();
    address[3] memory refs;
    if (a.notZero()) {
      refs[0] = a;
      doInvest(refs);
    } else {
      doInvest(refs);
    }
  }

  function investorsNumber() public view returns(uint) {
    return m_investors.size()-1;
    // -1 because see InvestorsStorage constructor where keys.length++
  }

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


  function payerPercent() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_payerPercent.num, m_payerPercent.den);
  }
  function dividendsPercent30() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_dividendsPercent30.num, m_dividendsPercent30.den);
  }
  function dividendsPercent35() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_dividendsPercent35.num, m_dividendsPercent35.den);
  }
  function dividendsPercent40() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_dividendsPercent40.num, m_dividendsPercent40.den);
  }
  function dividendsPercent45() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_dividendsPercent45.num, m_dividendsPercent45.den);
  }
  function dividendsPercent50() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_dividendsPercent50.num, m_dividendsPercent50.den);
  }
  function dividendsPercent55() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_dividendsPercent55.num, m_dividendsPercent55.den);
  }
  function dividendsPercent60() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_dividendsPercent60.num, m_dividendsPercent60.den);
  }
  function adminPercent() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_adminPercent.num, m_adminPercent.den);
  }
  function referrerLvlOnePercent() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_refLvlOnePercent.num, m_refLvlOnePercent.den);
  }
  function referrerLvlTwoPercent() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_refLvlTwoPercent.num, m_refLvlTwoPercent.den);
  }
  function referrerLvlThreePercent() public view returns(uint numerator, uint denominator) {
    (numerator, denominator) = (m_refLvlThreePercent.num, m_refLvlThreePercent.den);
  }

  function investorInfo(address addr) public view returns(uint value, uint paymentTime, uint refBonus, bool isReferral) {
    (value, paymentTime, refBonus) = m_investors.investorBaseInfo(addr);
    isReferral = m_referrals[addr];
  }

  function latestPayout() public view returns(uint timestamp) {
    return m_paysys.latestTime;
  }

  function getMyDividends() public notOnPause atPaymode(Paymode.Pull) balanceChanged {
    // check investor info
    InvestorsStorage.investor memory investor = getMemInvestor(msg.sender);
    require(investor.keyIndex > 0, "sender is not investor");
    if (investor.paymentTime < m_paysys.latestTime) {
      assert(m_investors.setPaymentTime(msg.sender, m_paysys.latestTime));
      investor.paymentTime = m_paysys.latestTime;
    }

    // calculate days after latest payment
    uint256 daysAfter = now.sub(investor.paymentTime).div(24 hours);
    require(daysAfter > 0, "the latest payment was earlier than 24 hours");
    assert(m_investors.setPaymentTime(msg.sender, now));

    uint value = 0;

    if (address(this).balance < 500 ether){
      value = m_dividendsPercent30.mul(investor.value) * daysAfter;
    }
    if (500 ether <= address(this).balance && address(this).balance < 1000 ether){
      value = m_dividendsPercent35.mul(investor.value) * daysAfter;
    }
    if (1000 ether <= address(this).balance && address(this).balance < 2000 ether){
      value = m_dividendsPercent40.mul(investor.value) * daysAfter;
    }
    if (2000 ether <= address(this).balance && address(this).balance < 3000 ether){
      value = m_dividendsPercent45.mul(investor.value) * daysAfter;
    }
    if (3000 ether <= address(this).balance && address(this).balance < 4000 ether){
      value = m_dividendsPercent50.mul(investor.value) * daysAfter;
    }
    if (4000 ether <= address(this).balance && address(this).balance < 5000 ether){
      value = m_dividendsPercent55.mul(investor.value) * daysAfter;
    }
    if (5000 ether <= address(this).balance){
      value = m_dividendsPercent60.mul(investor.value) * daysAfter;
    }

    // check enough eth
    if (address(this).balance < value + investor.refBonus) {
      nextWave();
      return;
    }

    // send dividends and ref bonus
    if (investor.refBonus > 0) {
      assert(m_investors.setRefBonus(msg.sender, 0));
      sendDividendsWithRefBonus(msg.sender, value, investor.refBonus);
    } else {
      sendDividends(msg.sender, value);
    }
  }

  function doInvest(address[3] refs) public payable notOnPause balanceChanged {
    require(msg.value >= minInvesment, "msg.value must be >= minInvesment");
    require(address(this).balance <= maxBalance, "the contract eth balance limit");

    uint value = msg.value;
    // ref system works only once for sender-referral
    if (!m_referrals[msg.sender]) {
      // level 1
      if (notZeroNotSender(refs[0]) && m_investors.contains(refs[0])) {
        uint rewardL1 = m_refLvlOnePercent.mul(value);
        assert(m_investors.addRefBonus(refs[0], rewardL1)); // referrer 1 bonus
        m_referrals[msg.sender] = true;
        value = m_dividendsPercent30.add(value); // referral bonus
        emit LogNewReferral(msg.sender, now, value);
        // level 2
        if (notZeroNotSender(refs[1]) && m_investors.contains(refs[1]) && refs[0] != refs[1]) {
          uint rewardL2 = m_refLvlTwoPercent.mul(value);
          assert(m_investors.addRefBonus(refs[1], rewardL2)); // referrer 2 bonus
          // level 3
          if (notZeroNotSender(refs[2]) && m_investors.contains(refs[2]) && refs[0] != refs[2] && refs[1] != refs[2]) {
            uint rewardL3 = m_refLvlThreePercent.mul(value);
            assert(m_investors.addRefBonus(refs[2], rewardL3)); // referrer 3 bonus
          }
        }
      }
    }

    // commission
    adminAddr.transfer(m_adminPercent.mul(msg.value));
    payerAddr.transfer(m_payerPercent.mul(msg.value));

    // write to investors storage
    if (m_investors.contains(msg.sender)) {
      assert(m_investors.addValue(msg.sender, value));
    } else {
      assert(m_investors.insert(msg.sender, value));
      emit LogNewInvestor(msg.sender, now, value);
    }

    if (m_paysys.mode == Paymode.Pull)
      assert(m_investors.setPaymentTime(msg.sender, now));

    emit LogNewInvesment(msg.sender, now, value);
    investmentsNum++;
  }

  function payout() public notOnPause onlyAdmin(AccessRank.Payout) atPaymode(Paymode.Push) balanceChanged {
    if (m_nextWave) {
      nextWave();
      return;
    }

    // if m_paysys.latestKeyIndex == m_investors.iterStart() then payout NOT in process and we must check latest time of payment.
    if (m_paysys.latestKeyIndex == m_investors.iterStart()) {
      require(now>m_paysys.latestTime+12 hours, "the latest payment was earlier than 12 hours");
      m_paysys.latestTime = now;
    }

    uint i = m_paysys.latestKeyIndex;
    uint value;
    uint refBonus;
    uint size = m_investors.size();
    address investorAddr;

    // gasleft and latest key index  - prevent gas block limit
    for (i; i < size && gasleft() > 50000; i++) {
      investorAddr = m_investors.keyFromIndex(i);
      (value, refBonus) = m_investors.investorShortInfo(investorAddr);
      value = m_dividendsPercent30.mul(value);

      if (address(this).balance < value + refBonus) {
        m_nextWave = true;
        break;
      }

      if (refBonus > 0) {
        require(m_investors.setRefBonus(investorAddr, 0), "internal error");
        sendDividendsWithRefBonus(investorAddr, value, refBonus);
        continue;
      }

      sendDividends(investorAddr, value);
    }

    if (i == size)
      m_paysys.latestKeyIndex = m_investors.iterStart();
    else
      m_paysys.latestKeyIndex = i;
  }

  function setAdminAddr(address addr) public onlyAdmin(AccessRank.Full) {
    addr.requireNotZero();
    if (adminAddr != addr) {
      adminAddr = addr;
      emit LogAdminAddrChanged(addr, now);
    }
  }

  function setPayerAddr(address addr) public onlyAdmin(AccessRank.Full) {
    addr.requireNotZero();
    if (payerAddr != addr) {
      payerAddr = addr;
      emit LogPayerAddrChanged(addr, now);
    }
  }

  function setPullPaymode() public onlyAdmin(AccessRank.Paymode) atPaymode(Paymode.Push) {
    changePaymode(Paymode.Pull);
  }

  function getMemInvestor(address addr) internal view returns(InvestorsStorage.investor) {
    (uint a, uint b, uint c, uint d) = m_investors.investorFullInfo(addr);
    return InvestorsStorage.investor(a, b, c, d);
  }

  function notZeroNotSender(address addr) internal view returns(bool) {
    return addr.notZero() && addr != msg.sender;
  }

  function sendDividends(address addr, uint value) private {
    if (addr.send(value)) emit LogPayDividends(addr, now, value);
  }

  function sendDividendsWithRefBonus(address addr, uint value,  uint refBonus) private {
    if (addr.send(value+refBonus)) {
      emit LogPayDividends(addr, now, value);
      emit LogPayReferrerBonus(addr, now, refBonus);
    }
  }

  function nextWave() private {
    m_investors = new InvestorsStorage();
    changePaymode(Paymode.Push);
    m_paysys.latestKeyIndex = m_investors.iterStart();
    investmentsNum = 0;
    waveStartup = now;
    m_nextWave = false;
    emit LogNextWave(now);
  }
}

Contract Security Audit

Contract ABI

API
[{"constant":false,"inputs":[{"name":"refs","type":"address[3]"}],"name":"doInvest","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"investmentsNum","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dividendsPercent40","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setPayerAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"referrerLvlTwoPercent","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minInvesment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"setAdminAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dividendsPercent45","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"payout","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"investorsNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dividendsPercent55","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"access","outputs":[{"name":"rank","type":"uint8"}],"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":"referrerLvlOnePercent","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pauseOnNextWave","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adminAddr","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dividendsPercent50","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paymode","outputs":[{"name":"mode","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"latestPayout","outputs":[{"name":"timestamp","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referrerLvlThreePercent","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"payerPercent","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"adminPercent","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dividendsPercent30","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"getMyDividends","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"rank","type":"uint8"}],"name":"provideAccess","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"investorInfo","outputs":[{"name":"value","type":"uint256"},{"name":"paymentTime","type":"uint256"},{"name":"refBonus","type":"uint256"},{"name":"isReferral","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dividendsPercent60","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"payerAddr","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dividendsPercent35","outputs":[{"name":"numerator","type":"uint256"},{"name":"denominator","type":"uint256"}],"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":"setPullPaymode","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"}],"name":"LogNewInvestor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","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":"value","type":"uint256"}],"name":"LogNewReferral","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"}],"name":"LogPayDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"value","type":"uint256"}],"name":"LogPayReferrerBonus","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":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"}],"name":"LogAdminAddrChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"},{"indexed":false,"name":"when","type":"uint256"}],"name":"LogPayerAddrChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"}],"name":"LogNextWave","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"when","type":"uint256"},{"indexed":true,"name":"mode","type":"uint8"}],"name":"LogPaymodeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"whom","type":"address"},{"indexed":false,"name":"when","type":"uint256"},{"indexed":false,"name":"rank","type":"uint8"}],"name":"LogProvideAccess","type":"event"}]

601e60808190526103e860a0819052600a829055600b819055602360c081905260e0829052600c55600d8190556028610100819052610120829052600e55600f818155602d610140819052610160839052601055601182905560326101808190526101a0839052601255601382905560376101c08190526101e08390526014556015829055603c6102008190526102208390526016556017919091556102408190526064610260819052601891909155601981905560056102808190526102a0829052601a55601b81905560036102c08190526102e0829052601c55601d8190556002610300819052610320829052909155601f81905561038060405260016103408190526103608290526020556021553480156200011d57600080fd5b503360008181526020818152604091829020805460ff1916600390811790915582514281529182015281517f281b0406296ed2277e9ec49b1acca0b452581a995e533fa5256a3ce9355f9a60929181900390910190a26006805461010060a860020a031916336101008102919091179091556040805142815290517f668e88f9d85264651fcdf6de6ef084c112c92cba1fad30510c383c5d1ea1e691916020908290030190a260078054600160a060020a031916339081179091556040805142815290517fd7f1608e19fd9d15ac7ca872d397878f39039fcda33c52af2536ec2790bde7269181900360200190a26200021e64010000000062000247810204565b6008546200023e9062093a806401000000006200259b6200037c82021704565b6008556200057e565b620002516200056d565b604051809103906000f0801580156200026e573d6000803e3d6000fd5b5060048054600160a060020a031916600160a060020a0392909216919091179055620002a4600064010000000062000394810204565b60048054604080517f80ac80b00000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216926380ac80b09282820192602092908290030181600087803b1580156200030257600080fd5b505af115801562000317573d6000803e3d6000fd5b505050506040513d60208110156200032e57600080fd5b505160025560006009554260088190556006805460ff1916905560408051918252517fc66870ef5f6257a76295d443e9221488043ec691f830f6c6128755c3518e3c759181900360200190a1565b600080838311156200038d57600080fd5b5050900390565b6001816001811115620003a357fe5b11156200041157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f696e76616c696420706179206d6f646500000000000000000000000000000000604482015290519081900360640190fd5b60035460ff1660018111156200042357fe5b8160018111156200043057fe5b14156200043d576200056a565b60018160018111156200044c57fe5b1415620004ea576001541515620004ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f63616e6e6f74207365742070756c6c20706179206d6f6465206966206c61746560448201527f73742074696d6520697320300000000000000000000000000000000000000000606482015290519081900360840190fd5b6000816001811115620004f957fe5b1415620005065760006001555b6003805482919060ff1916600183818111156200051f57fe5b021790555060035460ff1660018111156200053657fe5b6040805142815290517f8f010bfb19c67f04dbb7e355027ff728adb05787d09dd023f42af2e6554449e99181900360200190a25b50565b60405161086e806200393e83390190565b6133b0806200058e6000396000f30060806040526004361061017c5763ffffffff60e060020a600035041663110dc7a6811461020f5780631680eb4e1461024757806319f8499a1461026e5780632b82aed61461029c57806339faad27146102bd5780633d7ac9f8146102d257806341a28df6146102e7578063518c973d1461030857806363bd1d4a1461031d578063653c317414610332578063679a3ca2146103475780636fae3d761461035c57806373ad468a146103a15780637b481022146103b6578063816f5617146103cb57806381830593146103e0578063872e52d014610411578063922a842514610426578063a4d6bb2b1461044b578063aae0775114610460578063bb41f42114610475578063c0dab5161461048a578063ce3cc4aa1461049f578063d50030ad146104b4578063d70d532b146104c9578063dbcbaca4146104f0578063dbdbe81014610539578063dcc7094a1461054e578063e22c9eb814610563578063eafecc7a14610578578063ecbdbb321461058d578063fc043cad146105a2575b6000610186612a9d565b34151561019a576101956105b7565b61020b565b6101d46000368080601f01602080910402602001604051908101604052809392919081815260200183838082843750610bdd945050505050565b91506101e882600160a060020a0316610be4565b1561020257600160a060020a038216815261019581610bf2565b61020b81610bf2565b5050005b604080516060818101909252610245913691600491606491908390600390839083908082843750939650610bf295505050505050565b005b34801561025357600080fd5b5061025c611631565b60408051918252519081900360200190f35b34801561027a57600080fd5b50610283611637565b6040805192835260208301919091528051918290030190f35b3480156102a857600080fd5b50610245600160a060020a0360043516611641565b3480156102c957600080fd5b5061028361175b565b3480156102de57600080fd5b5061025c611765565b3480156102f357600080fd5b50610245600160a060020a0360043516611770565b34801561031457600080fd5b50610283611896565b34801561032957600080fd5b506102456118a0565b34801561033e57600080fd5b5061025c611f47565b34801561035357600080fd5b50610283611fd8565b34801561036857600080fd5b5061037d600160a060020a0360043516611fe2565b6040518082600381111561038d57fe5b60ff16815260200191505060405180910390f35b3480156103ad57600080fd5b5061025c612000565b3480156103c257600080fd5b5061028361200f565b3480156103d757600080fd5b5061025c612019565b3480156103ec57600080fd5b506103f5612020565b60408051600160a060020a039092168252519081900360200190f35b34801561041d57600080fd5b50610283612034565b34801561043257600080fd5b5061043b61203e565b6040518082600181111561038d57fe5b34801561045757600080fd5b5061025c612047565b34801561046c57600080fd5b5061028361204d565b34801561048157600080fd5b50610283612057565b34801561049657600080fd5b50610283612061565b3480156104ab57600080fd5b5061028361206b565b3480156104c057600080fd5b506102456105b7565b3480156104d557600080fd5b50610245600160a060020a036004351660ff60243516612075565b3480156104fc57600080fd5b50610511600160a060020a03600435166122b0565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b34801561054557600080fd5b50610283612388565b34801561055a57600080fd5b506103f5612392565b34801561056f57600080fd5b506102836123a1565b34801561058457600080fd5b5061025c6123ab565b34801561059957600080fd5b5061025c6123b1565b3480156105ae57600080fd5b506102456123b6565b6105bf612abc565b6000804262093a806008540111151515610623576040805160e560020a62461bcd02815260206004820152601e60248201527f7061757365206f6e206e6578742077617665206e6f7420657870697265640000604482015290519081900360640190fd5b60018060035460ff16600181111561063757fe5b1461068c576040805160e560020a62461bcd02815260206004820152601a60248201527f706179206d6f646520646f6573206e6f74207468652073616d65000000000000604482015290519081900360640190fd5b610695336124b8565b80519094506000106106f1576040805160e560020a62461bcd02815260206004820152601660248201527f73656e646572206973206e6f7420696e766573746f7200000000000000000000604482015290519081900360640190fd5b600154604085015110156107ae5760048054600154604080517f440135850000000000000000000000000000000000000000000000000000000081523394810194909452602484019190915251600160a060020a039091169163440135859160448083019260209291908290030181600087803b15801561077157600080fd5b505af1158015610785573d6000803e3d6000fd5b505050506040513d602081101561079b57600080fd5b505115156107a557fe5b60015460408501525b6107d8620151806107cc86604001514261259b90919063ffffffff16565b9063ffffffff6125b216565b925060008311610858576040805160e560020a62461bcd02815260206004820152602c60248201527f746865206c6174657374207061796d656e7420776173206561726c696572207460448201527f68616e20323420686f7572730000000000000000000000000000000000000000606482015290519081900360840190fd5b60048054604080517f44013585000000000000000000000000000000000000000000000000000000008152339381019390935242602484015251600160a060020a039091169163440135859160448083019260209291908290030181600087803b1580156108c557600080fd5b505af11580156108d9573d6000803e3d6000fd5b505050506040513d60208110156108ef57600080fd5b505115156108f957fe5b60009150681b1ae4d6e2ef5000003031101561092c57826109288560200151600a6125d590919063ffffffff16565b0291505b3031681b1ae4d6e2ef5000001180159061094f5750683635c9adc5dea000003031105b15610971578261096d8560200151600c6125d590919063ffffffff16565b0291505b3031683635c9adc5dea00000118015906109945750686c6b935b8bbd4000003031105b156109b657826109b28560200151600e6125d590919063ffffffff16565b0291505b3031686c6b935b8bbd400000118015906109d9575068a2a15d09519be000003031105b156109fb57826109f7856020015160106125d590919063ffffffff16565b0291505b303168a2a15d09519be0000011801590610a1e575068d8d726b7177a8000003031105b15610a405782610a3c856020015160126125d590919063ffffffff16565b0291505b303168d8d726b7177a80000011801590610a64575069010f0cf064dd592000003031105b15610a865782610a82856020015160146125d590919063ffffffff16565b0291505b303169010f0cf064dd5920000011610ab55782610ab1856020015160166125d590919063ffffffff16565b0291505b6060840151820130311015610ad157610acc612602565b610b9c565b600084606001511115610b925760048054604080517ffbeac9c900000000000000000000000000000000000000000000000000000000815233938101939093526000602484018190529051600160a060020a039092169263fbeac9c99260448083019360209383900390910190829087803b158015610b4f57600080fd5b505af1158015610b63573d6000803e3d6000fd5b505050506040513d6020811015610b7957600080fd5b50511515610b8357fe5b610acc33838660600151612733565b610b9c33836127e9565b604080514281523031602082015281517f32367fddaa1baa1c6a0fc5c3e8284df724bacc7b50e847c32c9f9765f9f96137929181900390910190a150505050565b6014015190565b600160a060020a0316151590565b6000806000804262093a806008540111151515610c59576040805160e560020a62461bcd02815260206004820152601e60248201527f7061757365206f6e206e6578742077617665206e6f7420657870697265640000604482015290519081900360640190fd5b666a94d74f430000341015610cde576040805160e560020a62461bcd02815260206004820152602160248201527f6d73672e76616c7565206d757374206265203e3d206d696e496e7665736d656e60448201527f7400000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6a1b8b8c9e000e82a480000030311115610d42576040805160e560020a62461bcd02815260206004820152601e60248201527f74686520636f6e7472616374206574682062616c616e6365206c696d69740000604482015290519081900360640190fd5b3360009081526005602052604090205434945060ff16151561124557610d6f8560005b602002015161285a565b8015610e075750600454600160a060020a0316635dbe47e886600060200201516040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610dda57600080fd5b505af1158015610dee573d6000803e3d6000fd5b505050506040513d6020811015610e0457600080fd5b50515b1561124557610e1d601c8563ffffffff6125d516565b600480548751604080517f11302818000000000000000000000000000000000000000000000000000000008152600160a060020a0392831694810194909452602484018590525193965016916311302818916044808201926020929091908290030181600087803b158015610e9157600080fd5b505af1158015610ea5573d6000803e3d6000fd5b505050506040513d6020811015610ebb57600080fd5b50511515610ec557fe5b336000908152600560205260409020805460ff19166001179055610ef0600a8563ffffffff61288816565b6040805142815260208101839052815192965033927f51dd0a60788a76a784e14408dda19543a507171e513d8a1aab1859626c30d448929181900390910190a2610f3b856001610d65565b8015610fd35750600454600160a060020a0316635dbe47e886600160200201516040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610fa657600080fd5b505af1158015610fba573d6000803e3d6000fd5b505050506040513d6020811015610fd057600080fd5b50515b8015610ff1575060208501518551600160a060020a03908116911614155b1561124557611007601e8563ffffffff6125d516565b600454909250600160a060020a031663113028188660016020020151846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561107657600080fd5b505af115801561108a573d6000803e3d6000fd5b505050506040513d60208110156110a057600080fd5b505115156110aa57fe5b6110b5856002610d65565b801561114d5750600454600160a060020a0316635dbe47e886600260200201516040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561112057600080fd5b505af1158015611134573d6000803e3d6000fd5b505050506040513d602081101561114a57600080fd5b50515b801561116b575060408501518551600160a060020a03908116911614155b801561118c575060408501516020860151600160a060020a03908116911614155b15611245576111a260208563ffffffff6125d516565b600454909150600160a060020a031663113028188660026020020151836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561121157600080fd5b505af1158015611225573d6000803e3d6000fd5b505050506040513d602081101561123b57600080fd5b5051151561124557fe5b6006546101009004600160a060020a03166108fc6112646018346125d5565b6040518115909202916000818181858888f1935050505015801561128c573d6000803e3d6000fd5b50600754600160a060020a03166108fc6112ad601a3463ffffffff6125d516565b6040518115909202916000818181858888f193505050501580156112d5573d6000803e3d6000fd5b5060048054604080517f5dbe47e8000000000000000000000000000000000000000000000000000000008152339381019390935251600160a060020a0390911691635dbe47e89160248083019260209291908290030181600087803b15801561133d57600080fd5b505af1158015611351573d6000803e3d6000fd5b505050506040513d602081101561136757600080fd5b5051156114155760048054604080517fca0b187800000000000000000000000000000000000000000000000000000000815233938101939093526024830187905251600160a060020a039091169163ca0b18789160448083019260209291908290030181600087803b1580156113dc57600080fd5b505af11580156113f0573d6000803e3d6000fd5b505050506040513d602081101561140657600080fd5b5051151561141057fe5b6114f2565b60048054604080517f0fd0ae1000000000000000000000000000000000000000000000000000000000815233938101939093526024830187905251600160a060020a0390911691630fd0ae109160448083019260209291908290030181600087803b15801561148357600080fd5b505af1158015611497573d6000803e3d6000fd5b505050506040513d60208110156114ad57600080fd5b505115156114b757fe5b6040805142815260208101869052815133927f5299e1ad8e7b5bcb9a8bfb1ce23cc0210bfea47a33518ab518a93fef68427d98928290030190a25b600160035460ff16600181111561150557fe5b14156115ac5760048054604080517f44013585000000000000000000000000000000000000000000000000000000008152339381019390935242602484015251600160a060020a039091169163440135859160448083019260209291908290030181600087803b15801561157857600080fd5b505af115801561158c573d6000803e3d6000fd5b505050506040513d60208110156115a257600080fd5b505115156115ac57fe5b6040805142815260208101869052815133927f28c94178af4152674986540aaca61b18b89f54283f74283ef675a90583339b8f928290030190a2600980546001019055604080514281523031602082015281517f32367fddaa1baa1c6a0fc5c3e8284df724bacc7b50e847c32c9f9765f9f96137929181900390910190a15050505050565b60095481565b600e54600f549091565b6003803360009081526020819052604090205460ff16600381111561166257fe5b148061168b575060033360009081526020819052604090205460ff16600381111561168957fe5b145b15156116d0576040805160e560020a62461bcd02815260206004820152600d602482015260008051602062003365833981519152604482015290519081900360640190fd5b6116e282600160a060020a031661289d565b600754600160a060020a038381169116146117575760078054600160a060020a03841673ffffffffffffffffffffffffffffffffffffffff1990911681179091556040805142815290517fd7f1608e19fd9d15ac7ca872d397878f39039fcda33c52af2536ec2790bde7269181900360200190a25b5050565b601e54601f549091565b666a94d74f43000081565b6003803360009081526020819052604090205460ff16600381111561179157fe5b14806117ba575060033360009081526020819052604090205460ff1660038111156117b857fe5b145b15156117ff576040805160e560020a62461bcd02815260206004820152600d602482015260008051602062003365833981519152604482015290519081900360640190fd5b61181182600160a060020a031661289d565b600654600160a060020a0383811661010090920416146117575760068054600160a060020a038416610100810274ffffffffffffffffffffffffffffffffffffffff0019909216919091179091556040805142815290517f668e88f9d85264651fcdf6de6ef084c112c92cba1fad30510c383c5d1ea1e6919181900360200190a25050565b6010546011549091565b60008060008060004262093a806008540111151515611909576040805160e560020a62461bcd02815260206004820152601e60248201527f7061757365206f6e206e6578742077617665206e6f7420657870697265640000604482015290519081900360640190fd5b6001803360009081526020819052604090205460ff16600381111561192a57fe5b1480611953575060033360009081526020819052604090205460ff16600381111561195157fe5b145b1515611998576040805160e560020a62461bcd02815260206004820152600d602482015260008051602062003365833981519152604482015290519081900360640190fd5b60008060035460ff1660018111156119ac57fe5b14611a01576040805160e560020a62461bcd02815260206004820152601a60248201527f706179206d6f646520646f6573206e6f74207468652073616d65000000000000604482015290519081900360640190fd5b60065460ff1615611a1957611a14612602565b611f03565b60048054604080517f80ac80b00000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216926380ac80b09282820192602092908290030181600087803b158015611a7657600080fd5b505af1158015611a8a573d6000803e3d6000fd5b505050506040513d6020811015611aa057600080fd5b50516002541415611b335760015461a8c0014211611b2e576040805160e560020a62461bcd02815260206004820152602c60248201527f746865206c6174657374207061796d656e7420776173206561726c696572207460448201527f68616e20313220686f7572730000000000000000000000000000000000000000606482015290519081900360840190fd5b426001555b60025460048054604080517f949d225d0000000000000000000000000000000000000000000000000000000081529051939a50600160a060020a039091169263949d225d928281019260209291908290030181600087803b158015611b9757600080fd5b505af1158015611bab573d6000803e3d6000fd5b505050506040513d6020811015611bc157600080fd5b505193505b8387108015611bd6575061c3505a115b15611e645760048054604080517f460d674b0000000000000000000000000000000000000000000000000000000081529283018a905251600160a060020a039091169163460d674b9160248083019260209291908290030181600087803b158015611c4057600080fd5b505af1158015611c54573d6000803e3d6000fd5b505050506040513d6020811015611c6a57600080fd5b505160048054604080517f993d3489000000000000000000000000000000000000000000000000000000008152600160a060020a03808616948201949094528151949750929091169263993d34899260248082019392918290030181600087803b158015611cd757600080fd5b505af1158015611ceb573d6000803e3d6000fd5b505050506040513d6040811015611d0157600080fd5b5080516020909101519096509450611d20600a8763ffffffff6125d516565b955084860130311015611d3f576006805460ff19166001179055611e64565b6000851115611e4f5760048054604080517ffbeac9c9000000000000000000000000000000000000000000000000000000008152600160a060020a03878116948201949094526000602482018190529151939092169263fbeac9c9926044808201936020939283900390910190829087803b158015611dbd57600080fd5b505af1158015611dd1573d6000803e3d6000fd5b505050506040513d6020811015611de757600080fd5b50511515611e3f576040805160e560020a62461bcd02815260206004820152600e60248201527f696e7465726e616c206572726f72000000000000000000000000000000000000604482015290519081900360640190fd5b611e4a838787612733565b611e59565b611e5983876127e9565b600190960195611bc6565b83871415611efd5760048054604080517f80ac80b00000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216926380ac80b09282820192602092908290030181600087803b158015611ec957600080fd5b505af1158015611edd573d6000803e3d6000fd5b505050506040513d6020811015611ef357600080fd5b5051600255611f03565b60028790555b604080514281523031602082015281517f32367fddaa1baa1c6a0fc5c3e8284df724bacc7b50e847c32c9f9765f9f96137929181900390910190a150505050505050565b60048054604080517f949d225d0000000000000000000000000000000000000000000000000000000081529051600093600193600160a060020a03169263949d225d928183019260209282900301818887803b158015611fa657600080fd5b505af1158015611fba573d6000803e3d6000fd5b505050506040513d6020811015611fd057600080fd5b505103905090565b6014546015549091565b600160a060020a031660009081526020819052604090205460ff1690565b6a1b8b8c9e000e82a480000081565b601c54601d549091565b62093a8081565b6006546101009004600160a060020a031681565b6012546013549091565b60035460ff1690565b60015490565b6020546021549091565b601a54601b549091565b6018546019549091565b600a54600b549091565b6003803360009081526020819052604090205460ff16600381111561209657fe5b14806120bf575060033360009081526020819052604090205460ff1660038111156120bd57fe5b145b1515612104576040805160e560020a62461bcd02815260206004820152600d602482015260008051602062003365833981519152604482015290519081900360640190fd5b600382600381111561211257fe5b1115612168576040805160e560020a62461bcd02815260206004820152601360248201527f696e76616c6964206163636573732072616e6b00000000000000000000000000604482015290519081900360640190fd5b6003600160a060020a03841660009081526020819052604090205460ff16600381111561219157fe5b14156121e7576040805160e560020a62461bcd02815260206004820152601e60248201527f63616e6e6f74206368616e67652066756c6c206163636573732072616e6b0000604482015290519081900360640190fd5b8160038111156121f357fe5b600160a060020a03841660009081526020819052604090205460ff16600381111561221a57fe5b146122ab57600160a060020a0383166000908152602081905260409020805483919060ff1916600183600381111561224e57fe5b021790555082600160a060020a03167f281b0406296ed2277e9ec49b1acca0b452581a995e533fa5256a3ce9355f9a6042846040518083815260200182600381111561229657fe5b60ff1681526020019250505060405180910390a25b505050565b600080600080600460009054906101000a9004600160a060020a0316600160a060020a031663743c6775866040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050606060405180830381600087803b15801561232657600080fd5b505af115801561233a573d6000803e3d6000fd5b505050506040513d606081101561235057600080fd5b508051602080830151604093840151600160a060020a03909916600090815260059092529290205490979196955060ff169350915050565b6016546017549091565b600754600160a060020a031681565b600c54600d549091565b60085481565b303190565b6002803360009081526020819052604090205460ff1660038111156123d757fe5b1480612400575060033360009081526020819052604090205460ff1660038111156123fe57fe5b145b1515612445576040805160e560020a62461bcd02815260206004820152600d602482015260008051602062003365833981519152604482015290519081900360640190fd5b60008060035460ff16600181111561245957fe5b146124ae576040805160e560020a62461bcd02815260206004820152601a60248201527f706179206d6f646520646f6573206e6f74207468652073616d65000000000000604482015290519081900360640190fd5b6117576001612900565b6124c0612abc565b600080600080600460009054906101000a9004600160a060020a0316600160a060020a031663634d6e57876040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050608060405180830381600087803b15801561253657600080fd5b505af115801561254a573d6000803e3d6000fd5b505050506040513d608081101561256057600080fd5b508051602080830151604080850151606095860151825160808101845295865293850192909252830152918101919091529695505050505050565b600080838311156125ab57600080fd5b5050900390565b6000808083116125c157600080fd5b82848115156125cc57fe5b04949350505050565b60008115156125e6575060006125fc565b6001830154835483028115156125f857fe5b0490505b92915050565b61260a612ae5565b604051809103906000f080158015612626573d6000803e3d6000fd5b506004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905561265e6000612900565b60048054604080517f80ac80b00000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216926380ac80b09282820192602092908290030181600087803b1580156126bb57600080fd5b505af11580156126cf573d6000803e3d6000fd5b505050506040513d60208110156126e557600080fd5b505160025560006009554260088190556006805460ff1916905560408051918252517fc66870ef5f6257a76295d443e9221488043ec691f830f6c6128755c3518e3c759181900360200190a1565b604051600160a060020a0384169083830180156108fc02916000818181858888f19350505050156122ab5760408051428152602081018490528151600160a060020a038616927f6710e0cad56444677ac916513b384a4acc6501cfb5219f59657ad4ddffef9d60928290030190a260408051428152602081018390528151600160a060020a038616927f8e3ff7e294a4411929d6ec573691ed656c8e5c691be6dc7d776fadb286dbfe82928290030190a2505050565b604051600160a060020a0383169082156108fc029083906000818181858888f19350505050156117575760408051428152602081018390528151600160a060020a038516927f6710e0cad56444677ac916513b384a4acc6501cfb5219f59657ad4ddffef9d60928290030190a25050565b600061286e82600160a060020a0316610be4565b80156125fc5750600160a060020a03821633141592915050565b600061289483836125d5565b90910192915050565b600160a060020a03811615156128fd576040805160e560020a62461bcd02815260206004820152601860248201527f72657175697265206e6f74207a65726f20616464726573730000000000000000604482015290519081900360640190fd5b50565b600181600181111561290e57fe5b1115612964576040805160e560020a62461bcd02815260206004820152601060248201527f696e76616c696420706179206d6f646500000000000000000000000000000000604482015290519081900360640190fd5b60035460ff16600181111561297557fe5b81600181111561298157fe5b141561298c576128fd565b600181600181111561299a57fe5b1415612a1f576001541515612a1f576040805160e560020a62461bcd02815260206004820152602c60248201527f63616e6e6f74207365742070756c6c20706179206d6f6465206966206c61746560448201527f73742074696d6520697320300000000000000000000000000000000000000000606482015290519081900360840190fd5b6000816001811115612a2d57fe5b1415612a395760006001555b6003805482919060ff191660018381811115612a5157fe5b021790555060035460ff166001811115612a6757fe5b6040805142815290517f8f010bfb19c67f04dbb7e355027ff728adb05787d09dd023f42af2e6554449e99181900360200190a250565b6060604051908101604052806003906020820280388339509192915050565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b60405161086e8062002af7833901905600608060405234801561001057600080fd5b5060028054600160a060020a0319163317905560018054906100349082810161003a565b50610084565b81548183558181111561005e5760008381526020902061005e918101908301610063565b505050565b61008191905b8082111561007d5760008155600101610069565b5090565b90565b6107db806100936000396000f3006080604052600436106100b95763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630fd0ae1081146100be57806311302818146100f6578063440135851461011a578063460d674b1461013e5780635dbe47e814610172578063634d6e5714610193578063743c6775146101da57806380ac80b014610219578063949d225d14610240578063993d348914610255578063ca0b18781461028f578063fbeac9c9146102b3575b600080fd5b3480156100ca57600080fd5b506100e2600160a060020a03600435166024356102d7565b604080519115158252519081900360200190f35b34801561010257600080fd5b506100e2600160a060020a03600435166024356103ec565b34801561012657600080fd5b506100e2600160a060020a0360043516602435610491565b34801561014a57600080fd5b5061015660043561052f565b60408051600160a060020a039092168252519081900360200190f35b34801561017e57600080fd5b506100e2600160a060020a036004351661055c565b34801561019f57600080fd5b506101b4600160a060020a0360043516610578565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156101e657600080fd5b506101fb600160a060020a03600435166105a9565b60408051938452602084019290925282820152519081900360600190f35b34801561022557600080fd5b5061022e6105d4565b60408051918252519081900360200190f35b34801561024c57600080fd5b5061022e6105da565b34801561026157600080fd5b50610276600160a060020a03600435166105e0565b6040805192835260208301919091528051918290030190f35b34801561029b57600080fd5b506100e2600160a060020a0360043516602435610606565b3480156102bf57600080fd5b506100e2600160a060020a03600435166024356106aa565b6002546000908190600160a060020a0316331461032c576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610790833981519152604482015290519081900360640190fd5b50600160a060020a038316600090815260208190526040902054801561035557600091506103e5565b600160a060020a0384166000908152602081905260409020600190810184905580549061038490828101610748565b600160a060020a0385166000908152602081905260409020819055600180549192508591839081106103b257fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a03160217905550600191505b5092915050565b600254600090600160a060020a0316331461043f576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610790833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526020819052604090205415156104665750600061048b565b50600160a060020a038216600090815260208190526040902060030180548201905560015b92915050565b600254600090600160a060020a031633146104e4576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610790833981519152604482015290519081900360640190fd5b600160a060020a038316600090815260208190526040902054151561050b5750600061048b565b50600160a060020a0391909116600090815260208190526040902060020155600190565b60018054600091908390811061054157fe5b600091825260209091200154600160a060020a031692915050565b600160a060020a03166000908152602081905260408120541190565b600160a060020a03166000908152602081905260409020805460018201546002830154600390930154919390929190565b600160a060020a03166000908152602081905260409020600181015460028201546003909201549092565b60015b90565b60015490565b600160a060020a0316600090815260208190526040902060018101546003909101549091565b600254600090600160a060020a03163314610659576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610790833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526020819052604090205415156106805750600061048b565b50600160a060020a0382166000908152602081905260409020600190810180548301905592915050565b600254600090600160a060020a031633146106fd576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610790833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526020819052604090205415156107245750600061048b565b50600160a060020a0391909116600090815260208190526040902060030155600190565b81548183558181111561076c5760008381526020902061076c918101908301610771565b505050565b6105d791905b8082111561078b5760008155600101610777565b509056006163636573732064656e69656400000000000000000000000000000000000000a165627a7a7230582000e514ff8f1eb7aa95b228d898cc2005fe67b49648b335a6ad55485cf449a75600296163636573732064656e69656400000000000000000000000000000000000000a165627a7a72305820944d689415074095925bb62cdcf92fcfba322688e5c865e5f642c929d54cdb8f0029608060405234801561001057600080fd5b5060028054600160a060020a0319163317905560018054906100349082810161003a565b50610084565b81548183558181111561005e5760008381526020902061005e918101908301610063565b505050565b61008191905b8082111561007d5760008155600101610069565b5090565b90565b6107db806100936000396000f3006080604052600436106100b95763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630fd0ae1081146100be57806311302818146100f6578063440135851461011a578063460d674b1461013e5780635dbe47e814610172578063634d6e5714610193578063743c6775146101da57806380ac80b014610219578063949d225d14610240578063993d348914610255578063ca0b18781461028f578063fbeac9c9146102b3575b600080fd5b3480156100ca57600080fd5b506100e2600160a060020a03600435166024356102d7565b604080519115158252519081900360200190f35b34801561010257600080fd5b506100e2600160a060020a03600435166024356103ec565b34801561012657600080fd5b506100e2600160a060020a0360043516602435610491565b34801561014a57600080fd5b5061015660043561052f565b60408051600160a060020a039092168252519081900360200190f35b34801561017e57600080fd5b506100e2600160a060020a036004351661055c565b34801561019f57600080fd5b506101b4600160a060020a0360043516610578565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156101e657600080fd5b506101fb600160a060020a03600435166105a9565b60408051938452602084019290925282820152519081900360600190f35b34801561022557600080fd5b5061022e6105d4565b60408051918252519081900360200190f35b34801561024c57600080fd5b5061022e6105da565b34801561026157600080fd5b50610276600160a060020a03600435166105e0565b6040805192835260208301919091528051918290030190f35b34801561029b57600080fd5b506100e2600160a060020a0360043516602435610606565b3480156102bf57600080fd5b506100e2600160a060020a03600435166024356106aa565b6002546000908190600160a060020a0316331461032c576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610790833981519152604482015290519081900360640190fd5b50600160a060020a038316600090815260208190526040902054801561035557600091506103e5565b600160a060020a0384166000908152602081905260409020600190810184905580549061038490828101610748565b600160a060020a0385166000908152602081905260409020819055600180549192508591839081106103b257fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a03160217905550600191505b5092915050565b600254600090600160a060020a0316331461043f576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610790833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526020819052604090205415156104665750600061048b565b50600160a060020a038216600090815260208190526040902060030180548201905560015b92915050565b600254600090600160a060020a031633146104e4576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610790833981519152604482015290519081900360640190fd5b600160a060020a038316600090815260208190526040902054151561050b5750600061048b565b50600160a060020a0391909116600090815260208190526040902060020155600190565b60018054600091908390811061054157fe5b600091825260209091200154600160a060020a031692915050565b600160a060020a03166000908152602081905260408120541190565b600160a060020a03166000908152602081905260409020805460018201546002830154600390930154919390929190565b600160a060020a03166000908152602081905260409020600181015460028201546003909201549092565b60015b90565b60015490565b600160a060020a0316600090815260208190526040902060018101546003909101549091565b600254600090600160a060020a03163314610659576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610790833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526020819052604090205415156106805750600061048b565b50600160a060020a0382166000908152602081905260409020600190810180548301905592915050565b600254600090600160a060020a031633146106fd576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610790833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526020819052604090205415156107245750600061048b565b50600160a060020a0391909116600090815260208190526040902060030155600190565b81548183558181111561076c5760008381526020902061076c918101908301610771565b505050565b6105d791905b8082111561078b5760008155600101610777565b509056006163636573732064656e69656400000000000000000000000000000000000000a165627a7a7230582000e514ff8f1eb7aa95b228d898cc2005fe67b49648b335a6ad55485cf449a7560029

Deployed Bytecode

0x60806040526004361061017c5763ffffffff60e060020a600035041663110dc7a6811461020f5780631680eb4e1461024757806319f8499a1461026e5780632b82aed61461029c57806339faad27146102bd5780633d7ac9f8146102d257806341a28df6146102e7578063518c973d1461030857806363bd1d4a1461031d578063653c317414610332578063679a3ca2146103475780636fae3d761461035c57806373ad468a146103a15780637b481022146103b6578063816f5617146103cb57806381830593146103e0578063872e52d014610411578063922a842514610426578063a4d6bb2b1461044b578063aae0775114610460578063bb41f42114610475578063c0dab5161461048a578063ce3cc4aa1461049f578063d50030ad146104b4578063d70d532b146104c9578063dbcbaca4146104f0578063dbdbe81014610539578063dcc7094a1461054e578063e22c9eb814610563578063eafecc7a14610578578063ecbdbb321461058d578063fc043cad146105a2575b6000610186612a9d565b34151561019a576101956105b7565b61020b565b6101d46000368080601f01602080910402602001604051908101604052809392919081815260200183838082843750610bdd945050505050565b91506101e882600160a060020a0316610be4565b1561020257600160a060020a038216815261019581610bf2565b61020b81610bf2565b5050005b604080516060818101909252610245913691600491606491908390600390839083908082843750939650610bf295505050505050565b005b34801561025357600080fd5b5061025c611631565b60408051918252519081900360200190f35b34801561027a57600080fd5b50610283611637565b6040805192835260208301919091528051918290030190f35b3480156102a857600080fd5b50610245600160a060020a0360043516611641565b3480156102c957600080fd5b5061028361175b565b3480156102de57600080fd5b5061025c611765565b3480156102f357600080fd5b50610245600160a060020a0360043516611770565b34801561031457600080fd5b50610283611896565b34801561032957600080fd5b506102456118a0565b34801561033e57600080fd5b5061025c611f47565b34801561035357600080fd5b50610283611fd8565b34801561036857600080fd5b5061037d600160a060020a0360043516611fe2565b6040518082600381111561038d57fe5b60ff16815260200191505060405180910390f35b3480156103ad57600080fd5b5061025c612000565b3480156103c257600080fd5b5061028361200f565b3480156103d757600080fd5b5061025c612019565b3480156103ec57600080fd5b506103f5612020565b60408051600160a060020a039092168252519081900360200190f35b34801561041d57600080fd5b50610283612034565b34801561043257600080fd5b5061043b61203e565b6040518082600181111561038d57fe5b34801561045757600080fd5b5061025c612047565b34801561046c57600080fd5b5061028361204d565b34801561048157600080fd5b50610283612057565b34801561049657600080fd5b50610283612061565b3480156104ab57600080fd5b5061028361206b565b3480156104c057600080fd5b506102456105b7565b3480156104d557600080fd5b50610245600160a060020a036004351660ff60243516612075565b3480156104fc57600080fd5b50610511600160a060020a03600435166122b0565b6040805194855260208501939093528383019190915215156060830152519081900360800190f35b34801561054557600080fd5b50610283612388565b34801561055a57600080fd5b506103f5612392565b34801561056f57600080fd5b506102836123a1565b34801561058457600080fd5b5061025c6123ab565b34801561059957600080fd5b5061025c6123b1565b3480156105ae57600080fd5b506102456123b6565b6105bf612abc565b6000804262093a806008540111151515610623576040805160e560020a62461bcd02815260206004820152601e60248201527f7061757365206f6e206e6578742077617665206e6f7420657870697265640000604482015290519081900360640190fd5b60018060035460ff16600181111561063757fe5b1461068c576040805160e560020a62461bcd02815260206004820152601a60248201527f706179206d6f646520646f6573206e6f74207468652073616d65000000000000604482015290519081900360640190fd5b610695336124b8565b80519094506000106106f1576040805160e560020a62461bcd02815260206004820152601660248201527f73656e646572206973206e6f7420696e766573746f7200000000000000000000604482015290519081900360640190fd5b600154604085015110156107ae5760048054600154604080517f440135850000000000000000000000000000000000000000000000000000000081523394810194909452602484019190915251600160a060020a039091169163440135859160448083019260209291908290030181600087803b15801561077157600080fd5b505af1158015610785573d6000803e3d6000fd5b505050506040513d602081101561079b57600080fd5b505115156107a557fe5b60015460408501525b6107d8620151806107cc86604001514261259b90919063ffffffff16565b9063ffffffff6125b216565b925060008311610858576040805160e560020a62461bcd02815260206004820152602c60248201527f746865206c6174657374207061796d656e7420776173206561726c696572207460448201527f68616e20323420686f7572730000000000000000000000000000000000000000606482015290519081900360840190fd5b60048054604080517f44013585000000000000000000000000000000000000000000000000000000008152339381019390935242602484015251600160a060020a039091169163440135859160448083019260209291908290030181600087803b1580156108c557600080fd5b505af11580156108d9573d6000803e3d6000fd5b505050506040513d60208110156108ef57600080fd5b505115156108f957fe5b60009150681b1ae4d6e2ef5000003031101561092c57826109288560200151600a6125d590919063ffffffff16565b0291505b3031681b1ae4d6e2ef5000001180159061094f5750683635c9adc5dea000003031105b15610971578261096d8560200151600c6125d590919063ffffffff16565b0291505b3031683635c9adc5dea00000118015906109945750686c6b935b8bbd4000003031105b156109b657826109b28560200151600e6125d590919063ffffffff16565b0291505b3031686c6b935b8bbd400000118015906109d9575068a2a15d09519be000003031105b156109fb57826109f7856020015160106125d590919063ffffffff16565b0291505b303168a2a15d09519be0000011801590610a1e575068d8d726b7177a8000003031105b15610a405782610a3c856020015160126125d590919063ffffffff16565b0291505b303168d8d726b7177a80000011801590610a64575069010f0cf064dd592000003031105b15610a865782610a82856020015160146125d590919063ffffffff16565b0291505b303169010f0cf064dd5920000011610ab55782610ab1856020015160166125d590919063ffffffff16565b0291505b6060840151820130311015610ad157610acc612602565b610b9c565b600084606001511115610b925760048054604080517ffbeac9c900000000000000000000000000000000000000000000000000000000815233938101939093526000602484018190529051600160a060020a039092169263fbeac9c99260448083019360209383900390910190829087803b158015610b4f57600080fd5b505af1158015610b63573d6000803e3d6000fd5b505050506040513d6020811015610b7957600080fd5b50511515610b8357fe5b610acc33838660600151612733565b610b9c33836127e9565b604080514281523031602082015281517f32367fddaa1baa1c6a0fc5c3e8284df724bacc7b50e847c32c9f9765f9f96137929181900390910190a150505050565b6014015190565b600160a060020a0316151590565b6000806000804262093a806008540111151515610c59576040805160e560020a62461bcd02815260206004820152601e60248201527f7061757365206f6e206e6578742077617665206e6f7420657870697265640000604482015290519081900360640190fd5b666a94d74f430000341015610cde576040805160e560020a62461bcd02815260206004820152602160248201527f6d73672e76616c7565206d757374206265203e3d206d696e496e7665736d656e60448201527f7400000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6a1b8b8c9e000e82a480000030311115610d42576040805160e560020a62461bcd02815260206004820152601e60248201527f74686520636f6e7472616374206574682062616c616e6365206c696d69740000604482015290519081900360640190fd5b3360009081526005602052604090205434945060ff16151561124557610d6f8560005b602002015161285a565b8015610e075750600454600160a060020a0316635dbe47e886600060200201516040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610dda57600080fd5b505af1158015610dee573d6000803e3d6000fd5b505050506040513d6020811015610e0457600080fd5b50515b1561124557610e1d601c8563ffffffff6125d516565b600480548751604080517f11302818000000000000000000000000000000000000000000000000000000008152600160a060020a0392831694810194909452602484018590525193965016916311302818916044808201926020929091908290030181600087803b158015610e9157600080fd5b505af1158015610ea5573d6000803e3d6000fd5b505050506040513d6020811015610ebb57600080fd5b50511515610ec557fe5b336000908152600560205260409020805460ff19166001179055610ef0600a8563ffffffff61288816565b6040805142815260208101839052815192965033927f51dd0a60788a76a784e14408dda19543a507171e513d8a1aab1859626c30d448929181900390910190a2610f3b856001610d65565b8015610fd35750600454600160a060020a0316635dbe47e886600160200201516040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b158015610fa657600080fd5b505af1158015610fba573d6000803e3d6000fd5b505050506040513d6020811015610fd057600080fd5b50515b8015610ff1575060208501518551600160a060020a03908116911614155b1561124557611007601e8563ffffffff6125d516565b600454909250600160a060020a031663113028188660016020020151846040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561107657600080fd5b505af115801561108a573d6000803e3d6000fd5b505050506040513d60208110156110a057600080fd5b505115156110aa57fe5b6110b5856002610d65565b801561114d5750600454600160a060020a0316635dbe47e886600260200201516040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561112057600080fd5b505af1158015611134573d6000803e3d6000fd5b505050506040513d602081101561114a57600080fd5b50515b801561116b575060408501518551600160a060020a03908116911614155b801561118c575060408501516020860151600160a060020a03908116911614155b15611245576111a260208563ffffffff6125d516565b600454909150600160a060020a031663113028188660026020020151836040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561121157600080fd5b505af1158015611225573d6000803e3d6000fd5b505050506040513d602081101561123b57600080fd5b5051151561124557fe5b6006546101009004600160a060020a03166108fc6112646018346125d5565b6040518115909202916000818181858888f1935050505015801561128c573d6000803e3d6000fd5b50600754600160a060020a03166108fc6112ad601a3463ffffffff6125d516565b6040518115909202916000818181858888f193505050501580156112d5573d6000803e3d6000fd5b5060048054604080517f5dbe47e8000000000000000000000000000000000000000000000000000000008152339381019390935251600160a060020a0390911691635dbe47e89160248083019260209291908290030181600087803b15801561133d57600080fd5b505af1158015611351573d6000803e3d6000fd5b505050506040513d602081101561136757600080fd5b5051156114155760048054604080517fca0b187800000000000000000000000000000000000000000000000000000000815233938101939093526024830187905251600160a060020a039091169163ca0b18789160448083019260209291908290030181600087803b1580156113dc57600080fd5b505af11580156113f0573d6000803e3d6000fd5b505050506040513d602081101561140657600080fd5b5051151561141057fe5b6114f2565b60048054604080517f0fd0ae1000000000000000000000000000000000000000000000000000000000815233938101939093526024830187905251600160a060020a0390911691630fd0ae109160448083019260209291908290030181600087803b15801561148357600080fd5b505af1158015611497573d6000803e3d6000fd5b505050506040513d60208110156114ad57600080fd5b505115156114b757fe5b6040805142815260208101869052815133927f5299e1ad8e7b5bcb9a8bfb1ce23cc0210bfea47a33518ab518a93fef68427d98928290030190a25b600160035460ff16600181111561150557fe5b14156115ac5760048054604080517f44013585000000000000000000000000000000000000000000000000000000008152339381019390935242602484015251600160a060020a039091169163440135859160448083019260209291908290030181600087803b15801561157857600080fd5b505af115801561158c573d6000803e3d6000fd5b505050506040513d60208110156115a257600080fd5b505115156115ac57fe5b6040805142815260208101869052815133927f28c94178af4152674986540aaca61b18b89f54283f74283ef675a90583339b8f928290030190a2600980546001019055604080514281523031602082015281517f32367fddaa1baa1c6a0fc5c3e8284df724bacc7b50e847c32c9f9765f9f96137929181900390910190a15050505050565b60095481565b600e54600f549091565b6003803360009081526020819052604090205460ff16600381111561166257fe5b148061168b575060033360009081526020819052604090205460ff16600381111561168957fe5b145b15156116d0576040805160e560020a62461bcd02815260206004820152600d602482015260008051602062003365833981519152604482015290519081900360640190fd5b6116e282600160a060020a031661289d565b600754600160a060020a038381169116146117575760078054600160a060020a03841673ffffffffffffffffffffffffffffffffffffffff1990911681179091556040805142815290517fd7f1608e19fd9d15ac7ca872d397878f39039fcda33c52af2536ec2790bde7269181900360200190a25b5050565b601e54601f549091565b666a94d74f43000081565b6003803360009081526020819052604090205460ff16600381111561179157fe5b14806117ba575060033360009081526020819052604090205460ff1660038111156117b857fe5b145b15156117ff576040805160e560020a62461bcd02815260206004820152600d602482015260008051602062003365833981519152604482015290519081900360640190fd5b61181182600160a060020a031661289d565b600654600160a060020a0383811661010090920416146117575760068054600160a060020a038416610100810274ffffffffffffffffffffffffffffffffffffffff0019909216919091179091556040805142815290517f668e88f9d85264651fcdf6de6ef084c112c92cba1fad30510c383c5d1ea1e6919181900360200190a25050565b6010546011549091565b60008060008060004262093a806008540111151515611909576040805160e560020a62461bcd02815260206004820152601e60248201527f7061757365206f6e206e6578742077617665206e6f7420657870697265640000604482015290519081900360640190fd5b6001803360009081526020819052604090205460ff16600381111561192a57fe5b1480611953575060033360009081526020819052604090205460ff16600381111561195157fe5b145b1515611998576040805160e560020a62461bcd02815260206004820152600d602482015260008051602062003365833981519152604482015290519081900360640190fd5b60008060035460ff1660018111156119ac57fe5b14611a01576040805160e560020a62461bcd02815260206004820152601a60248201527f706179206d6f646520646f6573206e6f74207468652073616d65000000000000604482015290519081900360640190fd5b60065460ff1615611a1957611a14612602565b611f03565b60048054604080517f80ac80b00000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216926380ac80b09282820192602092908290030181600087803b158015611a7657600080fd5b505af1158015611a8a573d6000803e3d6000fd5b505050506040513d6020811015611aa057600080fd5b50516002541415611b335760015461a8c0014211611b2e576040805160e560020a62461bcd02815260206004820152602c60248201527f746865206c6174657374207061796d656e7420776173206561726c696572207460448201527f68616e20313220686f7572730000000000000000000000000000000000000000606482015290519081900360840190fd5b426001555b60025460048054604080517f949d225d0000000000000000000000000000000000000000000000000000000081529051939a50600160a060020a039091169263949d225d928281019260209291908290030181600087803b158015611b9757600080fd5b505af1158015611bab573d6000803e3d6000fd5b505050506040513d6020811015611bc157600080fd5b505193505b8387108015611bd6575061c3505a115b15611e645760048054604080517f460d674b0000000000000000000000000000000000000000000000000000000081529283018a905251600160a060020a039091169163460d674b9160248083019260209291908290030181600087803b158015611c4057600080fd5b505af1158015611c54573d6000803e3d6000fd5b505050506040513d6020811015611c6a57600080fd5b505160048054604080517f993d3489000000000000000000000000000000000000000000000000000000008152600160a060020a03808616948201949094528151949750929091169263993d34899260248082019392918290030181600087803b158015611cd757600080fd5b505af1158015611ceb573d6000803e3d6000fd5b505050506040513d6040811015611d0157600080fd5b5080516020909101519096509450611d20600a8763ffffffff6125d516565b955084860130311015611d3f576006805460ff19166001179055611e64565b6000851115611e4f5760048054604080517ffbeac9c9000000000000000000000000000000000000000000000000000000008152600160a060020a03878116948201949094526000602482018190529151939092169263fbeac9c9926044808201936020939283900390910190829087803b158015611dbd57600080fd5b505af1158015611dd1573d6000803e3d6000fd5b505050506040513d6020811015611de757600080fd5b50511515611e3f576040805160e560020a62461bcd02815260206004820152600e60248201527f696e7465726e616c206572726f72000000000000000000000000000000000000604482015290519081900360640190fd5b611e4a838787612733565b611e59565b611e5983876127e9565b600190960195611bc6565b83871415611efd5760048054604080517f80ac80b00000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216926380ac80b09282820192602092908290030181600087803b158015611ec957600080fd5b505af1158015611edd573d6000803e3d6000fd5b505050506040513d6020811015611ef357600080fd5b5051600255611f03565b60028790555b604080514281523031602082015281517f32367fddaa1baa1c6a0fc5c3e8284df724bacc7b50e847c32c9f9765f9f96137929181900390910190a150505050505050565b60048054604080517f949d225d0000000000000000000000000000000000000000000000000000000081529051600093600193600160a060020a03169263949d225d928183019260209282900301818887803b158015611fa657600080fd5b505af1158015611fba573d6000803e3d6000fd5b505050506040513d6020811015611fd057600080fd5b505103905090565b6014546015549091565b600160a060020a031660009081526020819052604090205460ff1690565b6a1b8b8c9e000e82a480000081565b601c54601d549091565b62093a8081565b6006546101009004600160a060020a031681565b6012546013549091565b60035460ff1690565b60015490565b6020546021549091565b601a54601b549091565b6018546019549091565b600a54600b549091565b6003803360009081526020819052604090205460ff16600381111561209657fe5b14806120bf575060033360009081526020819052604090205460ff1660038111156120bd57fe5b145b1515612104576040805160e560020a62461bcd02815260206004820152600d602482015260008051602062003365833981519152604482015290519081900360640190fd5b600382600381111561211257fe5b1115612168576040805160e560020a62461bcd02815260206004820152601360248201527f696e76616c6964206163636573732072616e6b00000000000000000000000000604482015290519081900360640190fd5b6003600160a060020a03841660009081526020819052604090205460ff16600381111561219157fe5b14156121e7576040805160e560020a62461bcd02815260206004820152601e60248201527f63616e6e6f74206368616e67652066756c6c206163636573732072616e6b0000604482015290519081900360640190fd5b8160038111156121f357fe5b600160a060020a03841660009081526020819052604090205460ff16600381111561221a57fe5b146122ab57600160a060020a0383166000908152602081905260409020805483919060ff1916600183600381111561224e57fe5b021790555082600160a060020a03167f281b0406296ed2277e9ec49b1acca0b452581a995e533fa5256a3ce9355f9a6042846040518083815260200182600381111561229657fe5b60ff1681526020019250505060405180910390a25b505050565b600080600080600460009054906101000a9004600160a060020a0316600160a060020a031663743c6775866040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050606060405180830381600087803b15801561232657600080fd5b505af115801561233a573d6000803e3d6000fd5b505050506040513d606081101561235057600080fd5b508051602080830151604093840151600160a060020a03909916600090815260059092529290205490979196955060ff169350915050565b6016546017549091565b600754600160a060020a031681565b600c54600d549091565b60085481565b303190565b6002803360009081526020819052604090205460ff1660038111156123d757fe5b1480612400575060033360009081526020819052604090205460ff1660038111156123fe57fe5b145b1515612445576040805160e560020a62461bcd02815260206004820152600d602482015260008051602062003365833981519152604482015290519081900360640190fd5b60008060035460ff16600181111561245957fe5b146124ae576040805160e560020a62461bcd02815260206004820152601a60248201527f706179206d6f646520646f6573206e6f74207468652073616d65000000000000604482015290519081900360640190fd5b6117576001612900565b6124c0612abc565b600080600080600460009054906101000a9004600160a060020a0316600160a060020a031663634d6e57876040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050608060405180830381600087803b15801561253657600080fd5b505af115801561254a573d6000803e3d6000fd5b505050506040513d608081101561256057600080fd5b508051602080830151604080850151606095860151825160808101845295865293850192909252830152918101919091529695505050505050565b600080838311156125ab57600080fd5b5050900390565b6000808083116125c157600080fd5b82848115156125cc57fe5b04949350505050565b60008115156125e6575060006125fc565b6001830154835483028115156125f857fe5b0490505b92915050565b61260a612ae5565b604051809103906000f080158015612626573d6000803e3d6000fd5b506004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905561265e6000612900565b60048054604080517f80ac80b00000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216926380ac80b09282820192602092908290030181600087803b1580156126bb57600080fd5b505af11580156126cf573d6000803e3d6000fd5b505050506040513d60208110156126e557600080fd5b505160025560006009554260088190556006805460ff1916905560408051918252517fc66870ef5f6257a76295d443e9221488043ec691f830f6c6128755c3518e3c759181900360200190a1565b604051600160a060020a0384169083830180156108fc02916000818181858888f19350505050156122ab5760408051428152602081018490528151600160a060020a038616927f6710e0cad56444677ac916513b384a4acc6501cfb5219f59657ad4ddffef9d60928290030190a260408051428152602081018390528151600160a060020a038616927f8e3ff7e294a4411929d6ec573691ed656c8e5c691be6dc7d776fadb286dbfe82928290030190a2505050565b604051600160a060020a0383169082156108fc029083906000818181858888f19350505050156117575760408051428152602081018390528151600160a060020a038516927f6710e0cad56444677ac916513b384a4acc6501cfb5219f59657ad4ddffef9d60928290030190a25050565b600061286e82600160a060020a0316610be4565b80156125fc5750600160a060020a03821633141592915050565b600061289483836125d5565b90910192915050565b600160a060020a03811615156128fd576040805160e560020a62461bcd02815260206004820152601860248201527f72657175697265206e6f74207a65726f20616464726573730000000000000000604482015290519081900360640190fd5b50565b600181600181111561290e57fe5b1115612964576040805160e560020a62461bcd02815260206004820152601060248201527f696e76616c696420706179206d6f646500000000000000000000000000000000604482015290519081900360640190fd5b60035460ff16600181111561297557fe5b81600181111561298157fe5b141561298c576128fd565b600181600181111561299a57fe5b1415612a1f576001541515612a1f576040805160e560020a62461bcd02815260206004820152602c60248201527f63616e6e6f74207365742070756c6c20706179206d6f6465206966206c61746560448201527f73742074696d6520697320300000000000000000000000000000000000000000606482015290519081900360840190fd5b6000816001811115612a2d57fe5b1415612a395760006001555b6003805482919060ff191660018381811115612a5157fe5b021790555060035460ff166001811115612a6757fe5b6040805142815290517f8f010bfb19c67f04dbb7e355027ff728adb05787d09dd023f42af2e6554449e99181900360200190a250565b6060604051908101604052806003906020820280388339509192915050565b608060405190810160405280600081526020016000815260200160008152602001600081525090565b60405161086e8062002af7833901905600608060405234801561001057600080fd5b5060028054600160a060020a0319163317905560018054906100349082810161003a565b50610084565b81548183558181111561005e5760008381526020902061005e918101908301610063565b505050565b61008191905b8082111561007d5760008155600101610069565b5090565b90565b6107db806100936000396000f3006080604052600436106100b95763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630fd0ae1081146100be57806311302818146100f6578063440135851461011a578063460d674b1461013e5780635dbe47e814610172578063634d6e5714610193578063743c6775146101da57806380ac80b014610219578063949d225d14610240578063993d348914610255578063ca0b18781461028f578063fbeac9c9146102b3575b600080fd5b3480156100ca57600080fd5b506100e2600160a060020a03600435166024356102d7565b604080519115158252519081900360200190f35b34801561010257600080fd5b506100e2600160a060020a03600435166024356103ec565b34801561012657600080fd5b506100e2600160a060020a0360043516602435610491565b34801561014a57600080fd5b5061015660043561052f565b60408051600160a060020a039092168252519081900360200190f35b34801561017e57600080fd5b506100e2600160a060020a036004351661055c565b34801561019f57600080fd5b506101b4600160a060020a0360043516610578565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156101e657600080fd5b506101fb600160a060020a03600435166105a9565b60408051938452602084019290925282820152519081900360600190f35b34801561022557600080fd5b5061022e6105d4565b60408051918252519081900360200190f35b34801561024c57600080fd5b5061022e6105da565b34801561026157600080fd5b50610276600160a060020a03600435166105e0565b6040805192835260208301919091528051918290030190f35b34801561029b57600080fd5b506100e2600160a060020a0360043516602435610606565b3480156102bf57600080fd5b506100e2600160a060020a03600435166024356106aa565b6002546000908190600160a060020a0316331461032c576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610790833981519152604482015290519081900360640190fd5b50600160a060020a038316600090815260208190526040902054801561035557600091506103e5565b600160a060020a0384166000908152602081905260409020600190810184905580549061038490828101610748565b600160a060020a0385166000908152602081905260409020819055600180549192508591839081106103b257fe5b9060005260206000200160006101000a815481600160a060020a030219169083600160a060020a03160217905550600191505b5092915050565b600254600090600160a060020a0316331461043f576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610790833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526020819052604090205415156104665750600061048b565b50600160a060020a038216600090815260208190526040902060030180548201905560015b92915050565b600254600090600160a060020a031633146104e4576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610790833981519152604482015290519081900360640190fd5b600160a060020a038316600090815260208190526040902054151561050b5750600061048b565b50600160a060020a0391909116600090815260208190526040902060020155600190565b60018054600091908390811061054157fe5b600091825260209091200154600160a060020a031692915050565b600160a060020a03166000908152602081905260408120541190565b600160a060020a03166000908152602081905260409020805460018201546002830154600390930154919390929190565b600160a060020a03166000908152602081905260409020600181015460028201546003909201549092565b60015b90565b60015490565b600160a060020a0316600090815260208190526040902060018101546003909101549091565b600254600090600160a060020a03163314610659576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610790833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526020819052604090205415156106805750600061048b565b50600160a060020a0382166000908152602081905260409020600190810180548301905592915050565b600254600090600160a060020a031633146106fd576040805160e560020a62461bcd02815260206004820152600d6024820152600080516020610790833981519152604482015290519081900360640190fd5b600160a060020a03831660009081526020819052604090205415156107245750600061048b565b50600160a060020a0391909116600090815260208190526040902060030155600190565b81548183558181111561076c5760008381526020902061076c918101908301610771565b505050565b6105d791905b8082111561078b5760008155600101610777565b509056006163636573732064656e69656400000000000000000000000000000000000000a165627a7a7230582000e514ff8f1eb7aa95b228d898cc2005fe67b49648b335a6ad55485cf449a75600296163636573732064656e69656400000000000000000000000000000000000000a165627a7a72305820944d689415074095925bb62cdcf92fcfba322688e5c865e5f642c929d54cdb8f0029

Swarm Source

bzzr://00e514ff8f1eb7aa95b228d898cc2005fe67b49648b335a6ad55485cf449a756

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.