ETH Price: $3,914.12 (+4.96%)

Contract

0x230c2a140e758087f7107dd31943C5C03B819e55
 
Transaction Hash
Method
Block
From
To
Transfer138284742021-12-18 10:00:281082 days ago1639821628IN
Cointed.com: CTD Token
0 ETH0.0016095446.64541755
Transfer138282382021-12-18 9:06:281083 days ago1639818388IN
Cointed.com: CTD Token
0 ETH0.0026878252.07137311
Transfer92008672020-01-02 12:11:271798 days ago1577967087IN
Cointed.com: CTD Token
0 ETH0.000077022
Transfer90971062019-12-12 23:52:111819 days ago1576194731IN
Cointed.com: CTD Token
0 ETH0.000047022
Transfer90969572019-12-12 23:16:481819 days ago1576192608IN
Cointed.com: CTD Token
0 ETH0.000101692.64
Transfer82390352019-07-28 12:09:271956 days ago1564315767IN
Cointed.com: CTD Token
0 ETH0.000037731
Transfer79946552019-06-20 10:53:561994 days ago1561028036IN
Cointed.com: CTD Token
0 ETH0.0006226116.5
Transfer77899452019-05-19 10:25:472026 days ago1558261547IN
Cointed.com: CTD Token
0 ETH0.000188355
Transfer76445362019-04-26 18:14:402049 days ago1556302480IN
Cointed.com: CTD Token
0 ETH0.0017357646
Transfer75953012019-04-19 1:48:052057 days ago1555638485IN
Cointed.com: CTD Token
0 ETH0.0006047616
Approve75404652019-04-10 12:51:482065 days ago1554900708IN
Cointed.com: CTD Token
0 ETH0.000187084
Transfer75399322019-04-10 10:55:262065 days ago1554893726IN
Cointed.com: CTD Token
0 ETH0.00031646
Approve72163862019-02-13 19:24:042121 days ago1550085844IN
Cointed.com: CTD Token
0 ETH0.0004677110
Transfer72127822019-02-12 22:47:382122 days ago1550011658IN
Cointed.com: CTD Token
0 ETH0.000259926.90000025
Approve71275662019-01-26 5:28:212140 days ago1548480501IN
Cointed.com: CTD Token
0 ETH0.000187084
Transfer70850112019-01-18 3:24:302148 days ago1547781870IN
Cointed.com: CTD Token
0 ETH0.0037356699
Transfer70136322019-01-05 9:00:212161 days ago1546678821IN
Cointed.com: CTD Token
0 ETH0.0012074832
Transfer70094962019-01-04 15:02:402161 days ago1546614160IN
Cointed.com: CTD Token
0 ETH0.000226026
Transfer69884382018-12-31 23:13:412165 days ago1546298021IN
Cointed.com: CTD Token
0 ETH0.0011755
Transfer69884272018-12-31 23:11:092165 days ago1546297869IN
Cointed.com: CTD Token
0 ETH0.000188675
Transfer69753892018-12-29 18:39:232167 days ago1546108763IN
Cointed.com: CTD Token
0 ETH0.0008664123
Transfer69442692018-12-24 12:31:202172 days ago1545654680IN
Cointed.com: CTD Token
0 ETH0.0015470941
Transfer66045562018-10-29 9:29:182229 days ago1540805358IN
Cointed.com: CTD Token
0 ETH0.000150934
Transfer66045352018-10-29 9:23:192229 days ago1540804999IN
Cointed.com: CTD Token
0 ETH0.0009534941
Transfer65885132018-10-26 18:28:532231 days ago1540578533IN
Cointed.com: CTD Token
0 ETH0.0011320230
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
51737972018-02-28 22:43:372471 days ago1519857817
Cointed.com: CTD Token
1.1 ETH
51737852018-02-28 22:39:512471 days ago1519857591
Cointed.com: CTD Token
0.2627 ETH
51737482018-02-28 22:31:132471 days ago1519857073
Cointed.com: CTD Token
10 ETH
51737312018-02-28 22:27:042471 days ago1519856824
Cointed.com: CTD Token
0.5 ETH
51736662018-02-28 22:09:272471 days ago1519855767
Cointed.com: CTD Token
3 ETH
51736502018-02-28 22:05:132471 days ago1519855513
Cointed.com: CTD Token
0.38721182 ETH
51736442018-02-28 22:02:482471 days ago1519855368
Cointed.com: CTD Token
0.333 ETH
51736362018-02-28 22:00:102471 days ago1519855210
Cointed.com: CTD Token
0.15 ETH
51736282018-02-28 21:58:242471 days ago1519855104
Cointed.com: CTD Token
0.183 ETH
51736272018-02-28 21:58:202471 days ago1519855100
Cointed.com: CTD Token
0.22073606 ETH
51735962018-02-28 21:50:422471 days ago1519854642
Cointed.com: CTD Token
0.26 ETH
51735302018-02-28 21:31:012471 days ago1519853461
Cointed.com: CTD Token
1.40087116 ETH
51734922018-02-28 21:20:072471 days ago1519852807
Cointed.com: CTD Token
2.685 ETH
51734622018-02-28 21:12:322471 days ago1519852352
Cointed.com: CTD Token
0.019 ETH
51734582018-02-28 21:11:282471 days ago1519852288
Cointed.com: CTD Token
0.42940738 ETH
51734542018-02-28 21:10:492471 days ago1519852249
Cointed.com: CTD Token
0.13 ETH
51734472018-02-28 21:09:212471 days ago1519852161
Cointed.com: CTD Token
0.2 ETH
51734422018-02-28 21:08:172471 days ago1519852097
Cointed.com: CTD Token
0.005 ETH
51734002018-02-28 20:57:512471 days ago1519851471
Cointed.com: CTD Token
2 ETH
51733242018-02-28 20:38:232471 days ago1519850303
Cointed.com: CTD Token
0.55886313 ETH
51732842018-02-28 20:28:282471 days ago1519849708
Cointed.com: CTD Token
0.65 ETH
51732482018-02-28 20:19:152471 days ago1519849155
Cointed.com: CTD Token
0.3146531 ETH
51731692018-02-28 20:00:572471 days ago1519848057
Cointed.com: CTD Token
0.003 ETH
51730702018-02-28 19:36:592471 days ago1519846619
Cointed.com: CTD Token
0.047 ETH
51730682018-02-28 19:36:132471 days ago1519846573
Cointed.com: CTD Token
3 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CtdToken

Compiler Version
v0.4.15+commit.bbb8e64f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2017-10-19
*/

pragma solidity 0.4.15;

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

  function div(uint256 a, uint256 b) internal constant returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal constant returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

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


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


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


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


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

}

/**
 * @title PausableOnce
 * @dev The PausableOnce contract provides an option for the "pauseMaster"
 * to pause once the transactions for two weeks.
 *
 */

contract PausableOnce is Ownable {

    /** Address that can start the pause */
    address public pauseMaster;

    uint constant internal PAUSE_DURATION = 14 days;
    uint64 public pauseEnd = 0;

    event Paused();

    /**
     * @dev Set the pauseMaster (callable by the owner only).
     * @param _pauseMaster The address of the pauseMaster
     */
    function setPauseMaster(address _pauseMaster) onlyOwner external returns (bool success) {
        require(_pauseMaster != address(0));
        pauseMaster = _pauseMaster;
        return true;
    }

    /**
     * @dev Start the pause (by the pauseMaster, ONCE only).
     */
    function pause() onlyPauseMaster external returns (bool success) {
        require(pauseEnd == 0);
        pauseEnd = uint64(now + PAUSE_DURATION);
        Paused();
        return true;
    }

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

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

}

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  uint256 public totalSupply;
  function balanceOf(address who) public constant returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

/**
 * @title Basic token
 * @dev Basic version of StandardToken, with no allowances.
 */
contract BasicToken is ERC20Basic {
  using SafeMath for uint256;

  mapping(address => uint256) balances;

  /**
  * @dev transfer token for a specified address
  * @param _to The address to transfer to.
  * @param _value The amount to be transferred.
  */
  function transfer(address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));

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

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

}

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public constant 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);
}

