ETH Price: $3,869.03 (-1.59%)

Contract

0x0604Db7EBF0004dDf450020E0D8b0F0354b1345F
 

Overview

ETH Balance

0.304764532338147849 ETH

Eth Value

$1,179.14 (@ $3,869.03/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Rent55612812018-05-05 15:53:412419 days ago1525535621IN
0x0604Db7E...354b1345F
0 ETH0.000158442
Withdraw Rent54841032018-04-22 5:20:322432 days ago1524374432IN
0x0604Db7E...354b1345F
0 ETH0.000087031
Withdraw Rent54695882018-04-19 17:36:072435 days ago1524159367IN
0x0604Db7E...354b1345F
0 ETH0.00008711
Withdraw Rent54305012018-04-13 1:44:162441 days ago1523583856IN
0x0604Db7E...354b1345F
0 ETH0.000008210.301
Withdraw Rent53619972018-04-01 16:35:542453 days ago1522600554IN
0x0604Db7E...354b1345F
0 ETH0.000426362
Withdraw Rent53619762018-04-01 16:32:022453 days ago1522600322IN
0x0604Db7E...354b1345F
0 ETH0.000242
Withdraw Rent52589322018-03-15 9:45:262470 days ago1521107126IN
0x0604Db7E...354b1345F
0 ETH0.00043555
Withdraw Rent52329282018-03-10 23:28:052474 days ago1520724485IN
0x0604Db7E...354b1345F
0 ETH0.000089692.1
Withdraw Rent52226922018-03-09 5:38:162476 days ago1520573896IN
0x0604Db7E...354b1345F
0 ETH0.000203692
Withdraw Rent51998192018-03-05 8:21:432480 days ago1520238103IN
0x0604Db7E...354b1345F
0 ETH0.000109124
Withdraw Rent51981122018-03-05 1:31:352480 days ago1520213495IN
0x0604Db7E...354b1345F
0 ETH0.0013178410
Withdraw Rent51979712018-03-05 1:00:132480 days ago1520211613IN
0x0604Db7E...354b1345F
0 ETH0.001210
Withdraw Rent51929822018-03-04 4:37:512481 days ago1520138271IN
0x0604Db7E...354b1345F
0 ETH0.000151023
Withdraw Rent51903092018-03-03 17:50:532482 days ago1520099453IN
0x0604Db7E...354b1345F
0 ETH0.000142
Withdraw Rent51872982018-03-03 5:34:382482 days ago1520055278IN
0x0604Db7E...354b1345F
0 ETH0.000194173
Withdraw Rent51867712018-03-03 3:31:472482 days ago1520047907IN
0x0604Db7E...354b1345F
0 ETH0.000462663
Withdraw Rent51864382018-03-03 2:11:482482 days ago1520043108IN
0x0604Db7E...354b1345F
0 ETH0.000317894
Withdraw Rent51811752018-03-02 4:46:372483 days ago1519965997IN
0x0604Db7E...354b1345F
0 ETH0.001815
Withdraw Rent51803512018-03-02 1:17:562483 days ago1519953476IN
0x0604Db7E...354b1345F
0 ETH0.000316884
Withdraw Rent51801932018-03-02 0:44:212483 days ago1519951461IN
0x0604Db7E...354b1345F
0 ETH0.001210
Withdraw Rent51801892018-03-02 0:43:472483 days ago1519951427IN
0x0604Db7E...354b1345F
0 ETH0.000056841
Withdraw Rent51784032018-03-01 17:30:392484 days ago1519925439IN
0x0604Db7E...354b1345F
0 ETH0.00065
Withdraw Rent51776082018-03-01 14:11:412484 days ago1519913501IN
0x0604Db7E...354b1345F
0 ETH0.002420
Withdraw Rent51776002018-03-01 14:08:432484 days ago1519913323IN
0x0604Db7E...354b1345F
0 ETH0.000968
Withdraw Rent51752602018-03-01 4:31:372484 days ago1519878697IN
0x0604Db7E...354b1345F
0 ETH0.000363
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
55612812018-05-05 15:53:412419 days ago1525535621
0x0604Db7E...354b1345F
0.0010415 ETH
54841032018-04-22 5:20:322432 days ago1524374432
0x0604Db7E...354b1345F
0.00976982 ETH
54695882018-04-19 17:36:072435 days ago1524159367
0x0604Db7E...354b1345F
0.00366368 ETH
54305012018-04-13 1:44:162441 days ago1523583856
0x0604Db7E...354b1345F
0.00097522 ETH
53619972018-04-01 16:35:542453 days ago1522600554
0x0604Db7E...354b1345F
0.01224544 ETH
52589322018-03-15 9:45:262470 days ago1521107126
0x0604Db7E...354b1345F
0.00244245 ETH
52329282018-03-10 23:28:052474 days ago1520724485
0x0604Db7E...354b1345F
0.0013586 ETH
52226922018-03-09 5:38:162476 days ago1520573896
0x0604Db7E...354b1345F
0.01733116 ETH
51998192018-03-05 8:21:432480 days ago1520238103
0x0604Db7E...354b1345F
0.00001901 ETH
51981122018-03-05 1:31:352480 days ago1520213495
0x0604Db7E...354b1345F
0.03419437 ETH
51929822018-03-04 4:37:512481 days ago1520138271
0x0604Db7E...354b1345F
0.00000461 ETH
51872982018-03-03 5:34:382482 days ago1520055278
0x0604Db7E...354b1345F
0.00976982 ETH
51867712018-03-03 3:31:472482 days ago1520047907
0x0604Db7E...354b1345F
0.01099104 ETH
51864382018-03-03 2:11:482482 days ago1520043108
0x0604Db7E...354b1345F
0.01353596 ETH
51803512018-03-02 1:17:562483 days ago1519953476
0x0604Db7E...354b1345F
0.00208301 ETH
51801892018-03-02 0:43:472483 days ago1519951427
0x0604Db7E...354b1345F
0.00271624 ETH
51743872018-03-01 1:00:222484 days ago1519866022
0x0604Db7E...354b1345F
0.00183213 ETH
51743732018-03-01 0:57:532484 days ago1519865873
0x0604Db7E...354b1345F
0.01284882 ETH
51740942018-02-28 23:53:142484 days ago1519861994
0x0604Db7E...354b1345F
0.00976982 ETH
51735702018-02-28 21:41:502484 days ago1519854110
0x0604Db7E...354b1345F
0.00174857 ETH
51735262018-02-28 21:29:572484 days ago1519853397
0x0604Db7E...354b1345F
0.00027483 ETH
51730612018-02-28 19:34:362484 days ago1519846476
0x0604Db7E...354b1345F
0.00187213 ETH
51730362018-02-28 19:28:492484 days ago1519846129
0x0604Db7E...354b1345F
0.10869153 ETH
51730352018-02-28 19:28:462484 days ago1519846126
0x0604Db7E...354b1345F
0.06036526 ETH
51728442018-02-28 18:45:132484 days ago1519843513
0x0604Db7E...354b1345F
0.00064462 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BurritoToken

Compiler Version
v0.4.20+commit.3155dd80

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-02-27
*/

pragma solidity ^0.4.18;

/**
 * @title ERC721 interface
 * @dev see https://github.com/ethereum/eips/issues/721
 */
contract ERC721 {
  event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
  event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);

  function balanceOf(address _owner) public view returns (uint256 _balance);
  function ownerOf(uint256 _tokenId) public view returns (address _owner);
  function transfer(address _to, uint256 _tokenId) public;
  function approve(address _to, uint256 _tokenId) public;
  function takeOwnership(uint256 _tokenId) public;
}

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
  address public owner;


  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  function Ownable() public {
    owner = msg.sender;
  }


  /**
   * @dev Throws if called by any account other than the owner.
   */
  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }


  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
  function transferOwnership(address newOwner) onlyOwner public {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is Ownable {
  event Pause();
  event Unpause();

  bool public paused = false;


  /**
   * @dev Modifier to make a function callable only when the contract is not paused.
   */
  modifier whenNotPaused() {
    require(!paused);
    _;
  }

  /**
   * @dev Modifier to make a function callable only when the contract is paused.
   */
  modifier whenPaused() {
    require(paused);
    _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function pause() onlyOwner whenNotPaused public {
    paused = true;
    Pause();
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function unpause() onlyOwner whenPaused public {
    paused = false;
    Unpause();
  }
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {
  function mul(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal constant returns (uint256) {
    // assert(b > 0); // Solidity automatically throws 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 constant returns (uint256) {
    assert(b <= a);
    return a - b;
  }
  
  function add(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

/**
 * @title ERC721Token
 * Generic implementation for the required functionality of the ERC721 standard
 */
contract BurritoToken is ERC721, Ownable, Pausable {
  using SafeMath for uint256;

  // Total amount of tokens
  uint256 private totalTokens;
  uint256[] private listed;
  uint256 public devOwed;
  uint256 public burritoPoolTotal;
  uint256 public tacoPoolTotal;
  uint256 public saucePoolTotal;
  uint256 public lastPurchase;

  // Burrito Data
  mapping (uint256 => Token) private tokens;

  // Mapping from token ID to owner
  mapping (uint256 => address) private tokenOwner;

  // Mapping from token ID to approved address
  mapping (uint256 => address) private tokenApprovals;

  // Mapping from owner to list of owned token IDs
  mapping (address => uint256[]) private ownedTokens;

  // Mapping from token ID to index of the owner tokens list
  mapping(uint256 => uint256) private ownedTokensIndex;

  // Balances from % payouts.
  mapping (address => uint256) private payoutBalances; 

  // Events
  event Purchased(uint256 indexed _tokenId, address indexed _owner, uint256 _purchasePrice);

  // Purchasing Caps for Determining Next Pool Cut
  uint256 private firstCap  = 0.5 ether;
  uint256 private secondCap = 1.0 ether;
  uint256 private thirdCap  = 3.0 ether;
  uint256 private finalCap  = 5.0 ether;

  // Percentages
  uint256 public feePercentage = 5;
  uint256 public dividendCutPercentage = 100; // 100 / 10000
  uint256 public dividendDecreaseFactor = 2;
  uint256 public megabossCutPercentage = 1;
  uint256 public bossCutPercentage = 1;
  uint256 public mainPoolCutPercentage = 15;

  // Bosses
  uint256 private megabossTokenId = 10000000;

  uint256 private BURRITO_KIND = 1;
  uint256 private TACO_KIND = 2;
  uint256 private SAUCE_KIND = 3;

  // Struct to store Burrito Data
  struct Token {
      uint256 price;         // Current price of the item.
      uint256 lastPrice;     // lastPrice this was sold for, used for adding to pool.
      uint256 payout;        // The percent of the pool rewarded.
      uint256 withdrawn;     // The amount of Eth this token has withdrawn from the pool.
      address owner;         // Current owner of the item.
      uint256 bossTokenId;   // Current boss of the token - 1% bossCut
      uint8   kind;          // 1 - burrito, 2 - taco, 3 - sauce
      address[5] previousOwners;
  }

  /**
  * @dev createListing Adds new ERC721 Token
  * @param _tokenId uint256 ID of new token
  * @param _price uint256 starting price in wei
  * @param _payoutPercentage uint256 payout percentage (divisible by 10)
  * @param _owner address of new owner
  */
  function createToken(uint256 _tokenId, uint256 _price, uint256 _lastPrice, uint256 _payoutPercentage, uint8 _kind, uint256 _bossTokenId, address _owner) onlyOwner() public {
    require(_price > 0);
    require(_lastPrice < _price);
    // make sure token hasn't been used yet
    require(tokens[_tokenId].price == 0);
    // check for kinds
    require(_kind > 0 && _kind <= 3);
    
    // create new token
    Token storage newToken = tokens[_tokenId];

    newToken.owner = _owner;
    newToken.price = _price;
    newToken.lastPrice = _lastPrice;
    newToken.payout = _payoutPercentage;
    newToken.kind = _kind;
    newToken.bossTokenId = _bossTokenId;
    newToken.previousOwners = [address(this), address(this), address(this), address(this), address(this)];

    // store burrito in storage
    listed.push(_tokenId);
    
    // mint new token
    _mint(_owner, _tokenId);
  }

  function createMultiple (uint256[] _itemIds, uint256[] _prices, uint256[] _lastPrices, uint256[] _payouts, uint8[] _kinds, uint256[] _bossTokenIds, address[] _owners) onlyOwner() external {
    for (uint256 i = 0; i < _itemIds.length; i++) {
      createToken(_itemIds[i], _prices[i], _lastPrices[i], _payouts[i], _kinds[i], _bossTokenIds[i], _owners[i]);
    }
  }

  /**
  * @dev Determines next price of token
  * @param _price uint256 ID of current price
  */
  function getNextPrice (uint256 _price) public view returns (uint256 _nextPrice) {
    if (_price < firstCap) {
      return _price.mul(200).div(100 - feePercentage);
    } else if (_price < secondCap) {
      return _price.mul(135).div(100 - feePercentage);
    } else if (_price < thirdCap) {
      return _price.mul(125).div(100 - feePercentage);
    } else if (_price < finalCap) {
      return _price.mul(117).div(100 - feePercentage);
    } else {
      return _price.mul(115).div(100 - feePercentage);
    }
  }

  function calculatePoolCut (uint256 _price) public view returns (uint256 _poolCut) {
    if (_price < firstCap) {
      return _price.mul(10).div(100);
    } else if (_price < secondCap) {
      return _price.mul(9).div(100);
    } else if (_price < thirdCap) {
      return _price.mul(8).div(100);
    } else if (_price < finalCap) {
      return _price.mul(7).div(100);
    } else {
      return _price.mul(5).div(100);
    }
  }

  /**
  * @dev Purchase burrito from previous owner
  * @param _tokenId uint256 of token
  */
  function purchase(uint256 _tokenId) public 
    payable
    isNotContract(msg.sender)
  {
    require(!paused);

    // get data from storage
    Token storage token = tokens[_tokenId];
    uint256 price = token.price;
    address oldOwner = token.owner;

    // revert checks
    require(price > 0);
    require(msg.value >= price);
    require(oldOwner != msg.sender);

    // Calculate pool cut for taxes.
    uint256 priceDelta = price.sub(token.lastPrice);
    uint256 poolCut = calculatePoolCut(priceDelta);
    
    _updatePools(token.kind, poolCut);
    
    uint256 fee = price.mul(feePercentage).div(100);
    devOwed = devOwed.add(fee);

    // Dividends
    uint256 taxesPaid = _payDividendsAndBosses(token, price);

    _shiftPreviousOwners(token, msg.sender);

    transferToken(oldOwner, msg.sender, _tokenId);

    // Transfer payment to old owner minus the developer's and pool's cut.
    // Calculate the winnings for the previous owner.
    uint256 finalPayout = price.sub(fee).sub(poolCut).sub(taxesPaid);

    // set new prices
    token.lastPrice = price;
    token.price = getNextPrice(price);

    // raise event
    Purchased(_tokenId, msg.sender, price);

    if (oldOwner != address(this)) {
      oldOwner.transfer(finalPayout);
    }

    // Calculate overspending
    uint256 excess = msg.value - price;
    
    if (excess > 0) {
        // Refund overspending
        msg.sender.transfer(excess);
    }
    
    // set last purchase price to storage
    lastPurchase = now;
  }

    /// @dev Shift the 6 most recent buyers, and add the new buyer
  /// to the front.
  /// @param _newOwner The buyer to add to the front of the recent
  /// buyers list.
  function _shiftPreviousOwners(Token storage _token, address _newOwner) private {
      _token.previousOwners[4] = _token.previousOwners[3];
      _token.previousOwners[3] = _token.previousOwners[2];
      _token.previousOwners[2] = _token.previousOwners[1];
      _token.previousOwners[1] = _token.previousOwners[0];
      _token.previousOwners[0] = _newOwner;
  }

  function _updatePools(uint8 _kind, uint256 _poolCut) internal {
    uint256 poolCutToMain = _poolCut.mul(mainPoolCutPercentage).div(100);

    if (_kind == BURRITO_KIND) {
      burritoPoolTotal += _poolCut;
    } else if (_kind == TACO_KIND) {
      burritoPoolTotal += poolCutToMain;

      tacoPoolTotal += _poolCut.sub(poolCutToMain);
    } else if (_kind == SAUCE_KIND) {
      burritoPoolTotal += poolCutToMain;

      saucePoolTotal += _poolCut.sub(poolCutToMain);
    }
  }

  // 1%, 0.5%, 0.25%, 0.125%, 0.0625%
  function _payDividendsAndBosses(Token _token, uint256 _price) private returns (uint256 paid) {
    uint256 dividend0 = _price.mul(dividendCutPercentage).div(10000);
    uint256 dividend1 = dividend0.div(dividendDecreaseFactor);
    uint256 dividend2 = dividend1.div(dividendDecreaseFactor);
    uint256 dividend3 = dividend2.div(dividendDecreaseFactor);
    uint256 dividend4 = dividend3.div(dividendDecreaseFactor);

    // Pay first dividend.
    if (_token.previousOwners[0] != address(this)) {_token.previousOwners[0].transfer(dividend0); paid = paid.add(dividend0);}
    if (_token.previousOwners[1] != address(this)) {_token.previousOwners[1].transfer(dividend1); paid = paid.add(dividend1);}
    if (_token.previousOwners[2] != address(this)) {_token.previousOwners[2].transfer(dividend2); paid = paid.add(dividend2);}
    if (_token.previousOwners[3] != address(this)) {_token.previousOwners[3].transfer(dividend3); paid = paid.add(dividend3);}
    if (_token.previousOwners[4] != address(this)) {_token.previousOwners[4].transfer(dividend4); paid = paid.add(dividend4);}

    uint256 tax = _price.mul(1).div(100);

    if (tokens[megabossTokenId].owner != address(0)) {
      tokens[megabossTokenId].owner.transfer(tax);
      paid = paid.add(tax);
    }

    if (tokens[_token.bossTokenId].owner != address(0)) { 
      tokens[_token.bossTokenId].owner.transfer(tax);
      paid = paid.add(tax);
    }
  }

  /**
  * @dev Transfer Token from Previous Owner to New Owner
  * @param _from previous owner address
  * @param _to new owner address
  * @param _tokenId uint256 ID of token
  */
  function transferToken(address _from, address _to, uint256 _tokenId) internal {

    // check token exists
    require(tokenExists(_tokenId));

    // make sure previous owner is correct
    require(tokens[_tokenId].owner == _from);

    require(_to != address(0));
    require(_to != address(this));

    // pay any unpaid payouts to previous owner of burrito
    updateSinglePayout(_from, _tokenId);

    // clear approvals linked to this token
    clearApproval(_from, _tokenId);

    // remove token from previous owner
    removeToken(_from, _tokenId);

    // update owner and add token to new owner
    tokens[_tokenId].owner = _to;
    addToken(_to, _tokenId);

   //raise event
    Transfer(_from, _to, _tokenId);
  }

  /**
  * @dev Withdraw dev's cut
  */
  function withdraw() onlyOwner public {
    owner.transfer(devOwed);
    devOwed = 0;
  }

  /**
  * @dev Updates the payout for the burritos the owner has
  * @param _owner address of token owner
  */
  // function updatePayout(address _owner) public {
  //   uint256[] memory ownerTokens = ownedTokens[_owner];
  //   uint256 owed;
  //   for (uint256 i = 0; i < ownerTokens.length; i++) {
  //     owed += _calculateOnePayout(ownerTokens[i]);
  //   }

  //   payoutBalances[_owner] += owed;
  // }

  function updatePayout(address _owner) public {
    uint256[] memory ownerTokens = ownedTokens[_owner];
    uint256 owed;
    for (uint256 i = 0; i < ownerTokens.length; i++) {
        uint256 totalOwed;
        
        if (tokens[ownerTokens[i]].kind == BURRITO_KIND) {
          totalOwed = burritoPoolTotal * tokens[ownerTokens[i]].payout / 10000;
        } else if (tokens[ownerTokens[i]].kind == TACO_KIND) {
          totalOwed = tacoPoolTotal * tokens[ownerTokens[i]].payout / 10000;
        } else if (tokens[ownerTokens[i]].kind == SAUCE_KIND) {
          totalOwed = saucePoolTotal * tokens[ownerTokens[i]].payout / 10000;
        }

        uint256 totalTokenOwed = totalOwed.sub(tokens[ownerTokens[i]].withdrawn);
        owed += totalTokenOwed;
        
        tokens[ownerTokens[i]].withdrawn += totalTokenOwed;
    }
    payoutBalances[_owner] += owed;
  }

  function priceOf(uint256 _tokenId) public view returns (uint256) {
    return tokens[_tokenId].price;
  }

  /**
   * @dev Update a single burrito payout for transfers.
   * @param _owner Address of the owner of the burrito.
   * @param _tokenId Unique Id of the token.
  **/
  function updateSinglePayout(address _owner, uint256 _tokenId) internal {
    uint256 totalOwed;
        
    if (tokens[_tokenId].kind == BURRITO_KIND) {
      totalOwed = burritoPoolTotal * tokens[_tokenId].payout / 10000;
    } else if (tokens[_tokenId].kind == TACO_KIND) {
      totalOwed = tacoPoolTotal * tokens[_tokenId].payout / 10000;
    } else if (tokens[_tokenId].kind == SAUCE_KIND) {
      totalOwed = saucePoolTotal * tokens[_tokenId].payout / 10000;
    }

    uint256 totalTokenOwed = totalOwed.sub(tokens[_tokenId].withdrawn);
        
    tokens[_tokenId].withdrawn += totalTokenOwed;
    payoutBalances[_owner] += totalTokenOwed;
  }

  /**
  * @dev Owner can withdraw their accumulated payouts
  * @param _owner address of token owner
  */
  function withdrawRent(address _owner) public {
    require(_owner != address(0));
    updatePayout(_owner);
    uint256 payout = payoutBalances[_owner];
    payoutBalances[_owner] = 0;
    _owner.transfer(payout);
  }

  function getRentOwed(address _owner) public view returns (uint256 owed) {
    require(_owner != address(0));
    updatePayout(_owner);
    return payoutBalances[_owner];
  }

  /**
  * @dev Return all burrito data
  * @param _tokenId uint256 of token
  */
  function getToken (uint256 _tokenId) external view 
  returns (address _owner, uint256 _price, uint256 _lastPrice, uint256 _nextPrice, uint256 _payout, uint8 _kind, uint256 _bossTokenId, address[5] _previosOwners) 
  {
    Token memory token = tokens[_tokenId];
    return (token.owner, token.price, token.lastPrice, getNextPrice(token.price), token.payout, token.kind, token.bossTokenId, token.previousOwners);
  }

  /**
  * @dev Determines if token exists by checking it's price
  * @param _tokenId uint256 ID of token
  */
  function tokenExists (uint256 _tokenId) public view returns (bool _exists) {
    return tokens[_tokenId].price > 0;
  }

  /**
  * @dev Guarantees msg.sender is owner of the given token
  * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender
  */
  modifier onlyOwnerOf(uint256 _tokenId) {
    require(ownerOf(_tokenId) == msg.sender);
    _;
  }

  /**
  * @dev Guarantees msg.sender is not a contract
  * @param _buyer address of person buying burrito
  */
  modifier isNotContract(address _buyer) {
    uint size;
    assembly { size := extcodesize(_buyer) }
    require(size == 0);
    _;
  }


  /**
  * @dev Gets the total amount of tokens stored by the contract
  * @return uint256 representing the total amount of tokens
  */
  function totalSupply() public view returns (uint256) {
    return totalTokens;
  }

  /**
  * @dev Gets the balance of the specified address
  * @param _owner address to query the balance of
  * @return uint256 representing the amount owned by the passed address
  */
  function balanceOf(address _owner) public view returns (uint256) {
    return ownedTokens[_owner].length;
  }

  /**
  * @dev Gets the list of tokens owned by a given address
  * @param _owner address to query the tokens of
  * @return uint256[] representing the list of tokens owned by the passed address
  */
  function tokensOf(address _owner) public view returns (uint256[]) {
    return ownedTokens[_owner];
  }

  /**
  * @dev Gets the owner of the specified token ID
  * @param _tokenId uint256 ID of the token to query the owner of
  * @return owner address currently marked as the owner of the given token ID
  */
  function ownerOf(uint256 _tokenId) public view returns (address) {
    address owner = tokenOwner[_tokenId];
    require(owner != address(0));
    return owner;
  }

  /**
   * @dev Gets the approved address to take ownership of a given token ID
   * @param _tokenId uint256 ID of the token to query the approval of
   * @return address currently approved to take ownership of the given token ID
   */
  function approvedFor(uint256 _tokenId) public view returns (address) {
    return tokenApprovals[_tokenId];
  }

  /**
  * @dev Transfers the ownership of a given token ID to another address
  * @param _to address to receive the ownership of the given token ID
  * @param _tokenId uint256 ID of the token to be transferred
  */
  function transfer(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) {
    clearApprovalAndTransfer(msg.sender, _to, _tokenId);
  }

  /**
  * @dev Approves another address to claim for the ownership of the given token ID
  * @param _to address to be approved for the given token ID
  * @param _tokenId uint256 ID of the token to be approved
  */
  function approve(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) {
    address owner = ownerOf(_tokenId);
    require(_to != owner);
    if (approvedFor(_tokenId) != 0 || _to != 0) {
      tokenApprovals[_tokenId] = _to;
      Approval(owner, _to, _tokenId);
    }
  }

  /**
  * @dev Claims the ownership of a given token ID
  * @param _tokenId uint256 ID of the token being claimed by the msg.sender
  */
  function takeOwnership(uint256 _tokenId) public {
    require(isApprovedFor(msg.sender, _tokenId));
    clearApprovalAndTransfer(ownerOf(_tokenId), msg.sender, _tokenId);
  }

  /**
   * @dev Tells whether the msg.sender is approved for the given token ID or not
   * This function is not private so it can be extended in further implementations like the operatable ERC721
   * @param _owner address of the owner to query the approval of
   * @param _tokenId uint256 ID of the token to query the approval of
   * @return bool whether the msg.sender is approved for the given token ID or not
   */
  function isApprovedFor(address _owner, uint256 _tokenId) internal view returns (bool) {
    return approvedFor(_tokenId) == _owner;
  }
  
  /**
  * @dev Internal function to clear current approval and transfer the ownership of a given token ID
  * @param _from address which you want to send tokens from
  * @param _to address which you want to transfer the token to
  * @param _tokenId uint256 ID of the token to be transferred
  */
  function clearApprovalAndTransfer(address _from, address _to, uint256 _tokenId) internal isNotContract(_to) {
    require(_to != address(0));
    require(_to != ownerOf(_tokenId));
    require(ownerOf(_tokenId) == _from);

    clearApproval(_from, _tokenId);
    updateSinglePayout(_from, _tokenId);
    removeToken(_from, _tokenId);
    addToken(_to, _tokenId);
    Transfer(_from, _to, _tokenId);
  }

  /**
  * @dev Internal function to clear current approval of a given token ID
  * @param _tokenId uint256 ID of the token to be transferred
  */
  function clearApproval(address _owner, uint256 _tokenId) private {
    require(ownerOf(_tokenId) == _owner);
    tokenApprovals[_tokenId] = 0;
    Approval(_owner, 0, _tokenId);
  }


    /**
  * @dev Mint token function
  * @param _to The address that will own the minted token
  * @param _tokenId uint256 ID of the token to be minted by the msg.sender
  */
  function _mint(address _to, uint256 _tokenId) internal {
    require(_to != address(0));
    addToken(_to, _tokenId);
    Transfer(0x0, _to, _tokenId);
  }

  /**
  * @dev Internal function to add a token ID to the list of a given address
  * @param _to address representing the new owner of the given token ID
  * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address
  */
  function addToken(address _to, uint256 _tokenId) private {
    require(tokenOwner[_tokenId] == address(0));
    tokenOwner[_tokenId] = _to;
    tokens[_tokenId].owner = _to;
    uint256 length = balanceOf(_to);
    ownedTokens[_to].push(_tokenId);
    ownedTokensIndex[_tokenId] = length;
    totalTokens = totalTokens.add(1);
  }

  /**
  * @dev Internal function to remove a token ID from the list of a given address
  * @param _from address representing the previous owner of the given token ID
  * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address
  */
  function removeToken(address _from, uint256 _tokenId) private {
    require(ownerOf(_tokenId) == _from);

    uint256 tokenIndex = ownedTokensIndex[_tokenId];
    uint256 lastTokenIndex = balanceOf(_from).sub(1);
    uint256 lastToken = ownedTokens[_from][lastTokenIndex];

    tokenOwner[_tokenId] = 0;
    ownedTokens[_from][tokenIndex] = lastToken;
    ownedTokens[_from][lastTokenIndex] = 0;
    // Note that this will handle single-element arrays. In that case, both tokenIndex and lastTokenIndex are going to
    // be zero. Then we can make sure that we will remove _tokenId from the ownedTokens list since we are first swapping
    // the lastToken to the first position, and then dropping the element placed in the last position of the list

    ownedTokens[_from].length--;
    ownedTokensIndex[_tokenId] = 0;
    ownedTokensIndex[lastToken] = tokenIndex;
    totalTokens = totalTokens.sub(1);
  }

  function name() public pure returns (string _name) {
    return "CryptoBurrito.co";
  }

  function symbol() public pure returns (string _symbol) {
    return "MBT";
  }

  function setFeePercentage(uint256 _newFee) onlyOwner public {
    require(_newFee <= 5);
    require(_newFee >= 3);

    feePercentage = _newFee;
  }
  
  function setMainPoolCutPercentage(uint256 _newFee) onlyOwner public {
    require(_newFee <= 30);
    require(_newFee >= 5);

    mainPoolCutPercentage = _newFee;
  }

  function setDividendCutPercentage(uint256 _newFee) onlyOwner public {
    require(_newFee <= 200);
    require(_newFee >= 50);

    dividendCutPercentage = _newFee;
  }

  // Migration
  OldContract oldContract;

  function setOldContract(address _addr) onlyOwner public {
    oldContract = OldContract(_addr);
  }

  function populateFromOldContract(uint256[] _ids) onlyOwner public {
    for (uint256 i = 0; i < _ids.length; i++) {
      // Can't rewrite tokens
      if (tokens[_ids[i]].price == 0) {
        address _owner;
        uint256 _price;
        uint256 _lastPrice;
        uint256 _nextPrice;
        uint256 _payout;
        uint8 _kind;
        uint256 _bossTokenId;

        (_owner, _price, _lastPrice, _nextPrice, _payout, _kind, _bossTokenId) = oldContract.getToken(_ids[i]);

        createToken(_ids[i], _price, _lastPrice, _payout, _kind, _bossTokenId, _owner);
      }
    }
  }
}

interface OldContract {
  function getToken (uint256 _tokenId) external view 
  returns (address _owner, uint256 _price, uint256 _lastPrice, uint256 _nextPrice, uint256 _payout, uint8 _kind, uint256 _bossTokenId);
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"tokenExists","outputs":[{"name":"_exists","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_itemIds","type":"uint256[]"},{"name":"_prices","type":"uint256[]"},{"name":"_lastPrices","type":"uint256[]"},{"name":"_payouts","type":"uint256[]"},{"name":"_kinds","type":"uint8[]"},{"name":"_bossTokenIds","type":"uint256[]"},{"name":"_owners","type":"address[]"}],"name":"createMultiple","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"getRentOwed","outputs":[{"name":"owed","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_ids","type":"uint256[]"}],"name":"populateFromOldContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"_name","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mainPoolCutPercentage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"megabossCutPercentage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"approvedFor","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dividendDecreaseFactor","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"burritoPoolTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bossCutPercentage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"lastPurchase","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_price","type":"uint256"}],"name":"calculatePoolCut","outputs":[{"name":"_poolCut","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOf","outputs":[{"name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"withdrawRent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_lastPrice","type":"uint256"},{"name":"_payoutPercentage","type":"uint256"},{"name":"_kind","type":"uint8"},{"name":"_bossTokenId","type":"uint256"},{"name":"_owner","type":"address"}],"name":"createToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"_symbol","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_price","type":"uint256"}],"name":"getNextPrice","outputs":[{"name":"_nextPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"feePercentage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newFee","type":"uint256"}],"name":"setMainPoolCutPercentage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_tokenId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newFee","type":"uint256"}],"name":"setFeePercentage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"takeOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newFee","type":"uint256"}],"name":"setDividendCutPercentage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"priceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"saucePoolTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"devOwed","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dividendCutPercentage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setOldContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"getToken","outputs":[{"name":"_owner","type":"address"},{"name":"_price","type":"uint256"},{"name":"_lastPrice","type":"uint256"},{"name":"_nextPrice","type":"uint256"},{"name":"_payout","type":"uint256"},{"name":"_kind","type":"uint8"},{"name":"_bossTokenId","type":"uint256"},{"name":"_previosOwners","type":"address[5]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"}],"name":"updatePayout","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"}],"name":"purchase","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tacoPoolTotal","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_tokenId","type":"uint256"},{"indexed":true,"name":"_owner","type":"address"},{"indexed":false,"name":"_purchasePrice","type":"uint256"}],"name":"Purchased","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"}]

606060405260008060146101000a81548160ff0219169083151502179055506706f05b59d3b20000600e55670de0b6b3a7640000600f556729a2241af62c0000601055674563918244f4000060115560056012556064601355600260145560016015556001601655600f6017556298968060185560016019556002601a556003601b55336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614226806100d16000396000f30060606040526004361061020e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168062923f9e1461021357806303af2cda1461024e57806303dec463146102f4578063059173691461034157806306fdde031461039b578063095ea7b31461042957806318160ddd1461046b57806319fb52db1461049457806321a6c7aa146104bd5780632a6dd48f146104e657806332859392146105495780633520971514610572578063368f76a91461059b5780633ccfd60b146105c45780633f4ba83a146105d95780634528f3ec146105ee5780634ba336e5146106175780635a3f26721461064e5780635a5ebebf146106dc5780635c975abb146107155780636352211e146107425780636a01b6e6146107a557806370a08231146108175780638456cb59146108645780638da5cb5b1461087957806395d89b41146108ce578063976e0da91461095c578063a001ecdd14610993578063a1b608c9146109bc578063a9059cbb146109df578063ae06c1b714610a21578063b2e6ceeb14610a44578063b775553d14610a67578063b9186d7d14610a8a578063bedbb1a514610ac1578063bf37b8f114610aea578063c7ac14b114610b13578063e0e0468514610b3c578063e4b50cb814610b75578063edcb9e9e14610c37578063efef39a114610c70578063f2fde38b14610c88578063f5e736ed14610cc1575b600080fd5b341561021e57600080fd5b6102346004808035906020019091905050610cea565b604051808215151515815260200191505060405180910390f35b341561025957600080fd5b6102f260048080359060200190820180359060200191909192908035906020019082018035906020019190919290803590602001908201803590602001919091929080359060200190820180359060200191909192908035906020019082018035906020019190919290803590602001908201803590602001919091929080359060200190820180359060200191909192905050610d0c565b005b34156102ff57600080fd5b61032b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610e4b565b6040518082815260200191505060405180910390f35b341561034c57600080fd5b610399600480803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091905050610ed8565b005b34156103a657600080fd5b6103ae6110cd565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103ee5780820151818401526020810190506103d3565b50505050905090810190601f16801561041b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561043457600080fd5b610469600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611110565b005b341561047657600080fd5b61047e6112a3565b6040518082815260200191505060405180910390f35b341561049f57600080fd5b6104a76112ad565b6040518082815260200191505060405180910390f35b34156104c857600080fd5b6104d06112b3565b6040518082815260200191505060405180910390f35b34156104f157600080fd5b61050760048080359060200190919050506112b9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561055457600080fd5b61055c6112f6565b6040518082815260200191505060405180910390f35b341561057d57600080fd5b6105856112fc565b6040518082815260200191505060405180910390f35b34156105a657600080fd5b6105ae611302565b6040518082815260200191505060405180910390f35b34156105cf57600080fd5b6105d7611308565b005b34156105e457600080fd5b6105ec6113d0565b005b34156105f957600080fd5b61060161148e565b6040518082815260200191505060405180910390f35b341561062257600080fd5b6106386004808035906020019091905050611494565b6040518082815260200191505060405180910390f35b341561065957600080fd5b610685600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506115a5565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106c85780820151818401526020810190506106ad565b505050509050019250505060405180910390f35b34156106e757600080fd5b610713600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611642565b005b341561072057600080fd5b610728611753565b604051808215151515815260200191505060405180910390f35b341561074d57600080fd5b6107636004808035906020019091905050611766565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156107b057600080fd5b610815600480803590602001909190803590602001909190803590602001909190803590602001909190803560ff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506117e4565b005b341561082257600080fd5b61084e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a92565b6040518082815260200191505060405180910390f35b341561086f57600080fd5b610877611ade565b005b341561088457600080fd5b61088c611b9e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156108d957600080fd5b6108e1611bc3565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610921578082015181840152602081019050610906565b50505050905090810190601f16801561094e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561096757600080fd5b61097d6004808035906020019091905050611c06565b6040518082815260200191505060405180910390f35b341561099e57600080fd5b6109a6611d2b565b6040518082815260200191505060405180910390f35b34156109c757600080fd5b6109dd6004808035906020019091905050611d31565b005b34156109ea57600080fd5b610a1f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611db6565b005b3415610a2c57600080fd5b610a426004808035906020019091905050611e09565b005b3415610a4f57600080fd5b610a656004808035906020019091905050611e8e565b005b3415610a7257600080fd5b610a886004808035906020019091905050611eb9565b005b3415610a9557600080fd5b610aab6004808035906020019091905050611f3e565b6040518082815260200191505060405180910390f35b3415610acc57600080fd5b610ad4611f5e565b6040518082815260200191505060405180910390f35b3415610af557600080fd5b610afd611f64565b6040518082815260200191505060405180910390f35b3415610b1e57600080fd5b610b26611f6a565b6040518082815260200191505060405180910390f35b3415610b4757600080fd5b610b73600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611f70565b005b3415610b8057600080fd5b610b96600480803590602001909190505061200f565b604051808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018681526020018581526020018460ff1660ff16815260200183815260200182600560200280838360005b83811015610c1d578082015181840152602081019050610c02565b505050509050019850505050505050505060405180910390f35b3415610c4257600080fd5b610c6e600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506121bb565b005b610c8660048080359060200190919050506124f0565b005b3415610c9357600080fd5b610cbf600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061291a565b005b3415610ccc57600080fd5b610cd4612a6f565b6040518082815260200191505060405180910390f35b6000806008600084815260200190815260200160002060000154119050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d6957600080fd5b600090505b8e8e9050811015610e3a57610e2d8f8f838181101515610d8a57fe5b905060200201358e8e848181101515610d9f57fe5b905060200201358d8d858181101515610db457fe5b905060200201358c8c868181101515610dc957fe5b905060200201358b8b878181101515610dde57fe5b9050602002013560ff168a8a888181101515610df657fe5b905060200201358989898181101515610e0b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166117e4565b8080600101915050610d6e565b505050505050505050505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610e8857600080fd5b610e91826121bb565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806000806000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f3f57600080fd5b600097505b88518810156110c2576000600860008b8b815181101515610f6157fe5b9060200190602002015181526020019081526020016000206000015414156110b557601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4b50cb88a8a815181101515610fcf57fe5b90602001906020020151600060405160e001526040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060e060405180830381600087803b151561103357600080fd5b6102c65a03f1151561104457600080fd5b50505060405180519060200180519060200180519060200180519060200180519060200180519060200180519050809750819850829950839a50849b50859c50869d50505050505050506110b4898981518110151561109f57fe5b9060200190602002015187878686868d6117e4565b5b8780600101985050610f44565b505050505050505050565b6110d5613fb4565b6040805190810160405280601081526020017f43727970746f4275727269746f2e636f00000000000000000000000000000000815250905090565b6000813373ffffffffffffffffffffffffffffffffffffffff1661113382611766565b73ffffffffffffffffffffffffffffffffffffffff1614151561115557600080fd5b61115e83611766565b91508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561119b57600080fd5b60006111a6846112b9565b73ffffffffffffffffffffffffffffffffffffffff161415806111e0575060008473ffffffffffffffffffffffffffffffffffffffff1614155b1561129d5783600a600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a35b50505050565b6000600154905090565b60175481565b60155481565b6000600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60145481565b60045481565b60165481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561136357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6003549081150290604051600060405180830381858888f1935050505015156113c657600080fd5b6000600381905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561142b57600080fd5b600060149054906101000a900460ff16151561144657600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60075481565b6000600e548210156114ce576114c760646114b9600a85612a7590919063ffffffff16565b612aa890919063ffffffff16565b90506115a0565b600f54821015611506576114ff60646114f1600985612a7590919063ffffffff16565b612aa890919063ffffffff16565b90506115a0565b60105482101561153e576115376064611529600885612a7590919063ffffffff16565b612aa890919063ffffffff16565b90506115a0565b6011548210156115765761156f6064611561600785612a7590919063ffffffff16565b612aa890919063ffffffff16565b90506115a0565b61159d606461158f600585612a7590919063ffffffff16565b612aa890919063ffffffff16565b90505b919050565b6115ad613fc8565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561163657602002820191906000526020600020905b815481526020019060010190808311611622575b50505050509050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561167f57600080fd5b611688826121bb565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561174f57600080fd5b5050565b600060149054906101000a900460ff1681565b6000806009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156117db57600080fd5b80915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561184157600080fd5b60008711151561185057600080fd5b868610151561185e57600080fd5b6000600860008a81526020019081526020016000206000015414151561188357600080fd5b60008460ff1611801561189a575060038460ff1611155b15156118a557600080fd5b600860008981526020019081526020016000209050818160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160000181905550858160010181905550848160020181905550838160060160006101000a81548160ff021916908360ff16021790555082816005018190555060a0604051908101604052803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600701906005611a54929190613fdc565b5060028054806001018281611a699190614059565b916000526020600020900160008a90919091505550611a888289612ac3565b5050505050505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b3957600080fd5b600060149054906101000a900460ff16151515611b5557600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bcb613fb4565b6040805190810160405280600381526020017f4d42540000000000000000000000000000000000000000000000000000000000815250905090565b6000600e54821015611c4457611c3d601254606403611c2f60c885612a7590919063ffffffff16565b612aa890919063ffffffff16565b9050611d26565b600f54821015611c8057611c79601254606403611c6b608785612a7590919063ffffffff16565b612aa890919063ffffffff16565b9050611d26565b601054821015611cbc57611cb5601254606403611ca7607d85612a7590919063ffffffff16565b612aa890919063ffffffff16565b9050611d26565b601154821015611cf857611cf1601254606403611ce3607585612a7590919063ffffffff16565b612aa890919063ffffffff16565b9050611d26565b611d23601254606403611d15607385612a7590919063ffffffff16565b612aa890919063ffffffff16565b90505b919050565b60125481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d8c57600080fd5b601e8111151515611d9c57600080fd5b60058110151515611dac57600080fd5b8060178190555050565b803373ffffffffffffffffffffffffffffffffffffffff16611dd782611766565b73ffffffffffffffffffffffffffffffffffffffff16141515611df957600080fd5b611e04338484612b5d565b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e6457600080fd5b60058111151515611e7457600080fd5b60038110151515611e8457600080fd5b8060128190555050565b611e983382612cc8565b1515611ea357600080fd5b611eb6611eaf82611766565b3383612b5d565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f1457600080fd5b60c88111151515611f2457600080fd5b60328110151515611f3457600080fd5b8060138190555050565b600060086000838152602001908152602001600020600001549050919050565b60065481565b60035481565b60135481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611fcb57600080fd5b80601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000806000806000612022614085565b61202a6140c3565b600860008b81526020019081526020016000206101006040519081016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600582015481526020016006820160009054906101000a900460ff1660ff1660ff16815260200160078201600580602002604051908101604052809291908260058015612161576020028201915b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612117575b50505050508152505090508060800151816000015182602001516121888460000151611c06565b84604001518560c001518660a001518760e001518090509850985098509850985098509850985050919395975091939597565b6121c3613fc8565b600080600080600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561225257602002820191906000526020600020905b81548152602001906001019080831161223e575b50505050509450600092505b845183101561249b5760195460086000878681518110151561227c57fe5b90602001906020020151815260200190815260200160002060060160009054906101000a900460ff1660ff1614156122f4576127106008600087868151811015156122c357fe5b90602001906020020151815260200190815260200160002060020154600454028115156122ec57fe5b04915061240c565b601a5460086000878681518110151561230957fe5b90602001906020020151815260200190815260200160002060060160009054906101000a900460ff1660ff1614156123815761271060086000878681518110151561235057fe5b906020019060200201518152602001908152602001600020600201546005540281151561237957fe5b04915061240b565b601b5460086000878681518110151561239657fe5b90602001906020020151815260200190815260200160002060060160009054906101000a900460ff1660ff16141561240a576127106008600087868151811015156123dd57fe5b906020019060200201518152602001908152602001600020600201546006540281151561240657fe5b0491505b5b5b61244c60086000878681518110151561242157fe5b9060200190602002015181526020019081526020016000206003015483612d0990919063ffffffff16565b905080840193508060086000878681518110151561246657fe5b90602001906020020151815260200190815260200160002060030160008282540192505081905550828060010193505061225e565b83600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550505050505050565b6000806000806000806000806000336000813b905060008114151561251457600080fd5b600060149054906101000a900460ff1615151561253057600080fd5b600860008d81526020019081526020016000209a508a6000015499508a60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16985060008a11151561258257600080fd5b89341015151561259157600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16141515156125cc57600080fd5b6125e38b600101548b612d0990919063ffffffff16565b97506125ee88611494565b965061260b8b60060160009054906101000a900460ff1688612d22565b61263360646126256012548d612a7590919063ffffffff16565b612aa890919063ffffffff16565b955061264a86600354612dfb90919063ffffffff16565b6003819055506127878b6101006040519081016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600582015481526020016006820160009054906101000a900460ff1660ff1660ff16815260200160078201600580602002604051908101604052809291908260058015612778576020028201915b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161272e575b5050505050815250508b612e19565b94506127938b33613479565b61279e89338e6136e3565b6127d5856127c7896127b98a8f612d0990919063ffffffff16565b612d0990919063ffffffff16565b612d0990919063ffffffff16565b9350898b600101819055506127e98a611c06565b8b600001819055503373ffffffffffffffffffffffffffffffffffffffff168c7ffd51b2c9f55c42d2b72ac683526519563be02fc0107f034ff430c05185ff1b668c6040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161415156128b6578873ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505015156128b557600080fd5b5b89340392506000831115612905573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050151561290457600080fd5b5b42600781905550505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561297557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156129b157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60055481565b60008082840290506000841480612a965750828482811515612a9357fe5b04145b1515612a9e57fe5b8091505092915050565b6000808284811515612ab657fe5b0490508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612aff57600080fd5b612b0982826138c5565b8173ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b816000813b9050600081141515612b7357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515612baf57600080fd5b612bb883611766565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515612bf257600080fd5b8473ffffffffffffffffffffffffffffffffffffffff16612c1284611766565b73ffffffffffffffffffffffffffffffffffffffff16141515612c3457600080fd5b612c3e8584613a84565b612c488584613b6d565b612c528584613d2d565b612c5c84846138c5565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35050505050565b60008273ffffffffffffffffffffffffffffffffffffffff16612cea836112b9565b73ffffffffffffffffffffffffffffffffffffffff1614905092915050565b6000828211151515612d1757fe5b818303905092915050565b6000612d4c6064612d3e60175485612a7590919063ffffffff16565b612aa890919063ffffffff16565b90506019548360ff161415612d705781600460008282540192505081905550612df6565b601a548360ff161415612db45780600460008282540192505081905550612da08183612d0990919063ffffffff16565b600560008282540192505081905550612df5565b601b548360ff161415612df45780600460008282540192505081905550612de48183612d0990919063ffffffff16565b6006600082825401925050819055505b5b5b505050565b6000808284019050838110151515612e0f57fe5b8091505092915050565b6000806000806000806000612e4d612710612e3f6013548b612a7590919063ffffffff16565b612aa890919063ffffffff16565b9550612e6460145487612aa890919063ffffffff16565b9450612e7b60145486612aa890919063ffffffff16565b9350612e9260145485612aa890919063ffffffff16565b9250612ea960145484612aa890919063ffffffff16565b91503073ffffffffffffffffffffffffffffffffffffffff168960e001516000600581101515612ed557fe5b602002015173ffffffffffffffffffffffffffffffffffffffff16141515612f64578860e001516000600581101515612f0a57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f193505050501515612f4e57600080fd5b612f618688612dfb90919063ffffffff16565b96505b3073ffffffffffffffffffffffffffffffffffffffff168960e001516001600581101515612f8e57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1614151561301d578860e001516001600581101515612fc357fe5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050151561300757600080fd5b61301a8588612dfb90919063ffffffff16565b96505b3073ffffffffffffffffffffffffffffffffffffffff168960e00151600260058110151561304757fe5b602002015173ffffffffffffffffffffffffffffffffffffffff161415156130d6578860e00151600260058110151561307c57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505015156130c057600080fd5b6130d38488612dfb90919063ffffffff16565b96505b3073ffffffffffffffffffffffffffffffffffffffff168960e00151600360058110151561310057fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1614151561318f578860e00151600360058110151561313557fe5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050151561317957600080fd5b61318c8388612dfb90919063ffffffff16565b96505b3073ffffffffffffffffffffffffffffffffffffffff168960e0015160046005811015156131b957fe5b602002015173ffffffffffffffffffffffffffffffffffffffff16141515613248578860e0015160046005811015156131ee57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561323257600080fd5b6132458288612dfb90919063ffffffff16565b96505b61326f606461326160018b612a7590919063ffffffff16565b612aa890919063ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff1660086000601854815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561336d5760086000601854815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561335757600080fd5b61336a8188612dfb90919063ffffffff16565b96505b600073ffffffffffffffffffffffffffffffffffffffff16600860008b60a00151815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561346d57600860008a60a00151815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561345757600080fd5b61346a8188612dfb90919063ffffffff16565b96505b50505050505092915050565b81600701600360058110151561348b57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260070160046005811015156134bf57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600701600260058110151561351057fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600701600360058110151561354457fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600701600160058110151561359557fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260070160026005811015156135c957fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600701600060058110151561361a57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600701600160058110151561364e57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808260070160006005811015156136a057fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6136ec81610cea565b15156136f757600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166008600083815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561376757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156137a357600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156137de57600080fd5b6137e88382613b6d565b6137f28382613a84565b6137fc8382613d2d565b816008600083815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061385b82826138c5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561393457600080fd5b826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826008600084815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506139e483611a92565b9050600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806001018281613a379190614059565b91600052602060002090016000849091909150555080600c600084815260200190815260200160002081905550613a7960018054612dfb90919063ffffffff16565b600181905550505050565b8173ffffffffffffffffffffffffffffffffffffffff16613aa482611766565b73ffffffffffffffffffffffffffffffffffffffff16141515613ac657600080fd5b6000600a600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b6000806019546008600085815260200190815260200160002060060160009054906101000a900460ff1660ff161415613bcf57612710600860008581526020019081526020016000206002015460045402811515613bc757fe5b049150613c8b565b601a546008600085815260200190815260200160002060060160009054906101000a900460ff1660ff161415613c2e57612710600860008581526020019081526020016000206002015460055402811515613c2657fe5b049150613c8a565b601b546008600085815260200190815260200160002060060160009054906101000a900460ff1660ff161415613c8957612710600860008581526020019081526020016000206002015460065402811515613c8557fe5b0491505b5b5b613cb4600860008581526020019081526020016000206003015483612d0990919063ffffffff16565b905080600860008581526020019081526020016000206003016000828254019250508190555080600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555050505050565b60008060008473ffffffffffffffffffffffffffffffffffffffff16613d5285611766565b73ffffffffffffffffffffffffffffffffffffffff16141515613d7457600080fd5b600c6000858152602001908152602001600020549250613da66001613d9887611a92565b612d0990919063ffffffff16565b9150600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515613df457fe5b906000526020600020900154905060006009600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084815481101515613ea257fe5b9060005260206000209001819055506000600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515613eff57fe5b906000526020600020900181905550600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003613f609190614128565b506000600c60008681526020019081526020016000208190555082600c600083815260200190815260200160002081905550613fa760018054612d0990919063ffffffff16565b6001819055505050505050565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b8260058101928215614048579160200282015b828111156140475782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613fef565b5b5090506140559190614154565b5090565b8154818355818115116140805781836000526020600020918201910161407f9190614197565b5b505050565b60a0604051908101604052806005905b600073ffffffffffffffffffffffffffffffffffffffff168152602001906001900390816140955790505090565b6101806040519081016040528060008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600060ff1681526020016141226141bc565b81525090565b81548183558181151161414f5781836000526020600020918201910161414e9190614197565b5b505050565b61419491905b8082111561419057600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555060010161415a565b5090565b90565b6141b991905b808211156141b557600081600090555060010161419d565b5090565b90565b60a0604051908101604052806005905b600073ffffffffffffffffffffffffffffffffffffffff168152602001906001900390816141cc57905050905600a165627a7a72305820e8e5b604fb0f4c4babd5442eb666411e5908b0623addf40f2449091c7849b4fb0029

Deployed Bytecode

0x60606040526004361061020e576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168062923f9e1461021357806303af2cda1461024e57806303dec463146102f4578063059173691461034157806306fdde031461039b578063095ea7b31461042957806318160ddd1461046b57806319fb52db1461049457806321a6c7aa146104bd5780632a6dd48f146104e657806332859392146105495780633520971514610572578063368f76a91461059b5780633ccfd60b146105c45780633f4ba83a146105d95780634528f3ec146105ee5780634ba336e5146106175780635a3f26721461064e5780635a5ebebf146106dc5780635c975abb146107155780636352211e146107425780636a01b6e6146107a557806370a08231146108175780638456cb59146108645780638da5cb5b1461087957806395d89b41146108ce578063976e0da91461095c578063a001ecdd14610993578063a1b608c9146109bc578063a9059cbb146109df578063ae06c1b714610a21578063b2e6ceeb14610a44578063b775553d14610a67578063b9186d7d14610a8a578063bedbb1a514610ac1578063bf37b8f114610aea578063c7ac14b114610b13578063e0e0468514610b3c578063e4b50cb814610b75578063edcb9e9e14610c37578063efef39a114610c70578063f2fde38b14610c88578063f5e736ed14610cc1575b600080fd5b341561021e57600080fd5b6102346004808035906020019091905050610cea565b604051808215151515815260200191505060405180910390f35b341561025957600080fd5b6102f260048080359060200190820180359060200191909192908035906020019082018035906020019190919290803590602001908201803590602001919091929080359060200190820180359060200191909192908035906020019082018035906020019190919290803590602001908201803590602001919091929080359060200190820180359060200191909192905050610d0c565b005b34156102ff57600080fd5b61032b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610e4b565b6040518082815260200191505060405180910390f35b341561034c57600080fd5b610399600480803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091905050610ed8565b005b34156103a657600080fd5b6103ae6110cd565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103ee5780820151818401526020810190506103d3565b50505050905090810190601f16801561041b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561043457600080fd5b610469600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611110565b005b341561047657600080fd5b61047e6112a3565b6040518082815260200191505060405180910390f35b341561049f57600080fd5b6104a76112ad565b6040518082815260200191505060405180910390f35b34156104c857600080fd5b6104d06112b3565b6040518082815260200191505060405180910390f35b34156104f157600080fd5b61050760048080359060200190919050506112b9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561055457600080fd5b61055c6112f6565b6040518082815260200191505060405180910390f35b341561057d57600080fd5b6105856112fc565b6040518082815260200191505060405180910390f35b34156105a657600080fd5b6105ae611302565b6040518082815260200191505060405180910390f35b34156105cf57600080fd5b6105d7611308565b005b34156105e457600080fd5b6105ec6113d0565b005b34156105f957600080fd5b61060161148e565b6040518082815260200191505060405180910390f35b341561062257600080fd5b6106386004808035906020019091905050611494565b6040518082815260200191505060405180910390f35b341561065957600080fd5b610685600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506115a5565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156106c85780820151818401526020810190506106ad565b505050509050019250505060405180910390f35b34156106e757600080fd5b610713600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611642565b005b341561072057600080fd5b610728611753565b604051808215151515815260200191505060405180910390f35b341561074d57600080fd5b6107636004808035906020019091905050611766565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156107b057600080fd5b610815600480803590602001909190803590602001909190803590602001909190803590602001909190803560ff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506117e4565b005b341561082257600080fd5b61084e600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a92565b6040518082815260200191505060405180910390f35b341561086f57600080fd5b610877611ade565b005b341561088457600080fd5b61088c611b9e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156108d957600080fd5b6108e1611bc3565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610921578082015181840152602081019050610906565b50505050905090810190601f16801561094e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561096757600080fd5b61097d6004808035906020019091905050611c06565b6040518082815260200191505060405180910390f35b341561099e57600080fd5b6109a6611d2b565b6040518082815260200191505060405180910390f35b34156109c757600080fd5b6109dd6004808035906020019091905050611d31565b005b34156109ea57600080fd5b610a1f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611db6565b005b3415610a2c57600080fd5b610a426004808035906020019091905050611e09565b005b3415610a4f57600080fd5b610a656004808035906020019091905050611e8e565b005b3415610a7257600080fd5b610a886004808035906020019091905050611eb9565b005b3415610a9557600080fd5b610aab6004808035906020019091905050611f3e565b6040518082815260200191505060405180910390f35b3415610acc57600080fd5b610ad4611f5e565b6040518082815260200191505060405180910390f35b3415610af557600080fd5b610afd611f64565b6040518082815260200191505060405180910390f35b3415610b1e57600080fd5b610b26611f6a565b6040518082815260200191505060405180910390f35b3415610b4757600080fd5b610b73600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611f70565b005b3415610b8057600080fd5b610b96600480803590602001909190505061200f565b604051808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018681526020018581526020018460ff1660ff16815260200183815260200182600560200280838360005b83811015610c1d578082015181840152602081019050610c02565b505050509050019850505050505050505060405180910390f35b3415610c4257600080fd5b610c6e600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506121bb565b005b610c8660048080359060200190919050506124f0565b005b3415610c9357600080fd5b610cbf600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061291a565b005b3415610ccc57600080fd5b610cd4612a6f565b6040518082815260200191505060405180910390f35b6000806008600084815260200190815260200160002060000154119050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610d6957600080fd5b600090505b8e8e9050811015610e3a57610e2d8f8f838181101515610d8a57fe5b905060200201358e8e848181101515610d9f57fe5b905060200201358d8d858181101515610db457fe5b905060200201358c8c868181101515610dc957fe5b905060200201358b8b878181101515610dde57fe5b9050602002013560ff168a8a888181101515610df657fe5b905060200201358989898181101515610e0b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166117e4565b8080600101915050610d6e565b505050505050505050505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515610e8857600080fd5b610e91826121bb565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806000806000806000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f3f57600080fd5b600097505b88518810156110c2576000600860008b8b815181101515610f6157fe5b9060200190602002015181526020019081526020016000206000015414156110b557601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e4b50cb88a8a815181101515610fcf57fe5b90602001906020020151600060405160e001526040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060e060405180830381600087803b151561103357600080fd5b6102c65a03f1151561104457600080fd5b50505060405180519060200180519060200180519060200180519060200180519060200180519060200180519050809750819850829950839a50849b50859c50869d50505050505050506110b4898981518110151561109f57fe5b9060200190602002015187878686868d6117e4565b5b8780600101985050610f44565b505050505050505050565b6110d5613fb4565b6040805190810160405280601081526020017f43727970746f4275727269746f2e636f00000000000000000000000000000000815250905090565b6000813373ffffffffffffffffffffffffffffffffffffffff1661113382611766565b73ffffffffffffffffffffffffffffffffffffffff1614151561115557600080fd5b61115e83611766565b91508173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561119b57600080fd5b60006111a6846112b9565b73ffffffffffffffffffffffffffffffffffffffff161415806111e0575060008473ffffffffffffffffffffffffffffffffffffffff1614155b1561129d5783600a600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a35b50505050565b6000600154905090565b60175481565b60155481565b6000600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60145481565b60045481565b60165481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561136357600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6003549081150290604051600060405180830381858888f1935050505015156113c657600080fd5b6000600381905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561142b57600080fd5b600060149054906101000a900460ff16151561144657600080fd5b60008060146101000a81548160ff0219169083151502179055507f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3360405160405180910390a1565b60075481565b6000600e548210156114ce576114c760646114b9600a85612a7590919063ffffffff16565b612aa890919063ffffffff16565b90506115a0565b600f54821015611506576114ff60646114f1600985612a7590919063ffffffff16565b612aa890919063ffffffff16565b90506115a0565b60105482101561153e576115376064611529600885612a7590919063ffffffff16565b612aa890919063ffffffff16565b90506115a0565b6011548210156115765761156f6064611561600785612a7590919063ffffffff16565b612aa890919063ffffffff16565b90506115a0565b61159d606461158f600585612a7590919063ffffffff16565b612aa890919063ffffffff16565b90505b919050565b6115ad613fc8565b600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561163657602002820191906000526020600020905b815481526020019060010190808311611622575b50505050509050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561167f57600080fd5b611688826121bb565b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561174f57600080fd5b5050565b600060149054906101000a900460ff1681565b6000806009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156117db57600080fd5b80915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561184157600080fd5b60008711151561185057600080fd5b868610151561185e57600080fd5b6000600860008a81526020019081526020016000206000015414151561188357600080fd5b60008460ff1611801561189a575060038460ff1611155b15156118a557600080fd5b600860008981526020019081526020016000209050818160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550868160000181905550858160010181905550848160020181905550838160060160006101000a81548160ff021916908360ff16021790555082816005018190555060a0604051908101604052803073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020013073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600701906005611a54929190613fdc565b5060028054806001018281611a699190614059565b916000526020600020900160008a90919091505550611a888289612ac3565b5050505050505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611b3957600080fd5b600060149054906101000a900460ff16151515611b5557600080fd5b6001600060146101000a81548160ff0219169083151502179055507f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62560405160405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bcb613fb4565b6040805190810160405280600381526020017f4d42540000000000000000000000000000000000000000000000000000000000815250905090565b6000600e54821015611c4457611c3d601254606403611c2f60c885612a7590919063ffffffff16565b612aa890919063ffffffff16565b9050611d26565b600f54821015611c8057611c79601254606403611c6b608785612a7590919063ffffffff16565b612aa890919063ffffffff16565b9050611d26565b601054821015611cbc57611cb5601254606403611ca7607d85612a7590919063ffffffff16565b612aa890919063ffffffff16565b9050611d26565b601154821015611cf857611cf1601254606403611ce3607585612a7590919063ffffffff16565b612aa890919063ffffffff16565b9050611d26565b611d23601254606403611d15607385612a7590919063ffffffff16565b612aa890919063ffffffff16565b90505b919050565b60125481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611d8c57600080fd5b601e8111151515611d9c57600080fd5b60058110151515611dac57600080fd5b8060178190555050565b803373ffffffffffffffffffffffffffffffffffffffff16611dd782611766565b73ffffffffffffffffffffffffffffffffffffffff16141515611df957600080fd5b611e04338484612b5d565b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e6457600080fd5b60058111151515611e7457600080fd5b60038110151515611e8457600080fd5b8060128190555050565b611e983382612cc8565b1515611ea357600080fd5b611eb6611eaf82611766565b3383612b5d565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f1457600080fd5b60c88111151515611f2457600080fd5b60328110151515611f3457600080fd5b8060138190555050565b600060086000838152602001908152602001600020600001549050919050565b60065481565b60035481565b60135481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611fcb57600080fd5b80601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000806000806000612022614085565b61202a6140c3565b600860008b81526020019081526020016000206101006040519081016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600582015481526020016006820160009054906101000a900460ff1660ff1660ff16815260200160078201600580602002604051908101604052809291908260058015612161576020028201915b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311612117575b50505050508152505090508060800151816000015182602001516121888460000151611c06565b84604001518560c001518660a001518760e001518090509850985098509850985098509850985050919395975091939597565b6121c3613fc8565b600080600080600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561225257602002820191906000526020600020905b81548152602001906001019080831161223e575b50505050509450600092505b845183101561249b5760195460086000878681518110151561227c57fe5b90602001906020020151815260200190815260200160002060060160009054906101000a900460ff1660ff1614156122f4576127106008600087868151811015156122c357fe5b90602001906020020151815260200190815260200160002060020154600454028115156122ec57fe5b04915061240c565b601a5460086000878681518110151561230957fe5b90602001906020020151815260200190815260200160002060060160009054906101000a900460ff1660ff1614156123815761271060086000878681518110151561235057fe5b906020019060200201518152602001908152602001600020600201546005540281151561237957fe5b04915061240b565b601b5460086000878681518110151561239657fe5b90602001906020020151815260200190815260200160002060060160009054906101000a900460ff1660ff16141561240a576127106008600087868151811015156123dd57fe5b906020019060200201518152602001908152602001600020600201546006540281151561240657fe5b0491505b5b5b61244c60086000878681518110151561242157fe5b9060200190602002015181526020019081526020016000206003015483612d0990919063ffffffff16565b905080840193508060086000878681518110151561246657fe5b90602001906020020151815260200190815260200160002060030160008282540192505081905550828060010193505061225e565b83600d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550505050505050565b6000806000806000806000806000336000813b905060008114151561251457600080fd5b600060149054906101000a900460ff1615151561253057600080fd5b600860008d81526020019081526020016000209a508a6000015499508a60040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16985060008a11151561258257600080fd5b89341015151561259157600080fd5b3373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16141515156125cc57600080fd5b6125e38b600101548b612d0990919063ffffffff16565b97506125ee88611494565b965061260b8b60060160009054906101000a900460ff1688612d22565b61263360646126256012548d612a7590919063ffffffff16565b612aa890919063ffffffff16565b955061264a86600354612dfb90919063ffffffff16565b6003819055506127878b6101006040519081016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600582015481526020016006820160009054906101000a900460ff1660ff1660ff16815260200160078201600580602002604051908101604052809291908260058015612778576020028201915b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161272e575b5050505050815250508b612e19565b94506127938b33613479565b61279e89338e6136e3565b6127d5856127c7896127b98a8f612d0990919063ffffffff16565b612d0990919063ffffffff16565b612d0990919063ffffffff16565b9350898b600101819055506127e98a611c06565b8b600001819055503373ffffffffffffffffffffffffffffffffffffffff168c7ffd51b2c9f55c42d2b72ac683526519563be02fc0107f034ff430c05185ff1b668c6040518082815260200191505060405180910390a33073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161415156128b6578873ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505015156128b557600080fd5b5b89340392506000831115612905573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050151561290457600080fd5b5b42600781905550505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561297557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156129b157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60055481565b60008082840290506000841480612a965750828482811515612a9357fe5b04145b1515612a9e57fe5b8091505092915050565b6000808284811515612ab657fe5b0490508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612aff57600080fd5b612b0982826138c5565b8173ffffffffffffffffffffffffffffffffffffffff1660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b816000813b9050600081141515612b7357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515612baf57600080fd5b612bb883611766565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515612bf257600080fd5b8473ffffffffffffffffffffffffffffffffffffffff16612c1284611766565b73ffffffffffffffffffffffffffffffffffffffff16141515612c3457600080fd5b612c3e8584613a84565b612c488584613b6d565b612c528584613d2d565b612c5c84846138c5565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35050505050565b60008273ffffffffffffffffffffffffffffffffffffffff16612cea836112b9565b73ffffffffffffffffffffffffffffffffffffffff1614905092915050565b6000828211151515612d1757fe5b818303905092915050565b6000612d4c6064612d3e60175485612a7590919063ffffffff16565b612aa890919063ffffffff16565b90506019548360ff161415612d705781600460008282540192505081905550612df6565b601a548360ff161415612db45780600460008282540192505081905550612da08183612d0990919063ffffffff16565b600560008282540192505081905550612df5565b601b548360ff161415612df45780600460008282540192505081905550612de48183612d0990919063ffffffff16565b6006600082825401925050819055505b5b5b505050565b6000808284019050838110151515612e0f57fe5b8091505092915050565b6000806000806000806000612e4d612710612e3f6013548b612a7590919063ffffffff16565b612aa890919063ffffffff16565b9550612e6460145487612aa890919063ffffffff16565b9450612e7b60145486612aa890919063ffffffff16565b9350612e9260145485612aa890919063ffffffff16565b9250612ea960145484612aa890919063ffffffff16565b91503073ffffffffffffffffffffffffffffffffffffffff168960e001516000600581101515612ed557fe5b602002015173ffffffffffffffffffffffffffffffffffffffff16141515612f64578860e001516000600581101515612f0a57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc879081150290604051600060405180830381858888f193505050501515612f4e57600080fd5b612f618688612dfb90919063ffffffff16565b96505b3073ffffffffffffffffffffffffffffffffffffffff168960e001516001600581101515612f8e57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1614151561301d578860e001516001600581101515612fc357fe5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f19350505050151561300757600080fd5b61301a8588612dfb90919063ffffffff16565b96505b3073ffffffffffffffffffffffffffffffffffffffff168960e00151600260058110151561304757fe5b602002015173ffffffffffffffffffffffffffffffffffffffff161415156130d6578860e00151600260058110151561307c57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc859081150290604051600060405180830381858888f1935050505015156130c057600080fd5b6130d38488612dfb90919063ffffffff16565b96505b3073ffffffffffffffffffffffffffffffffffffffff168960e00151600360058110151561310057fe5b602002015173ffffffffffffffffffffffffffffffffffffffff1614151561318f578860e00151600360058110151561313557fe5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050151561317957600080fd5b61318c8388612dfb90919063ffffffff16565b96505b3073ffffffffffffffffffffffffffffffffffffffff168960e0015160046005811015156131b957fe5b602002015173ffffffffffffffffffffffffffffffffffffffff16141515613248578860e0015160046005811015156131ee57fe5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050151561323257600080fd5b6132458288612dfb90919063ffffffff16565b96505b61326f606461326160018b612a7590919063ffffffff16565b612aa890919063ffffffff16565b9050600073ffffffffffffffffffffffffffffffffffffffff1660086000601854815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561336d5760086000601854815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561335757600080fd5b61336a8188612dfb90919063ffffffff16565b96505b600073ffffffffffffffffffffffffffffffffffffffff16600860008b60a00151815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561346d57600860008a60a00151815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561345757600080fd5b61346a8188612dfb90919063ffffffff16565b96505b50505050505092915050565b81600701600360058110151561348b57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260070160046005811015156134bf57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600701600260058110151561351057fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600701600360058110151561354457fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600701600160058110151561359557fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168260070160026005811015156135c957fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600701600060058110151561361a57fe5b0160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682600701600160058110151561364e57fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808260070160006005811015156136a057fe5b0160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6136ec81610cea565b15156136f757600080fd5b8273ffffffffffffffffffffffffffffffffffffffff166008600083815260200190815260200160002060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561376757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156137a357600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156137de57600080fd5b6137e88382613b6d565b6137f28382613a84565b6137fc8382613d2d565b816008600083815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061385b82826138c5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff166009600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561393457600080fd5b826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826008600084815260200190815260200160002060040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506139e483611a92565b9050600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806001018281613a379190614059565b91600052602060002090016000849091909150555080600c600084815260200190815260200160002081905550613a7960018054612dfb90919063ffffffff16565b600181905550505050565b8173ffffffffffffffffffffffffffffffffffffffff16613aa482611766565b73ffffffffffffffffffffffffffffffffffffffff16141515613ac657600080fd5b6000600a600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35050565b6000806019546008600085815260200190815260200160002060060160009054906101000a900460ff1660ff161415613bcf57612710600860008581526020019081526020016000206002015460045402811515613bc757fe5b049150613c8b565b601a546008600085815260200190815260200160002060060160009054906101000a900460ff1660ff161415613c2e57612710600860008581526020019081526020016000206002015460055402811515613c2657fe5b049150613c8a565b601b546008600085815260200190815260200160002060060160009054906101000a900460ff1660ff161415613c8957612710600860008581526020019081526020016000206002015460065402811515613c8557fe5b0491505b5b5b613cb4600860008581526020019081526020016000206003015483612d0990919063ffffffff16565b905080600860008581526020019081526020016000206003016000828254019250508190555080600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555050505050565b60008060008473ffffffffffffffffffffffffffffffffffffffff16613d5285611766565b73ffffffffffffffffffffffffffffffffffffffff16141515613d7457600080fd5b600c6000858152602001908152602001600020549250613da66001613d9887611a92565b612d0990919063ffffffff16565b9150600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481101515613df457fe5b906000526020600020900154905060006009600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002084815481101515613ea257fe5b9060005260206000209001819055506000600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515613eff57fe5b906000526020600020900181905550600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003613f609190614128565b506000600c60008681526020019081526020016000208190555082600c600083815260200190815260200160002081905550613fa760018054612d0990919063ffffffff16565b6001819055505050505050565b602060405190810160405280600081525090565b602060405190810160405280600081525090565b8260058101928215614048579160200282015b828111156140475782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613fef565b5b5090506140559190614154565b5090565b8154818355818115116140805781836000526020600020918201910161407f9190614197565b5b505050565b60a0604051908101604052806005905b600073ffffffffffffffffffffffffffffffffffffffff168152602001906001900390816140955790505090565b6101806040519081016040528060008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600060ff1681526020016141226141bc565b81525090565b81548183558181151161414f5781836000526020600020918201910161414e9190614197565b5b505050565b61419491905b8082111561419057600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555060010161415a565b5090565b90565b6141b991905b808211156141b557600081600090555060010161419d565b5090565b90565b60a0604051908101604052806005905b600073ffffffffffffffffffffffffffffffffffffffff168152602001906001900390816141cc57905050905600a165627a7a72305820e8e5b604fb0f4c4babd5442eb666411e5908b0623addf40f2449091c7849b4fb0029

Swarm Source

bzzr://e8e5b604fb0f4c4babd5442eb666411e5908b0623addf40f2449091c7849b4fb

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.