Sponsored:   Color Platform: Decentralized App Store - Special Airdrop For Everyone (~17 Sep), Register NOW!
Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 282 txns
 Latest 25 txns From a total of 282 Transactions

TxHash Age From To Value [TxFee]
0xfdb788255e24e348c755a79285a9acd9ab2d65f6cd80136c164a7553226b07379 hrs 39 mins ago0x316f8bb71c1bbaf74c640d446adba0c038c02815  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710.375752 Ether0.000288132
0x48b5edf119ca6492d34002de005279406ecc318fde8deb9e2d6b939dca9298d31 day 13 hrs ago0xaf7338ecb3d1cd21bfe33203435c0cabd02a648b  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710.55 Ether0.000259128
0x9a7e44e240128e0b495067c4ef9aaa67a1de71c6e57fddb8f6a40f5b988c1ab01 day 13 hrs ago0xaf7338ecb3d1cd21bfe33203435c0cabd02a648b  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710.55 Ether0.000885354
0x9e6de3e8b054099670c36d965a215bb6481799f9fc58d27f4db16cd4728e448c1 day 13 hrs ago0xaf7338ecb3d1cd21bfe33203435c0cabd02a648b  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710.55 Ether0.001264945
0x989e36acfcfacf7113588b7f74e797dd47a03a7a8139a35948c8f392c1bd4c291 day 13 hrs ago0x0f8c20740d31d99484e625c8b5ea7bb5d18b122f  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d715 Ether0.001069728
0xbaf53ca49727aaa394d09411d3d9d6484a681f9fab8e67b652db4fb784aa30fa1 day 13 hrs ago0xaf7338ecb3d1cd21bfe33203435c0cabd02a648b  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710.55 Ether0.00114995
0xe0da7c9041151ded2451b4a8cbafbbe9234590b6780022d34853a5437f41ae531 day 13 hrs ago0xaf7338ecb3d1cd21bfe33203435c0cabd02a648b  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.00086944
0xe8b0292895b371f93a8a19b7b5f6268b21add6928b9b8c5de9e312fbab47faa41 day 13 hrs ago0xaf7338ecb3d1cd21bfe33203435c0cabd02a648b  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710.55 Ether0.000482979
0x0bc8df11f878a679b59c0220d0a1bcfc39d845ed7be2c6ece3748d289333f8e01 day 13 hrs ago0xaf7338ecb3d1cd21bfe33203435c0cabd02a648b  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710.55 Ether0.000275988
0x94b98c4fd5fe88c1a0c41810b0af29c818432d9805dbf08cb1ffd915daf413961 day 13 hrs ago0xaf7338ecb3d1cd21bfe33203435c0cabd02a648b  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710.55 Ether0.000275988
0xb0105d6233ddf1b792f77d3e28537e8c2466e6f5854b26efdedd968dd3a740f71 day 13 hrs ago0xc45a12d4151d012a133da631e5e34103b44d859c  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d712.5 Ether0.008585973
0x60ad00c36ed7ee82192bdd00058bf34bdcb2d4c30cb5b697063014bacb22a92e1 day 13 hrs ago0x4393be77f7b648caaa53e6c9d82dd6ac718496c7  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710.52 Ether0.00113454
0x24243385ab8bb2a760c7e3211bbd8d64e0a66340b47d3ceec9b636209b9972501 day 13 hrs ago0x2b0c60e2275df6db470fb87c0fe52b87cfb1134a  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d712 Ether0.00260181
0xb5b5bd8b76a2f9ae50fc6b3eddf92a28bdb48d6b3217f505cdac1d830be341ec1 day 13 hrs ago0x7fabbfb1eedc9ba4cb19a636b9664bb42c82d088  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d713.17 Ether0.00173454
0x4dfcf49eb6ddf070370809cc25e9bccab176ab2ffe352b121f5a509d313cad961 day 13 hrs ago0x4393be77f7b648caaa53e6c9d82dd6ac718496c7  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710.5 Ether0.000680724
0x46048d8b690ab2150c3cc0683cef3c16bf768c9f7d72ee41953d42fe5aeb0e3d1 day 14 hrs ago0x7e11ff506ade738a0122df8d447f69f6c06e67f6  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d711.2 Ether0.001928718
0xb39f0630d91e213b09578fe2fbf4f714c0adc6b167f902c2fe0d645076292e3a1 day 14 hrs ago0x2f98d0a68af28cbe2f23cab039d28fa390a7317e  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d713.2 Ether0.001069728
0x2e33f3551f5da0205be4309e540461e8d9256f828974fdc9e8fb93d0af7a1f671 day 14 hrs ago0xabbc37c6ba009f4657b702a2dcbaf1a60c650177  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d715.06279929 Ether0.001040724
0xb91c49c10f49a214636eee824e7e0c9add87d2596348eed67676d42b1fde4a031 day 14 hrs ago0x5619077a6deb11077d229e7ef80c4f82c5f9931f  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d711 Ether0.00260181
0x7b2fe0d9b62fa81328ef7f2213b857217481ae5fc94feb9d2d58f8d2013ed1e31 day 14 hrs ago0x3e5d3db474870e59f3a90f175c25d4519aca462e  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d711 Ether0.001069728
0xfd4793f52fdcef16f0116e1efa0daa73af56ad9ddc93701e38f332edd9ce7d301 day 14 hrs ago0x56edc107eec04b5584220d9440b75fbbd5f42531  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d712.6 Ether0.001040724
0x197066e1e46e36032c291e53cfcfd7a7428f7c35c7fe67c1c7b7c98267a806031 day 15 hrs ago0xcee01e0ab5f926be7f9467b62938d9546fcebf79  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710.633 Ether0.002439261
0x646be1e8aa8e4249ed02307683705579c69c23f3ea39a9587f2ac8e62dbaea4e1 day 15 hrs ago0x8b470694f988acf13996371099281edfe1ea0e1a  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d71111.5 Ether0.001821267
0x0717adc56cc7175e3ff6af15757092084a3d5affc7c14b8b5aa43348bb00f8e81 day 15 hrs ago0xb11df61b3508ac8bc6f1790383a75fa20bf720b1  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d711 Ether0.000709728
0xf4455f57be2a123947841cce401120810a1668856b877dad7a80a26234f6e56d1 day 15 hrs ago0xb11df61b3508ac8bc6f1790383a75fa20bf720b1  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d711 Ether0.000709728
[ 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
0x989e36acfcfacf7113588b7f74e797dd47a03a7a8139a35948c8f392c1bd4c2963668671 day 13 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b25 Ether
0xb0105d6233ddf1b792f77d3e28537e8c2466e6f5854b26efdedd968dd3a740f763667991 day 13 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b22.5 Ether
0x60ad00c36ed7ee82192bdd00058bf34bdcb2d4c30cb5b697063014bacb22a92e63667941 day 13 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b20.52 Ether
0x24243385ab8bb2a760c7e3211bbd8d64e0a66340b47d3ceec9b636209b99725063667781 day 13 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b22 Ether
0xb5b5bd8b76a2f9ae50fc6b3eddf92a28bdb48d6b3217f505cdac1d830be341ec63667561 day 13 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b23.17 Ether
0x4dfcf49eb6ddf070370809cc25e9bccab176ab2ffe352b121f5a509d313cad9663667441 day 13 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b20.5 Ether
0x46048d8b690ab2150c3cc0683cef3c16bf768c9f7d72ee41953d42fe5aeb0e3d63667381 day 14 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b21.2 Ether
0xb39f0630d91e213b09578fe2fbf4f714c0adc6b167f902c2fe0d645076292e3a63667281 day 14 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b23.2 Ether
0x2e33f3551f5da0205be4309e540461e8d9256f828974fdc9e8fb93d0af7a1f6763667171 day 14 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b25.06279929 Ether
0xb91c49c10f49a214636eee824e7e0c9add87d2596348eed67676d42b1fde4a0363666241 day 14 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b21 Ether
0x7b2fe0d9b62fa81328ef7f2213b857217481ae5fc94feb9d2d58f8d2013ed1e363665601 day 14 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b21 Ether
0xfd4793f52fdcef16f0116e1efa0daa73af56ad9ddc93701e38f332edd9ce7d3063665361 day 14 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b22.6 Ether
0x197066e1e46e36032c291e53cfcfd7a7428f7c35c7fe67c1c7b7c98267a8060363664941 day 15 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b20.633 Ether
0x646be1e8aa8e4249ed02307683705579c69c23f3ea39a9587f2ac8e62dbaea4e63664631 day 15 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b2111.5 Ether
0x0717adc56cc7175e3ff6af15757092084a3d5affc7c14b8b5aa43348bb00f8e863664521 day 15 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b21 Ether
0xf4455f57be2a123947841cce401120810a1668856b877dad7a80a26234f6e56d63664241 day 15 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b21 Ether
0x70c9624fb6b32175b9350234608a9ed0b1e9d3e2997c298c8132c6663c101cd063663861 day 15 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b21 Ether
0x641606f76e3342d398ccc9094add45d7440702ab8c4434e5475244c54938020c63663611 day 15 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b21 Ether
0x993d46d143596ef8c37d9e5bc68328f464995e7b38b27020ac161fb5c0667b2c63663541 day 15 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b22.3 Ether
0x906feaa508568115ffc54a4ac9d4be8820772f8d653b47a321aced1f0031b6d863662931 day 15 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b25.8 Ether
0xf3a766d04f48b7804cc68d97ed9c5ddfea6c9cca87e501dd9da424646337a03563662751 day 15 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b20.99749 Ether
0x382542d499f15da3431ab66c615ac900f920975e17a23e570f633f77141697bd63662691 day 15 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b21 Ether
0xa4d774c5ff8afcfe1bc296b88fb56b57b7dd821e04b19940e9bfdaff3548157e63662641 day 15 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b20.17 Ether
0x1c708f19ed66002c4bf7fb8e79503fd8bfc51cf54239a8ea4c18eb4650f1cf6b63662481 day 15 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b20.001 Ether
0xe5b9d65217061f90cc60faae8e727ec8f170e4d267715f83c3a8868fab53802563661541 day 16 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b22.998 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: TokenCrowdsale
Compiler Text: v0.4.24+commit.e67f0147
Optimization Enabled: Yes
Runs (Optimiser):  500



  Contract Source Code   Find Similiar Contracts

pragma solidity 0.4.24;

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol

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

// File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address _owner, address _spender)
    public view returns (uint256);

  function transferFrom(address _from, address _to, uint256 _value)
    public returns (bool);

  function approve(address _spender, uint256 _value) public returns (bool);
  event Approval(
    address indexed owner,
    address indexed spender,
    uint256 value
  );
}

