Contract 0xdf203118A954c918b967a94E51f3570a2FAbA4Ac 1

 

Contract Overview

Balance:
0.184800894857437897 Ether

EtherValue:
$778.89 (@ $4,214.73/ETH)

Token:
Txn Hash Method
Block
From
To
Value
0x22eb384579fd4a7cfb1be7ad8667684487bfce8353aff583fde4636c8a3a6c31Confirm Dividend...131659172021-09-05 13:09:1951 days 5 hrs ago0xc51e4f7ada44ca984cbbbaf035b8c2f4672b751d IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.001861905877 66.43969016
0x452b70ce1ec01e97662b88311bf64d8332c83103326972dc37a50867dc2c7275Confirm Dividend...131659172021-09-05 13:09:1951 days 5 hrs ago0xc51e4f7ada44ca984cbbbaf035b8c2f4672b751d IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.005557225179 61.046270907
0x4699d0414330f4a0f842a69386dfb2807dec388ed05a107df093f32a420b49b3Buy130120042021-08-12 18:35:0175 days 23 mins ago0xc51e4f7ada44ca984cbbbaf035b8c2f4672b751d IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0.28589 Ether0.069537010297 38.897885192
0x44c06fda96298f8c2496d8ea08f7ab566de0c0a92479b4dffc8ed771a63ea1c8Buy127546292021-07-03 12:32:28115 days 6 hrs ago0x886b5b53001f541a5c1942b8d840879a4b8348d1 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0.00709 Ether0.00694141074.1
0x619f169f317749f2d0e3836185ff44c8f16035d7fdeba21c2af5a2c2ced432ffWithdraw127155062021-06-27 10:12:45121 days 8 hrs ago0x51b70f9bfafca0cfb131618f73fe19a7fee73d01 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.0058562324
0xf2462f567bbc8734f76cc854246e21873660410ee066c3aa214378903681e630Confirm Dividend...127154902021-06-27 10:08:38121 days 8 hrs ago0x51b70f9bfafca0cfb131618f73fe19a7fee73d01 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.0009303310
0x49ed1cbb3fcfc1da4f3767239c3887ce6d91c4f81c93505a7e6c620656d79184Confirm Dividend...125549342021-06-02 11:55:41146 days 7 hrs ago0x51b70f9bfafca0cfb131618f73fe19a7fee73d01 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.001432708215.4
0xb1d97e9e24e7676a1a51a59fc15b40e7e24d713043636b3a30d0d20308d88105List Item125534692021-06-02 6:42:50146 days 12 hrs ago0xe3bdbeaf9e7b60b42bb156f641be50ad1e07073b IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.002081836417.2
0x9b2d3d55b55a521932760cadbae3ce5533c67a11c9d2b83e60459427bacfaa98Confirm Dividend...117321672021-01-26 15:36:49273 days 3 hrs ago0x51b70f9bfafca0cfb131618f73fe19a7fee73d01 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.0064480386365.11
0xa8afc31de4cc8debf4456e6b07227af48936e5ae0c4118979897911e65cb8bb1Confirm Dividend...115358912020-12-27 12:45:10303 days 6 hrs ago0x51b70f9bfafca0cfb131618f73fe19a7fee73d01 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.0088233100
0x645a5ec221977aa559f1c891f62af7d705a87f86a89043e8e791cfe6299ed098Confirm Dividend...114279782020-12-10 22:50:50319 days 20 hrs ago0x51b70f9bfafca0cfb131618f73fe19a7fee73d01 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.0024186930
0x7ea281a7af789ab89edda7fd0b174649e92983deb632240aeb0ad37ca6864c39Buy114279552020-12-10 22:43:56319 days 20 hrs ago0x51b70f9bfafca0cfb131618f73fe19a7fee73d01 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0.1738 Ether0.0419730630
0x71badf3fd370ea9a90667df80162328e5b580cad49a9b7d5b364bbb8f161b62eConfirm Dividend...113326362020-11-26 7:23:42334 days 11 hrs ago0x7692a4436f8252f34258c2bfa846ec5e840d5e55 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.00465455114447.000001459
0x7a90da0edddfbd2f1b00b5ba47e199e6b2d85cf71632d8db695bc83b7ffe4ec8Withdraw112750292020-11-17 10:57:53343 days 8 hrs ago0x7692a4436f8252f34258c2bfa846ec5e840d5e55 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.022035620
0x9950adafd9ac0ebf1114a5f59d6e2de348f7bb94a942ea83af8d0f07a021eda4Confirm Dividend...112555922020-11-14 11:31:43346 days 7 hrs ago0x7692a4436f8252f34258c2bfa846ec5e840d5e55 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.00118839612
0xc899a99b38dc8c22435ef415ad905dee8463b175d7c1e081c073df1b636701f5Withdraw112351472020-11-11 8:12:14349 days 10 hrs ago0x7692a4436f8252f34258c2bfa846ec5e840d5e55 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.01762848160716.000001459
0x83e3898eebe569194198d747db298748f84790a54d05c4d94efe93c749d4b8ebConfirm Dividend...111844452020-11-03 13:23:16357 days 5 hrs ago0x7692a4436f8252f34258c2bfa846ec5e840d5e55 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.00287195729
0x966d4ebb29c8ee45bd814ddac143aa3e03c97ee84cfdd4bfec603384d67c842aConfirm Dividend...111204072020-10-24 17:23:42367 days 1 hr ago0x7692a4436f8252f34258c2bfa846ec5e840d5e55 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.00158452814416.000001459
0x639a3c761aa564d3cadaad3a6aaa93300273af75f1b90d67b32284c24623dd30Withdraw111203912020-10-24 17:20:48367 days 1 hr ago0x7692a4436f8252f34258c2bfa846ec5e840d5e55 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.01652670160715.000001459
0x6544d0d0182110960c79dc3f1335377dc73f419341b6382d581b786ccac595c4Confirm Dividend...108747082020-09-16 18:22:40405 days 35 mins ago0x7692a4436f8252f34258c2bfa846ec5e840d5e55 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.0069323170
0x49cb76f18123c51a6b27e9ae38d0e4d9863aa5d1d8179b33d7196f84b413b82eConfirm Dividend...108099542020-09-06 19:35:53414 days 23 hrs ago0x7692a4436f8252f34258c2bfa846ec5e840d5e55 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.0070586480
0x58784eaa5ca0ccdf04f3fb6fc4ce611542c575531a6414e0585c9c7bedd62f7aBuy107444912020-08-27 19:26:10424 days 23 hrs ago0x7692a4436f8252f34258c2bfa846ec5e840d5e55 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0.03557 Ether0.0683255550
0xab9f83bf4a84a403312b127c2843c86f736f79027f68ce50ddaa5c1d3d83e95bWithdraw106612142020-08-14 23:52:13437 days 19 hrs ago0x886b5b53001f541a5c1942b8d840879a4b8348d1 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.09752913789
0x640d04792f2d74ded5520bcdacd6963c63f4af1a88853b2d671421e38b49be02Withdraw106170432020-08-08 4:35:27444 days 14 hrs ago0x6c6a392f461a624643bb7fc0497564e517473e95 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.05621888151
0xd66277c0ffbf25d6113274d4015eb25083f02e57c9c8439a2b539c7584c9d77eConfirm Dividend...106170102020-08-08 4:27:14444 days 14 hrs ago0x6c6a392f461a624643bb7fc0497564e517473e95 IN  0xdf203118a954c918b967a94e51f3570a2faba4ac0 Ether0.00366422111137.000001123
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x4699d0414330f4a0f842a69386dfb2807dec388ed05a107df093f32a420b49b3130120042021-08-12 18:35:0175 days 23 mins ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0xc51e4f7ada44ca984cbbbaf035b8c2f4672b751d0.00028814814814815 Ether
0x4699d0414330f4a0f842a69386dfb2807dec388ed05a107df093f32a420b49b3130120042021-08-12 18:35:0175 days 23 mins ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0xe3bdbeaf9e7b60b42bb156f641be50ad1e07073b0.011424074074074074 Ether
0x4699d0414330f4a0f842a69386dfb2807dec388ed05a107df093f32a420b49b3130120042021-08-12 18:35:0175 days 23 mins ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0x058f9b12d2681ca8a8e41b78b8c5fcc552b325b40.238191944444444443 Ether
0x44c06fda96298f8c2496d8ea08f7ab566de0c0a92479b4dffc8ed771a63ea1c8127546292021-07-03 12:32:28115 days 6 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0x886b5b53001f541a5c1942b8d840879a4b8348d10.000035 Ether
0x44c06fda96298f8c2496d8ea08f7ab566de0c0a92479b4dffc8ed771a63ea1c8127546292021-07-03 12:32:28115 days 6 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0xe3bdbeaf9e7b60b42bb156f641be50ad1e07073b0.00035275 Ether
0x44c06fda96298f8c2496d8ea08f7ab566de0c0a92479b4dffc8ed771a63ea1c8127546292021-07-03 12:32:28115 days 6 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0xe3bdbeaf9e7b60b42bb156f641be50ad1e07073b0.0043564625 Ether
0x619f169f317749f2d0e3836185ff44c8f16035d7fdeba21c2af5a2c2ced432ff127155062021-06-27 10:12:45121 days 8 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0x51b70f9bfafca0cfb131618f73fe19a7fee73d010.048823091341368188 Ether
0x7ea281a7af789ab89edda7fd0b174649e92983deb632240aeb0ad37ca6864c39114279552020-12-10 22:43:56319 days 20 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0x51b70f9bfafca0cfb131618f73fe19a7fee73d010.000174269005847957 Ether
0x7ea281a7af789ab89edda7fd0b174649e92983deb632240aeb0ad37ca6864c39114279552020-12-10 22:43:56319 days 20 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0xe3bdbeaf9e7b60b42bb156f641be50ad1e07073b0.006945029239766081 Ether
0x7ea281a7af789ab89edda7fd0b174649e92983deb632240aeb0ad37ca6864c39114279552020-12-10 22:43:56319 days 20 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0x38ec1b3fa23f0eaa12386a319e726c32b82e4aa60.144803859649122805 Ether
0x7a90da0edddfbd2f1b00b5ba47e199e6b2d85cf71632d8db695bc83b7ffe4ec8112750292020-11-17 10:57:53343 days 8 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0x7692a4436f8252f34258c2bfa846ec5e840d5e550.057805174420069865 Ether
0xc899a99b38dc8c22435ef415ad905dee8463b175d7c1e081c073df1b636701f5112351472020-11-11 8:12:14349 days 10 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0x7692a4436f8252f34258c2bfa846ec5e840d5e550.077073565893426486 Ether
0x639a3c761aa564d3cadaad3a6aaa93300273af75f1b90d67b32284c24623dd30111203912020-10-24 17:20:48367 days 1 hr ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0x7692a4436f8252f34258c2bfa846ec5e840d5e550.102764754524568648 Ether
0x58784eaa5ca0ccdf04f3fb6fc4ce611542c575531a6414e0585c9c7bedd62f7a107444912020-08-27 19:26:10424 days 23 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0x7692a4436f8252f34258c2bfa846ec5e840d5e550.000033157894736843 Ether
0x58784eaa5ca0ccdf04f3fb6fc4ce611542c575531a6414e0585c9c7bedd62f7a107444912020-08-27 19:26:10424 days 23 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0xe3bdbeaf9e7b60b42bb156f641be50ad1e07073b0.001776842105263157 Ether
0x58784eaa5ca0ccdf04f3fb6fc4ce611542c575531a6414e0585c9c7bedd62f7a107444912020-08-27 19:26:10424 days 23 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0xc2e3763ca17f2c3e28e002dbd36fee7dec7ef1d70.027852 Ether
0xab9f83bf4a84a403312b127c2843c86f736f79027f68ce50ddaa5c1d3d83e95b106612142020-08-14 23:52:13437 days 19 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0x886b5b53001f541a5c1942b8d840879a4b8348d10.202575509049137296 Ether
0x640d04792f2d74ded5520bcdacd6963c63f4af1a88853b2d671421e38b49be02106170432020-08-08 4:35:27444 days 14 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0x6c6a392f461a624643bb7fc0497564e517473e950.202575509049137296 Ether
0x24fca3a2d9d99357db3602d37493b1643e1b8841eea44dc9af9b0f83332221fe105622822020-07-30 17:39:55453 days 1 hr ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0x886b5b53001f541a5c1942b8d840879a4b8348d10.405151018098274593 Ether
0x9719db3182c14d3512d7092de873f7b601254040e2ff119a50d9f91675f2feca105607722020-07-30 11:54:17453 days 7 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0x6c6a392f461a624643bb7fc0497564e517473e950.405151018098274593 Ether
0x629a6ec252f237acabe87e10773308d0e879813fca05140b189e1c51686f8633105182672020-07-23 21:58:39459 days 20 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0x886b5b53001f541a5c1942b8d840879a4b8348d10.810302036196549186 Ether
0xcc8aaa43bcee768a034d7869164ac4fc56ca8b4b663904286d1a5ab4addd22b3105094172020-07-22 13:20:25461 days 5 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0x6c6a392f461a624643bb7fc0497564e517473e950.810302036196549186 Ether
0x1887895a1b6109bded3a5668e610e187fdb71433db1b6eb048b8fd4b5ff8dac7104687832020-07-16 5:51:19467 days 13 hrs ago 0x6ddaaee7f5a3eb5a0dd30eafb70835f9f68db8d2 0xdf203118a954c918b967a94e51f3570a2faba4ac0.02463660594613079 Ether
0x2bd3524620b012c05dc9888143a4f48209f2ec2cdfe047ea6ef459e100170375104576992020-07-14 12:44:39469 days 6 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0xe3bdbeaf9e7b60b42bb156f641be50ad1e07073b0.0088 Ether
0x2bd3524620b012c05dc9888143a4f48209f2ec2cdfe047ea6ef459e100170375104576992020-07-14 12:44:39469 days 6 hrs ago 0xdf203118a954c918b967a94e51f3570a2faba4ac0xe3bdbeaf9e7b60b42bb156f641be50ad1e07073b0.13728 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SuperCountriesEth

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2018-06-07
*/