/**
 * @title Standard ERC20 token
 *
 * @dev Implementation of the basic standard token.
 * @dev https://github.com/ethereum/EIPs/issues/20
 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
 */
contract StandardToken is ERC20, BasicToken {

  mapping (address => mapping (address => uint256)) allowed;


  /**
   * @dev Transfer tokens from one address to another
   * @param _from address The address which you want to send tokens from
   * @param _to address The address which you want to transfer to
   * @param _value uint256 the amount of tokens to be transferred
   */
  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
    require(_to != address(0));

    uint256 _allowance = allowed[_from][msg.sender];

    // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
    // require (_value <= _allowance);

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

  /**
   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
   *
   * Beware that changing an allowance with this method brings the risk that someone may use both the old
   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   * @param _spender The address which will spend the funds.
   * @param _value The amount of tokens to be spent.
   */
  function approve(address _spender, uint256 _value) public returns (bool) {
    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
  }

  /**
   * @dev Function to check the amount of tokens that an owner allowed to a spender.
   * @param _owner address The address which owns the funds.
   * @param _spender address The address which will spend the funds.
   * @return A uint256 specifying the amount of tokens still available for the spender.
   */
  function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {
    return allowed[_owner][_spender];
  }

  /**
   * approve should be called when allowed[_spender] == 0. To increment
   * allowed value is better to use this function to avoid 2 calls (and wait until
   * the first transaction is mined)
   * From MonolithDAO Token.sol
   */
  function increaseApproval (address _spender, uint _addedValue)
    returns (bool success) {
    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
    Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
    return true;
  }

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

}

/**
* @title Upgrade agent interface
*/
contract InterfaceUpgradeAgent {

    uint32 public revision;
    uint256 public originalSupply;

    /**
     * @dev Reissue the tokens onto the new contract revision.
     * @param holder Holder (owner) of the tokens
     * @param tokenQty How many tokens to be issued
     */
    function upgradeFrom(address holder, uint256 tokenQty) public;
}

/**
 * @title UpgradableToken
 * @dev The UpgradableToken contract provides an option of upgrading the tokens to a new revision.
 * The "upgradeMaster" may propose the upgrade. Token holders can opt-in amount of tokens to upgrade.
 */

contract UpgradableToken is StandardToken, Ownable {

    using SafeMath for uint256;

    uint32 public REVISION;

    /** Address that can set the upgrade agent thus enabling the upgrade. */
    address public upgradeMaster = address(0);

    /** Address of the contract that issues the new revision tokens. */
    address public upgradeAgent = address(0);

    /** How many tokens are upgraded. */
    uint256 public totalUpgraded;

    event Upgrade(address indexed _from, uint256 _value);
    event UpgradeEnabled(address agent);

    /**
     * @dev Set the upgrade master.
     * parameter _upgradeMaster Upgrade master
     */
    function setUpgradeMaster(address _upgradeMaster) onlyOwner external {
        require(_upgradeMaster != address(0));
        upgradeMaster = _upgradeMaster;
    }

    /**
     * @dev Set the upgrade agent (once only) thus enabling the upgrade.
     * @param _upgradeAgent Upgrade agent contract address
     * @param _revision Unique ID that agent contract must return on ".revision()"
     */
    function setUpgradeAgent(address _upgradeAgent, uint32 _revision)
        onlyUpgradeMaster whenUpgradeDisabled external
    {
        require((_upgradeAgent != address(0)) && (_revision != 0));

        InterfaceUpgradeAgent agent = InterfaceUpgradeAgent(_upgradeAgent);

        require(agent.revision() == _revision);
        require(agent.originalSupply() == totalSupply);

        upgradeAgent = _upgradeAgent;
        UpgradeEnabled(_upgradeAgent);
    }

    /**
     * @dev Upgrade tokens to the new revision.
     * @param value How many tokens to be upgraded
     */
    function upgrade(uint256 value) whenUpgradeEnabled external {
        require(value > 0);

        uint256 balance = balances[msg.sender];
        require(balance > 0);

        // Take tokens out from the old contract
        balances[msg.sender] = balance.sub(value);
        totalSupply = totalSupply.sub(value);
        totalUpgraded = totalUpgraded.add(value);
        // Issue the new revision tokens
        InterfaceUpgradeAgent agent = InterfaceUpgradeAgent(upgradeAgent);
        agent.upgradeFrom(msg.sender, value);

        Upgrade(msg.sender, value);
    }

    /**
    * @dev Modifier to make a function callable only when the upgrade is enabled.
    */
    modifier whenUpgradeEnabled() {
        require(upgradeAgent != address(0));
        _;
    }

    /**
    * @dev Modifier to make a function callable only when the upgrade is impossible.
    */
    modifier whenUpgradeDisabled() {
        require(upgradeAgent == address(0));
        _;
    }

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

}

/**
 * @title Withdrawable
 * @dev The Withdrawable contract provides a mechanism of withdrawal(s).
 * "Withdrawals" are permissions for specified addresses to pull (withdraw) payments from the contract balance.
 */

contract Withdrawable {

    mapping (address => uint) pendingWithdrawals;

    /*
     * @dev Logged upon a granted allowance to the specified drawer on withdrawal.
     * @param drawer The address of the drawer.
     * @param weiAmount The value in Wei which may be withdrawn.
     */
    event Withdrawal(address indexed drawer, uint256 weiAmount);

    /*
     * @dev Logged upon a withdrawn value.
     * @param drawer The address of the drawer.
     * @param weiAmount The value in Wei which has been withdrawn.
     */
    event Withdrawn(address indexed drawer, uint256 weiAmount);

    /*
     * @dev Allow the specified drawer to withdraw the specified value from the contract balance.
     * @param drawer The address of the drawer.
     * @param weiAmount The value in Wei allowed to withdraw.
     * @return success
     */
    function setWithdrawal(address drawer, uint256 weiAmount) internal returns (bool success) {
        if ((drawer != address(0)) && (weiAmount > 0)) {
            uint256 oldBalance = pendingWithdrawals[drawer];
            uint256 newBalance = oldBalance + weiAmount;
            if (newBalance > oldBalance) {
                pendingWithdrawals[drawer] = newBalance;
                Withdrawal(drawer, weiAmount);
                return true;
            }
        }
        return false;
    }

    /*
     * @dev Withdraw the allowed value from the contract balance.
     * @return success
     */
    function withdraw() public returns (bool success) {
        uint256 weiAmount = pendingWithdrawals[msg.sender];
        require(weiAmount > 0);

        pendingWithdrawals[msg.sender] = 0;
        msg.sender.transfer(weiAmount);
        Withdrawn(msg.sender, weiAmount);
        return true;
    }

}

/**
 * @title Cointed Token
 * @dev Cointed Token (CTD) and Token Sale (ICO).
 */

contract CtdToken is UpgradableToken, PausableOnce, Withdrawable {

    using SafeMath for uint256;

    string public constant name = "Cointed Token";
    string public constant symbol = "CTD";
    /** Number of "Atom" in 1 CTD (1 CTD = 1x10^decimals Atom) */
    uint8  public constant decimals = 18;

    /** Holder of bounty tokens */
    address public bounty;

    /** Limit (in Atom) issued, inclusive owner's and bounty shares */
    uint256 constant internal TOTAL_LIMIT   = 650000000 * (10 ** uint256(decimals));
    /** Limit (in Atom) for Pre-ICO Phases A, incl. owner's and bounty shares */
    uint256 constant internal PRE_ICO_LIMIT = 130000000 * (10 ** uint256(decimals));

    /**
    * ICO Phases.
    *
    * - PreStart: tokens are not yet sold/issued
    * - PreIcoA:  new tokens sold/issued at the premium price
    * - PreIcoB:  new tokens sold/issued at the discounted price
    * - MainIco   new tokens sold/issued at the regular price
    * - AfterIco: new tokens can not be not be sold/issued any longer
    */
    enum Phases {PreStart, PreIcoA, PreIcoB, MainIco, AfterIco}

    uint64 constant internal PRE_ICO_DURATION = 745 hours;
    uint64 constant internal ICO_DURATION = 2423 hours + 59 minutes;
    uint64 constant internal RETURN_WEI_PAUSE = 30 days;

    // Main ICO rate in CTD(s) per 1 ETH:
    uint256 constant internal TO_SENDER_RATE   = 1000;
    uint256 constant internal TO_OWNER_RATE    =  263;
    uint256 constant internal TO_BOUNTY_RATE   =   52;
    uint256 constant internal TOTAL_RATE   =   TO_SENDER_RATE + TO_OWNER_RATE + TO_BOUNTY_RATE;
    // Pre-ICO Phase A rate
    uint256 constant internal TO_SENDER_RATE_A = 1150;
    uint256 constant internal TO_OWNER_RATE_A  =  304;
    uint256 constant internal TO_BOUNTY_RATE_A =   61;
    uint256 constant internal TOTAL_RATE_A   =   TO_SENDER_RATE_A + TO_OWNER_RATE_A + TO_BOUNTY_RATE_A;
    // Pre-ICO Phase B rate
    uint256 constant internal TO_SENDER_RATE_B = 1100;
    uint256 constant internal TO_OWNER_RATE_B  =  292;
    uint256 constant internal TO_BOUNTY_RATE_B =   58;
    uint256 constant internal TOTAL_RATE_B   =   TO_SENDER_RATE_B + TO_OWNER_RATE_B + TO_BOUNTY_RATE_B;

    // Award in Wei(s) to a successful initiator of a Phase shift
    uint256 constant internal PRE_OPENING_AWARD = 100 * (10 ** uint256(15));
    uint256 constant internal ICO_OPENING_AWARD = 200 * (10 ** uint256(15));
    uint256 constant internal ICO_CLOSING_AWARD = 500 * (10 ** uint256(15));

    struct Rates {
        uint256 toSender;
        uint256 toOwner;
        uint256 toBounty;
        uint256 total;
    }

    event NewTokens(uint256 amount);
    event NewFunds(address funder, uint256 value);
    event NewPhase(Phases phase);

    // current Phase
    Phases public phase = Phases.PreStart;

    // Timestamps limiting duration of Phases, in seconds since Unix epoch.
    uint64 public preIcoOpeningTime;  // when Pre-ICO Phase A starts
    uint64 public icoOpeningTime;     // when Main ICO starts (if not sold out before)
    uint64 public closingTime;        // by when the ICO campaign finishes in any way
    uint64 public returnAllowedTime;  // when owner may withdraw Eth from contract, if any

    uint256 public totalProceeds;

    /*
     * @dev constructor
     * @param _preIcoOpeningTime Timestamp when the Pre-ICO (Phase A) shall start.
     * msg.value MUST be at least the sum of awards.
     */
    function CtdToken(uint64 _preIcoOpeningTime) payable {
        require(_preIcoOpeningTime > now);

        preIcoOpeningTime = _preIcoOpeningTime;
        icoOpeningTime = preIcoOpeningTime + PRE_ICO_DURATION;
        closingTime = icoOpeningTime + ICO_DURATION;
    }

    /*
     * @dev Fallback function delegates the request to create().
     */
    function () payable external {
        create();
    }

    /**
     * @dev Set the address of the holder of bounty tokens.
     * @param _bounty The address of the bounty token holder.
     * @return success/failure
     */
    function setBounty(address _bounty) onlyOwner external returns (bool success) {
        require(_bounty != address(0));
        bounty = _bounty;
        return true;
    }

    /**
     * @dev Mint tokens and add them to the balance of the message.sender.
     * Additional tokens are minted and added to the owner and the bounty balances.
     * @return success/failure
     */
    function create() payable whenNotClosed whenNotPaused public returns (bool success) {
        require(msg.value > 0);
        require(now >= preIcoOpeningTime);

        Phases oldPhase = phase;
        uint256 weiToParticipate = msg.value;
        uint256 overpaidWei;

        adjustPhaseBasedOnTime();

        if (phase != Phases.AfterIco) {

            Rates memory rates = getRates();
            uint256 newTokens = weiToParticipate.mul(rates.total);
            uint256 requestedSupply = totalSupply.add(newTokens);

            uint256 oversoldTokens = computeOversoldAndAdjustPhase(requestedSupply);
            overpaidWei = (oversoldTokens > 0) ? oversoldTokens.div(rates.total) : 0;

            if (overpaidWei > 0) {
                weiToParticipate = msg.value.sub(overpaidWei);
                newTokens = weiToParticipate.mul(rates.total);
                requestedSupply = totalSupply.add(newTokens);
            }

            // "emission" of new tokens
            totalSupply = requestedSupply;
            balances[msg.sender] = balances[msg.sender].add(weiToParticipate.mul(rates.toSender));
            balances[owner] = balances[owner].add(weiToParticipate.mul(rates.toOwner));
            balances[bounty] = balances[bounty].add(weiToParticipate.mul(rates.toBounty));

            // ETH transfers
            totalProceeds = totalProceeds.add(weiToParticipate);
            owner.transfer(weiToParticipate);
            if (overpaidWei > 0) {
                setWithdrawal(msg.sender, overpaidWei);
            }

            // Logging
            NewTokens(newTokens);
            NewFunds(msg.sender, weiToParticipate);

        } else {
            setWithdrawal(msg.sender, msg.value);
        }

        if (phase != oldPhase) {
            logShiftAndBookAward();
        }

        return true;
    }

    /**
     * @dev Send the value (ethers) that the contract holds to the owner address.
     */
    function returnWei() onlyOwner whenClosed afterWithdrawPause external {
        owner.transfer(this.balance);
    }

    function adjustPhaseBasedOnTime() internal {

        if (now >= closingTime) {
            if (phase != Phases.AfterIco) {
                phase = Phases.AfterIco;
            }
        } else if (now >= icoOpeningTime) {
            if (phase != Phases.MainIco) {
                phase = Phases.MainIco;
            }
        } else if (phase == Phases.PreStart) {
            setDefaultParamsIfNeeded();
            phase = Phases.PreIcoA;
        }
    }

    function setDefaultParamsIfNeeded() internal {
        if (bounty == address(0)) {
            bounty = owner;
        }
        if (upgradeMaster == address(0)) {
            upgradeMaster = owner;
        }
        if (pauseMaster == address(0)) {
            pauseMaster = owner;
        }
    }

    function computeOversoldAndAdjustPhase(uint256 newTotalSupply) internal returns (uint256 oversoldTokens) {

        if ((phase == Phases.PreIcoA) &&
            (newTotalSupply >= PRE_ICO_LIMIT)) {
            phase = Phases.PreIcoB;
            oversoldTokens = newTotalSupply.sub(PRE_ICO_LIMIT);

        } else if (newTotalSupply >= TOTAL_LIMIT) {
            phase = Phases.AfterIco;
            oversoldTokens = newTotalSupply.sub(TOTAL_LIMIT);

        } else {
            oversoldTokens = 0;
        }

        return oversoldTokens;
    }

    function getRates() internal returns (Rates rates) {

        if (phase == Phases.PreIcoA) {
            rates.toSender = TO_SENDER_RATE_A;
            rates.toOwner = TO_OWNER_RATE_A;
            rates.toBounty = TO_BOUNTY_RATE_A;
            rates.total = TOTAL_RATE_A;
        } else if (phase == Phases.PreIcoB) {
            rates.toSender = TO_SENDER_RATE_B;
            rates.toOwner = TO_OWNER_RATE_B;
            rates.toBounty = TO_BOUNTY_RATE_B;
            rates.total = TOTAL_RATE_B;
        } else {
            rates.toSender = TO_SENDER_RATE;
            rates.toOwner = TO_OWNER_RATE;
            rates.toBounty = TO_BOUNTY_RATE;
            rates.total = TOTAL_RATE;
        }
        return rates;
    }

    function logShiftAndBookAward() internal {
        uint256 shiftAward;

        if ((phase == Phases.PreIcoA) || (phase == Phases.PreIcoB)) {
            shiftAward = PRE_OPENING_AWARD;

        } else if (phase == Phases.MainIco) {
            shiftAward = ICO_OPENING_AWARD;

        } else {
            shiftAward = ICO_CLOSING_AWARD;
            returnAllowedTime = uint64(now + RETURN_WEI_PAUSE);
        }

        setWithdrawal(msg.sender, shiftAward);
        NewPhase(phase);
    }

    /**
     * @dev Transfer tokens to the specified address.
     * @param _to The address to transfer to.
     * @param _value The amount of tokens to be transferred.
     * @return success/failure
     */
    function transfer(address _to, uint256 _value)
        whenNotPaused limitForOwner public returns (bool success)
    {
        return super.transfer(_to, _value);
    }

    /**
     * @dev Transfer tokens from one address to another.
     * @param _from address The address which you want to send tokens from.
     * @param _to address The address which you want to transfer to.
     * @param _value the amount of tokens to be transferred.
     * @return success/failure
     */
    function transferFrom(address _from, address _to, uint256 _value)
        whenNotPaused limitForOwner public returns (bool success)
    {
        return super.transferFrom(_from, _to, _value);
    }

    /**
     * @dev Approve the specified address to spend the specified amount of tokens on behalf of the msg.sender.
     * Use "increaseApproval" or "decreaseApproval" function to change the approval, if needed.
     * @param _spender The address which will spend the funds.
     * @param _value The amount of tokens to be spent.
     * @return success/failure
     */
    function approve(address _spender, uint256 _value)
        whenNotPaused limitForOwner public returns (bool success)
    {
        require((_value == 0) || (allowed[msg.sender][_spender] == 0));
        return super.approve(_spender, _value);
    }

    /**
     * @dev Increase the approval for the passed address to spend tokens on behalf of the msg.sender.
     * @param _spender The address which will spend the funds.
     * @param _addedValue The amount of tokens to increase the approval with.
     * @return success/failure
     */
    function increaseApproval(address _spender, uint _addedValue)
        whenNotPaused limitForOwner public returns (bool success)
    {
        return super.increaseApproval(_spender, _addedValue);
    }

    /**
     * @dev Decrease the approval for the passed address to spend tokens on behalf of the msg.sender.
     * @param _spender The address which will spend the funds.
     * @param _subtractedValue The amount of tokens to decrease the approval with.
     * @return success/failure
     */
    function decreaseApproval(address _spender, uint _subtractedValue)
        whenNotPaused limitForOwner public returns (bool success)
    {
        return super.decreaseApproval(_spender, _subtractedValue);
    }

    /*
     * @dev Withdraw the allowed value (ethers) from the contract balance.
     * @return success/failure
     */
    function withdraw() whenNotPaused public returns (bool success) {
        return super.withdraw();
    }

    /**
     * @dev Throws if called when ICO is active.
     */
    modifier whenClosed() {
        require(phase == Phases.AfterIco);
        _;
    }

    /**
     * @dev Throws if called when ICO is completed.
     */
    modifier whenNotClosed() {
        require(phase != Phases.AfterIco);
        _;
    }

    /**
     * @dev Throws if called by the owner before ICO is completed.
     */
    modifier limitForOwner() {
        require((msg.sender != owner) || (phase == Phases.AfterIco));
        _;
    }

    /**
     * @dev Throws if called before returnAllowedTime.
     */
    modifier afterWithdrawPause() {
        require(now > returnAllowedTime);
        _;
    }

}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_pauseMaster","type":"address"}],"name":"setPauseMaster","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"icoOpeningTime","outputs":[{"name":"","type":"uint64"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"returnWei","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"value","type":"uint256"}],"name":"upgrade","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"closingTime","outputs":[{"name":"","type":"uint64"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"upgradeAgent","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"upgradeMaster","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"bounty","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_upgradeAgent","type":"address"},{"name":"_revision","type":"uint32"}],"name":"setUpgradeAgent","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"phase","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_bounty","type":"address"}],"name":"setBounty","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"pauseMaster","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalUpgraded","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"pauseEnd","outputs":[{"name":"","type":"uint64"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"REVISION","outputs":[{"name":"","type":"uint32"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"create","outputs":[{"name":"success","type":"bool"}],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"totalProceeds","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"preIcoOpeningTime","outputs":[{"name":"","type":"uint64"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"returnAllowedTime","outputs":[{"name":"","type":"uint64"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_upgradeMaster","type":"address"}],"name":"setUpgradeMaster","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"_preIcoOpeningTime","type":"uint64"}],"payable":true,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"NewTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"funder","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"NewFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"phase","type":"uint8"}],"name":"NewPhase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"drawer","type":"address"},{"indexed":false,"name":"weiAmount","type":"uint256"}],"name":"Withdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"drawer","type":"address"},{"indexed":false,"name":"weiAmount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Upgrade","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"agent","type":"address"}],"name":"UpgradeEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]

