Sponsored Link: Monaco VISA® - World’s Best Cryptocurrency CardICO LIVE NOW
Contract Overview | TokenCard-ICO
ETH Balance: 44.227125022670567692 Ether
ETH USD Value: $8,015.72 (@ $181.24/ETH)
No Of Transactions: 2859 txns + 11 internalTxns
  Latest 25 txns from a total Of 2859 transactions View All

TxHash Block Age From To Value [TxFee]
0xc473245debc816f01a891f532b62c5f66c31df356119cb624f4d13d03d18604337377066 days 5 hrs ago0x00db2b9178f83bec59a6327eddf8a8cb54f764ff  IN   TokenCard-ICO0 Ether0.01
0x8ca753f9ae07d51620b44a3f41a3fdceb0c4567d5b295bbae58aa3e47f3392a037349346 days 17 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.0012249
0x29284caf5849c52a5ba559fcdcaf0ebdae8563d15a576b3c64d19b717840442637349336 days 17 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.00060666
0x1f27dc934a14c71cf45cb88f79ca2a72ea4712f8d7d177cef2739f8ce013a60037229138 days 22 hrs ago0x51e07ebffb63c575d3aa5c7f25c5b6fcae1da362  IN   TokenCard-ICO0.1 Ether0.002268
0x0022630ab31c60474a52d4334011ebf0992d52c09f3111fc3ea9bb39c6f58c0137228968 days 22 hrs ago0x51e07ebffb63c575d3aa5c7f25c5b6fcae1da362  IN   TokenCard-ICO0.1 Ether0.012519
0x9da1ac841b60a369dc5f87d45b56578537d522d4eade96eaf48010cc37d4f2c0369262114 days 11 hrs ago0x483280195a600ea8800bad3aeb9575f84cfcb76b  IN   TokenCard-ICO1 Ether0.00958491
0xd48877804b8ac70e534dca0bacc9dfe791d4161b2d84a695bf3b4d7769c7cd04367318017 days 21 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.0009056
0xd1d255e103c76eedf041fbbb01b3223f42804e51f6eb34e02cad78dc0c2f72ad367317917 days 21 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.00154924
0x015def488638a2238108e9383bdbd48c5b76ecd6d8ad8db44e4ae5a3f739d00e367317517 days 21 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.0009116
0x1f7471db01f939e790a185d8c17268b608b345f509c7a0b7831910d74369c645367317517 days 21 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.0022783
0xa29f0c0cc48b601b9d46a64bbbf856a64f9d7d433e66f5fb194d628c8bdf4064367317417 days 21 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.0008944
0xaf08089a5f2c783a9a9233cbbda477709dd065dc44638e77d2b2a14e184b4429367317417 days 21 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.00090056
0xbbbd252680b650b1990637c6aeb61f2512b2841f0138e353da801f56caa908da367314817 days 21 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.00133538
0xf9c8327551f6d5d14bb4381cd85d6b712b67b9a0849f0123d42b77b54a8b0b19367310817 days 21 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.00088888
0xd80dd5f30f297e3a9124fdc60cbb5bbf4a052e1da7abe99229eeaff91ad4d66a367307617 days 21 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.00090672
0x298332363aa57a717e6a88d21d018236921ad3d94a2a83a66bc4d496efcc106c367299417 days 22 hrs ago0x000f372e3e45ada03456aef3b90c545ff2b7329c  IN   TokenCard-ICO0 Ether0.00090756
0xa0ecfc45e19765a3e9946620edf4f18b93f783406d9ac21e98d515b5eec5a609367086918 days 7 hrs ago0x810858f00f41f99873e97a5018d83cab22843c9f  IN   TokenCard-ICO30 Ether0.008173
0x3f6c6d1fdd8421ce2eb6b32d36e85ae4ba0f6ba4bd25b65a5ccbb06a7753c032365409621 days 6 hrs ago0x012297e50d181aab3f2c7e426a62172777e7fff2  IN   TokenCard-ICO0.009 Ether0.00125951
0x00f12554e3edc53be0d3722503191d079eb32ab9d4260f924fb68c6175da0c31364609022 days 16 hrs ago0x49554ab51b4785d1927f10c125f7873548c35e55  IN   TokenCard-ICO10 Ether0.00161104
0x2bade0257cedff0b1801cc984e833160ecb6d82e7605bbac38555a3e29abe0ef364544722 days 18 hrs ago0x00db2b9178f83bec59a6327eddf8a8cb54f764ff  IN   TokenCard-ICO0 Ether0.042
0xcb0c75172464d0599132307439104e8f35708c7fd72f45ed353fe2d58a6e0943364312923 days 4 hrs ago0x617057bf5415d81fe19f8ef2cbbe4a9ee4c46da9  IN   TokenCard-ICO0 Ether0.00058182
0x3457dd2e7f49085936f283ca12f9cb16545fd89f0fee65ace3399819c6a81466364024223 days 17 hrs ago0x0272ec1ee76341512abd6da1bdffeea082ccfb07  IN   TokenCard-ICO0.3524 Ether0.00462
0x98039ecf60e5b84d415064bd5e8273fc9383db1a44b9df409e4caf1c2648cc11364022623 days 17 hrs ago0x0272ec1ee76341512abd6da1bdffeea082ccfb07  IN   TokenCard-ICO0.3 Ether0.0021
0x8c3884c4e82f3e4c671b773420284983441b768cfdde3533ff2315e8be32e102363968123 days 19 hrs ago0x3654fa07012f15f4c35bc216d540ef282ebc7b13  IN   TokenCard-ICO0 Ether0.00125951
0xc8ed3e5110e13de56df3a781acd6404556c3b913ae8037501c56dcb43beac889363941623 days 20 hrs ago0x05d96e199c7638a815bf549b9dc7ec3719c04e1c  IN   TokenCard-ICO0.86614776 Ether0.00291534

[Download: CSV Export ]    
 Internal Transactions as a result of Contract Execution
  Latest 11 Internal Transactions