// File: openzeppelin-solidity/contracts/ownership/Ownable.sol

/**
 * @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 OwnershipRenounced(address indexed previousOwner);
  event OwnershipTransferred(
    address indexed previousOwner,
    address indexed newOwner
  );


  /**
   * @dev The Ownable constructor sets the original `owner` of the contract to the sender
   * account.
   */
  constructor() 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 relinquish control of the contract.
   * @notice Renouncing to ownership will leave the contract without an owner.
   * It will not be possible to call the functions with the `onlyOwner`
   * modifier anymore.
   */
  function renounceOwnership() public onlyOwner {
    emit OwnershipRenounced(owner);
    owner = address(0);
  }

  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function transferOwnership(address _newOwner) public onlyOwner {
    _transferOwnership(_newOwner);
  }

  /**
   * @dev Transfers control of the contract to a newOwner.
   * @param _newOwner The address to transfer ownership to.
   */
  function _transferOwnership(address _newOwner) internal {
    require(_newOwner != address(0));
    emit OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
  }
}

// File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure.
 * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
  function safeTransfer(
    ERC20Basic _token,
    address _to,
    uint256 _value
  )
    internal
  {
    require(_token.transfer(_to, _value));
  }

  function safeTransferFrom(
    ERC20 _token,
    address _from,
    address _to,
    uint256 _value
  )
    internal
  {
    require(_token.transferFrom(_from, _to, _value));
  }

  function safeApprove(
    ERC20 _token,
    address _spender,
    uint256 _value
  )
    internal
  {
    require(_token.approve(_spender, _value));
  }
}