pragma solidity ^0.4.24;


/*
                                                                                                             

███████╗██╗   ██╗██████╗ ███████╗██████╗                                    
██╔════╝██║   ██║██╔══██╗██╔════╝██╔══██╗                                   
███████╗██║   ██║██████╔╝█████╗  ██████╔╝                                   
╚════██║██║   ██║██╔═══╝ ██╔══╝  ██╔══██╗                                   
███████║╚██████╔╝██║     ███████╗██║  ██║                                   
╚══════╝ ╚═════╝ ╚═╝     ╚══════╝╚═╝  ╚═╝                                   
                                                                            
     ██████╗ ██████╗ ██╗   ██╗███╗   ██╗████████╗██████╗ ██╗███████╗███████╗
    ██╔════╝██╔═══██╗██║   ██║████╗  ██║╚══██╔══╝██╔══██╗██║██╔════╝██╔════╝
    ██║     ██║   ██║██║   ██║██╔██╗ ██║   ██║   ██████╔╝██║█████╗  ███████╗
    ██║     ██║   ██║██║   ██║██║╚██╗██║   ██║   ██╔══██╗██║██╔══╝  ╚════██║
    ╚██████╗╚██████╔╝╚██████╔╝██║ ╚████║   ██║   ██║  ██║██║███████╗███████║
     ╚═════╝ ╚═════╝  ╚═════╝ ╚═╝  ╚═══╝   ╚═╝   ╚═╝  ╚═╝╚═╝╚══════╝╚══════╝
                                                                           

© 2018 SuperCountries

所有权 - 4CE434B6058EC7C24889EC2512734B5DBA26E39891C09DF50C3CE3191CE9C51E

Xuxuxu - LB - Xufo
																										   
*/



library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  /**
  * @dev subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}






contract SuperCountriesEth {
  using SafeMath for uint256;

 
////////////////////////////
/// 	CONSTRUCTOR		 ///	
////////////////////////////
   
	constructor () public {
    owner = msg.sender;
	}
	
	address public owner;  

  
  /**
   * @dev Throws if called by any account other than the owner.
   */
	modifier onlyOwner() {
		require(owner == msg.sender);
		_;
	}


  /**
   * @dev Allows the current owner to transfer control of the contract to a newOwner.
   * @param newOwner The address to transfer ownership to.
   */
	function transferOwnership(address newOwner) public onlyOwner {
		require(newOwner != address(0));
		emit OwnershipTransferred(owner, newOwner);
		owner = newOwner;
	}

	event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

 
 


////////////////////////
/// 	EVENTS		 ///	
////////////////////////
  
  event Bought (uint256 indexed _itemId, address indexed _owner, uint256 _price);
  event Sold (uint256 indexed _itemId, address indexed _owner, uint256 _price);
  event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
  event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);
  
  event SetReferrerEvent(address indexed referral, address indexed referrer);
  event PayReferrerEvent(address indexed oldOwner, address indexed referrer1, address indexed referrer2, uint256 referralPart);
  
  event BonusConstant(uint256 bonusToDispatch_, uint256 bonusDispatched_, uint256 notYetDispatched_, uint256 indexed _itemSoldId_, uint256 kBonus, uint256 indexed countryScore);
  event BonusDispatch(uint256 bonusToGet_, uint256 indexed playerScoreForThisCountry_, address indexed player_, uint256 pendingBalanceTotal_, uint256 indexed _itemSoldId);
  event DivsDispatch(uint256 dividendsCut_, uint256 dividendsScore, uint256 indexed _itemId, uint256 price, uint256 worldScore_);
  event newRichest(address indexed richest_, uint256 richestScore_, uint256 indexed blocktimestamp_, uint256 indexed blocknumber_);
  
  event Withdrawal(address indexed playerAddress, uint256 indexed ethereumWithdrawn, uint256 indexed potVersion_);
  event ConfirmWithdraw(address indexed playerAddress, uint256 refbonus_, uint256 divs_, uint256 totalPending_, uint256 playerSc_, uint256 _handicap_);
  event ConfirmPotWithdraw(uint256 contractBalance, address indexed richest_, uint256 richestBalance_, address indexed lastBuyer_, uint256 lastBalance_, uint256 indexed potVersion);
  event PotWithdrawConstant(uint256 indexed blocktimestamp_, uint256 indexed timestamplimit_, uint256 dividendsScore_, uint256 indexed potVersion, uint256 lastWithdrawPotVersion_);
  event WithdrawOwner(uint256 indexed potVersion, uint256 indexed lastWithdrawPotVersion_, uint256 indexed balance_);

 
 


