Sponsored:   Color Platform: Decentralized App Store - Special Airdrop For Everyone (~17 Sep), Register NOW!
Contract Overview
Balance: 37.51271129276936702 Ether
Ether Value: $7,830.40 (@ $208.74/ETH)
Transactions: 3691 txns
 Latest 25 txns From a total of 3691 Transactions
(> More Than 25 PendingTxns)

TxHash Age From To Value [TxFee]
0xc3ffbcc9197aba0f95aabf2a8669b50be7f2f1c450bdc22d81dfbe8448e65c3c(pending)0x3a7410b8d444505efdb1b79ad63e3ccb883705ee  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0xd375ac9f61359f42649ad83d8955d128c23efe3786407cf6f3057789bd302f27(pending)0x98198eed89896ec4c9589942a0c4e1045878898b  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0xdae85654cd3f5183307d194031be7e21eac78f53abaa00cf92d1c3d20069148c(pending)0xbc0554ff0be4c8c7749e6557fe6f9f49f6b088f2  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0x150cabfbe494db321d8a92d044e6034a1c2e42d93d805d32fa7c6659bf272b6e(pending)0xccb236e9ca64931c2d10d8e206746a47241228f6  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0x0706fe112665b7d9780669ce8e5602bb930c102674bacb8983548bf57a2c7070(pending)0x50b4a84c42925c8eb67b64733cf9593146b972e1  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0x1538263c3fed1dc815f5154d23e929338e73bcff4406f70acc6c4e1a4e3473cb(pending)0xb80afe9a681164410d3c4af7207ae146f348b015  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0xb6cce27cc1dc70f2f86beaabfb175c6708f4fde1842abd33db8658bc7e984c8d(pending)0x1ef25c47bcfa317ba9f0e35bf0cf2028e6025487  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0xd2097e3f485be7a1d514d414d86c6e59f0e9ce485f1f2106927dffb8352792e4(pending)0x8d513d643c289fbf122ba03a899b5811d660a90f  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0x713141d754a7296ed0bf305e1fb4e84e6b2e1147246b56818adf01dfac20a976(pending)0x848a9126ff57004aa8bfdc99384f36a4754d4367  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0x40feb82ed02618db7315782c6bc1a3c2a41e701bdb81690be2fce4f55b367ae0(pending)0xc434c6fcb90ad04f7480e6830bdaf6ad3381d505  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0xc5ce5354eb9c7a1ebef41cd6147919a4331db584ebeb4035ba4ff1abd191d677(pending)0x6f54f652c650cc6a7bed4c355b8ce728c026c23e  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0x1a67b22c9ce7a3fef6f461d7a119fd27852852831ece05060962fb9b4e91a978(pending)0xa4feec898c9be1561c0293b846c1c512a0101503  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0x8b6dc90f415b6584682a2972795609b6c5cd708d25574b8b12f361fff6d76f2a(pending)0xcf19d5e6056a3f8bbcaa4bc0bdb72f3fe314ca61  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0xa4ad1cac54eb2c8515dd2b17899b3f25c491e0eb03d633a6a74f397797f52a15(pending)0xd9bdfb32b04e3df59bc43d55ffd20fc52b20320f  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0xcf4702bae7a8fc7205ab08a7dd202c7eb45f3b72b3f747e5a3236307efb195c3(pending)0x1a4d6f98c28fb3c37cb3a50951fb1fca36614cf5  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0xe58e08c378448b3c94f5ba27f75f94bdd9560c377a8dba1bf64afec38b53c220(pending)0xa7e612eecd77a031dfd8014b946edfa17c150fad  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0x72c35e9cebf44149b0e0c62fc0a6560d523d6dbbd952b34297a0e7aba62e7c62(pending)0x459669a4ded7441cace22d98a4e3c237cee49de0  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0xc5fd15c281038b3d2d27d1646e07b9735fd98d1acce417fe14f784ce71367d7a(pending)0x28736f01ad181e58e037766462d73ce2c75cfdf8  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0x6a0e2c6022186dd1d51d976318a750d44e15dddc8b55edd390cce0210f8571d3(pending)0xb2ed0d2952ad408aac8d2a7b286123d04d1117de  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0xbeb23730ef79840ca7aab9508f4c2864708abf96500c22a43f2ff37efa3039b3(pending)0xb513384dabaea7ae0082d367dc136f511b77ec7f  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0xccfbdeff67d8dac2717a6dce75a024ba293e47e931bce95c96759f8898801071(pending)0xf5a5b477e685a1f423e6c24070e62747371b1e2c  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0x467219bafdccfd9669c3049fe4be058b47bdeb3d944234cbe115b101577257c1(pending)0xd3567b7c4c4fdeae6ccad9c1d582eec7861d6755  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0x79ed99d115c63b162c912be25b8b97553f5eda2247cfbc47e3151670dd3990ec(pending)0xdd22c4c0a3ffd1646e7b2efb9a2437e386d7fb78  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0x381982cca7c5a8601df5d298ec60b9151119e1c6b2929d48b8c4e4d8ce8ca61e(pending)0x9d640321922227b8e0d6db38ea944c1228c1b45b  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
0x5373bef7ed0156502bdfd63cd70524c092b3fd38f91eeb1a13bd9feed430efb8(pending)0x7dab2ccde0a3cb9e83afac655ab8f857ec5fca43  IN  0x25df2edc10a16f05e579d127a902cac6fdff940e0 Ether(Pending)
 Internal Transactions as a result of Contract Execution
 Latest 8 Internal Transactions

