ETH Price: $2,379.93 (+0.93%)

Contract

0xf70244b3c872AAdA7FC30fF04CC9D153A354FA00
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim Bounty Tok...75199562019-04-07 8:31:101983 days ago1554625870IN
0xf70244b3...3A354FA00
0 ETH0.000228064
Add Many To Whit...73967272019-03-19 2:59:502002 days ago1552964390IN
0xf70244b3...3A354FA00
0 ETH0.000207973
Claim Bounty Tok...73731182019-03-15 10:43:192006 days ago1552646599IN
0xf70244b3...3A354FA00
0 ETH0.000114032
Claim Bounty Tok...73658932019-03-14 7:47:322007 days ago1552549652IN
0xf70244b3...3A354FA00
0 ETH0.000114032
Claim Bounty Tok...72987502019-03-03 20:42:192018 days ago1551645739IN
0xf70244b3...3A354FA00
0 ETH0.000171043
Add To Whitelist72644552019-02-25 4:14:022024 days ago1551068042IN
0xf70244b3...3A354FA00
0 ETH0.00023585
Claim Bounty Tok...72451722019-02-20 16:07:212029 days ago1550678841IN
0xf70244b3...3A354FA00
0 ETH0.000285085
Claim Bounty Tok...72414752019-02-19 19:00:052030 days ago1550602805IN
0xf70244b3...3A354FA00
0 ETH0.0023376541
Add To Whitelist72348762019-02-18 5:47:112031 days ago1550468831IN
0xf70244b3...3A354FA00
0 ETH0.00023585
Add Bounty72348642019-02-18 5:44:592031 days ago1550468699IN
0xf70244b3...3A354FA00
0 ETH0.0006053611.3
Set Account Veri...72348582019-02-18 5:43:382031 days ago1550468618IN
0xf70244b3...3A354FA00
0 ETH0.0004610
Add Bounty72048542019-02-11 1:47:282038 days ago1549849648IN
0xf70244b3...3A354FA00
0 ETH0.000160713
Set Account Veri...72048512019-02-11 1:46:412038 days ago1549849601IN
0xf70244b3...3A354FA00
0 ETH0.0001383
Claim Bounty Tok...71870752019-02-07 7:42:092042 days ago1549525329IN
0xf70244b3...3A354FA00
0 ETH0.000027391
Add Bounty71737092019-02-04 14:14:112045 days ago1549289651IN
0xf70244b3...3A354FA00
0 ETH0.00016093
Set Account Veri...71531952019-01-31 9:41:032049 days ago1548927663IN
0xf70244b3...3A354FA00
0 ETH0.000185184
Add Many To Whit...71531912019-01-31 9:39:272049 days ago1548927567IN
0xf70244b3...3A354FA00
0 ETH0.000810334
Claim Bounty Tok...71388902019-01-28 11:37:582052 days ago1548675478IN
0xf70244b3...3A354FA00
0 ETH0.0023376541
Claim Bounty Tok...71299612019-01-26 16:48:032054 days ago1548521283IN
0xf70244b3...3A354FA00
0 ETH0.001425425
Claim Bounty Tok...71299432019-01-26 16:42:222054 days ago1548520942IN
0xf70244b3...3A354FA00
0 ETH0.001425425
Claim Bounty Tok...71297622019-01-26 15:51:472054 days ago1548517907IN
0xf70244b3...3A354FA00
0 ETH0.0023376541
Claim Bounty Tok...71252082019-01-25 18:18:252055 days ago1548440305IN
0xf70244b3...3A354FA00
0 ETH0.000054022
Claim Bounty Tok...71059482019-01-21 22:59:122058 days ago1548111552IN
0xf70244b3...3A354FA00
0 ETH0.000342096
Claim Bounty Tok...71059002019-01-21 22:45:262058 days ago1548110726IN
0xf70244b3...3A354FA00
0 ETH0.000252096
Claim Token71034642019-01-21 11:20:252059 days ago1548069625IN
0xf70244b3...3A354FA00
0 ETH0.000343546
View all transactions

Latest 7 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
62824192018-09-06 13:11:432196 days ago1536239503
0xf70244b3...3A354FA00
0.1 ETH
62763312018-09-05 12:44:222197 days ago1536151462
0xf70244b3...3A354FA00
0.1 ETH
62763052018-09-05 12:39:022197 days ago1536151142
0xf70244b3...3A354FA00
0.1 ETH
62232342018-08-27 13:57:412206 days ago1535378261
0xf70244b3...3A354FA00
0.1 ETH
62150532018-08-26 4:42:412207 days ago1535258561
0xf70244b3...3A354FA00
0.1 ETH
62120532018-08-25 16:59:372208 days ago1535216377
0xf70244b3...3A354FA00
0.1 ETH
54606422018-04-18 4:13:082337 days ago1524024788
0xf70244b3...3A354FA00
 Contract Creation0 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ACATokenSale

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-04-18
*/

pragma solidity ^0.4.19;

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
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 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;
  }

}

/**
 * @title RefundVault
 * @dev This contract is used for storing funds while a crowdsale
 * is in progress. Supports refunding the money if crowdsale fails,
 * and forwarding it if crowdsale is successful.
 */
contract RefundVault is Ownable {
  using SafeMath for uint256;

  enum State { Active, Refunding, Closed }

  mapping (address => uint256) public deposited;
  address public wallet;
  State public state;

  event Closed();
  event RefundsEnabled();
  event Refunded(address indexed beneficiary, uint256 weiAmount);

  /**
   * @param _wallet Vault address
   */
  function RefundVault(address _wallet) public {
    require(_wallet != address(0));
    wallet = _wallet;
    state = State.Active;
  }

  /**
   * @param investor Investor address
   */
  function deposit(address investor) onlyOwner public payable {
    require(state == State.Active);
    deposited[investor] = deposited[investor].add(msg.value);
  }

  function close() onlyOwner public {
    require(state == State.Active);
    state = State.Closed;
    Closed();
    wallet.transfer(this.balance);
  }

  function enableRefunds() onlyOwner public {
    require(state == State.Active);
    state = State.Refunding;
    RefundsEnabled();
  }

  /**
   * @param investor Investor address
   */
  function refund(address investor) public {
    require(state == State.Refunding);
    uint256 depositedValue = deposited[investor];
    deposited[investor] = 0;
    investor.transfer(depositedValue);
    Refunded(investor, depositedValue);
  }
}

contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract ACAToken is ERC20 {
    using SafeMath for uint256;

    address public owner;
    address public admin;
    address public saleAddress;

    string public name = "ACA Network Token";
    string public symbol = "ACA";
    uint8 public decimals = 18;

    uint256 totalSupply_;
    mapping (address => mapping (address => uint256)) internal allowed;
    mapping (address => uint256) balances;

    bool transferable = false;
    mapping (address => bool) internal transferLocked;

    event Genesis(address owner, uint256 value);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event AdminTransferred(address indexed previousAdmin, address indexed newAdmin);
    event Burn(address indexed burner, uint256 value);
    event LogAddress(address indexed addr);
    event LogUint256(uint256 value);
    event TransferLock(address indexed target, bool value);

    // modifiers
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    modifier onlyAdmin() {
        require(msg.sender == owner || msg.sender == admin);
        _;
    }

    modifier canTransfer(address _from, address _to) {
        require(_to != address(0x0));
        require(_to != address(this));

        if ( _from != owner && _from != admin ) {
            require(transferable);
            require (!transferLocked[_from]);
        }
        _;
    }

    // constructor
    function ACAToken(uint256 _totalSupply, address _saleAddress, address _admin) public {
        require(_totalSupply > 0);
        owner = msg.sender;
        require(_saleAddress != address(0x0));
        require(_saleAddress != address(this));
        require(_saleAddress != owner);

        require(_admin != address(0x0));
        require(_admin != address(this));
        require(_admin != owner);

        require(_admin != _saleAddress);

        admin = _admin;
        saleAddress = _saleAddress;

        totalSupply_ = _totalSupply;

        balances[owner] = totalSupply_;
        approve(saleAddress, totalSupply_);

        emit Genesis(owner, totalSupply_);
    }

    // permission related
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0));
        require(newOwner != address(this));
        require(newOwner != admin);

        owner = newOwner;
        emit OwnershipTransferred(owner, newOwner);
    }

    function transferAdmin(address _newAdmin) public onlyOwner {
        require(_newAdmin != address(0));
        require(_newAdmin != address(this));
        require(_newAdmin != owner);

        admin = _newAdmin;
        emit AdminTransferred(admin, _newAdmin);
    }

    function setTransferable(bool _transferable) public onlyAdmin {
        transferable = _transferable;
    }

    function isTransferable() public view returns (bool) {
        return transferable;
    }

    function transferLock() public returns (bool) {
        transferLocked[msg.sender] = true;
        emit TransferLock(msg.sender, true);
        return true;
    }

    function manageTransferLock(address _target, bool _value) public onlyAdmin returns (bool) {
        transferLocked[_target] = _value;
        emit TransferLock(_target, _value);
        return true;
    }

    function transferAllowed(address _target) public view returns (bool) {
        return (transferable && transferLocked[_target] == false);
    }

    // token related
    function totalSupply() public view returns (uint256) {
        return totalSupply_;
    }

    function transfer(address _to, uint256 _value) canTransfer(msg.sender, _to) public returns (bool) {
        require(_value <= balances[msg.sender]);

        // SafeMath.sub will throw if there is not enough balance.
        balances[msg.sender] = balances[msg.sender].sub(_value);
        balances[_to] = balances[_to].add(_value);
        emit Transfer(msg.sender, _to, _value);
        return true;
    }

    function balanceOf(address _owner) public view returns (uint256 balance) {
        return balances[_owner];
    }

    function balanceOfOwner() public view returns (uint256 balance) {
        return balances[owner];
    }

    function transferFrom(address _from, address _to, uint256 _value) public canTransfer(_from, _to) returns (bool) {
        require(_value <= balances[_from]);
        require(_value <= allowed[_from][msg.sender]);

        balances[_from] = balances[_from].sub(_value);
        balances[_to] = balances[_to].add(_value);
        allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
        emit Transfer(_from, _to, _value);
        return true;
    }

    function approve(address _spender, uint256 _value) public canTransfer(msg.sender, _spender) returns (bool) {
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
    }

    function allowance(address _owner, address _spender) public view returns (uint256) {
        return allowed[_owner][_spender];
    }

    function increaseApproval(address _spender, uint _addedValue) public canTransfer(msg.sender, _spender) returns (bool) {
        allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    function decreaseApproval(address _spender, uint _subtractedValue) public canTransfer(msg.sender, _spender) returns (bool) {
        uint oldValue = allowed[msg.sender][_spender];
        if (_subtractedValue > oldValue) {
            allowed[msg.sender][_spender] = 0;
        } else {
            allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
        }
        emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
        return true;
    }

    function burn(uint256 _value) public {
        require(_value <= balances[msg.sender]);
        // no need to require value <= totalSupply, since that would imply the
        // sender's balance is greater than the totalSupply, which *should* be an assertion failure

        address burner = msg.sender;
        balances[burner] = balances[burner].sub(_value);
        totalSupply_ = totalSupply_.sub(_value);
        emit Burn(burner, _value);
    }

    function emergencyERC20Drain(ERC20 _token, uint256 _amount) public onlyOwner {
        _token.transfer(owner, _amount);
    }
}

