Sponsored Link:   SHIFT.cash - smart-contract based car title lending platform, 30 billion market, 35+ employees. Join NOW.
Contract Overview | BloomToken
ETH Balance: 0 Ether
ETH USD Value: $0
No Of Transactions: 7093 txns
Token Tracker 0x107c4504cd79c5d2696ea0030a8dd4e92601b82e
  Latest 25 txns from a total Of 7093 transactions View All

TxHash Age From To Value [TxFee]
0xa82b1b7fbebf471892275f793ef11ea9cb10af099090950ee8444f0ffeada2c834 mins ago0x55555f86f23706215c778af33db26249c12fea5e  IN   BloomToken0 Ether0.00106788
0xea5a71cf6bbb0ab4765133c0f65ab77c6a8ac04fa135e0b34fd983dbf687b01044 mins ago0x24320558cb2484d96da89f1412086d2266d85bc5  IN   BloomToken0 Ether0.00189298
0xcdc6bb8169461fb5a920d7edef6bd5d502712e1b415d0c03a49baf273955024945 mins ago0xb5003eb8af77ec3dd7287c24d7d0de239fe7fcbb  IN   BloomToken0 Ether0.000591944
0x13ab62c5ebc55240b98f281f6d6aacf6fdf9f06814be6040282d869c62bcf64045 mins ago0xa683a5b784c9e0e90eb2f2ef7bdee62a54315ec0  IN   BloomToken0 Ether0.000591944
0x0f4495f0cf15a92921905836c63c3c7264558c3b3acca1402a84d6d04222da7145 mins ago0x479d99f9da5df34fa6f55f7651951419dc1139dd  IN   BloomToken0 Ether0.000756168
0x6d0be9419821a5fa2c83fa2457a44801c3f3f1c7831daea7c3be7a213cc939c51 hr 4 mins ago0xf73c3c65bde10bf26c2e1763104e609a41702efe  IN   BloomToken0 Ether0.00320364
0xfff13e1adfd28b6bfab71f7fd13375ce9cdedc8aaf85f995c9d7e5ad4cda1a751 hr 27 mins ago0x8dddf90e287849397d93ecb07c770df9d23a0453  IN   BloomToken0 Ether0.002243892
0x81627e396982fac6961ca0a4bb4bb8f8c49d04aab4cc45d769e618a84fc8afa52 hrs 40 mins ago0xd4b164505d58a47182a439504eb66747a5b39fe1  IN   BloomToken0 Ether0.000094457
0xa5d6c5b6498ec5b963b5b224e8cf8f382f6abeb0df37f2ffaf66093da7a65c812 hrs 51 mins ago0xabcde8e7eade4d0590769eb13864838a4f21ba11  IN   BloomToken0 Ether0.000213448
0xac9a32cf2d89422142137f84d63e761578f8c80be6360d0a6fd8ab157eccebb82 hrs 52 mins ago0x45b67ae34a43cbc58653cb7f19f1d8c6c0e18348  IN   BloomToken0 Ether0.00427664
0x4789f6eb07eca4f4782e3a3824834008cd5c5262e671e2d3c9c01be811613be23 hrs 33 mins ago0x4ff2715cce7b2da8c1dbaecacfc13563bffa4bff  IN   BloomToken0 Ether0.000320556
0x7b9e5e34a66c46a5ae0e1e0adeb71f6bc01f30fd35d67a20b0bf53cc9e318afe4 hrs 12 mins ago0xf73c3c65bde10bf26c2e1763104e609a41702efe  IN   BloomToken0 Ether0.00320556
0xbe9c62cd93301ce00922a661922751b9b96e6134e2e37b2d3296297c7f4ed6174 hrs 22 mins ago0x7d03954df2adc8be42a3e6f2d9adc06ad0cce195  IN   BloomToken0 Ether0.00437306
0x99a68dcc6158ac460aa533b5ff6813eb802a5c1e39e0f3279c4c5a4a287fdab54 hrs 47 mins ago0xd4e3f10ef300931a969923a218c01a6fa682c91c  IN   BloomToken0 Ether0.000283371
0x02633135a0f649fdbe2cec691107a4001d6a3a1b2313db6c1068fea50a18a02e5 hrs ago0xe69c6b7571dae39cf283a9f62da614e4622cfda4  IN   BloomToken0 Ether0.000099986
0x643c1e24e64611672672c79fd14faecf701e6a707391933893696983c4474f655 hrs 25 mins ago0xe069694923c3a5b7c4917435b1313fc9196144b1  IN   BloomToken0 Ether0.00566742
0xf3e5ab353d5d07c2571eaf28681271406b06f22087cd7c8b2e66e08c8ae76c756 hrs 20 mins ago0x0726a60dfc364fca19748cbc3dbbba413743e513  IN   BloomToken0 Ether0.002459068
0xb0d68a0d43d97b9e81b7956acfd7c6971504534a64cf49e33fb042657c371f076 hrs 45 mins ago0xabcde8e7eade4d0590769eb13864838a4f21ba11  IN   BloomToken0 Ether0.000320172
0x401526a5d96b03cf534e6d58dcab078cb0bcdbfc73ce9ef0ec740b4237468b4c7 hrs 16 mins ago0x74ae18ca0fd82e66fb4724695ca7fa054f22e17c  IN   BloomToken0 Ether0.000283755
0x552600413156af59ad89860e850dd96bf9c6fe7a3513a0a7478078027809eaa87 hrs 28 mins ago0x08499db64c49f4bf655d4eb7ce173b438886e9db  IN   BloomToken0 Ether0.002241204
0xf2316778142b1b0fca460861fe60b394a309aa37463c6146857382f8f5457d4a7 hrs 34 mins ago0x907cb6b010092813439fe52ba50c24fa1765f3ec  IN   BloomToken0 Ether0.00027572
0x143c8157d161153852c322a6b7f1205b03780e2a90064cf4b81c4340c3930ebe7 hrs 35 mins ago0x907cb6b010092813439fe52ba50c24fa1765f3ec  IN   BloomToken0 Ether0.00053426
0xf39fe05bde041603ee68f8c53d99c51d8bc62856a5e5d60f503b176fe70100b77 hrs 38 mins ago0x97123e57a4001c299ff953bd39a2b3cccb2fb201  IN   BloomToken0 Ether0.000442806
0x77b42a30abd0df5753d6c29892b1cb944dc496aeb569aca658fdddb831dc8ed68 hrs 4 mins ago0xf73c3c65bde10bf26c2e1763104e609a41702efe  IN   BloomToken0 Ether0.00320556
0xec0af58d6a2fa0993689627d934c64841dd5f2aeabb78a61bc3a5f5ceb7b40a68 hrs 29 mins ago0x006e5175ee8b1b377c5c66b95c6807a1565ddf2c  IN   BloomToken0 Ether0.000283563
[ 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
0xae345de4086a7c0e471a0c9747289d2ee73ddf322470ecfda38be62f2b96e23f51170294 days 22 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0x98cc5e509c1e89e8cc76c78f55535345da322935b358ae38afca5cdf9df0618651168964 days 22 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0xd43c0f0eabcd08ff386ed29b21b6d1661801635f74c9d4d5b59881a55176480951168354 days 22 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0x4fce77982a2549f93757a7085f0beb7525cc2b86e03944214ad91abb1797473951168104 days 23 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0xee10159e9835bccadb0610080d431895fdc322dca9d7d743458a9639d0f7a55c51124335 days 16 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb41 Ether
0xe5c7208a8534eb27b31131f9a460e84b07a577a0f799328f2bc8aeaf8728a3e1499764525 days 33 mins ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb40.0003 Ether
0x122646806d2fea41a97db7fb6403979770b30013705c2589f4de8d14c72414db499647125 days 5 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb40.001 Ether
0xf03a67648c32953c42c349ca63a411544186d0896710c9cbe2440e69560e3947493085336 days 8 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xfcc9774d0498b2ab2e53988bcb7c5860dcd3ceb40.09276 Ether
0xc367cbd7dea57b3f969eadcdcf5fd28d7b0d03a3ca13be51cbe780e17b7bbcff483723553 days 10 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.5 Ether
0x61e2763117824c33d9e903b5c1a6279c29b3b5aca98b30a5b5a0faff397ceef4483606053 days 14 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1.05 Ether
0x380252e0862ba2097e6212aa03acd8eae7b17aad56969df34e6472b710194313483287254 days 3 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1.96766138 Ether
0x9f594928c6ed5c11e71e7e6c3745560ff662f5c6e9f73b6c7a3c2c6086631460483240954 days 5 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1.6 Ether
0xd871598f9e918f52e01aacf4ff8e3d090c0a05d60166ad1d5ebd9a17f67c767d481012758 days 1 hr ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac2 Ether
0x9adea1f235358d2d30741905fc8f43d13b1927d0a63c3667e8f163148b50c0a7480530758 days 20 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1 Ether
0x2b2fefc722dd87bfc329ad36b279255795efc9426bad4d35b9eb589229621c2a480524258 days 20 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1 Ether
0x3f7ac8deca293b0ad618a39308968eb61d07a1bd0af605d1a51e863abfeddd25480521558 days 20 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1 Ether
0x5fbd5a07ef5e4b21211350049de20708c2aca5da032fe91c98e2e2f06e0f99f6480308159 days 5 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1 Ether
0x33e6b6a6ef3dd99bb3bd48b741f7aa3dbc61122a5fa4b5729298400b9f60af8c478396662 days 9 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.019 Ether
0x256d30d943cd97c04125972e9b2caabe80ac684ad6c3c39be8ca0fb37b5ad763474609569 days 1 hr ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac1.39 Ether
0xf21666c10fff1bedc27540803e5bed8e2e9e77b8b30df70061007c09786e4669470279576 days 14 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.48318051 Ether
0x67cba4d653a56b589094cedcd0c2ab978c90e093773070fe1093583a5eeea364466691282 days 21 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.2924213 Ether
0x5deb87b8c7e8f577c6c663a241ad185122bfd763a10dd114b32410ef502d9dd1466690082 days 21 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.29 Ether
0xa0c7471f4bd3e4dc19123fb55665db16cf2672627558454f997bce9d51005d50466689882 days 21 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.001 Ether
0x025a8e83502cdbffb0ec1bba4420cf405de9c6cf93486c11ed7b5bd6ae5478df465905484 days 4 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.1 Ether
0x0e34ce8488391662dafc39a2d11e9fb1ee4eb3096fd0b7d47ed6cfd36cb1d4cf465172285 days 8 hrs ago0x107c4504cd79c5d2696ea0030a8dd4e92601b82e0xb547cc51ce58293e6945ba08d664ce051563d9ac0.2 Ether
[ Download CSV Export  ] 
Warning: The compiled contract might be susceptible to ZeroFunctionSelector (very low-severity) Solidity compiler bugs.

Contract Source Code Verified
Contract Name: BLT
Compiler Version: v0.4.15+commit.bbb8e64f
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts
pragma solidity ^0.4.13;

library Math {
  function max64(uint64 a, uint64 b) internal constant returns (uint64) {
    return a >= b ? a : b;
  }

  function min64(uint64 a, uint64 b) internal constant returns (uint64) {
    return a < b ? a : b;
  }

  function max256(uint256 a, uint256 b) internal constant returns (uint256) {
    return a >= b ? a : b;
  }

  function min256(uint256 a, uint256 b) internal constant returns (uint256) {
    return a < b ? a : b;
  }
}

library SafeMath {
  function mul(uint256 a, uint256 b) internal constant returns (uint256) {
    uint256 c = a * b;
    assert(a == 0 || c / a == b);
    return c;
  }

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

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

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

contract TokenController {
    /// @notice Called when `_owner` sends ether to the MiniMe Token contract
    /// @param _owner The address that sent the ether to create tokens
    /// @return True if the ether is accepted, false if it throws
    function proxyPayment(address _owner) payable returns(bool);

    /// @notice Notifies the controller about a token transfer allowing the
    ///  controller to react if desired
    /// @param _from The origin of the transfer
    /// @param _to The destination of the transfer
    /// @param _amount The amount of the transfer
    /// @return False if the controller does not authorize the transfer
    function onTransfer(address _from, address _to, uint _amount) returns(bool);

    /// @notice Notifies the controller about an approval allowing the
    ///  controller to react if desired
    /// @param _owner The address that calls `approve()`
    /// @param _spender The spender in the `approve()` call
    /// @param _amount The amount in the `approve()` call
    /// @return False if the controller does not authorize the approval
    function onApprove(address _owner, address _spender, uint _amount)
        returns(bool);
}

contract Controlled {
    /// @notice The address of the controller is the only address that can call
    ///  a function with this modifier
    modifier onlyController { require(msg.sender == controller); _; }

    address public controller;

    function Controlled() { controller = msg.sender;}

    /// @notice Changes the controller of the contract
    /// @param _newController The new controller of the contract
    function changeController(address _newController) onlyController {
        controller = _newController;
    }
}

contract ApproveAndCallFallBack {
    function receiveApproval(address from, uint256 _amount, address _token, bytes _data);
}

contract MiniMeToken is Controlled {

    string public name;                //The Token's name: e.g. DigixDAO Tokens
    uint8 public decimals;             //Number of decimals of the smallest unit
    string public symbol;              //An identifier: e.g. REP
    string public version = 'MMT_0.1'; //An arbitrary versioning scheme


    /// @dev `Checkpoint` is the structure that attaches a block number to a
    ///  given value, the block number attached is the one that last changed the
    ///  value
    struct  Checkpoint {

        // `fromBlock` is the block number that the value was generated from
        uint128 fromBlock;

        // `value` is the amount of tokens at a specific block number
        uint128 value;
    }

    // `parentToken` is the Token address that was cloned to produce this token;
    //  it will be 0x0 for a token that was not cloned
    MiniMeToken public parentToken;

    // `parentSnapShotBlock` is the block number from the Parent Token that was
    //  used to determine the initial distribution of the Clone Token
    uint public parentSnapShotBlock;

    // `creationBlock` is the block number that the Clone Token was created
    uint public creationBlock;

    // `balances` is the map that tracks the balance of each address, in this
    //  contract when the balance changes the block number that the change
    //  occurred is also included in the map
    mapping (address => Checkpoint[]) balances;

    // `allowed` tracks any extra transfer rights as in all ERC20 tokens
    mapping (address => mapping (address => uint256)) allowed;

    // Tracks the history of the `totalSupply` of the token
    Checkpoint[] totalSupplyHistory;

    // Flag that determines if the token is transferable or not.
    bool public transfersEnabled;

    // The factory used to create new clone tokens
    MiniMeTokenFactory public tokenFactory;

////////////////
// Constructor
////////////////

    /// @notice Constructor to create a MiniMeToken
    /// @param _tokenFactory The address of the MiniMeTokenFactory contract that
    ///  will create the Clone token contracts, the token factory needs to be
    ///  deployed first
    /// @param _parentToken Address of the parent token, set to 0x0 if it is a
    ///  new token
    /// @param _parentSnapShotBlock Block of the parent token that will
    ///  determine the initial distribution of the clone token, set to 0 if it
    ///  is a new token
    /// @param _tokenName Name of the new token
    /// @param _decimalUnits Number of decimals of the new token
    /// @param _tokenSymbol Token Symbol for the new token
    /// @param _transfersEnabled If true, tokens will be able to be transferred
    function MiniMeToken(
        address _tokenFactory,
        address _parentToken,
        uint _parentSnapShotBlock,
        string _tokenName,
        uint8 _decimalUnits,
        string _tokenSymbol,
        bool _transfersEnabled
    ) {
        tokenFactory = MiniMeTokenFactory(_tokenFactory);
        name = _tokenName;                                 // Set the name
        decimals = _decimalUnits;                          // Set the decimals
        symbol = _tokenSymbol;                             // Set the symbol
        parentToken = MiniMeToken(_parentToken);
        parentSnapShotBlock = _parentSnapShotBlock;
        transfersEnabled = _transfersEnabled;
        creationBlock = block.number;
    }


///////////////////
// ERC20 Methods
///////////////////

    /// @notice Send `_amount` tokens to `_to` from `msg.sender`
    /// @param _to The address of the recipient
    /// @param _amount The amount of tokens to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address _to, uint256 _amount) returns (bool success) {
        require(transfersEnabled);
        return doTransfer(msg.sender, _to, _amount);
    }

    /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it
    ///  is approved by `_from`
    /// @param _from The address holding the tokens being transferred
    /// @param _to The address of the recipient
    /// @param _amount The amount of tokens to be transferred
    /// @return True if the transfer was successful
    function transferFrom(address _from, address _to, uint256 _amount
    ) returns (bool success) {

        // The controller of this contract can move tokens around at will,
        //  this is important to recognize! Confirm that you trust the
        //  controller of this contract, which in most situations should be
        //  another open source smart contract or 0x0
        if (msg.sender != controller) {
            require(transfersEnabled);

            // The standard ERC 20 transferFrom functionality
            if (allowed[_from][msg.sender] < _amount) return false;
            allowed[_from][msg.sender] -= _amount;
        }
        return doTransfer(_from, _to, _amount);
    }

    /// @dev This is the actual transfer function in the token contract, it can
    ///  only be called by other functions in this contract.
    /// @param _from The address holding the tokens being transferred
    /// @param _to The address of the recipient
    /// @param _amount The amount of tokens to be transferred
    /// @return True if the transfer was successful
    function doTransfer(address _from, address _to, uint _amount
    ) internal returns(bool) {

           if (_amount == 0) {
               return true;
           }

           require(parentSnapShotBlock < block.number);

           // Do not allow transfer to 0x0 or the token contract itself
           require((_to != 0) && (_to != address(this)));

           // If the amount being transfered is more than the balance of the
           //  account the transfer returns false
           var previousBalanceFrom = balanceOfAt(_from, block.number);
           if (previousBalanceFrom < _amount) {
               return false;
           }

           // Alerts the token controller of the transfer
           if (isContract(controller)) {
               require(TokenController(controller).onTransfer(_from, _to, _amount));
           }

           // First update the balance array with the new value for the address
           //  sending the tokens
           updateValueAtNow(balances[_from], previousBalanceFrom - _amount);

           // Then update the balance array with the new value for the address
           //  receiving the tokens
           var previousBalanceTo = balanceOfAt(_to, block.number);
           require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
           updateValueAtNow(balances[_to], previousBalanceTo + _amount);

           // An event to make the transfer easy to find on the blockchain
           Transfer(_from, _to, _amount);

           return true;
    }

    /// @param _owner The address that's balance is being requested
    /// @return The balance of `_owner` at the current block
    function balanceOf(address _owner) constant returns (uint256 balance) {
        return balanceOfAt(_owner, block.number);
    }

    /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on
    ///  its behalf. This is a modified version of the ERC20 approve function
    ///  to be a little bit safer
    /// @param _spender The address of the account able to transfer the tokens
    /// @param _amount The amount of tokens to be approved for transfer
    /// @return True if the approval was successful
    function approve(address _spender, uint256 _amount) returns (bool success) {
        require(transfersEnabled);

        // To change the approve amount you first have to reduce the addresses`
        //  allowance to zero by calling `approve(_spender,0)` if it is not
        //  already 0 to mitigate the race condition described here:
        //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
        require((_amount == 0) || (allowed[msg.sender][_spender] == 0));

        // Alerts the token controller of the approve function call
        if (isContract(controller)) {
            require(TokenController(controller).onApprove(msg.sender, _spender, _amount));
        }

        allowed[msg.sender][_spender] = _amount;
        Approval(msg.sender, _spender, _amount);
        return true;
    }

    /// @dev This function makes it easy to read the `allowed[]` map
    /// @param _owner The address of the account that owns the token
    /// @param _spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens of _owner that _spender is allowed
    ///  to spend
    function allowance(address _owner, address _spender
    ) constant returns (uint256 remaining) {
        return allowed[_owner][_spender];
    }

    /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on
    ///  its behalf, and then a function is triggered in the contract that is
    ///  being approved, `_spender`. This allows users to use their tokens to
    ///  interact with contracts in one function call instead of two
    /// @param _spender The address of the contract able to transfer the tokens
    /// @param _amount The amount of tokens to be approved for transfer
    /// @return True if the function call was successful
    function approveAndCall(address _spender, uint256 _amount, bytes _extraData
    ) returns (bool success) {
        require(approve(_spender, _amount));

        ApproveAndCallFallBack(_spender).receiveApproval(
            msg.sender,
            _amount,
            this,
            _extraData
        );

        return true;
    }

    /// @dev This function makes it easy to get the total number of tokens
    /// @return The total number of tokens
    function totalSupply() constant returns (uint) {
        return totalSupplyAt(block.number);
    }


////////////////
// Query balance and totalSupply in History
////////////////

    /// @dev Queries the balance of `_owner` at a specific `_blockNumber`
    /// @param _owner The address from which the balance will be retrieved
    /// @param _blockNumber The block number when the balance is queried
    /// @return The balance at `_blockNumber`
    function balanceOfAt(address _owner, uint _blockNumber) constant
        returns (uint) {

        // These next few lines are used when the balance of the token is
        //  requested before a check point was ever created for this token, it
        //  requires that the `parentToken.balanceOfAt` be queried at the
        //  genesis block for that token as this contains initial balance of
        //  this token
        if ((balances[_owner].length == 0)
            || (balances[_owner][0].fromBlock > _blockNumber)) {
            if (address(parentToken) != 0) {
                return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock));
            } else {
                // Has no parent
                return 0;
            }

        // This will return the expected balance during normal situations
        } else {
            return getValueAt(balances[_owner], _blockNumber);
        }
    }

    /// @notice Total amount of tokens at a specific `_blockNumber`.
    /// @param _blockNumber The block number when the totalSupply is queried
    /// @return The total amount of tokens at `_blockNumber`
    function totalSupplyAt(uint _blockNumber) constant returns(uint) {

        // These next few lines are used when the totalSupply of the token is
        //  requested before a check point was ever created for this token, it
        //  requires that the `parentToken.totalSupplyAt` be queried at the
        //  genesis block for this token as that contains totalSupply of this
        //  token at this block number.
        if ((totalSupplyHistory.length == 0)
            || (totalSupplyHistory[0].fromBlock > _blockNumber)) {
            if (address(parentToken) != 0) {
                return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock));
            } else {
                return 0;
            }

        // This will return the expected totalSupply during normal situations
        } else {
            return getValueAt(totalSupplyHistory, _blockNumber);
        }
    }

