ETH Price: $3,214.48 (+1.63%)

Contract

0x20b2EC1fe89c6977f6c1f9E5b7D5475F588186BD
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer70083312019-01-04 10:03:262140 days ago1546596206IN
0x20b2EC1f...F588186BD
0.01 ETH0.000044192.1
Buy Upgrade Card66785172018-11-10 12:52:292195 days ago1541854349IN
0x20b2EC1f...F588186BD
0 ETH0.000074452.1
Buy Upgrade Card66785172018-11-10 12:52:292195 days ago1541854349IN
0x20b2EC1f...F588186BD
0 ETH0.000332852.1
Buy Basic Cards66259972018-11-01 21:46:442204 days ago1541108804IN
0x20b2EC1f...F588186BD
0 ETH0.000202362
Buy Basic Cards66259862018-11-01 21:44:422204 days ago1541108682IN
0x20b2EC1f...F588186BD
0 ETH0.000202362
Buy Basic Cards66252162018-11-01 18:48:392204 days ago1541098119IN
0x20b2EC1f...F588186BD
0 ETH0.000435893
Buy Basic Cards65830452018-10-25 20:57:442211 days ago1540501064IN
0x20b2EC1f...F588186BD
0 ETH0.00057673.3
Buy Basic Cards65695642018-10-23 16:18:572213 days ago1540311537IN
0x20b2EC1f...F588186BD
0 ETH0.000645337
Buy Upgrade Card65673342018-10-23 7:25:342214 days ago1540279534IN
0x20b2EC1f...F588186BD
0 ETH0.000443794
Buy Upgrade Card65673332018-10-23 7:25:272214 days ago1540279527IN
0x20b2EC1f...F588186BD
0 ETH0.000442384
Buy Basic Cards65661262018-10-23 2:45:162214 days ago1540262716IN
0x20b2EC1f...F588186BD
0 ETH0.000426694.62834227
Buy Basic Cards65641872018-10-22 19:17:532214 days ago1540235873IN
0x20b2EC1f...F588186BD
0 ETH0.000276573
Buy Basic Cards65638872018-10-22 18:11:312214 days ago1540231891IN
0x20b2EC1f...F588186BD
0 ETH0.000460955
Buy Upgrade Card65638752018-10-22 18:09:032214 days ago1540231743IN
0x20b2EC1f...F588186BD
0 ETH0.000377213.4
Buy Upgrade Card65638732018-10-22 18:08:212214 days ago1540231701IN
0x20b2EC1f...F588186BD
0 ETH0.000370463.4
Buy Upgrade Card65638732018-10-22 18:08:212214 days ago1540231701IN
0x20b2EC1f...F588186BD
0 ETH0.000377283.4
Buy Upgrade Card65638712018-10-22 18:08:132214 days ago1540231693IN
0x20b2EC1f...F588186BD
0 ETH0.000376043.4
Buy Basic Cards65636122018-10-22 17:05:082214 days ago1540227908IN
0x20b2EC1f...F588186BD
0 ETH0.000873795
Buy Basic Cards65630432018-10-22 14:45:472214 days ago1540219547IN
0x20b2EC1f...F588186BD
0 ETH0.000811368.834276
Buy Basic Cards65629402018-10-22 14:18:362214 days ago1540217916IN
0x20b2EC1f...F588186BD
0 ETH0.0005266
Buy Upgrade Card65627162018-10-22 13:21:172214 days ago1540214477IN
0x20b2EC1f...F588186BD
0 ETH0.000789216
Buy Basic Cards65627102018-10-22 13:19:592214 days ago1540214399IN
0x20b2EC1f...F588186BD
0 ETH0.000871796
Buy Basic Cards65599592018-10-22 2:27:212215 days ago1540175241IN
0x20b2EC1f...F588186BD
0 ETH0.000450073.5
Buy Basic Cards65599592018-10-22 2:27:212215 days ago1540175241IN
0x20b2EC1f...F588186BD
0 ETH0.000301063.5
Buy Basic Cards65599592018-10-22 2:27:212215 days ago1540175241IN
0x20b2EC1f...F588186BD
0 ETH0.000308053.5
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BitGuildTrade

Compiler Version
v0.4.21+commit.dfe3193c

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-07-25
*/

pragma solidity ^0.4.18;
/* ==================================================================== */
/* Copyright (c) 2018 The MagicAcademy Project.  All rights reserved.
/* 
/* https://www.magicacademy.io One of the world's first idle strategy games of blockchain 
/*  
/* authors [email protected]/[email protected]
/*                 
/* ==================================================================== */

/**
 * @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) public onlyOwner {
    require(newOwner != address(0));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }
}
contract AccessAdmin is Ownable {

  /// @dev Admin Address
  mapping (address => bool) adminContracts;

  /// @dev Trust contract
  mapping (address => bool) actionContracts;

  function setAdminContract(address _addr, bool _useful) public onlyOwner {
    require(_addr != address(0));
    adminContracts[_addr] = _useful;
  }

  modifier onlyAdmin {
    require(adminContracts[msg.sender]); 
    _;
  }

  function setActionContract(address _actionAddr, bool _useful) public onlyAdmin {
    actionContracts[_actionAddr] = _useful;
  }

  modifier onlyAccess() {
    require(actionContracts[msg.sender]);
    _;
  }
}


interface BitGuildTokenInterface { // implements ERC20Interface
  function totalSupply() public constant returns (uint);
  function balanceOf(address tokenOwner) public constant returns (uint balance);
  function allowance(address tokenOwner, address spender) public constant returns (uint remaining);
  function transfer(address to, uint tokens) public returns (bool success);
  function approve(address spender, uint tokens) public returns (bool success);
  function transferFrom(address from, address to, uint tokens) public returns (bool success);

  event Transfer(address indexed from, address indexed to, uint tokens);
  event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
}

interface CardsInterface {
  function getGameStarted() external constant returns (bool);
  function getOwnedCount(address player, uint256 cardId) external view returns (uint256);
  function getMaxCap(address _addr,uint256 _cardId) external view returns (uint256);
  function upgradeUnitMultipliers(address player, uint256 upgradeClass, uint256 unitId, uint256 upgradeValue) external;
  function removeUnitMultipliers(address player, uint256 upgradeClass, uint256 unitId, uint256 upgradeValue) external;
  function balanceOf(address player) public constant returns(uint256);
  function coinBalanceOf(address player,uint8 itype) external constant returns(uint256);
  function updatePlayersCoinByPurchase(address player, uint256 purchaseCost) external;
  function getUnitsProduction(address player, uint256 unitId, uint256 amount) external constant returns (uint256);
  function increasePlayersJadeProduction(address player, uint256 increase) public;
  function setUintCoinProduction(address _address, uint256 cardId, uint256 iValue, bool iflag) external;
  function getUintsOwnerCount(address _address) external view returns (uint256);
  function AddPlayers(address _address) external;
  function setUintsOwnerCount(address _address, uint256 amount, bool iflag) external;
  function setOwnedCount(address player, uint256 cardId, uint256 amount, bool iflag) external;
  function setCoinBalance(address player, uint256 eth, uint8 itype, bool iflag) external;
  function setTotalEtherPool(uint256 inEth, uint8 itype, bool iflag) external;
  function getUpgradesOwned(address player, uint256 upgradeId) external view returns (uint256);
  function setUpgradesOwned(address player, uint256 upgradeId) external;
  function updatePlayersCoinByOut(address player) external;
  function balanceOfUnclaimed(address player) public constant returns (uint256);
  function setLastJadeSaveTime(address player) external;
  function setRoughSupply(uint256 iroughSupply) external;
  function setJadeCoin(address player, uint256 coin, bool iflag) external;
  function getUnitsInProduction(address player, uint256 unitId, uint256 amount) external constant returns (uint256);
  function reducePlayersJadeProduction(address player, uint256 decrease) public;
}
interface GameConfigInterface {
  function unitCoinProduction(uint256 cardId) external constant returns (uint256);
  function unitPLATCost(uint256 cardId) external constant returns (uint256);
  function getCostForCards(uint256 cardId, uint256 existing, uint256 amount) external constant returns (uint256);
  function getCostForBattleCards(uint256 cardId, uint256 existing, uint256 amount) external constant returns (uint256);
  function unitBattlePLATCost(uint256 cardId) external constant returns (uint256);
  function getUpgradeCardsInfo(uint256 upgradecardId,uint256 existing) external constant returns (
    uint256 coinCost, 
    uint256 ethCost, 
    uint256 upgradeClass, 
    uint256 cardId, 
    uint256 upgradeValue,
    uint256 platCost
  );
 function getCardInfo(uint256 cardId, uint256 existing, uint256 amount) external constant returns (uint256, uint256, uint256, uint256, bool);
 function getBattleCardInfo(uint256 cardId, uint256 existing, uint256 amount) external constant returns (uint256, uint256, uint256, bool);

}
interface RareInterface {
  function getRareItemsOwner(uint256 rareId) external view returns (address);
  function getRareItemsPrice(uint256 rareId) external view returns (uint256);
  function getRareItemsPLATPrice(uint256 rareId) external view returns (uint256);
   function getRarePLATInfo(uint256 _tokenId) external view returns (
    uint256 sellingPrice,
    address owner,
    uint256 nextPrice,
    uint256 rareClass,
    uint256 cardId,
    uint256 rareValue
  );
  function transferToken(address _from, address _to, uint256 _tokenId) external;
  function setRarePrice(uint256 _rareId, uint256 _price) external;
}
/// @notice Purchase on BitGuild
/// @author rainysiu [email protected]
contract BitGuildTrade is AccessAdmin {
  BitGuildTokenInterface public tokenContract;
   //data contract
  CardsInterface public cards ;
  GameConfigInterface public schema;
  RareInterface public rare;

  
  function BitGuildTrade() public {
    setAdminContract(msg.sender,true);
    setActionContract(msg.sender,true);
  }

  event UnitBought(address player, uint256 unitId, uint256 amount);
  event UpgradeCardBought(address player, uint256 upgradeId);
  event BuyRareCard(address player, address previous, uint256 rareId,uint256 iPrice);
  event UnitSold(address player, uint256 unitId, uint256 amount);

 
  function() external payable {
    revert();
  }
  function setBitGuildToken(address _tokenContract) external onlyOwner {
    tokenContract = BitGuildTokenInterface(_tokenContract);
  } 

  function setCardsAddress(address _address) external onlyOwner {
    cards = CardsInterface(_address);
  }

   //normal cards
  function setConfigAddress(address _address) external onlyOwner {
    schema = GameConfigInterface(_address);
  }

  //rare cards
  function setRareAddress(address _address) external onlyOwner {
    rare = RareInterface(_address);
  }
  function kill() public onlyOwner {
    tokenContract.transferFrom(this, msg.sender, tokenContract.balanceOf(this));
    selfdestruct(msg.sender); //end execution, destroy current contract and send funds to a
  }  
  /// @notice Returns all the relevant information about a specific tokenId.
  /// val1:flag,val2:id,val3:amount
  function _getExtraParam(bytes _extraData) private pure returns(uint256 val1,uint256 val2,uint256 val3) {
    if (_extraData.length == 2) {
      val1 = uint256(_extraData[0]);
      val2 = uint256(_extraData[1]);
      val3 = 1; 
    } else if (_extraData.length == 3) {
      val1 = uint256(_extraData[0]);
      val2 = uint256(_extraData[1]);
      val3 = uint256(_extraData[2]);
    }  
  }
  
  function receiveApproval(address _player, uint256 _value, address _tokenContractAddr, bytes _extraData) external {
    require(msg.sender == _tokenContractAddr);
    require(_extraData.length >=1);
    require(tokenContract.transferFrom(_player, address(this), _value));
    uint256 flag;
    uint256 unitId;
    uint256 amount;
    (flag,unitId,amount) = _getExtraParam(_extraData);

    if (flag==1) {
      buyPLATCards(_player, _value, unitId, amount);  // 1-39
    } else if (flag==3) {
      buyUpgradeCard(_player, _value, unitId);  // >=1
    } else if (flag==4) {
      buyRareItem(_player, _value, unitId); //rarecard
    } 
  } 

  /// buy normal cards via jade
  function buyBasicCards(uint256 unitId, uint256 amount) external {
    require(cards.getGameStarted());
    require(amount>=1);
    uint256 existing = cards.getOwnedCount(msg.sender,unitId);
    uint256 total = SafeMath.add(existing, amount);
    if (total > 99) { // Default unit limit
      require(total <= cards.getMaxCap(msg.sender,unitId)); // Housing upgrades (allow more units)
    }

    uint256 coinProduction;
    uint256 coinCost;
    uint256 ethCost;
    if (unitId>=1 && unitId<=39) {    
      (, coinProduction, coinCost, ethCost,) = schema.getCardInfo(unitId, existing, amount);
    } else if (unitId>=40) {
      (, coinCost, ethCost,) = schema.getBattleCardInfo(unitId, existing, amount);
    }
    require(cards.balanceOf(msg.sender) >= coinCost);
    require(ethCost == 0); // Free ether unit
        
    // Update players jade 
    cards.updatePlayersCoinByPurchase(msg.sender, coinCost);
    ///****increase production***/
    if (coinProduction > 0) {
      cards.increasePlayersJadeProduction(msg.sender,cards.getUnitsProduction(msg.sender, unitId, amount)); 
      cards.setUintCoinProduction(msg.sender,unitId,cards.getUnitsProduction(msg.sender, unitId, amount),true); 
    }
    //players
    if (cards.getUintsOwnerCount(msg.sender)<=0) {
      cards.AddPlayers(msg.sender);
    }
    cards.setUintsOwnerCount(msg.sender,amount,true);
    cards.setOwnedCount(msg.sender,unitId,amount,true);
    
    UnitBought(msg.sender, unitId, amount);
  }

  function buyBasicCards_Migrate(address _addr, uint256 _unitId, uint256 _amount) external onlyAdmin {
    require(cards.getGameStarted());
    require(_amount>=1);
    uint256 existing = cards.getOwnedCount(_addr,_unitId);
    uint256 total = SafeMath.add(existing, _amount);
    if (total > 99) { // Default unit limit
      require(total <= cards.getMaxCap(_addr,_unitId)); // Housing upgrades (allow more units)
    }
    require (_unitId == 41);
    uint256 coinCost;
    uint256 ethCost;
    (, coinCost, ethCost,) = schema.getBattleCardInfo(_unitId, existing, _amount);
    //players
    if (cards.getUintsOwnerCount(_addr)<=0) {
      cards.AddPlayers(_addr);
    }
    cards.setUintsOwnerCount(_addr,_amount,true);
    cards.setOwnedCount(_addr,_unitId,_amount,true);
    
    UnitBought(_addr, _unitId, _amount);
  }

  function buyPLATCards(address _player, uint256 _platValue, uint256 _cardId, uint256 _amount) internal {
    require(cards.getGameStarted());
    require(_amount>=1);
    uint256 existing = cards.getOwnedCount(_player,_cardId);
    uint256 total = SafeMath.add(existing, _amount);
    if (total > 99) { // Default unit limit
      require(total <= cards.getMaxCap(_player,_cardId)); // Housing upgrades (allow more units)
    }

    uint256 coinProduction;
    uint256 coinCost;
    uint256 ethCost;

    if (_cardId>=1 && _cardId<=39) {
      coinProduction = schema.unitCoinProduction(_cardId);
      coinCost = schema.getCostForCards(_cardId, existing, _amount);
      ethCost = SafeMath.mul(schema.unitPLATCost(_cardId),_amount);  // get platprice
    } else if (_cardId>=40) {
      coinCost = schema.getCostForBattleCards(_cardId, existing, _amount);
      ethCost = SafeMath.mul(schema.unitBattlePLATCost(_cardId),_amount);  // get platprice
    }

    require(ethCost>0);
    require(SafeMath.add(cards.coinBalanceOf(_player,1),_platValue) >= ethCost);
    require(cards.balanceOf(_player) >= coinCost);   

    // Update players jade  
    cards.updatePlayersCoinByPurchase(_player, coinCost);

    if (ethCost > _platValue) {
      cards.setCoinBalance(_player,SafeMath.sub(ethCost,_platValue),1,false);
    } else if (_platValue > ethCost) {
      // Store overbid in their balance
      cards.setCoinBalance(_player,SafeMath.sub(_platValue,ethCost),1,true);
    } 

    uint256 devFund = uint256(SafeMath.div(ethCost,20)); // 5% fee
    cards.setTotalEtherPool(uint256(SafeMath.div(ethCost,4)),1,true);  // 20% to pool
    cards.setCoinBalance(owner,devFund,1,true);  
    
    if (coinProduction > 0) {
      cards.increasePlayersJadeProduction(_player, cards.getUnitsProduction(_player, _cardId, _amount)); 
      cards.setUintCoinProduction(_player,_cardId,cards.getUnitsProduction(_player, _cardId, _amount),true); 
    }
    
    if (cards.getUintsOwnerCount(_player)<=0) {
      cards.AddPlayers(_player);
    }
    cards.setUintsOwnerCount(_player,_amount, true);
    cards.setOwnedCount(_player,_cardId,_amount,true);
    //event
    UnitBought(_player, _cardId, _amount);
  }

  /// buy upgrade cards with ether/Jade
  function buyUpgradeCard(uint256 upgradeId) external payable {
    require(cards.getGameStarted());
    require(upgradeId>=1);
    uint256 existing = cards.getUpgradesOwned(msg.sender,upgradeId);
    
    uint256 coinCost;
    uint256 ethCost;
    uint256 upgradeClass;
    uint256 unitId;
    uint256 upgradeValue;
    (coinCost, ethCost, upgradeClass, unitId, upgradeValue,) = schema.getUpgradeCardsInfo(upgradeId,existing);
    if (upgradeClass<8) {
      require(existing<=5); 
    } else {
      require(existing<=2); 
    }
    require (coinCost>0 && ethCost==0);
    require(cards.balanceOf(msg.sender) >= coinCost);  
    cards.updatePlayersCoinByPurchase(msg.sender, coinCost);

    cards.upgradeUnitMultipliers(msg.sender, upgradeClass, unitId, upgradeValue);  
    cards.setUpgradesOwned(msg.sender,upgradeId); //upgrade cards level

    UpgradeCardBought(msg.sender, upgradeId);
  }

  /// upgrade cards-- jade + plat
  function buyUpgradeCard(address _player, uint256 _platValue,uint256 _upgradeId) internal {
    require(cards.getGameStarted());
    require(_upgradeId>=1);
    uint256 existing = cards.getUpgradesOwned(_player,_upgradeId);
    require(existing<=5);  // v1 - v6
    uint256 coinCost;
    uint256 ethCost;
    uint256 upgradeClass;
    uint256 unitId;
    uint256 upgradeValue;
    uint256 platCost;
    (coinCost, ethCost, upgradeClass, unitId, upgradeValue,platCost) = schema.getUpgradeCardsInfo(_upgradeId,existing);

    require(platCost>0);
    if (platCost > 0) {
      require(SafeMath.add(cards.coinBalanceOf(_player,1),_platValue) >= platCost); 

      if (platCost > _platValue) { // They can use their balance instead
        cards.setCoinBalance(_player, SafeMath.sub(platCost,_platValue),1,false);
      } else if (platCost < _platValue) {  
        cards.setCoinBalance(_player,SafeMath.sub(_platValue,platCost),1,true);
    } 
      // defund 5%,upgrade card can not be sold,
      uint256 devFund = uint256(SafeMath.div(platCost, 20)); // 5% fee on purchases (marketing, gameplay & maintenance)
      cards.setTotalEtherPool(SafeMath.sub(platCost,devFund),1,true); // Rest goes to div pool (Can't sell upgrades)
      cards.setCoinBalance(owner,devFund,1,true);  
    }
        
     // Update 
    require(cards.balanceOf(_player) >= coinCost);  
    cards.updatePlayersCoinByPurchase(_player, coinCost);
    
    //add weight
    cards.upgradeUnitMultipliers(_player, upgradeClass, unitId, upgradeValue);  
    cards.setUpgradesOwned(_player,_upgradeId); // upgrade level up

     //add user to userlist
    if (cards.getUintsOwnerCount(_player)<=0) {
      cards.AddPlayers(_player);
    }
 
    UpgradeCardBought(_player, _upgradeId);
  }


  // Allows someone to send ether and obtain the token
  function buyRareItem(address _player, uint256 _platValue,uint256 _rareId) internal {
    require(cards.getGameStarted());        
    address previousOwner = rare.getRareItemsOwner(_rareId);  // rare card
    require(previousOwner != 0);
    require(_player!=previousOwner);  // can not buy from itself
    
    uint256 ethCost = rare.getRareItemsPLATPrice(_rareId); // get plat cost
    uint256 totalCost = SafeMath.add(cards.coinBalanceOf(_player,1),_platValue);
    require(totalCost >= ethCost); 
    // We have to claim buyer/sellder's goo before updating their production values 
    cards.updatePlayersCoinByOut(_player);
    cards.updatePlayersCoinByOut(previousOwner);

    uint256 upgradeClass;
    uint256 unitId;
    uint256 upgradeValue;
    (,,,,upgradeClass, unitId, upgradeValue) = rare.getRarePLATInfo(_rareId);
    
    // modify weight
    cards.upgradeUnitMultipliers(_player, upgradeClass, unitId, upgradeValue); 
    cards.removeUnitMultipliers(previousOwner, upgradeClass, unitId, upgradeValue); 

    // Splitbid/Overbid
    if (ethCost > _platValue) {
      cards.setCoinBalance(_player,SafeMath.sub(ethCost,_platValue),1,false);
    } else if (_platValue > ethCost) {
      // Store overbid in their balance
      cards.setCoinBalance(_player,SafeMath.sub(_platValue,ethCost),1,true);
    }  
    // Distribute ethCost  uint256 devFund = ethCost / 50; 
    uint256 devFund = uint256(SafeMath.div(ethCost, 20)); // 5% fee on purchases (marketing, gameplay & maintenance)  抽成2%
    uint256 dividends = uint256(SafeMath.div(ethCost,20)); // 5% goes to pool 

    cards.setTotalEtherPool(dividends,1,true);  // 5% to pool
    cards.setCoinBalance(owner,devFund,1,true);  // 5% fee
        
    // Transfer / update rare item
    rare.transferToken(previousOwner,_player,_rareId); 
    rare.setRarePrice(_rareId,SafeMath.div(SafeMath.mul(rare.getRareItemsPrice(_rareId),5),4));
    
    cards.setCoinBalance(previousOwner,SafeMath.sub(ethCost,SafeMath.add(dividends,devFund)),1,true);
    
    if (cards.getUintsOwnerCount(_player)<=0) {
      cards.AddPlayers(_player);
    }
   
    cards.setUintsOwnerCount(_player,1,true);
    cards.setUintsOwnerCount(previousOwner,1,true);

    //tell the world
    BuyRareCard(_player, previousOwner, _rareId, ethCost);
  }

  /// refunds 75% since no transfer between bitguild and player,no need to call approveAndCall
  function sellCards( uint256 _unitId, uint256 _amount) external {
    require(cards.getGameStarted());
    uint256 existing = cards.getOwnedCount(msg.sender,_unitId);
    require(existing >= _amount && _amount>0); 
    existing = SafeMath.sub(existing,_amount);
    uint256 coinChange;
    uint256 decreaseCoin;
    uint256 schemaUnitId;
    uint256 coinProduction;
    uint256 coinCost;
    uint256 ethCost;
    bool sellable;
    if (_unitId>=40) { // upgrade card
      (schemaUnitId,coinCost,, sellable) = schema.getBattleCardInfo(_unitId, existing, _amount);
      ethCost = SafeMath.mul(schema.unitBattlePLATCost(_unitId),_amount);
    } else {
      (schemaUnitId, coinProduction, coinCost, , sellable) = schema.getCardInfo(_unitId, existing, _amount);
      ethCost = SafeMath.mul(schema.unitPLATCost(_unitId),_amount); // plat 
    }
    require(sellable);  // can be refunded
    if (coinCost>0) {
      coinChange = SafeMath.add(cards.balanceOfUnclaimed(msg.sender), SafeMath.div(SafeMath.mul(coinCost,70),100)); // Claim unsaved goo whilst here
    } else {
      coinChange = cards.balanceOfUnclaimed(msg.sender); 
    }

    cards.setLastJadeSaveTime(msg.sender); 
    cards.setRoughSupply(coinChange);  
    cards.setJadeCoin(msg.sender, coinChange, true); // refund 75% Jadecoin to player 

    decreaseCoin = cards.getUnitsInProduction(msg.sender, _unitId, _amount);
  
    if (coinProduction > 0) { 
      cards.reducePlayersJadeProduction(msg.sender, decreaseCoin);
      //update the speed of jade minning
      cards.setUintCoinProduction(msg.sender,_unitId,decreaseCoin,false); 
    }

    if (ethCost > 0) { // Premium units sell for 75% of buy cost
      cards.setCoinBalance(msg.sender,SafeMath.div(SafeMath.mul(ethCost,70),100),1,true);
    }

    cards.setOwnedCount(msg.sender,_unitId,_amount,false); 
    cards.setUintsOwnerCount(msg.sender,_amount,false);

    //tell the world
    UnitSold(msg.sender, _unitId, _amount);
  }

  //@notice for player withdraw
  function withdrawEtherFromTrade(uint256 amount) external {
    require(amount <= cards.coinBalanceOf(msg.sender,1));
    cards.setCoinBalance(msg.sender,amount,1,false);
    tokenContract.transfer(msg.sender,amount);
  } 

  //@notice withraw all PLAT by dev
  function withdrawToken(uint256 amount) external onlyOwner {
    uint256 balance = tokenContract.balanceOf(this);
    require(balance > 0 && balance >= amount);
    tokenContract.transfer(msg.sender, amount);
  }

}


library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure 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;
  }

  /**
  * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_useful","type":"bool"}],"name":"setAdminContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"unitId","type":"uint256"},{"name":"amount","type":"uint256"}],"name":"buyBasicCards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"kill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cards","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"withdrawEtherFromTrade","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rare","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setCardsAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_actionAddr","type":"address"},{"name":"_useful","type":"bool"}],"name":"setActionContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_tokenContract","type":"address"}],"name":"setBitGuildToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setRareAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"setConfigAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_unitId","type":"uint256"},{"name":"_amount","type":"uint256"}],"name":"buyBasicCards_Migrate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_player","type":"address"},{"name":"_value","type":"uint256"},{"name":"_tokenContractAddr","type":"address"},{"name":"_extraData","type":"bytes"}],"name":"receiveApproval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_unitId","type":"uint256"},{"name":"_amount","type":"uint256"}],"name":"sellCards","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"upgradeId","type":"uint256"}],"name":"buyUpgradeCard","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":"schema","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"unitId","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"UnitBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"upgradeId","type":"uint256"}],"name":"UpgradeCardBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"previous","type":"address"},{"indexed":false,"name":"rareId","type":"uint256"},{"indexed":false,"name":"iPrice","type":"uint256"}],"name":"BuyRareCard","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"player","type":"address"},{"indexed":false,"name":"unitId","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"UnitSold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

606060405234156200001057600080fd5b60008054600160a060020a03191633600160a060020a038116919091179091556200004b9060016401000000006200006c8102620003341704565b6200006633600164010000000062000ef1620000c982021704565b6200011c565b60005433600160a060020a039081169116146200008857600080fd5b600160a060020a03821615156200009e57600080fd5b600160a060020a03919091166000908152600160205260409020805460ff1916911515919091179055565b600160a060020a03331660009081526001602052604090205460ff161515620000f157600080fd5b600160a060020a03919091166000908152600260205260409020805460ff1916911515919091179055565b614072806200012c6000396000f3006060604052600436106100f85763ffffffff60e060020a6000350416630865dadc81146100fd5780633702ab031461012357806341c0e1b51461013c57806350baa6221461014f57806355a373d61461016557806358a4903f1461019457806363c78e87146101a75780636bb7b7a4146101bd5780636cdb1b75146101d05780636fb642de146101ef578063727b42761461021357806376f2ccb91461023257806383a12de914610251578063845b6aca146102705780638da5cb5b146102955780638f4ffcb1146102a85780639a5c0abc146102de578063c3059c63146102f7578063f2fde38b14610302578063f8895cc814610321575b600080fd5b341561010857600080fd5b610121600160a060020a03600435166024351515610334565b005b341561012e57600080fd5b61012160043560243561038f565b341561014757600080fd5b610121610b04565b341561015a57600080fd5b610121600435610c00565b341561017057600080fd5b610178610d10565b604051600160a060020a03909116815260200160405180910390f35b341561019f57600080fd5b610178610d1f565b34156101b257600080fd5b610121600435610d2e565b34156101c857600080fd5b610178610e98565b34156101db57600080fd5b610121600160a060020a0360043516610ea7565b34156101fa57600080fd5b610121600160a060020a03600435166024351515610ef1565b341561021e57600080fd5b610121600160a060020a0360043516610f43565b341561023d57600080fd5b610121600160a060020a0360043516610f8d565b341561025c57600080fd5b610121600160a060020a0360043516610fd7565b341561027b57600080fd5b610121600160a060020a0360043516602435604435611021565b34156102a057600080fd5b61017861146c565b34156102b357600080fd5b61012160048035600160a060020a03908116916024803592604435169160643591820191013561147b565b34156102e957600080fd5b6101216004356024356115be565b610121600435611e24565b341561030d57600080fd5b610121600160a060020a03600435166121e9565b341561032c57600080fd5b610178612284565b60005433600160a060020a0390811691161461034f57600080fd5b600160a060020a038216151561036457600080fd5b600160a060020a03919091166000908152600160205260409020805460ff1916911515919091179055565b6004546000908190819081908190600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156103d957600080fd5b5af115156103e657600080fd5b5050506040518051905015156103fb57600080fd5b600186101561040957600080fd5b600454600160a060020a031663196ecd25338960405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561045f57600080fd5b5af1151561046c57600080fd5b5050506040518051905094506104828587612293565b9350606384111561050657600454600160a060020a031663969ddd71338960405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156104e357600080fd5b5af115156104f057600080fd5b5050506040518051851115905061050657600080fd5b60018710158015610518575060278711155b156105b257600554600160a060020a031663ee4827ea88878960405160e060020a63ffffffff861602815260048101939093526024830191909152604482015260640160a060405180830381600087803b151561057457600080fd5b5af1151561058157600080fd5b5050506040518051906020018051906020018051906020018051906020018051509296509094509250610641915050565b6028871061064157600554600160a060020a031663b2570b1c88878960405160e060020a63ffffffff8616028152600481019390935260248301919091526044820152606401608060405180830381600087803b151561061157600080fd5b5af1151561061e57600080fd5b505050604051805190602001805190602001805190602001805150919450925050505b6004548290600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561069357600080fd5b5af115156106a057600080fd5b50505060405180519050101515156106b757600080fd5b80156106c257600080fd5b600454600160a060020a031663a1c90a11338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561071857600080fd5b5af1151561072557600080fd5b50505060008311156108e557600454600160a060020a03166379c310a63382632d171243828c8c60405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561079757600080fd5b5af115156107a457600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156107f157600080fd5b5af115156107fe57600080fd5b5050600454600160a060020a0316905063ce29555f338983632d17124383838d60405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561086957600080fd5b5af1151561087657600080fd5b50505060405180519050600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b15156108d457600080fd5b5af115156108e157600080fd5b5050505b600454600090600160a060020a031663a436e33b3360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561093857600080fd5b5af1151561094557600080fd5b505050604051805190501115156109b757600454600160a060020a031663f7fb0a4b3360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156109a657600080fd5b5af115156109b357600080fd5b5050505b600454600160a060020a031663fc4756df3388600160405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b1515610a1957600080fd5b5af11515610a2657600080fd5b5050600454600160a060020a0316905063e7001b84338989600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515610a9257600080fd5b5af11515610a9f57600080fd5b5050507fb6d35f558a34938047f09ebf800fa2e15ec407c357a8eab97a5dd67b4d015b5b3388886040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150505050505050565b60005433600160a060020a03908116911614610b1f57600080fd5b600354600160a060020a03166323b872dd3033836370a082318360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610b7757600080fd5b5af11515610b8457600080fd5b5050506040518051905060405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610bdd57600080fd5b5af11515610bea57600080fd5b50505060405180515050600160a060020a033316ff5b6000805433600160a060020a03908116911614610c1c57600080fd5b600354600160a060020a03166370a082313060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610c6c57600080fd5b5af11515610c7957600080fd5b5050506040518051915050600081118015610c945750818110155b1515610c9f57600080fd5b600354600160a060020a031663a9059cbb338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610cf557600080fd5b5af11515610d0257600080fd5b505050604051805150505050565b600354600160a060020a031681565b600454600160a060020a031681565b600454600160a060020a031663e8d320e633600160405160e060020a63ffffffff8516028152600160a060020a03909216600483015260ff166024820152604401602060405180830381600087803b1515610d8857600080fd5b5af11515610d9557600080fd5b50505060405180518211159050610dab57600080fd5b600454600160a060020a0316635460554933836001600060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b1515610e1757600080fd5b5af11515610e2457600080fd5b5050600354600160a060020a0316905063a9059cbb338360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610e7e57600080fd5b5af11515610e8b57600080fd5b5050506040518051505050565b600654600160a060020a031681565b60005433600160a060020a03908116911614610ec257600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a03331660009081526001602052604090205460ff161515610f1857600080fd5b600160a060020a03919091166000908152600260205260409020805460ff1916911515919091179055565b60005433600160a060020a03908116911614610f5e57600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005433600160a060020a03908116911614610fa857600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005433600160a060020a03908116911614610ff257600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a03331660009081526001602052604081205481908190819060ff16151561104e57600080fd5b600454600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561108d57600080fd5b5af1151561109a57600080fd5b5050506040518051905015156110af57600080fd5b60018510156110bd57600080fd5b600454600160a060020a031663196ecd25888860405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561111357600080fd5b5af1151561112057600080fd5b5050506040518051905093506111368486612293565b925060638311156111ba57600454600160a060020a031663969ddd71888860405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561119757600080fd5b5af115156111a457600080fd5b505050604051805184111590506111ba57600080fd5b602986146111c757600080fd5b600554600160a060020a031663b2570b1c87868860405160e060020a63ffffffff8616028152600481019390935260248301919091526044820152606401608060405180830381600087803b151561121e57600080fd5b5af1151561122b57600080fd5b50505060405180519060200180519060200180519060200180515050600454919450925060009150600160a060020a031663a436e33b8960405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156112a057600080fd5b5af115156112ad57600080fd5b5050506040518051905011151561131f57600454600160a060020a031663f7fb0a4b8860405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561130e57600080fd5b5af1151561131b57600080fd5b5050505b600454600160a060020a031663fc4756df8887600160405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b151561138157600080fd5b5af1151561138e57600080fd5b5050600454600160a060020a0316905063e7001b84888888600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b15156113fa57600080fd5b5af1151561140757600080fd5b5050507fb6d35f558a34938047f09ebf800fa2e15ec407c357a8eab97a5dd67b4d015b5b8787876040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150505050505050565b600054600160a060020a031681565b600080600085600160a060020a031633600160a060020a03161415156114a057600080fd5b60018410156114ae57600080fd5b600354600160a060020a03166323b872dd89308a60405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561151157600080fd5b5af1151561151e57600080fd5b50505060405180519050151561153357600080fd5b61156b85858080601f0160208091040260200160405190810160405281815292919060208401838380828437506122ad945050505050565b91945092509050600183141561158c576115878888848461239f565b6115b4565b82600314156115a057611587888884612eb2565b82600414156115b4576115b48888846135df565b5050505050505050565b6004546000908190819081908190819081908190600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561160e57600080fd5b5af1151561161b57600080fd5b50505060405180519050151561163057600080fd5b600454600160a060020a031663196ecd25338c60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561168657600080fd5b5af1151561169357600080fd5b50505060405180519850508888108015906116ae5750600089115b15156116b957600080fd5b6116c3888a613ff2565b975060288a106117c857600554600160a060020a031663b2570b1c8b8a8c60405160e060020a63ffffffff8616028152600481019390935260248301919091526044820152606401608060405180830381600087803b151561172457600080fd5b5af1151561173157600080fd5b50505060405180519060200180519060200180519060200180516005549499509296509193506117c192600160a060020a0316915063b6206e6790508c60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156117a457600080fd5b5af115156117b157600080fd5b505050604051805190508a614004565b91506118ab565b600554600160a060020a031663ee4827ea8b8a8c60405160e060020a63ffffffff861602815260048101939093526024830191909152604482015260640160a060405180830381600087803b151561181f57600080fd5b5af1151561182c57600080fd5b5050506040518051906020018051906020018051906020018051906020018051600554959a509398509196509193506118a892600160a060020a0316915063fbe45b4890508c60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156117a457600080fd5b91505b8015156118b757600080fd5b600083111561194c5760045461194590600160a060020a0316634676b8973360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561191457600080fd5b5af1151561192157600080fd5b50505060405180519050611940611939866046614004565b606461402f565b612293565b96506119b5565b600454600160a060020a0316634676b8973360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561199c57600080fd5b5af115156119a957600080fd5b50505060405180519750505b600454600160a060020a031663176854f63360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515611a0557600080fd5b5af11515611a1257600080fd5b5050600454600160a060020a0316905063448a0ceb8860405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611a5e57600080fd5b5af11515611a6b57600080fd5b5050600454600160a060020a0316905063a6678b603389600160405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b1515611ad157600080fd5b5af11515611ade57600080fd5b5050600454600160a060020a031690506397ce3a4b338c8c60405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515611b4157600080fd5b5af11515611b4e57600080fd5b50505060405180519650506000841115611c4257600454600160a060020a031663396e70e0338860405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515611bb857600080fd5b5af11515611bc557600080fd5b5050600454600160a060020a0316905063ce29555f338c89600060405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515611c3157600080fd5b5af11515611c3e57600080fd5b5050505b6000821115611cd457600454600160a060020a0316635460554933611c6b611939866046614004565b60018060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b1515611cc357600080fd5b5af11515611cd057600080fd5b5050505b600454600160a060020a031663e7001b84338c8c600060405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515611d3c57600080fd5b5af11515611d4957600080fd5b5050600454600160a060020a0316905063fc4756df338b600060405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b1515611daf57600080fd5b5af11515611dbc57600080fd5b5050507f9c8076df639d56f1ef3ca3d4d8dc6ed089f8c4756bc5bf5d574f1cec4ef13c54338b8b6040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150505050505050505050565b60045460009081908190819081908190600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611e7057600080fd5b5af11515611e7d57600080fd5b505050604051805190501515611e9257600080fd5b6001871015611ea057600080fd5b600454600160a060020a031663e946ad4a338960405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611ef657600080fd5b5af11515611f0357600080fd5b5050506040518051600554909750600160a060020a031690506373f9421d888860405160e060020a63ffffffff85160281526004810192909252602482015260440160c060405180830381600087803b1515611f5e57600080fd5b5af11515611f6b57600080fd5b50505060405180519060200180519060200180519060200180519060200180519060200180515094995092975090955093509150506008831015611fbc576005861115611fb757600080fd5b611fca565b6002861115611fca57600080fd5b600085118015611fd8575083155b1515611fe357600080fd5b6004548590600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561203557600080fd5b5af1151561204257600080fd5b505050604051805190501015151561205957600080fd5b600454600160a060020a031663a1c90a11338760405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156120af57600080fd5b5af115156120bc57600080fd5b5050600454600160a060020a03169050635edc9bff3385858560405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561212557600080fd5b5af1151561213257600080fd5b5050600454600160a060020a03169050632a288272338960405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561218c57600080fd5b5af1151561219957600080fd5b5050507f5923958ad0a0f9e2754b81ea1c7483dcdd7481e51b34ee4846bdaa6d5403c3453388604051600160a060020a03909216825260208201526040908101905180910390a150505050505050565b60005433600160a060020a0390811691161461220457600080fd5b600160a060020a038116151561221957600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600554600160a060020a031681565b6000828201838110156122a257fe5b8091505b5092915050565b600080600083516002141561231557836000815181106122c957fe5b016020015160f860020a900460f860020a0260f860020a90049250836001815181106122f157fe5b016020015160f860020a900460f860020a0260f860020a9004915060019050612398565b835160031415612398578360008151811061232c57fe5b016020015160f860020a900460f860020a0260f860020a900492508360018151811061235457fe5b016020015160f860020a900460f860020a0260f860020a900491508360028151811061237c57fe5b016020015160f860020a900460f860020a0260f860020a900490505b9193909250565b60045460009081908190819081908190600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156123eb57600080fd5b5af115156123f857600080fd5b50505060405180519050151561240d57600080fd5b600187101561241b57600080fd5b600454600160a060020a031663196ecd258b8a60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561247157600080fd5b5af1151561247e57600080fd5b5050506040518051905095506124948688612293565b9450606385111561251857600454600160a060020a031663969ddd718b8a60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156124f557600080fd5b5af1151561250257600080fd5b5050506040518051861115905061251857600080fd5b6001881015801561252a575060278811155b1561267157600554600160a060020a031663702123ae8960405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561257757600080fd5b5af1151561258457600080fd5b5050506040518051600554909550600160a060020a0316905063320cffcd89888a60405160e060020a63ffffffff8616028152600481019390935260248301919091526044820152606401602060405180830381600087803b15156125e857600080fd5b5af115156125f557600080fd5b505050604051805160055490945061266a9150600160a060020a031663fbe45b488a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561264d57600080fd5b5af1151561265a57600080fd5b5050506040518051905088614004565b9150612738565b6028881061273857600554600160a060020a031663a8aeecd989888a60405160e060020a63ffffffff8616028152600481019390935260248301919091526044820152606401602060405180830381600087803b15156126d057600080fd5b5af115156126dd57600080fd5b50505060405180516005549094506127359150600160a060020a031663b6206e678a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561264d57600080fd5b91505b6000821161274557600080fd5b60045482906127c290600160a060020a031663e8d320e68d600160405160e060020a63ffffffff8516028152600160a060020a03909216600483015260ff166024820152604401602060405180830381600087803b15156127a557600080fd5b5af115156127b257600080fd5b505050604051805190508b612293565b10156127cd57600080fd5b6004548390600160a060020a03166370a082318c60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561281f57600080fd5b5af1151561282c57600080fd5b505050604051805190501015151561284357600080fd5b600454600160a060020a031663a1c90a118b8560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561289957600080fd5b5af115156128a657600080fd5b5050508882111561293b57600454600160a060020a031663546055498b6128cd858d613ff2565b6001600060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b151561292657600080fd5b5af1151561293357600080fd5b5050506129c8565b818911156129c857600454600160a060020a031663546055498b61295f8c86613ff2565b60018060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b15156129b757600080fd5b5af115156129c457600080fd5b5050505b6129d382601461402f565b60048054919250600160a060020a039091169063358cfa25906129f790859061402f565b60018060405160e060020a63ffffffff8616028152600481019390935260ff909116602483015215156044820152606401600060405180830381600087803b1515612a4157600080fd5b5af11515612a4e57600080fd5b5050600454600054600160a060020a039182169250635460554991168360018060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b1515612ac357600080fd5b5af11515612ad057600080fd5b5050506000841115612c9057600454600160a060020a03166379c310a68b82632d171243828d8d60405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515612b4257600080fd5b5af11515612b4f57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515612b9c57600080fd5b5af11515612ba957600080fd5b5050600454600160a060020a0316905063ce29555f8b8a83632d17124383838e60405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515612c1457600080fd5b5af11515612c2157600080fd5b50505060405180519050600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515612c7f57600080fd5b5af11515612c8c57600080fd5b5050505b600454600090600160a060020a031663a436e33b8c60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515612ce357600080fd5b5af11515612cf057600080fd5b50505060405180519050111515612d6257600454600160a060020a031663f7fb0a4b8b60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515612d5157600080fd5b5af11515612d5e57600080fd5b5050505b600454600160a060020a031663fc4756df8b89600160405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b1515612dc457600080fd5b5af11515612dd157600080fd5b5050600454600160a060020a0316905063e7001b848b8a8a600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515612e3d57600080fd5b5af11515612e4a57600080fd5b5050507fb6d35f558a34938047f09ebf800fa2e15ec407c357a8eab97a5dd67b4d015b5b8a89896040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150505050505050505050565b6004546000908190819081908190819081908190600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612f0257600080fd5b5af11515612f0f57600080fd5b505050604051805190501515612f2457600080fd5b6001891015612f3257600080fd5b600454600160a060020a031663e946ad4a8c8b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515612f8857600080fd5b5af11515612f9557600080fd5b50505060405180519850506005881115612fae57600080fd5b600554600160a060020a03166373f9421d8a8a60405160e060020a63ffffffff85160281526004810192909252602482015260440160c060405180830381600087803b1515612ffc57600080fd5b5af1151561300957600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051959c50939a5091985096509450909250506000821161304d57600080fd5b60008211156133035760045482906130d390600160a060020a031663e8d320e68e600160405160e060020a63ffffffff8516028152600160a060020a03909216600483015260ff166024820152604401602060405180830381600087803b15156130b657600080fd5b5af115156130c357600080fd5b505050604051805190508c612293565b10156130de57600080fd5b8982111561317057600454600160a060020a031663546055498c613102858e613ff2565b6001600060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b151561315b57600080fd5b5af1151561316857600080fd5b5050506131fd565b898210156131fd57600454600160a060020a031663546055498c6131948d86613ff2565b60018060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b15156131ec57600080fd5b5af115156131f957600080fd5b5050505b61320882601461402f565b600454909150600160a060020a031663358cfa256132268484613ff2565b60018060405160e060020a63ffffffff8616028152600481019390935260ff909116602483015215156044820152606401600060405180830381600087803b151561327057600080fd5b5af1151561327d57600080fd5b5050600454600054600160a060020a039182169250635460554991168360018060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b15156132f257600080fd5b5af115156132ff57600080fd5b5050505b6004548790600160a060020a03166370a082318d60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561335557600080fd5b5af1151561336257600080fd5b505050604051805190501015151561337957600080fd5b600454600160a060020a031663a1c90a118c8960405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156133cf57600080fd5b5af115156133dc57600080fd5b5050600454600160a060020a03169050635edc9bff8c87878760405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561344557600080fd5b5af1151561345257600080fd5b5050600454600160a060020a03169050632a2882728c8b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156134ac57600080fd5b5af115156134b957600080fd5b505060045460009150600160a060020a031663a436e33b8d60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561350f57600080fd5b5af1151561351c57600080fd5b5050506040518051905011151561358e57600454600160a060020a031663f7fb0a4b8c60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561357d57600080fd5b5af1151561358a57600080fd5b5050505b7f5923958ad0a0f9e2754b81ea1c7483dcdd7481e51b34ee4846bdaa6d5403c3458b8a604051600160a060020a03909216825260208201526040908101905180910390a15050505050505050505050565b6004546000908190819081908190819081908190600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561362f57600080fd5b5af1151561363c57600080fd5b50505060405180519050151561365157600080fd5b600654600160a060020a03166372eefb8a8a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561369957600080fd5b5af115156136a657600080fd5b5050506040518051985050600160a060020a03881615156136c657600080fd5b600160a060020a038b811690891614156136df57600080fd5b600654600160a060020a031663104a5e758a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561372757600080fd5b5af1151561373457600080fd5b505050604051805160045490985061379e9150600160a060020a031663e8d320e68d600160405160e060020a63ffffffff8516028152600160a060020a03909216600483015260ff166024820152604401602060405180830381600087803b15156127a557600080fd5b9550868610156137ad57600080fd5b600454600160a060020a031663e3cbe7448c60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156137fd57600080fd5b5af1151561380a57600080fd5b5050600454600160a060020a0316905063e3cbe7448960405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561385e57600080fd5b5af1151561386b57600080fd5b5050600654600160a060020a031690506382a86cda8a60405160e060020a63ffffffff8416028152600481019190915260240160c060405180830381600087803b15156138b757600080fd5b5af115156138c457600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051600454939b5091995090975050600160a060020a03169250635edc9bff91508d905087878760405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561395f57600080fd5b5af1151561396c57600080fd5b5050600454600160a060020a031690506352d214a78987878760405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156139d557600080fd5b5af115156139e257600080fd5b50505089871115613a7757600454600160a060020a031663546055498c613a098a8e613ff2565b6001600060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b1515613a6257600080fd5b5af11515613a6f57600080fd5b505050613b04565b868a1115613b0457600454600160a060020a031663546055498c613a9b8d8b613ff2565b60018060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b1515613af357600080fd5b5af11515613b0057600080fd5b5050505b613b0f87601461402f565b9150613b1c87601461402f565b600454909150600160a060020a031663358cfa258260018060405160e060020a63ffffffff8616028152600481019390935260ff909116602483015215156044820152606401600060405180830381600087803b1515613b7b57600080fd5b5af11515613b8857600080fd5b5050600454600054600160a060020a039182169250635460554991168460018060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b1515613bfd57600080fd5b5af11515613c0a57600080fd5b5050600654600160a060020a0316905063f5537ede898d8c60405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515613c7157600080fd5b5af11515613c7e57600080fd5b5050600654600160a060020a031690506373a553898a613cfc613cf58463103d26ac8460405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515613cd757600080fd5b5af11515613ce457600080fd5b505050604051805190506005614004565b600461402f565b60405160e060020a63ffffffff851602815260048101929092526024820152604401600060405180830381600087803b1515613d3757600080fd5b5af11515613d4457600080fd5b5050600454600160a060020a03169050635460554989613d6d8a613d688688612293565b613ff2565b60018060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b1515613dc557600080fd5b5af11515613dd257600080fd5b505060045460009150600160a060020a031663a436e33b8d60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515613e2857600080fd5b5af11515613e3557600080fd5b50505060405180519050111515613ea757600454600160a060020a031663f7fb0a4b8c60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515613e9657600080fd5b5af11515613ea357600080fd5b5050505b600454600160a060020a031663fc4756df8c60018060405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b1515613f0957600080fd5b5af11515613f1657600080fd5b5050600454600160a060020a0316905063fc4756df8960018060405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b1515613f7c57600080fd5b5af11515613f8957600080fd5b5050507f384a5203a72a9d3dc8f2dd0c78e393c368a78a6dfda91fc33f89bb8609a918d38b898b8a604051600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a15050505050505050505050565b600082821115613ffe57fe5b50900390565b60008083151561401757600091506122a6565b5082820282848281151561402757fe5b04146122a257fe5b600080828481151561403d57fe5b049493505050505600a165627a7a7230582037c00b155f0144ea9b3c4f2e04a5f7d5d9adf79618f9026c91eeda8e28ff1fe20029

Deployed Bytecode

0x6060604052600436106100f85763ffffffff60e060020a6000350416630865dadc81146100fd5780633702ab031461012357806341c0e1b51461013c57806350baa6221461014f57806355a373d61461016557806358a4903f1461019457806363c78e87146101a75780636bb7b7a4146101bd5780636cdb1b75146101d05780636fb642de146101ef578063727b42761461021357806376f2ccb91461023257806383a12de914610251578063845b6aca146102705780638da5cb5b146102955780638f4ffcb1146102a85780639a5c0abc146102de578063c3059c63146102f7578063f2fde38b14610302578063f8895cc814610321575b600080fd5b341561010857600080fd5b610121600160a060020a03600435166024351515610334565b005b341561012e57600080fd5b61012160043560243561038f565b341561014757600080fd5b610121610b04565b341561015a57600080fd5b610121600435610c00565b341561017057600080fd5b610178610d10565b604051600160a060020a03909116815260200160405180910390f35b341561019f57600080fd5b610178610d1f565b34156101b257600080fd5b610121600435610d2e565b34156101c857600080fd5b610178610e98565b34156101db57600080fd5b610121600160a060020a0360043516610ea7565b34156101fa57600080fd5b610121600160a060020a03600435166024351515610ef1565b341561021e57600080fd5b610121600160a060020a0360043516610f43565b341561023d57600080fd5b610121600160a060020a0360043516610f8d565b341561025c57600080fd5b610121600160a060020a0360043516610fd7565b341561027b57600080fd5b610121600160a060020a0360043516602435604435611021565b34156102a057600080fd5b61017861146c565b34156102b357600080fd5b61012160048035600160a060020a03908116916024803592604435169160643591820191013561147b565b34156102e957600080fd5b6101216004356024356115be565b610121600435611e24565b341561030d57600080fd5b610121600160a060020a03600435166121e9565b341561032c57600080fd5b610178612284565b60005433600160a060020a0390811691161461034f57600080fd5b600160a060020a038216151561036457600080fd5b600160a060020a03919091166000908152600160205260409020805460ff1916911515919091179055565b6004546000908190819081908190600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156103d957600080fd5b5af115156103e657600080fd5b5050506040518051905015156103fb57600080fd5b600186101561040957600080fd5b600454600160a060020a031663196ecd25338960405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561045f57600080fd5b5af1151561046c57600080fd5b5050506040518051905094506104828587612293565b9350606384111561050657600454600160a060020a031663969ddd71338960405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156104e357600080fd5b5af115156104f057600080fd5b5050506040518051851115905061050657600080fd5b60018710158015610518575060278711155b156105b257600554600160a060020a031663ee4827ea88878960405160e060020a63ffffffff861602815260048101939093526024830191909152604482015260640160a060405180830381600087803b151561057457600080fd5b5af1151561058157600080fd5b5050506040518051906020018051906020018051906020018051906020018051509296509094509250610641915050565b6028871061064157600554600160a060020a031663b2570b1c88878960405160e060020a63ffffffff8616028152600481019390935260248301919091526044820152606401608060405180830381600087803b151561061157600080fd5b5af1151561061e57600080fd5b505050604051805190602001805190602001805190602001805150919450925050505b6004548290600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561069357600080fd5b5af115156106a057600080fd5b50505060405180519050101515156106b757600080fd5b80156106c257600080fd5b600454600160a060020a031663a1c90a11338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561071857600080fd5b5af1151561072557600080fd5b50505060008311156108e557600454600160a060020a03166379c310a63382632d171243828c8c60405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561079757600080fd5b5af115156107a457600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156107f157600080fd5b5af115156107fe57600080fd5b5050600454600160a060020a0316905063ce29555f338983632d17124383838d60405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b151561086957600080fd5b5af1151561087657600080fd5b50505060405180519050600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b15156108d457600080fd5b5af115156108e157600080fd5b5050505b600454600090600160a060020a031663a436e33b3360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561093857600080fd5b5af1151561094557600080fd5b505050604051805190501115156109b757600454600160a060020a031663f7fb0a4b3360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156109a657600080fd5b5af115156109b357600080fd5b5050505b600454600160a060020a031663fc4756df3388600160405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b1515610a1957600080fd5b5af11515610a2657600080fd5b5050600454600160a060020a0316905063e7001b84338989600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515610a9257600080fd5b5af11515610a9f57600080fd5b5050507fb6d35f558a34938047f09ebf800fa2e15ec407c357a8eab97a5dd67b4d015b5b3388886040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150505050505050565b60005433600160a060020a03908116911614610b1f57600080fd5b600354600160a060020a03166323b872dd3033836370a082318360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610b7757600080fd5b5af11515610b8457600080fd5b5050506040518051905060405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610bdd57600080fd5b5af11515610bea57600080fd5b50505060405180515050600160a060020a033316ff5b6000805433600160a060020a03908116911614610c1c57600080fd5b600354600160a060020a03166370a082313060405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515610c6c57600080fd5b5af11515610c7957600080fd5b5050506040518051915050600081118015610c945750818110155b1515610c9f57600080fd5b600354600160a060020a031663a9059cbb338460405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610cf557600080fd5b5af11515610d0257600080fd5b505050604051805150505050565b600354600160a060020a031681565b600454600160a060020a031681565b600454600160a060020a031663e8d320e633600160405160e060020a63ffffffff8516028152600160a060020a03909216600483015260ff166024820152604401602060405180830381600087803b1515610d8857600080fd5b5af11515610d9557600080fd5b50505060405180518211159050610dab57600080fd5b600454600160a060020a0316635460554933836001600060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b1515610e1757600080fd5b5af11515610e2457600080fd5b5050600354600160a060020a0316905063a9059cbb338360405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610e7e57600080fd5b5af11515610e8b57600080fd5b5050506040518051505050565b600654600160a060020a031681565b60005433600160a060020a03908116911614610ec257600080fd5b6004805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a03331660009081526001602052604090205460ff161515610f1857600080fd5b600160a060020a03919091166000908152600260205260409020805460ff1916911515919091179055565b60005433600160a060020a03908116911614610f5e57600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005433600160a060020a03908116911614610fa857600080fd5b6006805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005433600160a060020a03908116911614610ff257600080fd5b6005805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600160a060020a03331660009081526001602052604081205481908190819060ff16151561104e57600080fd5b600454600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561108d57600080fd5b5af1151561109a57600080fd5b5050506040518051905015156110af57600080fd5b60018510156110bd57600080fd5b600454600160a060020a031663196ecd25888860405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561111357600080fd5b5af1151561112057600080fd5b5050506040518051905093506111368486612293565b925060638311156111ba57600454600160a060020a031663969ddd71888860405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561119757600080fd5b5af115156111a457600080fd5b505050604051805184111590506111ba57600080fd5b602986146111c757600080fd5b600554600160a060020a031663b2570b1c87868860405160e060020a63ffffffff8616028152600481019390935260248301919091526044820152606401608060405180830381600087803b151561121e57600080fd5b5af1151561122b57600080fd5b50505060405180519060200180519060200180519060200180515050600454919450925060009150600160a060020a031663a436e33b8960405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b15156112a057600080fd5b5af115156112ad57600080fd5b5050506040518051905011151561131f57600454600160a060020a031663f7fb0a4b8860405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561130e57600080fd5b5af1151561131b57600080fd5b5050505b600454600160a060020a031663fc4756df8887600160405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b151561138157600080fd5b5af1151561138e57600080fd5b5050600454600160a060020a0316905063e7001b84888888600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b15156113fa57600080fd5b5af1151561140757600080fd5b5050507fb6d35f558a34938047f09ebf800fa2e15ec407c357a8eab97a5dd67b4d015b5b8787876040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150505050505050565b600054600160a060020a031681565b600080600085600160a060020a031633600160a060020a03161415156114a057600080fd5b60018410156114ae57600080fd5b600354600160a060020a03166323b872dd89308a60405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b151561151157600080fd5b5af1151561151e57600080fd5b50505060405180519050151561153357600080fd5b61156b85858080601f0160208091040260200160405190810160405281815292919060208401838380828437506122ad945050505050565b91945092509050600183141561158c576115878888848461239f565b6115b4565b82600314156115a057611587888884612eb2565b82600414156115b4576115b48888846135df565b5050505050505050565b6004546000908190819081908190819081908190600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561160e57600080fd5b5af1151561161b57600080fd5b50505060405180519050151561163057600080fd5b600454600160a060020a031663196ecd25338c60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561168657600080fd5b5af1151561169357600080fd5b50505060405180519850508888108015906116ae5750600089115b15156116b957600080fd5b6116c3888a613ff2565b975060288a106117c857600554600160a060020a031663b2570b1c8b8a8c60405160e060020a63ffffffff8616028152600481019390935260248301919091526044820152606401608060405180830381600087803b151561172457600080fd5b5af1151561173157600080fd5b50505060405180519060200180519060200180519060200180516005549499509296509193506117c192600160a060020a0316915063b6206e6790508c60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156117a457600080fd5b5af115156117b157600080fd5b505050604051805190508a614004565b91506118ab565b600554600160a060020a031663ee4827ea8b8a8c60405160e060020a63ffffffff861602815260048101939093526024830191909152604482015260640160a060405180830381600087803b151561181f57600080fd5b5af1151561182c57600080fd5b5050506040518051906020018051906020018051906020018051906020018051600554959a509398509196509193506118a892600160a060020a0316915063fbe45b4890508c60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b15156117a457600080fd5b91505b8015156118b757600080fd5b600083111561194c5760045461194590600160a060020a0316634676b8973360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561191457600080fd5b5af1151561192157600080fd5b50505060405180519050611940611939866046614004565b606461402f565b612293565b96506119b5565b600454600160a060020a0316634676b8973360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561199c57600080fd5b5af115156119a957600080fd5b50505060405180519750505b600454600160a060020a031663176854f63360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515611a0557600080fd5b5af11515611a1257600080fd5b5050600454600160a060020a0316905063448a0ceb8860405160e060020a63ffffffff84160281526004810191909152602401600060405180830381600087803b1515611a5e57600080fd5b5af11515611a6b57600080fd5b5050600454600160a060020a0316905063a6678b603389600160405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b1515611ad157600080fd5b5af11515611ade57600080fd5b5050600454600160a060020a031690506397ce3a4b338c8c60405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515611b4157600080fd5b5af11515611b4e57600080fd5b50505060405180519650506000841115611c4257600454600160a060020a031663396e70e0338860405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515611bb857600080fd5b5af11515611bc557600080fd5b5050600454600160a060020a0316905063ce29555f338c89600060405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515611c3157600080fd5b5af11515611c3e57600080fd5b5050505b6000821115611cd457600454600160a060020a0316635460554933611c6b611939866046614004565b60018060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b1515611cc357600080fd5b5af11515611cd057600080fd5b5050505b600454600160a060020a031663e7001b84338c8c600060405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515611d3c57600080fd5b5af11515611d4957600080fd5b5050600454600160a060020a0316905063fc4756df338b600060405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b1515611daf57600080fd5b5af11515611dbc57600080fd5b5050507f9c8076df639d56f1ef3ca3d4d8dc6ed089f8c4756bc5bf5d574f1cec4ef13c54338b8b6040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150505050505050505050565b60045460009081908190819081908190600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515611e7057600080fd5b5af11515611e7d57600080fd5b505050604051805190501515611e9257600080fd5b6001871015611ea057600080fd5b600454600160a060020a031663e946ad4a338960405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515611ef657600080fd5b5af11515611f0357600080fd5b5050506040518051600554909750600160a060020a031690506373f9421d888860405160e060020a63ffffffff85160281526004810192909252602482015260440160c060405180830381600087803b1515611f5e57600080fd5b5af11515611f6b57600080fd5b50505060405180519060200180519060200180519060200180519060200180519060200180515094995092975090955093509150506008831015611fbc576005861115611fb757600080fd5b611fca565b6002861115611fca57600080fd5b600085118015611fd8575083155b1515611fe357600080fd5b6004548590600160a060020a03166370a082313360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561203557600080fd5b5af1151561204257600080fd5b505050604051805190501015151561205957600080fd5b600454600160a060020a031663a1c90a11338760405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156120af57600080fd5b5af115156120bc57600080fd5b5050600454600160a060020a03169050635edc9bff3385858560405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561212557600080fd5b5af1151561213257600080fd5b5050600454600160a060020a03169050632a288272338960405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561218c57600080fd5b5af1151561219957600080fd5b5050507f5923958ad0a0f9e2754b81ea1c7483dcdd7481e51b34ee4846bdaa6d5403c3453388604051600160a060020a03909216825260208201526040908101905180910390a150505050505050565b60005433600160a060020a0390811691161461220457600080fd5b600160a060020a038116151561221957600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600554600160a060020a031681565b6000828201838110156122a257fe5b8091505b5092915050565b600080600083516002141561231557836000815181106122c957fe5b016020015160f860020a900460f860020a0260f860020a90049250836001815181106122f157fe5b016020015160f860020a900460f860020a0260f860020a9004915060019050612398565b835160031415612398578360008151811061232c57fe5b016020015160f860020a900460f860020a0260f860020a900492508360018151811061235457fe5b016020015160f860020a900460f860020a0260f860020a900491508360028151811061237c57fe5b016020015160f860020a900460f860020a0260f860020a900490505b9193909250565b60045460009081908190819081908190600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156123eb57600080fd5b5af115156123f857600080fd5b50505060405180519050151561240d57600080fd5b600187101561241b57600080fd5b600454600160a060020a031663196ecd258b8a60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561247157600080fd5b5af1151561247e57600080fd5b5050506040518051905095506124948688612293565b9450606385111561251857600454600160a060020a031663969ddd718b8a60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b15156124f557600080fd5b5af1151561250257600080fd5b5050506040518051861115905061251857600080fd5b6001881015801561252a575060278811155b1561267157600554600160a060020a031663702123ae8960405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561257757600080fd5b5af1151561258457600080fd5b5050506040518051600554909550600160a060020a0316905063320cffcd89888a60405160e060020a63ffffffff8616028152600481019390935260248301919091526044820152606401602060405180830381600087803b15156125e857600080fd5b5af115156125f557600080fd5b505050604051805160055490945061266a9150600160a060020a031663fbe45b488a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561264d57600080fd5b5af1151561265a57600080fd5b5050506040518051905088614004565b9150612738565b6028881061273857600554600160a060020a031663a8aeecd989888a60405160e060020a63ffffffff8616028152600481019390935260248301919091526044820152606401602060405180830381600087803b15156126d057600080fd5b5af115156126dd57600080fd5b50505060405180516005549094506127359150600160a060020a031663b6206e678a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561264d57600080fd5b91505b6000821161274557600080fd5b60045482906127c290600160a060020a031663e8d320e68d600160405160e060020a63ffffffff8516028152600160a060020a03909216600483015260ff166024820152604401602060405180830381600087803b15156127a557600080fd5b5af115156127b257600080fd5b505050604051805190508b612293565b10156127cd57600080fd5b6004548390600160a060020a03166370a082318c60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561281f57600080fd5b5af1151561282c57600080fd5b505050604051805190501015151561284357600080fd5b600454600160a060020a031663a1c90a118b8560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b151561289957600080fd5b5af115156128a657600080fd5b5050508882111561293b57600454600160a060020a031663546055498b6128cd858d613ff2565b6001600060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b151561292657600080fd5b5af1151561293357600080fd5b5050506129c8565b818911156129c857600454600160a060020a031663546055498b61295f8c86613ff2565b60018060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b15156129b757600080fd5b5af115156129c457600080fd5b5050505b6129d382601461402f565b60048054919250600160a060020a039091169063358cfa25906129f790859061402f565b60018060405160e060020a63ffffffff8616028152600481019390935260ff909116602483015215156044820152606401600060405180830381600087803b1515612a4157600080fd5b5af11515612a4e57600080fd5b5050600454600054600160a060020a039182169250635460554991168360018060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b1515612ac357600080fd5b5af11515612ad057600080fd5b5050506000841115612c9057600454600160a060020a03166379c310a68b82632d171243828d8d60405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515612b4257600080fd5b5af11515612b4f57600080fd5b5050506040518051905060405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515612b9c57600080fd5b5af11515612ba957600080fd5b5050600454600160a060020a0316905063ce29555f8b8a83632d17124383838e60405160e060020a63ffffffff8616028152600160a060020a03909316600484015260248301919091526044820152606401602060405180830381600087803b1515612c1457600080fd5b5af11515612c2157600080fd5b50505060405180519050600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515612c7f57600080fd5b5af11515612c8c57600080fd5b5050505b600454600090600160a060020a031663a436e33b8c60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515612ce357600080fd5b5af11515612cf057600080fd5b50505060405180519050111515612d6257600454600160a060020a031663f7fb0a4b8b60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515612d5157600080fd5b5af11515612d5e57600080fd5b5050505b600454600160a060020a031663fc4756df8b89600160405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b1515612dc457600080fd5b5af11515612dd157600080fd5b5050600454600160a060020a0316905063e7001b848b8a8a600160405160e060020a63ffffffff8716028152600160a060020a0390941660048501526024840192909252604483015215156064820152608401600060405180830381600087803b1515612e3d57600080fd5b5af11515612e4a57600080fd5b5050507fb6d35f558a34938047f09ebf800fa2e15ec407c357a8eab97a5dd67b4d015b5b8a89896040518084600160a060020a0316600160a060020a03168152602001838152602001828152602001935050505060405180910390a150505050505050505050565b6004546000908190819081908190819081908190600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b1515612f0257600080fd5b5af11515612f0f57600080fd5b505050604051805190501515612f2457600080fd5b6001891015612f3257600080fd5b600454600160a060020a031663e946ad4a8c8b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515612f8857600080fd5b5af11515612f9557600080fd5b50505060405180519850506005881115612fae57600080fd5b600554600160a060020a03166373f9421d8a8a60405160e060020a63ffffffff85160281526004810192909252602482015260440160c060405180830381600087803b1515612ffc57600080fd5b5af1151561300957600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051959c50939a5091985096509450909250506000821161304d57600080fd5b60008211156133035760045482906130d390600160a060020a031663e8d320e68e600160405160e060020a63ffffffff8516028152600160a060020a03909216600483015260ff166024820152604401602060405180830381600087803b15156130b657600080fd5b5af115156130c357600080fd5b505050604051805190508c612293565b10156130de57600080fd5b8982111561317057600454600160a060020a031663546055498c613102858e613ff2565b6001600060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b151561315b57600080fd5b5af1151561316857600080fd5b5050506131fd565b898210156131fd57600454600160a060020a031663546055498c6131948d86613ff2565b60018060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b15156131ec57600080fd5b5af115156131f957600080fd5b5050505b61320882601461402f565b600454909150600160a060020a031663358cfa256132268484613ff2565b60018060405160e060020a63ffffffff8616028152600481019390935260ff909116602483015215156044820152606401600060405180830381600087803b151561327057600080fd5b5af1151561327d57600080fd5b5050600454600054600160a060020a039182169250635460554991168360018060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b15156132f257600080fd5b5af115156132ff57600080fd5b5050505b6004548790600160a060020a03166370a082318d60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561335557600080fd5b5af1151561336257600080fd5b505050604051805190501015151561337957600080fd5b600454600160a060020a031663a1c90a118c8960405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156133cf57600080fd5b5af115156133dc57600080fd5b5050600454600160a060020a03169050635edc9bff8c87878760405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561344557600080fd5b5af1151561345257600080fd5b5050600454600160a060020a03169050632a2882728c8b60405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b15156134ac57600080fd5b5af115156134b957600080fd5b505060045460009150600160a060020a031663a436e33b8d60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561350f57600080fd5b5af1151561351c57600080fd5b5050506040518051905011151561358e57600454600160a060020a031663f7fb0a4b8c60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561357d57600080fd5b5af1151561358a57600080fd5b5050505b7f5923958ad0a0f9e2754b81ea1c7483dcdd7481e51b34ee4846bdaa6d5403c3458b8a604051600160a060020a03909216825260208201526040908101905180910390a15050505050505050505050565b6004546000908190819081908190819081908190600160a060020a0316639267b2916040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561362f57600080fd5b5af1151561363c57600080fd5b50505060405180519050151561365157600080fd5b600654600160a060020a03166372eefb8a8a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561369957600080fd5b5af115156136a657600080fd5b5050506040518051985050600160a060020a03881615156136c657600080fd5b600160a060020a038b811690891614156136df57600080fd5b600654600160a060020a031663104a5e758a60405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b151561372757600080fd5b5af1151561373457600080fd5b505050604051805160045490985061379e9150600160a060020a031663e8d320e68d600160405160e060020a63ffffffff8516028152600160a060020a03909216600483015260ff166024820152604401602060405180830381600087803b15156127a557600080fd5b9550868610156137ad57600080fd5b600454600160a060020a031663e3cbe7448c60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156137fd57600080fd5b5af1151561380a57600080fd5b5050600454600160a060020a0316905063e3cbe7448960405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561385e57600080fd5b5af1151561386b57600080fd5b5050600654600160a060020a031690506382a86cda8a60405160e060020a63ffffffff8416028152600481019190915260240160c060405180830381600087803b15156138b757600080fd5b5af115156138c457600080fd5b5050506040518051906020018051906020018051906020018051906020018051906020018051600454939b5091995090975050600160a060020a03169250635edc9bff91508d905087878760405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b151561395f57600080fd5b5af1151561396c57600080fd5b5050600454600160a060020a031690506352d214a78987878760405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260448301526064820152608401600060405180830381600087803b15156139d557600080fd5b5af115156139e257600080fd5b50505089871115613a7757600454600160a060020a031663546055498c613a098a8e613ff2565b6001600060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b1515613a6257600080fd5b5af11515613a6f57600080fd5b505050613b04565b868a1115613b0457600454600160a060020a031663546055498c613a9b8d8b613ff2565b60018060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b1515613af357600080fd5b5af11515613b0057600080fd5b5050505b613b0f87601461402f565b9150613b1c87601461402f565b600454909150600160a060020a031663358cfa258260018060405160e060020a63ffffffff8616028152600481019390935260ff909116602483015215156044820152606401600060405180830381600087803b1515613b7b57600080fd5b5af11515613b8857600080fd5b5050600454600054600160a060020a039182169250635460554991168460018060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b1515613bfd57600080fd5b5af11515613c0a57600080fd5b5050600654600160a060020a0316905063f5537ede898d8c60405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401600060405180830381600087803b1515613c7157600080fd5b5af11515613c7e57600080fd5b5050600654600160a060020a031690506373a553898a613cfc613cf58463103d26ac8460405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515613cd757600080fd5b5af11515613ce457600080fd5b505050604051805190506005614004565b600461402f565b60405160e060020a63ffffffff851602815260048101929092526024820152604401600060405180830381600087803b1515613d3757600080fd5b5af11515613d4457600080fd5b5050600454600160a060020a03169050635460554989613d6d8a613d688688612293565b613ff2565b60018060405160e060020a63ffffffff8716028152600160a060020a039094166004850152602484019290925260ff16604483015215156064820152608401600060405180830381600087803b1515613dc557600080fd5b5af11515613dd257600080fd5b505060045460009150600160a060020a031663a436e33b8d60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b1515613e2857600080fd5b5af11515613e3557600080fd5b50505060405180519050111515613ea757600454600160a060020a031663f7fb0a4b8c60405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b1515613e9657600080fd5b5af11515613ea357600080fd5b5050505b600454600160a060020a031663fc4756df8c60018060405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b1515613f0957600080fd5b5af11515613f1657600080fd5b5050600454600160a060020a0316905063fc4756df8960018060405160e060020a63ffffffff8616028152600160a060020a039093166004840152602483019190915215156044820152606401600060405180830381600087803b1515613f7c57600080fd5b5af11515613f8957600080fd5b5050507f384a5203a72a9d3dc8f2dd0c78e393c368a78a6dfda91fc33f89bb8609a918d38b898b8a604051600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a15050505050505050505050565b600082821115613ffe57fe5b50900390565b60008083151561401757600091506122a6565b5082820282848281151561402757fe5b04146122a257fe5b600080828481151561403d57fe5b049493505050505600a165627a7a7230582037c00b155f0144ea9b3c4f2e04a5f7d5d9adf79618f9026c91eeda8e28ff1fe20029

Swarm Source

bzzr://37c00b155f0144ea9b3c4f2e04a5f7d5d9adf79618f9026c91eeda8e28ff1fe2

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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