ParentTxHash Block Age From To Value
0x9dc8c4ded8c66abb6838eeddce8aaacfc8aedf3dba0e8bb9d7679b1fd98b142e625626916 days 16 hrs ago0xd4f5bf184bebfd53ac276ec6e091d051d0ed459e0x25df2edc10a16f05e579d127a902cac6fdff940e0.001 Ether
0x7715d85d0acc76e861cfb179320602b69b2289e15f7d5813477696044d4b5bf4620183925 days 21 hrs ago0xd4f5bf184bebfd53ac276ec6e091d051d0ed459e0x25df2edc10a16f05e579d127a902cac6fdff940e0.005921046 Ether
0x116397b7f8f3e38590250d1760117760e4f3bffff671b300f19efaebb1836afa618354628 days 23 hrs ago0xd4f5bf184bebfd53ac276ec6e091d051d0ed459e0x25df2edc10a16f05e579d127a902cac6fdff940e0.0001 Ether
0x1587e1f6cd923b9d172e455145f267664a990a99be509e47b04252613a327aa9617631230 days 5 hrs ago0xd4f5bf184bebfd53ac276ec6e091d051d0ed459e0x25df2edc10a16f05e579d127a902cac6fdff940e0.0002 Ether
0x389caea0f1f171fb131cc90d2571816b36f73ad68682b863832c8d5c0c30940a615404333 days 23 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0x86ae96921b155299e7a566d79133113a18ac9f1d1.4994938 Ether
0xd3f9600035c12aa666408ee2a7d3201df384537c2ae0639c9f29ca2f43b476fb603406754 days 5 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0x67641ff53bcbc944c53dbffe16bb4d02b304516f1 Ether
0xb1f4a317fafde7c734406815da7d1e367fa4d36068da8dfac0a03a7bb7bda37f602838355 days 4 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0x751a5f69cf2256a85de8f31e48b9cb0e0c925cd40.1 Ether
0xffa77167e7ad03238c036f894c165075a0440fd5d182fce0287dfcc17d55a165602602855 days 14 hrs ago0x25df2edc10a16f05e579d127a902cac6fdff940e0x27eb410e2f9a21430886408ad3a572b9314137540.1 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity), NestedArrayFunctionCallDecoder (medium-severity) SolidityCompiler Bugs.

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



  Contract Source Code   Find Similiar Contracts

/*

The Sale contract manages a token sale.

The Sale contract primarily does the following:

	- allows individuals to buy tokens during a token sale
	- allows individuals to claim the tokens after a successful token sale
	- allows individuals to receive an ETH refund after a cancelled token sale
	- allows an admin to cancel a token sale, after which individuals can request refunds
	- allows an admin to certify a token sale, after which an admin can withdraw contributed ETH
	- allows an admin to complete a token sale, after which an individual (following a brief release period) can request their tokens
	- allows an admin to return contributed ETH to individuals
	- allows an admin to grant tokens to an individual
	- allows an admin to withdraw ETH from the token sale
	- allows an admin to add and remove individuals from a whitelist
	- allows an admin to pause or activate the token sale
	
The sale runs from a start timestamp to a finish timestamp.  After the release timestamp (assuming a successful sale), individuals can claim their tokens.  If the sale is cancelled, individuals can request a refund.  Furthermore, an admin may return ETH and negate purchases to respective individuals as deemed necessary.  Once the sale is certified or completed, ETH can be withdrawn by the company.

The contract creator appoints a delegate to perform most administrative tasks.

All events are logged for the purpose of transparency.

All math uses SafeMath.

ETH and tokens (often referred to as "value" and "tokens" in variable names) are really 1/10^18 of their respective parent units.  Basically, the values represent wei and the token equivalent thereof.

*/

pragma solidity ^0.4.18;

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

    function safeDiv(uint a, uint b) internal returns (uint) {
        assert(b > 0);
        uint c = a / b;
        assert(a == b * 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;
    }
}

contract SaleCallbackInterface {
    function handleSaleCompletionCallback(uint256 _tokens) external payable returns (bool);
    function handleSaleClaimCallback(address _recipient, uint256 _tokens) external returns (bool);  
}