////////////////
// Clone Token Method
////////////////

    /// @notice Creates a new clone token with the initial distribution being
    ///  this token at `_snapshotBlock`
    /// @param _cloneTokenName Name of the clone token
    /// @param _cloneDecimalUnits Number of decimals of the smallest unit
    /// @param _cloneTokenSymbol Symbol of the clone token
    /// @param _snapshotBlock Block when the distribution of the parent token is
    ///  copied to set the initial distribution of the new clone token;
    ///  if the block is zero than the actual block, the current block is used
    /// @param _transfersEnabled True if transfers are allowed in the clone
    /// @return The address of the new MiniMeToken Contract
    function createCloneToken(
        string _cloneTokenName,
        uint8 _cloneDecimalUnits,
        string _cloneTokenSymbol,
        uint _snapshotBlock,
        bool _transfersEnabled
        ) returns(address) {
        if (_snapshotBlock == 0) _snapshotBlock = block.number;
        MiniMeToken cloneToken = tokenFactory.createCloneToken(
            this,
            _snapshotBlock,
            _cloneTokenName,
            _cloneDecimalUnits,
            _cloneTokenSymbol,
            _transfersEnabled
            );

        cloneToken.changeController(msg.sender);

        // An event to make the token easy to find on the blockchain
        NewCloneToken(address(cloneToken), _snapshotBlock);
        return address(cloneToken);
    }