///////////////////////////////////////////
/// 	VARIABLES, MAPPINGS, STRUCTS 	///	
///////////////////////////////////////////
  
  bool private erc721Enabled = false;

  /// Price increase limits
  uint256 private increaseLimit1 = 0.04 ether;
  uint256 private increaseLimit2 = 0.6 ether;
  uint256 private increaseLimit3 = 2.5 ether;
  uint256 private increaseLimit4 = 7.0 ether;

  /// All countries
  uint256[] private listedItems;
  mapping (uint256 => address) private ownerOfItem;
  mapping (uint256 => uint256) private priceOfItem;
  mapping (uint256 => uint256) private previousPriceOfItem;
  mapping (uint256 => address) private approvedOfItem;
   
  
  /// Referrals and their referrers
  mapping(address => address) public referrerOf;
  
  /// Dividends and score
  uint256 private worldScore ; /// Worldscore = cumulated price of all owned countries + all spent ethers in this game
  mapping (address => uint256) private playerScore; /// For each player, the sum of each owned country + the sum of all spent ethers since the beginning of the game
  uint256 private dividendsScore ; /// Balance of dividends divided by the worldScore 
  mapping(uint256 => mapping(address => uint256)) private pendingBalance; /// Divs from referrals, bonus and dividends calculated after the playerScore change ; if the playerScore didn't change recently, there are some pending divs that can be calculated using dividendsScore and playerScore. The first mapping (uint256) is the jackpot version to use, the value goes up after each pot distribution and the previous pendingBalance are reseted.
  mapping(uint256 => mapping(address => uint256)) private handicap; /// a player cannot claim a % of all dividends but a % of the cumulated dividends after his join date, this is a handicap
  mapping(uint256 => mapping(address => uint256)) private balanceToWithdraw; /// A player cannot withdraw pending divs, he must request a withdraw first (pending divs move to balanceToWithdraw) then withdraw.	

  uint256 private potVersion = 1; /// Number of jackpots
  uint256 private lastWithdrawPotVersion = 1; /// Latest withdraw in the game (pot version)
  address private richestBuyer ; /// current player with the highest PlayerScore
  address private lastBuyer ; /// current latest buyer in the game
  uint256 private timestampLimit = 1528108990; /// after this timestamp, the richestBuyer and the lastBuyer will be allowed to withdraw 1/2 of the contract balance (1/4 each)
  
  struct CountryStruct {
		address[] itemToAddressArray; /// addresses that owned the same country	 
		uint256 priceHistory; /// cumulated price of the country
		uint256 startingPrice; /// starting price of the country
		}

  mapping (uint256 => CountryStruct) public countryStructs;
  
  mapping (uint256 => mapping(address => uint256)) private itemHistory; /// Store price history (cumulated) for each address for each country
  
  uint256 private HUGE = 1e13;
 
 
 


////////////////////////////////
/// 	USEFUL MODIFIER		 ///	
////////////////////////////////

	modifier onlyRealAddress() {
		require(msg.sender != address(0));
		_;
	}


	

	
////////////////////////////////
/// 	ERC721 PRIVILEGES	 ///	
////////////////////////////////

	modifier onlyERC721() {
		require(erc721Enabled);
		_;
	} 


  /**
   * @dev Unlocks ERC721 behaviour, allowing for trading on third party platforms.
   */	 
	function enableERC721 () onlyOwner() public {
		erc721Enabled = true;
	} 

  
 

 
///////////////////////////////////
///		LISTING NEW COUNTRIES 	///
///////////////////////////////////
	
	function listMultipleItems (uint256[] _itemIds, uint256 _price, address _owner) onlyOwner() external {
		for (uint256 i = 0; i < _itemIds.length; i++) {
			listItem(_itemIds[i], _price, _owner);
		}
	}

	
	function listItem (uint256 _itemId, uint256 _price, address _owner) onlyOwner() public {
		require(_price > 0);
		require(priceOfItem[_itemId] == 0);
		require(ownerOfItem[_itemId] == address(0));

		ownerOfItem[_itemId] = _owner;
		priceOfItem[_itemId] = _price;
		previousPriceOfItem[_itemId] = 0;
		listedItems.push(_itemId);
		newEntity(_itemId, _price);
	}

	
  /**
   * @dev Creates new Struct for a country each time a new country is listed.
   */	
	function newEntity(uint256 countryId, uint256 startPrice) private returns(bool success) {
		countryStructs[countryId].startingPrice = startPrice;
		return true;
	}

	
  /**
   * @dev Update the Struc each time a country is sold.
   * Push the newOwner, update the price history
   */	
	function updateEntity(uint256 countryId, address newOwner, uint256 priceUpdate) internal {
		countryStructs[countryId].priceHistory += priceUpdate;
		if (itemHistory[countryId][newOwner] == 0 ){
			countryStructs[countryId].itemToAddressArray.push(newOwner);
		}
	  }
 



 
///////////////////////
/// CALCULATE PRICE ///
///////////////////////

	function calculateNextPrice (uint256 _price) public view returns (uint256 _nextPrice) {
		if (_price < increaseLimit1) {
			return _price.mul(200).div(95);
		} else if (_price < increaseLimit2) {
			return _price.mul(160).div(96);
		} else if (_price < increaseLimit3) {
			return _price.mul(148).div(97);
		} else if (_price < increaseLimit4) {
			return _price.mul(136).div(97);
		} else {
			return _price.mul(124).div(98);
		}
	}

	function calculateDevCut (uint256 _price) public view returns (uint256 _devCut) {
		if (_price < increaseLimit1) {
			return _price.mul(5).div(100); // 5%
		} else if (_price < increaseLimit2) {
			return _price.mul(4).div(100); // 4%
		} else if (_price < increaseLimit4) {
			return _price.mul(3).div(100); // 3%
		} else {
			return _price.mul(2).div(100); // 2%
		}
	}
 



 
//////////////////////////////
/// BALANCES & WITHDRAWALS ///
//////////////////////////////

	function getBalance(address _playerAddress)
		public
		view
		returns(uint256 pendingRefBonus_, uint256 pendingFromScore_, uint256 totalPending_, uint256 balanceReadyToWithdraw_, uint256 playerScore_, uint256 handicap_, uint256 dividendsScore_)
		{
			uint256 refbonus = pendingBalance[potVersion][_playerAddress];
			uint256 playerSc = playerScore[_playerAddress];
			uint256 playerHandicap = handicap[potVersion][_playerAddress];
			uint256 divs = playerSc.mul(dividendsScore.sub(playerHandicap)).div(HUGE);
			uint256 totalPending = refbonus.add(divs);
			uint256 ready = balanceToWithdraw[potVersion][_playerAddress];
			return (refbonus, divs, totalPending, ready, playerSc, playerHandicap, dividendsScore);				
		}


		
	function getOldBalance(uint256 _potVersion, address _playerAddress)
		public
		view
		returns(uint256 oldPendingRefBonus_, uint256 oldHandicap_, uint256 oldReadyToWithdraw_)
		{
			uint256 oldRefBonus = pendingBalance[_potVersion][_playerAddress];
			uint256 oldPlayerHandicap = handicap[_potVersion][_playerAddress];
			uint256 oldReady = balanceToWithdraw[_potVersion][_playerAddress];
			return (oldRefBonus, oldPlayerHandicap, oldReady);				
		}
		
		
		
  /**
   * @dev First step to withdraw : players must confirm their pending Divs before withdrawing
   * this function sums the pending balances (pendingDividends and the pending divs from playerScore)
   * Then this sum moves to balanceReadyToWithdraw, the player can call the next function and withdraw divs
   */
	function confirmDividends() public onlyRealAddress {
		require(playerScore[msg.sender] > 0);/// the player exists
		require (dividendsScore >= handicap[potVersion][msg.sender]);
		require (dividendsScore >= 0);
		
		address _playerAddress = msg.sender;
		uint256 playerSc = playerScore[_playerAddress];
		uint256 handicap_ = handicap[potVersion][_playerAddress];
		
		uint256 refbonus = pendingBalance[potVersion][_playerAddress];
		uint256 divs = playerSc.mul(dividendsScore.sub(handicap_)).div(HUGE);
		uint256 totalPending = refbonus.add(divs);	
						
		/// Reset the values
		pendingBalance[potVersion][_playerAddress] = 0; /// Reset the pending balance
		handicap[potVersion][_playerAddress] = dividendsScore;
		
		/// Now the player is ready to withdraw ///
		balanceToWithdraw[potVersion][_playerAddress] += totalPending;
		
		// fire event
		emit ConfirmWithdraw(_playerAddress, refbonus, divs, totalPending, playerSc, handicap_);
		
	}


  /**
   * @dev Second step to withdraw : after confirming divs, players can withdraw divs to their wallet
   */	
	function withdraw() public onlyRealAddress {
		require(balanceOf(msg.sender) > 0);
		require(balanceToWithdraw[potVersion][msg.sender] > 0);
				
		address _playerAddress = msg.sender;
		
			if (lastWithdrawPotVersion != potVersion){
					lastWithdrawPotVersion = potVersion;
			}

        
        /// Add referrals earnings, bonus and divs
		uint256 divToTransfer = balanceToWithdraw[potVersion][_playerAddress];
		balanceToWithdraw[potVersion][_playerAddress] = 0;
		
        _playerAddress.transfer(divToTransfer);
		
        /// fire event
        emit Withdrawal(_playerAddress, divToTransfer, potVersion);
    }
	

	
  /**
   * @dev After 7 days without any buy, the richest user and the latest player will share the contract balance !
   */		
	function confirmDividendsFromPot() public {
		require(richestBuyer != address(0) && lastBuyer != address(0)) ;
		require(address(this).balance > 100000000);	/// mini 1e8 wei
		require(block.timestamp > timestampLimit);
		
		uint256 confirmation_TimeStamp = timestampLimit;
		potVersion ++;
		uint256 balance = address(this).balance;
		uint256 balanceQuarter = balance.div(4);
		dividendsScore = 0; /// reset dividends
		updateTimestampLimit(); /// Reset the timer, if no new buys, the richest and the last buyers will be able to withdraw the left quarter in a week or so
		balanceToWithdraw[potVersion][richestBuyer] = balanceQuarter;
		balanceToWithdraw[potVersion][lastBuyer] += balanceQuarter; /// if the richest = last, dividends cumulate
		
		
		// fire events
        emit ConfirmPotWithdraw(	
			 balance, 
			 richestBuyer, 
			 balanceToWithdraw[potVersion][richestBuyer],
			 lastBuyer,
			 balanceToWithdraw[potVersion][lastBuyer],
			 potVersion
		);
		
		emit PotWithdrawConstant(	
			 block.timestamp,
			 confirmation_TimeStamp,
			 dividendsScore,
			 potVersion,
			 lastWithdrawPotVersion
		);
		
	}


	
  /**
   * @dev If no new buys occur (dividendsScore = 0) and the richest and latest players don't withdraw their dividends after 3 jackpots, the game can be stuck forever
   * Prevent from jackpot vicious circle : same dividends are shared between latest and richest users again and again
   * If the richest and/or the latest player withdraw(s) at least once between 3 jackpots, it means the game is alive
   * Or if contract balance drops down to 1e8 wei (that means many successful jackpots and that a current withdrawal could cost too much gas for players)
   */	
	function withdrawAll() public onlyOwner {
		require((potVersion > lastWithdrawPotVersion.add(3) && dividendsScore == 0) || (address(this).balance < 100000001) );
		require (address(this).balance >0);
		
		potVersion ++;
		updateTimestampLimit();
		uint256 balance = address(this).balance;
		
		owner.transfer(balance);
		
        // fire event
        emit WithdrawOwner(potVersion, lastWithdrawPotVersion, balance);
    } 	

	
	
	
	