contract ACATokenSale {
    using SafeMath for uint256;

    address public owner;
    address public admin;

    address public wallet;
    ACAToken public token;

    uint256 totalSupply;

    struct StageInfo {
        uint256 opening;
        uint256 closing;
        uint256 capacity;
        uint256 minimumWei;
        uint256 maximumWei;
        uint256 rate;
        uint256 sold;
    }
    bool public tokenSaleEnabled = false;

    mapping(address => bool) public whitelist;
    mapping(address => bool) public kyclist;
    mapping(address => bool) public whitelistBonus;

    uint256 public whitelistBonusClosingTime;
    uint256 public whitelistBonusSent = 0;
    uint256 public whitelistBonusRate;
    uint256 public whitelistBonusAmount;

    mapping (address => uint256) public sales;
    uint256 public softCap;
    uint256 public hardCap;
    uint256 public weiRaised = 0;

    RefundVault public vault;

    mapping (address => address) public referrals;
    uint256 public referralAmount;
    uint256 public referralRateInviter;
    uint256 public referralRateInvitee;
    uint256 public referralSent = 0;
    bool public referralDone = false;

    mapping (address => uint256) public bounties;
    uint256 public bountyAmount;
    uint256 public bountySent = 0;

    StageInfo[] public stages;
    uint256 public currentStage = 0;

    bool public isFinalized = false;
    bool public isClaimable = false;

    // events
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event AdminTransferred(address indexed previousAdmin, address indexed newAdmin);
    event TokenSaleCreated(address indexed wallet, uint256 totalSupply);
    event StageAdded(uint256 openingTime, uint256 closingTime, uint256 capacity, uint256 minimumWei, uint256 maximumWei, uint256 rate);
    event TokenSaleEnabled();

    event WhitelistUpdated(address indexed beneficiary, bool flag);
    event VerificationUpdated(address indexed beneficiary, bool flag);
    event BulkWhitelistUpdated(address[] beneficiary, bool flag);
    event BulkVerificationUpdated(address[] beneficiary, bool flag);

    event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount);
    event TokenClaimed(address indexed beneficiary, uint256 amount);
    event Finalized();
    event BountySetupDone();
    event BountyUpdated(address indexed target, bool flag, uint256 amount);
    event PurchaseReferral(address indexed beneficiary, uint256 amount);
    event StageUpdated(uint256 stage);
    event StageCapReached(uint256 stage);
    event ReferralCapReached();

    // do not use this on mainnet!
    event LogAddress(address indexed addr);
    event LogUint256(uint256 value);

    // modifiers
    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    modifier onlyAdmin() {
        require(msg.sender == owner || msg.sender == admin);
        _;
    }

    modifier onlyWhileOpen {
        require(tokenSaleEnabled == true);
        require(now >= stages[currentStage].opening && now <= stages[currentStage].closing);
        _;
    }

    modifier isVerified(address _beneficiary) {
        require(whitelist[_beneficiary] == true);
        require(kyclist[_beneficiary] == true);
        _;
    }

    modifier claimable {
        require(isFinalized == true || isClaimable == true);
        require(isGoalReached());
        _;
    }

    // getters
    function isEnabled() public view returns (bool) {
        return tokenSaleEnabled;
    }

    function isClosed() public view returns (bool) {
        return now > stages[stages.length - 1].closing;
    }

    function isGoalReached() public view returns (bool) {
        return getTotalTokenSold() >= softCap;
    }

    function getTotalTokenSold() public view returns (uint256) {
        uint256 sold = 0;
        for ( uint i = 0; i < stages.length; ++i ) {
            sold = sold.add(stages[i].sold);
        }

        return sold;
    }

    function getOpeningTime() public view returns (uint256) {
        return stages[currentStage].opening;
    }

    function getOpeningTimeByStage(uint _index) public view returns (uint256) {
        require(_index < stages.length);
        return stages[_index].opening;
    }

    function getClosingTime() public view returns (uint256) {
        return stages[currentStage].closing;
    }

    function getClosingTimeByStage(uint _index) public view returns (uint256) {
        require(_index < stages.length);
        return stages[_index].closing;
    }

    function getCurrentCapacity() public view returns (uint256) {
        return stages[currentStage].capacity;
    }

    function getCapacity(uint _index) public view returns (uint256) {
        require(_index < stages.length);
        return stages[_index].capacity;
    }

    function getCurrentSold() public view returns (uint256) {
        return stages[currentStage].sold;
    }

    function getSold(uint _index) public view returns (uint256) {
        require(_index < stages.length);
        return stages[_index].sold;
    }

    function getCurrentRate() public view returns (uint256) {
        return stages[currentStage].rate;
    }

    function getRate(uint _index) public view returns (uint256) {
        require(_index < stages.length);
        return stages[_index].rate;
    }

    function getRateWithoutBonus() public view returns (uint256) {
        return stages[stages.length - 1].rate;
    }

    function getSales(address _beneficiary) public view returns (uint256) {
        return sales[_beneficiary];
    }
    
    // setter
    function setSalePeriod(uint _index, uint256 _openingTime, uint256 _closingTime) onlyOwner public {
        require(_openingTime > now);
        require(_closingTime > _openingTime);

        require(_index > currentStage);
        require(_index < stages.length);

        stages[_index].opening = _openingTime;        
        stages[_index].closing = _closingTime;        
    }

    function setRate(uint _index, uint256 _rate) onlyOwner public {
        require(_index > currentStage);
        require(_index < stages.length);

        require(_rate > 0);

        stages[_index].rate = _rate;
    }

    function setCapacity(uint _index, uint256 _capacity) onlyOwner public {
        require(_index > currentStage);
        require(_index < stages.length);

        require(_capacity > 0);

        stages[_index].capacity = _capacity;
    }

    function setClaimable(bool _claimable) onlyOwner public {
        if ( _claimable == true ) {
            require(isGoalReached());
        }

        isClaimable = _claimable;
    }

    function addPrivateSale(uint256 _amount) onlyOwner public {
        require(currentStage == 0);
        require(_amount > 0);
        require(_amount < stages[0].capacity.sub(stages[0].sold));

        stages[0].sold = stages[0].sold.add(_amount);
    }

    function subPrivateSale(uint256 _amount) onlyOwner public {
        require(currentStage == 0);
        require(_amount > 0);
        require(stages[0].sold > _amount);

        stages[0].sold = stages[0].sold.sub(_amount);
    }

    // permission
    function setAdmin(address _newAdmin) public onlyOwner {
        require(_newAdmin != address(0x0));
        require(_newAdmin != address(this));
        require(_newAdmin != owner);

        emit AdminTransferred(admin, _newAdmin);
        admin = _newAdmin;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0));
        require(newOwner != address(this));
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }

    // constructor
    function ACATokenSale(
        address _wallet, 
        address _admin,
        uint256 _totalSupply,
        uint256 _softCap,
        uint256 _hardCap) public {
        owner = msg.sender;

        require(_admin != address(0));
        require(_wallet != address(0));

        require(_totalSupply > 0);
        require(_softCap > 0);
        require(_hardCap > _softCap);

        admin = _admin;
        wallet = _wallet;

        totalSupply = _totalSupply;
        softCap = _softCap;
        hardCap = _hardCap;

        emit TokenSaleCreated(wallet, _totalSupply);
    }

    // state related
    function setupBounty(
        uint256 _referralAmount,
        uint256 _referralRateInviter,
        uint256 _referralRateInvitee,
        uint256 _bountyAmount,
        uint256 _whitelistBonusClosingTime,
        uint256 _whitelistBonusRate,
        uint256 _whitelistBonusAmount
    ) onlyOwner public {
        
        require(_referralAmount > 0);

        require(_referralRateInviter > 0 && _referralRateInviter < 100);
        require(_referralRateInvitee > 0 && _referralRateInvitee < 100);

        require(_whitelistBonusClosingTime > now);
        require(_whitelistBonusRate > 0);
        require(_whitelistBonusAmount > _whitelistBonusRate);
        require(_bountyAmount > 0);

        referralAmount = _referralAmount;
        referralRateInviter = _referralRateInviter;
        referralRateInvitee = _referralRateInvitee;
        bountyAmount = _bountyAmount;
        whitelistBonusClosingTime = _whitelistBonusClosingTime;
        whitelistBonusRate = _whitelistBonusRate;
        whitelistBonusAmount = _whitelistBonusAmount;

        emit BountySetupDone();
    }
    function addStage(
        uint256 _openingTime, 
        uint256 _closingTime, 
        uint256 _capacity, 
        uint256 _minimumWei, 
        uint256 _maximumWei, 
        uint256 _rate) onlyOwner public {
        require(tokenSaleEnabled == false);

        // require(_openingTime > now);
        require(_closingTime > _openingTime);

        require(_capacity > 0);
        require(_capacity < hardCap);

        require(_minimumWei > 0);
        require(_maximumWei >= _minimumWei);

        require(_rate > 0);

        require(_minimumWei.mul(_rate) < _capacity);
        require(_maximumWei.mul(_rate) < _capacity);
        if ( stages.length > 0 ) {
            StageInfo memory prevStage = stages[stages.length - 1];
            require(_openingTime > prevStage.closing);
        }

        stages.push(StageInfo(_openingTime, _closingTime, _capacity, _minimumWei, _maximumWei, _rate, 0));

        emit StageAdded(_openingTime, _closingTime, _capacity, _minimumWei, _maximumWei, _rate);
    }

    function setToken(ACAToken _token) onlyOwner public {
        token = _token;
    }

    function enableTokenSale() onlyOwner public returns (bool) {
        require(stages.length > 0);

        vault = new RefundVault(wallet);

        tokenSaleEnabled = true;
        emit TokenSaleEnabled();
        return true;
    }

    function updateStage() public returns (uint256) {
        require(tokenSaleEnabled == true);
        require(currentStage < stages.length);
        require(now >= stages[currentStage].opening);

        uint256 remains = stages[currentStage].capacity.sub(stages[currentStage].sold);
        if ( now > stages[currentStage].closing ) {
            uint256 nextStage = currentStage.add(1);
            if ( remains > 0 && nextStage < stages.length ) {
                stages[nextStage].capacity = stages[nextStage].capacity.add(remains);
                remains = stages[nextStage].capacity;
            }

            currentStage = nextStage;
            emit StageUpdated(nextStage);
        }

        return remains;
    }

    function finalize() onlyOwner public {
        require(isFinalized == false);
        require(isClosed());

        finalization();
        emit Finalized();

        isFinalized = true;
    }

    function finalization() internal {
        if (isGoalReached()) {
            vault.close();
        } else {
            vault.enableRefunds();
        }

    }

    // transaction
    function () public payable {
        buyTokens(msg.sender);
    }

    function buyTokens(address _beneficiary) public payable {
        uint256 weiAmount = msg.value;

        _preValidatePurchase(_beneficiary, weiAmount);
        // calculate token amount to be created
        uint256 tokens = _getTokenAmount(weiAmount);

        // update state
        weiRaised = weiRaised.add(weiAmount);

        _processPurchase(_beneficiary, tokens);
        emit TokenPurchase(msg.sender, _beneficiary, weiAmount, tokens);

        _updatePurchasingState(_beneficiary, weiAmount);

        _forwardFunds();
        _postValidatePurchase(_beneficiary, weiAmount);
    }

    function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) {
        return _weiAmount.mul(getCurrentRate());
    }

    function _getTokenAmountWithoutBonus(uint256 _weiAmount) internal view returns (uint256) {
        return _weiAmount.mul(getRateWithoutBonus());
    }

    function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal isVerified(_beneficiary) {
        require(_beneficiary != address(0));
        require(_weiAmount != 0);

        require(tokenSaleEnabled == true);

        require(now >= stages[currentStage].opening);

        // lazy execution
        uint256 remains = updateStage();

        require(currentStage < stages.length);
        require(now >= stages[currentStage].opening && now <= stages[currentStage].closing);

        require(_weiAmount >= stages[currentStage].minimumWei);
        require(_weiAmount <= stages[currentStage].maximumWei);

        uint256 amount = _getTokenAmount(_weiAmount);

        require(remains > amount);
    }

    function _postValidatePurchase(address _beneficiary, uint256 _weiAmount) internal {
        if ( getCurrentSold() == getCurrentCapacity() ) {
            currentStage = currentStage.add(1);
            emit StageUpdated(currentStage);
        }
    }

    function _deliverTokens(address _beneficiary, uint256 _tokenAmount) internal {
        if ( isClaimable ) {
            token.transferFrom(owner, _beneficiary, _tokenAmount);
        }
        else {
            sales[_beneficiary] = sales[_beneficiary].add(_tokenAmount);
        }
    }

    function _processPurchase(address _beneficiary, uint256 _tokenAmount) internal {

        stages[currentStage].sold = stages[currentStage].sold.add(_tokenAmount);
        _deliverTokens(_beneficiary, _tokenAmount);

        uint256 weiAmount = msg.value;
        address inviter = referrals[_beneficiary];
        if ( inviter != address(0x0) && referralDone == false ) {
            uint256 baseRate = _getTokenAmountWithoutBonus(weiAmount);
            uint256 referralAmountInviter = baseRate.div(100).mul(referralRateInviter);
            uint256 referralAmountInvitee = baseRate.div(100).mul(referralRateInvitee);
            uint256 referralRemains = referralAmount.sub(referralSent);
            if ( referralRemains == 0 ) {
                referralDone = true;
            }
            else {
                if ( referralAmountInviter >= referralRemains ) {
                    referralAmountInviter = referralRemains;
                    referralAmountInvitee = 0; // priority to inviter
                    emit ReferralCapReached();
                    referralDone = true;
                }
                if ( referralDone == false && referralAmountInviter >= referralRemains ) {
                    referralAmountInvitee = referralRemains.sub(referralAmountInviter);
                    emit ReferralCapReached();
                    referralDone = true;
                }

                uint256 referralAmountTotal = referralAmountInviter.add(referralAmountInvitee);
                referralSent = referralSent.add(referralAmountTotal);

                if ( referralAmountInviter > 0 ) {
                    _deliverTokens(inviter, referralAmountInviter);
                    emit PurchaseReferral(inviter, referralAmountInviter);
                }
                if ( referralAmountInvitee > 0 ) {
                    _deliverTokens(_beneficiary, referralAmountInvitee);
                    emit PurchaseReferral(_beneficiary, referralAmountInvitee);
                }
            }
        }
    }

    function _updatePurchasingState(address _beneficiary, uint256 _weiAmount) internal {
        // optional override
    }

    function _forwardFunds() internal {
        vault.deposit.value(msg.value)(msg.sender);
    }

    // claim
    function claimToken() public claimable isVerified(msg.sender) returns (bool) {
        address beneficiary = msg.sender;
        uint256 amount = sales[beneficiary];

        emit TokenClaimed(beneficiary, amount);

        sales[beneficiary] = 0;
        return token.transferFrom(owner, beneficiary, amount);
    }

    function claimRefund() isVerified(msg.sender) public {
        require(isFinalized == true);
        require(!isGoalReached());

        vault.refund(msg.sender);
    }

    function claimBountyToken() public claimable isVerified(msg.sender) returns (bool) {
        address beneficiary = msg.sender;
        uint256 amount = bounties[beneficiary];

        emit TokenClaimed(beneficiary, amount);

        bounties[beneficiary] = 0;
        return token.transferFrom(owner, beneficiary, amount);
    }

    // bounty
    function addBounty(address _address, uint256 _amount) public onlyAdmin isVerified(_address) returns (bool) {
        require(bountyAmount.sub(bountySent) >= _amount);

        bountySent = bountySent.add(_amount);
        bounties[_address] = bounties[_address].add(_amount);
        emit BountyUpdated(_address, true, _amount);
    }
    function delBounty(address _address, uint256 _amount) public onlyAdmin isVerified(_address) returns (bool) {
        require(bounties[_address] >= _amount);
        require(_amount >= bountySent);

        bountySent = bountySent.sub(_amount);
        bounties[_address] = bounties[_address].sub(_amount);
        emit BountyUpdated(_address, false, _amount);
    }
    function getBountyAmount(address _address) public view returns (uint256) {
        return bounties[_address];
    }

    // referral
    function addReferral(address _inviter, address _invitee) public onlyAdmin isVerified(_inviter) isVerified(_invitee) returns (bool) {
        referrals[_invitee] = _inviter;
    }
    function delReferral(address _inviter, address _invitee) public onlyAdmin isVerified(_inviter) isVerified(_invitee) returns (bool) {
        delete referrals[_invitee];
    }
    function getReferral(address _address) public view returns (address) {
        return referrals[_address];
    }

    // whitelist
    function _deliverWhitelistBonus(address _beneficiary) internal {
        if ( _beneficiary == address(0x0) ) {
            return;
        }

        if ( whitelistBonus[_beneficiary] == true ) {
            return;
        }
        
        if (whitelistBonusAmount.sub(whitelistBonusSent) > whitelistBonusRate ) {
            whitelistBonus[_beneficiary] = true;

            whitelistBonusSent = whitelistBonusSent.add(whitelistBonusRate);
            bounties[_beneficiary] = bounties[_beneficiary].add(whitelistBonusRate);
            emit BountyUpdated(_beneficiary, true, whitelistBonusRate);
        }
    }
    function isAccountWhitelisted(address _beneficiary) public view returns (bool) {
        return whitelist[_beneficiary];
    }

    function addToWhitelist(address _beneficiary) external onlyAdmin {
        whitelist[_beneficiary] = true;

        if ( whitelistBonus[_beneficiary] == false && now < whitelistBonusClosingTime ) {
            _deliverWhitelistBonus(_beneficiary);
        }

        emit WhitelistUpdated(_beneficiary, true);
    }

    function addManyToWhitelist(address[] _beneficiaries) external onlyAdmin {
        uint256 i = 0;
        if ( now < whitelistBonusClosingTime ) {
            for (i = 0; i < _beneficiaries.length; i++) {
                whitelist[_beneficiaries[i]] = true;
                _deliverWhitelistBonus(_beneficiaries[i]);
            }
            return;
        }

        for (i = 0; i < _beneficiaries.length; i++) {
            whitelist[_beneficiaries[i]] = true;
        }

        emit BulkWhitelistUpdated(_beneficiaries, true);
    }

    function removeFromWhitelist(address _beneficiary) external onlyAdmin {
        whitelist[_beneficiary] = false;

        emit WhitelistUpdated(_beneficiary, false);
    }

    // kyc
    function isAccountVerified(address _beneficiary) public view returns (bool) {
        return kyclist[_beneficiary];
    }

    function setAccountVerified(address _beneficiary) external onlyAdmin {
        kyclist[_beneficiary] = true;

        emit VerificationUpdated(_beneficiary, true);
    }

    function setManyAccountsVerified(address[] _beneficiaries) external onlyAdmin {
        for (uint256 i = 0; i < _beneficiaries.length; i++) {
            kyclist[_beneficiaries[i]] = true;
        }

        emit BulkVerificationUpdated(_beneficiaries, true);
    }

    function unverifyAccount(address _beneficiary) external onlyAdmin {
        kyclist[_beneficiary] = false;

        emit VerificationUpdated(_beneficiary, false);
    }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"whitelistBonusSent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_inviter","type":"address"},{"name":"_invitee","type":"address"}],"name":"addReferral","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"setToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claimBountyToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"whitelistBonusClosingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getOpeningTimeByStage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralSent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTotalTokenSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getClosingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_claimable","type":"bool"}],"name":"setClaimable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"enableTokenSale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getReferral","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getClosingTimeByStage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimToken","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_index","type":"uint256"},{"name":"_rate","type":"uint256"}],"name":"setRate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finalize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_referralAmount","type":"uint256"},{"name":"_referralRateInviter","type":"uint256"},{"name":"_referralRateInvitee","type":"uint256"},{"name":"_bountyAmount","type":"uint256"},{"name":"_whitelistBonusClosingTime","type":"uint256"},{"name":"_whitelistBonusRate","type":"uint256"},{"name":"_whitelistBonusAmount","type":"uint256"}],"name":"setupBounty","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whitelistBonusAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"subPrivateSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_amount","type":"uint256"}],"name":"delBounty","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_inviter","type":"address"},{"name":"_invitee","type":"address"}],"name":"delReferral","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentStage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getRateWithoutBonus","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"whitelistBonusRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newAdmin","type":"address"}],"name":"setAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isClaimable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"stages","outputs":[{"name":"opening","type":"uint256"},{"name":"closing","type":"uint256"},{"name":"capacity","type":"uint256"},{"name":"minimumWei","type":"uint256"},{"name":"maximumWei","type":"uint256"},{"name":"rate","type":"uint256"},{"name":"sold","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"isAccountWhitelisted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"},{"name":"_amount","type":"uint256"}],"name":"addBounty","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"removeFromWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"isAccountVerified","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiaries","type":"address[]"}],"name":"addManyToWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isFinalized","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"softCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"setAccountVerified","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"bountySent","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenSaleEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"referrals","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentCapacity","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"claimRefund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getCapacity","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"updateStage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getBountyAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isClosed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"unverifyAccount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"sales","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bountyAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"addPrivateSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"bounties","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isGoalReached","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOpeningTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralDone","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"kyclist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralRateInviter","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"referralRateInvitee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_index","type":"uint256"},{"name":"_capacity","type":"uint256"}],"name":"setCapacity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_openingTime","type":"uint256"},{"name":"_closingTime","type":"uint256"},{"name":"_capacity","type":"uint256"},{"name":"_minimumWei","type":"uint256"},{"name":"_maximumWei","type":"uint256"},{"name":"_rate","type":"uint256"}],"name":"addStage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiaries","type":"address[]"}],"name":"setManyAccountsVerified","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"getSales","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"addToWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelistBonus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"_index","type":"uint256"},{"name":"_openingTime","type":"uint256"},{"name":"_closingTime","type":"uint256"}],"name":"setSalePeriod","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCurrentRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"admin","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hardCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_wallet","type":"address"},{"name":"_admin","type":"address"},{"name":"_totalSupply","type":"uint256"},{"name":"_softCap","type":"uint256"},{"name":"_hardCap","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousAdmin","type":"address"},{"indexed":true,"name":"newAdmin","type":"address"}],"name":"AdminTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"wallet","type":"address"},{"indexed":false,"name":"totalSupply","type":"uint256"}],"name":"TokenSaleCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"openingTime","type":"uint256"},{"indexed":false,"name":"closingTime","type":"uint256"},{"indexed":false,"name":"capacity","type":"uint256"},{"indexed":false,"name":"minimumWei","type":"uint256"},{"indexed":false,"name":"maximumWei","type":"uint256"},{"indexed":false,"name":"rate","type":"uint256"}],"name":"StageAdded","type":"event"},{"anonymous":false,"inputs":[],"name":"TokenSaleEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"flag","type":"bool"}],"name":"WhitelistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"flag","type":"bool"}],"name":"VerificationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"beneficiary","type":"address[]"},{"indexed":false,"name":"flag","type":"bool"}],"name":"BulkWhitelistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"beneficiary","type":"address[]"},{"indexed":false,"name":"flag","type":"bool"}],"name":"BulkVerificationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokenClaimed","type":"event"},{"anonymous":false,"inputs":[],"name":"Finalized","type":"event"},{"anonymous":false,"inputs":[],"name":"BountySetupDone","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"target","type":"address"},{"indexed":false,"name":"flag","type":"bool"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"BountyUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"PurchaseReferral","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"stage","type":"uint256"}],"name":"StageUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"stage","type":"uint256"}],"name":"StageCapReached","type":"event"},{"anonymous":false,"inputs":[],"name":"ReferralCapReached","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addr","type":"address"}],"name":"LogAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"value","type":"uint256"}],"name":"LogUint256","type":"event"}]

