Contract Overview
Balance: 0 Ether
Ether Value: $0
Transactions: 28719 txns
 Latest 25 txns From a total of 28719 Transactions

TxHash Age From To Value [TxFee]
0xfc3a5ed6c2a1dcaa0c99b332053d3d9a7a2919bbeda9fe8d8195442334d7083c485 days 12 hrs ago0xff9f64abe5d9ea11e3f2617c0715d6e0f0be175d  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0 Ether0.005226672
0x3b4a1b45fb4f8e267fc48077683e63b9681c2603eea7f8b9dd0ee5086b264f79485 days 18 hrs ago0x8b8a571730b631f58e7965d78582eae1b0417ab6  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.009 Ether0.00175
0xe8cb22b042799b09b263c5a9708f576dfdaf996e353eec5b143c08edc245ef82485 days 18 hrs ago0x4088266f3671f87fb2c2f1e9e00dbe23b12742b7  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.009 Ether0.00175
0xbcf11662c20b9027370bc933fb7138ccf5b58443fa1ee5186787c87d35fedc28485 days 18 hrs ago0x4088266f3671f87fb2c2f1e9e00dbe23b12742b7  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.008 Ether0.00175
0x7b66e61d37d2f253944a6bb4eff8d14111f858a821b14ee7a152a09498766ed0485 days 18 hrs ago0x8b8a571730b631f58e7965d78582eae1b0417ab6  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.008 Ether0.00175
0x3a485c6ea83796ed6e8c75f5cdebc5cef45ea373d5df72e6fe7d757de5c6e1a8485 days 18 hrs ago0x4088266f3671f87fb2c2f1e9e00dbe23b12742b7  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.003 Ether0.00175
0x16818d8de9017981c6161f10f35352feb7453425d67de4e911181a663afc03ea485 days 18 hrs ago0x8b8a571730b631f58e7965d78582eae1b0417ab6  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.003 Ether0.00175
0x2b910f27bc92fccda68e413dd1f0d49e374228553e065dc917edad3bc4dc7485498 days 22 hrs ago0x6c8ef4827ca98c66343129f52b3ca842af684b83  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0 Ether0.00090174
0x63586a830bcfd5ca85b80d739d8412e75df4288e8f7cba3eb0ccd08c69ee064f498 days 22 hrs ago0x6c8ef4827ca98c66343129f52b3ca842af684b83  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0 Ether0.001371225
0x26c31b7dc2283ce58e8ff209e8847b6e18e17e588953660234ac6a3a2309a1ab498 days 22 hrs ago0xd66bb47032b15930d88d7e08ab98fb86f31f7cef  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.01 Ether0.00054051
0x110b0691daf8fd76605653bd2a284762ed93b9742194089d30f3170c275c9db0498 days 22 hrs ago0x3b37952a277161480bc026ba70107ac4f8bd0d88  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.01 Ether0.00055395
0xd2be4d830616c986c22709d0438fafd36e0e74068e3117ebfa5813f6e8f2779b498 days 22 hrs ago0x3b37952a277161480bc026ba70107ac4f8bd0d88  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.004 Ether0.00055395
0x123cd1e7df0d072885cda5d52b0c3419905d754e8aee8d7aad4c428b042759c9498 days 22 hrs ago0xd66bb47032b15930d88d7e08ab98fb86f31f7cef  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.001 Ether0.00054051
0xed1afa4729ee7b5f59a3056cf02deb557912772bbfcf2e15e59720bc736d0c1a498 days 22 hrs ago0x3b37952a277161480bc026ba70107ac4f8bd0d88  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.006 Ether0.00055395
0xd94415b09c419d4aeb779ba368bcf1759cacd1ba64605de9d9ac8c00dbfeb282498 days 22 hrs ago0xd66bb47032b15930d88d7e08ab98fb86f31f7cef  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.009 Ether0.00054051
0xb5abbe1a240ca853ed360fbef8d2d80187abfa69db05da30d637f1a3aca3078e498 days 22 hrs ago0x3b37952a277161480bc026ba70107ac4f8bd0d88  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.002 Ether0.00077895
0x53819ad9e436639db64f4a9fda11581f8f2b903c53c08cec065aff6f2c648f61498 days 22 hrs ago0xd66bb47032b15930d88d7e08ab98fb86f31f7cef  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.002 Ether0.00076551
0x3d69ca82aebf89e8f1c1e265583b8d584813cd06b08e1fb40fd4bc6a2884bae8498 days 22 hrs ago0x6c8ef4827ca98c66343129f52b3ca842af684b83  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0 Ether0.000947055
0x99fc5af2351f121b690901ba028921c4440f75fef446ac70222204ed5577eed9498 days 22 hrs ago0x6c8ef4827ca98c66343129f52b3ca842af684b83  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0 Ether0.00090174
0x3f17bd9b91c5a380bb48490a46da2c9ea4d0bf98ea6e21dc39c0b72709d963c4498 days 22 hrs ago0x6c8ef4827ca98c66343129f52b3ca842af684b83  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0 Ether0.001358745
0x93ed746a909e8677b510241a3e696d391e6f7a917e8f459a357554f9b4957a61498 days 22 hrs ago0x3b37952a277161480bc026ba70107ac4f8bd0d88  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.01 Ether0.00054147
0xa357dcbeafe1d6f85db9fccf4a580da3a4de69fac1a88319e1d1fd20bca52f2b498 days 22 hrs ago0xd66bb47032b15930d88d7e08ab98fb86f31f7cef  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.01 Ether0.00055491
0xf75517d5dc616fb5a7594de44dc19179bef9b13f48bf34f32ec6492e26f7b45f498 days 22 hrs ago0xd66bb47032b15930d88d7e08ab98fb86f31f7cef  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.006 Ether0.00055491
0x45222e6b7ff42e4628a42243083be908ef9d5677ab512d250683a8e4a43f1b72498 days 22 hrs ago0x3b37952a277161480bc026ba70107ac4f8bd0d88  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.016 Ether0.00054147
0xc6bdaa18aad6d4bc57759a47631b8e73515f51adf9ad2a37ddc0a4f423641b20498 days 22 hrs ago0xd66bb47032b15930d88d7e08ab98fb86f31f7cef  IN   0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0.002 Ether0.00077991
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click Here To View More View All
ParentTxHash Block Age From To Value
0xfc3a5ed6c2a1dcaa0c99b332053d3d9a7a2919bbeda9fe8d8195442334d7083c3916538485 days 12 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0x7b79387dd30dc6848dd2308c825b6802e99abc840.00344 Ether
0x63586a830bcfd5ca85b80d739d8412e75df4288e8f7cba3eb0ccd08c69ee064f3846859498 days 22 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0x3b37952a277161480bc026ba70107ac4f8bd0d880.04312 Ether
0x3f17bd9b91c5a380bb48490a46da2c9ea4d0bf98ea6e21dc39c0b72709d963c43846823498 days 22 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0x3b37952a277161480bc026ba70107ac4f8bd0d880.04508 Ether
0xde9396257f4dc9b12646d6ecf5e26bca621b2e85614d50ab3455b5d09fc748483845782499 days 2 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0x3b37952a277161480bc026ba70107ac4f8bd0d880.04704 Ether
0xf6c2048561296ee6154ac95ddbca0a39bcb29bc40521680eb72365c5ab1865603843896499 days 11 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0x3b37952a277161480bc026ba70107ac4f8bd0d880.03332 Ether
0x4d2314f673e5cd2f80429a3333a9eeb55fcc7f0f9fbb91acd2423af5dfcd5ed03843890499 days 11 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0xd66bb47032b15930d88d7e08ab98fb86f31f7cef0.0196 Ether
0x4d2314f673e5cd2f80429a3333a9eeb55fcc7f0f9fbb91acd2423af5dfcd5ed03843890499 days 11 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0x7b79387dd30dc6848dd2308c825b6802e99abc840.0102 Ether
0xbfcc9a6d16458c430dc119f86408c39a0c3bc74234b2740956675dbbc33ddaba3843883499 days 11 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0xd66bb47032b15930d88d7e08ab98fb86f31f7cef0.0294 Ether
0xa1b8b682a04520c2ee0748a851c352af49e24a8effcf2e3c2db413a0b57341513843846499 days 11 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0xd66bb47032b15930d88d7e08ab98fb86f31f7cef0.02156 Ether
0x59f067d9da3229c40ccb42e5cd4d99b863f8713fd65e40b13368bcc55312e3483843832499 days 11 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0x3b37952a277161480bc026ba70107ac4f8bd0d880.03136 Ether
0x99d614b9732aaf510cd37db9dd00cb41dbfe163912753093ddc36795fd1a4c793843822499 days 12 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0xd66bb47032b15930d88d7e08ab98fb86f31f7cef0.02744 Ether
0xbe74ea3aed9fe4b29bdbc7f5baf921464a205f97d1d4603ac8482414e856d48a3843809499 days 12 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0xd66bb47032b15930d88d7e08ab98fb86f31f7cef0.03136 Ether
0xae31cb0556e0f516414c36dd3cf80e2dd68f26e38cffa6fe2a63edfb8dbdf2723843805499 days 12 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0x3b37952a277161480bc026ba70107ac4f8bd0d880.02156 Ether
0xf2699fc13fd5808d30e85ec2411b5e6dee00fd0a632f8a3572ffeab6d05d1bab3843489499 days 13 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0x3b37952a277161480bc026ba70107ac4f8bd0d880.0294 Ether
0xf6e167e9b295e92b8d1758334f5e2aeaf6418f802f3532247ec2309fb761e6123843489499 days 13 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0x3b37952a277161480bc026ba70107ac4f8bd0d880.02548 Ether
0x4a80ef7ca59e52833678d81af94997cc455292109816ab5f62c602a743fbaabb3843489499 days 13 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0xd66bb47032b15930d88d7e08ab98fb86f31f7cef0.02744 Ether
0xe8a4747e52d44218b6557190261be92afe3449abdda3d907b8279805e2907d9d3843479499 days 13 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0xd66bb47032b15930d88d7e08ab98fb86f31f7cef0.03724 Ether
0x509e63aa182261a1cf764c9b3e9428f4b6e460fb0adcc46c18c3962573d15aba3838304500 days 13 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0xd66bb47032b15930d88d7e08ab98fb86f31f7cef0.01372 Ether
0x4a5d426414bf8c8e20c1a510056b16640b7e4629663175a94095414ca07061bd3836938500 days 19 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0xd66bb47032b15930d88d7e08ab98fb86f31f7cef0.02548 Ether
0xbde8f766cf08dba7403de723ffae3a854f083b20bc3e049b32ef0604e19298413836937500 days 19 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0x3b37952a277161480bc026ba70107ac4f8bd0d880.02548 Ether
0xf77a1bc312ac1e8c70d307a58dc79cffe2e68563a8c67256321c0167d644e2cc3836936500 days 19 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0xd66bb47032b15930d88d7e08ab98fb86f31f7cef0.02156 Ether
0x40380b52d8fd048d6a25b6dc465cf090202846e1bc4fc4626c52fc02b97f88503832966501 days 13 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0x3b37952a277161480bc026ba70107ac4f8bd0d880.02352 Ether
0x295625f25c62c4c75fc2190c9b8a0a56b69856afa83bf482f6adcb8d3078daa73832956501 days 13 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0xd66bb47032b15930d88d7e08ab98fb86f31f7cef0.03136 Ether
0x2b0e965a443134c094ef6f2a16d42b6f9cbbbd6f880178557fa8bf210fb96b523832945501 days 13 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0xd66bb47032b15930d88d7e08ab98fb86f31f7cef0.03332 Ether
0x10b8434ceb7fc5f2946c73320b948a880788cd07f1768370cca4e1fb698150663831697501 days 19 hrs ago0xff1f9c77a0f1fd8f48cfeee58b714ca03420ddac0x3b37952a277161480bc026ba70107ac4f8bd0d880.02352 Ether
[ Download CSV Export  ] 
Contract Name: E4RowEscrow
Compiler Text: v0.4.10+commit.f0d539ae
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.8;