///////////////////////////////////////
/// REFERRERS - Setting and payment ///   
///////////////////////////////////////	

  /**
   * @dev Get the referrer of a player.
   * @param player The address of the player to get the referrer of.
   */
    function getReferrerOf(address player) public view returns (address) {
        return referrerOf[player];
    }

	
  /**
   * @dev Set a referrer.
   * @param newReferral The address to set the referrer for.
   * @param referrer The address of the referrer to set.
   * The referrer must own at least one country to keep his reflink active
   * Referrals got with an active link are forever, even if all the referrer's countries are sold
   */
    function setReferrer(address newReferral, address referrer) internal {
		if (getReferrerOf(newReferral) == address(0x0) && newReferral != referrer && balanceOf(referrer) > 0 && playerScore[newReferral] == 0) {
			
			/// Set the referrer, if no referrer has been set yet, and the player
			/// and referrer are not the same address.
				referrerOf[newReferral] = referrer;
        
			/// Emit event.
				emit SetReferrerEvent(newReferral, referrer);
		}
    }
	
	
	

  /**
   * @dev Dispatch the referrer bonus when a country is sold
   * @param referralDivToPay which dividends percentage will be dispatched to refererrs : 0 if no referrer, 2.5% if 1 referrer, 5% if 2
   */
	function payReferrer (address _oldOwner, uint256 _netProfit) internal returns (uint256 referralDivToPay) {
		address referrer_1 = referrerOf[_oldOwner];
		
		if (referrer_1 != 0x0) {
			referralDivToPay = _netProfit.mul(25).div(1000);
			pendingBalance[potVersion][referrer_1] += referralDivToPay;  /// 2.5% for the first referrer
			address referrer_2 = referrerOf[referrer_1];
				
				if (referrer_2 != 0x0) {
						pendingBalance[potVersion][referrer_2] += referralDivToPay;  /// 2.5% for the 2nd referrer
						referralDivToPay += referralDivToPay;
				}
		}
			
		emit PayReferrerEvent(_oldOwner, referrer_1, referrer_2, referralDivToPay);
		
		return referralDivToPay;
		
	}
	
	
	

	
///////////////////////////////////
/// INTERNAL FUNCTIONS WHEN BUY ///   
///////////////////////////////////	

  /**
   * @dev Dispatch dividends to former owners of a country
   */
	function bonusPreviousOwner(uint256 _itemSoldId, uint256 _paidPrice, uint256 _bonusToDispatch) private {
		require(_bonusToDispatch < (_paidPrice.mul(5).div(100)));
		require(countryStructs[_itemSoldId].priceHistory > 0);

		CountryStruct storage c = countryStructs[_itemSoldId];
		uint256 countryScore = c.priceHistory;
		uint256 kBonus = _bonusToDispatch.mul(HUGE).div(countryScore);
		uint256 bonusDispatched = 0;
		  
		for (uint256 i = 0; i < c.itemToAddressArray.length && bonusDispatched < _bonusToDispatch ; i++) {
			address listedBonusPlayer = c.itemToAddressArray[i];
			uint256 playerBonusScore = itemHistory[_itemSoldId][listedBonusPlayer];
			uint256 bonusToGet = playerBonusScore.mul(kBonus).div(HUGE);
				
				if (bonusDispatched.add(bonusToGet) <= _bonusToDispatch) {
					pendingBalance[potVersion][listedBonusPlayer] += bonusToGet;
					bonusDispatched += bonusToGet;
					
					emitInfo(bonusToGet, playerBonusScore, listedBonusPlayer, pendingBalance[potVersion][listedBonusPlayer], _itemSoldId);
				}
		}  
			
		emit BonusConstant(_bonusToDispatch, bonusDispatched, _bonusToDispatch.sub(bonusDispatched), _itemSoldId, kBonus, countryScore);
	}


	
	function emitInfo(uint256 dividendsToG_, uint256 playerSc_, address player_, uint256 divsBalance_, uint256 itemId_) private {
		emit BonusDispatch(dividendsToG_, playerSc_, player_, divsBalance_, itemId_);
  
	}

  

  /**
   * @dev we need to update the oldOwner and newOwner balances each time a country is sold, their handicap and playerscore will also change
   * Worldscore and dividendscore : we don't care, it will be updated later.
   * If accurate, set a new richest player
   */
	function updateScoreAndBalance(uint256 _paidPrice, uint256 _itemId, address _oldOwner, address _newOwner) internal {	
		uint256 _previousPaidPrice = previousPriceOfItem[_itemId];
		assert (_paidPrice > _previousPaidPrice);

		
		/// OLD OWNER ///
			uint256 scoreSubHandicap = dividendsScore.sub(handicap[potVersion][_oldOwner]);
			uint256 playerScore_ = playerScore[_oldOwner];
		
			/// If the old owner is the owner of this contract, we skip this part, the owner of the contract won't get dividends
				if (_oldOwner != owner && scoreSubHandicap >= 0 && playerScore_ > _previousPaidPrice) {
					pendingBalance[potVersion][_oldOwner] += playerScore_.mul(scoreSubHandicap).div(HUGE);
					playerScore[_oldOwner] -= _previousPaidPrice; ///for the oldOwner, the playerScore goes down the previous price
					handicap[potVersion][_oldOwner] = dividendsScore; /// and setting his handicap to dividendsScore after updating his balance
				}

				
		/// NEW OWNER ///
			scoreSubHandicap = dividendsScore.sub(handicap[potVersion][_newOwner]); /// Rewrite the var with the newOwner values
			playerScore_ = playerScore[_newOwner]; /// Rewrite the var playerScore with the newOwner PlayerScore
				
			/// If new player, his playerscore = 0, handicap = 0, so the pendingBalance math = 0
				if (scoreSubHandicap >= 0) {
					pendingBalance[potVersion][_newOwner] += playerScore_.mul(scoreSubHandicap).div(HUGE);
					playerScore[_newOwner] += _paidPrice.mul(2); ///for the newOwner, the playerScore goes up twice the value of the purchase price
					handicap[potVersion][_newOwner] = dividendsScore; /// and setting his handicap to dividendsScore after updating his balance
				}

				
		/// Change the richest user if this is the case...
				if (playerScore[_newOwner] > playerScore[richestBuyer]) {
					richestBuyer = _newOwner;
					
					emit newRichest(_newOwner, playerScore[_newOwner], block.timestamp, block.number);
				}		

				
		/// Change the last Buyer in any case
			lastBuyer = _newOwner;
		
	}
		

		

  /**
   * @dev Update the worldScore
   * After each buy, the worldscore increases : 2x current purchase price - 1x previousPrice
   */
	function updateWorldScore(uint256 _countryId, uint256 _price) internal	{
		worldScore += _price.mul(2).sub(previousPriceOfItem[_countryId]);
	}
		

		
  /**
   * @dev Update timestampLimit : the date on which the richest player and the last buyer will be able to share the contract balance (1/4 each)
   */ 
	function updateTimestampLimit() internal {
		timestampLimit = block.timestamp.add(604800).add(potVersion.mul(28800)); /// add 7 days + (pot version * X 8hrs)
	}


	
  /**
   * @dev Refund the buyer if excess
   */ 
	function excessRefund(address _newOwner, uint256 _price) internal {		
		uint256 excess = msg.value.sub(_price);
			if (excess > 0) {
				_newOwner.transfer(excess);
			}
	}	
	

	