// File: openzeppelin-solidity/contracts/ownership/CanReclaimToken.sol

/**
 * @title Contracts that should be able to recover tokens
 * @author SylTi
 * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner.
 * This will prevent any accidental loss of tokens.
 */
contract CanReclaimToken is Ownable {
  using SafeERC20 for ERC20Basic;

  /**
   * @dev Reclaim all ERC20Basic compatible tokens
   * @param _token ERC20Basic The address of the token contract
   */
  function reclaimToken(ERC20Basic _token) external onlyOwner {
    uint256 balance = _token.balanceOf(this);
    _token.safeTransfer(owner, balance);
  }

}

// File: openzeppelin-solidity/contracts/ownership/HasNoTokens.sol

/**
 * @title Contracts that should not own Tokens
 * @author Remco Bloemen <[email protected]π.com>
 * @dev This blocks incoming ERC223 tokens to prevent accidental loss of tokens.
 * Should tokens (any ERC20Basic compatible) end up in the contract, it allows the
 * owner to reclaim the tokens.
 */
contract HasNoTokens is CanReclaimToken {

 /**
  * @dev Reject all ERC223 compatible tokens
  * @param _from address The address that is transferring the tokens
  * @param _value uint256 the amount of the specified token
  * @param _data Bytes The data passed from the caller.
  */
  function tokenFallback(
    address _from,
    uint256 _value,
    bytes _data
  )
    external
    pure
  {
    _from;
    _value;
    _data;
    revert();
  }

}

// File: openzeppelin-solidity/contracts/ownership/HasNoContracts.sol

/**
 * @title Contracts that should not own Contracts
 * @author Remco Bloemen <[email protected]π.com>
 * @dev Should contracts (anything Ownable) end up being owned by this contract, it allows the owner
 * of this contract to reclaim ownership of the contracts.
 */
contract HasNoContracts is Ownable {

  /**
   * @dev Reclaim ownership of Ownable contracts
   * @param _contractAddr The address of the Ownable to be reclaimed.
   */
  function reclaimContract(address _contractAddr) external onlyOwner {
    Ownable contractInst = Ownable(_contractAddr);
    contractInst.transferOwnership(owner);
  }
}

// File: openzeppelin-solidity/contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) {
    // Gas optimization: this is cheaper than asserting 'a' not being zero, but the
    // benefit is lost if 'b' is also tested.
    // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
    if (_a == 0) {
      return 0;
    }

    c = _a * _b;
    assert(c / _a == _b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 _a, uint256 _b) internal pure returns (uint256) {
    // assert(_b > 0); // Solidity automatically throws when dividing by 0
    // uint256 c = _a / _b;
    // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold
    return _a / _b;
  }

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

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

// File: openzeppelin-solidity/contracts/crowdsale/Crowdsale.sol

/**
 * @title Crowdsale
 * @dev Crowdsale is a base contract for managing a token crowdsale,
 * allowing investors to purchase tokens with ether. This contract implements
 * such functionality in its most fundamental form and can be extended to provide additional
 * functionality and/or custom behavior.
 * The external interface represents the basic interface for purchasing tokens, and conform
 * the base architecture for crowdsales. They are *not* intended to be modified / overridden.
 * The internal interface conforms the extensible and modifiable surface of crowdsales. Override
 * the methods to add functionality. Consider using 'super' where appropriate to concatenate
 * behavior.
 */
