ETH Price: $3,484.35 (+2.04%)

Contract

0x58bCbA35086251A1A0d357837A3B2F7479590983
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw82719422019-08-02 15:02:261971 days ago1564758146IN
0x58bCbA35...479590983
0 ETH0.0003838915
Update User Shar...82719382019-08-02 15:01:281971 days ago1564758088IN
0x58bCbA35...479590983
0 ETH0.001755315
Close Cycle82719312019-08-02 15:00:281971 days ago1564758028IN
0x58bCbA35...479590983
0 ETH0.0008393115
Use As Bankroll82717682019-08-02 14:19:411971 days ago1564755581IN
0x58bCbA35...479590983
0 ETH0.0011222820
Deposit82717292019-08-02 14:10:111971 days ago1564755011IN
0x58bCbA35...479590983
0 ETH0.0041021420
Withdraw82716952019-08-02 14:02:241971 days ago1564754544IN
0x58bCbA35...479590983
0 ETH0.0005118620
Update User Shar...82716922019-08-02 14:02:071971 days ago1564754527IN
0x58bCbA35...479590983
0 ETH0.002340420
Close Cycle82716882019-08-02 14:00:581971 days ago1564754458IN
0x58bCbA35...479590983
0 ETH0.0011190820
Use As Bankroll82715182019-08-02 13:20:071971 days ago1564752007IN
0x58bCbA35...479590983
0 ETH0.0011222820
Deposit82714772019-08-02 13:10:441971 days ago1564751444IN
0x58bCbA35...479590983
0 ETH0.003076615
Withdraw82712602019-08-02 12:22:201971 days ago1564748540IN
0x58bCbA35...479590983
0 ETH0.0003838915
Update User Shar...82712582019-08-02 12:21:361971 days ago1564748496IN
0x58bCbA35...479590983
0 ETH0.0017545215
Close Cycle82712552019-08-02 12:20:461971 days ago1564748446IN
0x58bCbA35...479590983
0 ETH0.0008393115
Use As Bankroll82710632019-08-02 11:40:191971 days ago1564746019IN
0x58bCbA35...479590983
0 ETH0.000392797
Deposit82709812019-08-02 11:22:181971 days ago1564744938IN
0x58bCbA35...479590983
0 ETH0.0020510710
Withdraw82701622019-08-02 8:21:541971 days ago1564734114IN
0x58bCbA35...479590983
0 ETH0.0006910127
Update User Shar...82701592019-08-02 8:21:291971 days ago1564734089IN
0x58bCbA35...479590983
0 ETH0.0041392827
Close Cycle82701562019-08-02 8:20:251971 days ago1564734025IN
0x58bCbA35...479590983
0 ETH0.0015107527
Use As Bankroll82699652019-08-02 7:40:101971 days ago1564731610IN
0x58bCbA35...479590983
0 ETH0.0011222820
Deposit82698922019-08-02 7:23:421971 days ago1564730622IN
0x58bCbA35...479590983
0 ETH0.003076615
Withdraw82652462019-08-01 14:03:121972 days ago1564668192IN
0x58bCbA35...479590983
0 ETH0.0005118620
Update User Shar...82652432019-08-01 14:01:521972 days ago1564668112IN
0x58bCbA35...479590983
0 ETH0.0023383220
Close Cycle82652402019-08-01 14:01:291972 days ago1564668089IN
0x58bCbA35...479590983
0 ETH0.0011190820
Use As Bankroll82650392019-08-01 13:20:011972 days ago1564665601IN
0x58bCbA35...479590983
0 ETH0.0008417115
Deposit82650332019-08-01 13:18:591972 days ago1564665539IN
0x58bCbA35...479590983
0 ETH0.0028506415
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
82719422019-08-02 15:02:261971 days ago1564758146
0x58bCbA35...479590983
0 ETH
82719382019-08-02 15:01:281971 days ago1564758088
0x58bCbA35...479590983
0 ETH
82719312019-08-02 15:00:281971 days ago1564758028
0x58bCbA35...479590983
0 ETH
82717682019-08-02 14:19:411971 days ago1564755581
0x58bCbA35...479590983
0 ETH
82717682019-08-02 14:19:411971 days ago1564755581
0x58bCbA35...479590983
0 ETH
82717292019-08-02 14:10:111971 days ago1564755011
0x58bCbA35...479590983
0 ETH
82717292019-08-02 14:10:111971 days ago1564755011
0x58bCbA35...479590983
0 ETH
82716952019-08-02 14:02:241971 days ago1564754544
0x58bCbA35...479590983
0 ETH
82716922019-08-02 14:02:071971 days ago1564754527
0x58bCbA35...479590983
0 ETH
82716882019-08-02 14:00:581971 days ago1564754458
0x58bCbA35...479590983
0 ETH
82715182019-08-02 13:20:071971 days ago1564752007
0x58bCbA35...479590983
0 ETH
82715182019-08-02 13:20:071971 days ago1564752007
0x58bCbA35...479590983
0 ETH
82714772019-08-02 13:10:441971 days ago1564751444
0x58bCbA35...479590983
0 ETH
82714772019-08-02 13:10:441971 days ago1564751444
0x58bCbA35...479590983
0 ETH
82712602019-08-02 12:22:201971 days ago1564748540
0x58bCbA35...479590983
0 ETH
82712582019-08-02 12:21:361971 days ago1564748496
0x58bCbA35...479590983
0 ETH
82712552019-08-02 12:20:461971 days ago1564748446
0x58bCbA35...479590983
0 ETH
82710632019-08-02 11:40:191971 days ago1564746019
0x58bCbA35...479590983
0 ETH
82710632019-08-02 11:40:191971 days ago1564746019
0x58bCbA35...479590983
0 ETH
82709812019-08-02 11:22:181971 days ago1564744938
0x58bCbA35...479590983
0 ETH
82709812019-08-02 11:22:181971 days ago1564744938
0x58bCbA35...479590983
0 ETH
82701622019-08-02 8:21:541971 days ago1564734114
0x58bCbA35...479590983
0 ETH
82701592019-08-02 8:21:291971 days ago1564734089
0x58bCbA35...479590983
0 ETH
82701592019-08-02 8:21:291971 days ago1564734089
0x58bCbA35...479590983
0 ETH
82701562019-08-02 8:20:251971 days ago1564734025
0x58bCbA35...479590983
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BankrollLending

Compiler Version
v0.5.10+commit.5a6ea5b1

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2019-07-17
*/

/**
 * Do not send tokens to this contract directly!
 * 
 * Allows EDG token holders to lend the Edgeless Casino tokens for the bankroll.
 * Users may pay in their tokens at any time, but they will only be used for the bankroll
 * begining from the next cycle. When the cycle is closed, they may
 * withdraw their stake of the bankroll. The casino may decide to limit the number of tokens
 * used for the bankroll.
 * Non-withdrawn tokens after cycle is finished is not automaticaly staked for the next round,
 * but they can be withdrawn by staker in any time.
 * author: Rytis Grincevicius <[email protected]>
 * */

pragma solidity ^0.5.10;

contract Token {
  function transfer(address receiver, uint amount) public returns(bool);
  function transferFrom(address sender, address receiver, uint amount) public returns(bool);
  function balanceOf(address holder) public view returns(uint);
}

contract Casino {
  mapping(address => bool) public authorized;
}

contract Owned {
  address public owner;
  modifier onlyOwner {
    require(msg.sender == owner);
    _;
  }

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

  function changeOwner(address newOwner) onlyOwner public {
    owner = newOwner;
  }
}

contract SafeMath {

	function safeSub(uint a, uint b) pure internal returns(uint) {
		assert(b <= a);
		return a - b;
	}

	function safeAdd(uint a, uint b) pure internal returns(uint) {
		uint c = a + b;
		assert(c >= a && c >= b);
		return c;
	}

	function safeMul(uint a, uint b) pure internal returns (uint) {
    uint c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }
}