///////////////////////////   
/// 	BUY A COUNTRY 	///
///////////////////////////
/*
     Buy a country directly from the contract for the calculated price
     which ensures that the owner gets a profit.  All countries that
     have been listed can be bought by this method. User funds are sent
     directly to the previous owner and are never stored in the contract.
*/
	
	function buy (uint256 _itemId, address referrerAddress) payable public onlyRealAddress {
		require(priceOf(_itemId) > 0);
		require(ownerOf(_itemId) != address(0));
		require(msg.value >= priceOf(_itemId));
		require(ownerOf(_itemId) != msg.sender);
		require(!isContract(msg.sender));
		require(msg.sender != owner);
		require(block.timestamp < timestampLimit || block.timestamp > timestampLimit.add(3600));
		
		
		address oldOwner = ownerOf(_itemId);
		address newOwner = msg.sender;
		uint256 price = priceOf(_itemId);

		
		
	
	////////////////////////
	/// Set the referrer ///
	////////////////////////
		
		setReferrer(newOwner, referrerAddress);
		
	

	
	///////////////////////////////////
	/// Update scores and timestamp ///
	///////////////////////////////////
		
		/// Dividends are dispatched among players accordingly to their "playerScore".
		/// The playerScore equals the sum of all their countries (owned now, paid price) + sum of all their previously owned countries 
		/// After each sell / buy, players that owned at least one country can claim dividends
		/// DIVS of a player = playerScore * DIVS to dispatch / worldScore
		/// If a player is a seller or a buyer, his playerScore will change, we need to adjust his parameters
		/// If a player is not a buyer / seller, his playerScore doesn't change, no need to adjust
			updateScoreAndBalance(price, _itemId, oldOwner, newOwner);
			
		/// worldScore change after each flip, we need to adjust
		/// To calculate the worldScore after a flip: add buy price x 2, subtract previous price
			updateWorldScore(_itemId, price);
		
		/// If 7 days with no buys, the richest player and the last buyer win the jackpot (1/2 of contract balance ; 1/4 each)
		/// Waiting time increases after each pot distribution
			updateTimestampLimit();
	


	
	///////////////////////
	/// Who earns what? ///
	///////////////////////	
	
		/// When a country flips, who earns how much?
		/// Devs : 2% to 5% of country price
		/// Seller's reward : current paidPrice - previousPrice - devsCut = net profit. The seller gets the previous Price + ca.65% of net Profit
		/// The referrers of the seller : % of netProfit from their referrals R+1 & R+2. If no referrers, all the referrers' cut goes to dividends to all players.
		/// All players, with or without a country now : dividends (% of netProfit)
		/// All previous owners of the flipped country : a special part of dividends called Bonus. If no previous buyer, all the bonus is also added up to dividends to all players.
			
		/// Calculate the devs cut
			uint256 devCut_ = calculateDevCut(price);
			
		/// Calculate the netProfit
			uint256 netProfit = price.sub(devCut_).sub(previousPriceOfItem[_itemId]);
		
		/// Calculate dividends cut from netProfit and what referrers left
			uint256 dividendsCut_ = netProfit.mul(30).div(100);
			
		/// Calculate the seller's reward
		/// Price sub the cuts : dev cut and 35% including referrer cut (5% max), 30% (25% if referrers) dividends (including 80% divs / 20% bonus max) and 5% (jackpot)
			uint256 oldOwnerReward = price.sub(devCut_).sub(netProfit.mul(35).div(100));

		/// Calculate the referrers cut and store the referrer's cut in the referrer's pending balance ///
		/// Update dividend's cut : 30% max ; 27,5% if 1 referrer ; 25% if 2 referrers
			uint256 refCut = payReferrer(oldOwner, netProfit);
			dividendsCut_ -= refCut;
		
	

	
	////////////////////////////////////////////////////////////
	///          Dispatch dividends to all players           ///
	/// Dispatch bonuses to previous owners of this country  ///
	////////////////////////////////////////////////////////////
		
		/// Dividends = 80% to all country owners (previous and current owners, no matter the country) + 20% bonus to previous owners of this country
		/// If no previous owners, 100% to all countries owners
	
		/// Are there previous owners for the current flipped country?
			if (price > countryStructs[_itemId].startingPrice && dividendsCut_ > 1000000 && worldScore > 0) {
				
				/// Yes, there are previous owners, they will get 20% of dividends of this country
					bonusPreviousOwner(_itemId, price, dividendsCut_.mul(20).div(100));
				
				/// So dividends for all the country owners are 100% - 20% = 80%
					dividendsCut_ = dividendsCut_.mul(80).div(100); 
			} 
	
				/// If else... nothing special to do, there are no previous owners, dividends remain 100%	
		
		/// Dispatch dividends to all country owners, no matter the country
		/// Note : to avoid floating numbers, we divide a constant called HUGE (1e13) by worldScore, of course we will multiply by HUGE when retrieving
			if (worldScore > 0) { /// worldScore must be greater than 0, the opposite is impossible and dividends are not calculated
				
				dividendsScore += HUGE.mul(dividendsCut_).div(worldScore);
			}
	

	
	////////////////////////////////////////////////
	/// Update the price history of the newOwner ///
	////////////////////////////////////////////////
	
		/// The newOwner is now known as an OWNER for this country
		/// We'll store his cumulated buy price for this country in a mapping
		/// Bonus : each time a country is flipped, players that previously owned this country get bonuses proportionally to the sum of their buys	
			updateEntity(_itemId, newOwner, price);
			itemHistory[_itemId][newOwner] += price;

	

	
	////////////////////////
	/// Update the price ///
	////////////////////////
	
		/// The price of purchase becomes the "previousPrice", and the "price" is the next price 
			previousPriceOfItem[_itemId] = price;
			priceOfItem[_itemId] = nextPriceOf(_itemId);
	

	
	/////////////////////////////////////////
	/// Transfer the reward to the seller ///
	/////////////////////////////////////////

		/// The seller's reward is transfered automatically to his wallet
		/// The dev cut is transfered automatically out the contract
		/// The other rewards (bonus, dividends, referrer's cut) will be stored in a pending balance
			oldOwner.transfer(oldOwnerReward);
			owner.transfer(devCut_);
			
		/// Transfer the token from oldOwner to newOwner
			_transfer(oldOwner, newOwner, _itemId);  	
	
		/// Emit the events
			emit Bought(_itemId, newOwner, price);
			emit Sold(_itemId, oldOwner, price);	
		
	

	
	///////////////////////////////////////////
	/// Transfer the excess to the newOwner ///
	///////////////////////////////////////////
	
		/// If the newOwner sent a higher price than the asked price, the excess is refunded
			excessRefund(newOwner, price);
		

	
	/// Send informations
		emit DivsDispatch(dividendsCut_, dividendsScore, _itemId, price, worldScore);		
		
/// END OF THE BUY FUNCTION ///
  
	}
  
 
  
//////////////////////////////
/// Practical informations ///
//////////////////////////////

	function itemHistoryOfPlayer(uint256 _itemId, address _owner) public view returns (uint256 _valueAddressOne) {
		return itemHistory[_itemId][_owner];
	}
  
  
	function implementsERC721() public view returns (bool _implements) {
		return erc721Enabled;
	}

	
	function name() public pure returns (string _name) {
		return "SuperCountries";
	}

	
	function symbol() public pure returns (string _symbol) {
		return "SUP";
	}

	
	function totalSupply() public view returns (uint256 _totalSupply) {
		return listedItems.length;
	}

	
	function balanceOf (address _owner) public view returns (uint256 _balance) {
		uint256 counter = 0;

			for (uint256 i = 0; i < listedItems.length; i++) {
				if (ownerOf(listedItems[i]) == _owner) {
					counter++;
				}
			}

		return counter;
	}


	function ownerOf (uint256 _itemId) public view returns (address _owner) {
		return ownerOfItem[_itemId];
	}

	
	function tokensOf (address _owner) public view returns (uint256[] _tokenIds) {
		uint256[] memory items = new uint256[](balanceOf(_owner));
		uint256 itemCounter = 0;
			
			for (uint256 i = 0; i < listedItems.length; i++) {
				if (ownerOf(listedItems[i]) == _owner) {
					items[itemCounter] = listedItems[i];
					itemCounter += 1;
				}
			}

		return items;
	}


	function tokenExists (uint256 _itemId) public view returns (bool _exists) {
		return priceOf(_itemId) > 0;
	}

	
	function approvedFor(uint256 _itemId) public view returns (address _approved) {
		return approvedOfItem[_itemId];
	}


	function approve(address _to, uint256 _itemId) onlyERC721() public {
		require(msg.sender != _to);
		require(tokenExists(_itemId));
		require(ownerOf(_itemId) == msg.sender);

		if (_to == 0) {
			if (approvedOfItem[_itemId] != 0) {
				delete approvedOfItem[_itemId];
				emit Approval(msg.sender, 0, _itemId);
			}
		}
		else {
			approvedOfItem[_itemId] = _to;
			emit Approval(msg.sender, _to, _itemId);
		}
	  }

	  
  /* Transferring a country to another owner will entitle the new owner the profits from `buy` */
	function transfer(address _to, uint256 _itemId) onlyERC721() public {
		require(msg.sender == ownerOf(_itemId));
		_transfer(msg.sender, _to, _itemId);
	}

	
	function transferFrom(address _from, address _to, uint256 _itemId) onlyERC721() public {
		require(approvedFor(_itemId) == msg.sender);
		_transfer(_from, _to, _itemId);
	}

	
	function _transfer(address _from, address _to, uint256 _itemId) internal {
		require(tokenExists(_itemId));
		require(ownerOf(_itemId) == _from);
		require(_to != address(0));
		require(_to != address(this));

		ownerOfItem[_itemId] = _to;
		approvedOfItem[_itemId] = 0;

		emit Transfer(_from, _to, _itemId);
	}


	