////////////////
// Generate and destroy tokens
////////////////

    /// @notice Generates `_amount` tokens that are assigned to `_owner`
    /// @param _owner The address that will be assigned the new tokens
    /// @param _amount The quantity of tokens generated
    /// @return True if the tokens are generated correctly
    function generateTokens(address _owner, uint _amount
    ) onlyController returns (bool) {
        uint curTotalSupply = totalSupply();
        require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow
        uint previousBalanceTo = balanceOf(_owner);
        require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow
        updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount);
        updateValueAtNow(balances[_owner], previousBalanceTo + _amount);
        Transfer(0, _owner, _amount);
        return true;
    }


    /// @notice Burns `_amount` tokens from `_owner`
    /// @param _owner The address that will lose the tokens
    /// @param _amount The quantity of tokens to burn
    /// @return True if the tokens are burned correctly
    function destroyTokens(address _owner, uint _amount
    ) onlyController returns (bool) {
        uint curTotalSupply = totalSupply();
        require(curTotalSupply >= _amount);
        uint previousBalanceFrom = balanceOf(_owner);
        require(previousBalanceFrom >= _amount);
        updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount);
        updateValueAtNow(balances[_owner], previousBalanceFrom - _amount);
        Transfer(_owner, 0, _amount);
        return true;
    }