contract Sale is SafeMath {
    
    address public creator;		    // address of the contract's creator
    address public delegate;		// address of an entity allowed to perform administrative functions on behalf of the creator
    
    address public marketplace;	    // address of another smart contract that manages the token and Smart Exchange
    
    uint256 public start;			// timestamp that the sale begins
    uint256 public finish;			// timestamp that the sale ends
    uint256 public release;			// timestamp that sale participants may "claim" their tokens (will be after the finish)
    
    uint256 public pricer;			// a multiplier (>= 1) used to determine how many tokens (or, really, 10^18 sub-units of that token) to give purchasers
    uint256 public size;			// maximum number of 10^18 sub-units of tokens that can be purchased/granted during the sale
    
    bool public restricted;		    // whether purchasers and recipients of tokens must be whitelisted manually prior to participating in the sale

    bool public active;			    // whether individuals are allowed to purchase tokens -- if false, they cannot.  if true, they can or cannot.  
    								// other factors, like start/finish, size, and others can restrict participation as well, even if active = true.
    								// this also can remain true indefinitely, even if the token sale has been cancelled or has completed.
    								
    
    int8 public progress;			// -1 = token sale cancelled, 0 = token sale ongoing, 1 = token sale certified (can withdraw ETH while sale is live), 2 = token sale completed
    
    uint256 public tokens;			// number of sub-tokens that have been purchased/granted during the sale.  purchases/grants can be reversed while progress = 0 || progress = 1 resulting in tokens going down
    uint256 public value;			// number of sub-ether (wei) that have been contributed during the sale.  purchases can be resversed while progress = 0 || progress = 1 resulting in value going down
    
    uint256 public withdrawls;		// the number of sub-ether (wei) that have been withdrawn by the contract owner
    uint256 public reserves;		// the number of sub-ether (wei) that have been sent to serve as reserve in the marketplace
    
    mapping(address => bool) public participants;			// mapping to record who has participated in the sale (purchased/granted)
    address[] public participantIndex;						// index of participants
    
    mapping(address => uint256) public participantTokens;	// sub-tokens purchased/granted to each participant
    mapping(address => uint256) public participantValues;	// sub-ether contributed by each participant
    
    mapping(address => bool) public participantRefunds;	    // mapping to record who has been awarded a refund after a cancelled sale
    mapping(address => bool) public participantClaims;		// mapping to record who has claimed their tokens after a completed sale
    
    mapping(address => bool) public whitelist;				// mapping to record who has been approved to participate in a "restricted" sale
    
    uint256[] public bonuses;								// stores bonus percentages, where even numbered elements store timestamps and odd numbered elements store bonus percentages
    
    bool public mutable;									// whether certain properties (like finish and release) of the sale can be updated to increase the liklihood of a successful token sale for all parties involved
    
    modifier ifCreator { require(msg.sender == creator); _; }		// if the caller created the contract...
    modifier ifDelegate { require(msg.sender == delegate); _; }		// if the caller is currently the appointed delegate...
    modifier ifMutable { require(mutable); _; }						// if the certain properties of the sale can be changed....
    
    event Created();																						// the contract was created
    event Bought(address indexed _buyer, address indexed _recipient, uint256 _tokens, uint256 _value);		// an individual bought tokens
    event Claimed(address indexed _recipient, uint256 _tokens);												// an individual claimed tokens after the completion of the sale and after tokens were scheduled for release
    event Refunded(address indexed _recipient, uint256 _value);												// an individual requested a refund of the ETH they contributed after a cancelled token sale
    event Reversed(address indexed _recipient, uint256 _tokens, uint256 _value);							// an individual was sent the ETH they contributed to the sale and will not receive tokens
    event Granted(address indexed _recipient, uint256 _tokens);												// an individual was granted tokens, without contributing ETH
    event Withdrew(address _recipient, uint256 _value);														// the contract creator withdrew ETH from the token sale
    event Completed(uint256 _tokens, uint256 _value, uint256 _reserves);									// the contract creator signaled that the sale completed successfuly
    event Certified(uint256 _tokens, uint256 _value);														// the contract creator certified the sale
    event Cancelled(uint256 _tokens, uint256 _value);														// the contract creator cancelled the sale
    event Listed(address _participant);																		// an individual was added to the whitelist
    event Delisted(address _participant);																	// an individual was removed from the whitelist
    event Paused();																							// the sale was paused (active = false)
    event Activated();    																					// the sale was activated (active = true)

    function Sale() {
        
        creator = msg.sender;
        delegate = msg.sender;
        
        start = 1;					            // contributions may be made as soon as the contract is published
        finish = 1535760000;				    // the sale continues through 09/01/2018 @ 00:00:00
        release = 1536969600;				    // tokens will be available to participants starting 09/15/2018 @ 00:00:00
        
        pricer = 100000;					    // each ETH is worth 100,000 tokens
        
        size = 10 ** 18 * pricer * 2000 * 2;	// 2,000 ETH, plus a 100% buffer to account for the possibility of a 50% decrease in ETH value during the sale

        restricted = false;                     // the sale accepts contributions from everyone.  
                                                // however, participants who do not submit formal KYC verification before the end of the token sale will have their contributions reverted
    
        bonuses = [1, 20];                      // the bonus during the pre-sale starts at 20%
        
        mutable = true;                         // certain attributes, such as token sale finish and release dates, may be updated to increase the liklihood of a successful token sale for all parties involved
        active = true;                          // the token sale is active from the point the contract is published in the form of a pre-sale         
        
        Created();
        Activated();
    }
    
    // returns the number of sub-tokens the calling account purchased/was granted
    
    function getMyTokenBalance() external constant returns (uint256) {
        return participantTokens[msg.sender];
    }
    
    // allows an individual to buy tokens (which will not be issued immediately)
    // individual instructs the tokens to be delivered to a specific account, which may be different than msg.sender
    
    function buy(address _recipient) public payable {
        
        // _recipient address must not be all 0's
        
        require(_recipient != address(0x0));

		// contributor must send more than 1/10 ETH
		
        require(msg.value >= 10 ** 17);

		// sale must be considered active
		
        require(active);

		// sale must be ongoing or certified

        require(progress == 0 || progress == 1);

		// current timestamp must be greater than or equal to the start of the token sale
		
        require(block.timestamp >= start);

		// current timestamp must be less than the end of the token sale
		
        require(block.timestamp < finish);
		
		// either the token sale isn't restricted, or the sender is on the whitelist

        require((! restricted) || whitelist[msg.sender]);
        
        // either the token sale isn't restricted, or the recipient is on the whitelist

        require((! restricted) || whitelist[_recipient]);
        
        // multiply sub-ether by the pricer (which will be a whole number >= 1) to get sub-tokens

        uint256 baseTokens = safeMul(msg.value, pricer);
        
        // determine how many bonus sub-tokens to award and add that to the base tokens
        
        uint256 totalTokens = safeAdd(baseTokens, safeDiv(safeMul(baseTokens, getBonusPercentage()), 100));

		// ensure the purchase does not cause the sale to exceed its maximum size
		
        require(safeAdd(tokens, totalTokens) <= size);
        
        // if the recipient is new, add them as a participant

        if (! participants[_recipient]) {
            participants[_recipient] = true;
            participantIndex.push(_recipient);
        }
        
        // increment the participant's sub-tokens and sub-ether

        participantTokens[_recipient] = safeAdd(participantTokens[_recipient], totalTokens);
        participantValues[_recipient] = safeAdd(participantValues[_recipient], msg.value);

		// increment sale sub-tokens and sub-ether

        tokens = safeAdd(tokens, totalTokens);
        value = safeAdd(value, msg.value);
        
        // log purchase event

        Bought(msg.sender, _recipient, totalTokens, msg.value);
    }
    
    // token sale participants call this to claim their tokens after the sale is completed and tokens are scheduled for release
    
    function claim() external {
	    
	    // sale must be completed
        
        require(progress == 2);
        
        // tokens must be scheduled for release
        
        require(block.timestamp >= release);
        
        // participant must have tokens to claim
        
        require(participantTokens[msg.sender] > 0);
        
        // participant must not have already claimed tokens
        
        require(! participantClaims[msg.sender]);
        
		// record that the participant claimed their tokens

        participantClaims[msg.sender] = true;
        
        // log the event
        
        Claimed(msg.sender, participantTokens[msg.sender]);
        
        // call the marketplace contract, which will actually issue the tokens to the participant
        
        SaleCallbackInterface(marketplace).handleSaleClaimCallback(msg.sender, participantTokens[msg.sender]);
    }
    
    // token sale participants call this to request a refund if the sale was cancelled
    
    function refund() external {
        
        // the sale must be cancelled
        
        require(progress == -1);
        
        // the participant must have contributed ETH
        
        require(participantValues[msg.sender] > 0);
        
        // the participant must not have already requested a refund
        
        require(! participantRefunds[msg.sender]);
        
		// record that the participant requested a refund
        
        participantRefunds[msg.sender] = true;
        
        // log the event
        
        Refunded(msg.sender, participantValues[msg.sender]);
        
        // transfer contributed ETH back to the participant
    
        address(msg.sender).transfer(participantValues[msg.sender]);
    }    
    
    // the contract creator calls this to withdraw contributed ETH to a specific address
    
    function withdraw(uint256 _sanity, address _recipient, uint256 _value) ifCreator external {
        
        // avoid unintended transaction calls
        
        require(_sanity == 100010001);
        
        // address must not be 0-value
        
        require(_recipient != address(0x0));
        
        // token sale must be certified or completed
        
        require(progress == 1 || progress == 2);
        
        // the amount of ETH in the contract must be greater than the amount the creator is attempting to withdraw
        
        require(this.balance >= _value);
        
        // increment the amount that's been withdrawn
        
        withdrawls = safeAdd(withdrawls, _value);
        
        // log the withdrawl
        
        Withdrew(_recipient, _value);
        
        // send the ETH to the recipient
        
        address(_recipient).transfer(_value);
    } 
    
    // the contract owner calls this to complete (finalize/wrap up, etc.) the sale
    
    function complete(uint256 _sanity, uint256 _value) ifCreator external {
        
        // avoid unintended transaction calls
        
        require(_sanity == 101010101);
	    
	    // the sale must be marked as ongoing or certified (aka, not cancelled -1)
        
        require(progress == 0 || progress == 1);
        
        // the sale can only be completed after the finish time
        
        require(block.timestamp >= finish);
        
        // ETH is withdrawn in the process and sent to the marketplace contract.  ensure the amount that is being withdrawn is greater than the balance in the smart contract.
        
        require(this.balance >= _value);
        
        // mark the sale as completed
        
        progress = 2;
        
        // the amount that is sent to the other contract is added to the ETH reserve.  denote this amount as reserves.
        
        reserves = safeAdd(reserves, _value);
        
        // log the completion of the sale, including the number of sub-tokens created by the sale, the amount of net sub-eth received during the sale, and the amount of sub-eth to be added to the reserve
        
        Completed(tokens, value, _value);
        
        // call the marketplace contract, sending the ETH for the reserve and including the number of sub-tokens 
        
        SaleCallbackInterface(marketplace).handleSaleCompletionCallback.value(_value)(tokens);
    }    
    
    // the creator can certify a sale, meaning it cannot be cancelled, and ETH can be withdrawn from the sale by the creator
    
    function certify(uint256 _sanity) ifCreator external {
        
        // avoid unintended transaction calls
        
        require(_sanity == 101011111);
	    
	    // the sale must be ongoing
	    
        require(progress == 0);
        
        // the sale must have started
        
        require(block.timestamp >= start);
        
        // record that the sale is certified
        
        progress = 1;
        
        // log the certification
        
        Certified(tokens, value);
    }
    
    // the creator can cancel a sale 
    
    function cancel(uint256 _sanity) ifCreator external {
        
        // avoid unintended transaction calls
        
        require(_sanity == 111110101);
	    
	    // the sale must be ongoing
	    
        require(progress == 0);
        
        // record that the sale is cancelled
        
        progress = -1;
        
        // log the cancellation
        
        Cancelled(tokens, value);
    }    
    
    // called by the delegate to reverse purchases/grants for a particular contributor
    
    function reverse(address _recipient) ifDelegate external {
        
        // the recipient address must not be all 0's
        
        require(_recipient != address(0x0));
        
        // the sale must be ongoing or certified
        
        require(progress == 0 || progress == 1);
        
        // the recipient must have contributed ETH and/or received tokens
        
        require(participantTokens[_recipient] > 0 || participantValues[_recipient] > 0);
        
        uint256 initialParticipantTokens = participantTokens[_recipient];
        uint256 initialParticipantValue = participantValues[_recipient];
        
        // subtract sub-tokens and sub-ether from sale totals
        
        tokens = safeSub(tokens, initialParticipantTokens);
        value = safeSub(value, initialParticipantValue);
        
        // reset participant sub-tokens and sub-ether
        
        participantTokens[_recipient] = 0;
        participantValues[_recipient] = 0;
        
        // log the reversal, including the initial sub-tokens and initial sub-ether
        
        Reversed(_recipient, initialParticipantTokens, initialParticipantValue);
        
        // if the participant previously sent ETH, return it
        
        if (initialParticipantValue > 0) {
            address(_recipient).transfer(initialParticipantValue);
        }
    }
    
    // called by the delegate to grant tokens to a recipient
    
    function grant(address _recipient, uint256 _tokens) ifDelegate external {
        
       	// the recipient's address cannot be 0-value
       
        require(_recipient != address(0x0));
		
		// the sale must be ongoing or certified
		
        require(progress == 0 || progress == 1);
        
        // if the recipient has not participated previously, add them as a participant
        
        if (! participants[_recipient]) {
            participants[_recipient] = true;
            participantIndex.push(_recipient);
        }
        
        // add sub-tokens to the recipient's balance
        
        participantTokens[_recipient] = safeAdd(participantTokens[_recipient], _tokens);
        
        // add sub-tokens to the sale's total
        
        tokens = safeAdd(tokens, _tokens);
        
        // log the grant
        
        Granted(_recipient, _tokens);
    }    
    
    // adds a set of addresses to the whitelist
    
    function list(address[] _addresses) ifDelegate external {
        for (uint256 i = 0; i < _addresses.length; i++) {
            whitelist[_addresses[i]] = true;
            Listed(_addresses[i]);
        }
    }
    
    // removes a set of addresses from the whitelist
    
    function delist(address[] _addresses) ifDelegate external {
        for (uint256 i = 0; i < _addresses.length; i++) {
            whitelist[_addresses[i]] = false;
            Delisted(_addresses[i]);
        }
    }  
    
	// pause the sale
    
    function pause() ifDelegate external {
        active = false;
        Paused();
    }
    
    // activate the sale

    function activate() ifDelegate external {
        active = true;
        Activated();
    }

    function setDelegate(address _delegate) ifCreator external {
        delegate = _delegate;
    }
    
    function setRestricted(bool _restricted) ifDelegate external {
        restricted = _restricted;
    }
    
    function setMarketplace(address _marketplace) ifCreator ifMutable external {
        marketplace = _marketplace;
    }
    
    function setBonuses(uint256[] _bonuses) ifDelegate ifMutable external {
        bonuses = _bonuses;
    }
    
    function setFinish(uint256 _finish) ifDelegate ifMutable external {
        finish = _finish;
    }

    function setRelease(uint256 _release) ifDelegate ifMutable external {
        release = _release;
    }     
    
    // get the current bonus percentage, as a whole number
    
    function getBonusPercentage() public constant returns (uint256) {
        
        uint256 finalBonus;
        
        uint256 iterativeTimestamp;
        uint256 iterativeBonus;
        
        // within bonuses, even numbered elements store timestamps and odd numbered elements store bonus percentages
        // timestamps are in order from oldest to newest
        // iterates over the elements and if the timestamp has been surpassed, the bonus percentage is denoted
        // the last bonus percentage that was denoted, if one was denoted at all, is the correct bonus percentage at this time
        
        for (uint256 i = 0; i < bonuses.length; i++) {
            if (i % 2 == 0) {
                iterativeTimestamp = bonuses[i];
            } else {
                iterativeBonus = bonuses[i];
                if (block.timestamp >= iterativeTimestamp) {
                    finalBonus = iterativeBonus;
                }
            }
        } 
        
        return finalBonus;
    }    
    
    function() public payable {
        buy(msg.sender);
    }
    
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"_addresses","type":"address[]"}],"name":"list","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"creator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"active","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participants","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participantClaims","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"activate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_restricted","type":"bool"}],"name":"setRestricted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_finish","type":"uint256"}],"name":"setFinish","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_addresses","type":"address[]"}],"name":"delist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_bonuses","type":"uint256[]"}],"name":"setBonuses","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"value","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sanity","type":"uint256"}],"name":"cancel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"progress","outputs":[{"name":"","type":"int8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"refund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"},{"name":"_tokens","type":"uint256"}],"name":"grant","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"restricted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_marketplace","type":"address"}],"name":"setMarketplace","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"reserves","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getBonusPercentage","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"release","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participantValues","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"size","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"participantIndex","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"whitelist","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"tokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participantRefunds","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"mutable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pricer","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getMyTokenBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"bonuses","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"marketplace","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"start","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sanity","type":"uint256"}],"name":"certify","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"delegate","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_delegate","type":"address"}],"name":"setDelegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"participantTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_release","type":"uint256"}],"name":"setRelease","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"finish","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_sanity","type":"uint256"},{"name":"_value","type":"uint256"}],"name":"complete","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"}],"name":"reverse","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sanity","type":"uint256"},{"name":"_recipient","type":"address"},{"name":"_value","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_recipient","type":"address"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"withdrawls","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[],"name":"Created","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_buyer","type":"address"},{"indexed":true,"name":"_recipient","type":"address"},{"indexed":false,"name":"_tokens","type":"uint256"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Bought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_recipient","type":"address"},{"indexed":false,"name":"_tokens","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_recipient","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Refunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_recipient","type":"address"},{"indexed":false,"name":"_tokens","type":"uint256"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Reversed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_recipient","type":"address"},{"indexed":false,"name":"_tokens","type":"uint256"}],"name":"Granted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_recipient","type":"address"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Withdrew","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tokens","type":"uint256"},{"indexed":false,"name":"_value","type":"uint256"},{"indexed":false,"name":"_reserves","type":"uint256"}],"name":"Completed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tokens","type":"uint256"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Certified","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_tokens","type":"uint256"},{"indexed":false,"name":"_value","type":"uint256"}],"name":"Cancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_participant","type":"address"}],"name":"Listed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_participant","type":"address"}],"name":"Delisted","type":"event"},{"anonymous":false,"inputs":[],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[],"name":"Activated","type":"event"}]

  Contract Creation Code Switch To Opcodes View