///////////////////////////	
/// READ ONLY FUNCTIONS ///
///////////////////////////

	function gameInfo() public view returns (address richestPlayer_, address lastBuyer_, uint256 thisBalance_, uint256 lastWithdrawPotVersion_, uint256 worldScore_, uint256 potVersion_,  uint256 timestampLimit_) {
		
		return (richestBuyer, lastBuyer, address(this).balance, lastWithdrawPotVersion, worldScore, potVersion, timestampLimit);
	}
	
	
	function priceOf(uint256 _itemId) public view returns (uint256 _price) {
		return priceOfItem[_itemId];
	}
	
	
	function nextPriceOf(uint256 _itemId) public view returns (uint256 _nextPrice) {
		return calculateNextPrice(priceOf(_itemId));
	}

	
	function allOf(uint256 _itemId) external view returns (address _owner, uint256 _price, uint256 previous_, uint256 _nextPrice) {
		return (ownerOf(_itemId), priceOf(_itemId), previousPriceOfItem[_itemId], nextPriceOf(_itemId));
	}


///  is Contract ///
	function isContract(address addr) internal view returns (bool) {
		uint size;
		assembly { size := extcodesize(addr) } // solium-disable-line
		return size > 0;
	}




////////////////////////
/// USEFUL FUNCTIONS ///
////////////////////////

  /** 
   * @dev Fallback function to accept all ether sent directly to the contract
   * Nothing is lost, it will raise the jackpot !
   */

    function() payable public
    {    }


}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"tokenExists","outputs":[{"name":"_exists","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"_name","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_itemId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"implementsERC721","outputs":[{"name":"_implements","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"_totalSupply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_itemId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"approvedFor","outputs":[{"name":"_approved","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"allOf","outputs":[{"name":"_owner","type":"address"},{"name":"_price","type":"uint256"},{"name":"previous_","type":"uint256"},{"name":"_nextPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"confirmDividendsFromPot","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_itemId","type":"uint256"},{"name":"_price","type":"uint256"},{"name":"_owner","type":"address"}],"name":"listItem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"tokensOf","outputs":[{"name":"_tokenIds","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"nextPriceOf","outputs":[{"name":"_nextPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"_owner","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_price","type":"uint256"}],"name":"calculateDevCut","outputs":[{"name":"_devCut","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"_balance","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"enableERC721","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_itemId","type":"uint256"},{"name":"referrerAddress","type":"address"}],"name":"buy","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_potVersion","type":"uint256"},{"name":"_playerAddress","type":"address"}],"name":"getOldBalance","outputs":[{"name":"oldPendingRefBonus_","type":"uint256"},{"name":"oldHandicap_","type":"uint256"},{"name":"oldReadyToWithdraw_","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"},{"name":"_owner","type":"address"}],"name":"itemHistoryOfPlayer","outputs":[{"name":"_valueAddressOne","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"_symbol","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"confirmDividends","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_itemId","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_itemId","type":"uint256"}],"name":"priceOf","outputs":[{"name":"_price","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_itemIds","type":"uint256[]"},{"name":"_price","type":"uint256"},{"name":"_owner","type":"address"}],"name":"listMultipleItems","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"player","type":"address"}],"name":"getReferrerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"countryStructs","outputs":[{"name":"priceHistory","type":"uint256"},{"name":"startingPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"referrerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"gameInfo","outputs":[{"name":"richestPlayer_","type":"address"},{"name":"lastBuyer_","type":"address"},{"name":"thisBalance_","type":"uint256"},{"name":"lastWithdrawPotVersion_","type":"uint256"},{"name":"worldScore_","type":"uint256"},{"name":"potVersion_","type":"uint256"},{"name":"timestampLimit_","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_price","type":"uint256"}],"name":"calculateNextPrice","outputs":[{"name":"_nextPrice","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_playerAddress","type":"address"}],"name":"getBalance","outputs":[{"name":"pendingRefBonus_","type":"uint256"},{"name":"pendingFromScore_","type":"uint256"},{"name":"totalPending_","type":"uint256"},{"name":"balanceReadyToWithdraw_","type":"uint256"},{"name":"playerScore_","type":"uint256"},{"name":"handicap_","type":"uint256"},{"name":"dividendsScore_","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_itemId","type":"uint256"},{"indexed":true,"name":"_owner","type":"address"},{"indexed":false,"name":"_price","type":"uint256"}],"name":"Bought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_itemId","type":"uint256"},{"indexed":true,"name":"_owner","type":"address"},{"indexed":false,"name":"_price","type":"uint256"}],"name":"Sold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_to","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_owner","type":"address"},{"indexed":true,"name":"_approved","type":"address"},{"indexed":false,"name":"_tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"referral","type":"address"},{"indexed":true,"name":"referrer","type":"address"}],"name":"SetReferrerEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"oldOwner","type":"address"},{"indexed":true,"name":"referrer1","type":"address"},{"indexed":true,"name":"referrer2","type":"address"},{"indexed":false,"name":"referralPart","type":"uint256"}],"name":"PayReferrerEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bonusToDispatch_","type":"uint256"},{"indexed":false,"name":"bonusDispatched_","type":"uint256"},{"indexed":false,"name":"notYetDispatched_","type":"uint256"},{"indexed":true,"name":"_itemSoldId_","type":"uint256"},{"indexed":false,"name":"kBonus","type":"uint256"},{"indexed":true,"name":"countryScore","type":"uint256"}],"name":"BonusConstant","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"bonusToGet_","type":"uint256"},{"indexed":true,"name":"playerScoreForThisCountry_","type":"uint256"},{"indexed":true,"name":"player_","type":"address"},{"indexed":false,"name":"pendingBalanceTotal_","type":"uint256"},{"indexed":true,"name":"_itemSoldId","type":"uint256"}],"name":"BonusDispatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"dividendsCut_","type":"uint256"},{"indexed":false,"name":"dividendsScore","type":"uint256"},{"indexed":true,"name":"_itemId","type":"uint256"},{"indexed":false,"name":"price","type":"uint256"},{"indexed":false,"name":"worldScore_","type":"uint256"}],"name":"DivsDispatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"richest_","type":"address"},{"indexed":false,"name":"richestScore_","type":"uint256"},{"indexed":true,"name":"blocktimestamp_","type":"uint256"},{"indexed":true,"name":"blocknumber_","type":"uint256"}],"name":"newRichest","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":true,"name":"ethereumWithdrawn","type":"uint256"},{"indexed":true,"name":"potVersion_","type":"uint256"}],"name":"Withdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"playerAddress","type":"address"},{"indexed":false,"name":"refbonus_","type":"uint256"},{"indexed":false,"name":"divs_","type":"uint256"},{"indexed":false,"name":"totalPending_","type":"uint256"},{"indexed":false,"name":"playerSc_","type":"uint256"},{"indexed":false,"name":"_handicap_","type":"uint256"}],"name":"ConfirmWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"contractBalance","type":"uint256"},{"indexed":true,"name":"richest_","type":"address"},{"indexed":false,"name":"richestBalance_","type":"uint256"},{"indexed":true,"name":"lastBuyer_","type":"address"},{"indexed":false,"name":"lastBalance_","type":"uint256"},{"indexed":true,"name":"potVersion","type":"uint256"}],"name":"ConfirmPotWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"blocktimestamp_","type":"uint256"},{"indexed":true,"name":"timestamplimit_","type":"uint256"},{"indexed":false,"name":"dividendsScore_","type":"uint256"},{"indexed":true,"name":"potVersion","type":"uint256"},{"indexed":false,"name":"lastWithdrawPotVersion_","type":"uint256"}],"name":"PotWithdrawConstant","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"potVersion","type":"uint256"},{"indexed":true,"name":"lastWithdrawPotVersion_","type":"uint256"},{"indexed":true,"name":"balance_","type":"uint256"}],"name":"WithdrawOwner","type":"event"}]