contract BankrollLending is Owned, SafeMath {
  struct CycleData {
      /** How musch stakers we got in this cycle */
      uint numHolders;
      /** Total staked amount */
      uint initialStakes;
      /** Amount received from bankroll (staked + 40% of bankroll surpluss) */
      uint finalStakes;
      /** Amount distributed to stakers for withdrawals. It decreases when user withdraws. */
      uint totalStakes;
      /** Last staker wallet index that had his share distributed */
      uint lastUpdateIndex;
      /** Amount of balance to return to bankroll. (If all stakers are ranked VIP then this amount should be 0) */
      uint returnToBankroll;
      /** Allows withdrawals when set to true */
      bool sharesDistributed;
      /** Stakers address to Staker struct */
      mapping(address => Staker) addressToStaker;
      /** staker address to available staker balance */
      mapping(address => uint) addressToBalance;
      /** Index to staker address */
      address[] indexToAddress;
  }
  struct Staker {
    /** Index of staker */
    uint stakeIndex;
    /** Staker rank */
    StakingRank rank;
    /** How much staked for this stake round */
    uint staked;
    /** How much staker payout was for stake round */
    uint payout;
  }
  /** The set of lending contracts state phases **/
  enum StakingPhases { deposit, bankroll }
  /** The set of staking ranks **/
  enum StakingRank { vip, gold, silver }
  /** The number of the current cycle. Increases by 1 each round.**/
  uint public cycle;
  /** Cycle data */
  mapping(uint => CycleData) public cycleToData;
  /** Phase of current round */
  StakingPhases public phase; 
  /** The address of the casino contract.**/
  Casino public casino;
  /** The Edgeless casino token contract **/
  Token public token;
  /** Previuos staking contract **/
  address public predecessor;
  /** Wallet to return bankroll surplus share of stakers who doesnt get all 100% */
  address public returnBankrollTo;
  /** The minimum staking amount required **/
  uint public minStakingAmount;
  /** The maximum number of addresses to process in one batch of stake updates **/
  uint public maxUpdates; 
  /** Marks contract as paused. */
  bool public paused;
  /** Share of vip rank */
  uint vipRankShare;
  /** Share of gold rank */
  uint goldRankShare;
  /** Share of silver rank */
  uint silverRankShare;
  
  /** notifies listeners about a stake update **/
  event StakeUpdate(address holder, uint stake);

  /**
   * Constructor.
   * @param tokenAddr the address of the edgeless token contract
   *        casinoAddr the address of the edgeless casino contract
   *        predecessorAdr the address of the previous bankroll lending contract.
   * */
  constructor(address tokenAddr, address casinoAddr, address predecessorAdr) public {
    token = Token(tokenAddr);
    casino = Casino(casinoAddr);
    predecessor = predecessorAdr;
    returnBankrollTo = casinoAddr;
    maxUpdates = 5;
    cycle = 90;
    
    vipRankShare = 1000;
    goldRankShare = 500;
    silverRankShare = 125;
  }
  
  /**
   * Changes share of specified ranks that would be assigned from bankroll surpluss.
   * @param _rank   staking rank (0 - vip, 1 - gold, 2 - silver)
   * @param _share  share 0 - 1000, 1000 is 100%.
   */
  function setStakingRankShare(StakingRank _rank, uint _share) public onlyOwner {
    if (_rank == StakingRank.vip) {
        vipRankShare = _share;
    } else if (_rank == StakingRank.gold) {
        goldRankShare = _share;
    } else if (_rank == StakingRank.silver) {
        silverRankShare = _share;
    }
  }
  
  /**
   * Get share of staking rank.
   * @param _rank staking rank  (0 - vip, 1 - gold, 2 - silver)
   * @return share 0 - 1000, 1000 is 100%
   */
  function getStakingRankShare(StakingRank _rank) public view returns (uint) {
   if (_rank == StakingRank.vip) {
       return vipRankShare;
    } else if (_rank == StakingRank.gold) {
       return goldRankShare;
    } else if (_rank == StakingRank.silver) {
       return silverRankShare;
    }
    return 0;
  }
  
  /**
   * Allows authorized wallet to change stakers VIP ranking for current round.
   * @param _address stakers wallet address
   * @param _rank new vip rank of staker. (0 - vip, 1 - gold, 2 - silver)
   */
  function setStakerRank(address _address, StakingRank _rank) public onlyAuthorized {
      Staker storage _staker = cycleToData[cycle].addressToStaker[_address];
      require(_staker.staked > 0, "Staker not staked.");
      _staker.rank = _rank;
  }
  
  /**
   * Allows owner to change returnBankrollTo address
   * @param _address address to send tokens to
   */
  function setReturnBankrollTo(address _address) public onlyOwner {
      returnBankrollTo = _address;
  }
  
  /**
   * Pause contract so it would not allow to make new deposits.
   */
  function setPaused() public onlyOwner onlyActive {
      paused = true;
  }
  
  /**
   * Enable deposits.
   */ 
  function setActive() public onlyOwner onlyPaused {
      paused = false;
  }
  
  /**
   * Allows staker to withdraw staked amount + bankroll share of previous round.
   * @param _receiver address withdraw tokens to
   */
  function withdraw(address _receiver) public {
      makeWithdrawal(msg.sender, _receiver, safeSub(cycle, 1));
  }
  
  /**
   * Allows staker to withdraw staked amount + bankroll share of previous round.
   * @param _cycle cycle index from which to withdraw.
   * @param _receiver address withdraw tokens to
   */
  function withdraw(address _receiver, uint _cycle) public {
      makeWithdrawal(msg.sender, _receiver, _cycle);
  }
  
  /**
   * Allow authorized wallet to withdraw stakers balance back to stakers wallet.
   * @param _address    staker address
   * @param _cycle      cycle index from which to withdraw.
   */
  function withdrawFor(address _address, uint _cycle) public onlyAuthorized {
      makeWithdrawal(_address, _address, _cycle);
  }
  
  /**
   * Send collected stakes to casino contract and advance staking to bankroll phase.
   */
  function useAsBankroll() public onlyAuthorized depositPhase {
      CycleData storage _cycle = cycleToData[cycle];
      _cycle.initialStakes = _cycle.totalStakes;
      _cycle.totalStakes = 0;
      assert(token.transfer(address(casino), _cycle.initialStakes));
      phase = StakingPhases.bankroll;
  }
  
  /**
   * Closes staking round with amount to distribute and creates new round with deposit phase.
   * @param _finalStakes    Token amount (0 decimals) of amount to be distributed for stakers. (Staked amount + 40% casino surpluss)
   */
  function closeCycle(uint _finalStakes) public onlyAuthorized bankrollPhase {
      CycleData storage _cycle = cycleToData[cycle];
      _cycle.finalStakes = _finalStakes;
      cycle = safeAdd(cycle, 1);
      phase = StakingPhases.deposit;
  }
  
  /**
   * Distributes user shares for previous round.
   */
  function updateUserShares() public onlyAuthorized {
      _updateUserShares(cycle - 1);
  }

  /**
   * Distributes user shares for selected finished round.
   * @param _cycleIndex Index of cycle to update shares.
   */
  function updateUserShares(uint _cycleIndex) public onlyAuthorized {
      _updateUserShares(_cycleIndex);
  }
  
  /**
   * Allows to deposit tokens to staking. Wallet must approve staking contract to transfer its tokens.
   * Transfaction must be signed by authorized wallet to confirm rank and allowance.
   */
  function deposit(uint _value, StakingRank _rank, uint _allowedMax, uint8 v, bytes32 r, bytes32 s) public depositPhase onlyActive {
      require(verifySignature(msg.sender, _allowedMax, _rank, v, r, s));
      makeDeposit(msg.sender, _value, _rank, _allowedMax);
  }
  
  /**
   * Allow authorized wallet to deposit on wallet behalft. Wallet must approve staking contract to transfer its tokens.
   */
  function depositFor(address _address, uint _value, StakingRank _rank, uint _allowedMax) public depositPhase onlyActive onlyAuthorized {
      makeDeposit(_address, _value, _rank, _allowedMax);
  }
  
  /**
   * Holders of current staking round.
   */
  function numHolders() public view returns (uint) {
      return cycleToData[cycle].numHolders;
  }
  
  /**
   * Get holder address by index.
   * @param _index staker index in array.
   */ 
  function stakeholders(uint _index) public view returns (address) {
      return stakeholders(cycle, _index);
  }
  
  /**
   * Get holder balance by address.
   * @param _address staker address.
   */ 
  function stakes(address _address) public view returns (uint) {
      return stakes(cycle, _address);
  }
  
  /**
   * Get holder information by address.
   * @param _address staker address.
   */ 
  function staker(address _address) public view returns (uint stakeIndex, StakingRank rank, uint staked, uint payout) {
      return staker(cycle, _address);
  }
  
  /**
   * Returns token amount staked to contract
   */
  function totalStakes() public view returns (uint) {
      return totalStakes(cycle);
  }
  
  /**
   * Returns token amount of initial stakes
   */
  function initialStakes() public view returns (uint) {
      return initialStakes(cycle);
  }
  
   /**
   * Get holder address by cycle and index.
   * @param _cycle cycle to look
   * @param _index staker index in array.
   */ 
  function stakeholders(uint _cycle, uint _index) public view returns (address) {
      return cycleToData[_cycle].indexToAddress[_index];
  }
  
  /**
   * Returns available EDG balance of staker.
   * @param _cycle cycle index to look
   * @param _address staker address
   */
  function stakes(uint _cycle, address _address) public view returns (uint) {
      return cycleToData[_cycle].addressToBalance[_address];
  }

  /**
   * Returns info about staker in round. 
   * @param _cycle cycle index to look
   * @param _address staker address
   */
  function staker(uint _cycle, address _address) public view returns (uint stakeIndex, StakingRank rank, uint staked, uint payout ) {
      Staker memory _s = cycleToData[_cycle].addressToStaker[_address];
      return (_s.stakeIndex, _s.rank, _s.staked, _s.payout);
  }
  
  /**
   * Returns token amount staked to contract
   * @param _cycle cycle index to look
   */
  function totalStakes(uint _cycle) public view returns (uint) {
      return cycleToData[_cycle].totalStakes;
  }
  
  /**
   * Returns token amount of initial stakes
   * @param _cycle cycle index to look
   */
  function initialStakes(uint _cycle) public view returns (uint) {
      return cycleToData[_cycle].initialStakes;
  }
  
  /**
   * Returns token amount of final stakes
   * @param _cycle cycle index to look
   */
  function finalStakes(uint _cycle) public view returns (uint) {
      return cycleToData[_cycle].finalStakes;
  }

  /**
   * Sets the casino contract address.
   * @param casinoAddr the new casino contract address
   * */
  function setCasinoAddress(address casinoAddr) public onlyOwner {
    casino = Casino(casinoAddr);
  }
  
  /**
   * Sets the maximum number of user stakes to update at once
   * @param newMax the new maximum
   * */
  function setMaxUpdates(uint newMax) public onlyAuthorized {
    maxUpdates = newMax;
  }
  
  /**
   * Sets the minimum amount of user stakes
   * @param amount the new minimum
   * */
  function setMinStakingAmount(uint amount) public onlyAuthorized {
    minStakingAmount = amount;
  }

  /**
  * Closes the contract in state of emergency or on contract update.
  * Transfers all tokens held by the contract to the owner before doing so.
  **/
  function kill() public onlyOwner {
    assert(token.transfer(owner, tokenBalance()));
    selfdestruct(address(uint160(owner)));
  }

  /**
  * @return the current token balance of the contract.
  * */
  function tokenBalance() public view returns(uint) {
    return token.balanceOf(address(this));
  }
  
  /**
   * Withdrawal logic. Withdraws all balance from stakers staking contract and transfers to his deposit wallet.
   * @param _address    staker address for which to withdraw
   * @param _receiver   address withdraw to.
   * @param _cycle      cycle index from which to withdraw.
   */
  function makeWithdrawal(address _address, address _receiver, uint _cycle) internal {
      require(_cycle < cycle, "Withdrawal possible only for finished rounds.");
      CycleData storage _cycleData = cycleToData[_cycle];
      require(_cycleData.sharesDistributed == true, "All user shares must be distributed to stakeholders first.");
      uint _balance = _cycleData.addressToBalance[_address];
      require(_balance > 0, "Staker doesn't have balance.");
      _cycleData.addressToBalance[_address] = 0;
      _cycleData.totalStakes = safeSub(_cycleData.totalStakes, _balance);
      emit StakeUpdate(_address, 0);
      assert(token.transfer(_receiver, _balance));
  }
  
  
  /**
   * Calculates and distributes shares for stakers.
   * When all staker shares distributed it sets cycleToData[cycle].sharesDistributed to true and unlocks withdrawals.
   * @param _cycleIndex round index for which calculations should be made.
   */
  function _updateUserShares(uint _cycleIndex) internal {
      require(cycle > 0 && cycle > _cycleIndex, "You can't distribute shares of previous cycle when there isn't any.");
      CycleData storage _cycle = cycleToData[_cycleIndex];
      require(_cycle.sharesDistributed == false, "Shares already distributed.");
      uint limit = safeAdd(_cycle.lastUpdateIndex, maxUpdates);
      if (limit >= _cycle.numHolders) {
          limit = _cycle.numHolders;
      }
      address _address;
      uint _payout;
      uint _totalStakes = _cycle.totalStakes;
      for (uint i = _cycle.lastUpdateIndex; i < limit; i++) {
          _address = _cycle.indexToAddress[i];
          Staker storage _staker = _cycle.addressToStaker[_address];
          _payout = computeFinalStake(_staker.staked, _staker.rank, _cycle);
          _staker.payout = _payout;
          _cycle.addressToBalance[_address] = _payout;
          _totalStakes = safeAdd(_totalStakes, _payout);
          emit StakeUpdate(_address, _payout);
      }
      _cycle.totalStakes = _totalStakes;
      _cycle.lastUpdateIndex = limit;
      if (limit >= _cycle.numHolders) {
          if (_cycle.finalStakes > _cycle.totalStakes) {
            _cycle.returnToBankroll = safeSub(_cycle.finalStakes, _cycle.totalStakes);
            if (_cycle.returnToBankroll > 0) {
                assert(token.transfer(returnBankrollTo, _cycle.returnToBankroll));
            }
          }
          _cycle.sharesDistributed = true;
      }
  }
  
   /**
    * Calculates stakers profit / loss.
    * @param _initialStake how much holder initialy staked for the round
    * @param _vipRank vip rank of the holder
    * @param _cycleData data of the cycle
    */
   function computeFinalStake(uint _initialStake, StakingRank _vipRank, CycleData storage _cycleData) internal view returns(uint) {
       if (_cycleData.finalStakes >= _cycleData.initialStakes) {
        uint profit = ((_initialStake * _cycleData.finalStakes / _cycleData.initialStakes) - _initialStake) * getStakingRankShare(_vipRank) / 1000;
        return _initialStake + profit;
      } else {
        uint loss = (_initialStake - (_initialStake * _cycleData.finalStakes / _cycleData.initialStakes));
        return _initialStake - loss;
      }
    }
    
   /**
    * Deposit logic.
    * @param _address holder address
    * @param _value how much to deposit
    * @param _rank vip rank to set for holder
    * @param _allowedMax what is maximum total deposit for the holder
    */
   function makeDeposit(address _address, uint _value, StakingRank _rank, uint _allowedMax) internal {
       require(_value > 0);
       CycleData storage _cycle = cycleToData[cycle];
       uint _balance = _cycle.addressToBalance[_address];
       uint newStake = safeAdd(_balance, _value);
       require(newStake >= minStakingAmount);
       if(_allowedMax > 0){ //if allowedMax > 0 the caller is the user himself
           require(newStake <= _allowedMax);
           assert(token.transferFrom(_address, address(this), _value));
       }
       Staker storage _staker = _cycle.addressToStaker[_address];
       
       if (_cycle.addressToBalance[_address] == 0) {
           uint _numHolders = _cycle.indexToAddress.push(_address);
           _cycle.numHolders = _numHolders;
           _staker.stakeIndex = safeSub(_numHolders, 1);
       }
       
       _cycle.addressToBalance[_address] = newStake;
       _staker.staked = newStake;
       _staker.rank = _rank;
       
       _cycle.totalStakes = safeAdd(_cycle.totalStakes, _value);
       
       emit StakeUpdate(_address, newStake);
   }

  /**
   * verifies if the withdrawal request was signed by an authorized wallet
   * @param to      the receiver address
   *        value   the number of tokens
   *        rank    the vip rank
   *        v, r, s the signature of an authorized wallet
   * */
  function verifySignature(address to, uint value, StakingRank rank, uint8 v, bytes32 r, bytes32 s) internal view returns(bool) {
    address signer = ecrecover(keccak256(abi.encodePacked(to, value, rank, cycle)), v, r, s);
    return casino.authorized(signer);
  }
  
  //check if the sender is an authorized casino wallet
  modifier onlyAuthorized {
    require(casino.authorized(msg.sender), "Only authorized wallet can request this method.");
    _;
  }

  modifier depositPhase {
    require(phase == StakingPhases.deposit, "Method can be run only in deposit phase.");
    _;
  }

  modifier bankrollPhase {
    require(phase == StakingPhases.bankroll, "Method can be run only in bankroll phase.");
    _;
  }
  
  modifier onlyActive() {
    require(paused == false, "Contract is paused.");
    _;
  }
  
  modifier onlyPaused() {
    require(paused == true, "Contract is not paused.");
    _;
  }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"initialStakes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"stakes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"stakeholders","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minStakingAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"updateUserShares","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_rank","type":"uint8"}],"name":"setStakerRank","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setPaused","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_finalStakes","type":"uint256"}],"name":"closeCycle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_cycle","type":"uint256"}],"name":"totalStakes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_cycle","type":"uint256"},{"name":"_index","type":"uint256"}],"name":"stakeholders","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_value","type":"uint256"},{"name":"_rank","type":"uint8"},{"name":"_allowedMax","type":"uint256"}],"name":"depositFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_receiver","type":"address"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_cycle","type":"uint256"},{"name":"_address","type":"address"}],"name":"staker","outputs":[{"name":"stakeIndex","type":"uint256"},{"name":"rank","type":"uint8"},{"name":"staked","type":"uint256"},{"name":"payout","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"setMinStakingAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cycle","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_cycle","type":"uint256"}],"name":"finalStakes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"setActive","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxUpdates","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"staker","outputs":[{"name":"stakeIndex","type":"uint256"},{"name":"rank","type":"uint8"},{"name":"staked","type":"uint256"},{"name":"payout","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newMax","type":"uint256"}],"name":"setMaxUpdates","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"returnBankrollTo","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setReturnBankrollTo","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"casino","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_cycle","type":"uint256"},{"name":"_address","type":"address"}],"name":"stakes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"phase","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_rank","type":"uint8"},{"name":"_share","type":"uint256"}],"name":"setStakingRankShare","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"predecessor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalStakes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"numHolders","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"cycleToData","outputs":[{"name":"numHolders","type":"uint256"},{"name":"initialStakes","type":"uint256"},{"name":"finalStakes","type":"uint256"},{"name":"totalStakes","type":"uint256"},{"name":"lastUpdateIndex","type":"uint256"},{"name":"returnToBankroll","type":"uint256"},{"name":"sharesDistributed","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_cycle","type":"uint256"}],"name":"withdrawFor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_value","type":"uint256"},{"name":"_rank","type":"uint8"},{"name":"_allowedMax","type":"uint256"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_cycleIndex","type":"uint256"}],"name":"updateUserShares","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_cycle","type":"uint256"}],"name":"initialStakes","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"useAsBankroll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_receiver","type":"address"},{"name":"_cycle","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_rank","type":"uint8"}],"name":"getStakingRankShare","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"casinoAddr","type":"address"}],"name":"setCasinoAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"tokenAddr","type":"address"},{"name":"casinoAddr","type":"address"},{"name":"predecessorAdr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"holder","type":"address"},{"indexed":false,"name":"stake","type":"uint256"}],"name":"StakeUpdate","type":"event"}]