////////////////
// Enable tokens transfers
////////////////


    /// @notice Enables token holders to transfer their tokens freely if true
    /// @param _transfersEnabled True if transfers are allowed in the clone
    function enableTransfers(bool _transfersEnabled) onlyController {
        transfersEnabled = _transfersEnabled;
    }

////////////////
// Internal helper functions to query and set a value in a snapshot array
////////////////

    /// @dev `getValueAt` retrieves the number of tokens at a given block number
    /// @param checkpoints The history of values being queried
    /// @param _block The block number to retrieve the value at
    /// @return The number of tokens being queried
    function getValueAt(Checkpoint[] storage checkpoints, uint _block
    ) constant internal returns (uint) {
        if (checkpoints.length == 0) return 0;

        // Shortcut for the actual value
        if (_block >= checkpoints[checkpoints.length-1].fromBlock)
            return checkpoints[checkpoints.length-1].value;
        if (_block < checkpoints[0].fromBlock) return 0;

        // Binary search of the value in the array
        uint min = 0;
        uint max = checkpoints.length-1;
        while (max > min) {
            uint mid = (max + min + 1)/ 2;
            if (checkpoints[mid].fromBlock<=_block) {
                min = mid;
            } else {
                max = mid-1;
            }
        }
        return checkpoints[min].value;
    }

    /// @dev `updateValueAtNow` used to update the `balances` map and the
    ///  `totalSupplyHistory`
    /// @param checkpoints The history of data being updated
    /// @param _value The new number of tokens
    function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value
    ) internal  {
        if ((checkpoints.length == 0)
        || (checkpoints[checkpoints.length -1].fromBlock < block.number)) {
               Checkpoint storage newCheckPoint = checkpoints[ checkpoints.length++ ];
               newCheckPoint.fromBlock =  uint128(block.number);
               newCheckPoint.value = uint128(_value);
           } else {
               Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1];
               oldCheckPoint.value = uint128(_value);
           }
    }

    /// @dev Internal function to determine if an address is a contract
    /// @param _addr The address being queried
    /// @return True if `_addr` is a contract
    function isContract(address _addr) constant internal returns(bool) {
        uint size;
        if (_addr == 0) return false;
        assembly {
            size := extcodesize(_addr)
        }
        return size>0;
    }

    /// @dev Helper function to return a min betwen the two uints
    function min(uint a, uint b) internal returns (uint) {
        return a < b ? a : b;
    }

    /// @notice The fallback function: If the contract's controller has not been
    ///  set to 0, then the `proxyPayment` method is called which relays the
    ///  ether and creates tokens as described in the token controller contract
    function ()  payable {
        require(isContract(controller));
        require(TokenController(controller).proxyPayment.value(msg.value)(msg.sender));
    }

//////////
// Safety Methods
//////////

    /// @notice This method can be used by the controller to extract mistakenly
    ///  sent tokens to this contract.
    /// @param _token The address of the token contract that you want to recover
    ///  set to 0 in case you want to extract ether.
    function claimTokens(address _token) onlyController {
        if (_token == 0x0) {
            controller.transfer(this.balance);
            return;
        }

        MiniMeToken token = MiniMeToken(_token);
        uint balance = token.balanceOf(this);
        token.transfer(controller, balance);
        ClaimedTokens(_token, controller, balance);
    }

////////////////
// Events
////////////////
    event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount);
    event Transfer(address indexed _from, address indexed _to, uint256 _amount);
    event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock);
    event Approval(
        address indexed _owner,
        address indexed _spender,
        uint256 _amount
        );

}

contract MiniMeTokenFactory {

    /// @notice Update the DApp by creating a new token with new functionalities
    ///  the msg.sender becomes the controller of this clone token
    /// @param _parentToken Address of the token being cloned
    /// @param _snapshotBlock Block of the parent token that will
    ///  determine the initial distribution of the clone token
    /// @param _tokenName Name of the new token
    /// @param _decimalUnits Number of decimals of the new token
    /// @param _tokenSymbol Token Symbol for the new token
    /// @param _transfersEnabled If true, tokens will be able to be transferred
    /// @return The address of the new token contract
    function createCloneToken(
        address _parentToken,
        uint _snapshotBlock,
        string _tokenName,
        uint8 _decimalUnits,
        string _tokenSymbol,
        bool _transfersEnabled
    ) returns (MiniMeToken) {
        MiniMeToken newToken = new MiniMeToken(
            this,
            _parentToken,
            _snapshotBlock,
            _tokenName,
            _decimalUnits,
            _tokenSymbol,
            _transfersEnabled
            );

        newToken.changeController(msg.sender);
        return newToken;
    }
}