606060405260048054600160a060020a03199081169091556005805490911690556007805460a060020a60e060020a0319169055600980546000919060a060020a60ff02191674010000000000000000000000000000000000000000835b02179055506040516020806122ea833981016040528080519150505b5b60038054600160a060020a03191633600160a060020a03161790555b426001604060020a038216116100ab57600080fd5b600980546001604060020a03808416750100000000000000000000000000000000000000000090810260a860020a60e860020a03199093169290921792839055600a80549290930481166228ec9001811667ffffffffffffffff199092169190911780821662852744019091166801000000000000000002604060020a608060020a03199091161790555b505b6121a3806101476000396000f3006060604052361561019b5763ffffffff60e060020a60003504166306fdde0381146101a8578063095ea7b3146102335780630f4391f51461026957806318160ddd1461029c57806323b872dd146102c15780632d884a51146102fd578063313ce5671461032d5780633ccfd60b146103565780633f5cbdb61461037d57806345977d03146103925780634b6753bc146103aa5780635de4ccb0146103da578063600440cb14610409578063661884631461043857806370a082311461046e5780638456cb591461049f5780638da5cb5b146104c6578063943dfef1146104f557806395d89b4114610524578063a9059cbb146105af578063aa5a20e5146105e5578063b1c9fe6e1461060f578063bc300ed314610646578063c5c0b85914610679578063c752ff62146106a8578063d73dd623146106cd578063d87522ae14610703578063dd62ed3e14610733578063dde43cba1461076a578063efc81a8c14610796578063f1db23dc146107b2578063f2fde38b146107d7578063f397884b146107f8578063f885eaf214610828578063ffeb7d7514610858575b5b6101a4610879565b505b005b34156101b357600080fd5b6101bb610c3b565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101f85780820151818401525b6020016101df565b50505050905090810190601f1680156102255780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561023e57600080fd5b610255600160a060020a0360043516602435610c72565b604051901515815260200160405180910390f35b341561027457600080fd5b610255600160a060020a0360043516610d25565b604051901515815260200160405180910390f35b34156102a757600080fd5b6102af610d7d565b60405190815260200160405180910390f35b34156102cc57600080fd5b610255600160a060020a0360043581169060243516604435610d83565b604051901515815260200160405180910390f35b341561030857600080fd5b610310610dfd565b60405167ffffffffffffffff909116815260200160405180910390f35b341561033857600080fd5b610340610e0d565b60405160ff909116815260200160405180910390f35b341561036157600080fd5b610255610e12565b604051901515815260200160405180910390f35b341561038857600080fd5b6101a6610e43565b005b341561039d57600080fd5b6101a6600435610eee565b005b34156103b557600080fd5b610310611043565b60405167ffffffffffffffff909116815260200160405180910390f35b34156103e557600080fd5b6103ed61105f565b604051600160a060020a03909116815260200160405180910390f35b341561041457600080fd5b6103ed61106e565b604051600160a060020a03909116815260200160405180910390f35b341561044357600080fd5b610255600160a060020a036004351660243561107d565b604051901515815260200160405180910390f35b341561047957600080fd5b6102af600160a060020a03600435166110f5565b60405190815260200160405180910390f35b34156104aa57600080fd5b610255611114565b604051901515815260200160405180910390f35b34156104d157600080fd5b6103ed6111c3565b604051600160a060020a03909116815260200160405180910390f35b341561050057600080fd5b6103ed6111d2565b604051600160a060020a03909116815260200160405180910390f35b341561052f57600080fd5b6101bb6111e1565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101f85780820151818401525b6020016101df565b50505050905090810190601f1680156102255780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156105ba57600080fd5b610255600160a060020a0360043516602435611218565b604051901515815260200160405180910390f35b34156105f057600080fd5b6101a6600160a060020a036004351663ffffffff60243516611290565b005b341561061a57600080fd5b610622611438565b6040518082600481111561063257fe5b60ff16815260200191505060405180910390f35b341561065157600080fd5b610255600160a060020a0360043516611448565b604051901515815260200160405180910390f35b341561068457600080fd5b6103ed6114a0565b604051600160a060020a03909116815260200160405180910390f35b34156106b357600080fd5b6102af6114af565b60405190815260200160405180910390f35b34156106d857600080fd5b610255600160a060020a03600435166024356114b5565b604051901515815260200160405180910390f35b341561070e57600080fd5b61031061152d565b60405167ffffffffffffffff909116815260200160405180910390f35b341561073e57600080fd5b6102af600160a060020a0360043581169060243516611544565b60405190815260200160405180910390f35b341561077557600080fd5b61077d611571565b60405163ffffffff909116815260200160405180910390f35b610255610879565b604051901515815260200160405180910390f35b34156107bd57600080fd5b6102af611584565b60405190815260200160405180910390f35b34156107e257600080fd5b6101a6600160a060020a036004351661158a565b005b341561080357600080fd5b610310611616565b60405167ffffffffffffffff909116815260200160405180910390f35b341561083357600080fd5b61031061163f565b60405167ffffffffffffffff909116815260200160405180910390f35b341561086357600080fd5b6101a6600160a060020a0360043516611663565b005b60008060008061088761214e565b6000808060045b60095460a060020a900460ff1660048111156108a657fe5b14156108b157600080fd5b60075460a060020a900467ffffffffffffffff1642116108d057600080fd5b600034116108dd57600080fd5b6009547501000000000000000000000000000000000000000000900467ffffffffffffffff1642101561090f57600080fd5b60095460a060020a900460ff1696503495506109296116b3565b60045b60095460a060020a900460ff16600481111561094457fe5b14610bec576109516117e8565b93506109688460600151879063ffffffff61189616565b60005490935061097e908463ffffffff6118c516565b9150610989826118df565b90506000811161099a5760006109af565b6109af8460600151829063ffffffff6119d416565b5b945060008511156109fb576109cb348663ffffffff6119f016565b95506109e28460600151879063ffffffff61189616565b6000549093506109f8908463ffffffff6118c516565b91505b6000829055610a3a610a158551889063ffffffff61189616565b600160a060020a0333166000908152600160205260409020549063ffffffff6118c516565b600160a060020a033316600090815260016020908152604090912091909155610a9890610a7190860151889063ffffffff61189616565b600354600160a060020a03166000908152600160205260409020549063ffffffff6118c516565b600354600160a060020a03166000908152600160205260409081902091909155610af790610ad090860151889063ffffffff61189616565b600954600160a060020a03166000908152600160205260409020549063ffffffff6118c516565b600954600160a060020a0316600090815260016020526040902055600b54610b25908763ffffffff6118c516565b600b55600354600160a060020a031686156108fc0287604051600060405180830381858888f193505050501515610b5b57600080fd5b6000851115610b7057610b6e3386611a07565b505b7fd7c894eab7da0862dea424c47485ac49eab56e3690186d9ee97bfc895e0eb5e98360405190815260200160405180910390a17f2b6aa69d7af29fd38518d44025ae0801e505fb9e1065cb57945b4200ef7d71943387604051600160a060020a03909216825260208201526040908101905180910390a1610bf8565b610bf63334611a07565b505b866004811115610c0457fe5b60095460a060020a900460ff166004811115610c1c57fe5b14610c2957610c29611ab5565b5b600197505b5b5b5050505050505090565b60408051908101604052600d81527f436f696e74656420546f6b656e00000000000000000000000000000000000000602082015281565b60075460009060a060020a900467ffffffffffffffff164211610c9457600080fd5b60035433600160a060020a039081169116141580610cca575060045b60095460a060020a900460ff166004811115610cc857fe5b145b1515610cd557600080fd5b811580610d055750600160a060020a03338116600090815260026020908152604080832093871683529290522054155b1515610d1057600080fd5b610d1a8383611bec565b90505b5b5b92915050565b60035460009033600160a060020a03908116911614610d4357600080fd5b600160a060020a0382161515610d5857600080fd5b5060078054600160a060020a031916600160a060020a03831617905560015b5b919050565b60005481565b60075460009060a060020a900467ffffffffffffffff164211610da557600080fd5b60035433600160a060020a039081169116141580610ddb575060045b60095460a060020a900460ff166004811115610dd957fe5b145b1515610de657600080fd5b610df1848484611c59565b90505b5b5b9392505050565b600a5467ffffffffffffffff1681565b601281565b60075460009060a060020a900467ffffffffffffffff164211610e3457600080fd5b610e3c611d85565b90505b5b90565b60035433600160a060020a03908116911614610e5e57600080fd5b60045b60095460a060020a900460ff166004811115610e7957fe5b14610e8357600080fd5b600a54700100000000000000000000000000000000900467ffffffffffffffff164211610eaf57600080fd5b600354600160a060020a039081169030163180156108fc0290604051600060405180830381858888f193505050501515610ee857600080fd5b5b5b5b5b565b6005546000908190600160a060020a03161515610f0a57600080fd5b60008311610f1757600080fd5b600160a060020a03331660009081526001602052604081205492508211610f3d57600080fd5b610f4d828463ffffffff6119f016565b600160a060020a03331660009081526001602052604081209190915554610f7a908463ffffffff6119f016565b600055600654610f90908463ffffffff6118c516565b60065550600554600160a060020a03168063753e88e5338560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610feb57600080fd5b6102c65a03f11515610ffc57600080fd5b50505033600160a060020a03167f318d2be9b9a887c0d168715bd2f44017dafbb3360b14cdcc2a8c0086b4e2d1518460405190815260200160405180910390a25b5b505050565b600a5468010000000000000000900467ffffffffffffffff1681565b600554600160a060020a031681565b600454600160a060020a031681565b60075460009060a060020a900467ffffffffffffffff16421161109f57600080fd5b60035433600160a060020a0390811691161415806110d5575060045b60095460a060020a900460ff1660048111156110d357fe5b145b15156110e057600080fd5b610d1a8383611e34565b90505b5b5b92915050565b600160a060020a0381166000908152600160205260409020545b919050565b60075460009033600160a060020a0390811691161461113257600080fd5b60075460a060020a900467ffffffffffffffff161561115057600080fd5b600780547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff1660a060020a62127500420167ffffffffffffffff16021790557f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75260405160405180910390a15060015b5b90565b600354600160a060020a031681565b600954600160a060020a031681565b60408051908101604052600381527f4354440000000000000000000000000000000000000000000000000000000000602082015281565b60075460009060a060020a900467ffffffffffffffff16421161123a57600080fd5b60035433600160a060020a039081169116141580611270575060045b60095460a060020a900460ff16600481111561126e57fe5b145b151561127b57600080fd5b610d1a8383611f30565b90505b5b5b92915050565b60045460009033600160a060020a039081169116146112ae57600080fd5b600554600160a060020a0316156112c457600080fd5b600160a060020a038316158015906112e1575063ffffffff821615155b15156112ec57600080fd5b508163ffffffff8216600160a060020a038216637cc963806000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561133b57600080fd5b6102c65a03f1151561134c57600080fd5b5050506040518051905063ffffffff1614151561136857600080fd5b60005481600160a060020a0316634b2ba0dd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156113b157600080fd5b6102c65a03f115156113c257600080fd5b505050604051805190501415156113d857600080fd5b60058054600160a060020a031916600160a060020a0385161790557ff2c44e779d94e9806f973c8ff14aa5dcfd972c84192842a273550c3def4e27d883604051600160a060020a03909116815260200160405180910390a15b5b5b505050565b60095460a060020a900460ff1681565b60035460009033600160a060020a0390811691161461146657600080fd5b600160a060020a038216151561147b57600080fd5b5060098054600160a060020a031916600160a060020a03831617905560015b5b919050565b600754600160a060020a031681565b60065481565b60075460009060a060020a900467ffffffffffffffff1642116114d757600080fd5b60035433600160a060020a03908116911614158061150d575060045b60095460a060020a900460ff16600481111561150b57fe5b145b151561151857600080fd5b610d1a8383612007565b90505b5b5b92915050565b60075460a060020a900467ffffffffffffffff1681565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60035460a060020a900463ffffffff1681565b600b5481565b60035433600160a060020a039081169116146115a557600080fd5b600160a060020a03811615156115ba57600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360038054600160a060020a031916600160a060020a0383161790555b5b50565b6009547501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b600a54700100000000000000000000000000000000900467ffffffffffffffff1681565b60035433600160a060020a0390811691161461167e57600080fd5b600160a060020a038116151561169357600080fd5b60048054600160a060020a031916600160a060020a0383161790555b5b50565b600a5468010000000000000000900467ffffffffffffffff1642106117245760045b60095460a060020a900460ff1660048111156116ed57fe5b1461171f57600980546004919074ff0000000000000000000000000000000000000000191660a060020a835b02179055505b610ee8565b600a5467ffffffffffffffff16421061178d5760035b60095460a060020a900460ff16600481111561175257fe5b1461171f57600980546003919074ff0000000000000000000000000000000000000000191660a060020a83611719565b02179055505b610ee8565b60005b60095460a060020a900460ff1660048111156117a857fe5b1415610ee8576117b66120ac565b600980546001919074ff0000000000000000000000000000000000000000191660a060020a835b02179055505b5b5b5b565b6117f061214e565b60015b60095460a060020a900460ff16600481111561180b57fe5b14156118325761047e81526101306020820152603d60408201526105eb6060820152610e3f565b60025b60095460a060020a900460ff16600481111561184d57fe5b14156118745761044c81526101246020820152603a60408201526105aa6060820152610e3f565b6103e8815261010760208201526034604082015261052360608201525b5b5b90565b60008282028315806118b257508284828115156118af57fe5b04145b15156118ba57fe5b8091505b5092915050565b6000828201838110156118ba57fe5b8091505b5092915050565b600060015b60095460a060020a900460ff1660048111156118fc57fe5b14801561191457506a6b88921f0410abc20000008210155b1561196757600980546002919074ff0000000000000000000000000000000000000000191660a060020a835b0217905550611960826a6b88921f0410abc200000063ffffffff6119f016565b9050610d77565b6b0219aada9b14535aca00000082106119c957600980546004919074ff0000000000000000000000000000000000000000191660a060020a835b0217905550611960826b0219aada9b14535aca00000063ffffffff6119f016565b9050610d77565b5060005b5b5b919050565b60008082848115156119e257fe5b0490508091505b5092915050565b6000828211156119fc57fe5b508082035b92915050565b60008080600160a060020a03851615801590611a235750600084115b15611aa7575050600160a060020a03831660009081526008602052604090205482810181811115611aa757600160a060020a038516600081815260086020526040908190208390557f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659086905190815260200160405180910390a260019250611aad565b5b600092505b505092915050565b600060015b60095460a060020a900460ff166004811115611ad257fe5b1480611af6575060025b60095460a060020a900460ff166004811115611af457fe5b145b15611b0a575067016345785d8a0000611b8a565b60035b60095460a060020a900460ff166004811115611b2557fe5b1415611b3a57506702c68af0bb140000611b8a565b50600a805477ffffffffffffffff00000000000000000000000000000000191670010000000000000000000000000000000067ffffffffffffffff62278d00420116021790556706f05b59d3b200005b5b611b953382611a07565b506009547f31f72b44f546d9e7eaec13f65636997665e15f134a81c82924f568f5c0d07b939060a060020a900460ff1660405180826004811115611bd557fe5b60ff16815260200191505060405180910390a15b50565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b600080600160a060020a0384161515611c7157600080fd5b50600160a060020a03808516600081815260026020908152604080832033909516835293815283822054928252600190529190912054611cb7908463ffffffff6119f016565b600160a060020a038087166000908152600160205260408082209390935590861681522054611cec908463ffffffff6118c516565b600160a060020a038516600090815260016020526040902055611d15818463ffffffff6119f016565b600160a060020a03808716600081815260026020908152604080832033861684529091529081902093909355908616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9086905190815260200160405180910390a3600191505b509392505050565b600160a060020a033316600090815260086020526040812054818111611daa57600080fd5b600160a060020a0333166000818152600860205260408082209190915582156108fc0290839051600060405180830381858888f193505050501515611dee57600080fd5b33600160a060020a03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58260405190815260200160405180910390a2600191505b5090565b600160a060020a03338116600090815260026020908152604080832093861683529290529081205480831115611e9157600160a060020a033381166000908152600260209081526040808320938816835292905290812055611ec8565b611ea1818463ffffffff6119f016565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a3600191505b5092915050565b6000600160a060020a0383161515611f4757600080fd5b600160a060020a033316600090815260016020526040902054611f70908363ffffffff6119f016565b600160a060020a033381166000908152600160205260408082209390935590851681522054611fa5908363ffffffff6118c516565b600160a060020a0380851660008181526001602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060015b92915050565b600160a060020a03338116600090815260026020908152604080832093861683529290529081205461203f908363ffffffff6118c516565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a35060015b92915050565b600954600160a060020a031615156120e15760035460098054600160a060020a031916600160a060020a039092169190911790555b600454600160a060020a031615156121165760035460048054600160a060020a031916600160a060020a039092169190911790555b600754600160a060020a03161515610ee85760035460078054600160a060020a031916600160a060020a039092169190911790555b5b565b6080604051908101604052806000815260200160008152602001600081526020016000815250905600a165627a7a7230582094b10c2a6e6e4ebe96606e48a7611d3da6e223636638da8e85b7391ebe26f52e00290000000000000000000000000000000000000000000000000000000059e92060

