Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 44168 txns
 Latest 25 transactions from a total of 44168 transactions

TxHash Age From To Value [TxFee]
0xa0b960e0f317553b4c312867817d42f5b95617049465f18f965bd495a050525742 days 15 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00250172
0x73fd454abb60c8236b87f6fdb5667a2265a9003e69083a8a4260619535f6ed0847 days 8 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00249916
0x27002a9e1fd8b9954f9c8d9dfed4c807382eeda4f899b0f6d0cbe5b8cd66e35a47 days 8 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00309916
0x4cf7ae352e946cff8ba506e191a56f0325ec58e852f42581661b7b7f98280cf660 days 11 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00250172
0x2cd0e774897eaca6af644e50852857f0c41cf1af983de2a7c77b6519cb8d1d3f60 days 11 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00309916
0x1653a79cb102ad5762dcbaeae9bf183b0beef4953c76450107c59d18034e526587 days 12 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00250172
0xf42a840fd7d71fed1626ae4d36808be1d52c6bef65bba1f3fcd46c63efc0636187 days 12 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0x084d259fe6541f0b1f19f5e673adb6f049b01887454f10c9b5af028f0aecefd187 days 12 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0xd1b2037f1f9bcb9a24097e1f48f5e057aecf93ba976f01f5134a5d4bf5a7378d90 days 15 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00250172
0xb35eacbc99c1b57f45e9a188cafbba51e060ceb181a63815713502ed9b67429c90 days 15 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0x0f5aebb7f14f0b6f13e06b9855e01ea4a3e557b419877396a87ada401274f54690 days 15 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0x64a148da38351cc0ece08552d390925617088c1b5f25afa1b96380248983501890 days 15 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0xa15bb4310d439d5a1d3478129cbd85794743ad65becb3832466f32d8d47a0ff290 days 15 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0xbdab2840d6589178d8df19a3d32abdbe34e63fdb4ccafa7ff8948e022f0225a290 days 15 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0x5be4cc9978852173940c37ae664b0107289ef12e8838c81ff0052a122b6e9aa690 days 15 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0x601919c6e3024531ffb4acfb605e44776344888293688272d164c794cccb204e90 days 16 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00190172
0xe0e64e307a59cee72f176a7cf6f2179584fbf5a25ce708809fcd442b810f1c8590 days 16 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00309916
0x5166edff1c4ee1f613ceae3e9bdf3535a40c852225237230dc87cf212a96e59190 days 16 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0x70a17d7fa7f45cb402acf336803cf45eb55807243bf206f74480e9005c056feb118 days 14 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0.32 Ether0.000861
0x8dc51ef6b5ab542065c90988b52ce13826be7437809c2368afff8d0b7a66195c122 days 15 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0.2 Ether0.000877113
0x7e46a3eb9dd7f1fda347d9486ac63e08d3d0f625518d6c8c6fc0c19fb049dbbe137 days 15 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00250172
0xcd6c6346f63b27f3adc2c1299dadc3c463b3a390bd594ce1a8c258a3d01e3991137 days 15 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0x35057711928ff760026dd4cf7f37676486b10c04cfd1381e67cdcf99abb1ae46151 days 17 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00250172
0xaac0179bb2f2f6aa4bf8fc7ed524e2fcf7a771d36eb6f3a443d2ba8467f57989151 days 17 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00310172
0x8f109794ef10363789fae8e6dc1bb7a2774659434e890f02ff841640a1795c81159 days 9 hrs ago0xef45b79def79a2cd2d0c77f84fddaab8d0b8be35  IN   0x29880855d419c6fa0e8c7fdfd985c80f286d914e0 Ether0.00250172
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click here To View More View All
ParentTxHash Block Age From To Value
0x5240e8719a7b8bcca588bc62ff6d15c03aa37a6db97b1a3fd2c8ea734f6915e94994325315 days 10 hrs ago0x1522900b6dafac587d499a862861c0869be6e4280x29880855d419c6fa0e8c7fdfd985c80f286d914e0.1 Ether
0x957a5b885e01e756389534227c59b844ad9fb69233882c6e7bc6c19a67d0e5d74994317315 days 10 hrs ago0x1522900b6dafac587d499a862861c0869be6e4280x29880855d419c6fa0e8c7fdfd985c80f286d914e4.264 Ether
0x26d30c416477296c75764aceb8309c3737d6dedaf38523d447903ecac08a88354994045315 days 11 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x56b344c2b77c75c75dedfcd2efca2175912e1eea0.00221002 Ether
0xb8442be88db9804a3f9e8f78e0f9dcff06020d65e57ee6050bf88e5b0366b3f04993974315 days 11 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0xaea7a08008bbc2f0de3e25e39d1b15ff8300d7150.001 Ether
0x01e73a6db3e3c8ef49768a35aad34c7a3974c2e665887d93d5a6a046847926384993970315 days 11 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0xe9316ac0340eec0546fb219519e11e9a0786b3310.005 Ether
0x2a9ac50539b57b895aa0d8dde647f728a7ce41ce1bc577cef9d31e2f496943be4993969315 days 11 hrs ago0x7948a2504200a755e617364d393d90c6226553490x29880855d419c6fa0e8c7fdfd985c80f286d914e0.5756635054922563 Ether
0x96bdb171919df1b3a487547e54afe1cea945c2fa5d3c8501dd53c6d8b17a558d4993921315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x29e80ad5ba77f5125771b778335a69818e16c7fe0.01 Ether
0xefa19ba093fdb79f566718b5c571bb550d2e90626bcc626a1122393d3aa295a24993916315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x9338ad2ea2b034237891623a810407f6ed83935e0.00000411475745 Ether
0xabe3a64b60bf6c1c081ab0a81fba0e7102261eadac1775e19a7e41547d8175704993916315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x9338ad2ea2b034237891623a810407f6ed83935e0.00243301475745 Ether
0xcace4fe91e496f640fd1ea2e6c6024bbace72457d12a34e39fdc0400a1bfda534993911315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x611dcf7b896a78b2ceb1f1f481608e7fbb5a9b7b0.00046905915262332 Ether
0x926cb5292d9745efb660b52b3961cd10b54d3a5a94dcdf4becff90cba90819044993911315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x611dcf7b896a78b2ceb1f1f481608e7fbb5a9b7b0.028 Ether
0x03c8190f32995ea23dc8edca567bc2881aff1a81b3349858fcc31187eca87bb84993911315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x611dcf7b896a78b2ceb1f1f481608e7fbb5a9b7b0.05 Ether
0x66d74e15fd005a9d84fbd93e22fc5493bfb2f9e0777f20ec1751ea4ca80c5f464993911315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x611dcf7b896a78b2ceb1f1f481608e7fbb5a9b7b0.1 Ether
0x22776c987597ad9624fe09df7769a87913afae6f2dd77cfaed248fce7f4f99ca4993911315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x611dcf7b896a78b2ceb1f1f481608e7fbb5a9b7b0.25 Ether
0x37c6699e6d9fd12fa50a4d684257fa8c34f4272b0dda01bd4a6a127b60e741db4993910315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea0.2 Ether
0x12bd2de6b718f11518bc39905db9ecec14096ba562c61b0f98e185c11cb744a04993910315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea0.256 Ether
0x8a75c0d311b68f0ac753a696dd74c4a087e72f6f63060bcf3dad15d0a38934ae4993910315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea0.256 Ether
0x4ee0f93ee82e19cdaae2ad7f10c736a007ed2cb80110523efa9c2016615547144993910315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea0.18762366104932798 Ether
0x8250b9a8e3695860c5272499960962549d2bd84c53d80bc01c90eb1255f089c24993910315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea0.55 Ether
0xd68aec1459094577a393fb7a30f79f04cbcc06f7c3d53d7423d0786495b15d034993910315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea1.25 Ether
0x173530a88f72fbf936be8d7c95dcd55e89030a616f1cbd97b87115e41b2ea7c34993910315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea0.40336 Ether
0xd283eb3242a0cacf93b513df4c5d644af8140d317c2f2591adb47155ca1e5adb4993910315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea3.059971344749949 Ether
0x317b3001b0cd372e4da6ccf58ff845751496032431552edf63b80d5080c3ee124993910315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea2.984921880330218 Ether
0x08c5b33dad58d917544d27643fd8455e0fb877d4fa9a2f19731bba20109425e34993910315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea0.95 Ether
0xba81a26ae2d185da6c0faef9847201eab5634f85c7a428b2129ec7fdb99a70f34993910315 days 12 hrs ago0x29880855d419c6fa0e8c7fdfd985c80f286d914e0x531d67ab529448e16745a7511bb9979ef8c5e0ea0.1 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: DadiPublicSale
Compiler Text: v0.4.18+commit.9cf6e910
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.11;

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

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

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

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(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() public {
    owner = msg.sender;
  }


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


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

}

/**
 * @title 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) public 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) public 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 The DADI Public sale Contract
*/
contract DadiPublicSale is Ownable {
    using SafeMath for uint256;

    StandardToken public token;                         // The DADI ERC20 token */

    uint256 public tokenSupply;
    uint256 public tokensPurchased = 0;
    uint256 public individualCap = 5000 * 1000;         // USD$5,000
    uint256 public tokenPrice = 500;                    // USD$0.50
    uint256 public ethRate;                             // ETH to USD Rate, set by owner: 1 ETH = ethRate USD
    uint256 public maxGasPrice;                         // Max gas price for contributing transactions.
 
    address[] public saleWallets;
    mapping(address => Investor) private investors;
    address[] private investorIndex;

    struct Investor {
      uint256 tokens;
      uint256 contribution;
      bool distributed;
      uint index;
    }

    /*****
    * State for Sale Modes
    *  0 - Preparing:            All contract initialization calls
    *  1 - PublicSale:           Contract is in the Sale Period
    *  2 - PublicSaleFinalized   Sale period is finalized, no more payments are allowed
    *  3 - Success:              Sale Successful
    *  4 - TokenDistribution:    Ssale finished, tokens can be distributed
    *  5 - Closed:               Sale closed, no tokens more can be distributed
    */
    enum SaleState { Preparing, PublicSale, PublicSaleFinalized, Success, TokenDistribution, Closed }
    SaleState public state = SaleState.Preparing;

    event LogTokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 tokens);
    event LogTokenDistribution(address recipient, uint256 tokens);
    event LogRedistributeTokens(address recipient, SaleState _state, uint256 tokens);
    event LogFundTransfer(address wallet, uint256 value);
    event LogRefund(address wallet, uint256 value);
    event LogStateChange(SaleState _state);

    /*****
    * @dev Modifier to check that amount transferred is not 0
    */
    modifier nonZero() {
        require(msg.value != 0);
        _;
    }

    /*****
    * @dev The constructor function to initialize the Public sale
    * @param _token                         address   the address of the ERC20 token for the sale
    * @param _tokenSupply                   uint256   the amount of tokens available
    */
    function DadiPublicSale (StandardToken _token, uint256 _tokenSupply) public {
        require(_token != address(0));
        require(_tokenSupply != 0);

        token = StandardToken(_token);
        tokenSupply = _tokenSupply * (uint256(10) ** 18);
        maxGasPrice = 60000000000;       // 60 Gwei
    }

    /*****
    * @dev Fallback Function to buy the tokens
    */
    function () public nonZero payable {
        require(state == SaleState.PublicSale);
        buyTokens(msg.sender, msg.value);
    }

    /*****
    * @dev Allows the contract owner to add a new distribution wallet, used to hold funds safely
    * @param _wallet        address     The address of the wallet
    * @return success       bool        Returns true if executed successfully
    */
    function addSaleWallet (address _wallet) public onlyOwner returns (bool) {
        require(_wallet != address(0));

        saleWallets.push(_wallet);
        return true;
    }

    /*****
    * @dev Calculates the number of tokens that can be bought for the amount of Wei transferred
    * @param _amount    uint256     The amount of money invested by the investor
    * @return tokens    uint256     The number of tokens purchased for the amount invested
    */
    function calculateTokens (uint256 _amount) public constant returns (uint256 tokens) {
        tokens = _amount * ethRate / tokenPrice;
        return tokens;
    }

    /*****
    * @dev Called by the owner of the contract to modify the sale state
    */
    function setState (uint256 _state) public onlyOwner {
        state = SaleState(uint(_state));
        LogStateChange(state);
    }

    /*****
    * @dev Called by the owner of the contract to start the Public sale
    * @param rate   uint256  the current ETH USD rate, multiplied by 1000
    */
    function startPublicSale (uint256 rate) public onlyOwner {
        state = SaleState.PublicSale;
        updateEthRate(rate);
        LogStateChange(state);
    }

    /*****
    * @dev Allow updating the ETH USD exchange rate
    * @param rate   uint256  the current ETH USD rate, multiplied by 1000
    * @return bool  Return true if successful
    */
    function updateEthRate (uint256 rate) public onlyOwner returns (bool) {
        require(rate >= 100000);
        
        ethRate = rate;
        return true;
    }

    /*****
    * @dev Allow updating the max gas price
    * @param _maxGasPrice   uint256  the maximum gas price for a transaction, in Gwei
    */
    function updateMaxGasPrice(uint256 _maxGasPrice) public onlyOwner {
        require(_maxGasPrice > 0);

        maxGasPrice = _maxGasPrice;
    }

    /*****
    * @dev Allows transfer of tokens to a recipient who has purchased offline, during the PublicSale
    * @param _recipient     address     The address of the recipient of the tokens
    * @param _tokens        uint256     The number of tokens purchased by the recipient
    * @return success       bool        Returns true if executed successfully
    */
    function offlineTransaction (address _recipient, uint256 _tokens) public onlyOwner returns (bool) {
        require(_tokens > 0);

        // Convert to a token with decimals 
        uint256 tokens = _tokens * (uint256(10) ** uint8(18));

        // if the number of tokens is greater than available, reject tx
        if (tokens >= getTokensAvailable()) {
            revert();
        }

        addToInvestor(_recipient, 0, tokens);

        // Increase the count of tokens purchased in the sale
        updateSaleParameters(tokens);

        LogTokenPurchase(msg.sender, _recipient, 0, tokens);

        return true;
    }

    /*****
    * @dev Called by the owner of the contract to finalize the ICO
    *      and redistribute funds (if any)
    */
    function finalizeSale () public onlyOwner {
        state = SaleState.Success;
        LogStateChange(state);

        // Transfer any ETH to one of the sale wallets
        if (this.balance > 0) {
            forwardFunds(this.balance);
        }
    }

    /*****
    * @dev Called by the owner of the contract to close the Sale and redistribute any crumbs.
    * @param recipient     address     The address of the recipient of the tokens
    */
    function closeSale (address recipient) public onlyOwner {
        state = SaleState.Closed;
        LogStateChange(state);

        // redistribute unsold tokens to DADI ecosystem
        uint256 remaining = getTokensAvailable();
        updateSaleParameters(remaining);

        if (remaining > 0) {
            token.transfer(recipient, remaining);
            LogRedistributeTokens(recipient, state, remaining);
        }
    }

    /*****
    * @dev Called by the owner of the contract to allow tokens to be distributed
    */
    function setTokenDistribution () public onlyOwner {
        state = SaleState.TokenDistribution;
        LogStateChange(state);
    }

    /*****
    * @dev Called by the owner of the contract to distribute tokens to investors
    * @param _address       address     The address of the investor for which to distribute tokens
    * @return success       bool        Returns true if executed successfully
    */
    function distributeTokens (address _address) public onlyOwner returns (bool) {
        require(state == SaleState.TokenDistribution);
        
        // get the tokens available for the investor
        uint256 tokens = investors[_address].tokens;
        require(tokens > 0);

        require(investors[_address].distributed == false);

        investors[_address].distributed = true;
        // investors[_address].tokens = 0;
        // investors[_address].contribution = 0;

        token.transfer(_address, tokens);
      
        LogTokenDistribution(_address, tokens);
        return true;
    }

    /*****
    * @dev Called by the owner of the contract to distribute tokens to investors who used a non-ERC20 wallet address
    * @param _purchaseAddress        address     The address the investor used to buy tokens
    * @param _tokenAddress           address     The address to send the tokens to
    * @return success                bool        Returns true if executed successfully
    */
    function distributeToAlternateAddress (address _purchaseAddress, address _tokenAddress) public onlyOwner returns (bool) {
        require(state == SaleState.TokenDistribution);
        
        // get the tokens available for the investor
        uint256 tokens = investors[_purchaseAddress].tokens;
        require(tokens > 0);

        require(investors[_purchaseAddress].distributed == false);

        investors[_purchaseAddress].distributed = true;

        token.transfer(_tokenAddress, tokens);
      
        LogTokenDistribution(_tokenAddress, tokens);
        return true;
    }

    /*****
    * @dev Called by the owner of the contract to redistribute tokens if an investor has been refunded offline
    * @param investorAddress         address     The address the investor used to buy tokens
    * @param recipient               address     The address to send the tokens to
    */
    function redistributeTokens (address investorAddress, address recipient) public onlyOwner {
        uint256 tokens = investors[investorAddress].tokens;
        require(tokens > 0);
        require(investors[investorAddress].distributed == false);
        
        // remove tokens, so they can't be redistributed
        // investors[investorAddress].tokens = 0;
        investors[investorAddress].distributed = true;
        token.transfer(recipient, tokens);

        LogRedistributeTokens(recipient, state, tokens);
    }

    /*****
    * @dev Get the amount of tokens left for purchase
    * @return uint256 the count of tokens available
    */
    function getTokensAvailable () public constant returns (uint256) {
        return tokenSupply - tokensPurchased;
    }

    /*****
    * @dev Get the total count of tokens purchased
    * @return uint256 the count of tokens purchased
    */
    function getTokensPurchased () public constant returns (uint256) {
        return tokensPurchased;
    }

    /*****
    * @dev Converts an amount sent in Wei to the equivalent in USD
    * @param _amount      uint256       the amount sent to the contract, in Wei
    * @return uint256  the amount sent to this contract, in USD
    */
    function ethToUsd (uint256 _amount) public constant returns (uint256) {
        return (_amount * ethRate) / (uint256(10) ** 18);
    }

    /*****
    * @dev Get count of contributors
    * @return uint     the number of unique contributors
    */
    function getInvestorCount () public constant returns (uint count) {
        return investorIndex.length;
    }

    /*****
    * @dev Get an investor
    * @param _address      address       the wallet address of the investor
    * @return uint256  the amount contributed by the user
    * @return uint256  the number of tokens assigned to the user
    * @return uint     the index of the user
    */
    function getInvestor (address _address) public constant returns (uint256 contribution, uint256 tokens, bool distributed, uint index) {
        require(isInvested(_address));
        return(investors[_address].contribution, investors[_address].tokens, investors[_address].distributed, investors[_address].index);
    }

    /*****
    * @dev Get a user's invested state
    * @param _address      address       the wallet address of the user
    * @return bool  true if the user has already contributed
    */
    function isInvested (address _address) internal constant returns (bool isIndeed) {
        if (investorIndex.length == 0) return false;
        return (investorIndex[investors[_address].index] == _address);
    }

    /*****
    * @dev Update a user's invested state
    * @param _address      address       the wallet address of the user
    * @param _value        uint256       the amount contributed in this transaction
    * @param _tokens       uint256       the number of tokens assigned in this transaction
    */
    function addToInvestor(address _address, uint256 _value, uint256 _tokens) internal {
        // add the user to the investorIndex if this is their first contribution
        if (!isInvested(_address)) {
            investors[_address].index = investorIndex.push(_address) - 1;
        }
      
        investors[_address].tokens = investors[_address].tokens.add(_tokens);
        investors[_address].contribution = investors[_address].contribution.add(_value);
        investors[_address].distributed = false;
    }

    /*****
    * @dev Send ether to the sale collection wallets
    */
    function forwardFunds (uint256 _value) internal {
        uint accountNumber;
        address account;

        // move funds to a random saleWallet
        if (saleWallets.length > 0) {
            accountNumber = getRandom(saleWallets.length) - 1;
            account = saleWallets[accountNumber];
            account.transfer(_value);
            LogFundTransfer(account, _value);
        }
    }

    /*****
    * @dev Internal function to assign tokens to the contributor
    * @param _address       address     The address of the contributing investor
    * @param _value         uint256     The amount invested 
    * @return success       bool        Returns true if executed successfully
    */
    function buyTokens (address _address, uint256 _value) internal returns (bool) {
        require(tx.gasprice <= maxGasPrice);

        require(isValidContribution(_address, _value));

        uint256 boughtTokens = calculateTokens(_value);
        require(boughtTokens != 0);

        // if the number of tokens calculated for the given value is 
        // greater than the tokens available, reject the payment
        require(boughtTokens <= getTokensAvailable());

        // update investor state
        addToInvestor(_address, _value, boughtTokens);

        forwardFunds(_value);

        updateSaleParameters(boughtTokens);

        LogTokenPurchase(msg.sender, _address, _value, boughtTokens);

        return true;
    }

    /*****
    * @dev Check that the amount sent in the transaction is below the individual cap
    * Factors in previous transactions by the same investor
    * @param _address         address     The address of the user making the transaction
    * @param _amount          uint256     The amount sent in the transaction
    * @return        bool        Returns true if the amount is valid
    */
    function isValidContribution (address _address, uint256 _amount) internal constant returns (bool valid) {
        return isBelowCap(_amount + investors[_address].contribution); 
    }

    /*****
    * @dev Check that the amount sent in the transaction is below the individual cap
    * @param _amount         uint256     The amount sent in the transaction
    * @return        bool        Returns true if the amount is below the individual cap
    */
    function isBelowCap (uint256 _amount) internal constant returns (bool) {
        return ethToUsd(_amount) < individualCap;
    }

    /*****
    * @dev Generates a random number from 1 to max based on the last block hash
    * @param max     uint  the maximum value 
    * @return a random number
    */
    function getRandom(uint max) internal constant returns (uint randomNumber) {
        return (uint(keccak256(block.blockhash(block.number - 1))) % max) + 1;
    }

    /*****
    * @dev Internal function to modify parameters based on tokens bought
    * @param _tokens        uint256     The number of tokens purchased
    */
    function updateSaleParameters (uint256 _tokens) internal {
        tokensPurchased = tokensPurchased.add(_tokens);
    }
}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"individualCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_wallet","type":"address"}],"name":"addSaleWallet","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"saleWallets","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"investorAddress","type":"address"},{"name":"recipient","type":"address"}],"name":"redistributeTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxGasPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"rate","type":"uint256"}],"name":"updateEthRate","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_maxGasPrice","type":"uint256"}],"name":"updateMaxGasPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"finalizeSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_purchaseAddress","type":"address"},{"name":"_tokenAddress","type":"address"}],"name":"distributeToAlternateAddress","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_amount","type":"uint256"}],"name":"calculateTokens","outputs":[{"name":"tokens","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"rate","type":"uint256"}],"name":"startPublicSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"}],"name":"closeSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"tokenPrice","outputs":[{"name":"","type":"uint256"}],"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":"_address","type":"address"}],"name":"getInvestor","outputs":[{"name":"contribution","type":"uint256"},{"name":"tokens","type":"uint256"},{"name":"distributed","type":"bool"},{"name":"index","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTokensPurchased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_amount","type":"uint256"}],"name":"ethToUsd","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getInvestorCount","outputs":[{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"setTokenDistribution","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_state","type":"uint256"}],"name":"setState","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTokensAvailable","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_address","type":"address"}],"name":"distributeTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"state","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensPurchased","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ethRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"},{"name":"_tokens","type":"uint256"}],"name":"offlineTransaction","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_token","type":"address"},{"name":"_tokenSupply","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"LogTokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"LogTokenDistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"recipient","type":"address"},{"indexed":false,"name":"_state","type":"uint8"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"LogRedistributeTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"wallet","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"LogFundTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"wallet","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"LogRefund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_state","type":"uint8"}],"name":"LogStateChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60606040526000600355624c4b406004556101f46005556000600b60006101000a81548160ff0219169083600581111561003557fe5b0217905550341561004557600080fd5b60405160408061260c83398101604052808051906020019091908051906020019091905050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156100e657600080fd5b600081141515156100f657600080fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a0a8102600281905550640df847580060078190555050506124ab806101616000396000f300606060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630276650b146101c657806308d9a77b146101ef5780631ccea71b146102405780633d1e215d146102a35780633de39c11146102fb5780633f6f7ed614610324578063481463411461035f57806358a687ec14610382578063616d1fab1461039757806371aa60fd1461040757806374817d9b1461043e5780637824407f14610461578063794913701461048a5780637ff9b596146104c35780638da5cb5b146104ec5780638f35a75e1461054157806391667aef146105a7578063946d1480146105d0578063960524e3146106075780639640639114610630578063a9e966b714610645578063aaa5ad6114610668578063b1d17c9814610691578063c19d93fb146106e2578063cc4d819c14610719578063d2d93f9014610742578063f2fde38b1461076b578063f54e7a40146107a4578063fc0c546a146107fe575b6000341415151561018557600080fd5b6001600581111561019257fe5b600b60009054906101000a900460ff1660058111156101ad57fe5b1415156101b957600080fd5b6101c33334610853565b50005b34156101d157600080fd5b6101d9610942565b6040518082815260200191505060405180910390f35b34156101fa57600080fd5b610226600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610948565b604051808215151515815260200191505060405180910390f35b341561024b57600080fd5b6102616004808035906020019091905050610a4d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156102ae57600080fd5b6102f9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a8c565b005b341561030657600080fd5b61030e610d78565b6040518082815260200191505060405180910390f35b341561032f57600080fd5b6103456004808035906020019091905050610d7e565b604051808215151515815260200191505060405180910390f35b341561036a57600080fd5b6103806004808035906020019091905050610dfd565b005b341561038d57600080fd5b610395610e71565b005b34156103a257600080fd5b6103ed600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610f87565b604051808215151515815260200191505060405180910390f35b341561041257600080fd5b6104286004808035906020019091905050611289565b6040518082815260200191505060405180910390f35b341561044957600080fd5b61045f60048080359060200190919050506112a7565b005b341561046c57600080fd5b610474611387565b6040518082815260200191505060405180910390f35b341561049557600080fd5b6104c1600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061138d565b005b34156104ce57600080fd5b6104d66115fc565b6040518082815260200191505060405180910390f35b34156104f757600080fd5b6104ff611602565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561054c57600080fd5b610578600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611627565b604051808581526020018481526020018315151515815260200182815260200194505050505060405180910390f35b34156105b257600080fd5b6105ba611769565b6040518082815260200191505060405180910390f35b34156105db57600080fd5b6105f16004808035906020019091905050611773565b6040518082815260200191505060405180910390f35b341561061257600080fd5b61061a611790565b6040518082815260200191505060405180910390f35b341561063b57600080fd5b61064361179d565b005b341561065057600080fd5b6106666004808035906020019091905050611872565b005b341561067357600080fd5b61067b611952565b6040518082815260200191505060405180910390f35b341561069c57600080fd5b6106c8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611960565b604051808215151515815260200191505060405180910390f35b34156106ed57600080fd5b6106f5611c61565b6040518082600581111561070557fe5b60ff16815260200191505060405180910390f35b341561072457600080fd5b61072c611c74565b6040518082815260200191505060405180910390f35b341561074d57600080fd5b610755611c7a565b6040518082815260200191505060405180910390f35b341561077657600080fd5b6107a2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611c80565b005b34156107af57600080fd5b6107e4600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611dd5565b604051808215151515815260200191505060405180910390f35b341561080957600080fd5b610811611ef1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000806007543a1115151561086757600080fd5b6108718484611f17565b151561087c57600080fd5b61088583611289565b90506000811415151561089757600080fd5b61089f611952565b81111515156108ad57600080fd5b6108b8848483611f6e565b6108c1836121bf565b6108ca816122d1565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ff370ff51765588b4b12b4ccf319b865dd3499a57df818acfe82c2740e41c878d8584604051808381526020018281526020019250505060405180910390a3600191505092915050565b60045481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156109a557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156109e157600080fd5b600880548060010182816109f5919061242e565b9160005260206000209001600084909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505060019050919050565b600881815481101515610a5c57fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ae957600080fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050600081111515610b3d57600080fd5b60001515600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff161515141515610b9f57600080fd5b6001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515610cc757600080fd5b6102c65a03f11515610cd857600080fd5b50505060405180519050507f8a1bda63f5f60920a84caac25ec9eb9f26a6c01e1682229db0268c5a5c92453482600b60009054906101000a900460ff1683604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836005811115610d5857fe5b60ff168152602001828152602001935050505060405180910390a1505050565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ddb57600080fd5b620186a08210151515610ded57600080fd5b8160068190555060019050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610e5857600080fd5b600081111515610e6757600080fd5b8060078190555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ecc57600080fd5b6003600b60006101000a81548160ff02191690836005811115610eeb57fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600b60009054906101000a900460ff1660405180826005811115610f3157fe5b60ff16815260200191505060405180910390a160003073ffffffffffffffffffffffffffffffffffffffff16311115610f8557610f843073ffffffffffffffffffffffffffffffffffffffff16316121bf565b5b565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610fe557600080fd5b60046005811115610ff257fe5b600b60009054906101000a900460ff16600581111561100d57fe5b14151561101957600080fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154905060008111151561106d57600080fd5b60001515600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff1615151415156110cf57600080fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156111f757600080fd5b6102c65a03f1151561120857600080fd5b50505060405180519050507f388b9f37b6cbb3a30ba34c69072e43e77eb3714381366d456e84dcd1430968678382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1600191505092915050565b6000600554600654830281151561129c57fe5b049050809050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561130257600080fd5b6001600b60006101000a81548160ff0219169083600581111561132157fe5b021790555061132f81610d7e565b507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600b60009054906101000a900460ff166040518082600581111561137157fe5b60ff16815260200191505060405180910390a150565b60025481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113ea57600080fd5b6005600b60006101000a81548160ff0219169083600581111561140957fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600b60009054906101000a900460ff166040518082600581111561144f57fe5b60ff16815260200191505060405180910390a161146a611952565b9050611475816122d1565b60008111156115f857600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561154b57600080fd5b6102c65a03f1151561155c57600080fd5b50505060405180519050507f8a1bda63f5f60920a84caac25ec9eb9f26a6c01e1682229db0268c5a5c92453482600b60009054906101000a900460ff1683604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018360058111156115dc57fe5b60ff168152602001828152602001935050505060405180910390a15b5050565b60055481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600080611636856122ef565b151561164157600080fd5b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff16600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015493509350935093509193509193565b6000600354905090565b60006012600a0a600654830281151561178857fe5b049050919050565b6000600a80549050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156117f857600080fd5b6004600b60006101000a81548160ff0219169083600581111561181757fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600b60009054906101000a900460ff166040518082600581111561185d57fe5b60ff16815260200191505060405180910390a1565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118cd57600080fd5b8060058111156118d957fe5b600b60006101000a81548160ff021916908360058111156118f657fe5b02179055507fc33408924c47a75c436c6caca09732b718f7c974a19cebe04dc816a990d0c174600b60009054906101000a900460ff166040518082600581111561193c57fe5b60ff16815260200191505060405180910390a150565b600060035460025403905090565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156119be57600080fd5b600460058111156119cb57fe5b600b60009054906101000a900460ff1660058111156119e657fe5b1415156119f257600080fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050600081111515611a4657600080fd5b60001515600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff161515141515611aa857600080fd5b6001600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1515611bd057600080fd5b6102c65a03f11515611be157600080fd5b50505060405180519050507f388b9f37b6cbb3a30ba34c69072e43e77eb3714381366d456e84dcd1430968678382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a16001915050919050565b600b60009054906101000a900460ff1681565b60035481565b60065481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611cdb57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611d1757600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e3357600080fd5b600083111515611e4257600080fd5b601260ff16600a0a83029050611e56611952565b81101515611e6357600080fd5b611e6f84600083611f6e565b611e78816122d1565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167ff370ff51765588b4b12b4ccf319b865dd3499a57df818acfe82c2740e41c878d600084604051808381526020018281526020019250505060405180910390a3600191505092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611f66600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015483016123ba565b905092915050565b611f77836122ef565b1515612029576001600a8054806001018281611f93919061242e565b9160005260206000209001600086909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555003600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055505b61207e81600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546123d090919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061211982600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546123d090919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055506000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff021916908315150217905550505050565b600080600060088054905011156122cc5760016121e06008805490506123f1565b0391506008828154811015156121f257fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050151561226057600080fd5b7f35c019e24e057e2b74358b61c59c75be70dc488b1c5f97fd5b9dfe58f6df04e88184604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b505050565b6122e6816003546123d090919063ffffffff16565b60038190555050565b600080600a80549050141561230757600090506123b5565b8173ffffffffffffffffffffffffffffffffffffffff16600a600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015481548110151561236f57fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161490505b919050565b60006004546123c883611773565b109050919050565b60008082840190508381101515156123e757600080fd5b8091505092915050565b6000600182600143034060405180826000191660001916815260200191505060405180910390206001900481151561242557fe5b06019050919050565b81548183558181151161245557818360005260206000209182019101612454919061245a565b5b505050565b61247c91905b80821115612478576000816000905550600101612460565b5090565b905600a165627a7a72305820f0f35fa61d76143be553ce4f4fe922e18e9ecdb73017b4b62d4493f816f4fe630029000000000000000000000000fb2f26f266fb2805a387230f2aa0a331b4d96fba0000000000000000000000000000000000000000000000000000000002faf080

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

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000fb2f26f266fb2805a387230f2aa0a331b4d96fba
Arg [1] : 0000000000000000000000000000000000000000000000000000000002faf080


   Swarm Source:
bzzr://f0f35fa61d76143be553ce4f4fe922e18e9ecdb73017b4b62d4493f816f4fe63

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.