608060405260008060146101000a81548160ff021916908315150217905550668e1bc9bf040000600155670853a0d2313c00006002556722b1c8c1227a0000600355676124fee993bc000060045560016011556001601255635b1517be6015556509184e72a00060185534801561007557600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061425c806100c56000396000f3006080604052600436106101ab576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168062923f9e146101ad57806306fdde03146101f2578063095ea7b3146102825780631051db34146102cf57806318160ddd146102fe57806323b872dd146103295780632a6dd48f146103965780632e4f43bf146104035780633ccfd60b14610485578063418f14871461049c578063442edd03146104b35780635a3f26721461050a5780635ba9e48e146105a25780636352211e146105e3578063651212051461065057806370a082311461069157806371dc761e146106e85780637deb6025146106ff578063853828b61461073f5780638bda1540146107565780638da5cb5b146107c557806394bb7d641461081c57806395d89b411461087d578063a12077081461090d578063a9059cbb14610924578063b9186d7d14610971578063baddee6f146109b2578063bc7f25e414610a17578063cc2e2e8a14610a9a578063d21cacdf14610ae2578063db73bfce14610b65578063e08503ec14610c12578063f2fde38b14610c53578063f8b2cb4f14610c96575b005b3480156101b957600080fd5b506101d860048036038101908080359060200190929190505050610d17565b604051808215151515815260200191505060405180910390f35b3480156101fe57600080fd5b50610207610d2b565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561024757808201518184015260208101905061022c565b50505050905090810190601f1680156102745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561028e57600080fd5b506102cd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d68565b005b3480156102db57600080fd5b506102e4610fce565b604051808215151515815260200191505060405180910390f35b34801561030a57600080fd5b50610313610fe4565b6040518082815260200191505060405180910390f35b34801561033557600080fd5b50610394600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ff1565b005b3480156103a257600080fd5b506103c16004803603810190808035906020019092919050505061105e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561040f57600080fd5b5061042e6004803603810190808035906020019092919050505061109b565b604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200194505050505060405180910390f35b34801561049157600080fd5b5061049a6110df565b005b3480156104a857600080fd5b506104b16112ef565b005b3480156104bf57600080fd5b506105086004803603810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611728565b005b34801561051657600080fd5b5061054b600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118e1565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561058e578082015181840152602081019050610573565b505050509050019250505060405180910390f35b3480156105ae57600080fd5b506105cd600480360381019080803590602001909291905050506119e1565b6040518082815260200191505060405180910390f35b3480156105ef57600080fd5b5061060e600480360381019080803590602001909291905050506119fb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561065c57600080fd5b5061067b60048036038101908080359060200190929190505050611a38565b6040518082815260200191505060405180910390f35b34801561069d57600080fd5b506106d2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b11565b6040518082815260200191505060405180910390f35b3480156106f457600080fd5b506106fd611ba0565b005b61073d60048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c18565b005b34801561074b57600080fd5b506107546121ff565b005b34801561076257600080fd5b506107a160048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123ac565b60405180848152602001838152602001828152602001935050505060405180910390f35b3480156107d157600080fd5b506107da6124c1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082857600080fd5b5061086760048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124e6565b6040518082815260200191505060405180910390f35b34801561088957600080fd5b50610892612541565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108d25780820151818401526020810190506108b7565b50505050905090810190601f1680156108ff5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561091957600080fd5b5061092261257e565b005b34801561093057600080fd5b5061096f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061294e565b005b34801561097d57600080fd5b5061099c600480360381019080803590602001909291905050506129ba565b6040518082815260200191505060405180910390f35b3480156109be57600080fd5b50610a1560048036038101908080359060200190820180359060200191909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129d7565b005b348015610a2357600080fd5b50610a58600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a77565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aa657600080fd5b50610ac560048036038101908080359060200190929190505050612ae0565b604051808381526020018281526020019250505060405180910390f35b348015610aee57600080fd5b50610b23600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b04565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b7157600080fd5b50610b7a612b37565b604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b348015610c1e57600080fd5b50610c3d60048036038101908080359060200190929190505050612bc3565b6040518082815260200191505060405180910390f35b348015610c5f57600080fd5b50610c94600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cd4565b005b348015610ca257600080fd5b50610cd7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e29565b6040518088815260200187815260200186815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b600080610d23836129ba565b119050919050565b60606040805190810160405280600e81526020017f5375706572436f756e7472696573000000000000000000000000000000000000815250905090565b600060149054906101000a900460ff161515610d8357600080fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515610dbe57600080fd5b610dc781610d17565b1515610dd257600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16610df2826119fb565b73ffffffffffffffffffffffffffffffffffffffff16141515610e1457600080fd5b60008273ffffffffffffffffffffffffffffffffffffffff161415610f125760006009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610f0d576009600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560003373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35b610fca565b816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a35b5050565b60008060149054906101000a900460ff16905090565b6000600580549050905090565b600060149054906101000a900460ff16151561100c57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff1661102c8261105e565b73ffffffffffffffffffffffffffffffffffffffff1614151561104e57600080fd5b611059838383612ff8565b505050565b60006009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000806000806110aa856119fb565b6110b3866129ba565b60086000888152602001908152602001600020546110d0886119e1565b93509350935093509193509193565b600080600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415151561111e57600080fd5b600061112933611b11565b11151561113557600080fd5b600060106000601154815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411151561119657600080fd5b3391506011546012541415156111b0576011546012819055505b60106000601154815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060106000601154815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112a3573d6000803e3d6000fd5b50601154818373ffffffffffffffffffffffffffffffffffffffff167fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb60405160405180910390a45050565b60008060008073ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580156113a15750600073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15156113ac57600080fd5b6305f5e1003073ffffffffffffffffffffffffffffffffffffffff16311115156113d557600080fd5b601554421115156113e557600080fd5b60155492506011600081548092919060010191905055503073ffffffffffffffffffffffffffffffffffffffff1631915061142a6004836131d490919063ffffffff16565b90506000600d8190555061143c6131ef565b806010600060115481526020019081526020016000206000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550806010600060115481526020019081526020016000206000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550601154601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7d52b961c8da712caedc7332724540baef718e9ef738de74e08dafcdfb4d923b856010600060115481526020019081526020016000206000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546010600060115481526020019081526020016000206000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405180848152602001838152602001828152602001935050505060405180910390a460115483427f47b47b8c7743492a3f458380fb4e05eea566f4535b9d8432c9b37bc12fc8a0d0600d54601254604051808381526020018281526020019250505060405180910390a4505050565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561178357600080fd5b60008211151561179257600080fd5b600060076000858152602001908152602001600020541415156117b457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff166006600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561182257600080fd5b806006600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160076000858152602001908152602001600020819055506000600860008581526020019081526020016000208190555060058390806001815401808255809150509060018203906000526020600020016000909192909190915055506118db8383613235565b50505050565b6060806000806118f085611b11565b60405190808252806020026020018201604052801561191e5781602001602082028038833980820191505090505b50925060009150600090505b6005805490508110156119d6578473ffffffffffffffffffffffffffffffffffffffff1661197060058381548110151561196057fe5b90600052602060002001546119fb565b73ffffffffffffffffffffffffffffffffffffffff1614156119c95760058181548110151561199b57fe5b906000526020600020015483838151811015156119b457fe5b90602001906020020181815250506001820191505b808060010191505061192a565b829350505050919050565b60006119f46119ef836129ba565b612bc3565b9050919050565b60006006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600154821015611a7257611a6b6064611a5d60058561325c90919063ffffffff16565b6131d490919063ffffffff16565b9050611b0c565b600254821015611aaa57611aa36064611a9560048561325c90919063ffffffff16565b6131d490919063ffffffff16565b9050611b0c565b600454821015611ae257611adb6064611acd60038561325c90919063ffffffff16565b6131d490919063ffffffff16565b9050611b0c565b611b096064611afb60028561325c90919063ffffffff16565b6131d490919063ffffffff16565b90505b919050565b6000806000809150600090505b600580549050811015611b96578373ffffffffffffffffffffffffffffffffffffffff16611b64600583815481101515611b5457fe5b90600052602060002001546119fb565b73ffffffffffffffffffffffffffffffffffffffff161415611b895781806001019250505b8080600101915050611b1e565b8192505050919050565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611bfb57600080fd5b6001600060146101000a81548160ff021916908315150217905550565b600080600080600080600080600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515611c6057600080fd5b6000611c6b8b6129ba565b111515611c7757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16611c988b6119fb565b73ffffffffffffffffffffffffffffffffffffffff1614151515611cbb57600080fd5b611cc48a6129ba565b3410151515611cd257600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16611cf28b6119fb565b73ffffffffffffffffffffffffffffffffffffffff1614151515611d1557600080fd5b611d1e33613297565b151515611d2a57600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151515611d8657600080fd5b601554421080611dab5750611da8610e106015546132aa90919063ffffffff16565b42115b1515611db657600080fd5b611dbf8a6119fb565b9750339650611dcd8a6129ba565b9550611dd9878a6132c8565b611de5868b8a8a613479565b611def8a87613a9d565b611df76131ef565b611e0086611a38565b9450611e3a600860008c815260200190815260200160002054611e2c8789613ae990919063ffffffff16565b613ae990919063ffffffff16565b9350611e636064611e55601e8761325c90919063ffffffff16565b6131d490919063ffffffff16565b9250611eb0611e8f6064611e8160238861325c90919063ffffffff16565b6131d490919063ffffffff16565b611ea28789613ae990919063ffffffff16565b613ae990919063ffffffff16565b9150611ebc8885613b02565b90508083039250601660008b81526020019081526020016000206002015486118015611eea5750620f424083115b8015611ef857506000600b54115b15611f5857611f2e8a87611f296064611f1b60148961325c90919063ffffffff16565b6131d490919063ffffffff16565b613d83565b611f556064611f4760508661325c90919063ffffffff16565b6131d490919063ffffffff16565b92505b6000600b541115611f9c57611f8c600b54611f7e8560185461325c90919063ffffffff16565b6131d490919063ffffffff16565b600d600082825401925050819055505b611fa78a8888614067565b85601760008c815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555085600860008c8152602001908152602001600020819055506120268a6119e1565b600760008c8152602001908152602001600020819055508773ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612083573d6000803e3d6000fd5b506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156120eb573d6000803e3d6000fd5b506120f788888c612ff8565b8673ffffffffffffffffffffffffffffffffffffffff168a7fd2728f908c7e0feb83c6278798370fcb86b62f236c9dbf1a3f541096c2159040886040518082815260200191505060405180910390a38773ffffffffffffffffffffffffffffffffffffffff168a7f66f5cd880edf48cdde6c966e5da0784fcc4c5e85572b8b3b62c4357798d447d7886040518082815260200191505060405180910390a361219f8787614164565b897fc2d38df9d158fa63a4d22026daa0c1962b6e04743f50d7551dfdc0fe8b4d140484600d5489600b546040518085815260200184815260200183815260200182815260200194505050505060405180910390a250505050505050505050565b60003373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561225c57600080fd5b61227260036012546132aa90919063ffffffff16565b60115411801561228457506000600d54145b806122a957506305f5e1013073ffffffffffffffffffffffffffffffffffffffff1631105b15156122b457600080fd5b60003073ffffffffffffffffffffffffffffffffffffffff16311115156122da57600080fd5b6011600081548092919060010191905055506122f46131ef565b3073ffffffffffffffffffffffffffffffffffffffff163190506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612375573d6000803e3d6000fd5b50806012546011547f23852d00014f909bc66902f9565357935dbd78450e7e9a46b8caa5accbc8285160405160405180910390a450565b600080600080600080600e600089815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549250600f600089815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205491506010600089815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508282829550955095505050509250925092565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006017600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60606040805190810160405280600381526020017f5355500000000000000000000000000000000000000000000000000000000000815250905090565b600080600080600080600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515156125c357600080fd5b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411151561261157600080fd5b600f6000601154815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d541015151561267457600080fd5b6000600d541015151561268657600080fd5b339550600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549450600f6000601154815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549350600e6000601154815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205492506127b06018546127a261279387600d54613ae990919063ffffffff16565b8861325c90919063ffffffff16565b6131d490919063ffffffff16565b91506127c582846132aa90919063ffffffff16565b90506000600e6000601154815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d54600f6000601154815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060106000601154815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508573ffffffffffffffffffffffffffffffffffffffff167f4324e1fbcfc75073846dc7188f546ae390ff4c589a22422c75df55c26ed59bdc8484848989604051808681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a2505050505050565b600060149054906101000a900460ff16151561296957600080fd5b612972816119fb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156129ab57600080fd5b6129b6338383612ff8565b5050565b600060076000838152602001908152602001600020549050919050565b60003373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612a3457600080fd5b600090505b84849050811015612a7057612a638585838181101515612a5557fe5b905060200201358484611728565b8080600101915050612a39565b5050505050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60166020528060005260406000206000915090508060010154908060020154905082565b600a6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000806000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1631601254600b54601154601554965096509650965096509650965090919293949596565b6000600154821015612bfd57612bf6605f612be860c88561325c90919063ffffffff16565b6131d490919063ffffffff16565b9050612ccf565b600254821015612c3557612c2e6060612c2060a08561325c90919063ffffffff16565b6131d490919063ffffffff16565b9050612ccf565b600354821015612c6d57612c666061612c5860948561325c90919063ffffffff16565b6131d490919063ffffffff16565b9050612ccf565b600454821015612ca557612c9e6061612c9060888561325c90919063ffffffff16565b6131d490919063ffffffff16565b9050612ccf565b612ccc6062612cbe607c8561325c90919063ffffffff16565b6131d490919063ffffffff16565b90505b919050565b3373ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612d2f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612d6b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000806000806000806000806000806000600e6000601154815260200190815260200160002060008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549550600c60008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549450600f6000601154815260200190815260200160002060008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549350612f64601854612f56612f4787600d54613ae990919063ffffffff16565b8861325c90919063ffffffff16565b6131d490919063ffffffff16565b9250612f7983876132aa90919063ffffffff16565b915060106000601154815260200190815260200160002060008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858383838888600d549c509c509c509c509c509c509c50505050505050919395979092949650565b61300181610d17565b151561300c57600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1661302c826119fb565b73ffffffffffffffffffffffffffffffffffffffff1614151561304e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561308a57600080fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156130c557600080fd5b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b60008082848115156131e257fe5b0490508091505092915050565b61322d61320961708060115461325c90919063ffffffff16565b61321f62093a80426132aa90919063ffffffff16565b6132aa90919063ffffffff16565b601581905550565b60008160166000858152602001908152602001600020600201819055506001905092915050565b60008060008414156132715760009150613290565b828402905082848281151561328257fe5b0414151561328c57fe5b8091505b5092915050565b600080823b905060008111915050919050565b60008082840190508381101515156132be57fe5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff166132e983612a77565b73ffffffffffffffffffffffffffffffffffffffff1614801561333857508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561334c5750600061334a82611b11565b115b801561339757506000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156134755780600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fb450fc051a97f4be9c19179858075d55dcd18451137b75b621aa642ebceadb3760405160405180910390a35b5050565b600080600060086000878152602001908152602001600020549250828711151561349f57fe5b613506600f6000601154815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d54613ae990919063ffffffff16565b9150600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156135a8575060008210155b80156135b357508281115b156136e5576135df6018546135d1848461325c90919063ffffffff16565b6131d490919063ffffffff16565b600e6000601154815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555082600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550600d54600f6000601154815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b61374c600f6000601154815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600d54613ae990919063ffffffff16565b9150600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000821015156138da576137c16018546137b3848461325c90919063ffffffff16565b6131d490919063ffffffff16565b600e6000601154815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061383460028861325c90919063ffffffff16565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600d54600f6000601154815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600c6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115613a535783601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555043428573ffffffffffffffffffffffffffffffffffffffff167f67cd21f46fbb7e468ddcd4e93dcf0fc228d9df2f5669959539eb8adb39cc0564600c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a45b83601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050565b613ad66008600084815260200190815260200160002054613ac860028461325c90919063ffffffff16565b613ae990919063ffffffff16565b600b600082825401925050819055505050565b6000828211151515613af757fe5b818303905092915050565b6000806000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16915060008273ffffffffffffffffffffffffffffffffffffffff16141515613cfc57613bb16103e8613ba360198761325c90919063ffffffff16565b6131d490919063ffffffff16565b925082600e6000601154815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff16141515613cfb5782600e6000601154815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555082830192505b5b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f79937abffcfdfa40d3f12bf61cd7a05b3cbd14369ebfe8a5a5a35d8d14b4d384866040518082815260200191505060405180910390a4829250505092915050565b600080600080600080600080613db66064613da860058d61325c90919063ffffffff16565b6131d490919063ffffffff16565b89101515613dc357600080fd5b6000601660008d815260200190815260200160002060010154111515613de857600080fd5b601660008c8152602001908152602001600020975087600101549650613e2b87613e1d6018548c61325c90919063ffffffff16565b6131d490919063ffffffff16565b955060009450600093505b876000018054905084108015613e4b57508885105b15613ff7578760000184815481101515613e6157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250601760008c815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150613f08601854613efa888561325c90919063ffffffff16565b6131d490919063ffffffff16565b905088613f1e82876132aa90919063ffffffff16565b111515613fea5780600e6000601154815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508085019450613fe9818385600e6000601154815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548f6141d1565b5b8380600101945050613e36565b868b7fceb4b13ccc641c5bc314f7f19734f73e88b54f41fb9651e44e59ffaabcf02cdd8b8861402f8a8f613ae990919063ffffffff16565b8b6040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050505050505050505050565b80601660008581526020019081526020016000206001016000828254019250508190555060006017600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561415f57601660008481526020019081526020016000206000018290806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b505050565b60006141798234613ae990919063ffffffff16565b905060008111156141cc578273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156141ca573d6000803e3d6000fd5b505b505050565b808373ffffffffffffffffffffffffffffffffffffffff16857f4cda2925eea274e308d19b94cf807a899810844448d5959cbbdd21b2c5d64bdd8886604051808381526020018281526020019250505060405180910390a450505050505600a165627a7a72305820b191ed1a8bdcdc035763bb752add4a85ba678083b74d57e4430ece4780fc1f660029

Swarm Source

bzzr://b191ed1a8bdcdc035763bb752add4a85ba678083b74d57e4430ece4780fc1f66
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.