Deployed Bytecode

0x6060604052361561019b5763ffffffff60e060020a60003504166306fdde0381146101a8578063095ea7b3146102335780630f4391f51461026957806318160ddd1461029c57806323b872dd146102c15780632d884a51146102fd578063313ce5671461032d5780633ccfd60b146103565780633f5cbdb61461037d57806345977d03146103925780634b6753bc146103aa5780635de4ccb0146103da578063600440cb14610409578063661884631461043857806370a082311461046e5780638456cb591461049f5780638da5cb5b146104c6578063943dfef1146104f557806395d89b4114610524578063a9059cbb146105af578063aa5a20e5146105e5578063b1c9fe6e1461060f578063bc300ed314610646578063c5c0b85914610679578063c752ff62146106a8578063d73dd623146106cd578063d87522ae14610703578063dd62ed3e14610733578063dde43cba1461076a578063efc81a8c14610796578063f1db23dc146107b2578063f2fde38b146107d7578063f397884b146107f8578063f885eaf214610828578063ffeb7d7514610858575b5b6101a4610879565b505b005b34156101b357600080fd5b6101bb610c3b565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101f85780820151818401525b6020016101df565b50505050905090810190601f1680156102255780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561023e57600080fd5b610255600160a060020a0360043516602435610c72565b604051901515815260200160405180910390f35b341561027457600080fd5b610255600160a060020a0360043516610d25565b604051901515815260200160405180910390f35b34156102a757600080fd5b6102af610d7d565b60405190815260200160405180910390f35b34156102cc57600080fd5b610255600160a060020a0360043581169060243516604435610d83565b604051901515815260200160405180910390f35b341561030857600080fd5b610310610dfd565b60405167ffffffffffffffff909116815260200160405180910390f35b341561033857600080fd5b610340610e0d565b60405160ff909116815260200160405180910390f35b341561036157600080fd5b610255610e12565b604051901515815260200160405180910390f35b341561038857600080fd5b6101a6610e43565b005b341561039d57600080fd5b6101a6600435610eee565b005b34156103b557600080fd5b610310611043565b60405167ffffffffffffffff909116815260200160405180910390f35b34156103e557600080fd5b6103ed61105f565b604051600160a060020a03909116815260200160405180910390f35b341561041457600080fd5b6103ed61106e565b604051600160a060020a03909116815260200160405180910390f35b341561044357600080fd5b610255600160a060020a036004351660243561107d565b604051901515815260200160405180910390f35b341561047957600080fd5b6102af600160a060020a03600435166110f5565b60405190815260200160405180910390f35b34156104aa57600080fd5b610255611114565b604051901515815260200160405180910390f35b34156104d157600080fd5b6103ed6111c3565b604051600160a060020a03909116815260200160405180910390f35b341561050057600080fd5b6103ed6111d2565b604051600160a060020a03909116815260200160405180910390f35b341561052f57600080fd5b6101bb6111e1565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101f85780820151818401525b6020016101df565b50505050905090810190601f1680156102255780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156105ba57600080fd5b610255600160a060020a0360043516602435611218565b604051901515815260200160405180910390f35b34156105f057600080fd5b6101a6600160a060020a036004351663ffffffff60243516611290565b005b341561061a57600080fd5b610622611438565b6040518082600481111561063257fe5b60ff16815260200191505060405180910390f35b341561065157600080fd5b610255600160a060020a0360043516611448565b604051901515815260200160405180910390f35b341561068457600080fd5b6103ed6114a0565b604051600160a060020a03909116815260200160405180910390f35b34156106b357600080fd5b6102af6114af565b60405190815260200160405180910390f35b34156106d857600080fd5b610255600160a060020a03600435166024356114b5565b604051901515815260200160405180910390f35b341561070e57600080fd5b61031061152d565b60405167ffffffffffffffff909116815260200160405180910390f35b341561073e57600080fd5b6102af600160a060020a0360043581169060243516611544565b60405190815260200160405180910390f35b341561077557600080fd5b61077d611571565b60405163ffffffff909116815260200160405180910390f35b610255610879565b604051901515815260200160405180910390f35b34156107bd57600080fd5b6102af611584565b60405190815260200160405180910390f35b34156107e257600080fd5b6101a6600160a060020a036004351661158a565b005b341561080357600080fd5b610310611616565b60405167ffffffffffffffff909116815260200160405180910390f35b341561083357600080fd5b61031061163f565b60405167ffffffffffffffff909116815260200160405180910390f35b341561086357600080fd5b6101a6600160a060020a0360043516611663565b005b60008060008061088761214e565b6000808060045b60095460a060020a900460ff1660048111156108a657fe5b14156108b157600080fd5b60075460a060020a900467ffffffffffffffff1642116108d057600080fd5b600034116108dd57600080fd5b6009547501000000000000000000000000000000000000000000900467ffffffffffffffff1642101561090f57600080fd5b60095460a060020a900460ff1696503495506109296116b3565b60045b60095460a060020a900460ff16600481111561094457fe5b14610bec576109516117e8565b93506109688460600151879063ffffffff61189616565b60005490935061097e908463ffffffff6118c516565b9150610989826118df565b90506000811161099a5760006109af565b6109af8460600151829063ffffffff6119d416565b5b945060008511156109fb576109cb348663ffffffff6119f016565b95506109e28460600151879063ffffffff61189616565b6000549093506109f8908463ffffffff6118c516565b91505b6000829055610a3a610a158551889063ffffffff61189616565b600160a060020a0333166000908152600160205260409020549063ffffffff6118c516565b600160a060020a033316600090815260016020908152604090912091909155610a9890610a7190860151889063ffffffff61189616565b600354600160a060020a03166000908152600160205260409020549063ffffffff6118c516565b600354600160a060020a03166000908152600160205260409081902091909155610af790610ad090860151889063ffffffff61189616565b600954600160a060020a03166000908152600160205260409020549063ffffffff6118c516565b600954600160a060020a0316600090815260016020526040902055600b54610b25908763ffffffff6118c516565b600b55600354600160a060020a031686156108fc0287604051600060405180830381858888f193505050501515610b5b57600080fd5b6000851115610b7057610b6e3386611a07565b505b7fd7c894eab7da0862dea424c47485ac49eab56e3690186d9ee97bfc895e0eb5e98360405190815260200160405180910390a17f2b6aa69d7af29fd38518d44025ae0801e505fb9e1065cb57945b4200ef7d71943387604051600160a060020a03909216825260208201526040908101905180910390a1610bf8565b610bf63334611a07565b505b866004811115610c0457fe5b60095460a060020a900460ff166004811115610c1c57fe5b14610c2957610c29611ab5565b5b600197505b5b5b5050505050505090565b60408051908101604052600d81527f436f696e74656420546f6b656e00000000000000000000000000000000000000602082015281565b60075460009060a060020a900467ffffffffffffffff164211610c9457600080fd5b60035433600160a060020a039081169116141580610cca575060045b60095460a060020a900460ff166004811115610cc857fe5b145b1515610cd557600080fd5b811580610d055750600160a060020a03338116600090815260026020908152604080832093871683529290522054155b1515610d1057600080fd5b610d1a8383611bec565b90505b5b5b92915050565b60035460009033600160a060020a03908116911614610d4357600080fd5b600160a060020a0382161515610d5857600080fd5b5060078054600160a060020a031916600160a060020a03831617905560015b5b919050565b60005481565b60075460009060a060020a900467ffffffffffffffff164211610da557600080fd5b60035433600160a060020a039081169116141580610ddb575060045b60095460a060020a900460ff166004811115610dd957fe5b145b1515610de657600080fd5b610df1848484611c59565b90505b5b5b9392505050565b600a5467ffffffffffffffff1681565b601281565b60075460009060a060020a900467ffffffffffffffff164211610e3457600080fd5b610e3c611d85565b90505b5b90565b60035433600160a060020a03908116911614610e5e57600080fd5b60045b60095460a060020a900460ff166004811115610e7957fe5b14610e8357600080fd5b600a54700100000000000000000000000000000000900467ffffffffffffffff164211610eaf57600080fd5b600354600160a060020a039081169030163180156108fc0290604051600060405180830381858888f193505050501515610ee857600080fd5b5b5b5b5b565b6005546000908190600160a060020a03161515610f0a57600080fd5b60008311610f1757600080fd5b600160a060020a03331660009081526001602052604081205492508211610f3d57600080fd5b610f4d828463ffffffff6119f016565b600160a060020a03331660009081526001602052604081209190915554610f7a908463ffffffff6119f016565b600055600654610f90908463ffffffff6118c516565b60065550600554600160a060020a03168063753e88e5338560405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401600060405180830381600087803b1515610feb57600080fd5b6102c65a03f11515610ffc57600080fd5b50505033600160a060020a03167f318d2be9b9a887c0d168715bd2f44017dafbb3360b14cdcc2a8c0086b4e2d1518460405190815260200160405180910390a25b5b505050565b600a5468010000000000000000900467ffffffffffffffff1681565b600554600160a060020a031681565b600454600160a060020a031681565b60075460009060a060020a900467ffffffffffffffff16421161109f57600080fd5b60035433600160a060020a0390811691161415806110d5575060045b60095460a060020a900460ff1660048111156110d357fe5b145b15156110e057600080fd5b610d1a8383611e34565b90505b5b5b92915050565b600160a060020a0381166000908152600160205260409020545b919050565b60075460009033600160a060020a0390811691161461113257600080fd5b60075460a060020a900467ffffffffffffffff161561115057600080fd5b600780547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff1660a060020a62127500420167ffffffffffffffff16021790557f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75260405160405180910390a15060015b5b90565b600354600160a060020a031681565b600954600160a060020a031681565b60408051908101604052600381527f4354440000000000000000000000000000000000000000000000000000000000602082015281565b60075460009060a060020a900467ffffffffffffffff16421161123a57600080fd5b60035433600160a060020a039081169116141580611270575060045b60095460a060020a900460ff16600481111561126e57fe5b145b151561127b57600080fd5b610d1a8383611f30565b90505b5b5b92915050565b60045460009033600160a060020a039081169116146112ae57600080fd5b600554600160a060020a0316156112c457600080fd5b600160a060020a038316158015906112e1575063ffffffff821615155b15156112ec57600080fd5b508163ffffffff8216600160a060020a038216637cc963806000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b151561133b57600080fd5b6102c65a03f1151561134c57600080fd5b5050506040518051905063ffffffff1614151561136857600080fd5b60005481600160a060020a0316634b2ba0dd6000604051602001526040518163ffffffff1660e060020a028152600401602060405180830381600087803b15156113b157600080fd5b6102c65a03f115156113c257600080fd5b505050604051805190501415156113d857600080fd5b60058054600160a060020a031916600160a060020a0385161790557ff2c44e779d94e9806f973c8ff14aa5dcfd972c84192842a273550c3def4e27d883604051600160a060020a03909116815260200160405180910390a15b5b5b505050565b60095460a060020a900460ff1681565b60035460009033600160a060020a0390811691161461146657600080fd5b600160a060020a038216151561147b57600080fd5b5060098054600160a060020a031916600160a060020a03831617905560015b5b919050565b600754600160a060020a031681565b60065481565b60075460009060a060020a900467ffffffffffffffff1642116114d757600080fd5b60035433600160a060020a03908116911614158061150d575060045b60095460a060020a900460ff16600481111561150b57fe5b145b151561151857600080fd5b610d1a8383612007565b90505b5b5b92915050565b60075460a060020a900467ffffffffffffffff1681565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60035460a060020a900463ffffffff1681565b600b5481565b60035433600160a060020a039081169116146115a557600080fd5b600160a060020a03811615156115ba57600080fd5b600354600160a060020a0380831691167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360038054600160a060020a031916600160a060020a0383161790555b5b50565b6009547501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b600a54700100000000000000000000000000000000900467ffffffffffffffff1681565b60035433600160a060020a0390811691161461167e57600080fd5b600160a060020a038116151561169357600080fd5b60048054600160a060020a031916600160a060020a0383161790555b5b50565b600a5468010000000000000000900467ffffffffffffffff1642106117245760045b60095460a060020a900460ff1660048111156116ed57fe5b1461171f57600980546004919074ff0000000000000000000000000000000000000000191660a060020a835b02179055505b610ee8565b600a5467ffffffffffffffff16421061178d5760035b60095460a060020a900460ff16600481111561175257fe5b1461171f57600980546003919074ff0000000000000000000000000000000000000000191660a060020a83611719565b02179055505b610ee8565b60005b60095460a060020a900460ff1660048111156117a857fe5b1415610ee8576117b66120ac565b600980546001919074ff0000000000000000000000000000000000000000191660a060020a835b02179055505b5b5b5b565b6117f061214e565b60015b60095460a060020a900460ff16600481111561180b57fe5b14156118325761047e81526101306020820152603d60408201526105eb6060820152610e3f565b60025b60095460a060020a900460ff16600481111561184d57fe5b14156118745761044c81526101246020820152603a60408201526105aa6060820152610e3f565b6103e8815261010760208201526034604082015261052360608201525b5b5b90565b60008282028315806118b257508284828115156118af57fe5b04145b15156118ba57fe5b8091505b5092915050565b6000828201838110156118ba57fe5b8091505b5092915050565b600060015b60095460a060020a900460ff1660048111156118fc57fe5b14801561191457506a6b88921f0410abc20000008210155b1561196757600980546002919074ff0000000000000000000000000000000000000000191660a060020a835b0217905550611960826a6b88921f0410abc200000063ffffffff6119f016565b9050610d77565b6b0219aada9b14535aca00000082106119c957600980546004919074ff0000000000000000000000000000000000000000191660a060020a835b0217905550611960826b0219aada9b14535aca00000063ffffffff6119f016565b9050610d77565b5060005b5b5b919050565b60008082848115156119e257fe5b0490508091505b5092915050565b6000828211156119fc57fe5b508082035b92915050565b60008080600160a060020a03851615801590611a235750600084115b15611aa7575050600160a060020a03831660009081526008602052604090205482810181811115611aa757600160a060020a038516600081815260086020526040908190208390557f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659086905190815260200160405180910390a260019250611aad565b5b600092505b505092915050565b600060015b60095460a060020a900460ff166004811115611ad257fe5b1480611af6575060025b60095460a060020a900460ff166004811115611af457fe5b145b15611b0a575067016345785d8a0000611b8a565b60035b60095460a060020a900460ff166004811115611b2557fe5b1415611b3a57506702c68af0bb140000611b8a565b50600a805477ffffffffffffffff00000000000000000000000000000000191670010000000000000000000000000000000067ffffffffffffffff62278d00420116021790556706f05b59d3b200005b5b611b953382611a07565b506009547f31f72b44f546d9e7eaec13f65636997665e15f134a81c82924f568f5c0d07b939060a060020a900460ff1660405180826004811115611bd557fe5b60ff16815260200191505060405180910390a15b50565b600160a060020a03338116600081815260026020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b600080600160a060020a0384161515611c7157600080fd5b50600160a060020a03808516600081815260026020908152604080832033909516835293815283822054928252600190529190912054611cb7908463ffffffff6119f016565b600160a060020a038087166000908152600160205260408082209390935590861681522054611cec908463ffffffff6118c516565b600160a060020a038516600090815260016020526040902055611d15818463ffffffff6119f016565b600160a060020a03808716600081815260026020908152604080832033861684529091529081902093909355908616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9086905190815260200160405180910390a3600191505b509392505050565b600160a060020a033316600090815260086020526040812054818111611daa57600080fd5b600160a060020a0333166000818152600860205260408082209190915582156108fc0290839051600060405180830381858888f193505050501515611dee57600080fd5b33600160a060020a03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58260405190815260200160405180910390a2600191505b5090565b600160a060020a03338116600090815260026020908152604080832093861683529290529081205480831115611e9157600160a060020a033381166000908152600260209081526040808320938816835292905290812055611ec8565b611ea1818463ffffffff6119f016565b600160a060020a033381166000908152600260209081526040808320938916835292905220555b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020547f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925915190815260200160405180910390a3600191505b5092915050565b6000600160a060020a0383161515611f4757600080fd5b600160a060020a033316600090815260016020526040902054611f70908363ffffffff6119f016565b600160a060020a033381166000908152600160205260408082209390935590851681522054611fa5908363ffffffff6118c516565b600160a060020a0380851660008181526001602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060015b92915050565b600160a060020a03338116600090815260026020908152604080832093861683529290529081205461203f908363ffffffff6118c516565b600160a060020a0333811660008181526002602090815260408083209489168084529490915290819020849055919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591905190815260200160405180910390a35060015b92915050565b600954600160a060020a031615156120e15760035460098054600160a060020a031916600160a060020a039092169190911790555b600454600160a060020a031615156121165760035460048054600160a060020a031916600160a060020a039092169190911790555b600754600160a060020a03161515610ee85760035460078054600160a060020a031916600160a060020a039092169190911790555b5b565b6080604051908101604052806000815260200160008152602001600081526020016000815250905600a165627a7a7230582094b10c2a6e6e4ebe96606e48a7611d3da6e223636638da8e85b7391ebe26f52e0029

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

0000000000000000000000000000000000000000000000000000000059e92060

-----Decoded View---------------
Arg [0] : _preIcoOpeningTime (uint64): 1508450400

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000059e92060


Swarm Source

bzzr://94b10c2a6e6e4ebe96606e48a7611d3da6e223636638da8e85b7391ebe26f52e

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.