contract MiniMeVestedToken is MiniMeToken {
  using SafeMath for uint256;
  using Math for uint64;

  struct TokenGrant {
    address granter;     // 20 bytes
    uint256 value;       // 32 bytes
    uint64 cliff;
    uint64 vesting;
    uint64 start;        // 3 * 8 = 24 bytes
    bool revokable;
    bool burnsOnRevoke;  // 2 * 1 = 2 bits? or 2 bytes?
  } // total 78 bytes = 3 sstore per operation (32 per sstore)

  event NewTokenGrant(address indexed from, address indexed to, uint256 value, uint256 grantId);

  mapping (address => TokenGrant[]) public grants;

  mapping (address => bool) public canCreateGrants;
  address public vestingWhitelister;

  modifier canTransfer(address _sender, uint _value) {
    require(spendableBalanceOf(_sender) >= _value);
    _;
  }

  modifier onlyVestingWhitelister {
    require(msg.sender == vestingWhitelister);
    _;
  }

  function MiniMeVestedToken (
      address _tokenFactory,
      address _parentToken,
      uint _parentSnapShotBlock,
      string _tokenName,
      uint8 _decimalUnits,
      string _tokenSymbol,
      bool _transfersEnabled
  ) public
    MiniMeToken(_tokenFactory, _parentToken, _parentSnapShotBlock, _tokenName, _decimalUnits, _tokenSymbol, _transfersEnabled) {
    vestingWhitelister = msg.sender;
    doSetCanCreateGrants(vestingWhitelister, true);
  }

  // @dev Add canTransfer modifier before allowing transfer and transferFrom to go through
  function transfer(address _to, uint _value)
           public
           canTransfer(msg.sender, _value)
           returns (bool success) {
    return super.transfer(_to, _value);
  }

  function transferFrom(address _from, address _to, uint _value)
           public
           canTransfer(_from, _value)
           returns (bool success) {
    return super.transferFrom(_from, _to, _value);
  }

  function spendableBalanceOf(address _holder) public constant returns (uint) {
    return transferableTokens(_holder, uint64(now)); // solhint-disable not-rely-on-time
  }

  /**
   * @dev Grant tokens to a specified address
   * @param _to address The address which the tokens will be granted to.
   * @param _value uint256 The amount of tokens to be granted.
   * @param _start uint64 Time of the beginning of the grant.
   * @param _cliff uint64 Time of the cliff period.
   * @param _vesting uint64 The vesting period.
   */
  function grantVestedTokens(
    address _to,
    uint256 _value,
    uint64 _start,
    uint64 _cliff,
    uint64 _vesting,
    bool _revokable,
    bool _burnsOnRevoke
  ) public {
    // Check start, cliff and vesting are properly order to ensure correct functionality of the formula.
    require(_cliff >= _start);
    require(_vesting >= _cliff);

    require(canCreateGrants[msg.sender]);
    require(tokenGrantsCount(_to) < 20);   // To prevent a user being spammed and have his balance locked (out of gas attack when calculating vesting).

    TokenGrant memory grant = TokenGrant(
      _revokable ? msg.sender : 0,
      _value,
      _cliff,
      _vesting,
      _start,
      _revokable,
      _burnsOnRevoke
    );

    uint256 count = grants[_to].push(grant);

    assert(transfer(_to, _value));

    NewTokenGrant(msg.sender, _to, _value, count - 1);
  }

  function setCanCreateGrants(address _addr, bool _allowed)
           public onlyVestingWhitelister {
    doSetCanCreateGrants(_addr, _allowed);
  }

  function changeVestingWhitelister(address _newWhitelister) public onlyVestingWhitelister {
    require(_newWhitelister != 0);
    doSetCanCreateGrants(vestingWhitelister, false);
    vestingWhitelister = _newWhitelister;
    doSetCanCreateGrants(vestingWhitelister, true);
  }

  /**
   * @dev Revoke the grant of tokens of a specifed address.
   * @param _holder The address which will have its tokens revoked.
   * @param _receiver Recipient of revoked tokens.
   * @param _grantId The id of the token grant.
   */
  function revokeTokenGrant(address _holder, address _receiver, uint256 _grantId) public onlyVestingWhitelister {
    require(_receiver != 0);

    TokenGrant storage grant = grants[_holder][_grantId];

    require(grant.revokable);
    require(grant.granter == msg.sender); // Only granter can revoke it

    address receiver = grant.burnsOnRevoke ? 0xdead : _receiver;

    uint256 nonVested = nonVestedTokens(grant, uint64(now));

    // remove grant from array
    delete grants[_holder][_grantId];
    grants[_holder][_grantId] = grants[_holder][grants[_holder].length.sub(1)];
    grants[_holder].length -= 1;

    doTransfer(_holder, receiver, nonVested);
  }

  /**
   * @dev Check the amount of grants that an address has.
   * @param _holder The holder of the grants.
   * @return A uint256 representing the total amount of grants.
   */
  function tokenGrantsCount(address _holder) public constant returns (uint index) {
    return grants[_holder].length;
  }

  /**
   * @dev Get all information about a specific grant.
   * @param _holder The address which will have its tokens revoked.
   * @param _grantId The id of the token grant.
   * @return Returns all the values that represent a TokenGrant(address, value, start, cliff,
   * revokability, burnsOnRevoke, and vesting) plus the vested value at the current time.
   */
  function tokenGrant(address _holder, uint256 _grantId) public constant returns (address granter, uint256 value, uint256 vested, uint64 start, uint64 cliff, uint64 vesting, bool revokable, bool burnsOnRevoke) {
    TokenGrant storage grant = grants[_holder][_grantId];

    granter = grant.granter;
    value = grant.value;
    start = grant.start;
    cliff = grant.cliff;
    vesting = grant.vesting;
    revokable = grant.revokable;
    burnsOnRevoke = grant.burnsOnRevoke;

    vested = vestedTokens(grant, uint64(now));
  }

  // @dev The date in which all tokens are transferable for the holder
  // Useful for displaying purposes (not used in any logic calculations)
  function lastTokenIsTransferableDate(address holder) public constant returns (uint64 date) {
    date = uint64(now);
    uint256 grantIndex = tokenGrantsCount(holder);
    for (uint256 i = 0; i < grantIndex; i++) {
      date = grants[holder][i].vesting.max64(date);
    }
    return date;
  }

  // @dev How many tokens can a holder transfer at a point in time
  function transferableTokens(address holder, uint64 time) public constant returns (uint256) {
    uint256 grantIndex = tokenGrantsCount(holder);

    if (grantIndex == 0) return balanceOf(holder); // shortcut for holder without grants

    // Iterate through all the grants the holder has, and add all non-vested tokens
    uint256 nonVested = 0;
    for (uint256 i = 0; i < grantIndex; i++) {
      nonVested = nonVested.add(nonVestedTokens(grants[holder][i], time));
    }

    // Balance - totalNonVested is the amount of tokens a holder can transfer at any given time
    return balanceOf(holder).sub(nonVested);
  }

  function doSetCanCreateGrants(address _addr, bool _allowed)
           internal {
    canCreateGrants[_addr] = _allowed;
  }

  /**
   * @dev Calculate amount of vested tokens at a specific time
   * @param tokens uint256 The amount of tokens granted
   * @param time uint64 The time to be checked
   * @param start uint64 The time representing the beginning of the grant
   * @param cliff uint64  The cliff period, the period before nothing can be paid out
   * @param vesting uint64 The vesting period
   * @return An uint256 representing the amount of vested tokens of a specific grant
   *  transferableTokens
   *   |                         _/--------   vestedTokens rect
   *   |                       _/
   *   |                     _/
   *   |                   _/
   *   |                 _/
   *   |                /
   *   |              .|
   *   |            .  |
   *   |          .    |
   *   |        .      |
   *   |      .        |
   *   |    .          |
   *   +===+===========+---------+----------> time
   *      Start       Cliff    Vesting
   */
  function calculateVestedTokens(
    uint256 tokens,
    uint256 time,
    uint256 start,
    uint256 cliff,
    uint256 vesting) internal constant returns (uint256)
    {

    // Shortcuts for before cliff and after vesting cases.
    if (time < cliff) return 0;
    if (time >= vesting) return tokens;

    // Interpolate all vested tokens.
    // As before cliff the shortcut returns 0, we can use just this function to
    // calculate it.

    // vested = tokens * (time - start) / (vesting - start)
    uint256 vested = tokens.mul(
                             time.sub(start)
                           ).div(vesting.sub(start));

    return vested;
  }

  /**
   * @dev Calculate the amount of non vested tokens at a specific time.
   * @param grant TokenGrant The grant to be checked.
   * @param time uint64 The time to be checked
   * @return An uint256 representing the amount of non vested tokens of a specific grant on the
   * passed time frame.
   */
  function nonVestedTokens(TokenGrant storage grant, uint64 time) internal constant returns (uint256) {
    // Of all the tokens of the grant, how many of them are not vested?
    // grantValue - vestedTokens
    return grant.value.sub(vestedTokens(grant, time));
  }

  /**
   * @dev Get the amount of vested tokens at a specific time.
   * @param grant TokenGrant The grant to be checked.
   * @param time The time to be checked
   * @return An uint256 representing the amount of vested tokens of a specific grant at a specific time.
   */
  function vestedTokens(TokenGrant grant, uint64 time) private constant returns (uint256) {
    return calculateVestedTokens(
      grant.value,
      uint256(time),
      uint256(grant.start),
      uint256(grant.cliff),
      uint256(grant.vesting)
    );
  }
}

contract BLT is MiniMeVestedToken {
  function BLT(address _tokenFactory) public MiniMeVestedToken(
    _tokenFactory,
    0x0,           // no parent token
    0,             // no snapshot block number from parent
    "Bloom Token", // Token name
    18,            // Decimals
    "BLT",         // Symbol
    true           // Enable transfers
  ) {} // solhint-disable-line no-empty-blocks
}

    Contract ABI  