ParentTxHash Block Age From To Value
0x8ca753f9ae07d51620b44a3f41a3fdceb0c4567d5b295bbae58aa3e47f3392a037349346 days 17 hrs ago0x49edf201c1e139282643d5e7c6fb0c7219ad1db70x000f372e3e45ada03456aef3b90c545ff2b7329c166,666.6666666666625 Ether
0xcf9d28efcd1f6b6c7639a3e3e3a2cf99296d0f388143a9c80a8941e6a73af135363880423 days 23 hrs ago0x211457a48a72e66130a369af6c5a8164f92700120x49edf201c1e139282643d5e7c6fb0c7219ad1db715 Ether
0xbbc636c14d7fe36dc20b57f6fd995798887b4bbe15c493616916032be33a9b62363868723 days 23 hrs ago0x8cba7dff0f4e7f8b79fa0ea188b4ccc3b65e715b0x49edf201c1e139282643d5e7c6fb0c7219ad1db71.5 Ether
0x02264c9386a2ffebc6567be51c820283e6830aa8283f98d5261058925b13f055363865923 days 23 hrs ago0x8cba7dff0f4e7f8b79fa0ea188b4ccc3b65e715b0x49edf201c1e139282643d5e7c6fb0c7219ad1db71.5 Ether
0xf1ec06acce2b34d5e45a3fc52a747bdb1bc22b08f859a25833359941b229971a363864423 days 23 hrs ago0x1c68d5cf7ddda7aa00f32473d5dc4545a863fa100x49edf201c1e139282643d5e7c6fb0c7219ad1db710 Ether
0xbf58d416dc6338f4ac67dd8a62eef5ac58552fc5a7f29066e17510ccc3f659ac363863523 days 23 hrs ago0x211457a48a72e66130a369af6c5a8164f92700120x49edf201c1e139282643d5e7c6fb0c7219ad1db715 Ether
0x28e9dbf8f9b7aa3ed753f1939530275ec6a3b12cb78ed4b404d394862fa58a44363857824 days 8 mins ago0x8cba7dff0f4e7f8b79fa0ea188b4ccc3b65e715b0x49edf201c1e139282643d5e7c6fb0c7219ad1db71.5 Ether
0x36f9464067c014a24abd050dafb64d7449b082bf0e9d2a3e2de8e9eb789e5d62363852624 days 20 mins ago0x7d54afc509ba292c9f3ba153045a92af46ca2fe70x49edf201c1e139282643d5e7c6fb0c7219ad1db71 Ether
0x70b4260d447952f6a275da8bdd73f7e7418c3753e133729fe92743035c113559363850724 days 27 mins ago0x7d54afc509ba292c9f3ba153045a92af46ca2fe70x49edf201c1e139282643d5e7c6fb0c7219ad1db71 Ether
0xb2d995ee83dd00c4159259a5b4cb60c2011dcc99a111c1a18835c866f632073c363848424 days 33 mins ago0xf812ae96e6838ba9966e2108b4718e164ffe679f0x49edf201c1e139282643d5e7c6fb0c7219ad1db71 Ether
0xf14533700aeddcde82598da309425e0fc7198a099863fd1ac71e5f69b90aac31363847824 days 35 mins ago0x0e4e39133f5285b72ce962d3288048a1be334f6f0x49edf201c1e139282643d5e7c6fb0c7219ad1db710 Ether

[Download: CSV Export ]    
Warning: The compiled contract might be susceptible to ConstantOptimizerSubtraction (low-severity) Solidity compiler bugs.

Contract Source Code Verified
Contract Name: ICO
Compiler Version: v0.4.10+commit.f0d539ae
Optimization Enabled: Yes
Online Solidity Editor:  -NA-



  Contract Source Code   Find Similiar Contracts
pragma solidity >=0.4.4;

contract Sale {
    uint public startTime;
    uint public stopTime;
    uint public target;
    uint public raised;
    uint public collected;
    uint public numContributors;
    mapping(address => uint) public balances;

    function buyTokens(address _a, uint _eth, uint _time) returns (uint); 
    function getTokens(address holder) constant returns (uint); 
    function getRefund(address holder) constant returns (uint); 
    function getSoldTokens() constant returns (uint); 
    function getOwnerEth() constant returns (uint); 
    function tokensPerEth() constant returns (uint);
    function isActive(uint time) constant returns (bool); 
    function isComplete(uint time) constant returns (bool); 
}

contract Constants {
    uint DECIMALS = 8;
}

contract EventDefinitions {
    event logSaleStart(uint startTime, uint stopTime);
    event logPurchase(address indexed purchaser, uint eth);
    event logClaim(address indexed purchaser, uint refund, uint tokens);

    //Token standard events
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
} 

contract Testable {
    uint fakeTime;
    bool public testing;
    modifier onlyTesting() {
        if (!testing) throw;
        _;
    }
    function setFakeTime(uint t) onlyTesting {
        fakeTime = t;
    }
    function addMinutes(uint m) onlyTesting {
        fakeTime = fakeTime + (m * 1 minutes);
    }
    function addDays(uint d) onlyTesting {
        fakeTime = fakeTime + (d * 1 days);
    }
    function currTime() constant returns (uint) {
        if (testing) {
            return fakeTime;
        } else {
            return block.timestamp;
        }
    }
    function weiPerEth() constant returns (uint) {
        if (testing) {
            return 200;
        } else {
            return 10**18;
        }
    }
}

contract Owned {
    address public owner;
    
    modifier onlyOwner() {
        if (msg.sender != owner) throw;
        _;
    }

    address newOwner;

    function changeOwner(address _newOwner) onlyOwner {
        newOwner = _newOwner;
    }

    function acceptOwnership() {
        if (msg.sender == newOwner) {
            owner = newOwner;
        }
    }    
}

//from Zeppelin
contract SafeMath {
    function safeMul(uint a, uint b) internal returns (uint) {
        uint c = a * b;
        assert(a == 0 || c / a == b);
        return c;
    }

    function safeSub(uint a, uint b) internal returns (uint) {
        assert(b <= a);
        return a - b;
    }

    function safeAdd(uint a, uint b) internal returns (uint) {
        uint c = a + b;
        assert(c>=a && c>=b);
        return c;
    }

    function assert(bool assertion) internal {
        if (!assertion) throw;
    }
}