60606040526005805460ff199081169091556000600a8190556010819055601681905560178054909216909155601a819055601c55601d805461ffff1916905534156200004b57600080fd5b60405160a08062003d1c833981016040528080519190602001805191906020018051919060200180519190602001805160008054600160a060020a03191633600160a060020a0390811691909117909155909250851615159050620000af57600080fd5b600160a060020a0385161515620000c557600080fd5b60008311620000d357600080fd5b60008211620000e157600080fd5b818111620000ee57600080fd5b60018054600160a060020a03808716600160a060020a03199283161790925560028054888416921691909117908190556004859055600e849055600f839055167f481b5185767db188561146464c5ed74c16b5d1c565a5a22f09d5af9dedcd4dc28460405190815260200160405180910390a25050505050613ba680620001766000396000f300606060405260043610620003c55763ffffffff60e060020a600035041663084a40118114620003d25780630b5c3f8714620003fa5780630b9ea6c81462000436578063144fa6d7146200044c57806314aa0eaa146200046e5780631720684a14620004845780631f5c6f67146200049a5780631fb8875d14620004b35780632ecd702014620004c95780632f9cb9aa14620004df578063378c93ad14620004f557806339a13fb314620005105780633b0f0f2f14620005265780633bc578fe14620005645780634042b66f146200057d5780634451d89f146200059357806346df2ccb14620005a95780634bb278f314620005c557806351eecc2314620005db578063521eb273146200060657806356a765c4146200061c5780635776409414620006325780635830f2ea146200064b57806358f6a7db14620006645780635a93bf7114620006895780635bf5d54c14620006b15780635c06d88014620006c757806368db96a614620006dd5780636aa633b614620006f35780636bd68a8f1462000709578063704b6c02146200071f57806374478bb31462000741578063845ddcb214620007575780638907e78714620007ae578063899a1e3614620007d05780638ab1d68114620007f55780638ba209b614620008175780638c10671c14620008395780638d4e4083146200085a5780638da5cb5b1462000870578063906a26e014620008865780639075f124146200089c57806390c3229514620008be578063979cf82414620008d45780639b19251a14620008ea5780639ca423b3146200090c578063aba89198146200092e578063b5545a3c1462000944578063bcd5349f146200095a578063c062f5781462000973578063c1c35e8d1462000989578063c2b6b58c14620009ab578063c2db26fc14620009c1578063c6b9f06a14620009e3578063ccd331bf1462000a05578063cd132aad1462000a1b578063cdfbea581462000a34578063d3eb6f611462000a56578063d74635731462000a6c578063d7ea39c61462000a82578063d8b99cb21462000a98578063dbce1ff71462000aba578063dedeb3ca1462000ad0578063dee2b0581462000ae6578063df6ee6b71462000b02578063e071681d1462000b2a578063e16bd3b71462000b4b578063e43252d71462000b6d578063e6af8f0d1462000b8f578063ec8ac4d81462000bb1578063ec9723ad1462000bc7578063f2fde38b1462000be6578063f7fb07b01462000c08578063f851a4401462000c1e578063fb86a4041462000c34578063fbfa77cf1462000c4a578063fc0c546a1462000c60578063ff5977901462000c76575b620003d03362000c8f565b005b3415620003de57600080fd5b620003e862000d45565b60405190815260200160405180910390f35b34156200040657600080fd5b62000422600160a060020a036004358116906024351662000d4b565b604051901515815260200160405180910390f35b34156200044257600080fd5b620003e862000e75565b34156200045857600080fd5b620003d0600160a060020a036004351662000ea1565b34156200047a57600080fd5b6200042262000eec565b34156200049057600080fd5b620003e862001086565b3415620004a657600080fd5b620003e86004356200108c565b3415620004bf57600080fd5b620003e8620010c6565b3415620004d557600080fd5b620003e8620010cc565b3415620004eb57600080fd5b620003e862001123565b34156200050157600080fd5b620003d060043515156200114e565b34156200051c57600080fd5b62000422620011a6565b34156200053257600080fd5b62000548600160a060020a03600435166200127d565b604051600160a060020a03909116815260200160405180910390f35b34156200057057600080fd5b620003e86004356200129b565b34156200058957600080fd5b620003e8620012d5565b34156200059f57600080fd5b62000422620012db565b3415620005b557600080fd5b620003d060043560243562001456565b3415620005d157600080fd5b620003d0620014c8565b3415620005e757600080fd5b620003d060043560243560443560643560843560a43560c43562001550565b34156200061257600080fd5b6200054862001642565b34156200062857600080fd5b620003e862001651565b34156200063e57600080fd5b620003e860043562001657565b34156200065757600080fd5b620003d060043562001691565b34156200067057600080fd5b62000422600160a060020a036004351660243562001759565b34156200069557600080fd5b62000422600160a060020a0360043581169060243516620018c6565b3415620006bd57600080fd5b620003e8620019ea565b3415620006d357600080fd5b620003e8620019f0565b3415620006e957600080fd5b620003e862001a1e565b3415620006ff57600080fd5b6200042262001a24565b34156200071557600080fd5b620003e862001a2d565b34156200072b57600080fd5b620003d0600160a060020a036004351662001a33565b34156200074d57600080fd5b6200042262001b0e565b34156200076357600080fd5b6200077060043562001b1c565b60405196875260208701959095526040808701949094526060860192909252608085015260a084015260c083019190915260e0909101905180910390f35b3415620007ba57600080fd5b62000422600160a060020a036004351662001b6d565b3415620007dc57600080fd5b62000422600160a060020a036004351660243562001b8b565b34156200080157600080fd5b620003d0600160a060020a036004351662001ce9565b34156200082357600080fd5b62000422600160a060020a036004351662001d79565b34156200084557600080fd5b620003d0600480356024810191013562001d97565b34156200086657600080fd5b6200042262001f26565b34156200087c57600080fd5b6200054862001f2f565b34156200089257600080fd5b620003e862001f3e565b3415620008a857600080fd5b620003d0600160a060020a036004351662001f44565b3415620008ca57600080fd5b620003e862001fd9565b3415620008e057600080fd5b6200042262001fdf565b3415620008f657600080fd5b62000422600160a060020a036004351662001fe8565b34156200091857600080fd5b62000548600160a060020a036004351662001ffd565b34156200093a57600080fd5b620003e862002018565b34156200095057600080fd5b620003d062002043565b34156200096657600080fd5b620003e86004356200212a565b34156200097f57600080fd5b620003e862002164565b34156200099557600080fd5b620003e8600160a060020a036004351662002335565b3415620009b757600080fd5b6200042262002350565b3415620009cd57600080fd5b620003d0600160a060020a036004351662002380565b3415620009ef57600080fd5b620003e8600160a060020a03600435166200240f565b341562000a1157600080fd5b620003e862002421565b341562000a2757600080fd5b620003d060043562002427565b341562000a4057600080fd5b620003e8600160a060020a0360043516620024da565b341562000a6257600080fd5b62000422620024ec565b341562000a7857600080fd5b620003e862002502565b341562000a8e57600080fd5b620004226200252d565b341562000aa457600080fd5b62000422600160a060020a036004351662002536565b341562000ac657600080fd5b620003e86200254b565b341562000adc57600080fd5b620003e862002551565b341562000af257600080fd5b620003d060043560243562002557565b341562000b0e57600080fd5b620003d060043560243560443560643560843560a435620025c9565b341562000b3657600080fd5b620003d060048035602481019101356200282b565b341562000b5757600080fd5b620003e8600160a060020a036004351662002924565b341562000b7957600080fd5b620003d0600160a060020a03600435166200293f565b341562000b9b57600080fd5b62000422600160a060020a036004351662002a0b565b620003d0600160a060020a036004351662000c8f565b341562000bd357600080fd5b620003d060043560243560443562002a20565b341562000bf257600080fd5b620003d0600160a060020a036004351662002ac2565b341562000c1457600080fd5b620003e862002b81565b341562000c2a57600080fd5b6200054862002b95565b341562000c4057600080fd5b620003e862002ba4565b341562000c5657600080fd5b6200054862002baa565b341562000c6c57600080fd5b6200054862002bb9565b341562000c8257600080fd5b620003e860043562002bc8565b34600062000c9e838362002c02565b62000ca98262002dcd565b60105490915062000cc1908363ffffffff62002df116565b60105562000cd0838262002e0c565b82600160a060020a031633600160a060020a03167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18848460405191825260208201526040908101905180910390a362000d2a8383620030b7565b62000d34620030bb565b62000d4083836200310c565b505050565b600a5481565b6000805433600160a060020a039081169116148062000d78575060015433600160a060020a039081169116145b151562000d8457600080fd5b600160a060020a038316600090815260066020526040902054839060ff16151560011462000db157600080fd5b600160a060020a03811660009081526007602052604090205460ff16151560011462000ddc57600080fd5b600160a060020a038316600090815260066020526040902054839060ff16151560011462000e0957600080fd5b600160a060020a03811660009081526007602052604090205460ff16151560011462000e3457600080fd5b5050600160a060020a039182166000908152601260205260409020805473ffffffffffffffffffffffffffffffffffffffff19169390921692909217905590565b6000601b601c5481548110151562000e8957fe5b90600052602060002090600702016006015490505b90565b60005433600160a060020a0390811691161462000ebd57600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b601d546000908190819060ff1615156001148062000f175750601d5460ff6101009091041615156001145b151562000f2357600080fd5b62000f2d620024ec565b151562000f3957600080fd5b600160a060020a033390811660009081526006602052604090205460ff16151560011462000f6657600080fd5b600160a060020a03811660009081526007602052604090205460ff16151560011462000f9157600080fd5b33600160a060020a0381166000818152601860205260409081902054929550919350907fe42df0d9493dfd0d7f69902c895b94c190a53e8c27876a86f45e7c997d9d8f7c9084905190815260200160405180910390a2600160a060020a038084166000908152601860205260408082208290556003549154918316926323b872dd921690869086905160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156200106757600080fd5b5af115156200107557600080fd5b505050604051805194505050505090565b60095481565b601b5460009082106200109e57600080fd5b601b805483908110620010ad57fe5b9060005260206000209060070201600001549050919050565b60165481565b600080805b601b548110156200111d5762001112601b82815481101515620010f057fe5b9060005260206000209060070201600601548362002df190919063ffffffff16565b9150600101620010d1565b50919050565b6000601b601c548154811015156200113757fe5b906000526020600020906007020160010154905090565b60005433600160a060020a039081169116146200116a57600080fd5b600181151514156200118c5762001180620024ec565b15156200118c57600080fd5b601d80549115156101000261ff0019909216919091179055565b6000805433600160a060020a03908116911614620011c357600080fd5b601b5460009011620011d457600080fd5b600254600160a060020a0316620011ea620034af565b600160a060020a039091168152602001604051809103906000f08015156200121157600080fd5b6011805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556005805460ff191660011790557f887e7ccf5673eef45a5c69179950777b13841a28f0db61febac61f2b8e729de460405160405180910390a150600190565b600160a060020a039081166000908152601260205260409020541690565b601b546000908210620012ad57600080fd5b601b805483908110620012bc57fe5b9060005260206000209060070201600101549050919050565b60105481565b601d546000908190819060ff16151560011480620013065750601d5460ff6101009091041615156001145b15156200131257600080fd5b6200131c620024ec565b15156200132857600080fd5b600160a060020a033390811660009081526006602052604090205460ff1615156001146200135557600080fd5b600160a060020a03811660009081526007602052604090205460ff1615156001146200138057600080fd5b33600160a060020a0381166000818152600d60205260409081902054929550919350907fe42df0d9493dfd0d7f69902c895b94c190a53e8c27876a86f45e7c997d9d8f7c9084905190815260200160405180910390a2600160a060020a038084166000908152600d60205260408082208290556003549154918316926323b872dd921690869086905160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156200106757600080fd5b60005433600160a060020a039081169116146200147257600080fd5b601c5482116200148157600080fd5b601b5482106200149057600080fd5b600081116200149e57600080fd5b80601b83815481101515620014af57fe5b9060005260206000209060070201600501819055505050565b60005433600160a060020a03908116911614620014e457600080fd5b601d5460ff1615620014f557600080fd5b620014ff62002350565b15156200150b57600080fd5b6200151562003179565b7f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a1601d805460ff19166001179055565b60005433600160a060020a039081169116146200156c57600080fd5b600087116200157a57600080fd5b6000861180156200158b5750606486105b15156200159757600080fd5b600085118015620015a85750606485105b1515620015b457600080fd5b428311620015c157600080fd5b60008211620015cf57600080fd5b818111620015dc57600080fd5b60008411620015ea57600080fd5b60138790556014869055601585905560198490556009839055600b829055600c8190557f981375e01cb0539ab3ccafb0b225b129b3057efac5cae04b18d91903641c9ce060405160405180910390a150505050505050565b600254600160a060020a031681565b600c5481565b601b5460009082106200166957600080fd5b601b8054839081106200167857fe5b9060005260206000209060070201600501549050919050565b60005433600160a060020a03908116911614620016ad57600080fd5b601c5415620016bb57600080fd5b60008111620016c957600080fd5b80601b6000815481101515620016db57fe5b906000526020600020906007020160060154111515620016fa57600080fd5b6200173181601b60008154811015156200171057fe5b9060005260206000209060070201600601546200323090919063ffffffff16565b601b805460009081106200174157fe5b90600052602060002090600702016006018190555050565b6000805433600160a060020a039081169116148062001786575060015433600160a060020a039081169116145b15156200179257600080fd5b600160a060020a038316600090815260066020526040902054839060ff161515600114620017bf57600080fd5b600160a060020a03811660009081526007602052604090205460ff161515600114620017ea57600080fd5b600160a060020a038416600090815260186020526040902054839010156200181157600080fd5b601a548310156200182157600080fd5b601a5462001836908463ffffffff6200323016565b601a55600160a060020a03841660009081526018602052604090205462001864908463ffffffff6200323016565b600160a060020a0385166000818152601860205260408082209390935590917f3a9e9b1f8266a9262ade2d291ca7683d067f6624208ed4739f91e660e3c23e3b9190869051911515825260208201526040908101905180910390a25092915050565b6000805433600160a060020a0390811691161480620018f3575060015433600160a060020a039081169116145b1515620018ff57600080fd5b600160a060020a038316600090815260066020526040902054839060ff1615156001146200192c57600080fd5b600160a060020a03811660009081526007602052604090205460ff1615156001146200195757600080fd5b600160a060020a038316600090815260066020526040902054839060ff1615156001146200198457600080fd5b600160a060020a03811660009081526007602052604090205460ff161515600114620019af57600080fd5b5050600160a060020a039091166000908152601260205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055919050565b601c5481565b601b805460009190600019810190811062001a0757fe5b906000526020600020906007020160050154905090565b600b5481565b60055460ff1690565b60135481565b60005433600160a060020a0390811691161462001a4f57600080fd5b600160a060020a038116151562001a6557600080fd5b30600160a060020a031681600160a060020a03161415151562001a8757600080fd5b600054600160a060020a038281169116141562001aa357600080fd5b600154600160a060020a0380831691167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a36001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b601d54610100900460ff1681565b601b80548290811062001b2b57fe5b90600052602060002090600702016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b600160a060020a031660009081526006602052604090205460ff1690565b6000805433600160a060020a039081169116148062001bb8575060015433600160a060020a039081169116145b151562001bc457600080fd5b600160a060020a038316600090815260066020526040902054839060ff16151560011462001bf157600080fd5b600160a060020a03811660009081526007602052604090205460ff16151560011462001c1c57600080fd5b8262001c36601a546019546200323090919063ffffffff16565b101562001c4257600080fd5b601a5462001c57908463ffffffff62002df116565b601a55600160a060020a03841660009081526018602052604090205462001c85908463ffffffff62002df116565b600160a060020a0385166000818152601860205260409081902092909255907f3a9e9b1f8266a9262ade2d291ca7683d067f6624208ed4739f91e660e3c23e3b90600190869051911515825260208201526040908101905180910390a25092915050565b60005433600160a060020a039081169116148062001d15575060015433600160a060020a039081169116145b151562001d2157600080fd5b600160a060020a038116600081815260066020526040808220805460ff191690557ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d919051901515815260200160405180910390a250565b600160a060020a031660009081526007602052604090205460ff1690565b6000805433600160a060020a039081169116148062001dc4575060015433600160a060020a039081169116145b151562001dd057600080fd5b6000905060095442101562001e66575060005b8181101562001e605760016006600085858581811062001dff57fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff191691151591909117905562001e5783838381811062001e4157fe5b90506020020135600160a060020a031662003243565b60010162001de3565b62000d40565b5060005b8181101562001ec05760016006600085858581811062001e8657fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff191691151591909117905560010162001e6a565b7fc1d1947210ee563a9e6fda88e7360ad167cd7dc61a01d093688956e2220a49f8838360016040518080602001831515151581526020018281038252858582818152602001925060200280828437820191505094505050505060405180910390a1505050565b601d5460ff1681565b600054600160a060020a031681565b600e5481565b60005433600160a060020a039081169116148062001f70575060015433600160a060020a039081169116145b151562001f7c57600080fd5b600160a060020a03811660008181526007602052604090819020805460ff191660019081179091557e255232b9c7545c95a579e3b4ed6b224bcadd569379c69d9715d500ed93da389151901515815260200160405180910390a250565b601a5481565b60055460ff1681565b60066020526000908152604090205460ff1681565b601260205260009081526040902054600160a060020a031681565b6000601b601c548154811015156200202c57fe5b906000526020600020906007020160020154905090565b600160a060020a033390811660009081526006602052604090205460ff1615156001146200207057600080fd5b600160a060020a03811660009081526007602052604090205460ff1615156001146200209b57600080fd5b601d5460ff161515600114620020b057600080fd5b620020ba620024ec565b15620020c557600080fd5b601154600160a060020a031663fa89401a3360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156200211657600080fd5b5af115156200212457600080fd5b50505050565b601b5460009082106200213c57600080fd5b601b8054839081106200214b57fe5b9060005260206000209060070201600201549050919050565b6005546000908190819060ff1615156001146200218057600080fd5b601b54601c54106200219157600080fd5b601b601c54815481101515620021a357fe5b6000918252602090912060079091020154421015620021c157600080fd5b6200221c601b601c54815481101515620021d757fe5b906000526020600020906007020160060154601b601c54815481101515620021fb57fe5b9060005260206000209060070201600201546200323090919063ffffffff16565b9150601b601c548154811015156200223057fe5b9060005260206000209060070201600101544211156200111d57601c546200226090600163ffffffff62002df116565b9050600082118015620022745750601b5481105b15620022f757620022b082601b838154811015156200228f57fe5b90600052602060002090600702016002015462002df190919063ffffffff16565b601b805483908110620022bf57fe5b6000918252602090912060026007909202010155601b805482908110620022e257fe5b90600052602060002090600702016002015491505b601c8190557f34cf54504fd39ab670a54acbb37f686c5bd25e6eedfa39889cba899d360bc7d98160405190815260200160405180910390a150919050565b600160a060020a031660009081526018602052604090205490565b601b80546000919060001981019081106200236757fe5b9060005260206000209060070201600101544211905090565b60005433600160a060020a0390811691161480620023ac575060015433600160a060020a039081169116145b1515620023b857600080fd5b600160a060020a038116600081815260076020526040808220805460ff191690557e255232b9c7545c95a579e3b4ed6b224bcadd569379c69d9715d500ed93da38919051901515815260200160405180910390a250565b600d6020526000908152604090205481565b60195481565b60005433600160a060020a039081169116146200244357600080fd5b601c54156200245157600080fd5b600081116200245f57600080fd5b62002497601b60008154811015156200247457fe5b906000526020600020906007020160060154601b6000815481101515620021fb57fe5b8110620024a357600080fd5b6200173181601b6000815481101515620024b957fe5b90600052602060002090600702016006015462002df190919063ffffffff16565b60186020526000908152604090205481565b6000600e54620024fb620010cc565b1015905090565b6000601b601c548154811015156200251657fe5b906000526020600020906007020160000154905090565b60175460ff1681565b60076020526000908152604090205460ff1681565b60145481565b60155481565b60005433600160a060020a039081169116146200257357600080fd5b601c5482116200258257600080fd5b601b5482106200259157600080fd5b600081116200259f57600080fd5b80601b83815481101515620025b057fe5b9060005260206000209060070201600201819055505050565b620025d3620034c0565b60005433600160a060020a03908116911614620025ef57600080fd5b60055460ff16156200260057600080fd5b8686116200260d57600080fd5b600085116200261b57600080fd5b600f5485106200262a57600080fd5b600084116200263857600080fd5b838310156200264657600080fd5b600082116200265457600080fd5b8462002667858463ffffffff6200337516565b106200267257600080fd5b8462002685848463ffffffff6200337516565b106200269057600080fd5b601b5460009011156200271f57601b80546000198101908110620026b057fe5b906000526020600020906007020160e06040519081016040908152825482526001830154602083019081526002840154918301919091526003830154606083015260048301546080830152600583015460a083015260069092015460c082015291505187116200271f57600080fd5b601b805460018101620027338382620034fe565b9160005260206000209060070201600060e0604051908101604052808b81526020018a815260200189815260200188815260200187815260200186815260200160008152509091909150600082015181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c082015181600601555050507f5858d9b130a07462c8ba8f5a091c7463cdb0d5dfc3414467a51f9c8d3d68357987878787878760405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a150505050505050565b6000805433600160a060020a039081169116148062002858575060015433600160a060020a039081169116145b15156200286457600080fd5b5060005b81811015620028be576001600760008585858181106200288457fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff191691151591909117905560010162002868565b7f3eb50e579d2144f480a8551725cd5c7a8613fef3814f38daa4ee54154c9bddb6838360016040518080602001831515151581526020018281038252858582818152602001925060200280828437820191505094505050505060405180910390a1505050565b600160a060020a03166000908152600d602052604090205490565b60005433600160a060020a03908116911614806200296b575060015433600160a060020a039081169116145b15156200297757600080fd5b600160a060020a0381166000908152600660209081526040808320805460ff19166001179055600890915290205460ff16158015620029b7575060095442105b15620029c857620029c88162003243565b80600160a060020a03167ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d6001604051901515815260200160405180910390a250565b60086020526000908152604090205460ff1681565b60005433600160a060020a0390811691161462002a3c57600080fd5b42821162002a4957600080fd5b81811162002a5657600080fd5b601c54831162002a6557600080fd5b601b54831062002a7457600080fd5b81601b8481548110151562002a8557fe5b6000918252602090912060079091020155601b80548291908590811062002aa857fe5b906000526020600020906007020160010181905550505050565b60005433600160a060020a0390811691161462002ade57600080fd5b600160a060020a038116151562002af457600080fd5b30600160a060020a031681600160a060020a03161415151562002b1657600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000601b601c5481548110151562001a0757fe5b600154600160a060020a031681565b600f5481565b601154600160a060020a031681565b600354600160a060020a031681565b601b54600090821062002bda57600080fd5b601b80548390811062002be957fe5b9060005260206000209060070201600601549050919050565b600160a060020a0382166000908152600660205260408120548190849060ff16151560011462002c3157600080fd5b600160a060020a03811660009081526007602052604090205460ff16151560011462002c5c57600080fd5b600160a060020a038516151562002c7257600080fd5b83151562002c7f57600080fd5b60055460ff16151560011462002c9457600080fd5b601b601c5481548110151562002ca657fe5b600091825260209091206007909102015442101562002cc457600080fd5b62002cce62002164565b601b54601c54919450901062002ce357600080fd5b601b601c5481548110151562002cf557fe5b906000526020600020906007020160000154421015801562002d3a5750601b601c5481548110151562002d2457fe5b9060005260206000209060070201600101544211155b151562002d4657600080fd5b601b601c5481548110151562002d5857fe5b906000526020600020906007020160030154841015151562002d7957600080fd5b601b601c5481548110151562002d8b57fe5b906000526020600020906007020160040154841115151562002dac57600080fd5b62002db78462002dcd565b915081831162002dc657600080fd5b5050505050565b600062002deb62002ddd62002b81565b839063ffffffff6200337516565b92915050565b60008282018381101562002e0157fe5b8091505b5092915050565b600080600080600080600062002e2e88601b601c54815481101515620024b957fe5b601b601c5481548110151562002e4057fe5b90600052602060002090600702016006018190555062002e618989620033a4565b600160a060020a03808a16600090815260126020526040902054349850169550851580159062002e94575060175460ff16155b15620030ac5762002ea58762003487565b60145490955062002ed09062002ec387606463ffffffff6200349716565b9063ffffffff6200337516565b60155490945062002eee9062002ec387606463ffffffff6200349716565b925062002f096016546013546200323090919063ffffffff16565b915081151562002f26576017805460ff19166001179055620030ac565b81841062002f6f57819350600092507f85ffe6a98fec596b0fbb1de18a071ba2ed4a7e51673575fbea30fb657bdf551960405160405180910390a16017805460ff191660011790555b60175460ff1615801562002f835750818410155b1562002fd75762002f9b828563ffffffff6200323016565b92507f85ffe6a98fec596b0fbb1de18a071ba2ed4a7e51673575fbea30fb657bdf551960405160405180910390a16017805460ff191660011790555b62002fe9848463ffffffff62002df116565b60165490915062003001908263ffffffff62002df116565b601655600084111562003058576200301a8685620033a4565b85600160a060020a03167f5d99c7882f16e240169547a9215180521502d94f149258e0aabaf56904b6141b8560405190815260200160405180910390a25b6000831115620030ac576200306e8984620033a4565b88600160a060020a03167f5d99c7882f16e240169547a9215180521502d94f149258e0aabaf56904b6141b8460405190815260200160405180910390a25b505050505050505050565b5050565b601154600160a060020a031663f340fa01343360405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016000604051808303818588803b15156200211657600080fd5b6200311662002018565b6200312062000e75565b1415620030b757601c546200313d90600163ffffffff62002df116565b601c8190557f34cf54504fd39ab670a54acbb37f686c5bd25e6eedfa39889cba899d360bc7d99060405190815260200160405180910390a15050565b62003183620024ec565b15620031e057601154600160a060020a03166343d726d66040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515620031c957600080fd5b5af11515620031d757600080fd5b5050506200322e565b601154600160a060020a0316638c52dc416040518163ffffffff1660e060020a028152600401600060405180830381600087803b15156200322057600080fd5b5af1151562000d4057600080fd5b565b6000828211156200323d57fe5b50900390565b600160a060020a03811615156200325a5762003372565b600160a060020a03811660009081526008602052604090205460ff16151560011415620032875762003372565b600b54600a54600c54620032a19163ffffffff6200323016565b11156200337257600160a060020a0381166000908152600860205260409020805460ff19166001179055600b54600a54620032e29163ffffffff62002df116565b600a55600b54600160a060020a038216600090815260186020526040902054620033129163ffffffff62002df116565b600160a060020a0382166000818152601860205260409081902092909255600b5490917f3a9e9b1f8266a9262ade2d291ca7683d067f6624208ed4739f91e660e3c23e3b9160019151911515825260208201526040908101905180910390a25b50565b6000808315156200338a576000915062002e05565b508282028284828115156200339b57fe5b041462002e0157fe5b601d54610100900460ff16156200343f57600354600054600160a060020a03918216916323b872dd9116848460405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156200342057600080fd5b5af115156200342e57600080fd5b5050506040518051905050620030b7565b600160a060020a0382166000908152600d60205260409020546200346a908263ffffffff62002df116565b600160a060020a0383166000908152600d60205260409020555050565b600062002deb62002ddd620019f0565b6000808284811515620034a657fe5b04949350505050565b60405161060c806200356f83390190565b60e060405190810160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b81548183558181151162000d405760008381526020902062000d409162000e9e9160079182028101918502015b808211156200356a576000808255600182018190556002820181905560038201819055600482018190556005820181905560068201556007016200352b565b509056006060604052341561000f57600080fd5b60405160208061060c8339810160405280805160008054600160a060020a03191633600160a060020a039081169190911790915590925082161515905061005557600080fd5b60028054600160a060020a031916600160a060020a03929092169190911760a060020a60ff021916905561057e8061008e6000396000f3006060604052600436106100985763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166343d726d6811461009d578063521eb273146100b25780638c52dc41146100e15780638da5cb5b146100f4578063c19d93fb14610107578063cb13cddb1461013e578063f2fde38b1461016f578063f340fa011461018e578063fa89401a146101a2575b600080fd5b34156100a857600080fd5b6100b06101c1565b005b34156100bd57600080fd5b6100c561029c565b604051600160a060020a03909116815260200160405180910390f35b34156100ec57600080fd5b6100b06102ab565b34156100ff57600080fd5b6100c561033c565b341561011257600080fd5b61011a61034b565b6040518082600281111561012a57fe5b60ff16815260200191505060405180910390f35b341561014957600080fd5b61015d600160a060020a036004351661035b565b60405190815260200160405180910390f35b341561017a57600080fd5b6100b0600160a060020a036004351661036d565b6100b0600160a060020a0360043516610408565b34156101ad57600080fd5b6100b0600160a060020a036004351661048c565b60005433600160a060020a039081169116146101dc57600080fd5b60006002805460a060020a900460ff16908111156101f657fe5b1461020057600080fd5b6002805474ff00000000000000000000000000000000000000001916740200000000000000000000000000000000000000001790557f1cdde67b72a90f19919ac732a437ac2f7a10fc128d28c2a6e525d89ce5cd9d3a60405160405180910390a1600254600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561029a57600080fd5b565b600254600160a060020a031681565b60005433600160a060020a039081169116146102c657600080fd5b60006002805460a060020a900460ff16908111156102e057fe5b146102ea57600080fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790557f599d8e5a83cffb867d051598c4d70e805d59802d8081c1c7d6dffc5b6aca2b8960405160405180910390a1565b600054600160a060020a031681565b60025460a060020a900460ff1681565b60016020526000908152604090205481565b60005433600160a060020a0390811691161461038857600080fd5b600160a060020a038116151561039d57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005433600160a060020a0390811691161461042357600080fd5b60006002805460a060020a900460ff169081111561043d57fe5b1461044757600080fd5b600160a060020a038116600090815260016020526040902054610470903463ffffffff61053c16565b600160a060020a03909116600090815260016020526040902055565b600060016002805460a060020a900460ff16908111156104a857fe5b146104b257600080fd5b50600160a060020a038116600081815260016020526040808220805492905590919082156108fc0290839051600060405180830381858888f1935050505015156104fb57600080fd5b81600160a060020a03167fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d06518260405190815260200160405180910390a25050565b60008282018381101561054b57fe5b93925050505600a165627a7a723058208cdf4fd7df9bdb872f723d0284f76c6ac5a0f24a615d3beff4691b74ad5d2b760029a165627a7a7230582016d217918c55148b163dc21d318b63165da2b927c4157abe3c1e9ec1d30bff5b002900000000000000000000000048694ba1f112b98ec471d55719d9d00a323aa4400000000000000000000000000609ade280d4f7c416f68015f36b78582c2abbaf000000000000000000000000000000000000000006765c793fa10079d000000000000000000000000000000000000000000000000052b7d2dcc80cd2e40000000000000000000000000000000000000000000000033b2e3c9fd0803ce8000000

Deployed Bytecode

0x606060405260043610620003c55763ffffffff60e060020a600035041663084a40118114620003d25780630b5c3f8714620003fa5780630b9ea6c81462000436578063144fa6d7146200044c57806314aa0eaa146200046e5780631720684a14620004845780631f5c6f67146200049a5780631fb8875d14620004b35780632ecd702014620004c95780632f9cb9aa14620004df578063378c93ad14620004f557806339a13fb314620005105780633b0f0f2f14620005265780633bc578fe14620005645780634042b66f146200057d5780634451d89f146200059357806346df2ccb14620005a95780634bb278f314620005c557806351eecc2314620005db578063521eb273146200060657806356a765c4146200061c5780635776409414620006325780635830f2ea146200064b57806358f6a7db14620006645780635a93bf7114620006895780635bf5d54c14620006b15780635c06d88014620006c757806368db96a614620006dd5780636aa633b614620006f35780636bd68a8f1462000709578063704b6c02146200071f57806374478bb31462000741578063845ddcb214620007575780638907e78714620007ae578063899a1e3614620007d05780638ab1d68114620007f55780638ba209b614620008175780638c10671c14620008395780638d4e4083146200085a5780638da5cb5b1462000870578063906a26e014620008865780639075f124146200089c57806390c3229514620008be578063979cf82414620008d45780639b19251a14620008ea5780639ca423b3146200090c578063aba89198146200092e578063b5545a3c1462000944578063bcd5349f146200095a578063c062f5781462000973578063c1c35e8d1462000989578063c2b6b58c14620009ab578063c2db26fc14620009c1578063c6b9f06a14620009e3578063ccd331bf1462000a05578063cd132aad1462000a1b578063cdfbea581462000a34578063d3eb6f611462000a56578063d74635731462000a6c578063d7ea39c61462000a82578063d8b99cb21462000a98578063dbce1ff71462000aba578063dedeb3ca1462000ad0578063dee2b0581462000ae6578063df6ee6b71462000b02578063e071681d1462000b2a578063e16bd3b71462000b4b578063e43252d71462000b6d578063e6af8f0d1462000b8f578063ec8ac4d81462000bb1578063ec9723ad1462000bc7578063f2fde38b1462000be6578063f7fb07b01462000c08578063f851a4401462000c1e578063fb86a4041462000c34578063fbfa77cf1462000c4a578063fc0c546a1462000c60578063ff5977901462000c76575b620003d03362000c8f565b005b3415620003de57600080fd5b620003e862000d45565b60405190815260200160405180910390f35b34156200040657600080fd5b62000422600160a060020a036004358116906024351662000d4b565b604051901515815260200160405180910390f35b34156200044257600080fd5b620003e862000e75565b34156200045857600080fd5b620003d0600160a060020a036004351662000ea1565b34156200047a57600080fd5b6200042262000eec565b34156200049057600080fd5b620003e862001086565b3415620004a657600080fd5b620003e86004356200108c565b3415620004bf57600080fd5b620003e8620010c6565b3415620004d557600080fd5b620003e8620010cc565b3415620004eb57600080fd5b620003e862001123565b34156200050157600080fd5b620003d060043515156200114e565b34156200051c57600080fd5b62000422620011a6565b34156200053257600080fd5b62000548600160a060020a03600435166200127d565b604051600160a060020a03909116815260200160405180910390f35b34156200057057600080fd5b620003e86004356200129b565b34156200058957600080fd5b620003e8620012d5565b34156200059f57600080fd5b62000422620012db565b3415620005b557600080fd5b620003d060043560243562001456565b3415620005d157600080fd5b620003d0620014c8565b3415620005e757600080fd5b620003d060043560243560443560643560843560a43560c43562001550565b34156200061257600080fd5b6200054862001642565b34156200062857600080fd5b620003e862001651565b34156200063e57600080fd5b620003e860043562001657565b34156200065757600080fd5b620003d060043562001691565b34156200067057600080fd5b62000422600160a060020a036004351660243562001759565b34156200069557600080fd5b62000422600160a060020a0360043581169060243516620018c6565b3415620006bd57600080fd5b620003e8620019ea565b3415620006d357600080fd5b620003e8620019f0565b3415620006e957600080fd5b620003e862001a1e565b3415620006ff57600080fd5b6200042262001a24565b34156200071557600080fd5b620003e862001a2d565b34156200072b57600080fd5b620003d0600160a060020a036004351662001a33565b34156200074d57600080fd5b6200042262001b0e565b34156200076357600080fd5b6200077060043562001b1c565b60405196875260208701959095526040808701949094526060860192909252608085015260a084015260c083019190915260e0909101905180910390f35b3415620007ba57600080fd5b62000422600160a060020a036004351662001b6d565b3415620007dc57600080fd5b62000422600160a060020a036004351660243562001b8b565b34156200080157600080fd5b620003d0600160a060020a036004351662001ce9565b34156200082357600080fd5b62000422600160a060020a036004351662001d79565b34156200084557600080fd5b620003d0600480356024810191013562001d97565b34156200086657600080fd5b6200042262001f26565b34156200087c57600080fd5b6200054862001f2f565b34156200089257600080fd5b620003e862001f3e565b3415620008a857600080fd5b620003d0600160a060020a036004351662001f44565b3415620008ca57600080fd5b620003e862001fd9565b3415620008e057600080fd5b6200042262001fdf565b3415620008f657600080fd5b62000422600160a060020a036004351662001fe8565b34156200091857600080fd5b62000548600160a060020a036004351662001ffd565b34156200093a57600080fd5b620003e862002018565b34156200095057600080fd5b620003d062002043565b34156200096657600080fd5b620003e86004356200212a565b34156200097f57600080fd5b620003e862002164565b34156200099557600080fd5b620003e8600160a060020a036004351662002335565b3415620009b757600080fd5b6200042262002350565b3415620009cd57600080fd5b620003d0600160a060020a036004351662002380565b3415620009ef57600080fd5b620003e8600160a060020a03600435166200240f565b341562000a1157600080fd5b620003e862002421565b341562000a2757600080fd5b620003d060043562002427565b341562000a4057600080fd5b620003e8600160a060020a0360043516620024da565b341562000a6257600080fd5b62000422620024ec565b341562000a7857600080fd5b620003e862002502565b341562000a8e57600080fd5b620004226200252d565b341562000aa457600080fd5b62000422600160a060020a036004351662002536565b341562000ac657600080fd5b620003e86200254b565b341562000adc57600080fd5b620003e862002551565b341562000af257600080fd5b620003d060043560243562002557565b341562000b0e57600080fd5b620003d060043560243560443560643560843560a435620025c9565b341562000b3657600080fd5b620003d060048035602481019101356200282b565b341562000b5757600080fd5b620003e8600160a060020a036004351662002924565b341562000b7957600080fd5b620003d0600160a060020a03600435166200293f565b341562000b9b57600080fd5b62000422600160a060020a036004351662002a0b565b620003d0600160a060020a036004351662000c8f565b341562000bd357600080fd5b620003d060043560243560443562002a20565b341562000bf257600080fd5b620003d0600160a060020a036004351662002ac2565b341562000c1457600080fd5b620003e862002b81565b341562000c2a57600080fd5b6200054862002b95565b341562000c4057600080fd5b620003e862002ba4565b341562000c5657600080fd5b6200054862002baa565b341562000c6c57600080fd5b6200054862002bb9565b341562000c8257600080fd5b620003e860043562002bc8565b34600062000c9e838362002c02565b62000ca98262002dcd565b60105490915062000cc1908363ffffffff62002df116565b60105562000cd0838262002e0c565b82600160a060020a031633600160a060020a03167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18848460405191825260208201526040908101905180910390a362000d2a8383620030b7565b62000d34620030bb565b62000d4083836200310c565b505050565b600a5481565b6000805433600160a060020a039081169116148062000d78575060015433600160a060020a039081169116145b151562000d8457600080fd5b600160a060020a038316600090815260066020526040902054839060ff16151560011462000db157600080fd5b600160a060020a03811660009081526007602052604090205460ff16151560011462000ddc57600080fd5b600160a060020a038316600090815260066020526040902054839060ff16151560011462000e0957600080fd5b600160a060020a03811660009081526007602052604090205460ff16151560011462000e3457600080fd5b5050600160a060020a039182166000908152601260205260409020805473ffffffffffffffffffffffffffffffffffffffff19169390921692909217905590565b6000601b601c5481548110151562000e8957fe5b90600052602060002090600702016006015490505b90565b60005433600160a060020a0390811691161462000ebd57600080fd5b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b601d546000908190819060ff1615156001148062000f175750601d5460ff6101009091041615156001145b151562000f2357600080fd5b62000f2d620024ec565b151562000f3957600080fd5b600160a060020a033390811660009081526006602052604090205460ff16151560011462000f6657600080fd5b600160a060020a03811660009081526007602052604090205460ff16151560011462000f9157600080fd5b33600160a060020a0381166000818152601860205260409081902054929550919350907fe42df0d9493dfd0d7f69902c895b94c190a53e8c27876a86f45e7c997d9d8f7c9084905190815260200160405180910390a2600160a060020a038084166000908152601860205260408082208290556003549154918316926323b872dd921690869086905160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156200106757600080fd5b5af115156200107557600080fd5b505050604051805194505050505090565b60095481565b601b5460009082106200109e57600080fd5b601b805483908110620010ad57fe5b9060005260206000209060070201600001549050919050565b60165481565b600080805b601b548110156200111d5762001112601b82815481101515620010f057fe5b9060005260206000209060070201600601548362002df190919063ffffffff16565b9150600101620010d1565b50919050565b6000601b601c548154811015156200113757fe5b906000526020600020906007020160010154905090565b60005433600160a060020a039081169116146200116a57600080fd5b600181151514156200118c5762001180620024ec565b15156200118c57600080fd5b601d80549115156101000261ff0019909216919091179055565b6000805433600160a060020a03908116911614620011c357600080fd5b601b5460009011620011d457600080fd5b600254600160a060020a0316620011ea620034af565b600160a060020a039091168152602001604051809103906000f08015156200121157600080fd5b6011805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03929092169190911790556005805460ff191660011790557f887e7ccf5673eef45a5c69179950777b13841a28f0db61febac61f2b8e729de460405160405180910390a150600190565b600160a060020a039081166000908152601260205260409020541690565b601b546000908210620012ad57600080fd5b601b805483908110620012bc57fe5b9060005260206000209060070201600101549050919050565b60105481565b601d546000908190819060ff16151560011480620013065750601d5460ff6101009091041615156001145b15156200131257600080fd5b6200131c620024ec565b15156200132857600080fd5b600160a060020a033390811660009081526006602052604090205460ff1615156001146200135557600080fd5b600160a060020a03811660009081526007602052604090205460ff1615156001146200138057600080fd5b33600160a060020a0381166000818152600d60205260409081902054929550919350907fe42df0d9493dfd0d7f69902c895b94c190a53e8c27876a86f45e7c997d9d8f7c9084905190815260200160405180910390a2600160a060020a038084166000908152600d60205260408082208290556003549154918316926323b872dd921690869086905160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156200106757600080fd5b60005433600160a060020a039081169116146200147257600080fd5b601c5482116200148157600080fd5b601b5482106200149057600080fd5b600081116200149e57600080fd5b80601b83815481101515620014af57fe5b9060005260206000209060070201600501819055505050565b60005433600160a060020a03908116911614620014e457600080fd5b601d5460ff1615620014f557600080fd5b620014ff62002350565b15156200150b57600080fd5b6200151562003179565b7f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a1601d805460ff19166001179055565b60005433600160a060020a039081169116146200156c57600080fd5b600087116200157a57600080fd5b6000861180156200158b5750606486105b15156200159757600080fd5b600085118015620015a85750606485105b1515620015b457600080fd5b428311620015c157600080fd5b60008211620015cf57600080fd5b818111620015dc57600080fd5b60008411620015ea57600080fd5b60138790556014869055601585905560198490556009839055600b829055600c8190557f981375e01cb0539ab3ccafb0b225b129b3057efac5cae04b18d91903641c9ce060405160405180910390a150505050505050565b600254600160a060020a031681565b600c5481565b601b5460009082106200166957600080fd5b601b8054839081106200167857fe5b9060005260206000209060070201600501549050919050565b60005433600160a060020a03908116911614620016ad57600080fd5b601c5415620016bb57600080fd5b60008111620016c957600080fd5b80601b6000815481101515620016db57fe5b906000526020600020906007020160060154111515620016fa57600080fd5b6200173181601b60008154811015156200171057fe5b9060005260206000209060070201600601546200323090919063ffffffff16565b601b805460009081106200174157fe5b90600052602060002090600702016006018190555050565b6000805433600160a060020a039081169116148062001786575060015433600160a060020a039081169116145b15156200179257600080fd5b600160a060020a038316600090815260066020526040902054839060ff161515600114620017bf57600080fd5b600160a060020a03811660009081526007602052604090205460ff161515600114620017ea57600080fd5b600160a060020a038416600090815260186020526040902054839010156200181157600080fd5b601a548310156200182157600080fd5b601a5462001836908463ffffffff6200323016565b601a55600160a060020a03841660009081526018602052604090205462001864908463ffffffff6200323016565b600160a060020a0385166000818152601860205260408082209390935590917f3a9e9b1f8266a9262ade2d291ca7683d067f6624208ed4739f91e660e3c23e3b9190869051911515825260208201526040908101905180910390a25092915050565b6000805433600160a060020a0390811691161480620018f3575060015433600160a060020a039081169116145b1515620018ff57600080fd5b600160a060020a038316600090815260066020526040902054839060ff1615156001146200192c57600080fd5b600160a060020a03811660009081526007602052604090205460ff1615156001146200195757600080fd5b600160a060020a038316600090815260066020526040902054839060ff1615156001146200198457600080fd5b600160a060020a03811660009081526007602052604090205460ff161515600114620019af57600080fd5b5050600160a060020a039091166000908152601260205260409020805473ffffffffffffffffffffffffffffffffffffffff19169055919050565b601c5481565b601b805460009190600019810190811062001a0757fe5b906000526020600020906007020160050154905090565b600b5481565b60055460ff1690565b60135481565b60005433600160a060020a0390811691161462001a4f57600080fd5b600160a060020a038116151562001a6557600080fd5b30600160a060020a031681600160a060020a03161415151562001a8757600080fd5b600054600160a060020a038281169116141562001aa357600080fd5b600154600160a060020a0380831691167ff8ccb027dfcd135e000e9d45e6cc2d662578a8825d4c45b5e32e0adf67e79ec660405160405180910390a36001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b601d54610100900460ff1681565b601b80548290811062001b2b57fe5b90600052602060002090600702016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154905087565b600160a060020a031660009081526006602052604090205460ff1690565b6000805433600160a060020a039081169116148062001bb8575060015433600160a060020a039081169116145b151562001bc457600080fd5b600160a060020a038316600090815260066020526040902054839060ff16151560011462001bf157600080fd5b600160a060020a03811660009081526007602052604090205460ff16151560011462001c1c57600080fd5b8262001c36601a546019546200323090919063ffffffff16565b101562001c4257600080fd5b601a5462001c57908463ffffffff62002df116565b601a55600160a060020a03841660009081526018602052604090205462001c85908463ffffffff62002df116565b600160a060020a0385166000818152601860205260409081902092909255907f3a9e9b1f8266a9262ade2d291ca7683d067f6624208ed4739f91e660e3c23e3b90600190869051911515825260208201526040908101905180910390a25092915050565b60005433600160a060020a039081169116148062001d15575060015433600160a060020a039081169116145b151562001d2157600080fd5b600160a060020a038116600081815260066020526040808220805460ff191690557ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d919051901515815260200160405180910390a250565b600160a060020a031660009081526007602052604090205460ff1690565b6000805433600160a060020a039081169116148062001dc4575060015433600160a060020a039081169116145b151562001dd057600080fd5b6000905060095442101562001e66575060005b8181101562001e605760016006600085858581811062001dff57fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff191691151591909117905562001e5783838381811062001e4157fe5b90506020020135600160a060020a031662003243565b60010162001de3565b62000d40565b5060005b8181101562001ec05760016006600085858581811062001e8657fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff191691151591909117905560010162001e6a565b7fc1d1947210ee563a9e6fda88e7360ad167cd7dc61a01d093688956e2220a49f8838360016040518080602001831515151581526020018281038252858582818152602001925060200280828437820191505094505050505060405180910390a1505050565b601d5460ff1681565b600054600160a060020a031681565b600e5481565b60005433600160a060020a039081169116148062001f70575060015433600160a060020a039081169116145b151562001f7c57600080fd5b600160a060020a03811660008181526007602052604090819020805460ff191660019081179091557e255232b9c7545c95a579e3b4ed6b224bcadd569379c69d9715d500ed93da389151901515815260200160405180910390a250565b601a5481565b60055460ff1681565b60066020526000908152604090205460ff1681565b601260205260009081526040902054600160a060020a031681565b6000601b601c548154811015156200202c57fe5b906000526020600020906007020160020154905090565b600160a060020a033390811660009081526006602052604090205460ff1615156001146200207057600080fd5b600160a060020a03811660009081526007602052604090205460ff1615156001146200209b57600080fd5b601d5460ff161515600114620020b057600080fd5b620020ba620024ec565b15620020c557600080fd5b601154600160a060020a031663fa89401a3360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b15156200211657600080fd5b5af115156200212457600080fd5b50505050565b601b5460009082106200213c57600080fd5b601b8054839081106200214b57fe5b9060005260206000209060070201600201549050919050565b6005546000908190819060ff1615156001146200218057600080fd5b601b54601c54106200219157600080fd5b601b601c54815481101515620021a357fe5b6000918252602090912060079091020154421015620021c157600080fd5b6200221c601b601c54815481101515620021d757fe5b906000526020600020906007020160060154601b601c54815481101515620021fb57fe5b9060005260206000209060070201600201546200323090919063ffffffff16565b9150601b601c548154811015156200223057fe5b9060005260206000209060070201600101544211156200111d57601c546200226090600163ffffffff62002df116565b9050600082118015620022745750601b5481105b15620022f757620022b082601b838154811015156200228f57fe5b90600052602060002090600702016002015462002df190919063ffffffff16565b601b805483908110620022bf57fe5b6000918252602090912060026007909202010155601b805482908110620022e257fe5b90600052602060002090600702016002015491505b601c8190557f34cf54504fd39ab670a54acbb37f686c5bd25e6eedfa39889cba899d360bc7d98160405190815260200160405180910390a150919050565b600160a060020a031660009081526018602052604090205490565b601b80546000919060001981019081106200236757fe5b9060005260206000209060070201600101544211905090565b60005433600160a060020a0390811691161480620023ac575060015433600160a060020a039081169116145b1515620023b857600080fd5b600160a060020a038116600081815260076020526040808220805460ff191690557e255232b9c7545c95a579e3b4ed6b224bcadd569379c69d9715d500ed93da38919051901515815260200160405180910390a250565b600d6020526000908152604090205481565b60195481565b60005433600160a060020a039081169116146200244357600080fd5b601c54156200245157600080fd5b600081116200245f57600080fd5b62002497601b60008154811015156200247457fe5b906000526020600020906007020160060154601b6000815481101515620021fb57fe5b8110620024a357600080fd5b6200173181601b6000815481101515620024b957fe5b90600052602060002090600702016006015462002df190919063ffffffff16565b60186020526000908152604090205481565b6000600e54620024fb620010cc565b1015905090565b6000601b601c548154811015156200251657fe5b906000526020600020906007020160000154905090565b60175460ff1681565b60076020526000908152604090205460ff1681565b60145481565b60155481565b60005433600160a060020a039081169116146200257357600080fd5b601c5482116200258257600080fd5b601b5482106200259157600080fd5b600081116200259f57600080fd5b80601b83815481101515620025b057fe5b9060005260206000209060070201600201819055505050565b620025d3620034c0565b60005433600160a060020a03908116911614620025ef57600080fd5b60055460ff16156200260057600080fd5b8686116200260d57600080fd5b600085116200261b57600080fd5b600f5485106200262a57600080fd5b600084116200263857600080fd5b838310156200264657600080fd5b600082116200265457600080fd5b8462002667858463ffffffff6200337516565b106200267257600080fd5b8462002685848463ffffffff6200337516565b106200269057600080fd5b601b5460009011156200271f57601b80546000198101908110620026b057fe5b906000526020600020906007020160e06040519081016040908152825482526001830154602083019081526002840154918301919091526003830154606083015260048301546080830152600583015460a083015260069092015460c082015291505187116200271f57600080fd5b601b805460018101620027338382620034fe565b9160005260206000209060070201600060e0604051908101604052808b81526020018a815260200189815260200188815260200187815260200186815260200160008152509091909150600082015181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c082015181600601555050507f5858d9b130a07462c8ba8f5a091c7463cdb0d5dfc3414467a51f9c8d3d68357987878787878760405180878152602001868152602001858152602001848152602001838152602001828152602001965050505050505060405180910390a150505050505050565b6000805433600160a060020a039081169116148062002858575060015433600160a060020a039081169116145b15156200286457600080fd5b5060005b81811015620028be576001600760008585858181106200288457fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff191691151591909117905560010162002868565b7f3eb50e579d2144f480a8551725cd5c7a8613fef3814f38daa4ee54154c9bddb6838360016040518080602001831515151581526020018281038252858582818152602001925060200280828437820191505094505050505060405180910390a1505050565b600160a060020a03166000908152600d602052604090205490565b60005433600160a060020a03908116911614806200296b575060015433600160a060020a039081169116145b15156200297757600080fd5b600160a060020a0381166000908152600660209081526040808320805460ff19166001179055600890915290205460ff16158015620029b7575060095442105b15620029c857620029c88162003243565b80600160a060020a03167ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d6001604051901515815260200160405180910390a250565b60086020526000908152604090205460ff1681565b60005433600160a060020a0390811691161462002a3c57600080fd5b42821162002a4957600080fd5b81811162002a5657600080fd5b601c54831162002a6557600080fd5b601b54831062002a7457600080fd5b81601b8481548110151562002a8557fe5b6000918252602090912060079091020155601b80548291908590811062002aa857fe5b906000526020600020906007020160010181905550505050565b60005433600160a060020a0390811691161462002ade57600080fd5b600160a060020a038116151562002af457600080fd5b30600160a060020a031681600160a060020a03161415151562002b1657600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000601b601c5481548110151562001a0757fe5b600154600160a060020a031681565b600f5481565b601154600160a060020a031681565b600354600160a060020a031681565b601b54600090821062002bda57600080fd5b601b80548390811062002be957fe5b9060005260206000209060070201600601549050919050565b600160a060020a0382166000908152600660205260408120548190849060ff16151560011462002c3157600080fd5b600160a060020a03811660009081526007602052604090205460ff16151560011462002c5c57600080fd5b600160a060020a038516151562002c7257600080fd5b83151562002c7f57600080fd5b60055460ff16151560011462002c9457600080fd5b601b601c5481548110151562002ca657fe5b600091825260209091206007909102015442101562002cc457600080fd5b62002cce62002164565b601b54601c54919450901062002ce357600080fd5b601b601c5481548110151562002cf557fe5b906000526020600020906007020160000154421015801562002d3a5750601b601c5481548110151562002d2457fe5b9060005260206000209060070201600101544211155b151562002d4657600080fd5b601b601c5481548110151562002d5857fe5b906000526020600020906007020160030154841015151562002d7957600080fd5b601b601c5481548110151562002d8b57fe5b906000526020600020906007020160040154841115151562002dac57600080fd5b62002db78462002dcd565b915081831162002dc657600080fd5b5050505050565b600062002deb62002ddd62002b81565b839063ffffffff6200337516565b92915050565b60008282018381101562002e0157fe5b8091505b5092915050565b600080600080600080600062002e2e88601b601c54815481101515620024b957fe5b601b601c5481548110151562002e4057fe5b90600052602060002090600702016006018190555062002e618989620033a4565b600160a060020a03808a16600090815260126020526040902054349850169550851580159062002e94575060175460ff16155b15620030ac5762002ea58762003487565b60145490955062002ed09062002ec387606463ffffffff6200349716565b9063ffffffff6200337516565b60155490945062002eee9062002ec387606463ffffffff6200349716565b925062002f096016546013546200323090919063ffffffff16565b915081151562002f26576017805460ff19166001179055620030ac565b81841062002f6f57819350600092507f85ffe6a98fec596b0fbb1de18a071ba2ed4a7e51673575fbea30fb657bdf551960405160405180910390a16017805460ff191660011790555b60175460ff1615801562002f835750818410155b1562002fd75762002f9b828563ffffffff6200323016565b92507f85ffe6a98fec596b0fbb1de18a071ba2ed4a7e51673575fbea30fb657bdf551960405160405180910390a16017805460ff191660011790555b62002fe9848463ffffffff62002df116565b60165490915062003001908263ffffffff62002df116565b601655600084111562003058576200301a8685620033a4565b85600160a060020a03167f5d99c7882f16e240169547a9215180521502d94f149258e0aabaf56904b6141b8560405190815260200160405180910390a25b6000831115620030ac576200306e8984620033a4565b88600160a060020a03167f5d99c7882f16e240169547a9215180521502d94f149258e0aabaf56904b6141b8460405190815260200160405180910390a25b505050505050505050565b5050565b601154600160a060020a031663f340fa01343360405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016000604051808303818588803b15156200211657600080fd5b6200311662002018565b6200312062000e75565b1415620030b757601c546200313d90600163ffffffff62002df116565b601c8190557f34cf54504fd39ab670a54acbb37f686c5bd25e6eedfa39889cba899d360bc7d99060405190815260200160405180910390a15050565b62003183620024ec565b15620031e057601154600160a060020a03166343d726d66040518163ffffffff1660e060020a028152600401600060405180830381600087803b1515620031c957600080fd5b5af11515620031d757600080fd5b5050506200322e565b601154600160a060020a0316638c52dc416040518163ffffffff1660e060020a028152600401600060405180830381600087803b15156200322057600080fd5b5af1151562000d4057600080fd5b565b6000828211156200323d57fe5b50900390565b600160a060020a03811615156200325a5762003372565b600160a060020a03811660009081526008602052604090205460ff16151560011415620032875762003372565b600b54600a54600c54620032a19163ffffffff6200323016565b11156200337257600160a060020a0381166000908152600860205260409020805460ff19166001179055600b54600a54620032e29163ffffffff62002df116565b600a55600b54600160a060020a038216600090815260186020526040902054620033129163ffffffff62002df116565b600160a060020a0382166000818152601860205260409081902092909255600b5490917f3a9e9b1f8266a9262ade2d291ca7683d067f6624208ed4739f91e660e3c23e3b9160019151911515825260208201526040908101905180910390a25b50565b6000808315156200338a576000915062002e05565b508282028284828115156200339b57fe5b041462002e0157fe5b601d54610100900460ff16156200343f57600354600054600160a060020a03918216916323b872dd9116848460405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156200342057600080fd5b5af115156200342e57600080fd5b5050506040518051905050620030b7565b600160a060020a0382166000908152600d60205260409020546200346a908263ffffffff62002df116565b600160a060020a0383166000908152600d60205260409020555050565b600062002deb62002ddd620019f0565b6000808284811515620034a657fe5b04949350505050565b60405161060c806200356f83390190565b60e060405190810160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b81548183558181151162000d405760008381526020902062000d409162000e9e9160079182028101918502015b808211156200356a576000808255600182018190556002820181905560038201819055600482018190556005820181905560068201556007016200352b565b509056006060604052341561000f57600080fd5b60405160208061060c8339810160405280805160008054600160a060020a03191633600160a060020a039081169190911790915590925082161515905061005557600080fd5b60028054600160a060020a031916600160a060020a03929092169190911760a060020a60ff021916905561057e8061008e6000396000f3006060604052600436106100985763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166343d726d6811461009d578063521eb273146100b25780638c52dc41146100e15780638da5cb5b146100f4578063c19d93fb14610107578063cb13cddb1461013e578063f2fde38b1461016f578063f340fa011461018e578063fa89401a146101a2575b600080fd5b34156100a857600080fd5b6100b06101c1565b005b34156100bd57600080fd5b6100c561029c565b604051600160a060020a03909116815260200160405180910390f35b34156100ec57600080fd5b6100b06102ab565b34156100ff57600080fd5b6100c561033c565b341561011257600080fd5b61011a61034b565b6040518082600281111561012a57fe5b60ff16815260200191505060405180910390f35b341561014957600080fd5b61015d600160a060020a036004351661035b565b60405190815260200160405180910390f35b341561017a57600080fd5b6100b0600160a060020a036004351661036d565b6100b0600160a060020a0360043516610408565b34156101ad57600080fd5b6100b0600160a060020a036004351661048c565b60005433600160a060020a039081169116146101dc57600080fd5b60006002805460a060020a900460ff16908111156101f657fe5b1461020057600080fd5b6002805474ff00000000000000000000000000000000000000001916740200000000000000000000000000000000000000001790557f1cdde67b72a90f19919ac732a437ac2f7a10fc128d28c2a6e525d89ce5cd9d3a60405160405180910390a1600254600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561029a57600080fd5b565b600254600160a060020a031681565b60005433600160a060020a039081169116146102c657600080fd5b60006002805460a060020a900460ff16908111156102e057fe5b146102ea57600080fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790557f599d8e5a83cffb867d051598c4d70e805d59802d8081c1c7d6dffc5b6aca2b8960405160405180910390a1565b600054600160a060020a031681565b60025460a060020a900460ff1681565b60016020526000908152604090205481565b60005433600160a060020a0390811691161461038857600080fd5b600160a060020a038116151561039d57600080fd5b600054600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b60005433600160a060020a0390811691161461042357600080fd5b60006002805460a060020a900460ff169081111561043d57fe5b1461044757600080fd5b600160a060020a038116600090815260016020526040902054610470903463ffffffff61053c16565b600160a060020a03909116600090815260016020526040902055565b600060016002805460a060020a900460ff16908111156104a857fe5b146104b257600080fd5b50600160a060020a038116600081815260016020526040808220805492905590919082156108fc0290839051600060405180830381858888f1935050505015156104fb57600080fd5b81600160a060020a03167fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d06518260405190815260200160405180910390a25050565b60008282018381101561054b57fe5b93925050505600a165627a7a723058208cdf4fd7df9bdb872f723d0284f76c6ac5a0f24a615d3beff4691b74ad5d2b760029a165627a7a7230582016d217918c55148b163dc21d318b63165da2b927c4157abe3c1e9ec1d30bff5b0029

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