[{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"tokenGrantsCount","outputs":[{"name":"index","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"}],"name":"spendableBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"creationBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"canCreateGrants","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_allowed","type":"bool"}],"name":"setCanCreateGrants","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"grants","outputs":[{"name":"granter","type":"address"},{"name":"value","type":"uint256"},{"name":"cliff","type":"uint64"},{"name":"vesting","type":"uint64"},{"name":"start","type":"uint64"},{"name":"revokable","type":"bool"},{"name":"burnsOnRevoke","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newController","type":"address"}],"name":"changeController","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_blockNumber","type":"uint256"}],"name":"balanceOfAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_holder","type":"address"},{"name":"_grantId","type":"uint256"}],"name":"tokenGrant","outputs":[{"name":"granter","type":"address"},{"name":"value","type":"uint256"},{"name":"vested","type":"uint256"},{"name":"start","type":"uint64"},{"name":"cliff","type":"uint64"},{"name":"vesting","type":"uint64"},{"name":"revokable","type":"bool"},{"name":"burnsOnRevoke","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_cloneTokenName","type":"string"},{"name":"_cloneDecimalUnits","type":"uint8"},{"name":"_cloneTokenSymbol","type":"string"},{"name":"_snapshotBlock","type":"uint256"},{"name":"_transfersEnabled","type":"bool"}],"name":"createCloneToken","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"}],"name":"lastTokenIsTransferableDate","outputs":[{"name":"date","type":"uint64"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"parentToken","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"generateTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"},{"name":"_start","type":"uint64"},{"name":"_cliff","type":"uint64"},{"name":"_vesting","type":"uint64"},{"name":"_revokable","type":"bool"},{"name":"_burnsOnRevoke","type":"bool"}],"name":"grantVestedTokens","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_blockNumber","type":"uint256"}],"name":"totalSupplyAt","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_holder","type":"address"},{"name":"_receiver","type":"address"},{"name":"_grantId","type":"uint256"}],"name":"revokeTokenGrant","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"transfersEnabled","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"parentSnapShotBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_amount","type":"uint256"},{"name":"_extraData","type":"bytes"}],"name":"approveAndCall","outputs":[{"name":"success","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"holder","type":"address"},{"name":"time","type":"uint64"}],"name":"transferableTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_owner","type":"address"},{"name":"_amount","type":"uint256"}],"name":"destroyTokens","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"claimTokens","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"vestingWhitelister","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokenFactory","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_transfersEnabled","type":"bool"}],"name":"enableTransfers","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newWhitelister","type":"address"}],"name":"changeVestingWhitelister","outputs":[],"payable":false,"type":"function"},{"inputs":[{"name":"_tokenFactory","type":"address"}],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"grantId","type":"uint256"}],"name":"NewTokenGrant","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_token","type":"address"},{"indexed":true,"name":"_controller","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"ClaimedTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_cloneToken","type":"address"},{"indexed":false,"name":"_snapshotBlock","type":"uint256"}],"name":"NewCloneToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_spender","type":"address"},{"indexed":false,"name":"_amount","type":"uint256"}],"name":"Approval","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405260408051908101604052600781527f4d4d545f302e3100000000000000000000000000000000000000000000000000602082015260049080516200004d92916020019062000219565b5034156200005a57600080fd5b60405160208062002ed3833981016040528080519150505b806000806040805190810160405280600b81526020017f426c6f6f6d20546f6b656e000000000000000000000000000000000000000000815250601260408051908101604052600381527f424c540000000000000000000000000000000000000000000000000000000000602082015260015b868686868686865b5b60008054600160a060020a03191633600160a060020a03161790555b600b805461010060a860020a031916610100600160a060020a038a160217905560018480516200013f92916020019062000219565b506002805460ff191660ff851617905560038280516200016492916020019062000219565b5060058054600160a060020a031916600160a060020a0388161790556006859055600b805460ff1916821515179055436007555b5050600e8054600160a060020a03191633600160a060020a039081169190911791829055620001e096501693506001925050640100000000620001f081026200234a17049050565b5b505050505050505b50620002c3565b600160a060020a0382166000908152600d60205260409020805460ff19168215151790555b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200025c57805160ff19168380011785556200028c565b828001600101855582156200028c579182015b828111156200028c5782518255916020019190600101906200026f565b5b506200029b9291506200029f565b5090565b620002c091905b808211156200029b5760008155600101620002a6565b5090565b90565b612c0080620002d36000396000f300606060405236156101b15763ffffffff60e060020a60003504166302a72a4c811461025857806306fdde0314610289578063095ea7b3146103145780630f8f8b831461034a578063176345141461037b57806318160ddd146103a057806318cd55f3146103c55780631f9a391c146103f857806323b872dd1461041e5780632c71e60a1461045a578063313ce567146104d55780633cebb823146104fe5780634ee2cd7e1461051f57806354fd4d5014610553578063600e85b7146105de5780636638c0871461065f5780636c182e991461072357806370a082311461075f57806380a5400114610790578063827f32c0146107bf57806395d89b41146107f55780639754a4d914610880578063981b24d0146108c7578063a9059cbb146108ef578063b0cf0dcb14610925578063bef97c871461094f578063c5bcc4f114610976578063cae9ca511461099b578063d347c20514610a14578063d3ce77fe14610a52578063dd62ed3e14610a88578063df8de3e714610abf578063dfae7dc114610ae0578063e77772fe14610b0f578063f41e60c514610b3e578063f77c479114610b58578063fb13a70714610b87575b5b6000546101c790600160a060020a0316610ba8565b15156101d257600080fd5b60008054600160a060020a03169063f48c305490349033906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390911660048201526024016020604051808303818588803b151561022e57600080fd5b6125ee5a03f1151561023f57600080fd5b5050505060405180519050151561025557600080fd5b5b005b341561026357600080fd5b610277600160a060020a0360043516610bd5565b60405190815260200160405180910390f35b341561029457600080fd5b61029c610bf4565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102d95780820151818401525b6020016102c0565b50505050905090810190601f1680156103065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561031f57600080fd5b610336600160a060020a0360043516602435610c92565b604051901515815260200160405180910390f35b341561035557600080fd5b610277600160a060020a0360043516610dfc565b60405190815260200160405180910390f35b341561038657600080fd5b610277610e10565b60405190815260200160405180910390f35b34156103ab57600080fd5b610277610e16565b60405190815260200160405180910390f35b34156103d057600080fd5b610336600160a060020a0360043516610e27565b604051901515815260200160405180910390f35b341561040357600080fd5b610255600160a060020a03600435166024351515610e3c565b005b341561042957600080fd5b610336600160a060020a0360043581169060243516604435610e67565b604051901515815260200160405180910390f35b341561046557600080fd5b61047c600160a060020a0360043516602435610e98565b604051600160a060020a039097168752602087019590955267ffffffffffffffff93841660408088019190915292841660608701529216608085015290151560a084015290151560c083015260e0909101905180910390f35b34156104e057600080fd5b6104e8610f1e565b60405160ff909116815260200160405180910390f35b341561050957600080fd5b610255600160a060020a0360043516610f27565b005b341561052a57600080fd5b610277600160a060020a0360043516602435610f62565b60405190815260200160405180910390f35b341561055e57600080fd5b61029c6110a8565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102d95780820151818401525b6020016102c0565b50505050905090810190601f1680156103065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156105e957600080fd5b610600600160a060020a0360043516602435611146565b604051600160a060020a039098168852602088019690965260408088019590955267ffffffffffffffff9384166060880152918316608087015290911660a0850152151560c084015290151560e0830152610100909101905180910390f35b341561066a57600080fd5b61070760046024813581810190830135806020601f8201819004810201604051908101604052818152929190602084018383808284378201915050505050509190803560ff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052818152929190602084018383808284375094965050843594602001351515935061129392505050565b604051600160a060020a03909116815260200160405180910390f35b341561072e57600080fd5b610742600160a060020a03600435166114c3565b60405167ffffffffffffffff909116815260200160405180910390f35b341561076a57600080fd5b610277600160a060020a036004351661154e565b60405190815260200160405180910390f35b341561079b57600080fd5b610707611562565b604051600160a060020a03909116815260200160405180910390f35b34156107ca57600080fd5b610336600160a060020a0360043516602435611571565b604051901515815260200160405180910390f35b341561080057600080fd5b61029c611644565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102d95780820151818401525b6020016102c0565b50505050905090810190601f1680156103065780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561088b57600080fd5b610255600160a060020a036004351660243567ffffffffffffffff6044358116906064358116906084351660a435151560c43515156116e2565b005b34156108d257600080fd5b6102776004356119a7565b60405190815260200160405180910390f35b34156108fa57600080fd5b610336600160a060020a0360043516602435611a9f565b604051901515815260200160405180910390f35b341561093057600080fd5b610255600160a060020a0360043581169060243516604435611ace565b005b341561095a57600080fd5b610336611de5565b604051901515815260200160405180910390f35b341561098157600080fd5b610277611dee565b60405190815260200160405180910390f35b34156109a657600080fd5b61033660048035600160a060020a03169060248035919060649060443590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650611df495505050505050565b604051901515815260200160405180910390f35b3415610a1f57600080fd5b610277600160a060020a036004351667ffffffffffffffff60243516611f12565b60405190815260200160405180910390f35b3415610a5d57600080fd5b610336600160a060020a0360043516602435611fca565b604051901515815260200160405180910390f35b3415610a9357600080fd5b610277600160a060020a0360043581169060243516612097565b60405190815260200160405180910390f35b3415610aca57600080fd5b610255600160a060020a03600435166120c4565b005b3415610aeb57600080fd5b610707612271565b604051600160a060020a03909116815260200160405180910390f35b3415610b1a57600080fd5b610707612280565b604051600160a060020a03909116815260200160405180910390f35b3415610b4957600080fd5b6102556004351515612294565b005b3415610b6357600080fd5b6107076122c2565b604051600160a060020a03909116815260200160405180910390f35b3415610b9257600080fd5b610255600160a060020a03600435166122d1565b005b600080600160a060020a0383161515610bc45760009150610bcf565b823b90506000811191505b50919050565b600160a060020a0381166000908152600c60205260409020545b919050565b60018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c8a5780601f10610c5f57610100808354040283529160200191610c8a565b820191906000526020600020905b815481529060010190602001808311610c6d57829003601f168201915b505050505081565b600b5460009060ff161515610ca657600080fd5b811580610cd65750600160a060020a03338116600090815260096020908152604080832093871683529290522054155b1515610ce157600080fd5b600054610cf690600160a060020a0316610ba8565b15610d915760008054600160a060020a03169063da682aeb903390869086906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b1515610d6b57600080fd5b6102c65a03f11515610d7c57600080fd5b505050604051805190501515610d9157600080fd5b5b600160a060020a03338116600081815260096020908152604080832094881680845294909152908190208590557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a35060015b92915050565b6000610e088242611f12565b90505b919050565b60075481565b6000610e21436119a7565b90505b90565b600d6020526000908152604090205460ff1681565b600e5433600160a060020a03908116911614610e5757600080fd5b610e61828261234a565b5b5b5050565b6000838280610e7583610dfc565b1015610e8057600080fd5b610e8b868686612373565b92505b5b50509392505050565b600c60205281600052604060002081815481101515610eb357fe5b906000526020600020906003020160005b5080546001820154600290920154600160a060020a03909116935090915067ffffffffffffffff80821691680100000000000000008104821691608060020a8204169060ff60c060020a820481169160c860020a90041687565b60025460ff1681565b60005433600160a060020a03908116911614610f4257600080fd5b60008054600160a060020a031916600160a060020a0383161790555b5b50565b600160a060020a0382166000908152600860205260408120541580610fc25750600160a060020a038316600090815260086020526040812080548492908110610fa757fe5b906000526020600020900160005b50546001608060020a0316115b1561107857600554600160a060020a03161561106b57600554600654600160a060020a0390911690634ee2cd7e908590610ffd908690612415565b60006040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561104957600080fd5b6102c65a03f1151561105a57600080fd5b505050604051805190509050610df6565b506000610df6565b610df6565b600160a060020a038316600090815260086020526040902061109a908361242f565b9050610df6565b5b92915050565b60048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c8a5780601f10610c5f57610100808354040283529160200191610c8a565b820191906000526020600020905b815481529060010190602001808311610c6d57829003601f168201915b505050505081565b6000806000806000806000806000600c60008c600160a060020a0316600160a060020a031681526020019081526020016000208a81548110151561118657fe5b906000526020600020906003020160005b50805460018201546002830154600160a060020a039092169b50995067ffffffffffffffff608060020a820481169850808216975068010000000000000000820416955060ff60c060020a82048116955060c860020a90910416925090506112828160e060405190810160409081528254600160a060020a031682526001830154602083015260029092015467ffffffffffffffff8082169383019390935268010000000000000000810483166060830152608060020a8104909216608082015260ff60c060020a83048116151560a083015260c860020a909204909116151560c082015242612589565b96505b509295985092959890939650565b6000808315156112a1574393505b600b546101009004600160a060020a0316635b7b72c130868a8a8a8960006040516020015260405160e060020a63ffffffff8916028152600160a060020a038716600482019081526024820187905260ff8516606483015282151560a483015260c0604483019081529091608481019060c40187818151815260200191508051906020019080838360005b838110156113455780820151818401525b60200161132c565b50505050905090810190601f1680156113725780820380516001836020036101000a031916815260200191505b50838103825285818151815260200191508051906020019080838360005b838110156113a95780820151818401525b602001611390565b50505050905090810190601f1680156113d65780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15156113fa57600080fd5b6102c65a03f1151561140b57600080fd5b5050506040518051915050600160a060020a038116633cebb8233360405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401600060405180830381600087803b151561146457600080fd5b6102c65a03f1151561147557600080fd5b50505080600160a060020a03167f086c875b377f900b07ce03575813022f05dd10ed7640b5282cf6d3c3fc352ade8560405190815260200160405180910390a28091505b5095945050505050565b426000806114d084610bd5565b9150600090505b8181101561154657600160a060020a0384166000908152600c60205260409020805461153b9185918490811061150957fe5b906000526020600020906003020160005b506002015468010000000000000000900467ffffffffffffffff16906125d9565b92505b6001016114d7565b5b5050919050565b6000610e088243610f62565b90505b919050565b600554600160a060020a031681565b600080548190819033600160a060020a0390811691161461159157600080fd5b611599610e16565b9150838201829010156115ab57600080fd5b6115b48561154e565b9050838101819010156115c657600080fd5b6115d3600a858401612608565b600160a060020a03851660009081526008602052604090206115f790828601612608565b84600160a060020a031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b5b505092915050565b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c8a5780601f10610c5f57610100808354040283529160200191610c8a565b820191906000526020600020905b815481529060010190602001808311610c6d57829003601f168201915b505050505081565b6116ea612a92565b600067ffffffffffffffff808816908716101561170657600080fd5b67ffffffffffffffff808716908616101561172057600080fd5b600160a060020a0333166000908152600d602052604090205460ff16151561174757600080fd5b60146117528a610bd5565b1061175c57600080fd5b60e06040519081016040528085611774576000611776565b335b600160a060020a031681526020018981526020018767ffffffffffffffff1681526020018667ffffffffffffffff1681526020018867ffffffffffffffff16815260200185151581526020018415158152509150600c60008a600160a060020a0316600160a060020a0316815260200190815260200160002080548060010182816118019190612ace565b916000526020600020906003020160005b50839081518154600160a060020a031916600160a060020a039190911617815560208201518160010155604082015160028201805467ffffffffffffffff191667ffffffffffffffff9290921691909117905560608201518160020160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160020160106101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060a082015160028201805491151560c060020a0278ff0000000000000000000000000000000000000000000000001990921691909117905560c08201516002909101805491151560c860020a0279ff00000000000000000000000000000000000000000000000000199092169190911790555090506119428989611a9f565b151561194a57fe5b88600160a060020a031633600160a060020a03167ff9565aecd648a0466ffb964a79eeccdf1120ad6276189c687a6e9fe73984d9bb8a6001850360405191825260208201526040908101905180910390a35b505050505050505050565b600a5460009015806119e0575081600a60008154811015156119c557fe5b906000526020600020900160005b50546001608060020a0316115b15611a8757600554600160a060020a031615611a7a57600554600654600160a060020a039091169063981b24d090611a19908590612415565b60006040516020015260405160e060020a63ffffffff84160281526004810191909152602401602060405180830381600087803b1515611a5857600080fd5b6102c65a03f11515611a6957600080fd5b505050604051805190509050610bef565b506000610bef565b610bef565b611a92600a8361242f565b9050610bef565b5b919050565b6000338280611aad83610dfc565b1015611ab857600080fd5b611ac285856126f1565b92505b5b505092915050565b600e546000908190819033600160a060020a03908116911614611af057600080fd5b600160a060020a0385161515611b0557600080fd5b600160a060020a0386166000908152600c60205260409020805485908110611b2957fe5b906000526020600020906003020160005b50600281015490935060c060020a900460ff161515611b5857600080fd5b825433600160a060020a03908116911614611b7257600080fd5b600283015460c860020a900460ff16611b8b5784611b8f565b61dead5b9150611b9b8342612719565b600160a060020a0387166000908152600c6020526040902080549192509085908110611bc357fe5b906000526020600020906003020160005b508054600160a060020a0319168155600060018083018290556002909201805479ffffffffffffffffffffffffffffffffffffffffffffffffffff19169055600160a060020a0388168152600c6020526040902080549091611c3c919063ffffffff6127c516565b81548110611c4657fe5b906000526020600020906003020160005b50600160a060020a0387166000908152600c60205260409020805486908110611c7c57fe5b906000526020600020906003020160005b5081548154600160a060020a031916600160a060020a03918216178255600180840154908301556002928301805493909201805467ffffffffffffffff191667ffffffffffffffff94851617808255835468010000000000000000908190048616026fffffffffffffffff000000000000000019909116178082558354608060020a9081900490951690940277ffffffffffffffff000000000000000000000000000000001990941693909317808455825460ff60c060020a918290048116151590910278ff0000000000000000000000000000000000000000000000001990921691909117808555925460c860020a9081900490911615150279ff00000000000000000000000000000000000000000000000000199092169190911790915586166000908152600c6020526040902080546000190190611dce9082612ace565b50611dda8683836127dc565b505b5b505050505050565b600b5460ff1681565b60065481565b6000611e008484610c92565b1515611e0b57600080fd5b83600160a060020a0316638f4ffcb1338530866040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184815260200183600160a060020a0316600160a060020a0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611ea45780820151818401525b602001611e8b565b50505050905090810190601f168015611ed15780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1515611ef257600080fd5b6102c65a03f11515611f0357600080fd5b505050600190505b9392505050565b600080600080611f2186610bd5565b9250821515611f3a57611f338661154e565b9350611fc1565b5060009050805b82811015611fa557600160a060020a0386166000908152600c602052604090208054611f9a91611f8d9184908110611f7557fe5b906000526020600020906003020160005b5087612719565b839063ffffffff6129bb16565b91505b600101611f41565b611fbe82611fb28861154e565b9063ffffffff6127c516565b93505b50505092915050565b600080548190819033600160a060020a03908116911614611fea57600080fd5b611ff2610e16565b91508382101561200157600080fd5b61200a8561154e565b90508381101561201957600080fd5b612026600a858403612608565b600160a060020a038516600090815260086020526040902061204a90858303612608565b600085600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b5b505092915050565b600160a060020a038083166000908152600960209081526040808320938516835292905220545b92915050565b60008054819033600160a060020a039081169116146120e257600080fd5b600160a060020a038316151561213057600054600160a060020a039081169030163180156108fc0290604051600060405180830381858888f19350505050151561212b57600080fd5b61226b565b82915081600160a060020a03166370a082313060006040516020015260405160e060020a63ffffffff8416028152600160a060020a039091166004820152602401602060405180830381600087803b151561218a57600080fd5b6102c65a03f1151561219b57600080fd5b505050604051805160008054919350600160a060020a03808616935063a9059cbb92169084906040516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b151561220b57600080fd5b6102c65a03f1151561221c57600080fd5b50505060405180515050600054600160a060020a039081169084167ff931edb47c50b4b4104c187b5814a9aef5f709e17e2ecf9617e860cacade929c8360405190815260200160405180910390a35b5b505050565b600e54600160a060020a031681565b600b546101009004600160a060020a031681565b60005433600160a060020a039081169116146122af57600080fd5b600b805460ff19168215151790555b5b50565b600054600160a060020a031681565b600e5433600160a060020a039081169116146122ec57600080fd5b600160a060020a038116151561230157600080fd5b600e5461231890600160a060020a0316600061234a565b600e8054600160a060020a031916600160a060020a038381169190911791829055610f5e9116600161234a565b5b5b50565b600160a060020a0382166000908152600d60205260409020805460ff19168215151790555b5050565b6000805433600160a060020a0390811691161461240057600b5460ff16151561239b57600080fd5b600160a060020a0380851660009081526009602090815260408083203390941683529290522054829010156123d257506000611f0b565b600160a060020a03808516600090815260096020908152604080832033909416835292905220805483900390555b61240b8484846127dc565b90505b9392505050565b60008183106124245781612426565b825b90505b92915050565b60008060008085805490506000141561244b5760009350611fc1565b85548690600019810190811061245d57fe5b906000526020600020900160005b50546001608060020a031685106124b55785548690600019810190811061248e57fe5b906000526020600020900160005b5054608060020a90046001608060020a03169350611fc1565b8560008154811015156124c457fe5b906000526020600020900160005b50546001608060020a03168510156124ed5760009350611fc1565b8554600093506000190191505b8282111561254f5760026001838501015b04905084868281548110151561251d57fe5b906000526020600020900160005b50546001608060020a0316116125435780925061254a565b6001810391505b6124fa565b858381548110151561255d57fe5b906000526020600020900160005b5054608060020a90046001608060020a031693505b50505092915050565b600061242683602001518367ffffffffffffffff16856080015167ffffffffffffffff16866040015167ffffffffffffffff16876060015167ffffffffffffffff166129d5565b90505b92915050565b60008167ffffffffffffffff168367ffffffffffffffff1610156124245781612426565b825b90505b92915050565b8154600090819015806126455750835443908590600019810190811061262a57fe5b906000526020600020900160005b50546001608060020a0316105b156126ae578354849061265b8260018301612b32565b8154811061266557fe5b906000526020600020900160005b5080546001608060020a03858116608060020a024382166fffffffffffffffffffffffffffffffff19909316929092171617815591506126ea565b8354849060001981019081106126c057fe5b906000526020600020900160005b5080546001608060020a03808616608060020a02911617815590505b5b50505050565b600b5460009060ff16151561270557600080fd5b6124263384846127dc565b90505b92915050565b60006124266127ab8460e060405190810160409081528254600160a060020a031682526001830154602083015260029092015467ffffffffffffffff8082169383019390935268010000000000000000810483166060830152608060020a8104909216608082015260ff60c060020a83048116151560a083015260c860020a909204909116151560c082015284612589565b60018501549063ffffffff6127c516565b90505b92915050565b6000828211156127d157fe5b508082035b92915050565b600080808315156127f05760019250610e8e565b6006544390106127ff57600080fd5b600160a060020a03851615801590612829575030600160a060020a031685600160a060020a031614155b151561283457600080fd5b61283e8643610f62565b9150838210156128515760009250610e8e565b60005461286690600160a060020a0316610ba8565b156129015760008054600160a060020a031690634a393149908890889088906040516020015260405160e060020a63ffffffff8616028152600160a060020a0393841660048201529190921660248201526044810191909152606401602060405180830381600087803b15156128db57600080fd5b6102c65a03f115156128ec57600080fd5b50505060405180519050151561290157600080fd5b5b600160a060020a038616600090815260086020526040902061292690858403612608565b6129308543610f62565b90508381018190101561294257600080fd5b600160a060020a038516600090815260086020526040902061296690828601612608565b84600160a060020a031686600160a060020a03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8660405190815260200160405180910390a3600192505b50509392505050565b6000828201838110156129ca57fe5b8091505b5092915050565b600080838610156129e957600091506114b9565b8286106129f8578691506114b9565b612a37612a0b848763ffffffff6127c516565b612a2b612a1e898963ffffffff6127c516565b8a9063ffffffff612a4716565b9063ffffffff612a7616565b90508091505b5095945050505050565b6000828202831580612a635750828482811515612a6057fe5b04145b15156129ca57fe5b8091505b5092915050565b6000808284811515612a8457fe5b0490508091505b5092915050565b60e06040519081016040908152600080835260208301819052908201819052606082018190526080820181905260a0820181905260c082015290565b81548183558181151161226b5760030281600302836000526020600020918201910161226b9190612b5c565b5b505050565b81548183558181151161226b5760030281600302836000526020600020918201910161226b9190612b5c565b5b505050565b81548183558181151161226b5760008381526020902061226b918101908301612bb3565b5b505050565b610e2491905b80821115612bac578054600160a060020a03191681556000600182015560028101805479ffffffffffffffffffffffffffffffffffffffffffffffffffff19169055600301612b62565b5090565b90565b610e2491905b80821115612bac5760008155600101612bb9565b5090565b905600a165627a7a7230582063d99dc8aa536d6773fb92c35aa7f2cb046a6a87dd1cdf8c82b66cd5de9e08040029000000000000000000000000f418eed07958f018d484b8d43e1af1249cce0b6e

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

-----Decoded View---------------
Found 1 constructor arguments :
Arg [0] : 000000000000000000000000f418eed07958f018d484b8d43e1af1249cce0b6e


   Swarm Source:
bzzr://63d99dc8aa536d6773fb92c35aa7f2cb046a6a87dd1cdf8c82b66cd5de9e0804

 

View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "downvote" button for any spammy posts, and the "upvote" for interesting conversations.