contract Crowdsale {
  using SafeMath for uint256;
  using SafeERC20 for ERC20;

  // The token being sold
  ERC20 public token;

  // Address where funds are collected
  address public wallet;

  // How many token units a buyer gets per wei.
  // The rate is the conversion between wei and the smallest and indivisible token unit.
  // So, if you are using a rate of 1 with a DetailedERC20 token with 3 decimals called TOK
  // 1 wei will give you 1 unit, or 0.001 TOK.
  uint256 public rate;

  // Amount of wei raised
  uint256 public weiRaised;

  /**
   * Event for token purchase logging
   * @param purchaser who paid for the tokens
   * @param beneficiary who got the tokens
   * @param value weis paid for purchase
   * @param amount amount of tokens purchased
   */
  event TokenPurchase(
    address indexed purchaser,
    address indexed beneficiary,
    uint256 value,
    uint256 amount
  );

  /**
   * @param _rate Number of token units a buyer gets per wei
   * @param _wallet Address where collected funds will be forwarded to
   * @param _token Address of the token being sold
   */
  constructor(uint256 _rate, address _wallet, ERC20 _token) public {
    require(_rate > 0);
    require(_wallet != address(0));
    require(_token != address(0));

    rate = _rate;
    wallet = _wallet;
    token = _token;
  }

  // -----------------------------------------
  // Crowdsale external interface
  // -----------------------------------------

  /**
   * @dev fallback function ***DO NOT OVERRIDE***
   */
  function () external payable {
    buyTokens(msg.sender);
  }

  /**
   * @dev low level token purchase ***DO NOT OVERRIDE***
   * @param _beneficiary Address performing the token purchase
   */
  function buyTokens(address _beneficiary) public payable {

    uint256 weiAmount = msg.value;
    _preValidatePurchase(_beneficiary, weiAmount);

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

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

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

    _updatePurchasingState(_beneficiary, weiAmount);

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

  // -----------------------------------------
  // Internal interface (extensible)
  // -----------------------------------------

  /**
   * @dev Validation of an incoming purchase. Use require statements to revert state when conditions are not met. Use `super` in contracts that inherit from Crowdsale to extend their validations.
   * Example from CappedCrowdsale.sol's _preValidatePurchase method: 
   *   super._preValidatePurchase(_beneficiary, _weiAmount);
   *   require(weiRaised.add(_weiAmount) <= cap);
   * @param _beneficiary Address performing the token purchase
   * @param _weiAmount Value in wei involved in the purchase
   */
  function _preValidatePurchase(
    address _beneficiary,
    uint256 _weiAmount
  )
    internal
  {
    require(_beneficiary != address(0));
    require(_weiAmount != 0);
  }

  /**
   * @dev Validation of an executed purchase. Observe state and use revert statements to undo rollback when valid conditions are not met.
   * @param _beneficiary Address performing the token purchase
   * @param _weiAmount Value in wei involved in the purchase
   */
  function _postValidatePurchase(
    address _beneficiary,
    uint256 _weiAmount
  )
    internal
  {
    // optional override
  }

  /**
   * @dev Source of tokens. Override this method to modify the way in which the crowdsale ultimately gets and sends its tokens.
   * @param _beneficiary Address performing the token purchase
   * @param _tokenAmount Number of tokens to be emitted
   */
  function _deliverTokens(
    address _beneficiary,
    uint256 _tokenAmount
  )
    internal
  {
    token.safeTransfer(_beneficiary, _tokenAmount);
  }

  /**
   * @dev Executed when a purchase has been validated and is ready to be executed. Not necessarily emits/sends tokens.
   * @param _beneficiary Address receiving the tokens
   * @param _tokenAmount Number of tokens to be purchased
   */
  function _processPurchase(
    address _beneficiary,
    uint256 _tokenAmount
  )
    internal
  {
    _deliverTokens(_beneficiary, _tokenAmount);
  }

  /**
   * @dev Override for extensions that require an internal state to check for validity (current user contributions, etc.)
   * @param _beneficiary Address receiving the tokens
   * @param _weiAmount Value in wei involved in the purchase
   */
  function _updatePurchasingState(
    address _beneficiary,
    uint256 _weiAmount
  )
    internal
  {
    // optional override
  }

  /**
   * @dev Override to extend the way in which ether is converted to tokens.
   * @param _weiAmount Value in wei to be converted into tokens
   * @return Number of tokens that can be purchased with the specified _weiAmount
   */
  function _getTokenAmount(uint256 _weiAmount)
    internal view returns (uint256)
  {
    return _weiAmount.mul(rate);
  }

  /**
   * @dev Determines how ETH is stored/forwarded on purchases.
   */
  function _forwardFunds() internal {
    wallet.transfer(msg.value);
  }
}

// File: openzeppelin-solidity/contracts/crowdsale/validation/IndividuallyCappedCrowdsale.sol

/**
 * @title IndividuallyCappedCrowdsale
 * @dev Crowdsale with per-user caps.
 */
contract IndividuallyCappedCrowdsale is Ownable, Crowdsale {
  using SafeMath for uint256;

  mapping(address => uint256) public contributions;
  mapping(address => uint256) public caps;

  /**
   * @dev Sets a specific user's maximum contribution.
   * @param _beneficiary Address to be capped
   * @param _cap Wei limit for individual contribution
   */
  function setUserCap(address _beneficiary, uint256 _cap) external onlyOwner {
    caps[_beneficiary] = _cap;
  }

  /**
   * @dev Sets a group of users' maximum contribution.
   * @param _beneficiaries List of addresses to be capped
   * @param _cap Wei limit for individual contribution
   */
  function setGroupCap(
    address[] _beneficiaries,
    uint256 _cap
  )
    external
    onlyOwner
  {
    for (uint256 i = 0; i < _beneficiaries.length; i++) {
      caps[_beneficiaries[i]] = _cap;
    }
  }

  /**
   * @dev Returns the cap of a specific user.
   * @param _beneficiary Address whose cap is to be checked
   * @return Current cap for individual user
   */
  function getUserCap(address _beneficiary) public view returns (uint256) {
    return caps[_beneficiary];
  }

  /**
   * @dev Returns the amount contributed so far by a sepecific user.
   * @param _beneficiary Address of contributor
   * @return User contribution so far
   */
  function getUserContribution(address _beneficiary)
    public view returns (uint256)
  {
    return contributions[_beneficiary];
  }

  /**
   * @dev Extend parent behavior requiring purchase to respect the user's funding cap.
   * @param _beneficiary Token purchaser
   * @param _weiAmount Amount of wei contributed
   */
  function _preValidatePurchase(
    address _beneficiary,
    uint256 _weiAmount
  )
    internal
  {
    super._preValidatePurchase(_beneficiary, _weiAmount);
    require(contributions[_beneficiary].add(_weiAmount) <= caps[_beneficiary]);
  }

  /**
   * @dev Extend parent behavior to update user contributions
   * @param _beneficiary Token purchaser
   * @param _weiAmount Amount of wei contributed
   */
  function _updatePurchasingState(
    address _beneficiary,
    uint256 _weiAmount
  )
    internal
  {
    super._updatePurchasingState(_beneficiary, _weiAmount);
    contributions[_beneficiary] = contributions[_beneficiary].add(_weiAmount);
  }

}

// File: openzeppelin-solidity/contracts/crowdsale/validation/CappedCrowdsale.sol

/**
 * @title CappedCrowdsale
 * @dev Crowdsale with a limit for total contributions.
 */
contract CappedCrowdsale is Crowdsale {
  using SafeMath for uint256;

  uint256 public cap;

  /**
   * @dev Constructor, takes maximum amount of wei accepted in the crowdsale.
   * @param _cap Max amount of wei to be contributed
   */
  constructor(uint256 _cap) public {
    require(_cap > 0);
    cap = _cap;
  }

  /**
   * @dev Checks whether the cap has been reached.
   * @return Whether the cap was reached
   */
  function capReached() public view returns (bool) {
    return weiRaised >= cap;
  }

  /**
   * @dev Extend parent behavior requiring purchase to respect the funding cap.
   * @param _beneficiary Token purchaser
   * @param _weiAmount Amount of wei contributed
   */
  function _preValidatePurchase(
    address _beneficiary,
    uint256 _weiAmount
  )
    internal
  {
    super._preValidatePurchase(_beneficiary, _weiAmount);
    require(weiRaised.add(_weiAmount) <= cap);
  }

}

// File: openzeppelin-solidity/contracts/crowdsale/validation/TimedCrowdsale.sol

/**
 * @title TimedCrowdsale
 * @dev Crowdsale accepting contributions only within a time frame.
 */
contract TimedCrowdsale is Crowdsale {
  using SafeMath for uint256;

  uint256 public openingTime;
  uint256 public closingTime;

  /**
   * @dev Reverts if not in crowdsale time range.
   */
  modifier onlyWhileOpen {
    // solium-disable-next-line security/no-block-members
    require(block.timestamp >= openingTime && block.timestamp <= closingTime);
    _;
  }

  /**
   * @dev Constructor, takes crowdsale opening and closing times.
   * @param _openingTime Crowdsale opening time
   * @param _closingTime Crowdsale closing time
   */
  constructor(uint256 _openingTime, uint256 _closingTime) public {
    // solium-disable-next-line security/no-block-members
    require(_openingTime >= block.timestamp);
    require(_closingTime >= _openingTime);

    openingTime = _openingTime;
    closingTime = _closingTime;
  }

  /**
   * @dev Checks whether the period in which the crowdsale is open has already elapsed.
   * @return Whether crowdsale period has elapsed
   */
  function hasClosed() public view returns (bool) {
    // solium-disable-next-line security/no-block-members
    return block.timestamp > closingTime;
  }

  /**
   * @dev Extend parent behavior requiring to be within contributing period
   * @param _beneficiary Token purchaser
   * @param _weiAmount Amount of wei contributed
   */
  function _preValidatePurchase(
    address _beneficiary,
    uint256 _weiAmount
  )
    internal
    onlyWhileOpen
  {
    super._preValidatePurchase(_beneficiary, _weiAmount);
  }

}

// File: openzeppelin-solidity/contracts/crowdsale/emission/AllowanceCrowdsale.sol

/**
 * @title AllowanceCrowdsale
 * @dev Extension of Crowdsale where tokens are held by a wallet, which approves an allowance to the crowdsale.
 */
contract AllowanceCrowdsale is Crowdsale {
  using SafeMath for uint256;
  using SafeERC20 for ERC20;

  address public tokenWallet;

  /**
   * @dev Constructor, takes token wallet address.
   * @param _tokenWallet Address holding the tokens, which has approved allowance to the crowdsale
   */
  constructor(address _tokenWallet) public {
    require(_tokenWallet != address(0));
    tokenWallet = _tokenWallet;
  }

  /**
   * @dev Checks the amount of tokens left in the allowance.
   * @return Amount of tokens left in the allowance
   */
  function remainingTokens() public view returns (uint256) {
    return token.allowance(tokenWallet, this);
  }

  /**
   * @dev Overrides parent behavior by transferring tokens from wallet.
   * @param _beneficiary Token purchaser
   * @param _tokenAmount Amount of tokens purchased
   */
  function _deliverTokens(
    address _beneficiary,
    uint256 _tokenAmount
  )
    internal
  {
    token.safeTransferFrom(tokenWallet, _beneficiary, _tokenAmount);
  }
}

// File: contracts/crowdsale/distribution/PostDeliveryCrowdsale.sol

/**
 * @title PostDeliveryCrowdsale
 * @dev Crowdsale that locks tokens from withdrawal until it ends.
 */
contract PostDeliveryCrowdsale is TimedCrowdsale {
  using SafeMath for uint256;

  mapping(address => uint256) public balances;

  /// @dev Withdraw tokens only after crowdsale ends.
  function withdrawTokens() public {
    _withdrawTokens(msg.sender);
  }

  /**
   * @dev Withdraw tokens only after crowdsale ends.
   * @param _beneficiary Token purchaser
   */
  function _withdrawTokens(address _beneficiary) internal {
    require(hasClosed(), "Crowdsale not closed.");
    uint256 amount = balances[_beneficiary];
    require(amount > 0, "Beneficiary has zero balance.");
    balances[_beneficiary] = 0;
    _deliverTokens(_beneficiary, amount);
  }

  /**
   * @dev Overrides parent by storing balances instead of issuing tokens right away.
   * @param _beneficiary Token purchaser
   * @param _tokenAmount Amount of tokens purchased
   */
  function _processPurchase(
    address _beneficiary,
    uint256 _tokenAmount
  )
    internal
  {
    balances[_beneficiary] = balances[_beneficiary].add(_tokenAmount);
  }

}

// File: contracts/TokenCrowdsale.sol

/**
 * @title TokenCrowdsale
 * @dev This is a ERC20 token crowdsale that will sell tokens util
 * the cap is reached, time expired or the allowance is spent.
 */
// solium-disable-next-line
contract TokenCrowdsale
  is
    HasNoTokens,
    HasNoContracts,
    TimedCrowdsale,
    CappedCrowdsale,
    IndividuallyCappedCrowdsale,
    PostDeliveryCrowdsale,
    AllowanceCrowdsale
{

  // When withdrawals open
  uint256 public withdrawTime;

  // Amount of tokens sold
  uint256 public tokensSold;

  // Amount of tokens delivered
  uint256 public tokensDelivered;

  constructor(
    uint256 _rate,
    address _wallet,
    ERC20 _token,
    address _tokenWallet,
    uint256 _cap,
    uint256 _openingTime,
    uint256 _closingTime,
    uint256 _withdrawTime
  )
    public
    Crowdsale(_rate, _wallet, _token)
    TimedCrowdsale(_openingTime, _closingTime)
    CappedCrowdsale(_cap)
    AllowanceCrowdsale(_tokenWallet)
  {
    require(_withdrawTime >= _closingTime, "Withdrawals should open after crowdsale closes.");
    withdrawTime = _withdrawTime;
  }

  /**
   * @dev Checks whether the period in which the crowdsale is open
   * has already elapsed or cap was reached.
   * @return Whether crowdsale has ended
   */
  function hasEnded() public view returns (bool) {
    return hasClosed() || capReached();
  }

  /**
   * @dev Withdraw tokens only after crowdsale ends.
   * @param _beneficiary Token purchaser
   */
  function withdrawTokens(address _beneficiary) public {
    _withdrawTokens(_beneficiary);
  }

  /**
   * @dev Withdraw tokens only after crowdsale ends.
   * @param _beneficiaries List of token purchasers
   */
  function withdrawTokens(address[] _beneficiaries) public {
    for (uint32 i = 0; i < _beneficiaries.length; i ++) {
      _withdrawTokens(_beneficiaries[i]);
    }
  }

  /**
   * @dev We use this function to store the total amount of tokens sold
   * @param _beneficiary Token purchaser
   * @param _tokenAmount Amount of tokens purchased
   */
  function _processPurchase(
    address _beneficiary,
    uint256 _tokenAmount
  )
    internal
  {
    super._processPurchase(_beneficiary, _tokenAmount);
    tokensSold = tokensSold.add(_tokenAmount);
  }

  /**
   * @dev We use this function to store the total amount of tokens delivered
   * @param _beneficiary Address performing the token purchase
   * @param _tokenAmount Number of tokens to be emitted
   */
  function _deliverTokens(
    address _beneficiary,
    uint256 _tokenAmount
  )
    internal
  {
    super._deliverTokens(_beneficiary, _tokenAmount);
    tokensDelivered = tokensDelivered.add(_tokenAmount);
  }

  /**
   * @dev Withdraw tokens only after crowdsale ends.
   * @param _beneficiary Token purchaser
   */
  function _withdrawTokens(address _beneficiary) internal {
    // solium-disable-next-line security/no-block-members
    require(block.timestamp > withdrawTime, "Withdrawals not open.");
    super._withdrawTokens(_beneficiary);
  }

}

    Contract ABI  
[{"constant":true,"inputs":[],"name":"tokensDelivered","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"hasClosed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"reclaimToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"balances","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_contractAddr","type":"address"}],"name":"reclaimContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"contributions","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"withdrawTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"withdrawTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"closingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"capReached","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiaries","type":"address[]"}],"name":"withdrawTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"caps","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"getUserCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiaries","type":"address[]"},{"name":"_cap","type":"uint256"}],"name":"setGroupCap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"openingTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"getUserContribution","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"remainingTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokenWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_from","type":"address"},{"name":"_value","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"tokenFallback","outputs":[],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_cap","type":"uint256"}],"name":"setUserCap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"hasEnded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_rate","type":"uint256"},{"name":"_wallet","type":"address"},{"name":"_token","type":"address"},{"name":"_tokenWallet","type":"address"},{"name":"_cap","type":"uint256"},{"name":"_openingTime","type":"uint256"},{"name":"_closingTime","type":"uint256"},{"name":"_withdrawTime","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":"amount","type":"uint256"}],"name":"TokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","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
608060405234801561001057600080fd5b506040516101008061127883398101604090815281516020830151918301516060840151608085015160a086015160c087015160e09097015160008054600160a060020a03191633178155959794959394929391929185908590859085908c908c908c90831161007f57600080fd5b600160a060020a038216151561009457600080fd5b600160a060020a03811615156100a957600080fd5b60039290925560028054600160a060020a03928316600160a060020a03199182161790915560018054929093169116179055428210156100e857600080fd5b818110156100f557600080fd5b6005919091556006556000811161010b57600080fd5b600755600160a060020a038116151561012357600080fd5b600b8054600160a060020a031916600160a060020a0392909216919091179055818110156101d857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f5769746864726177616c732073686f756c64206f70656e20616674657220637260448201527f6f776473616c6520636c6f7365732e0000000000000000000000000000000000606482015290519081900360840190fd5b600c5550505050505050611087806101f16000396000f3006080604052600436106101955763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041663095272aa81146101a05780631515bc2b146101c757806317ffc320146101f057806327e235e3146102115780632aed7f3f146102325780632c4e722e14610253578063355274ea146102685780634042b66f1461027d57806342e94c901461029257806345cb3dde146102b357806349df728c146102c85780634b6753bc146102e95780634f935945146102fe578063518ab2a814610313578063521eb273146103285780635ecb16cd1461035957806366d97b21146103ae578063715018a6146103cf5780638b58c64c146103e45780638d8f2adb146104055780638da5cb5b1461041a578063a31f61fc1461042f578063b7a8807c14610453578063bb8b2b4714610468578063bf58390314610489578063bff99c6c1461049e578063c0ee0b8a146104b3578063c3143fe5146104e4578063ec8ac4d814610508578063ecb70fb71461051c578063f2fde38b14610531578063fc0c546a14610552575b61019e33610567565b005b3480156101ac57600080fd5b506101b5610609565b60408051918252519081900360200190f35b3480156101d357600080fd5b506101dc61060f565b604080519115158252519081900360200190f35b3480156101fc57600080fd5b5061019e600160a060020a0360043516610617565b34801561021d57600080fd5b506101b5600160a060020a03600435166106e3565b34801561023e57600080fd5b5061019e600160a060020a03600435166106f5565b34801561025f57600080fd5b506101b561078f565b34801561027457600080fd5b506101b5610795565b34801561028957600080fd5b506101b561079b565b34801561029e57600080fd5b506101b5600160a060020a03600435166107a1565b3480156102bf57600080fd5b506101b56107b3565b3480156102d457600080fd5b5061019e600160a060020a03600435166107b9565b3480156102f557600080fd5b506101b56107c5565b34801561030a57600080fd5b506101dc6107cb565b34801561031f57600080fd5b506101b56107d6565b34801561033457600080fd5b5061033d6107dc565b60408051600160a060020a039092168252519081900360200190f35b34801561036557600080fd5b506040805160206004803580820135838102808601850190965280855261019e953695939460249493850192918291850190849080828437509497506107eb9650505050505050565b3480156103ba57600080fd5b506101b5600160a060020a036004351661082b565b3480156103db57600080fd5b5061019e61083d565b3480156103f057600080fd5b506101b5600160a060020a03600435166108a9565b34801561041157600080fd5b5061019e6108c4565b34801561042657600080fd5b5061033d6108cf565b34801561043b57600080fd5b5061019e6024600480358281019291013590356108de565b34801561045f57600080fd5b506101b5610944565b34801561047457600080fd5b506101b5600160a060020a036004351661094a565b34801561049557600080fd5b506101b5610965565b3480156104aa57600080fd5b5061033d610a0a565b3480156104bf57600080fd5b5061019e60048035600160a060020a0316906024803591604435918201910135610a19565b3480156104f057600080fd5b5061019e600160a060020a0360043516602435610a1e565b61019e600160a060020a0360043516610567565b34801561052857600080fd5b506101dc610a51565b34801561053d57600080fd5b5061019e600160a060020a0360043516610a6e565b34801561055e57600080fd5b5061033d610a8e565b3460006105748383610a9d565b61057d82610ae7565b600454909150610593908363ffffffff610b0416565b6004556105a08382610b11565b60408051838152602081018390528151600160a060020a0386169233927f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18929081900390910190a36105f28383610b35565b6105fa610b88565b61060483836106df565b505050565b600e5481565b600654421190565b60008054600160a060020a0316331461062f57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b15801561069057600080fd5b505af11580156106a4573d6000803e3d6000fd5b505050506040513d60208110156106ba57600080fd5b50516000549091506106df90600160a060020a0384811691168363ffffffff610bc116565b5050565b600a6020526000908152604090205481565b60008054600160a060020a0316331461070d57600080fd5b5060008054604080517ff2fde38b000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152905184939284169263f2fde38b926024808201939182900301818387803b15801561077357600080fd5b505af1158015610787573d6000803e3d6000fd5b505050505050565b60035481565b60075481565b60045481565b60086020526000908152604090205481565b600c5481565b6107c281610c74565b50565b60065481565b600754600454101590565b600d5481565b600254600160a060020a031681565b60005b81518163ffffffff1610156106df57610823828263ffffffff1681518110151561081457fe5b90602001906020020151610c74565b6001016107ee565b60096020526000908152604090205481565b600054600160a060020a0316331461085457600080fd5b60008054604051600160a060020a03909116917ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482091a26000805473ffffffffffffffffffffffffffffffffffffffff19169055565b600160a060020a031660009081526009602052604090205490565b6108cd33610c74565b565b600054600160a060020a031681565b60008054600160a060020a031633146108f657600080fd5b5060005b8281101561093e57816009600086868581811061091357fe5b60209081029290920135600160a060020a0316835250810191909152604001600020556001016108fa565b50505050565b60055481565b600160a060020a031660009081526008602052604090205490565b600154600b54604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152600160a060020a0392831660048201523060248201529051600093929092169163dd62ed3e9160448082019260209290919082900301818787803b1580156109d957600080fd5b505af11580156109ed573d6000803e3d6000fd5b505050506040513d6020811015610a0357600080fd5b5051905090565b600b54600160a060020a031681565b600080fd5b600054600160a060020a03163314610a3557600080fd5b600160a060020a03909116600090815260096020526040902055565b6000610a5b61060f565b80610a695750610a696107cb565b905090565b600054600160a060020a03163314610a8557600080fd5b6107c281610ced565b600154600160a060020a031681565b610aa78282610d6a565b600160a060020a038216600090815260096020908152604080832054600890925290912054610adc908363ffffffff610b0416565b11156106df57600080fd5b6000610afe60035483610d8a90919063ffffffff16565b92915050565b81810182811015610afe57fe5b610b1b8282610db3565b600d54610b2e908263ffffffff610b0416565b600d555050565b610b3f82826106df565b600160a060020a038216600090815260086020526040902054610b68908263ffffffff610b0416565b600160a060020a0390921660009081526008602052604090209190915550565b600254604051600160a060020a03909116903480156108fc02916000818181858888f193505050501580156107c2573d6000803e3d6000fd5b82600160a060020a031663a9059cbb83836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610c3d57600080fd5b505af1158015610c51573d6000803e3d6000fd5b505050506040513d6020811015610c6757600080fd5b5051151561060457600080fd5b600c544211610ce457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5769746864726177616c73206e6f74206f70656e2e0000000000000000000000604482015290519081900360640190fd5b6107c281610dfc565b600160a060020a0381161515610d0257600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b610d748282610f1e565b600754600454610adc908363ffffffff610b0416565b6000821515610d9b57506000610afe565b50818102818382811515610dab57fe5b0414610afe57fe5b600160a060020a0382166000908152600a6020526040902054610ddc908263ffffffff610b0416565b600160a060020a039092166000908152600a602052604090209190915550565b6000610e0661060f565b1515610e7357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f43726f776473616c65206e6f7420636c6f7365642e0000000000000000000000604482015290519081900360640190fd5b50600160a060020a0381166000908152600a6020526040812054908111610efb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f42656e656669636961727920686173207a65726f2062616c616e63652e000000604482015290519081900360640190fd5b600160a060020a0382166000908152600a60205260408120556106df8282610f47565b6005544210158015610f3257506006544211155b1515610f3d57600080fd5b6106df8282610f6b565b610f518282610f8c565b600e54610f64908263ffffffff610b0416565b600e555050565b600160a060020a0382161515610f8057600080fd5b8015156106df57600080fd5b600b546001546106df91600160a060020a039182169116848463ffffffff610fb016565b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a0385811660048301528481166024830152604482018490529151918616916323b872dd916064808201926020929091908290030181600087803b15801561102457600080fd5b505af1158015611038573d6000803e3d6000fd5b505050506040513d602081101561104e57600080fd5b5051151561093e57600080fd00a165627a7a7230582022af614e1c7d8639a7cae154729baf81dd8986a4300f36b90d5f1a2868033d2600290000000000000000000000000000000000000000000000000000000000001aee000000000000000000000000cd5fb5d52ead04eb8349befa27cc935d931350b2000000000000000000000000d07d9fe2d2cc067015e2b4917d24933804f42cfa0000000000000000000000006a78420bf9e37d112e16e26d81a9c51896cd1a6c0000000000000000000000000000000000000000000003a785b6c86068f7c600000000000000000000000000000000000000000000000000000000005b9d1060000000000000000000000000000000000000000000000000000000005ba3a7e0000000000000000000000000000000000000000000000000000000005bb0d6e0

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

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000001aee
Arg [1] : 000000000000000000000000cd5fb5d52ead04eb8349befa27cc935d931350b2
Arg [2] : 000000000000000000000000d07d9fe2d2cc067015e2b4917d24933804f42cfa
Arg [3] : 0000000000000000000000006a78420bf9e37d112e16e26d81a9c51896cd1a6c
Arg [4] : 0000000000000000000000000000000000000000000003a785b6c86068f7c600
Arg [5] : 000000000000000000000000000000000000000000000000000000005b9d1060
Arg [6] : 000000000000000000000000000000000000000000000000000000005ba3a7e0
Arg [7] : 000000000000000000000000000000000000000000000000000000005bb0d6e0


   Swarm Source:
bzzr://22af614e1c7d8639a7cae154729baf81dd8986a4300f36b90d5f1a2868033d26

 

View All
Block Age transaction Difficulty 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.