606060405234156200001057600080fd5b60008054600160a060020a033316600160a060020a03199182168117909255600180549091169091178155600355635b89d680600455635b9c4b80600555620186a06006556b014adf4b7320334b900000006007556008805460ff191690556040805190810160405260018152601460208201819052620000939160026200010e565b506015805460ff191660011790556008805461ff0019166101001790557f9adeddf84386b336eb7b3e18e7a6099be08fd81ea5d5142f4d2b630f8d20cf0160405160405180910390a17fed1cd0670ee0c0017f550451a038818c696d0b6a9d6ce5b369e44275573cf9b060405160405180910390a162000183565b82805482825590600052602060002090810192821562000151579160200282015b8281111562000151578251829060ff169055916020019190600101906200012f565b506200015f92915062000163565b5090565b6200018091905b808211156200015f57600081556001016200016a565b90565b61196b80620001936000396000f30060606040526004361061020b5763ffffffff60e060020a6000350416630266ba02811461021657806302d05d3f1461023457806302fb0c5e1461026357806309e69ede1461028a5780630c2a215d146102a95780630f15f4c0146102c857806324daddc5146102db5780632f558ba0146102f357806332cd04871461030957806334bf97ea146103275780633fa4f2451461034557806340e58ee51461036a5780634e71d92d14610380578063577bd33614610393578063590e1ae3146103bf5780636370920e146103d25780637072c6b1146103f457806373ad6c2d1461040757806375172a8b146104265780638222b7e9146104395780638456cb591461044c57806386d1a69f1461045f5780639239d64514610472578063949d225d1461049157806395c3be0b146104a45780639b19251a146104ba5780639d63848a146104d9578063a4e214f9146104ec578063a5536fe71461050b578063a6138ed91461051e578063a6b3abba14610531578063ab37564114610544578063abc8c7af1461055a578063be9a65551461056d578063c6634ef514610580578063c89e436114610596578063ca5eb5e1146105a9578063cbe3b20f146105c8578063cfa4f3e8146105e7578063d56b2889146105fd578063d6380f3714610610578063e30bd74014610629578063e63697c814610648578063f088d5471461066d578063f357622014610681575b61021433610694565b005b341561022157600080fd5b6102146004803560248101910135610947565b341561023f57600080fd5b610247610a19565b604051600160a060020a03909116815260200160405180910390f35b341561026e57600080fd5b610276610a28565b604051901515815260200160405180910390f35b341561029557600080fd5b610276600160a060020a0360043516610a36565b34156102b457600080fd5b610276600160a060020a0360043516610a4b565b34156102d357600080fd5b610214610a60565b34156102e657600080fd5b6102146004351515610ab8565b34156102fe57600080fd5b610214600435610ae6565b341561031457600080fd5b6102146004803560248101910135610b17565b341561033257600080fd5b6102146004803560248101910135610be3565b341561035057600080fd5b610358610c1b565b60405190815260200160405180910390f35b341561037557600080fd5b610214600435610c21565b341561038b57600080fd5b610214610cba565b341561039e57600080fd5b6103a6610e20565b604051600091820b90910b815260200160405180910390f35b34156103ca57600080fd5b610214610e2f565b34156103dd57600080fd5b610214600160a060020a0360043516602435610f38565b34156103ff57600080fd5b6102766110b8565b341561041257600080fd5b610214600160a060020a03600435166110c1565b341561043157600080fd5b61035861111c565b341561044457600080fd5b610358611122565b341561045757600080fd5b610214611198565b341561046a57600080fd5b6103586111ec565b341561047d57600080fd5b610358600160a060020a03600435166111f2565b341561049c57600080fd5b610358611204565b34156104af57600080fd5b61024760043561120a565b34156104c557600080fd5b610276600160a060020a0360043516611232565b34156104e457600080fd5b610358611247565b34156104f757600080fd5b610276600160a060020a036004351661124d565b341561051657600080fd5b610276611262565b341561052957600080fd5b61035861126b565b341561053c57600080fd5b610358611271565b341561054f57600080fd5b61035860043561128e565b341561056557600080fd5b6102476112ad565b341561057857600080fd5b6103586112bc565b341561058b57600080fd5b6102146004356112c2565b34156105a157600080fd5b61024761136a565b34156105b457600080fd5b610214600160a060020a0360043516611379565b34156105d357600080fd5b610358600160a060020a03600435166113c3565b34156105f257600080fd5b6102146004356113d5565b341561060857600080fd5b610358611406565b341561061b57600080fd5b61021460043560243561140c565b341561063457600080fd5b610214600160a060020a036004351661157a565b341561065357600080fd5b610214600435600160a060020a0360243516604435611711565b610214600160a060020a0360043516610694565b341561068c57600080fd5b610358611825565b600080600160a060020a03831615156106ac57600080fd5b67016345785d8a00003410156106c157600080fd5b600854610100900460ff1615156106d757600080fd5b600854620100009004600090810b900b15806107025750600854620100009004600090810b900b6001145b151561070d57600080fd5b60035442101561071c57600080fd5b600454421061072a57600080fd5b60085460ff1615806107545750600160a060020a03331660009081526013602052604090205460ff165b151561075f57600080fd5b60085460ff1615806107895750600160a060020a03831660009081526013602052604090205460ff165b151561079457600080fd5b6107a03460065461182b565b91506107c6826107c16107ba856107b5611122565b61182b565b6064611856565b61188a565b90506007546107d76009548361188a565b11156107e257600080fd5b600160a060020a0383166000908152600d602052604090205460ff16151561086f57600160a060020a0383166000908152600d60205260409020805460ff19166001908117909155600e80549091810161083c83826118b6565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0385161790555b600160a060020a0383166000908152600f6020526040902054610892908261188a565b600160a060020a0384166000908152600f60209081526040808320939093556010905220546108c1903461188a565b600160a060020a0384166000908152601060205260409020556009546108e7908261188a565b600955600a546108f7903461188a565b600a55600160a060020a038084169033167fbf77fd13a39d14dc0da779342c14105c38d9a5d0c60f2caa22f5fd1d5525416d833460405191825260208201526040908101905180910390a3505050565b60015460009033600160a060020a0390811691161461096557600080fd5b5060005b81811015610a145760016013600085858581811061098357fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff19169115159190911790557ffb3fdb4942f7aa0b8ecdf8508875e7f6c8142bb7870f0455b87a9f093608bc828383838181106109e157fe5b90506020020135600160a060020a0316604051600160a060020a03909116815260200160405180910390a1600101610969565b505050565b600054600160a060020a031681565b600854610100900460ff1681565b600d6020526000908152604090205460ff1681565b60126020526000908152604090205460ff1681565b60015433600160a060020a03908116911614610a7b57600080fd5b6008805461ff0019166101001790557fed1cd0670ee0c0017f550451a038818c696d0b6a9d6ce5b369e44275573cf9b060405160405180910390a1565b60015433600160a060020a03908116911614610ad357600080fd5b6008805460ff1916911515919091179055565b60015433600160a060020a03908116911614610b0157600080fd5b60155460ff161515610b1257600080fd5b600455565b60015460009033600160a060020a03908116911614610b3557600080fd5b5060005b81811015610a14576000601381858585818110610b5257fe5b60209081029290920135600160a060020a0316835250810191909152604001600020805460ff19169115159190911790557f7e1dd2258a1fa02a8360869a16fa4e1d4649c796d79a8d520f03a1dd8ae41af0838383818110610bb057fe5b90506020020135600160a060020a0316604051600160a060020a03909116815260200160405180910390a1600101610b39565b60015433600160a060020a03908116911614610bfe57600080fd5b60155460ff161515610c0f57600080fd5b610a14601483836118da565b600a5481565b60005433600160a060020a03908116911614610c3c57600080fd5b63069f67d58114610c4c57600080fd5b600854620100009004600090810b900b15610c6657600080fd5b6008805462ff0000191662ff0000179055600954600a547fa761582a460180d55522f9f5fdc076390a1f48a7a62a8afbd45c1bb797948edb919060405191825260208201526040908101905180910390a150565b600854620100009004600090810b900b600214610cd657600080fd5b600554421015610ce557600080fd5b600160a060020a0333166000908152600f602052604081205411610d0857600080fd5b600160a060020a03331660009081526012602052604090205460ff1615610d2e57600080fd5b600160a060020a0333166000818152601260209081526040808320805460ff19166001179055600f90915290819020547fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a915190815260200160405180910390a2600254600160a060020a03338181166000908152600f602052604080822054939094169363bb57349c939190516020015260405160e060020a63ffffffff8516028152600160a060020a0390921660048301526024820152604401602060405180830381600087803b1515610e0357600080fd5b6102c65a03f11515610e1457600080fd5b50505060405180515050565b60085462010000900460000b81565b600854620100009004600090810b900b60001914610e4c57600080fd5b600160a060020a03331660009081526010602052604081205411610e6f57600080fd5b600160a060020a03331660009081526011602052604090205460ff1615610e9557600080fd5b600160a060020a0333166000818152601160209081526040808320805460ff19166001179055601090915290819020547fd7dee2702d63ad89917b6a4da9981c90c4d24f8c2bdfd64c604ecae57d8d0651915190815260200160405180910390a2600160a060020a033316600081815260106020526040908190205480156108fc029151600060405180830381858888f193505050501515610f3657600080fd5b565b60015433600160a060020a03908116911614610f5357600080fd5b600160a060020a0382161515610f6857600080fd5b600854620100009004600090810b900b1580610f935750600854620100009004600090810b900b6001145b1515610f9e57600080fd5b600160a060020a0382166000908152600d602052604090205460ff16151561102b57600160a060020a0382166000908152600d60205260409020805460ff19166001908117909155600e805490918101610ff883826118b6565b506000918252602090912001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0384161790555b600160a060020a0382166000908152600f602052604090205461104e908261188a565b600160a060020a0383166000908152600f6020526040902055600954611074908261188a565b600955600160a060020a0382167f640e37a8f90a1d221d5cd8176ab4eb9bc1bd82ce5616399aca28e613ecf22da48260405190815260200160405180910390a25050565b60085460ff1681565b60005433600160a060020a039081169116146110dc57600080fd5b60155460ff1615156110ed57600080fd5b6002805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600c5481565b6000808080805b60145481101561118f5760028106151561115e57601480548290811061114b57fe5b9060005260206000209001549250611187565b601480548290811061116c57fe5b90600052602060002090015491508242101515611187578193505b600101611129565b50919392505050565b60015433600160a060020a039081169116146111b357600080fd5b6008805461ff00191690557f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75260405160405180910390a1565b60055481565b60106020526000908152604090205481565b60075481565b600e80548290811061121857fe5b600091825260209091200154600160a060020a0316905081565b60136020526000908152604090205460ff1681565b60095481565b60116020526000908152604090205460ff1681565b60155460ff1681565b60065481565b600160a060020a0333166000908152600f60205260409020545b90565b601480548290811061129c57fe5b600091825260209091200154905081565b600254600160a060020a031681565b60035481565b60005433600160a060020a039081169116146112dd57600080fd5b6306054ea781146112ed57600080fd5b600854620100009004600090810b900b1561130757600080fd5b60035442101561131657600080fd5b6008805462ff0000191662010000179055600954600a547f35f340d6a48d39dff138141acce8e5c2ba077429f643ff20d02760f44b81085d919060405191825260208201526040908101905180910390a150565b600154600160a060020a031681565b60005433600160a060020a0390811691161461139457600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600f6020526000908152604090205481565b60015433600160a060020a039081169116146113f057600080fd5b60155460ff16151561140157600080fd5b600555565b60045481565b60005433600160a060020a0390811691161461142757600080fd5b6306054ab5821461143757600080fd5b600854620100009004600090810b900b15806114625750600854620100009004600090810b900b6001145b151561146d57600080fd5b60045442101561147c57600080fd5b600160a060020a033016318190101561149457600080fd5b6008805462ff0000191662020000179055600c546114b2908261188a565b600c55600954600a547fac2eeaf45d1b75aed6b3285cda3efb3c382cce02ba313558bbb90be57f8843e491908360405180848152602001838152602001828152602001935050505060405180910390a1600254600954600160a060020a039091169063f18ba98c90839060006040516020015260405160e060020a63ffffffff851602815260048101919091526024016020604051808303818588803b151561155a57600080fd5b6125ee5a03f1151561156b57600080fd5b50505050604051805150505050565b600154600090819033600160a060020a0390811691161461159a57600080fd5b600160a060020a03831615156115af57600080fd5b600854620100009004600090810b900b15806115da5750600854620100009004600090810b900b6001145b15156115e557600080fd5b600160a060020a0383166000908152600f602052604081205411806116205750600160a060020a038316600090815260106020526040812054115b151561162b57600080fd5b5050600160a060020a0381166000908152600f602090815260408083205460109092529091205460095461165f90836118a4565b600955600a5461166f90826118a4565b600a55600160a060020a0383166000818152600f602090815260408083208390556010909152808220919091557f3ad1debfc4548aa35036161d2b76897ac592f31d48bb49ee28e38a23abf11cd290849084905191825260208201526040908101905180910390a26000811115610a1457600160a060020a03831681156108fc0282604051600060405180830381858888f193505050501515610a1457600080fd5b60005433600160a060020a0390811691161461172c57600080fd5b6305f60811831461173c57600080fd5b600160a060020a038216151561175157600080fd5b600854620100009004600090810b900b6001148061177e5750600854620100009004600090810b900b6002145b151561178957600080fd5b600160a060020a03301631819010156117a157600080fd5b6117ad600b548261188a565b600b557fb244b9a17ad633c6e83b7983ee04320484956a68ddbe96a0b70dfca1cf19d7238282604051600160a060020a03909216825260208201526040908101905180910390a1600160a060020a03821681156108fc0282604051600060405180830381858888f193505050501515610a1457600080fd5b600b5481565b6000828202831580611847575082848281151561184457fe5b04145b151561184f57fe5b9392505050565b60008080831161186257fe5b828481151561186d57fe5b049050828481151561187b57fe5b06818402018414151561184f57fe5b600082820183811080159061184757508281101561184f57fe5b6000828211156118b057fe5b50900390565b815481835581811511610a1457600083815260209020610a14918101908301611925565b828054828255906000526020600020908101928215611915579160200282015b828111156119155782358255916020019190600101906118fa565b50611921929150611925565b5090565b61128b91905b80821115611921576000815560010161192b5600a165627a7a7230582015e937cb798cee1b870fcf53b50e30ae28001dc99185b7dbe69338dd1b2d509e0029

   Swarm Source:
bzzr://15e937cb798cee1b870fcf53b50e30ae28001dc99185b7dbe69338dd1b2d509e

 

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