608060405234801561001057600080fd5b506040516123473803806123478339818101604052606081101561003357600080fd5b508051602082015160409092015160008054336001600160a01b03199182161782556004805482166001600160a01b0395861617905560038054610100600160a81b0319166101009686169687021790556005805482169490931693909317825560068054909316909317909155600855605a6001556103e8600a556101f4600b55607d600c5561227d9081906100ca90396000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c806390e2160a11610151578063cc642cc2116100c3578063e7dbc90311610087578063e7dbc903146106f9578063eecb700514610716578063f3fef3a31461071e578063f78bb1fa1461074a578063fc0c546a1461076a578063ff55e2ee1461077257610274565b8063cc642cc214610611578063d43b732514610619578063db518db214610670578063dddc2f641461069c578063e67aa415146106dc57610274565b8063a6f9dae111610115578063a6f9dae11461055d578063a9a3bba414610583578063b1c9fe6e146105af578063b204fa28146105db578063b719d03214610601578063bf9befb11461060957610274565b806390e2160a14610502578063920ec6441461051f57806392320684146105275780639403e8dd1461054d5780639e1a4d191461055557610274565b806351782a72116101ea5780636190c9d5116101ae5780636190c9d51461049f57806369334eeb146104a7578063760a8c2a146104c4578063773b5b5e146104cc57806382e4eda4146104d45780638da5cb5b146104fa57610274565b806351782a72146103a057806351cff8d9146103db5780635983f7cd146104015780635c975abb14610466578063612d669e1461048257610274565b806334f3ea671161023c57806334f3ea671461030457806337a66d85146103335780633f6fff4e1461033b578063402822521461035857806341c0e1b5146103755780634fd70e7f1461037d57610274565b806308611a581461027957806316934fc4146102935780631d6b8b72146102b957806325c065b1146102f25780632da39239146102fa575b600080fd5b610281610798565b60408051918252519081900360200190f35b610281600480360360208110156102a957600080fd5b50356001600160a01b03166107aa565b6102d6600480360360208110156102cf57600080fd5b50356107c0565b604080516001600160a01b039092168252519081900360200190f35b6102816107ce565b6103026107d4565b005b6103026004803603604081101561031a57600080fd5b5080356001600160a01b0316906020013560ff16610899565b6103026109e8565b6103026004803603602081101561035157600080fd5b5035610a5c565b6102816004803603602081101561036e57600080fd5b5035610b9b565b610302610bb0565b6102d66004803603604081101561039357600080fd5b5080359060200135610c77565b610302600480360360808110156103b657600080fd5b506001600160a01b038135169060208101359060ff6040820135169060600135610cb0565b610302600480360360208110156103f157600080fd5b50356001600160a01b0316610e15565b61042d6004803603604081101561041757600080fd5b50803590602001356001600160a01b0316610e2f565b6040518085815260200184600281111561044357fe5b60ff16815260200183815260200182815260200194505050505060405180910390f35b61046e610ed5565b604080519115158252519081900360200190f35b6103026004803603602081101561049857600080fd5b5035610ede565b610281610f99565b610281600480360360208110156104bd57600080fd5b5035610f9f565b610302610fb5565b610281611034565b61042d600480360360208110156104ea57600080fd5b50356001600160a01b031661103a565b6102d661105b565b6103026004803603602081101561051857600080fd5b503561106a565b6102d6611125565b6103026004803603602081101561053d57600080fd5b50356001600160a01b0316611134565b6102d661116d565b610281611181565b6103026004803603602081101561057357600080fd5b50356001600160a01b0316611201565b6102816004803603604081101561059957600080fd5b50803590602001356001600160a01b031661123a565b6105b7611266565b604051808260018111156105c757fe5b60ff16815260200191505060405180910390f35b610302600480360360408110156105f157600080fd5b5060ff813516906020013561126f565b6102d66112e0565b6102816112ef565b6102816112fc565b6106366004803603602081101561062f57600080fd5b5035611311565b604080519788526020880196909652868601949094526060860192909252608085015260a0840152151560c0830152519081900360e00190f35b6103026004803603604081101561068657600080fd5b506001600160a01b038135169060200135611351565b610302600480360360c08110156106b257600080fd5b5080359060ff60208201358116916040810135916060820135169060808101359060a00135611412565b610302600480360360208110156106f257600080fd5b50356114da565b6102816004803603602081101561070f57600080fd5b5035611599565b6103026115ae565b6103026004803603604081101561073457600080fd5b506001600160a01b038135169060200135611777565b6102816004803603602081101561076057600080fd5b503560ff16611782565b6102d66117e2565b6103026004803603602081101561078857600080fd5b50356001600160a01b03166117f1565b60006107a5600154611599565b905090565b60006107b86001548361123a565b90505b919050565b60006107b860015483610c77565b60075481565b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b15801561082357600080fd5b505afa158015610837573d6000803e3d6000fd5b505050506040513d602081101561084d57600080fd5b505161088a5760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b6108976001805403611830565b565b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b1580156108e857600080fd5b505afa1580156108fc573d6000803e3d6000fd5b505050506040513d602081101561091257600080fd5b505161094f5760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b60015460009081526002602081815260408084206001600160a01b0387168552600701909152909120908101546109c2576040805162461bcd60e51b815260206004820152601260248201527129ba30b5b2b9103737ba1039ba30b5b2b21760711b604482015290519081900360640190fd5b60018082018054849260ff19909116908360028111156109de57fe5b0217905550505050565b6000546001600160a01b031633146109ff57600080fd5b60095460ff1615610a4d576040805162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903830bab9b2b21760691b604482015290519081900360640190fd5b6009805460ff19166001179055565b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b158015610aab57600080fd5b505afa158015610abf573d6000803e3d6000fd5b505050506040513d6020811015610ad557600080fd5b5051610b125760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b600160035460ff166001811115610b2557fe5b14610b615760405162461bcd60e51b81526004018080602001828103825260298152602001806121e66029913960400191505060405180910390fd5b60018054600090815260026020819052604090912090810183905581549091610b8a9190611ade565b60015550506003805460ff19169055565b60009081526002602052604090206003015490565b6000546001600160a01b03163314610bc757600080fd5b6004546000546001600160a01b039182169163a9059cbb9116610be8611181565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610c3757600080fd5b505af1158015610c4b573d6000803e3d6000fd5b505050506040513d6020811015610c6157600080fd5b5051610c6957fe5b6000546001600160a01b0316ff5b6000828152600260205260408120600901805483908110610c9457fe5b6000918252602090912001546001600160a01b03169392505050565b600060035460ff166001811115610cc357fe5b14610cff5760405162461bcd60e51b815260040180806020018281038252602881526020018061214c6028913960400191505060405180910390fd5b60095460ff1615610d4d576040805162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903830bab9b2b21760691b604482015290519081900360640190fd5b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b158015610d9c57600080fd5b505afa158015610db0573d6000803e3d6000fd5b505050506040513d6020811015610dc657600080fd5b5051610e035760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b610e0f84848484611b00565b50505050565b610e2c3382610e276001546001611d13565b611d25565b50565b600080600080610e3d6120f5565b60008781526002602081815260408084206001600160a01b038b16855260070182529283902083516080810190945280548452600181015490929184019160ff90911690811115610e8a57fe5b6002811115610e9557fe5b8152602001600282015481526020016003820154815250509050806000015181602001518260400151836060015194509450945094505092959194509250565b60095460ff1681565b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b158015610f2d57600080fd5b505afa158015610f41573d6000803e3d6000fd5b505050506040513d6020811015610f5757600080fd5b5051610f945760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b600755565b60015481565b6000908152600260208190526040909120015490565b6000546001600160a01b03163314610fcc57600080fd5b60095460ff161515600114611028576040805162461bcd60e51b815260206004820152601760248201527f436f6e7472616374206973206e6f74207061757365642e000000000000000000604482015290519081900360640190fd5b6009805460ff19169055565b60085481565b60008060008061104c60015486610e2f565b93509350935093509193509193565b6000546001600160a01b031681565b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b1580156110b957600080fd5b505afa1580156110cd573d6000803e3d6000fd5b505050506040513d60208110156110e357600080fd5b50516111205760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b600855565b6006546001600160a01b031681565b6000546001600160a01b0316331461114b57600080fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60035461010090046001600160a01b031681565b60048054604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b1580156111d057600080fd5b505afa1580156111e4573d6000803e3d6000fd5b505050506040513d60208110156111fa57600080fd5b5051905090565b6000546001600160a01b0316331461121857600080fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526002602090815260408083206001600160a01b038516845260080190915290205492915050565b60035460ff1681565b6000546001600160a01b0316331461128657600080fd5b600082600281111561129457fe5b14156112a457600a8190556112dc565b60018260028111156112b257fe5b14156112c257600b8190556112dc565b60028260028111156112d057fe5b14156112dc57600c8190555b5050565b6005546001600160a01b031681565b60006107a5600154610b9b565b60015460009081526002602052604090205490565b6002602081905260009182526040909120805460018201549282015460038301546004840154600585015460069095015493959492939192909160ff1687565b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b1580156113a057600080fd5b505afa1580156113b4573d6000803e3d6000fd5b505050506040513d60208110156113ca57600080fd5b50516114075760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b6112dc828383611d25565b600060035460ff16600181111561142557fe5b146114615760405162461bcd60e51b815260040180806020018281038252602881526020018061214c6028913960400191505060405180910390fd5b60095460ff16156114af576040805162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903830bab9b2b21760691b604482015290519081900360640190fd5b6114bd338587868686611f2e565b6114c657600080fd5b6114d233878787611b00565b505050505050565b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b15801561152957600080fd5b505afa15801561153d573d6000803e3d6000fd5b505050506040513d602081101561155357600080fd5b50516115905760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b610e2c81611830565b60009081526002602052604090206001015490565b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b1580156115fd57600080fd5b505afa158015611611573d6000803e3d6000fd5b505050506040513d602081101561162757600080fd5b50516116645760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b600060035460ff16600181111561167757fe5b146116b35760405162461bcd60e51b815260040180806020018281038252602881526020018061214c6028913960400191505060405180910390fd5b60018054600090815260026020908152604080832060038082018054968301879055859055600480549154845163a9059cbb60e01b81526001600160a01b03610100909204821692810192909252602482019790975292519195169363a9059cbb93604480850194919392918390030190829087803b15801561173557600080fd5b505af1158015611749573d6000803e3d6000fd5b505050506040513d602081101561175f57600080fd5b505161176757fe5b506003805460ff19166001179055565b6112dc338383611d25565b60008082600281111561179157fe5b14156117a05750600a546107bb565b60018260028111156117ae57fe5b14156117bd5750600b546107bb565b60028260028111156117cb57fe5b14156117da5750600c546107bb565b506000919050565b6004546001600160a01b031681565b6000546001600160a01b0316331461180857600080fd5b600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000600154118015611843575080600154115b61187e5760405162461bcd60e51b81526004018080602001828103825260438152602001806121746043913960600191505060405180910390fd5b6000818152600260205260409020600681015460ff16156118e6576040805162461bcd60e51b815260206004820152601b60248201527f53686172657320616c72656164792064697374726962757465642e0000000000604482015290519081900360640190fd5b60006118f88260040154600854611ade565b82549091508110611907575080545b6003820154600483015460009182915b848110156119f15785600901818154811061192e57fe5b60009182526020808320909101546001600160a01b0316808352600789019091526040909120600281015460018201549296509091611971919060ff1689612089565b600382018190556001600160a01b0386166000908152600889016020526040902081905593506119a18385611ade565b604080516001600160a01b03881681526020810187905281519295507f89dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd78929081900390910190a150600101611917565b506003850181905560048501849055845484106114d257846003015485600201541115611ac757611a2a85600201548660030154611d13565b6005860181905515611ac7576004805460065460058801546040805163a9059cbb60e01b81526001600160a01b039384169581019590955260248501919091525191169163a9059cbb9160448083019260209291908290030181600087803b158015611a9557600080fd5b505af1158015611aa9573d6000803e3d6000fd5b505050506040513d6020811015611abf57600080fd5b5051611ac757fe5b60068501805460ff19166001179055505050505050565b6000828201838110801590611af35750828110155b611af957fe5b9392505050565b60008311611b0d57600080fd5b60015460009081526002602090815260408083206001600160a01b0388168452600881019092528220549091611b438287611ade565b9050600754811015611b5457600080fd5b8315611bf95783811115611b6757600080fd5b60048054604080516323b872dd60e01b81526001600160a01b038b811694820194909452306024820152604481018a9052905192909116916323b872dd916064808201926020929091908290030181600087803b158015611bc757600080fd5b505af1158015611bdb573d6000803e3d6000fd5b505050506040513d6020811015611bf157600080fd5b5051611bf957fe5b6001600160a01b038716600090815260078401602090815260408083206008870190925290912054611c6b5760098401805460018082018084556000938452602090932090910180546001600160a01b0319166001600160a01b038c16179055818655611c67908290611d13565b8255505b6001600160a01b038816600090815260088501602052604090208290556002808201839055600180830180548993919260ff19909116918490811115611cad57fe5b0217905550611cc0846003015488611ade565b6003850155604080516001600160a01b038a1681526020810184905281517f89dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd78929181900390910190a15050505050505050565b600082821115611d1f57fe5b50900390565b6001548110611d655760405162461bcd60e51b815260040180806020018281038252602d81526020018061211f602d913960400191505060405180910390fd5b6000818152600260205260409020600681015460ff161515600114611dbb5760405162461bcd60e51b815260040180806020018281038252603a81526020018061220f603a913960400191505060405180910390fd5b6001600160a01b038416600090815260088201602052604090205480611e28576040805162461bcd60e51b815260206004820152601c60248201527f5374616b657220646f65736e277420686176652062616c616e63652e00000000604482015290519081900360640190fd5b6001600160a01b03851660009081526008830160205260408120556003820154611e529082611d13565b6003830155604080516001600160a01b03871681526000602082015281517f89dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd78929181900390910190a1600480546040805163a9059cbb60e01b81526001600160a01b0388811694820194909452602481018590529051929091169163a9059cbb916044808201926020929091908290030181600087803b158015611ef557600080fd5b505af1158015611f09573d6000803e3d6000fd5b505050506040513d6020811015611f1f57600080fd5b5051611f2757fe5b5050505050565b600080600188888860015460405160200180856001600160a01b03166001600160a01b031660601b8152601401848152602001836002811115611f6d57fe5b60ff1660f81b81526001018281526020019450505050506040516020818303038152906040528051906020012086868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611ff4573d6000803e3d6000fd5b505060408051601f1981015160035463b918161160e01b83526001600160a01b03808316600485015293519195506101009004909216925063b9181611916024808301926020929190829003018186803b15801561205157600080fd5b505afa158015612065573d6000803e3d6000fd5b505050506040513d602081101561207b57600080fd5b505198975050505050505050565b600081600101548260020154106120d25760006103e86120a885611782565b86856001015486600201548902816120bc57fe5b040302816120c657fe5b0485019150611af99050565b6000826001015483600201548602816120e757fe5b04850385039150611af99050565b60408051608081019091526000808252602082019081526020016000815260200160008152509056fe5769746864726177616c20706f737369626c65206f6e6c7920666f722066696e697368656420726f756e64732e4d6574686f642063616e2062652072756e206f6e6c7920696e206465706f7369742070686173652e596f752063616e2774206469737472696275746520736861726573206f662070726576696f7573206379636c65207768656e2074686572652069736e277420616e792e4f6e6c7920617574686f72697a65642077616c6c65742063616e20726571756573742074686973206d6574686f642e4d6574686f642063616e2062652072756e206f6e6c7920696e2062616e6b726f6c6c2070686173652e416c6c207573657220736861726573206d75737420626520646973747269627574656420746f207374616b65686f6c646572732066697273742ea265627a7a7230582007f0b34e3238ab7b02c84a46d20c6189d2c12dcf2fe2ee7c582f51fceebefd8564736f6c634300050a0032000000000000000000000000801f67ec764459f9ec3cb9d6b998547f2de6ed3f000000000000000000000000764280456ae178591e037e36b01f69a52d9327a7000000000000000000000000f7a542a7f61d6479e8c63b8c43943df32262d71d

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102745760003560e01c806390e2160a11610151578063cc642cc2116100c3578063e7dbc90311610087578063e7dbc903146106f9578063eecb700514610716578063f3fef3a31461071e578063f78bb1fa1461074a578063fc0c546a1461076a578063ff55e2ee1461077257610274565b8063cc642cc214610611578063d43b732514610619578063db518db214610670578063dddc2f641461069c578063e67aa415146106dc57610274565b8063a6f9dae111610115578063a6f9dae11461055d578063a9a3bba414610583578063b1c9fe6e146105af578063b204fa28146105db578063b719d03214610601578063bf9befb11461060957610274565b806390e2160a14610502578063920ec6441461051f57806392320684146105275780639403e8dd1461054d5780639e1a4d191461055557610274565b806351782a72116101ea5780636190c9d5116101ae5780636190c9d51461049f57806369334eeb146104a7578063760a8c2a146104c4578063773b5b5e146104cc57806382e4eda4146104d45780638da5cb5b146104fa57610274565b806351782a72146103a057806351cff8d9146103db5780635983f7cd146104015780635c975abb14610466578063612d669e1461048257610274565b806334f3ea671161023c57806334f3ea671461030457806337a66d85146103335780633f6fff4e1461033b578063402822521461035857806341c0e1b5146103755780634fd70e7f1461037d57610274565b806308611a581461027957806316934fc4146102935780631d6b8b72146102b957806325c065b1146102f25780632da39239146102fa575b600080fd5b610281610798565b60408051918252519081900360200190f35b610281600480360360208110156102a957600080fd5b50356001600160a01b03166107aa565b6102d6600480360360208110156102cf57600080fd5b50356107c0565b604080516001600160a01b039092168252519081900360200190f35b6102816107ce565b6103026107d4565b005b6103026004803603604081101561031a57600080fd5b5080356001600160a01b0316906020013560ff16610899565b6103026109e8565b6103026004803603602081101561035157600080fd5b5035610a5c565b6102816004803603602081101561036e57600080fd5b5035610b9b565b610302610bb0565b6102d66004803603604081101561039357600080fd5b5080359060200135610c77565b610302600480360360808110156103b657600080fd5b506001600160a01b038135169060208101359060ff6040820135169060600135610cb0565b610302600480360360208110156103f157600080fd5b50356001600160a01b0316610e15565b61042d6004803603604081101561041757600080fd5b50803590602001356001600160a01b0316610e2f565b6040518085815260200184600281111561044357fe5b60ff16815260200183815260200182815260200194505050505060405180910390f35b61046e610ed5565b604080519115158252519081900360200190f35b6103026004803603602081101561049857600080fd5b5035610ede565b610281610f99565b610281600480360360208110156104bd57600080fd5b5035610f9f565b610302610fb5565b610281611034565b61042d600480360360208110156104ea57600080fd5b50356001600160a01b031661103a565b6102d661105b565b6103026004803603602081101561051857600080fd5b503561106a565b6102d6611125565b6103026004803603602081101561053d57600080fd5b50356001600160a01b0316611134565b6102d661116d565b610281611181565b6103026004803603602081101561057357600080fd5b50356001600160a01b0316611201565b6102816004803603604081101561059957600080fd5b50803590602001356001600160a01b031661123a565b6105b7611266565b604051808260018111156105c757fe5b60ff16815260200191505060405180910390f35b610302600480360360408110156105f157600080fd5b5060ff813516906020013561126f565b6102d66112e0565b6102816112ef565b6102816112fc565b6106366004803603602081101561062f57600080fd5b5035611311565b604080519788526020880196909652868601949094526060860192909252608085015260a0840152151560c0830152519081900360e00190f35b6103026004803603604081101561068657600080fd5b506001600160a01b038135169060200135611351565b610302600480360360c08110156106b257600080fd5b5080359060ff60208201358116916040810135916060820135169060808101359060a00135611412565b610302600480360360208110156106f257600080fd5b50356114da565b6102816004803603602081101561070f57600080fd5b5035611599565b6103026115ae565b6103026004803603604081101561073457600080fd5b506001600160a01b038135169060200135611777565b6102816004803603602081101561076057600080fd5b503560ff16611782565b6102d66117e2565b6103026004803603602081101561078857600080fd5b50356001600160a01b03166117f1565b60006107a5600154611599565b905090565b60006107b86001548361123a565b90505b919050565b60006107b860015483610c77565b60075481565b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b15801561082357600080fd5b505afa158015610837573d6000803e3d6000fd5b505050506040513d602081101561084d57600080fd5b505161088a5760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b6108976001805403611830565b565b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b1580156108e857600080fd5b505afa1580156108fc573d6000803e3d6000fd5b505050506040513d602081101561091257600080fd5b505161094f5760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b60015460009081526002602081815260408084206001600160a01b0387168552600701909152909120908101546109c2576040805162461bcd60e51b815260206004820152601260248201527129ba30b5b2b9103737ba1039ba30b5b2b21760711b604482015290519081900360640190fd5b60018082018054849260ff19909116908360028111156109de57fe5b0217905550505050565b6000546001600160a01b031633146109ff57600080fd5b60095460ff1615610a4d576040805162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903830bab9b2b21760691b604482015290519081900360640190fd5b6009805460ff19166001179055565b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b158015610aab57600080fd5b505afa158015610abf573d6000803e3d6000fd5b505050506040513d6020811015610ad557600080fd5b5051610b125760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b600160035460ff166001811115610b2557fe5b14610b615760405162461bcd60e51b81526004018080602001828103825260298152602001806121e66029913960400191505060405180910390fd5b60018054600090815260026020819052604090912090810183905581549091610b8a9190611ade565b60015550506003805460ff19169055565b60009081526002602052604090206003015490565b6000546001600160a01b03163314610bc757600080fd5b6004546000546001600160a01b039182169163a9059cbb9116610be8611181565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610c3757600080fd5b505af1158015610c4b573d6000803e3d6000fd5b505050506040513d6020811015610c6157600080fd5b5051610c6957fe5b6000546001600160a01b0316ff5b6000828152600260205260408120600901805483908110610c9457fe5b6000918252602090912001546001600160a01b03169392505050565b600060035460ff166001811115610cc357fe5b14610cff5760405162461bcd60e51b815260040180806020018281038252602881526020018061214c6028913960400191505060405180910390fd5b60095460ff1615610d4d576040805162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903830bab9b2b21760691b604482015290519081900360640190fd5b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b158015610d9c57600080fd5b505afa158015610db0573d6000803e3d6000fd5b505050506040513d6020811015610dc657600080fd5b5051610e035760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b610e0f84848484611b00565b50505050565b610e2c3382610e276001546001611d13565b611d25565b50565b600080600080610e3d6120f5565b60008781526002602081815260408084206001600160a01b038b16855260070182529283902083516080810190945280548452600181015490929184019160ff90911690811115610e8a57fe5b6002811115610e9557fe5b8152602001600282015481526020016003820154815250509050806000015181602001518260400151836060015194509450945094505092959194509250565b60095460ff1681565b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b158015610f2d57600080fd5b505afa158015610f41573d6000803e3d6000fd5b505050506040513d6020811015610f5757600080fd5b5051610f945760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b600755565b60015481565b6000908152600260208190526040909120015490565b6000546001600160a01b03163314610fcc57600080fd5b60095460ff161515600114611028576040805162461bcd60e51b815260206004820152601760248201527f436f6e7472616374206973206e6f74207061757365642e000000000000000000604482015290519081900360640190fd5b6009805460ff19169055565b60085481565b60008060008061104c60015486610e2f565b93509350935093509193509193565b6000546001600160a01b031681565b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b1580156110b957600080fd5b505afa1580156110cd573d6000803e3d6000fd5b505050506040513d60208110156110e357600080fd5b50516111205760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b600855565b6006546001600160a01b031681565b6000546001600160a01b0316331461114b57600080fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60035461010090046001600160a01b031681565b60048054604080516370a0823160e01b81523093810193909352516000926001600160a01b03909216916370a08231916024808301926020929190829003018186803b1580156111d057600080fd5b505afa1580156111e4573d6000803e3d6000fd5b505050506040513d60208110156111fa57600080fd5b5051905090565b6000546001600160a01b0316331461121857600080fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008281526002602090815260408083206001600160a01b038516845260080190915290205492915050565b60035460ff1681565b6000546001600160a01b0316331461128657600080fd5b600082600281111561129457fe5b14156112a457600a8190556112dc565b60018260028111156112b257fe5b14156112c257600b8190556112dc565b60028260028111156112d057fe5b14156112dc57600c8190555b5050565b6005546001600160a01b031681565b60006107a5600154610b9b565b60015460009081526002602052604090205490565b6002602081905260009182526040909120805460018201549282015460038301546004840154600585015460069095015493959492939192909160ff1687565b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b1580156113a057600080fd5b505afa1580156113b4573d6000803e3d6000fd5b505050506040513d60208110156113ca57600080fd5b50516114075760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b6112dc828383611d25565b600060035460ff16600181111561142557fe5b146114615760405162461bcd60e51b815260040180806020018281038252602881526020018061214c6028913960400191505060405180910390fd5b60095460ff16156114af576040805162461bcd60e51b815260206004820152601360248201527221b7b73a3930b1ba1034b9903830bab9b2b21760691b604482015290519081900360640190fd5b6114bd338587868686611f2e565b6114c657600080fd5b6114d233878787611b00565b505050505050565b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b15801561152957600080fd5b505afa15801561153d573d6000803e3d6000fd5b505050506040513d602081101561155357600080fd5b50516115905760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b610e2c81611830565b60009081526002602052604090206001015490565b6003546040805163b918161160e01b815233600482015290516101009092046001600160a01b03169163b918161191602480820192602092909190829003018186803b1580156115fd57600080fd5b505afa158015611611573d6000803e3d6000fd5b505050506040513d602081101561162757600080fd5b50516116645760405162461bcd60e51b815260040180806020018281038252602f8152602001806121b7602f913960400191505060405180910390fd5b600060035460ff16600181111561167757fe5b146116b35760405162461bcd60e51b815260040180806020018281038252602881526020018061214c6028913960400191505060405180910390fd5b60018054600090815260026020908152604080832060038082018054968301879055859055600480549154845163a9059cbb60e01b81526001600160a01b03610100909204821692810192909252602482019790975292519195169363a9059cbb93604480850194919392918390030190829087803b15801561173557600080fd5b505af1158015611749573d6000803e3d6000fd5b505050506040513d602081101561175f57600080fd5b505161176757fe5b506003805460ff19166001179055565b6112dc338383611d25565b60008082600281111561179157fe5b14156117a05750600a546107bb565b60018260028111156117ae57fe5b14156117bd5750600b546107bb565b60028260028111156117cb57fe5b14156117da5750600c546107bb565b506000919050565b6004546001600160a01b031681565b6000546001600160a01b0316331461180857600080fd5b600380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000600154118015611843575080600154115b61187e5760405162461bcd60e51b81526004018080602001828103825260438152602001806121746043913960600191505060405180910390fd5b6000818152600260205260409020600681015460ff16156118e6576040805162461bcd60e51b815260206004820152601b60248201527f53686172657320616c72656164792064697374726962757465642e0000000000604482015290519081900360640190fd5b60006118f88260040154600854611ade565b82549091508110611907575080545b6003820154600483015460009182915b848110156119f15785600901818154811061192e57fe5b60009182526020808320909101546001600160a01b0316808352600789019091526040909120600281015460018201549296509091611971919060ff1689612089565b600382018190556001600160a01b0386166000908152600889016020526040902081905593506119a18385611ade565b604080516001600160a01b03881681526020810187905281519295507f89dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd78929081900390910190a150600101611917565b506003850181905560048501849055845484106114d257846003015485600201541115611ac757611a2a85600201548660030154611d13565b6005860181905515611ac7576004805460065460058801546040805163a9059cbb60e01b81526001600160a01b039384169581019590955260248501919091525191169163a9059cbb9160448083019260209291908290030181600087803b158015611a9557600080fd5b505af1158015611aa9573d6000803e3d6000fd5b505050506040513d6020811015611abf57600080fd5b5051611ac757fe5b60068501805460ff19166001179055505050505050565b6000828201838110801590611af35750828110155b611af957fe5b9392505050565b60008311611b0d57600080fd5b60015460009081526002602090815260408083206001600160a01b0388168452600881019092528220549091611b438287611ade565b9050600754811015611b5457600080fd5b8315611bf95783811115611b6757600080fd5b60048054604080516323b872dd60e01b81526001600160a01b038b811694820194909452306024820152604481018a9052905192909116916323b872dd916064808201926020929091908290030181600087803b158015611bc757600080fd5b505af1158015611bdb573d6000803e3d6000fd5b505050506040513d6020811015611bf157600080fd5b5051611bf957fe5b6001600160a01b038716600090815260078401602090815260408083206008870190925290912054611c6b5760098401805460018082018084556000938452602090932090910180546001600160a01b0319166001600160a01b038c16179055818655611c67908290611d13565b8255505b6001600160a01b038816600090815260088501602052604090208290556002808201839055600180830180548993919260ff19909116918490811115611cad57fe5b0217905550611cc0846003015488611ade565b6003850155604080516001600160a01b038a1681526020810184905281517f89dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd78929181900390910190a15050505050505050565b600082821115611d1f57fe5b50900390565b6001548110611d655760405162461bcd60e51b815260040180806020018281038252602d81526020018061211f602d913960400191505060405180910390fd5b6000818152600260205260409020600681015460ff161515600114611dbb5760405162461bcd60e51b815260040180806020018281038252603a81526020018061220f603a913960400191505060405180910390fd5b6001600160a01b038416600090815260088201602052604090205480611e28576040805162461bcd60e51b815260206004820152601c60248201527f5374616b657220646f65736e277420686176652062616c616e63652e00000000604482015290519081900360640190fd5b6001600160a01b03851660009081526008830160205260408120556003820154611e529082611d13565b6003830155604080516001600160a01b03871681526000602082015281517f89dbe872fd688c751e8c5df10849155d89d1467fd56ddb92b0d0024cda2ccd78929181900390910190a1600480546040805163a9059cbb60e01b81526001600160a01b0388811694820194909452602481018590529051929091169163a9059cbb916044808201926020929091908290030181600087803b158015611ef557600080fd5b505af1158015611f09573d6000803e3d6000fd5b505050506040513d6020811015611f1f57600080fd5b5051611f2757fe5b5050505050565b600080600188888860015460405160200180856001600160a01b03166001600160a01b031660601b8152601401848152602001836002811115611f6d57fe5b60ff1660f81b81526001018281526020019450505050506040516020818303038152906040528051906020012086868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611ff4573d6000803e3d6000fd5b505060408051601f1981015160035463b918161160e01b83526001600160a01b03808316600485015293519195506101009004909216925063b9181611916024808301926020929190829003018186803b15801561205157600080fd5b505afa158015612065573d6000803e3d6000fd5b505050506040513d602081101561207b57600080fd5b505198975050505050505050565b600081600101548260020154106120d25760006103e86120a885611782565b86856001015486600201548902816120bc57fe5b040302816120c657fe5b0485019150611af99050565b6000826001015483600201548602816120e757fe5b04850385039150611af99050565b60408051608081019091526000808252602082019081526020016000815260200160008152509056fe5769746864726177616c20706f737369626c65206f6e6c7920666f722066696e697368656420726f756e64732e4d6574686f642063616e2062652072756e206f6e6c7920696e206465706f7369742070686173652e596f752063616e2774206469737472696275746520736861726573206f662070726576696f7573206379636c65207768656e2074686572652069736e277420616e792e4f6e6c7920617574686f72697a65642077616c6c65742063616e20726571756573742074686973206d6574686f642e4d6574686f642063616e2062652072756e206f6e6c7920696e2062616e6b726f6c6c2070686173652e416c6c207573657220736861726573206d75737420626520646973747269627574656420746f207374616b65686f6c646572732066697273742ea265627a7a7230582007f0b34e3238ab7b02c84a46d20c6189d2c12dcf2fe2ee7c582f51fceebefd8564736f6c634300050a0032

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

000000000000000000000000801f67ec764459f9ec3cb9d6b998547f2de6ed3f000000000000000000000000764280456ae178591e037e36b01f69a52d9327a7000000000000000000000000f7a542a7f61d6479e8c63b8c43943df32262d71d

-----Decoded View---------------
Arg [0] : tokenAddr (address): 0x801f67eC764459F9EC3Cb9d6b998547f2DE6Ed3f
Arg [1] : casinoAddr (address): 0x764280456ae178591E037E36B01f69a52d9327a7
Arg [2] : predecessorAdr (address): 0xf7A542a7f61D6479E8c63b8c43943DF32262D71D

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000801f67ec764459f9ec3cb9d6b998547f2de6ed3f
Arg [1] : 000000000000000000000000764280456ae178591e037e36b01f69a52d9327a7
Arg [2] : 000000000000000000000000f7a542a7f61d6479e8c63b8c43943df32262d71d


Deployed Bytecode Sourcemap

1665:18344:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1665:18344:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10992:94;;;:::i;:::-;;;;;;;;;;;;;;;;10398:106;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10398:106:0;-1:-1:-1;;;;;10398:106:0;;:::i;10186:114::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10186:114:0;;:::i;:::-;;;;-1:-1:-1;;;;;10186:114:0;;;;;;;;;;;;;;3746:28;;;:::i;8760:93::-;;;:::i;:::-;;6067:253;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6067:253:0;;-1:-1:-1;;;;;6067:253:0;;;;;;;;:::i;6637:77::-;;;:::i;8439:249::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8439:249:0;;:::i;12181:114::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12181:114:0;;:::i;13547:135::-;;;:::i;11232:142::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11232:142:0;;;;;;;:::i;9725:198::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;9725:198:0;;;;;;;;;;;;;;;;;;;;:::i;6992:115::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6992:115:0;-1:-1:-1;;;;;6992:115:0;;:::i;11802:271::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11802:271:0;;;;;;-1:-1:-1;;;;;11802:271:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3927:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;13278:102;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13278:102:0;;:::i;3212:17::-;;;:::i;12625:114::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12625:114:0;;:::i;6760:78::-;;;:::i;3863:22::-;;;:::i;10606:161::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10606:161:0;-1:-1:-1;;;;;10606:161:0;;:::i;1007:20::-;;;:::i;13083:90::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13083:90:0;;:::i;3663:31::-;;;:::i;6444:106::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6444:106:0;-1:-1:-1;;;;;6444:106:0;;:::i;3416:20::-;;;:::i;13759:100::-;;;:::i;1164:85::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1164:85:0;-1:-1:-1;;;;;1164:85:0;;:::i;11520:142::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11520:142:0;;;;;;-1:-1:-1;;;;;11520:142:0;;:::i;3338:26::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5040:320;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5040:320:0;;;;;;;;;:::i;3547:26::-;;;:::i;10835:90::-;;;:::i;9985:100::-;;;:::i;3255:45::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3255:45:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7639:131;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7639:131:0;;;;;;;;:::i;9313:269::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;9313:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8990:111::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8990:111:0;;:::i;12402:118::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12402:118:0;;:::i;7878:310::-;;;:::i;7317:117::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7317:117:0;;;;;;;;:::i;5523:322::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5523:322:0;;;;:::i;3487:18::-;;;:::i;12857:103::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12857:103:0;-1:-1:-1;;;;;12857:103:0;;:::i;10992:94::-;11038:4;11060:20;11074:5;;11060:13;:20::i;:::-;11053:27;;10992:94;:::o;10398:106::-;10453:4;10475:23;10482:5;;10489:8;10475:6;:23::i;:::-;10468:30;;10398:106;;;;:::o;10186:114::-;10242:7;10267:27;10280:5;;10287:6;10267:12;:27::i;3746:28::-;;;;:::o;8760:93::-;19443:6;;:29;;;-1:-1:-1;;;19443:29:0;;19461:10;19443:29;;;;;;:6;;;;-1:-1:-1;;;;;19443:6:0;;:17;;:29;;;;;;;;;;;;;;;:6;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;19443:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19443:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19443:29:0;19435:89;;;;-1:-1:-1;;;19435:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8819:28;8845:1;8837:5;;:9;8819:17;:28::i;:::-;8760:93::o;6067:253::-;19443:6;;:29;;;-1:-1:-1;;;19443:29:0;;19461:10;19443:29;;;;;;:6;;;;-1:-1:-1;;;;;19443:6:0;;:17;;:29;;;;;;;;;;;;;;;:6;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;19443:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19443:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19443:29:0;19435:89;;;;-1:-1:-1;;;19435:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6195:5;;6158:22;6183:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;6183:44:0;;;;:34;;:44;;;;;;6244:14;;;;6236:49;;;;;-1:-1:-1;;;6236:49:0;;;;;;;;;;;;-1:-1:-1;;;6236:49:0;;;;;;;;;;;;;;;6294:12;;;;:20;;6309:5;;-1:-1:-1;;6294:20:0;;;;6309:5;6294:20;;;;;;;;;;;;;19531:1;6067:253;;:::o;6637:77::-;1080:5;;-1:-1:-1;;;;;1080:5:0;1066:10;:19;1058:28;;;;;;19850:6;;;;:15;19842:47;;;;;-1:-1:-1;;;19842:47:0;;;;;;;;;;;;-1:-1:-1;;;19842:47:0;;;;;;;;;;;;;;;6695:6;:13;;-1:-1:-1;;6695:13:0;6704:4;6695:13;;;6637:77::o;8439:249::-;19443:6;;:29;;;-1:-1:-1;;;19443:29:0;;19461:10;19443:29;;;;;;:6;;;;-1:-1:-1;;;;;19443:6:0;;:17;;:29;;;;;;;;;;;;;;;:6;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;19443:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19443:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19443:29:0;19435:89;;;;-1:-1:-1;;;19435:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19723:22;19714:5;;;;;:31;;;;;;;;19706:85;;;;-1:-1:-1;;;19706:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8562:5;;;8523:24;8550:18;;;:11;:18;;;;;;;;8577;;;:33;;;8635:5;;8550:18;;8627:17;;8635:5;8627:7;:17::i;:::-;8619:5;:25;-1:-1:-1;;8653:5:0;:29;;-1:-1:-1;;8653:29:0;;;8439:249::o;12181:114::-;12236:4;12258:19;;;:11;:19;;;;;:31;;;;12181:114::o;13547:135::-;1080:5;;-1:-1:-1;;;;;1080:5:0;1066:10;:19;1058:28;;;;;;13594:5;;;13609;-1:-1:-1;;;;;13594:5:0;;;;:14;;13609:5;13616:14;:12;:14::i;:::-;13594:37;;;;;;;;;;;;;-1:-1:-1;;;;;13594:37:0;-1:-1:-1;;;;;13594:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13594:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13594:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13594:37:0;13587:45;;;;13668:5;;-1:-1:-1;;;;;13668:5:0;13639:37;11232:142;11301:7;11326:19;;;:11;:19;;;;;:34;;:42;;11361:6;;11326:42;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11326:42:0;;11232:142;-1:-1:-1;;;11232:142:0:o;9725:198::-;19590:21;19581:5;;;;;:30;;;;;;;;19573:83;;;;-1:-1:-1;;;19573:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19850:6;;;;:15;19842:47;;;;;-1:-1:-1;;;19842:47:0;;;;;;;;;;;;-1:-1:-1;;;19842:47:0;;;;;;;;;;;;;;;19443:6;;:29;;;-1:-1:-1;;;19443:29:0;;19461:10;19443:29;;;;;;:6;;;;-1:-1:-1;;;;;19443:6:0;;:17;;:29;;;;;;;;;;;;;;;:6;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;19443:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19443:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19443:29:0;19435:89;;;;-1:-1:-1;;;19435:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9868:49;9880:8;9890:6;9898:5;9905:11;9868;:49::i;:::-;9725:198;;;;:::o;6992:115::-;7045:56;7060:10;7072:9;7083:17;7091:5;;7098:1;7083:7;:17::i;:::-;7045:14;:56::i;:::-;6992:115;:::o;11802:271::-;11870:15;11887:16;11905:11;11918;11941:16;;:::i;:::-;11960:19;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;11960:45:0;;;;:35;;:45;;;;;;11941:64;;;;;;;;;;;;;;;;11960:45;;11941:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12022:2;:13;;;12037:2;:7;;;12046:2;:9;;;12057:2;:9;;;12014:53;;;;;;;;;11802:271;;;;;;;:::o;3927:18::-;;;;;;:::o;13278:102::-;19443:6;;:29;;;-1:-1:-1;;;19443:29:0;;19461:10;19443:29;;;;;;:6;;;;-1:-1:-1;;;;;19443:6:0;;:17;;:29;;;;;;;;;;;;;;;:6;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;19443:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19443:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19443:29:0;19435:89;;;;-1:-1:-1;;;19435:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13349:16;:25;13278:102::o;3212:17::-;;;;:::o;12625:114::-;12680:4;12702:19;;;:11;:19;;;;;;;;:31;;;12625:114::o;6760:78::-;1080:5;;-1:-1:-1;;;;;1080:5:0;1066:10;:19;1058:28;;;;;;19948:6;;;;:14;;:6;:14;19940:50;;;;;-1:-1:-1;;;19940:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6818:6;:14;;-1:-1:-1;;6818:14:0;;;6760:78::o;3863:22::-;;;;:::o;10606:161::-;10661:15;10678:16;10696:11;10709;10738:23;10745:5;;10752:8;10738:6;:23::i;:::-;10731:30;;;;;;;;10606:161;;;;;:::o;1007:20::-;;;-1:-1:-1;;;;;1007:20:0;;:::o;13083:90::-;19443:6;;:29;;;-1:-1:-1;;;19443:29:0;;19461:10;19443:29;;;;;;:6;;;;-1:-1:-1;;;;;19443:6:0;;:17;;:29;;;;;;;;;;;;;;;:6;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;19443:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19443:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19443:29:0;19435:89;;;;-1:-1:-1;;;19435:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13148:10;:19;13083:90::o;3663:31::-;;;-1:-1:-1;;;;;3663:31:0;;:::o;6444:106::-;1080:5;;-1:-1:-1;;;;;1080:5:0;1066:10;:19;1058:28;;;;;;6517:16;:27;;-1:-1:-1;;;;;;6517:27:0;-1:-1:-1;;;;;6517:27:0;;;;;;;;;;6444:106::o;3416:20::-;;;;;;-1:-1:-1;;;;;3416:20:0;;:::o;13759:100::-;13823:5;;;:30;;;-1:-1:-1;;;13823:30:0;;13847:4;13823:30;;;;;;;;13803:4;;-1:-1:-1;;;;;13823:5:0;;;;:15;;:30;;;;;;;;;;;;;;:5;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;13823:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13823:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13823:30:0;;-1:-1:-1;13759:100:0;:::o;1164:85::-;1080:5;;-1:-1:-1;;;;;1080:5:0;1066:10;:19;1058:28;;;;;;1227:5;:16;;-1:-1:-1;;;;;;1227:16:0;-1:-1:-1;;;;;1227:16:0;;;;;;;;;;1164:85::o;11520:142::-;11588:4;11610:19;;;:11;:19;;;;;;;;-1:-1:-1;;;;;11610:46:0;;;;:36;;:46;;;;;;11520:142;;;;:::o;3338:26::-;;;;;;:::o;5040:320::-;1080:5;;-1:-1:-1;;;;;1080:5:0;1066:10;:19;1058:28;;;;;;5138:15;5129:5;:24;;;;;;;;;5125:230;;;5166:12;:21;;;5125:230;;;5214:16;5205:5;:25;;;;;;;;;5201:154;;;5243:13;:22;;;5201:154;;;5292:18;5283:5;:27;;;;;;;;;5279:76;;;5323:15;:24;;;5279:76;5040:320;;:::o;3547:26::-;;;-1:-1:-1;;;;;3547:26:0;;:::o;10835:90::-;10879:4;10901:18;10913:5;;10901:11;:18::i;9985:100::-;10062:5;;10028:4;10050:18;;;:11;:18;;;;;:29;9985:100;:::o;3255:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7639:131::-;19443:6;;:29;;;-1:-1:-1;;;19443:29:0;;19461:10;19443:29;;;;;;:6;;;;-1:-1:-1;;;;;19443:6:0;;:17;;:29;;;;;;;;;;;;;;;:6;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;19443:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19443:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19443:29:0;19435:89;;;;-1:-1:-1;;;19435:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7722:42;7737:8;7747;7757:6;7722:14;:42::i;9313:269::-;19590:21;19581:5;;;;;:30;;;;;;;;19573:83;;;;-1:-1:-1;;;19573:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19850:6;;;;:15;19842:47;;;;;-1:-1:-1;;;19842:47:0;;;;;;;;;;;;-1:-1:-1;;;19842:47:0;;;;;;;;;;;;;;;9459:56;9475:10;9487:11;9500:5;9507:1;9510;9513;9459:15;:56::i;:::-;9451:65;;;;;;9525:51;9537:10;9549:6;9557:5;9564:11;9525;:51::i;:::-;9313:269;;;;;;:::o;8990:111::-;19443:6;;:29;;;-1:-1:-1;;;19443:29:0;;19461:10;19443:29;;;;;;:6;;;;-1:-1:-1;;;;;19443:6:0;;:17;;:29;;;;;;;;;;;;;;;:6;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;19443:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19443:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19443:29:0;19435:89;;;;-1:-1:-1;;;19435:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9065:30;9083:11;9065:17;:30::i;12402:118::-;12459:4;12481:19;;;:11;:19;;;;;:33;;;;12402:118::o;7878:310::-;19443:6;;:29;;;-1:-1:-1;;;19443:29:0;;19461:10;19443:29;;;;;;:6;;;;-1:-1:-1;;;;;19443:6:0;;:17;;:29;;;;;;;;;;;;;;;:6;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;19443:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19443:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19443:29:0;19435:89;;;;-1:-1:-1;;;19435:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19590:21;19581:5;;;;;:30;;;;;;;;19573:83;;;;-1:-1:-1;;;19573:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7986:5;;;7947:24;7974:18;;;:11;:18;;;;;;;;8024;;;;;;8001:20;;;:41;;;8051:22;;;8089:5;;;8112:6;;8089:53;;-1:-1:-1;;;8089:53:0;;-1:-1:-1;;;;;8089:5:0;8112:6;;;;;8089:53;;;;;;;;;;;;;;;;7974:18;;8089:5;;:14;;:53;;;;;7974:18;;8089:53;;;;;;;;;:5;:53;;;5:2:-1;;;;30:1;27;20:12;5:2;8089:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8089:53:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8089:53:0;8082:61;;;;-1:-1:-1;8152:5:0;:30;;-1:-1:-1;;8152:30:0;8160:22;8152:30;;;7878:310::o;7317:117::-;7383:45;7398:10;7410:9;7421:6;7383:14;:45::i;5523:322::-;5592:4;;5608:5;:24;;;;;;;;;5604:221;;;-1:-1:-1;5651:12:0;;5644:19;;5604:221;5690:16;5681:5;:25;;;;;;;;;5677:148;;;-1:-1:-1;5725:13:0;;5718:20;;5677:148;5765:18;5756:5;:27;;;;;;;;;5752:73;;;-1:-1:-1;5802:15:0;;5795:22;;5752:73;-1:-1:-1;5838:1:0;5523:322;;;:::o;3487:18::-;;;-1:-1:-1;;;;;3487:18:0;;:::o;12857:103::-;1080:5;;-1:-1:-1;;;;;1080:5:0;1066:10;:19;1058:28;;;;;;12927:6;:27;;-1:-1:-1;;;;;12927:27:0;;;;;-1:-1:-1;;;;;;12927:27:0;;;;;;;;;12857:103::o;15121:1517::-;15200:1;15192:5;;:9;:32;;;;;15213:11;15205:5;;:19;15192:32;15184:112;;;;-1:-1:-1;;;15184:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15305:24;15332;;;:11;:24;;;;;15373;;;;;;:33;15365:73;;;;;-1:-1:-1;;;15365:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15447:10;15460:43;15468:6;:22;;;15492:10;;15460:7;:43::i;:::-;15525:17;;15447:56;;-1:-1:-1;15516:26:0;;15512:80;;-1:-1:-1;15565:17:0;;15512:80;15666:18;;;;15707:22;;;;15600:16;;;;15693:459;15735:5;15731:1;:9;15693:459;;;15771:6;:21;;15793:1;15771:24;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15771:24:0;15833:32;;;:22;;;:32;;;;;;;15906:14;;;;15771:24;15922:12;;;15771:24;;-1:-1:-1;15833:32:0;;15888:55;;15906:14;15922:12;;15833:6;15888:17;:55::i;:::-;15956:14;;;:24;;;-1:-1:-1;;;;;15993:33:0;;;;;;:23;;;:33;;;;;:43;;;15878:65;-1:-1:-1;16064:30:0;16072:12;15878:65;16064:7;:30::i;:::-;16112;;;-1:-1:-1;;;;;16112:30:0;;;;;;;;;;;;16049:45;;-1:-1:-1;16112:30:0;;;;;;;;;;;-1:-1:-1;15742:3:0;;15693:459;;;-1:-1:-1;16160:18:0;;;:33;;;16202:22;;;:30;;;16254:17;;16245:26;;16241:392;;16311:6;:18;;;16290:6;:18;;;:39;16286:294;;;16372:47;16380:6;:18;;;16400:6;:18;;;16372:7;:47::i;:::-;16346:23;;;:73;;;16438:27;16434:133;;16493:5;;;16508:16;;16526:23;;;;16493:57;;;-1:-1:-1;;;16493:57:0;;-1:-1:-1;;;;;16508:16:0;;;16493:57;;;;;;;;;;;;;;;:5;;;:14;;:57;;;;;;;;;;;;;;:5;;:57;;;5:2:-1;;;;30:1;27;20:12;5:2;16493:57:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16493:57:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16493:57:0;16486:65;;;;16592:24;;;:31;;-1:-1:-1;;16592:31:0;16619:4;16592:31;;;15121:1517;;;;;;:::o;1387:127::-;1442:4;1462:5;;;1479:6;;;;;;:16;;;1494:1;1489;:6;;1479:16;1472:24;;;;1508:1;1387:127;-1:-1:-1;;;1387:127:0:o;17674:1125::-;17799:1;17790:6;:10;17782:19;;;;;;17850:5;;17811:24;17838:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;17882:33:0;;;;:23;;;:33;;;;;;17838:18;;17941:25;17882:33;17959:6;17941:7;:25::i;:::-;17925:41;;17996:16;;17984:8;:28;;17976:37;;;;;;18026:15;;18023:200;;18127:11;18115:8;:23;;18107:32;;;;;;18160:5;;;:51;;;-1:-1:-1;;;18160:51:0;;-1:-1:-1;;;;;18160:51:0;;;;;;;;;;18197:4;18160:51;;;;;;;;;;;;:5;;;;;:18;;:51;;;;;;;;;;;;;;;:5;;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;18160:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18160:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18160:51:0;18153:59;;;;-1:-1:-1;;;;;18257:32:0;;18232:22;18257:32;;;:22;;;:32;;;;;;;;18312:23;;;:33;;;;;;;18308:227;;18385:21;;;27:10:-1;;39:1;23:18;;;45:23;;;-1:-1;18385:36:0;;;;;;;;;;;;-1:-1:-1;;;;;;18385:36:0;-1:-1:-1;;;;;18385:36:0;;;;;18435:31;;;18501:23;;23:18:-1;;18501:7:0;:23::i;:::-;18480:44;;-1:-1:-1;18308:227:0;-1:-1:-1;;;;;18553:33:0;;;;;;:23;;;:33;;;;;:44;;;18607:14;;;;:25;;;18642:12;;;;:20;;18657:5;;18642:12;;-1:-1:-1;;18642:20:0;;;;18657:5;;18642:20;;;;;;;;;;;;18702:35;18710:6;:18;;;18730:6;18702:7;:35::i;:::-;18681:18;;;:56;18761:31;;;-1:-1:-1;;;;;18761:31:0;;;;;;;;;;;;;;;;;;;;;;;17674:1125;;;;;;;;:::o;1280:102::-;1335:4;1358:1;1353;:6;;1346:14;;;;-1:-1:-1;1372:5:0;;;1280:102::o;14163:684::-;14272:5;;14263:6;:14;14255:72;;;;-1:-1:-1;;;14255:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14336:28;14367:19;;;:11;:19;;;;;14403:28;;;;;;:36;;:28;:36;14395:107;;;;-1:-1:-1;;;14395:107:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14527:37:0;;14511:13;14527:37;;;:27;;;:37;;;;;;14581:12;14573:53;;;;;-1:-1:-1;;;14573:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14635:37:0;;14675:1;14635:37;;;:27;;;:37;;;;;:41;14718:22;;;;14710:41;;14742:8;14710:7;:41::i;:::-;14685:22;;;:66;14765:24;;;-1:-1:-1;;;;;14765:24:0;;;;14787:1;14765:24;;;;;;;;;;;;;;;;;14805:5;;;:35;;;-1:-1:-1;;;14805:35:0;;-1:-1:-1;;;;;14805:35:0;;;;;;;;;;;;;;;;;;:5;;;;;:14;;:35;;;;;;;;;;;;;;;:5;;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;14805:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14805:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14805:35:0;14798:43;;;;14163:684;;;;;:::o;19074:266::-;19194:4;19207:14;19224:71;19261:2;19265:5;19272:4;19278:5;;19244:40;;;;;;-1:-1:-1;;;;;19244:40:0;-1:-1:-1;;;;;19244:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;19244:40:0;;;19234:51;;;;;;19287:1;19290;19293;19224:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;19224:71:0;;;-1:-1:-1;;19224:71:0;;;19309:6;;-1:-1:-1;;;19309:25:0;;-1:-1:-1;;;;;19309:25:0;;;;;;;;;19224:71;;-1:-1:-1;19309:6:0;;;;;;;-1:-1:-1;19309:17:0;;:25;;;;;19224:71;;19309:25;;;;;;;:6;:25;;;5:2:-1;;;;30:1;27;20:12;5:2;19309:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19309:25:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19309:25:0;;19074:266;-1:-1:-1;;;;;;;;19074:266:0:o;16867:561::-;16988:4;17034:10;:24;;;17008:10;:22;;;:50;17004:417;;17071:11;17205:4;17173:29;17193:8;17173:19;:29::i;:::-;17156:13;17128:10;:24;;;17103:10;:22;;;17087:13;:38;:65;;;;;;17086:83;17085:117;:124;;;;;;17227:22;;;-1:-1:-1;17220:29:0;;-1:-1:-1;17220:29:0;17004:417;17276:9;17347:10;:24;;;17322:10;:22;;;17306:13;:38;:65;;;;;;17289:83;;17391:20;;;-1:-1:-1;17384:27:0;;-1:-1:-1;17384:27:0;1665:18344;;;;;;;;;;-1:-1:-1;1665:18344:0;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://07f0b34e3238ab7b02c84a46d20c6189d2c12dcf2fe2ee7c582f51fceebefd85

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.