// version (ZK)


contract iE4RowEscrow {
	function getNumGamesStarted() constant returns (int ngames);
}


contract E4RowEscrow is iE4RowEscrow {

event StatEvent(string msg);
event StatEventI(string msg, uint val);
event StatEventA(string msg, address addr);

	uint constant MAX_PLAYERS = 5;

	enum EndReason  {erWinner, erTimeOut, erCancel}
	enum SettingStateValue  {debug, release, lockedRelease}

	struct gameInstance {
		address[5] players;
		uint[5] playerPots;
		uint numPlayers;

		bool active; // active
		bool allocd; //  allocated already. 
		uint started; // time game started
		uint lastMoved; // time game last moved
		uint payout; // payout amont
		address winner; // address of winner
		

		EndReason reasonEnded; // enum reason of ended
		
	}
	
	struct arbiter {
		mapping (uint => uint)  gameIndexes; // game handles

		uint arbToken; // 2 bytes
		uint gameSlots; // a counter of alloc'd game structs (they can be reused)
		uint gamesStarted; // total games started
		uint gamesCompleted;
		uint gamesCanceled; // also tied
		uint gamesTimedout;
		uint numPlayers;
		bool registered; 
		bool locked;
	}


	address public  owner; 	// owner is address that deployed contract
	address public  tokenPartner; 	// the address of partner that receives rake fees
	uint public numArbiters; 	// number of arbiters

	int numGamesStarted;	// total stats from all arbiters

	uint public numGamesCompleted; // ...
	uint public numGamesCanceled; 	// tied and canceled
	uint public numGamesTimedOut;	// ...

	uint public houseFeeHoldover; // hold fee till threshold
	uint public lastPayoutTime; 	// timestamp of last payout time


	// configurables
	uint public gameTimeOut;
	uint public registrationFee;
	uint public houseFeeThreshold;
	uint public payoutInterval;

	uint raGas; // for register arb
	uint sgGas;// for start game
	uint wpGas; // for winner paid
	uint rfGas; // for refund
	uint feeGas; // for rake fee payout

	SettingStateValue public settingsState = SettingStateValue.debug; 
	

	mapping (address => arbiter)  arbiters;
	mapping (uint => address)  arbiterTokens;
	mapping (uint => address)  arbiterIndexes;
	mapping (uint => gameInstance)  games;


	function E4RowEscrow() public
	{
		owner = msg.sender;
	}


	function applySettings(SettingStateValue _state, uint _fee, uint _threshold, uint _timeout, uint _interval)
	{
		if (msg.sender != owner) 
			throw;

		// ----------------------------------------------
		// these items are tweakable for game optimization
		// ----------------------------------------------
		houseFeeThreshold = _threshold;
		gameTimeOut = _timeout;
		payoutInterval = _interval;
	
		if (settingsState == SettingStateValue.lockedRelease) {
			StatEvent("Settings Tweaked");
			return;
		}

 	 	settingsState = _state;
		registrationFee = _fee;

		// set default op gas -  any futher settings done in set up gas
		raGas = 150000; 
		sgGas = 110000;
		wpGas = 20000; 
		rfGas = 20000; 
		feeGas = 360000; 

		StatEvent("Settings Changed");

	
	}

	//-----------------------------
	// return an arbiter token from an hGame
	//-----------------------------
	function ArbTokFromHGame(uint _hGame) returns (uint _tok)
	{ 
		_tok =  (_hGame / (2 ** 48)) & 0xffff;
	}


	//-----------------------------
	// suicide the contract, not called for release
	//-----------------------------
	function HaraKiri()
	{
		if ((msg.sender == owner) && (settingsState != SettingStateValue.lockedRelease))
			  suicide(tokenPartner);
		else
			StatEvent("Kill attempt failed");
	}




	//-----------------------------
	// default function
	// who are we to look a gift-horse in the mouth?
	//-----------------------------
 	function() payable  {
		StatEvent("thanks!");
  	}

	//------------------------------------------------------
	// check active game and valid player, return player index
	//-------------------------------------------------------
	function validPlayer(uint _hGame, address _addr)  internal returns( bool _valid, uint _pidx)
	{
		_valid = false;
		if (activeGame(_hGame)) {
			for (uint i = 0; i < games[_hGame].numPlayers; i++) {
				if (games[_hGame].players[i] == _addr) {
					_valid=true;
					_pidx = i;
					break;
				}
			}
		}			
	}

	//------------------------------------------------------
	// check valid player, return player index
	//-------------------------------------------------------
	function validPlayer2(uint _hGame, address _addr) internal  returns( bool _valid, uint _pidx)
	{
		_valid = false;
		for (uint i = 0; i < games[_hGame].numPlayers; i++) {
			if (games[_hGame].players[i] == _addr) {
				_valid=true;
				_pidx = i;
				break;
			}
		}
	}

	//------------------------------------------------------
	// check the arbiter is valid by comparing token
	//------------------------------------------------------
	function validArb(address _addr, uint _tok) internal  returns( bool _valid)
	{
		_valid = false;

		if ((arbiters[_addr].registered)
			&& (arbiters[_addr].arbToken == _tok)) 
			_valid = true;
	}

	//------------------------------------------------------
	// check the arbiter is valid without comparing token
	//------------------------------------------------------
	function validArb2(address _addr) internal  returns( bool _valid)
	{
		_valid = false;
		if (arbiters[_addr].registered)
			_valid = true;
	}

	//------------------------------------------------------
	// check if arbiter is locked out
	//------------------------------------------------------
	function arbLocked(address _addr) internal  returns( bool _locked)
	{
		_locked = false;
		if (validArb2(_addr)) 
			_locked = arbiters[_addr].locked;
	}

	//------------------------------------------------------
	// return if game is active
	//------------------------------------------------------
	function activeGame(uint _hGame) internal  returns( bool _valid)
	{
		_valid = false;
		if ((_hGame > 0)
			&& (games[_hGame].active))
			_valid = true;
	}


	//------------------------------------------------------
	// register game arbiter, max players of 5, pass in exact registration fee
	//------------------------------------------------------
	function registerArbiter(uint _numPlayers, uint _arbToken) public payable 
	{

		if (msg.value != registrationFee) {
			throw;  //Insufficient Fee
		}

		if (_arbToken == 0) {
			throw; // invalid token
		}

		if (arbTokenExists(_arbToken & 0xffff)) {
			throw; // Token Already Exists
		}

		if (arbiters[msg.sender].registered) {
			throw; // Arb Already Registered
		}
		
		if (_numPlayers > MAX_PLAYERS) {
			throw; // Exceeds Max Players
		}

		arbiters[msg.sender].gamesStarted = 0;
		arbiters[msg.sender].gamesCompleted = 0;
		arbiters[msg.sender].gamesCanceled = 0; 
		arbiters[msg.sender].gamesTimedout = 0;
		arbiters[msg.sender].locked = false;
		arbiters[msg.sender].arbToken = _arbToken & 0xffff;
		arbiters[msg.sender].numPlayers = _numPlayers;
		arbiters[msg.sender].registered = true;

		arbiterTokens[(_arbToken & 0xffff)] = msg.sender;
		arbiterIndexes[numArbiters++] = msg.sender;
	

		if (!tokenPartner.call.gas(raGas).value(msg.value)()) {
			//Statvent("Send Error"); // event never registers
		        throw;
		}
		StatEventI("Arb Added", _arbToken);
	}


	//------------------------------------------------------
	// start game.  pass in valid hGame containing token in top two bytes
	//------------------------------------------------------
	function startGame(uint _hGame, int _hkMax, address[] _players) public 

	{
		uint ntok = ArbTokFromHGame(_hGame);
		if (!validArb(msg.sender, ntok )) {
			StatEvent("Invalid Arb");
			return;
		}


		if (arbLocked(msg.sender)) {
			StatEvent("Arb Locked");
			return; 
		}

		arbiter xarb = arbiters[msg.sender];
		if (_players.length != xarb.numPlayers) { 
			StatEvent("Incorrect num players");
			return; 
		}

		if (games[_hGame].active) {
			// guard-rail. just in case to return funds
			abortGame(msg.sender, _hGame, EndReason.erCancel);

		} else if (_hkMax > 0) {
			houseKeep(_hkMax, ntok); 
		}

		if (!games[_hGame].allocd) {
			games[_hGame].allocd = true;
			xarb.gameIndexes[xarb.gameSlots++] = _hGame;
		} 
		numGamesStarted++; // always inc this one
		xarb.gamesStarted++;

		games[_hGame].active = true;
		games[_hGame].started = now; 
		games[_hGame].lastMoved = now; 
		games[_hGame].payout = 0; 
		games[_hGame].winner = address(0);

		games[_hGame].numPlayers = _players.length; // we'll be the judge of how many unique players
		for (uint i = 0; i< _players.length && i < MAX_PLAYERS; i++) {
	            games[_hGame].players[i] = _players[i];
		    games[_hGame].playerPots[i] = 0;
		}

		StatEventI("Game Added", _hGame);
		

	}
	
	//------------------------------------------------------
	// clean up game, set to inactive, refund any balances
	// called by housekeep ONLY
	//------------------------------------------------------
	function abortGame(address _arb, uint  _hGame, EndReason _reason) private returns(bool _success)
	{
	     gameInstance nGame = games[_hGame];
	     
		// find game in game id, 
		if (nGame.active) {
			_success = true;
			for (uint i = 0; i < nGame.numPlayers; i++) {
				if (nGame.playerPots[i] > 0) {
					address a = nGame.players[i];
					uint nsend = nGame.playerPots[i];
					nGame.playerPots[i] = 0;
					if (!a.call.gas(rfGas).value(nsend)()) {
						houseFeeHoldover += nsend; // cannot refund due to error, give to the house
					        StatEventA("Cannot Refund Address", a);
					}
				}
			}
			nGame.active = false;
			nGame.reasonEnded = _reason;
			if (_reason == EndReason.erCancel) {
				numGamesCanceled++;
				arbiters[_arb].gamesCanceled++;
				StatEvent("Game canceled");
			} else if (_reason == EndReason.erTimeOut) {
				numGamesTimedOut++;
				arbiters[_arb].gamesTimedout++;
				StatEvent("Game timed out");
			} else 
				StatEvent("Game aborted");
		}
	}


	//------------------------------------------------------
	// called by arbiter when winner is decided
	// *pass in high num for winnerbal for tie games
	//------------------------------------------------------
	function winnerDecided(uint _hGame, address _winner, uint _winnerBal) public
	{

		if (!validArb(msg.sender, ArbTokFromHGame(_hGame))) {
			StatEvent("Invalid Arb");	
			return; // no throw no change made
		}

		var (valid, pidx) = validPlayer(_hGame, _winner);
		if (!valid) {
			StatEvent("Invalid Player");	
			return;
		}

		arbiter xarb = arbiters[msg.sender];
		gameInstance xgame = games[_hGame];

		uint totalPot = 0;

		if (xgame.playerPots[pidx] < _winnerBal) {
		    abortGame(msg.sender, _hGame, EndReason.erCancel);
  		    return;
		}

		for (uint i = 0; i < xgame.numPlayers; i++) {
			totalPot += xgame.playerPots[i];
		}
		
		uint nportion;
		uint nremnant;
		if (totalPot > 0) {
		 	nportion = totalPot/50; // 2 percent fixed
			nremnant = totalPot-nportion;
		} else {
			nportion = 0;
			nremnant = 0;
		}
		

		xgame.lastMoved = now;
		xgame.active = false;
		xgame.reasonEnded = EndReason.erWinner;
		xgame.winner = _winner;
		xgame.payout = nremnant;
		
		if (nportion > 0) {
			houseFeeHoldover += nportion;
			if ((houseFeeHoldover > houseFeeThreshold)
				&& (now > (lastPayoutTime + payoutInterval))) {
				uint ntmpho = houseFeeHoldover;
				houseFeeHoldover = 0;
				lastPayoutTime = now; // reset regardless of succeed/fail
				if (!tokenPartner.call.gas(feeGas).value(ntmpho)()) {
					houseFeeHoldover = ntmpho; // put it back
					StatEvent("House-Fee Error1");
				} 
			}
		}
	
		for (i = 0; i < xgame.numPlayers; i++) {
			xgame.playerPots[i] = 0;
		}

		xarb.gamesCompleted++;
		numGamesCompleted++;
		if (nremnant > 0) {
			if (!_winner.call.gas(wpGas).value(uint(nremnant))()) {
				// StatEvent("Send Error");
			        throw; // if you cant pay the winner - very bad
			} else {
				StatEventI("Winner Paid", _hGame);		
			}
		}
	}

	//------------------------------------------------------
	// handle a bet made by a player, validate the player and game
	// add to players balance
	//------------------------------------------------------
	function handleBet(uint _hGame) public payable 
	{
		address narb = arbiterTokens[ArbTokFromHGame(_hGame)];
		if (narb == address(0)) {
			throw; // "Invalid hGame"
		}

		var (valid, pidx) = validPlayer(_hGame, msg.sender);
		if (!valid) {
			throw; // "Invalid Player"
		}

		games[_hGame].playerPots[pidx] += msg.value;
		games[_hGame].lastMoved = now;

		StatEventI("Bet Added", _hGame);

	}


	//------------------------------------------------------
	// return if arb token exists
	//------------------------------------------------------
	function arbTokenExists(uint _tok) constant returns (bool _exists)
	{
		_exists = false;
		if ((_tok > 0)
			&& (arbiterTokens[_tok] != address(0))
			&& arbiters[arbiterTokens[_tok]].registered)
			_exists = true;

	}




	//------------------------------------------------------
	// called by ico token contract 
	//------------------------------------------------------
	function getNumGamesStarted() constant returns (int _games) 
	{
		_games = numGamesStarted;
	}

	//------------------------------------------------------
	// return arbiter game stats
	//------------------------------------------------------
	function getArbInfo(uint _idx) constant  returns (address _addr, uint _started, uint _completed, uint _canceled, uint _timedOut) 
	{
		if (_idx >= numArbiters) {
			StatEvent("Invalid Arb");
			return;
		}
		_addr = arbiterIndexes[_idx];
		if ((_addr == address(0))
			|| (!arbiters[_addr].registered)) {
			StatEvent("Invalid Arb");
			return;
		}
		arbiter xarb = arbiters[_addr];
		_started = xarb.gamesStarted;
		_completed = xarb.gamesCompleted;
		_timedOut = xarb.gamesTimedout;
		_canceled = xarb.gamesCanceled;
	}


	//------------------------------------------------------
	// scan for a game 10 minutes old
	// if found abort the game, causing funds to be returned
	//------------------------------------------------------
	function houseKeep(int _max, uint _arbToken) public
	{	
		uint gi;
		address a;
		int aborted = 0;
		
		arbiter xarb = arbiters[msg.sender];// have to set it to something
	        
         
		if (msg.sender == owner) {
			for (uint ar = 0; (ar < numArbiters) && (aborted < _max) ; ar++) {
			    a = arbiterIndexes[ar];
			    xarb = arbiters[a];    

			    for ( gi = 0; (gi < xarb.gameSlots) && (aborted < _max); gi++) {
				gameInstance ngame0 = games[xarb.gameIndexes[gi]];
				if ((ngame0.active)
				    && ((now - ngame0.lastMoved) > gameTimeOut)) {
					abortGame(a, xarb.gameIndexes[gi], EndReason.erTimeOut);
					++aborted;
				}
			    }
			}

		} else {
			if (!validArb(msg.sender, _arbToken))
				StatEvent("Housekeep invalid arbiter");
			else {
			    a = msg.sender;
			    xarb = arbiters[a];    
			    for (gi = 0; (gi < xarb.gameSlots) && (aborted < _max); gi++) {
				gameInstance ngame1 = games[xarb.gameIndexes[gi]];
				if ((ngame1.active)
				    && ((now - ngame1.lastMoved) > gameTimeOut)) {
					abortGame(a, xarb.gameIndexes[gi], EndReason.erTimeOut);
					++aborted;
				}
			    }

			}	
		}
	}


	//------------------------------------------------------
	// return game info
	//------------------------------------------------------
	function getGameInfo(uint _hGame)  constant  returns (EndReason _reason, uint _players, uint _payout, bool _active, address _winner )
	{
		gameInstance ngame = games[_hGame];
		_active = ngame.active;
		_players = ngame.numPlayers;
		_winner = ngame.winner;
		_payout = ngame.payout;
		_reason = ngame.reasonEnded;

	}

	//------------------------------------------------------
	// return arbToken and low bytes from an HGame
	//------------------------------------------------------
	function checkHGame(uint _hGame) constant returns(uint _arbTok, uint _lowWords)
	{
		_arbTok = ArbTokFromHGame(_hGame);
		_lowWords = _hGame & 0xffffffffffff;
		
	}

	//------------------------------------------------------
	// get operation gas amounts
	//------------------------------------------------------
	function getOpGas() constant returns (uint _ra, uint _sg, uint _wp, uint _rf, uint _fg) 
	{
		_ra = raGas; // register arb
		_sg = sgGas; // start game
		_wp = wpGas; // winner paid
		_rf = rfGas; // refund
		_fg = feeGas; // rake fee gas
	}


	//------------------------------------------------------
	// set operation gas amounts for forwading operations
	//------------------------------------------------------
	function setOpGas(uint _ra, uint _sg, uint _wp, uint _rf, uint _fg) 
	{
		if (msg.sender != owner)
			throw;

		raGas = _ra;
		sgGas = _sg;
		wpGas = _wp;
		rfGas = _rf;
		feeGas = _fg;
	}

	//------------------------------------------------------
	// set a micheivous arbiter to locked
	//------------------------------------------------------
	function setArbiterLocked(address _addr, bool _lock)  public 
	{
		if (owner != msg.sender)  {
			throw; 
		} else if (!validArb2(_addr)) {
			StatEvent("invalid arb");
		} else {
			arbiters[_addr].locked = _lock;
		}
		
	}

	//------------------------------------------------------
	// flush the house fees whenever commanded to.
	// ignore the threshold and the last payout time
	// but this time only reset lastpayouttime upon success
	//------------------------------------------------------
	function flushHouseFees()
	{
		if (msg.sender != owner) {
			StatEvent("only owner calls this function");
		} else if (houseFeeHoldover > 0) {
			uint ntmpho = houseFeeHoldover;
			houseFeeHoldover = 0;
			if (!tokenPartner.call.gas(feeGas).value(ntmpho)()) {
				houseFeeHoldover = ntmpho; // put it back
				StatEvent("House-Fee Error2"); 
			} else {
				lastPayoutTime = now;
 				StatEvent("House-Fee Paid");
	 		}
		}

	}


	//------------------------------------------------------
	// set the token partner
	//------------------------------------------------------
	function setTokenPartner(address _addr) public
	{
		if (msg.sender != owner) {
			throw;
		} 

		if ((settingsState == SettingStateValue.lockedRelease) 
			&& (tokenPartner == address(0))) {
			tokenPartner = _addr;
			StatEvent("Token Partner Final!");
		} else if (settingsState != SettingStateValue.lockedRelease) {
			tokenPartner = _addr;
			StatEvent("Token Partner Assigned!");
		}
			
	}

	// ----------------------------
	// swap executor
	// ----------------------------
	function changeOwner(address _addr) 
	{
		if (msg.sender != owner
			|| settingsState == SettingStateValue.lockedRelease)
			 throw;

		owner = _addr;
	}



}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"_numPlayers","type":"uint256"},{"name":"_arbToken","type":"uint256"}],"name":"registerArbiter","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"payoutInterval","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getNumGamesStarted","outputs":[{"name":"_games","type":"int256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_state","type":"uint8"},{"name":"_fee","type":"uint256"},{"name":"_threshold","type":"uint256"},{"name":"_timeout","type":"uint256"},{"name":"_interval","type":"uint256"}],"name":"applySettings","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"registrationFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numArbiters","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"houseFeeThreshold","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_hGame","type":"uint256"}],"name":"ArbTokFromHGame","outputs":[{"name":"_tok","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_hGame","type":"uint256"}],"name":"getGameInfo","outputs":[{"name":"_reason","type":"uint8"},{"name":"_players","type":"uint256"},{"name":"_payout","type":"uint256"},{"name":"_active","type":"bool"},{"name":"_winner","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_hGame","type":"uint256"}],"name":"handleBet","outputs":[],"payable":true,"type":"function"},{"constant":true,"inputs":[],"name":"gameTimeOut","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_idx","type":"uint256"}],"name":"getArbInfo","outputs":[{"name":"_addr","type":"address"},{"name":"_started","type":"uint256"},{"name":"_completed","type":"uint256"},{"name":"_canceled","type":"uint256"},{"name":"_timedOut","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"lastPayoutTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"settingsState","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_hGame","type":"uint256"},{"name":"_winner","type":"address"},{"name":"_winnerBal","type":"uint256"}],"name":"winnerDecided","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"setTokenPartner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numGamesTimedOut","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"},{"name":"_lock","type":"bool"}],"name":"setArbiterLocked","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_max","type":"int256"},{"name":"_arbToken","type":"uint256"}],"name":"houseKeep","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getOpGas","outputs":[{"name":"_ra","type":"uint256"},{"name":"_sg","type":"uint256"},{"name":"_wp","type":"uint256"},{"name":"_rf","type":"uint256"},{"name":"_fg","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_hGame","type":"uint256"}],"name":"checkHGame","outputs":[{"name":"_arbTok","type":"uint256"},{"name":"_lowWords","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_addr","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numGamesCompleted","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_hGame","type":"uint256"},{"name":"_hkMax","type":"int256"},{"name":"_players","type":"address[]"}],"name":"startGame","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_ra","type":"uint256"},{"name":"_sg","type":"uint256"},{"name":"_wp","type":"uint256"},{"name":"_rf","type":"uint256"},{"name":"_fg","type":"uint256"}],"name":"setOpGas","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"houseFeeHoldover","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"flushHouseFees","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"numGamesCanceled","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"tokenPartner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_tok","type":"uint256"}],"name":"arbTokenExists","outputs":[{"name":"_exists","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"HaraKiri","outputs":[],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"payable":true,"type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg","type":"string"}],"name":"StatEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg","type":"string"},{"indexed":false,"name":"val","type":"uint256"}],"name":"StatEventI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"msg","type":"string"},{"indexed":false,"name":"addr","type":"address"}],"name":"StatEventA","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6060604052601280546000919060ff19166001835b0217905550341561002157fe5b5b60008054600160a060020a03191633600160a060020a03161790555b5b611f6b8061004e6000396000f3006060604052361561017a5763ffffffff60e060020a60003504166303015ea381146101d157806309e785e1146101e15780631123efd51461020357806313bd53e61461022557806314c44e0914610249578063189ae13c1461026b5780631e83ce171461028d5780632c78ba6f146102af57806347e1d550146102d45780634f28af6a1461033057806351c08f4d1461033d5780635364f7211461035f57806358a1cabf146103a75780635f437e48146103c95780636df088bf146103fd5780637612115d14610421578063809432521461043f5780638a75f56a146104615780638da5cb5b146104845780639307ca0f146104b05780639a6921e4146104c85780639e6d95c714610503578063a6f9dae11461052f578063b05455321461054d578063b26f7efc1461056f578063bcdaea36146105c5578063c9fa8f2d146105e6578063ca2785bf14610608578063dc46d9841461061a578063dcb4775e1461063c578063e7d87cda14610668578063f081d9bd1461068f575b6101cf5b6040805160208082526007908201527f7468616e6b732100000000000000000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a15b565b005b6101cf6004356024356106a1565b005b34156101e957fe5b6101f1610825565b60408051918252519081900360200190f35b341561020b57fe5b6101f161082b565b60408051918252519081900360200190f35b341561022d57fe5b6101cf60ff60043516602435604435606435608435610832565b005b341561025157fe5b6101f1610964565b60408051918252519081900360200190f35b341561027357fe5b6101f161096a565b60408051918252519081900360200190f35b341561029557fe5b6101f1610970565b60408051918252519081900360200190f35b34156102b757fe5b6101f1600435610976565b60408051918252519081900360200190f35b34156102dc57fe5b6102e760043561098f565b604051808660028111156102f757fe5b60ff1681526020810195909552506040808501939093529015156060840152600160a060020a03166080830152519081900360a0019150f35b6101cf6004356109d9565b005b341561034557fe5b6101f1610acd565b60408051918252519081900360200190f35b341561036757fe5b610372600435610ad3565b60408051600160a060020a03909616865260208601949094528484019290925260608401526080830152519081900360a00190f35b34156103af57fe5b6101f1610bfa565b60408051918252519081900360200190f35b34156103d157fe5b6103d9610c00565b604051808260028111156103e957fe5b60ff16815260200191505060405180910390f35b341561040557fe5b6101cf600435600160a060020a0360243516604435610c09565b005b341561042957fe5b6101cf600160a060020a0360043516610fa0565b005b341561044757fe5b6101f16110e3565b60408051918252519081900360200190f35b341561046957fe5b6101cf600160a060020a036004351660243515156110e9565b005b341561048c57fe5b61049461119a565b60408051600160a060020a039092168252519081900360200190f35b34156104b857fe5b6101cf6004356024356111a9565b005b34156104d057fe5b6104d86113c8565b6040805195865260208601949094528484019290925260608401526080830152519081900360a00190f35b341561050b57fe5b6105166004356113df565b6040805192835260208301919091528051918290030190f35b341561053757fe5b6101cf600160a060020a03600435166113fe565b005b341561055557fe5b6101f1611457565b60408051918252519081900360200190f35b341561057757fe5b60408051604435600481810135602081810285810182019096528185526101cf958335956024803596606495929491019282918501908490808284375094965061145d95505050505050565b005b34156105cd57fe5b6101cf60043560243560443560643560843561179c565b005b34156105ee57fe5b6101f16117d9565b60408051918252519081900360200190f35b341561061057fe5b6101cf6117df565b005b341561062257fe5b6101f161193e565b60408051918252519081900360200190f35b341561064457fe5b610494611944565b60408051600160a060020a039092168252519081900360200190f35b341561067057fe5b61067b600435611953565b604080519115158252519081900360200190f35b341561069757fe5b6101cf6119bc565b005b600a5434146106b05760006000fd5b8015156106bd5760006000fd5b6106ca8161ffff16611953565b156106d55760006000fd5b600160a060020a03331660009081526013602052604090206008015460ff16156106ff5760006000fd5b600582111561070e5760006000fd5b600160a060020a0333811660008181526013602090815260408083206003810184905560048101849055600581018490556006810184905560088101805461ffff8916600180850182905560079094018b905561ffff1990911683179091558452601483528184208054600160a060020a03199081168717909155600280548084019091558552601590935281842080549093169094179091559154600d5492519316923491818181858888f1935050505015156107cc5760006000fd5b60408051602081018390528181526009818301527f417262204164646564000000000000000000000000000000000000000000000060608201529051600080516020611f008339815191529181900360800190a15b5050565b600c5481565b6003545b90565b60005433600160a060020a0390811691161461084e5760006000fd5b600b8390556009829055600c81905560025b60125460ff16600281111561087157fe5b14156108ca576040805160208082526010908201527f53657474696e677320547765616b656400000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a161095d565b6012805486919060ff191660018360028111156108e357fe5b0217905550600a849055620249f0600d556201adb0600e55614e20600f819055601090815562057e406011556040805160208082528101929092527f53657474696e6773204368616e676564000000000000000000000000000000008282015251600080516020611f208339815191529181900360600190a15b5050505050565b600a5481565b60025481565b600b5481565b60006601000000000000825b0461ffff1690505b919050565b6000818152601660205260409020600b810154600a820154600f830154600e84015460ff60a060020a830481169593949193911691600160a060020a0316905b5091939590929450565b600060006000601460006109ec86610976565b8152602081019190915260400160002054600160a060020a03169250821515610a155760006000fd5b610a1f8433611a51565b91509150811515610a305760006000fd5b6000848152601660205260409020349060059081019083908110610a5057fe5b0160005b508054909101905560008481526016602090815260409182902042600d9091015581519081018690528181526009818301527f426574204164646564000000000000000000000000000000000000000000000060608201529051600080516020611f008339815191529181900360800190a15b50505050565b60095481565b60006000600060006000600060025487101515610b2e57604080516020808252600b9082015260a960020a6a24b73b30b634b21020b93102818301529051600080516020611f208339815191529181900360600190a16109cf565b600087815260156020526040902054600160a060020a03169550851580610b715750600160a060020a03861660009081526013602052604090206008015460ff16155b15610bba57604080516020808252600b9082015260a960020a6a24b73b30b634b21020b93102818301529051600080516020611f208339815191529181900360600190a16109cf565b50505050600160a060020a0382166000908152601360205260409020600381015460048201546006830154600584015492945090925b5091939590929450565b60085481565b60125460ff1681565b600060006000600060006000600060006000610c2d33610c288e610976565b611ae8565b1515610c7757604080516020808252600b9082015260a960020a6a24b73b30b634b21020b93102818301529051600080516020611f208339815191529181900360600190a1610f90565b610c818c8c611a51565b98509850881515610cdf57604080516020808252600e908201527f496e76616c696420506c61796572000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a1610f90565b600160a060020a03331660009081526013602090815260408083208f84526016909252822090985096509450896005808801908a908110610d1c57fe5b0160005b50541015610d3a57610d34338d6002611b3d565b50610f90565b600093505b85600a0154841015610d72578560050184600581101515610d5c57fe5b0160005b5054850194505b600190930192610d3f565b6000851115610d8c576032855b0492508285039150610d95565b60009250600091505b42600d870155600b8601805460ff19169055600f860180546000919074ff0000000000000000000000000000000000000000191660a060020a835b0217905550600f86018054600160a060020a031916600160a060020a038d16179055600e86018290556000831115610eb85760078054840190819055600b5490118015610e225750600c546008540142115b15610eb8575060078054600091829055426008556001546011546040519293600160a060020a03909216929091849190818181858888f193505050501515610eb85760078190556040805160208082526010908201527f486f7573652d466565204572726f723100000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a15b5b5b600093505b85600a0154841015610ef05760008660050185600581101515610ede57fe5b0160005b50555b600190930192610ebf565b60048088018054600190810190915581540190556000821115610f9057600f54604051600160a060020a038d16919084906000818181858888f193505050501515610f3b5760006000fd5b60408051602081018e9052818152600b818301527f57696e6e6572205061696400000000000000000000000000000000000000000060608201529051600080516020611f008339815191529181900360800190a15b5b5b505050505050505050505050565b60005433600160a060020a03908116911614610fbc5760006000fd5b60025b60125460ff166002811115610fd057fe5b148015610fe65750600154600160a060020a0316155b1561105a5760018054600160a060020a031916600160a060020a0383161790556040805160208082526014908201527f546f6b656e20506172746e65722046696e616c21000000000000000000000000818301529051600080516020611f20833981519152916060908290030190a16110de565b60025b60125460ff16600281111561106e57fe5b146110de5760018054600160a060020a031916600160a060020a0383161790556040805160208082526017908201527f546f6b656e20506172746e65722041737369676e656421000000000000000000818301529051600080516020611f20833981519152916060908290030190a15b5b5b50565b60065481565b60005433600160a060020a039081169116146111055760006000fd5b61110e82611e64565b151561116757604080516020808252600b908201527f696e76616c696420617262000000000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a1610821565b600160a060020a0382166000908152601360205260409020600801805461ff001916610100831515021790555b5b5b5050565b600054600160a060020a031681565b600160a060020a033381166000818152601360205260408120815491938493849384928392839290911614156112b457600092505b600254831080156111ee57508885125b156112af57600083815260156020908152604080832054600160a060020a031680845260139092528220919850965093505b83600201548710801561123257508885125b156112a35760008781526020858152604080832054835260169091529020600b81015490925060ff16801561126e575060095482600d01544203115b156112975760008781526020859052604090205461128f9087906001611b3d565b508460010194505b5b600190960195611220565b5b6001909201916111de565b6113ba565b6112be3389611ae8565b1515611317576040805160208082526019908201527f486f7573656b65657020696e76616c6964206172626974657200000000000000818301529051600080516020611f208339815191529181900360600190a16113ba565b33600160a060020a038116600090815260136020526040812090985090965093505b83600201548710801561134b57508885125b156113ba575060008681526020848152604080832054835260169091529020600b81015460ff168015611385575060095481600d01544203115b156113ae576000878152602085905260409020546113a69087906001611b3d565b508460010194505b5b600190960195611339565b5b5b5b505050505050505050565b600d54600e54600f546010546011545b9091929394565b600060006113ec83610976565b91505065ffffffffffff82165b915091565b60005433600160a060020a03908116911614158061142d575060025b60125460ff16600281111561142b57fe5b145b156114385760006000fd5b60008054600160a060020a031916600160a060020a0383161790555b50565b60045481565b60006000600061146c86610976565b92506114783384611ae8565b15156114c257604080516020808252600b9082015260a960020a6a24b73b30b634b21020b93102818301529051600080516020611f208339815191529181900360600190a1611794565b6114cb33611e92565b1561152357604080516020808252600a908201527f417262204c6f636b656400000000000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a1611794565b600160a060020a0333166000908152601360205260409020600781015485519193501461159d576040805160208082526015908201527f496e636f7272656374206e756d20706c61796572730000000000000000000000818301529051600080516020611f208339815191529181900360600190a1611794565b6000868152601660205260409020600b015460ff16156115c9576115c333876002611b3d565b506115dc565b60008513156115dc576115dc85846111a9565b5b5b6000868152601660205260409020600b0154610100900460ff161515611638576000868152601660209081526040808320600b01805461ff0019166101001790556002850180546001810190915583529084905290208690555b5060038054600190810182559082018054820190556000868152601660205260408120600b8101805460ff191690931790925542600c8301819055600d830155600e8201819055600f82018054600160a060020a03191690558451600a909201919091555b8351811080156116ad5750600581105b1561173f5783818151811015156116c057fe5b602090810290910181015160008881526016909252604090912082600581106116e557fe5b0160005b6101000a815481600160a060020a030219169083600160a060020a031602179055506000601660008881526020019081526020016000206005018260058110151561173057fe5b0160005b50555b60010161169d565b6040805160208101889052818152600a818301527f47616d652041646465640000000000000000000000000000000000000000000060608201529051600080516020611f008339815191529181900360800190a15b505050505050565b60005433600160a060020a039081169116146117b85760006000fd5b600d859055600e849055600f839055601082905560118190555b5050505050565b60075481565b6000805433600160a060020a0390811691161461184957604080516020808252601e908201527f6f6e6c79206f776e65722063616c6c7320746869732066756e6374696f6e0000818301529051600080516020611f208339815191529181900360600190a16110de565b600060075411156110de5750600780546000918290556001546011546040519293600160a060020a03909216929091849190818181858888f1935050505015156118e55760078190556040805160208082526010908201527f486f7573652d466565204572726f723200000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a16110de565b42600855604080516020808252600e908201527f486f7573652d4665652050616964000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a15b5b5b5b50565b60055481565b600154600160a060020a031681565b6000808211801561197a5750600082815260146020526040902054600160a060020a031615155b80156119ad5750600082815260146020908152604080832054600160a060020a03168352601390915290206008015460ff165b1561098a575060015b5b919050565b60005433600160a060020a0390811691161480156119ec575060025b60125460ff1660028111156119e957fe5b14155b156119ff57600154600160a060020a0316ff5b6040805160208082526013908201527f4b696c6c20617474656d7074206661696c656400000000000000000000000000818301529051600080516020611f208339815191529181900360600190a15b5b565b60008080611a5e85611ece565b15611ade575060005b6000858152601660205260409020600a0154811015611ade576000858152601660205260409020600160a060020a038516908260058110611aa457fe5b0160005b9054906101000a9004600160a060020a0316600160a060020a03161415611ad55760019250809150611ade565b5b600101611a67565b5b5b509250929050565b600160a060020a03821660009081526013602052604081206008015460ff168015611b2d5750600160a060020a03831660009081526013602052604090206001015482145b15611b36575060015b5b92915050565b6000828152601660205260408120600b81015482908190819060ff1615611e565760019450600092505b83600a0154831015611c945760008460050184600581101515611b8657fe5b0160005b50541115611c8757838360058110611b9e57fe5b0160005b9054906101000a9004600160a060020a031691508360050183600581101515611bc757fe5b0160005b5054905060008460050184600581101515611be257fe5b0160005b5055601054604051600160a060020a038416919083906000818181858888f193505050501515611c8757600780548201905560408051600160a060020a03841660208201528181526015818301527f43616e6e6f7420526566756e6420416464726573730000000000000000000000606082015290517fe0e85fe8d69ca593247064bffd9438c76090518a0ec0f0c452c31218c8b9e6a49181900360800190a15b5b5b600190920191611b67565b600b8401805460ff19169055600f8401805487919074ff0000000000000000000000000000000000000000191660a060020a836002811115611cd257fe5b021790555060025b866002811115611ce657fe5b1415611d6f576005805460019081018255600160a060020a038a1660009081526013602090815260409182902090930180549092019091558051828152600d928101929092527f47616d652063616e63656c6564000000000000000000000000000000000000008282015251600080516020611f208339815191529181900360600190a1611e56565b60015b866002811115611d7e57fe5b1415611e07576006805460019081018255600160a060020a038a1660009081526013602090815260409182902090930180549092019091558051828152600e928101929092527f47616d652074696d6564206f75740000000000000000000000000000000000008282015251600080516020611f208339815191529181900360600190a1611e56565b604080516020808252600c908201527f47616d652061626f727465640000000000000000000000000000000000000000818301529051600080516020611f208339815191529181900360600190a15b5b5b5b505050509392505050565b600160a060020a03811660009081526013602052604081206008015460ff161561098a575060015b5b919050565b6000611e9d82611e64565b1561098a5750600160a060020a038116600090815260136020526040902060080154610100900460ff165b5b919050565b600080821180156119ad57506000828152601660205260409020600b015460ff165b1561098a575060015b5b91905056009e229c55f86322ec7d67b654476e2d52934c738b3cd58c026b5b2b6e9b7b992d1df4241f9d28385037b9339fabdb2fac8a42cb5e489c20da7a82bb32f517e648a165627a7a7230582065899295bf18b68794ae4663f7902b2b3912178a798a20c2beb61b786886d04b0029

   Swarm Source:
bzzr://65899295bf18b68794ae4663f7902b2b3912178a798a20c2beb61b786886d04b

 

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