00000000000000000000000048694ba1f112b98ec471d55719d9d00a323aa4400000000000000000000000000609ade280d4f7c416f68015f36b78582c2abbaf000000000000000000000000000000000000000006765c793fa10079d000000000000000000000000000000000000000000000000052b7d2dcc80cd2e40000000000000000000000000000000000000000000000033b2e3c9fd0803ce8000000

-----Decoded View---------------
Arg [0] : _wallet (address): 0x48694bA1f112b98Ec471D55719D9D00A323aa440
Arg [1] : _admin (address): 0x0609ade280d4f7c416f68015f36B78582C2aBBaf
Arg [2] : _totalSupply (uint256): 2000000000000000000000000000
Arg [3] : _softCap (uint256): 100000000000000000000000000
Arg [4] : _hardCap (uint256): 1000000000000000000000000000

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 00000000000000000000000048694ba1f112b98ec471d55719d9d00a323aa440
Arg [1] : 0000000000000000000000000609ade280d4f7c416f68015f36b78582c2abbaf
Arg [2] : 000000000000000000000000000000000000000006765c793fa10079d0000000
Arg [3] : 00000000000000000000000000000000000000000052b7d2dcc80cd2e4000000
Arg [4] : 0000000000000000000000000000000000000000033b2e3c9fd0803ce8000000


Swarm Source

bzzr://16d217918c55148b163dc21d318b63165da2b927c4157abe3c1e9ec1d30bff5b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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