contract Token is SafeMath, Owned, Constants {
    uint public totalSupply;

    address ico;
    address controller;

    string public name;
    uint8 public decimals; 
    string public symbol;     

    modifier onlyControllers() {
        if (msg.sender != ico &&
            msg.sender != controller) throw;
        _;
    }

    modifier onlyPayloadSize(uint numwords) {
        assert(msg.data.length == numwords * 32 + 4);
        _;
    } 

    function Token() { 
        owner = msg.sender;
        name = "Monolith TKN";
        decimals = uint8(DECIMALS);
        symbol = "TKN";
    }

    function setICO(address _ico) onlyOwner {
        if (ico != 0) throw;
        ico = _ico;
    }
    function setController(address _controller) onlyOwner {
        if (controller != 0) throw;
        controller = _controller;
    }
    
    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
    event Mint(address owner, uint amount);

    //only called from contracts so don't need msg.data.length check
    function mint(address addr, uint amount) onlyControllers {
        if (maxSupply > 0 && safeAdd(totalSupply, amount) > maxSupply) throw;
        balanceOf[addr] = safeAdd(balanceOf[addr], amount);
        totalSupply = safeAdd(totalSupply, amount);
        Mint(addr, amount);
    }

    mapping(address => uint) public balanceOf;
    mapping (address => mapping (address => uint)) public allowance;

    function transfer(address _to, uint _value) 
    onlyPayloadSize(2)
    returns (bool success) {
        if (balanceOf[msg.sender] < _value) return false;

        balanceOf[msg.sender] = balanceOf[msg.sender] - _value;
        balanceOf[_to] = safeAdd(balanceOf[_to], _value);
        Transfer(msg.sender, _to, _value);
        return true;
    }

    function transferFrom(address _from, address _to, uint _value) 
    onlyPayloadSize(3)
    returns (bool success) {
        if (balanceOf[_from] < _value) return false; 

        var allowed = allowance[_from][msg.sender];
        if (allowed < _value) return false;

        balanceOf[_to] = safeAdd(balanceOf[_to], _value);
        balanceOf[_from] = safeSub(balanceOf[_from], _value);
        allowance[_from][msg.sender] = safeSub(allowed, _value);
        Transfer(_from, _to, _value);
        return true;
    }

    function approve(address _spender, uint _value) 
    onlyPayloadSize(2)
    returns (bool success) {
        //require user to set to zero before resetting to nonzero
        if ((_value != 0) && (allowance[msg.sender][_spender] != 0)) {
            return false;
        }
    
        allowance[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    function increaseApproval (address _spender, uint _addedValue) 
    onlyPayloadSize(2)
    returns (bool success) {
        uint oldValue = allowance[msg.sender][_spender];
        allowance[msg.sender][_spender] = safeAdd(oldValue, _addedValue);
        return true;
    }

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

    //Holds accumulated dividend tokens other than TKN
    TokenHolder tokenholder;

    //once locked, can no longer upgrade tokenholder
    bool lockedTokenHolder;

    function lockTokenHolder() onlyOwner {
        lockedTokenHolder = true;
    }

    //while unlocked, 
    //this gives owner lots of power over held dividend tokens
    //effectively can deny access to all accumulated tokens
    //thus crashing TKN value
    function setTokenHolder(address _th) onlyOwner {
        if (lockedTokenHolder) throw;
        tokenholder = TokenHolder(_th);
    }

    event Burn(address burner, uint amount);

    function burn(uint _amount) returns (bool result) {
        if (_amount > balanceOf[msg.sender]) return false;
        balanceOf[msg.sender] = safeSub(balanceOf[msg.sender], _amount);
        totalSupply = safeSub(totalSupply, _amount);
        result = tokenholder.burn(msg.sender, _amount);
        if (!result) throw;
        Burn(msg.sender, _amount);
    }

    uint public maxSupply;

    function setMaxSupply(uint _maxSupply) {
        if (msg.sender != controller) throw;
        if (maxSupply > 0) throw;
        maxSupply = _maxSupply;
    }
}

contract TokenHolder {
    function burn(address _burner, uint _amount)
    returns (bool result) { 
        return false;
    }
}


contract ICO is EventDefinitions, Testable, SafeMath, Owned {
    Token public token;
    address public controller;
    address public payee;

    Sale[] public sales;
    
    //salenum => minimum wei
    mapping (uint => uint) saleMinimumPurchases;

    //next sale number user can claim from
    mapping (address => uint) public nextClaim;

    //net contributed ETH by each user (in case of stop/refund)
    mapping (address => uint) refundInStop;

    modifier tokenIsSet() {
        if (address(token) == 0) throw;
        _;
    }

    modifier onlyController() {
        if (msg.sender != address(controller)) throw;
        _;
    }

    function ICO() { 
        owner = msg.sender;
        payee = msg.sender;
        allStopper = msg.sender;
    }

    //payee can only be changed once
    //intent is to lock payee to a contract that holds or distributes funds
    //in deployment, be sure to do this before changing owner!
    //we initialize to owner to keep things simple if there's no payee contract
    function changePayee(address newPayee) 
    onlyOwner notAllStopped {
        payee = newPayee;
    }

    function setToken(address _token) onlyOwner {
        if (address(token) != 0x0) throw;
        token = Token(_token);
    }

    //before adding sales, we can set this to be a test ico
    //this lets us manipulate time and drastically lowers weiPerEth
    function setAsTest() onlyOwner {
        if (sales.length == 0) {
            testing = true;
        }
    }

    function setController(address _controller) 
    onlyOwner notAllStopped {
        if (address(controller) != 0x0) throw;
        controller = _controller; //ICOController(_controller);
    }

    //********************************************************
    //Sales
    //********************************************************

    function addSale(address sale, uint minimumPurchase) 
    onlyController notAllStopped {
        uint salenum = sales.length;
        sales.push(Sale(sale));
        saleMinimumPurchases[salenum] = minimumPurchase;
        logSaleStart(Sale(sale).startTime(), Sale(sale).stopTime());
    }

    function addSale(address sale) onlyController {
        addSale(sale, 0);
    }

    function getCurrSale() constant returns (uint) {
        if (sales.length == 0) throw; //no reason to call before startFirstSale
        return sales.length - 1;
    }

    function currSaleActive() constant returns (bool) {
        return sales[getCurrSale()].isActive(currTime());
    }

    function currSaleComplete() constant returns (bool) {
        return sales[getCurrSale()].isComplete(currTime());
    }

    function numSales() constant returns (uint) {
        return sales.length;
    }

    function numContributors(uint salenum) constant returns (uint) {
        return sales[salenum].numContributors();
    }

    //********************************************************
    //ETH Purchases
    //********************************************************

    event logPurchase(address indexed purchaser, uint value);

    function () payable {
        deposit();
    }

    function deposit() payable notAllStopped {
        doDeposit(msg.sender, msg.value);

        //not in doDeposit because only for Eth:
        uint contrib = refundInStop[msg.sender];
        refundInStop[msg.sender] = contrib + msg.value;

        logPurchase(msg.sender, msg.value);
    }

    //is also called by token contributions
    function doDeposit(address _for, uint _value) private {
        uint currSale = getCurrSale();
        if (!currSaleActive()) throw;
        if (_value < saleMinimumPurchases[currSale]) throw;

        uint tokensToMintNow = sales[currSale].buyTokens(_for, _value, currTime());

        if (tokensToMintNow > 0) {
            token.mint(_for, tokensToMintNow);
        }
    }

    //********************************************************
    //Token Purchases
    //********************************************************

    //Support for purchase via other tokens
    //We don't attempt to deal with those tokens directly
    //We just give admin ability to tell us what deposit to credit
    //We only allow for first sale 
    //because first sale normally has no refunds
    //As written, the refund would be in ETH

    event logPurchaseViaToken(
                        address indexed purchaser, address indexed token, 
                        uint depositedTokens, uint ethValue, 
                        bytes32 _reference);

    event logPurchaseViaFiat(
                        address indexed purchaser, uint ethValue, 
                        bytes32 _reference);

    mapping (bytes32 => bool) public mintRefs;
    mapping (address => uint) public raisedFromToken;
    uint public raisedFromFiat;

    function depositFiat(address _for, uint _ethValue, bytes32 _reference) 
    notAllStopped onlyOwner {
        if (getCurrSale() > 0) throw; //only first sale allows this
        if (mintRefs[_reference]) throw; //already minted for this reference
        mintRefs[_reference] = true;
        raisedFromFiat = safeAdd(raisedFromFiat, _ethValue);

        doDeposit(_for, _ethValue);
        logPurchaseViaFiat(_for, _ethValue, _reference);
    }

    function depositTokens(address _for, address _token, 
                           uint _ethValue, uint _depositedTokens, 
                           bytes32 _reference) 
    notAllStopped onlyOwner {
        if (getCurrSale() > 0) throw; //only first sale allows this
        if (mintRefs[_reference]) throw; //already minted for this reference
        mintRefs[_reference] = true;
        raisedFromToken[_token] = safeAdd(raisedFromToken[_token], _ethValue);

        //tokens do not count toward price changes and limits
        //we have to look up pricing, and do our own mint()
        uint tokensPerEth = sales[0].tokensPerEth();
        uint tkn = safeMul(_ethValue, tokensPerEth) / weiPerEth();
        token.mint(_for, tkn);
        
        logPurchaseViaToken(_for, _token, _depositedTokens, _ethValue, _reference);
    }

    //********************************************************
    //Roundoff Protection
    //********************************************************
    //protect against roundoff in payouts
    //this prevents last person getting refund from not being able to collect
    function safebalance(uint bal) private returns (uint) {
        if (bal > this.balance) {
            return this.balance;
        } else {
            return bal;
        }
    }

    //It'd be nicer if last person got full amount
    //instead of getting shorted by safebalance()
    //topUp() allows admin to deposit excess ether to cover it
    //and later get back any left over 

    uint public topUpAmount;

    function topUp() payable onlyOwner notAllStopped {
        topUpAmount = safeAdd(topUpAmount, msg.value);
    }

    function withdrawTopUp() onlyOwner notAllStopped {
        uint amount = topUpAmount;
        topUpAmount = 0;
        if (!msg.sender.call.value(safebalance(amount))()) throw;
    }

    //********************************************************
    //Claims
    //********************************************************

    //Claim whatever you're owed, 
    //from whatever completed sales you haven't already claimed
    //this covers refunds, and any tokens not minted immediately
    //(i.e. auction tokens, not firstsale tokens)
    function claim() notAllStopped {
        var (tokens, refund, nc) = claimable(msg.sender, true);
        nextClaim[msg.sender] = nc;
        logClaim(msg.sender, refund, tokens);
        if (tokens > 0) {
            token.mint(msg.sender, tokens);
        }
        if (refund > 0) {
            refundInStop[msg.sender] = safeSub(refundInStop[msg.sender], refund);
            if (!msg.sender.send(safebalance(refund))) throw;
        }
    }

    //Allow admin to claim on behalf of user and send to any address.
    //Scenarios:
    //  user lost key
    //  user sent from an exchange
    //  user has expensive fallback function
    //  user is unknown, funds presumed abandoned
    //We only allow this after one year has passed.
    function claimFor(address _from, address _to) 
    onlyOwner notAllStopped {
        var (tokens, refund, nc) = claimable(_from, false);
        nextClaim[_from] = nc;

        logClaim(_from, refund, tokens);

        if (tokens > 0) {
            token.mint(_to, tokens);
        }
        if (refund > 0) {
            refundInStop[_from] = safeSub(refundInStop[_from], refund);
            if (!_to.send(safebalance(refund))) throw;
        }
    }

    function claimable(address _a, bool _includeRecent) 
    constant private tokenIsSet 
    returns (uint tokens, uint refund, uint nc) {
        nc = nextClaim[_a];

        while (nc < sales.length &&
               sales[nc].isComplete(currTime()) &&
               ( _includeRecent || 
                 sales[nc].stopTime() + 1 years < currTime() )) 
        {
            refund = safeAdd(refund, sales[nc].getRefund(_a));
            tokens = safeAdd(tokens, sales[nc].getTokens(_a));
            nc += 1;
        }
    }

    function claimableTokens(address a) constant returns (uint) {
        var (tokens, refund, nc) = claimable(a, true);
        return tokens;
    }

    function claimableRefund(address a) constant returns (uint) {
        var (tokens, refund, nc) = claimable(a, true);
        return refund;
    }

    function claimableTokens() constant returns (uint) {
        return claimableTokens(msg.sender);
    }

    function claimableRefund() constant returns (uint) {
        return claimableRefund(msg.sender);
    }

    //********************************************************
    //Withdraw ETH
    //********************************************************

    mapping (uint => bool) ownerClaimed;

    function claimableOwnerEth(uint salenum) constant returns (uint) {
        uint time = currTime();
        if (!sales[salenum].isComplete(time)) return 0;
        return sales[salenum].getOwnerEth();
    }

    function claimOwnerEth(uint salenum) onlyOwner notAllStopped {
        if (ownerClaimed[salenum]) throw;

        uint ownereth = claimableOwnerEth(salenum);
        if (ownereth > 0) {
            ownerClaimed[salenum] = true;
            if ( !payee.call.value(safebalance(ownereth))() ) throw;
        }
    }

    //********************************************************
    //Sweep tokens sent here
    //********************************************************

    //Support transfer of erc20 tokens out of this contract's address
    //Even if we don't intend for people to send them here, somebody will

    event logTokenTransfer(address token, address to, uint amount);

    function transferTokens(address _token, address _to) onlyOwner {
        Token token = Token(_token);
        uint balance = token.balanceOf(this);
        token.transfer(_to, balance);
        logTokenTransfer(_token, _to, balance);
    }

    //********************************************************
    //Emergency Stop
    //********************************************************

    bool allstopped;
    bool permastopped;

    //allow allStopper to be more secure address than owner
    //in which case it doesn't make sense to let owner change it again
    address allStopper;
    function setAllStopper(address _a) onlyOwner {
        if (allStopper != owner) return;
        allStopper = _a;
    }
    modifier onlyAllStopper() {
        if (msg.sender != allStopper) throw;
        _;
    }

    event logAllStop();
    event logAllStart();

    modifier allStopped() {
        if (!allstopped) throw;
        _;
    }

    modifier notAllStopped() {
        if (allstopped) throw;
        _;
    }

    function allStop() onlyAllStopper {
        allstopped = true;    
        logAllStop();
    }

    function allStart() onlyAllStopper {
        if (!permastopped) {
            allstopped = false;
            logAllStart();
        }
    }

    function emergencyRefund(address _a, uint _amt) 
    allStopped 
    onlyAllStopper {
        //if you start actually calling this refund, the disaster is real.
        //Don't allow restart, so this can't be abused 
        permastopped = true;

        uint amt = _amt;

        uint ethbal = refundInStop[_a];

        //convenient default so owner doesn't have to look up balances
        //this is fine as long as no funds have been stolen
        if (amt == 0) amt = ethbal; 

        //nobody can be refunded more than they contributed
        if (amt > ethbal) amt = ethbal;

        //since everything is halted, safer to call.value
        //so we don't have to worry about expensive fallbacks
        if ( !_a.call.value(safebalance(amt))() ) throw;
    }

    function raised() constant returns (uint) {
        return sales[getCurrSale()].raised();
    }

    function tokensPerEth() constant returns (uint) {
        return sales[getCurrSale()].tokensPerEth();
    }
}

  Contract ABI  
[{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"raisedFromToken","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"setToken","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_a","type":"address"}],"name":"setAllStopper","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"currTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newPayee","type":"address"}],"name":"changePayee","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"currSaleActive","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_for","type":"address"},{"name":"_token","type":"address"},{"name":"_ethValue","type":"uint256"},{"name":"_depositedTokens","type":"uint256"},{"name":"_reference","type":"bytes32"}],"name":"depositTokens","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"allStart","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"currSaleComplete","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"sale","type":"address"}],"name":"addSale","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"salenum","type":"uint256"}],"name":"claimableOwnerEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"claimableRefund","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_a","type":"address"},{"name":"_amt","type":"uint256"}],"name":"emergencyRefund","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_to","type":"address"}],"name":"transferTokens","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"weiPerEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"a","type":"address"}],"name":"claimableRefund","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"salenum","type":"uint256"}],"name":"numContributors","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"t","type":"uint256"}],"name":"setFakeTime","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"a","type":"address"}],"name":"claimableTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"testing","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"m","type":"uint256"}],"name":"addMinutes","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_controller","type":"address"}],"name":"setController","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"setAsTest","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numSales","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"raisedFromFiat","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"salenum","type":"uint256"}],"name":"claimOwnerEth","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"withdrawTopUp","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"payee","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"name":"claimFor","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"sales","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"claimableTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokensPerEth","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"mintRefs","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"nextClaim","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":true,"type":"function"},{"constant":false,"inputs":[{"name":"d","type":"uint256"}],"name":"addDays","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"topUp","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"topUpAmount","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getCurrSale","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"allStop","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_for","type":"address"},{"name":"_ethValue","type":"uint256"},{"name":"_reference","type":"bytes32"}],"name":"depositFiat","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"sale","type":"address"},{"name":"minimumPurchase","type":"uint256"}],"name":"addSale","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"raised","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"logPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"token","type":"address"},{"indexed":false,"name":"depositedTokens","type":"uint256"},{"indexed":false,"name":"ethValue","type":"uint256"},{"indexed":false,"name":"_reference","type":"bytes32"}],"name":"logPurchaseViaToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":false,"name":"ethValue","type":"uint256"},{"indexed":false,"name":"_reference","type":"bytes32"}],"name":"logPurchaseViaFiat","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"to","type":"address"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"logTokenTransfer","type":"event"},{"anonymous":false,"inputs":[],"name":"logAllStop","type":"event"},{"anonymous":false,"inputs":[],"name":"logAllStart","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"startTime","type":"uint256"},{"indexed":false,"name":"stopTime","type":"uint256"}],"name":"logSaleStart","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":false,"name":"refund","type":"uint256"},{"indexed":false,"name":"tokens","type":"uint256"}],"name":"logClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052341561000c57fe5b5b6001805461010060a860020a03191661010033600160a060020a03169081029190911790915560058054600160a060020a03191682179055600f80546201000060b060020a031916620100009092029190911790555b5b61234b806100736000396000f300606060405236156102355763ffffffff60e060020a60003504166307cbe8ab8114610246578063144fa6d714610274578063156773ca146102925780631a6af7b7146102b05780631c1bc850146102d2578063379ba3b7146102f05780633fe3f42714610314578063443f95dc1461034157806348b17b64146103535780634a6d0292146103775780634e71d92d1461039557806353cea153146103a75780635ab827f6146103cc57806367f8a8b8146103ee5780636a092e791461040f5780636c530ee3146104335780636e1e063f1461045557806371c1d1961461048357806379ba5097146104a85780637a08339d146104ba57806384d24226146104cf5780638d03b102146104fd5780638da5cb5b146105215780638ff591b41461054d57806392eefe9b1461056257806398e54c551461058057806399aa93c8146105925780639c492b9e146105b4578063a015cb10146105d6578063a6f9dae1146105eb578063a8af232b14610609578063ae90b2131461061b578063b4ba9e1114610647578063b5f522f71461066b578063bab8fe401461069a578063cbdd69b5146106bc578063cd5681d5146106de578063cf00746014610705578063d0e30db014610733578063dabd5d651461073d578063dc29f1de14610752578063dd592a321461075c578063e12097b71461077e578063ecb6c47a146107a0578063eeee7cc0146107b2578063efecab8a146107d6578063f0ea4bfc146107f7578063f77c479114610819578063fc0c546a14610845575b6102445b610241610871565b5b565b005b341561024e57fe5b610262600160a060020a03600435166108ef565b60408051918252519081900360200190f35b341561027c57fe5b610244600160a060020a0360043516610901565b005b341561029a57fe5b610244600160a060020a0360043516610959565b005b34156102b857fe5b6102626109d6565b60408051918252519081900360200190f35b34156102da57fe5b610244600160a060020a03600435166109f4565b005b34156102f857fe5b610300610a47565b604080519115158252519081900360200190f35b341561031c57fe5b610244600160a060020a0360043581169060243516604435606435608435610aeb565b005b341561034957fe5b610244610d17565b005b341561035b57fe5b610300610d82565b604080519115158252519081900360200190f35b341561037f57fe5b610244600160a060020a0360043516610e26565b005b341561039d57fe5b610244610e52565b005b34156103af57fe5b610262600435610fc2565b60408051918252519081900360200190f35b34156103d457fe5b610262611100565b60408051918252519081900360200190f35b34156103f657fe5b610244600160a060020a0360043516602435611111565b005b341561041757fe5b610244600160a060020a03600435811690602435166111c9565b005b341561043b57fe5b610262611336565b60408051918252519081900360200190f35b341561045d57fe5b610262600160a060020a036004351661135f565b60408051918252519081900360200190f35b341561048b57fe5b610262600435611384565b60408051918252519081900360200190f35b34156104b057fe5b610244611416565b005b34156104c257fe5b610244600435611467565b005b34156104d757fe5b610262600160a060020a0360043516611483565b60408051918252519081900360200190f35b341561050557fe5b6103006114a8565b604080519115158252519081900360200190f35b341561052957fe5b6105316114b1565b60408051600160a060020a039092168252519081900360200190f35b341561055557fe5b6102446004356114c5565b005b341561056a57fe5b610244600160a060020a03600435166114e7565b005b341561058857fe5b610244611551565b005b341561059a57fe5b61026261158c565b60408051918252519081900360200190f35b34156105bc57fe5b610262611593565b60408051918252519081900360200190f35b34156105de57fe5b610244600435611599565b005b34156105f357fe5b610244600160a060020a0360043516611655565b005b341561061157fe5b610244611696565b005b341561062357fe5b61053161170e565b60408051600160a060020a039092168252519081900360200190f35b341561064f57fe5b610244600160a060020a036004358116906024351661171d565b005b341561067357fe5b6105316004356118b4565b60408051600160a060020a039092168252519081900360200190f35b34156106a257fe5b6102626118e6565b60408051918252519081900360200190f35b34156106c457fe5b6102626118f7565b60408051918252519081900360200190f35b34156106e657fe5b61030060043561198c565b604080519115158252519081900360200190f35b341561070d57fe5b610262600160a060020a03600435166119a1565b60408051918252519081900360200190f35b610244610871565b005b341561074557fe5b6102446004356119b3565b005b6102446119d7565b005b341561076457fe5b610262611a1d565b60408051918252519081900360200190f35b341561078657fe5b610262611a23565b60408051918252519081900360200190f35b34156107a857fe5b610244611a41565b005b34156107ba57fe5b610244600160a060020a0360043516602435604435611a9d565b005b34156107de57fe5b610244600160a060020a0360043516602435611b80565b005b34156107ff57fe5b610262611d08565b60408051918252519081900360200190f35b341561082157fe5b610531611d9d565b60408051600160a060020a039092168252519081900360200190f35b341561084d57fe5b610531611dac565b60408051600160a060020a039092168252519081900360200190f35b600f5460009060ff16156108855760006000fd5b61088f3334611dbb565b50600160a060020a033316600081815260096020908152604091829020805434808201909255835191825292519293927fc30df14cb928081d7587d26c00adb1c5483c8049cc0456e2d2e8e226dfb7c920929181900390910190a25b5b50565b600b6020526000908152604090205481565b60015433600160a060020a0390811661010090920416146109225760006000fd5b600354600160a060020a0316156109395760006000fd5b60038054600160a060020a031916600160a060020a0383161790555b5b50565b60015433600160a060020a03908116610100909204161461097a5760006000fd5b600154600f54620100009004600160a060020a0390811661010090920416146109a2576108eb565b600f805475ffffffffffffffffffffffffffffffffffffffff0000191662010000600160a060020a038416021790555b5b50565b60015460009060ff16156109ed57506000546109f0565b50425b5b90565b60015433600160a060020a039081166101009092041614610a155760006000fd5b600f5460ff1615610a265760006000fd5b60058054600160a060020a031916600160a060020a0383161790555b5b5b50565b60006006610a53611a23565b81548110610a5d57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a03166382afd23b610a936109d6565b6000604051602001526040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b1515610ad157fe5b60325a03f11515610ade57fe5b5050604051519150505b90565b600f54600090819060ff1615610b015760006000fd5b60015433600160a060020a039081166101009092041614610b225760006000fd5b6000610b2c611a23565b1115610b385760006000fd5b6000838152600a602052604090205460ff1615610b555760006000fd5b6000838152600a60209081526040808320805460ff19166001179055600160a060020a0389168352600b909152902054610b8f9086611f28565b600160a060020a0387166000908152600b6020526040812091909155600680549091908110610bba57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663cbdd69b56000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b1515610c1f57fe5b60325a03f11515610c2c57fe5b5050604051519250610c3e9050611336565b610c488684611f50565b811515610c5157fe5b6003546040805160e060020a6340c10f19028152600160a060020a038c81166004830152949093046024840181905290519094509216916340c10f199160448082019260009290919082900301818387803b1515610cab57fe5b60325a03f11515610cb857fe5b505060408051868152602081018890528082018690529051600160a060020a03808a1693508a16917f15910e5cea9f22af6be011580707d2135bf1a23bf888657249f6e887af70a1fc919081900360600190a35b5b5b50505050505050565b600f5433600160a060020a03908116620100009092041614610d395760006000fd5b600f54610100900460ff16151561024157600f805460ff191690556040517f31ebd13fa817dd60b9d0ca3b04f5c010467dad9e01dce48c68ccd946dd8ec62990600090a15b5b5b565b60006006610d8e611a23565b81548110610d9857fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316633a0be1a6610a936109d6565b6000604051602001526040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b1515610ad157fe5b60325a03f11515610ade57fe5b5050604051519150505b90565b60045433600160a060020a03908116911614610e425760006000fd5b6108eb816000611b80565b5b5b50565b600f546000908190819060ff1615610e6a5760006000fd5b610e75336001611f7f565b600160a060020a03331660008181526008602090815260409182902084905581518581529081018690528151959850939650919450927fb72449e538635569e6f2eb1500da813bc2847392fa6a6972966a484ea8f9d73a9281900390910190a26000831115610f43576003546040805160e060020a6340c10f19028152600160a060020a03338116600483015260248201879052915191909216916340c10f1991604480830192600092919082900301818387803b1515610f3257fe5b60325a03f11515610f3f57fe5b5050505b6000821115610fba57600160a060020a033316600090815260096020526040902054610f6f9083612278565b600160a060020a0333166000818152600960205260409020919091556108fc610f9784612291565b6040518115909202916000818181858888f193505050501515610fba5760006000fd5b5b5b5b505050565b60006000610fce6109d6565b9050600683815481101515610fdf57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316633a0be1a6826000604051602001526040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b151561104c57fe5b60325a03f1151561105957fe5b5050604051511515905061107057600091506110fa565b600680548490811061107e57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663c5dacf686000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b15156110e357fe5b60325a03f115156110f057fe5b5050604051519250505b50919050565b600061110b3361135f565b90505b90565b600f54600090819060ff1615156111285760006000fd5b600f5433600160a060020a0390811662010000909204161461114a5760006000fd5b5050600f805461ff001916610100179055600160a060020a0382166000908152600960205260409020548190811515611181578091505b8082111561118d578091505b83600160a060020a03166111a083612291565b604051600081818185876185025a03f19250505015156111c05760006000fd5b5b5b5b50505050565b600154600090819033600160a060020a0390811661010090920416146111ef5760006000fd5b83915081600160a060020a03166370a08231306000604051602001526040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b151561125257fe5b60325a03f1151561125f57fe5b50505060405180519050905081600160a060020a031663a9059cbb84836000604051602001526040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15156112d357fe5b60325a03f115156112e057fe5b505060408051600160a060020a0380881682528616602082015280820184905290517f977a8f1bdcf5f444d404662ea2c090d707ebcef1be61b37fe6ce74d0c6288fb892509081900360600190a15b5b50505050565b60015460009060ff161561134c575060c86109f0565b50670de0b6b3a76400006109f0565b5b90565b6000600060006000611372856001611f7f565b9250925092508193505b505050919050565b600060068281548110151561139557fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316638f03850b6000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b15156113fa57fe5b60325a03f1151561140757fe5b5050604051519150505b919050565b60025433600160a060020a03908116911614156102415760025460018054600160a060020a039092166101000274ffffffffffffffffffffffffffffffffffffffff00199092169190911790555b5b565b60015460ff1615156114795760006000fd5b60008190555b5b50565b6000600060006000611496856001611f7f565b9250925092508293505b505050919050565b60015460ff1681565b6001546101009004600160a060020a031681565b60015460ff1615156114d75760006000fd5b60008054603c83020190555b5b50565b60015433600160a060020a0390811661010090920416146115085760006000fd5b600f5460ff16156115195760006000fd5b600454600160a060020a0316156115305760006000fd5b60048054600160a060020a031916600160a060020a0383161790555b5b5b50565b60015433600160a060020a0390811661010090920416146115725760006000fd5b6006541515610241576001805460ff1916811790555b5b5b565b6006545b90565b600c5481565b60015460009033600160a060020a0390811661010090920416146115bd5760006000fd5b600f5460ff16156115ce5760006000fd5b6000828152600e602052604090205460ff16156115eb5760006000fd5b6115f482610fc2565b9050600081111561164d576000828152600e60205260409020805460ff19166001179055600554600160a060020a031661162d82612291565b604051600081818185876185025a03f192505050151561164d5760006000fd5b5b5b5b5b5050565b60015433600160a060020a0390811661010090920416146116765760006000fd5b60028054600160a060020a031916600160a060020a0383161790555b5b50565b60015460009033600160a060020a0390811661010090920416146116ba5760006000fd5b600f5460ff16156116cb5760006000fd5b50600d80546000909155600160a060020a0333166116e882612291565b604051600081818185876185025a03f19250505015156108eb5760006000fd5b5b5b5b50565b600554600160a060020a031681565b6001546000908190819033600160a060020a0390811661010090920416146117455760006000fd5b600f5460ff16156117565760006000fd5b611761856000611f7f565b600160a060020a03881660008181526008602090815260409182902084905581518581529081018690528151959850939650919450927fb72449e538635569e6f2eb1500da813bc2847392fa6a6972966a484ea8f9d73a9281900390910190a2600083111561182f576003546040805160e060020a6340c10f19028152600160a060020a03878116600483015260248201879052915191909216916340c10f1991604480830192600092919082900301818387803b151561181e57fe5b60325a03f1151561182b57fe5b5050505b60008211156118a957600160a060020a03851660009081526009602052604090205461185b9083612278565b600160a060020a0380871660009081526009602052604090209190915584166108fc61188684612291565b6040518115909202916000818181858888f1935050505015156118a95760006000fd5b5b5b5b5b5050505050565b60068054829081106118c257fe5b906000526020600020900160005b915054906101000a9004600160a060020a031681565b600061110b33611483565b90505b90565b60006006611903611a23565b8154811061190d57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663cbdd69b56000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b1515610ad157fe5b60325a03f11515610ade57fe5b5050604051519150505b90565b600a6020526000908152604090205460ff1681565b60086020526000908152604090205481565b60015460ff1615156119c55760006000fd5b600080546201518083020190555b5b50565b60015433600160a060020a0390811661010090920416146119f85760006000fd5b600f5460ff1615611a095760006000fd5b611a15600d5434611f28565b600d555b5b5b565b600d5481565b6006546000901515611a355760006000fd5b50600654600019015b90565b600f5433600160a060020a03908116620100009092041614611a635760006000fd5b600f805460ff191660011790556040517f0a9a784214055eda7660e0eea4cac1eb3e349173dce3741cb49393e72e98070190600090a15b5b565b600f5460ff1615611aae5760006000fd5b60015433600160a060020a039081166101009092041614611acf5760006000fd5b6000611ad9611a23565b1115611ae55760006000fd5b6000818152600a602052604090205460ff1615611b025760006000fd5b6000818152600a60205260409020805460ff19166001179055600c54611b289083611f28565b600c55611b358383611dbb565b60408051838152602081018390528151600160a060020a038616927f8a890695a0d1d5bc0de2dd9278f1b080ce4fa5f192849361d46119e98dea1f4d928290030190a25b5b5b505050565b60045460009033600160a060020a03908116911614611b9f5760006000fd5b600f5460ff1615611bb05760006000fd5b5060068054908160018101611bc583826122d4565b916000526020600020900160005b8154600160a060020a038088166101009390930a8381029102199091161790915560008381526007602090815260408083208790558051820183905280517f78e9792500000000000000000000000000000000000000000000000000000000815290517fea217d4dc825d94490e4479842497722c85e7da8444afc5a5c6928966e85849395506378e9792593600480840194938390030190829087803b1515611c7857fe5b60325a03f11515611c8557fe5b5050506040518051905084600160a060020a03166303ff5e736000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b1515611cd557fe5b60325a03f11515611ce257fe5b5050604080518051938152602081019390935280519283900301919050a15b5b5b505050565b60006006611d14611a23565b81548110611d1e57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663f0ea4bfc6000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b1515610ad157fe5b60325a03f11515610ade57fe5b5050604051519150505b90565b600454600160a060020a031681565b600354600160a060020a031681565b60006000611dc7611a23565b9150611dd1610a47565b1515611ddd5760006000fd5b600082815260076020526040902054831015611df95760006000fd5b6006805483908110611e0757fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663d2395dcd8585611e3f6109d6565b6000604051602001526040518463ffffffff1660e060020a0281526004018084600160a060020a0316600160a060020a031681526020018381526020018281526020019350505050602060405180830381600087803b1515611e9d57fe5b60325a03f11515611eaa57fe5b50506040515191505060008111156111c0576003546040805160e060020a6340c10f19028152600160a060020a03878116600483015260248201859052915191909216916340c10f1991604480830192600092919082900301818387803b1515611f1057fe5b60325a03f11515610d0c57fe5b5050505b5b50505050565b6000828201611f45848210801590611f405750838210155b6122c3565b8091505b5092915050565b6000828202611f45841580611f405750838583811515611f6c57fe5b04145b6122c3565b8091505b5092915050565b60035460009081908190600160a060020a03161515611f9e5760006000fd5b50600160a060020a0384166000908152600860205260409020545b6006548110801561205d57506006805482908110611fd357fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a0316633a0be1a66120096109d6565b6000604051602001526040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b151561204757fe5b60325a03f1151561205457fe5b50506040515190505b80156121055750838061210557506120736109d6565b600680548390811061208157fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a03166303ff5e736000604051602001526040518163ffffffff1660e060020a028152600401809050602060405180830381600087803b15156120e657fe5b60325a03f115156120f357fe5b505050604051805190506301e1338001105b5b1561226f576121b78260068381548110151561211e57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663696c58c4886000604051602001526040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b151561219d57fe5b60325a03f115156121aa57fe5b5050604051519050611f28565b9150612265836006838154811015156121cc57fe5b906000526020600020900160005b9054906101000a9004600160a060020a0316600160a060020a031663450efe21886000604051602001526040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b151561219d57fe5b60325a03f115156121aa57fe5b5050604051519050611f28565b9250600101611fb9565b5b5b9250925092565b6000612286838311156122c3565b508082035b92915050565b600030600160a060020a0316318211156122b65750600160a060020a03301631611411565b5080611411565b5b919050565b8015156108eb5760006000fd5b5b50565b815481835581811511610fba57600083815260209020610fba9181019083016122fe565b5b505050565b6109f091905b808211156123185760008155600101612304565b5090565b905600a165627a7a72305820f0811d8f921c387af47f7a37b04616fc6ee77f8321d9bb1e4ac21f3b1c61db8e0029

   Swarm Source:
bzzr://f0811d8f921c387af47f7a37b04616fc6ee77f8321d9bb1e4ac21f3b1c61db8e
View All
Block Age txn Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward