Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 327 txns
Misc:
Address Watch: Add To Watch List
Contract Creator: 0x6a78420bf9e37d112e16e26d81a9c51896cd1a6cat txn 0x60902a53c38e1c3f3cde1ed0f8c4504c3eb9e1e9e48bf410f7c6b9fafa827bbb
 Latest 25 transactions from a total of 327 transactions

TxHash Age From To Value [TxFee]
0xb05dd847bc5922fb1e1acd1caad41ab0b4f6fcd80c373df6cf5f85fbbb86f75112 days 14 hrs ago0xcf917d46dc63c842b127d9501a42721ed153acbb  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0xd3aca66b151a9371f9a56c3f50c5ab676d91d713eca9012a01b7117a86adee1023 days 11 hrs ago0xda28ca49a432f74517d23ecd2821270ba49418b8  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.00043188
0x18f030e20b63a0966d9b886b38fd6ad8a73925d8652bca0b8742ece4ec1acc0c23 days 11 hrs ago0xda28ca49a432f74517d23ecd2821270ba49418b8  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000453474
0x76fef921e16c805bc1baab4af1272120f2a0dbb3e46ecc661b75f46a47f7bb1d23 days 11 hrs ago0xda28ca49a432f74517d23ecd2821270ba49418b8  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.00032391
0x216b3121c0f8aa79de88e03f57039a94f26d6c7b1762abab456e18bb610b9dda46 days 3 hrs ago0x6a9d63cbb02b6a7d5d09ce11d0a4b981bb1a221d  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0xef1a08c084ceb2255406cfda86b8ee6595e685104d478a8ada08bc4214cc475949 days 19 hrs ago0x514aebb76696cb40cb265e6c93653a1fc2ff025e  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0x957a989e398bdd521ef31d3e79dad512e8149a37a4d2f8d80bb36439be947bbc50 days 12 hrs ago0x553c89b3239a8e1d61b493765aae2c2657c6cb23  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000371895
0x2a3822f0f564efc40167fc6aff3ab1c863d86b2ff20b5835b494a74c19b27ab150 days 12 hrs ago0x553c89b3239a8e1d61b493765aae2c2657c6cb23  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0x6e8fae22065cefc432b99b927ba986d7eda3948f851d5b89b935d78f9066fff150 days 13 hrs ago0xd1ff2fb703cc424b05ab14b7eaf614178dc1f396  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0xb688720a5aa344e109ed247c19e70a15d1b0629a3d6d1d969c38b44295df6f0d50 days 19 hrs ago0x87c53e4d38e75ca7f47b8769855402558b57d55a  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0x98e2c7ef6f496533c1ea363ff5283348a0eaf7552c058790c93a11e0f7a2deb750 days 19 hrs ago0x87c53e4d38e75ca7f47b8769855402558b57d55a  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0xadcd3a9eb4be5b637bc575fdc737dafe2e8de92fe2e5c58a57f230cb215724b350 days 19 hrs ago0x87c53e4d38e75ca7f47b8769855402558b57d55a  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0xfa3c9c95c59a3f5a5746bb6159e5dd781826076de44c47ed046fb8a5cde7462d51 days 7 hrs ago0xd1ff2fb703cc424b05ab14b7eaf614178dc1f396  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0x1540fa0e078917fcd3c3fccb17c22d4cb83d73759d91617c99ef68220472a70251 days 13 hrs ago0xd1ff2fb703cc424b05ab14b7eaf614178dc1f396  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0xc83cc282d2260e2fa70d23be6a893f19aa2c9a5abdebf534db30c67253f200ca51 days 13 hrs ago0xd1ff2fb703cc424b05ab14b7eaf614178dc1f396  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0x1654bfe2d7f541b58aad924a7406a6257527add9002c6c2581c929c10609e0a951 days 13 hrs ago0xd1ff2fb703cc424b05ab14b7eaf614178dc1f396  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0x05ee0c46543a6f5181e52d207ccaf0ed5701b67847511a65ec43e8449b53b73651 days 13 hrs ago0xd1ff2fb703cc424b05ab14b7eaf614178dc1f396  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0x35f121a3573a38d17f9df1cec06309c9068064d1586bc552fe5c6099412f46b152 days 3 hrs ago0x669fb697bde63d248ec18a1f5bbe0746d05f5863  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0x3eaf18b751d53384a4dbd01761d98b7ec2c590352e34735dd569f33bfd6218c552 days 10 hrs ago0x585c4c6c884c3c01208f1d4ff397aa0bd01244a1  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0x146a2b3308ea368611a272b74ad388bf1a26ca3606267345eba930f22dac4c2952 days 10 hrs ago0x585c4c6c884c3c01208f1d4ff397aa0bd01244a1  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0x05c45e3b6f038a5d9cc570626706c4fbad29b5b4e92b9b84df037889094fbe9952 days 15 hrs ago0x216c0d426c1c213a23b4bbf16527b7c1f4a1332c  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0xefc8eaf33487202f7527108bedd86c7af00d6b59088e1319a2b35d1c54d6106952 days 15 hrs ago0x216c0d426c1c213a23b4bbf16527b7c1f4a1332c  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0x55c7f43d6b053d89de6a1893237d7d77e634007cce55abc3389b63624b20b16752 days 16 hrs ago0xa7826bb3ffd9628625ca99ad25d2bdc6bf4570f0  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0x81077de21264a87e767566cd928c828ebb7c0c0a69ee2ec1cd877831a3ae78fa52 days 18 hrs ago0x4a2deb9f7cddcf900cc8ad41c08a3eaab8723cfc  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
0xe7e436b0fbad7b1b265dddd4349b489a30dab9d214cd4f19f77165b7071bef1c52 days 19 hrs ago0xc3dc15e1daae17df91a9ecd6fd07374980a7d78c  IN   0x1d4f65aa1aea481692671aef59937ce5574c3d710 Ether0.000297516
[ 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
0x989e36acfcfacf7113588b7f74e797dd47a03a7a8139a35948c8f392c1bd4c29636686762 days 20 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b25 Ether
0xb0105d6233ddf1b792f77d3e28537e8c2466e6f5854b26efdedd968dd3a740f7636679962 days 21 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b22.5 Ether
0x60ad00c36ed7ee82192bdd00058bf34bdcb2d4c30cb5b697063014bacb22a92e636679462 days 21 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b20.52 Ether
0x24243385ab8bb2a760c7e3211bbd8d64e0a66340b47d3ceec9b636209b997250636677862 days 21 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b22 Ether
0xb5b5bd8b76a2f9ae50fc6b3eddf92a28bdb48d6b3217f505cdac1d830be341ec636675662 days 21 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b23.17 Ether
0x4dfcf49eb6ddf070370809cc25e9bccab176ab2ffe352b121f5a509d313cad96636674462 days 21 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b20.5 Ether
0x46048d8b690ab2150c3cc0683cef3c16bf768c9f7d72ee41953d42fe5aeb0e3d636673862 days 21 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b21.2 Ether
0xb39f0630d91e213b09578fe2fbf4f714c0adc6b167f902c2fe0d645076292e3a636672862 days 21 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b23.2 Ether
0x2e33f3551f5da0205be4309e540461e8d9256f828974fdc9e8fb93d0af7a1f67636671762 days 21 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b25.06279929 Ether
0xb91c49c10f49a214636eee824e7e0c9add87d2596348eed67676d42b1fde4a03636662462 days 21 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b21 Ether
0x7b2fe0d9b62fa81328ef7f2213b857217481ae5fc94feb9d2d58f8d2013ed1e3636656062 days 22 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b21 Ether
0xfd4793f52fdcef16f0116e1efa0daa73af56ad9ddc93701e38f332edd9ce7d30636653662 days 22 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b22.6 Ether
0x197066e1e46e36032c291e53cfcfd7a7428f7c35c7fe67c1c7b7c98267a80603636649462 days 22 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b20.633 Ether
0x646be1e8aa8e4249ed02307683705579c69c23f3ea39a9587f2ac8e62dbaea4e636646362 days 22 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b2111.5 Ether
0x0717adc56cc7175e3ff6af15757092084a3d5affc7c14b8b5aa43348bb00f8e8636645262 days 22 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b21 Ether
0xf4455f57be2a123947841cce401120810a1668856b877dad7a80a26234f6e56d636642462 days 22 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b21 Ether
0x70c9624fb6b32175b9350234608a9ed0b1e9d3e2997c298c8132c6663c101cd0636638662 days 22 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b21 Ether
0x641606f76e3342d398ccc9094add45d7440702ab8c4434e5475244c54938020c636636162 days 22 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b21 Ether
0x993d46d143596ef8c37d9e5bc68328f464995e7b38b27020ac161fb5c0667b2c636635462 days 23 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b22.3 Ether
0x906feaa508568115ffc54a4ac9d4be8820772f8d653b47a321aced1f0031b6d8636629362 days 23 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b25.8 Ether
0xf3a766d04f48b7804cc68d97ed9c5ddfea6c9cca87e501dd9da424646337a035636627562 days 23 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b20.99749 Ether
0x382542d499f15da3431ab66c615ac900f920975e17a23e570f633f77141697bd636626962 days 23 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b21 Ether
0xa4d774c5ff8afcfe1bc296b88fb56b57b7dd821e04b19940e9bfdaff3548157e636626462 days 23 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b20.17 Ether
0x1c708f19ed66002c4bf7fb8e79503fd8bfc51cf54239a8ea4c18eb4650f1cf6b636624862 days 23 hrs ago0x1d4f65aa1aea481692671aef59937ce5574c3d710xcd5fb5d52ead04eb8349befa27cc935d931350b20.001 Ether
0xe5b9d65217061f90cc60faae8e727ec8f170e4d267715f83c3a8868fab538025636615462 days 23 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 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.