Overview
ETH Balance
0.157723362828513393 ETH
Eth Value
$403.03 (@ $2,555.28/ETH)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 786 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Init Race | 12066250 | 1281 days ago | IN | 0 ETH | 0.02323584 | ||||
Withdraw Gains | 10599164 | 1507 days ago | IN | 0 ETH | 0.00276404 | ||||
Init Race | 10595877 | 1507 days ago | IN | 0 ETH | 0.00749574 | ||||
Close Entry | 10592997 | 1508 days ago | IN | 0 ETH | 0.01208361 | ||||
Buy Share | 10587232 | 1508 days ago | IN | 0.03 ETH | 0.0318561 | ||||
Init Race | 9891810 | 1616 days ago | IN | 0 ETH | 0.00128491 | ||||
Withdraw Gains | 9889912 | 1616 days ago | IN | 0 ETH | 0.00036052 | ||||
Close Entry | 9888928 | 1617 days ago | IN | 0 ETH | 0.00132423 | ||||
Withdraw Gains | 9883175 | 1618 days ago | IN | 0 ETH | 0.00085672 | ||||
Buy Share | 9883164 | 1618 days ago | IN | 0.025 ETH | 0.00519393 | ||||
Withdraw Gains | 9883153 | 1618 days ago | IN | 0 ETH | 0.00090132 | ||||
Init Race | 9883043 | 1618 days ago | IN | 0 ETH | 0.00342662 | ||||
Close Entry | 9880164 | 1618 days ago | IN | 0 ETH | 0.00099317 | ||||
Withdraw Gains | 9874519 | 1619 days ago | IN | 0 ETH | 0.00036496 | ||||
Buy Share With D... | 9874398 | 1619 days ago | IN | 0 ETH | 0.00148592 | ||||
Init Race | 9872866 | 1619 days ago | IN | 0 ETH | 0.00321228 | ||||
Withdraw Gains | 9871464 | 1619 days ago | IN | 0 ETH | 0.00030044 | ||||
Close Entry | 9869985 | 1620 days ago | IN | 0 ETH | 0.00198634 | ||||
Withdraw Gains | 9867314 | 1620 days ago | IN | 0 ETH | 0.00005711 | ||||
Buy Share With D... | 9864221 | 1620 days ago | IN | 0 ETH | 0.00172901 | ||||
Buy Share | 9863476 | 1621 days ago | IN | 0.01 ETH | 0.00074183 | ||||
Withdraw Gains | 9857657 | 1621 days ago | IN | 0 ETH | 0.00028996 | ||||
Withdraw Gains | 9857640 | 1621 days ago | IN | 0 ETH | 0.00030044 | ||||
Init Race | 9852546 | 1622 days ago | IN | 0 ETH | 0.00107076 | ||||
Close Entry | 9849668 | 1623 days ago | IN | 0 ETH | 0.00132423 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
10599164 | 1507 days ago | 0.02355408 ETH | ||||
10592997 | 1508 days ago | 0.00392613 ETH | ||||
10592997 | 1508 days ago | 0.00078522 ETH | ||||
10587232 | 1508 days ago | 0.0015 ETH | ||||
9889912 | 1616 days ago | 0.00801536 ETH | ||||
9888928 | 1617 days ago | 0.00333973 ETH | ||||
9888928 | 1617 days ago | 0.00066794 ETH | ||||
9883175 | 1618 days ago | 0.01175527 ETH | ||||
9883164 | 1618 days ago | 0.00125 ETH | ||||
9883153 | 1618 days ago | 0.01991928 ETH | ||||
9880164 | 1618 days ago | 0.00341053 ETH | ||||
9880164 | 1618 days ago | 0.0006821 ETH | ||||
9874519 | 1619 days ago | 0.00512226 ETH | ||||
9874398 | 1619 days ago | 0.00124999 ETH | ||||
9874398 | 1619 days ago | 0.02499999 ETH | ||||
9871464 | 1619 days ago | 0.00975684 ETH | ||||
9869985 | 1620 days ago | 0.00406535 ETH | ||||
9869985 | 1620 days ago | 0.00081307 ETH | ||||
9867314 | 1620 days ago | 0.00888028 ETH | ||||
9864221 | 1620 days ago | 0.00099999 ETH | ||||
9864221 | 1620 days ago | 0.01999999 ETH | ||||
9863476 | 1621 days ago | 0.0005 ETH | ||||
9857657 | 1621 days ago | 0.00502356 ETH | ||||
9857640 | 1621 days ago | 0.01942567 ETH | ||||
9849668 | 1623 days ago | 0.00440988 ETH |
Loading...
Loading
Contract Name:
EtherKnightGame
Compiler Version
v0.4.25+commit.59dbf8f1
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-12-01 */ /* Introducing "ETHERKNIGHT" 3.1 our first HDX20 POWERED GAME running on the Ethereum Blockchain got a 2nd upgrade "ETHERKNIGHT" is playable @ http://etherknightgame.io About the game : 4 Knight Characters racing against each other to be the first to reach the goal and win the pot of gold. How to play ETHERKNIGHT: The Race will start after at least 1 player has bought shares of any Knight Racer then for every new item activated a 24H countdown will reset. At the end of the countdown, the players on the first Racer will share the Treasure and everybody else will receive their payout (no one is leaving the table without values). In addition, when you buy shares of your favorite Racer 5% of the price will buy you HDX20 Token earning you Ethereum from the volume of any HDX20 POWERED GAMES (visit https://hdx20.io/ for details). Please remember, at every new buy, the price of the share is increasing a little and so will be your payout even if you are not the winner, buying shares at the beginning of the race is highly advised. Play for the big WIN, Play for the TREASURE, Play for staking HDX20 TOKEN or Play for all at once...Your Choice! We wish you Good Luck! PAYOUTS DISTRIBUTION: .60% to the winners of the race distributed proportionally to their shares. .25% to the community of HDX20 gamers/holders distributed as price appreciation. .5% to developer for running, developing and expanding the platform. .10% for provisioning the TREASURE for the next Race. UPDATE: we updated: .from 1 eth played 40%(50% before) will charge the treasure, 40% (30% before) will buy shares, 5% will buy HDX20 for the player and 15% will appreciate the share price. .adjusted the item price increase function. This product is copyrighted. Any unauthorized copy, modification, or use without express written consent from HyperDevbox is prohibited. Copyright 2018 HyperDevbox */ pragma solidity ^0.4.25; interface HDX20Interface { function() payable external; function buyTokenFromGame( address _customerAddress , address _referrer_address ) payable external returns(uint256); function payWithToken( uint256 _eth , address _player_address ) external returns(uint256); function appreciateTokenPrice() payable external; function totalSupply() external view returns(uint256); function ethBalanceOf(address _customerAddress) external view returns(uint256); function balanceOf(address _playerAddress) external view returns(uint256); function sellingPrice( bool includeFees) external view returns(uint256); } contract EtherKnightGame { HDX20Interface private HDXcontract = HDX20Interface(0x8942a5995bd168f347f7ec58f25a54a9a064f882); using SafeMath for uint256; using SafeMath128 for uint128; /*============================== = EVENTS = ==============================*/ event OwnershipTransferred( address previousOwner, address nextOwner, uint256 timeStamp ); event HDXcontractChanged( address previous, address next, uint256 timeStamp ); event onWithdrawGains( address customerAddress, uint256 ethereumWithdrawn, uint256 timeStamp ); event onNewRound( uint256 gRND, uint32 turnRound, uint32 eventType, uint32 eventTarget, uint32[4] persoEnergy, uint32[4] persoDistance, uint32[4] powerUpSpeed, uint32[4] powerUpShield, uint256 blockNumberTimeout, uint256 treasureAmountFind, address customerAddress ); event onNewRace( uint256 gRND, uint8[4] persoType, uint256 blockNumber ); event onBuyShare( address customerAddress, uint256 gRND, uint32 perso, uint256 nbToken, uint32 actionType, uint32 actionValue ); event onMaintenance( bool mode, uint256 timeStamp ); event onRefund( address indexed customerAddress, uint256 eth, uint256 timeStamp ); event onCloseEntry( uint256 gRND ); event onChangeBlockTimeAverage( uint256 blocktimeavg ); /*============================== = MODIFIERS = ==============================*/ modifier onlyOwner { require (msg.sender == owner ); _; } modifier onlyFromHDXToken { require (msg.sender == address( HDXcontract )); _; } modifier onlyDirectTransaction { require (msg.sender == tx.origin); _; } modifier isPlayer { require (PlayerData[ msg.sender].gRND !=0); _; } modifier isMaintenance { require (maintenanceMode==true); _; } modifier isNotMaintenance { require (maintenanceMode==false); _; } // Changing ownership of the contract safely address public owner; /// Contract governance. constructor () public { owner = msg.sender; if ( address(this).balance > 0) { owner.transfer( address(this).balance ); } } function changeOwner(address _nextOwner) public onlyOwner { require (_nextOwner != owner); require(_nextOwner != address(0)); emit OwnershipTransferred(owner, _nextOwner , now); owner = _nextOwner; } function changeHDXcontract(address _next) public onlyOwner { require (_next != address( HDXcontract )); require( _next != address(0)); emit HDXcontractChanged(address(HDXcontract), _next , now); HDXcontract = HDX20Interface( _next); } function changeBlockTimeAverage( uint256 blocktimeavg) public onlyOwner { require ( blocktimeavg>0 ); blockTimeAverage = blocktimeavg; emit onChangeBlockTimeAverage( blockTimeAverage ); } function enableMaintenance() public onlyOwner { maintenanceMode = true; emit onMaintenance( maintenanceMode , now); } function disableMaintenance() public onlyOwner { uint8[4] memory perso =[0,1,2,3]; maintenanceMode = false; emit onMaintenance( maintenanceMode , now); //reset with a new race initRace( perso ); } function refundMe() public isMaintenance { address _playerAddress = msg.sender; require( this_gRND>0 && GameRoundData[ this_gRND].extraData[0]>0 && GameRoundData[ this_gRND].extraData[0]<(1<<30) && PlayerData[ _playerAddress ].gRND==this_gRND); uint256 _eth = 0; for( uint i=0;i<4;i++) { _eth = _eth.add( PlayerGameRound[ _playerAddress][this_gRND].shares[i] * GameRoundData[ this_gRND].sharePrice); PlayerGameRound[ _playerAddress][this_gRND].shares[i] = 0; } if (_eth>0) { _playerAddress.transfer( _eth ); emit onRefund( _playerAddress , _eth , now ); } } /*================================ = GAMES VARIABLES = ================================*/ struct PlayerData_s { uint256 chest; uint256 payoutsTo; uint256 gRND; } struct PlayerGameRound_s { uint256[4] shares; uint128 treasure_payoutsTo; uint128 token; } struct GameRoundData_s { uint256 blockNumber; uint256 blockNumberTimeout; uint256 sharePrice; uint256[4] sharePots; uint256 shareEthBalance; uint256 shareSupply; uint256 treasureSupply; //this time we want to stream the HDX20 apprecition and dev fees on the way uint256 allFeeSupply; //to separate the fees from the actual treasure uint256 hdx20AppreciationPayout; uint256 devAppreciationPayout; // uint256 totalTreasureFound; uint256[6] actionBlockNumber; uint128[4] treasurePerShare; uint32[8] persoData; //energy[4] distance[4] uint32[8] powerUpData; //Speed[4] Shield[4] uint32[6] actionValue; uint32[6] extraData;//[0]==this_TurnRound , [1]==winner , [2-5] totalPlayers } mapping (address => PlayerData_s) private PlayerData; mapping (address => mapping (uint256 => PlayerGameRound_s)) private PlayerGameRound; mapping (uint256 => GameRoundData_s) private GameRoundData; bool private maintenanceMode=false; uint256 private this_gRND =0; //85 , missing 15% for shares appreciation eg:share price increase uint8 constant private HDX20BuyFees = 5; uint8 constant private TREASUREBuyFees = 40; uint8 constant private BUYPercentage = 40; //the part to keep from the treasure for next round treasure + hdx20 appreciation + dev uint8 constant private DevFees = 5; uint8 constant private TreasureFees = 10; uint8 constant private AppreciationFees = 25; uint8 constant private AddedFees = DevFees+TreasureFees+AppreciationFees; uint256 constant internal magnitude = 1e18; uint256 private genTreasure = 0; uint256 constant private minimumSharePrice = 0.001 ether; uint256 private blockTimeAverage = 15; //seconds per block uint8[4] private this_Perso_Type; /*================================ = PUBLIC FUNCTIONS = ================================*/ //fallback will be called only from the HDX token contract to fund the game from customers's HDX20 function() payable public onlyFromHDXToken { } function ChargeTreasure() public payable { genTreasure = SafeMath.add( genTreasure , msg.value); } function buyTreasureShares(GameRoundData_s storage _GameRoundData , uint256 _eth ) private returns( uint256) { uint256 _nbshares = (_eth.mul( magnitude)) / _GameRoundData.sharePrice; uint256 _nbsharesForTreasure = (_nbshares.mul( 100-DevFees-TreasureFees-AppreciationFees)) / 100; //now we do separate for streamline payment _GameRoundData.treasureSupply = _GameRoundData.treasureSupply.add( _nbsharesForTreasure ); //the difference is for the allFeeSupply _GameRoundData.allFeeSupply = _GameRoundData.allFeeSupply.add( _nbshares - _nbsharesForTreasure); _GameRoundData.shareSupply = _GameRoundData.shareSupply.add( _nbshares ); return( _nbshares); } function initRace( uint8[4] p ) public onlyOwner isNotMaintenance { this_gRND++; GameRoundData_s storage _GameRoundData = GameRoundData[ this_gRND ]; for( uint i=0;i<4;i++) { this_Perso_Type[i] = p[i]; _GameRoundData.persoData[i] = 100; _GameRoundData.persoData[4+i] = 25; } _GameRoundData.blockNumber = block.number; _GameRoundData.blockNumberTimeout = block.number + (360*10*24*3600); uint256 _sharePrice = 0.001 ether; // minimumSharePrice; _GameRoundData.sharePrice = _sharePrice; uint256 _nbshares = buyTreasureShares(_GameRoundData, genTreasure ); //convert into ETH _nbshares = _nbshares.mul( _sharePrice ) / magnitude; //start balance _GameRoundData.shareEthBalance = _nbshares; genTreasure = genTreasure.sub( _nbshares); emit onNewRace( this_gRND , p , block.number); } function get_TotalPayout( GameRoundData_s storage _GameRoundData ) private view returns( uint256) { uint256 _payout = 0; uint256 _sharePrice = _GameRoundData.sharePrice; for(uint i=0;i<4;i++) { uint256 _bet = _GameRoundData.sharePots[i]; _payout = _payout.add( _bet.mul (_sharePrice) / magnitude ); } //from the whole treasure now since new version uint256 _potValue = (_GameRoundData.treasureSupply.mul( _sharePrice )) / magnitude; _payout = _payout.add( _potValue ).add(_GameRoundData.totalTreasureFound ); return( _payout ); } function get_PendingGains( address _player_address , uint256 _gRND) private view returns( uint256) { //did not play if (PlayerData[ _player_address].gRND != _gRND || _gRND==0) return( 0 ); GameRoundData_s storage _GameRoundData = GameRoundData[ _gRND ]; uint32 _winner = _GameRoundData.extraData[1]; uint256 _gains = 0; uint256 _treasure = 0; uint256 _sharePrice = _GameRoundData.sharePrice; uint256 _shares; PlayerGameRound_s storage _PlayerGameRound = PlayerGameRound[ _player_address][_gRND]; for(uint i=0;i<4;i++) { _shares = _PlayerGameRound.shares[ i ]; _gains = _gains.add( _shares.mul( _sharePrice) / magnitude ); _treasure = _treasure.add(_shares.mul( _GameRoundData.treasurePerShare[ i ] ) / magnitude); } if (_treasure >= _PlayerGameRound.treasure_payoutsTo) _treasure = _treasure.sub(_PlayerGameRound.treasure_payoutsTo ); else _treasure = 0; _gains = _gains.add(_treasure ); //if the race payment is made (race is over) then we add also the winner prize if (_winner>0 && _GameRoundData.extraData[0] >= (1<<30)) { _shares = _PlayerGameRound.shares[ _winner-1 ]; if (_shares>0) { //from the whole treasure now since new version _treasure = (_GameRoundData.treasureSupply.mul( _sharePrice )) / magnitude; _gains = _gains.add( _treasure.mul( _shares ) / _GameRoundData.sharePots[ _winner-1] ); } } return( _gains ); } //only for the Result Data Screen on the game not used for the payout function get_PendingGainsAll( address _player_address , uint256 _gRND) private view returns( uint256) { //did not play if (PlayerData[ _player_address].gRND != _gRND || _gRND==0) return( 0 ); GameRoundData_s storage _GameRoundData = GameRoundData[ _gRND ]; uint32 _winner = _GameRoundData.extraData[1]; uint256 _gains = 0; uint256 _treasure = 0; uint256 _sharePrice = _GameRoundData.sharePrice; uint256 _shares; PlayerGameRound_s storage _PlayerGameRound = PlayerGameRound[ _player_address][_gRND]; for(uint i=0;i<4;i++) { _shares = _PlayerGameRound.shares[ i ]; _gains = _gains.add( _shares.mul( _sharePrice) / magnitude ); _treasure = _treasure.add(_shares.mul( _GameRoundData.treasurePerShare[ i ] ) / magnitude); } if (_treasure >= _PlayerGameRound.treasure_payoutsTo) _treasure = _treasure.sub(_PlayerGameRound.treasure_payoutsTo ); else _treasure = 0; _gains = _gains.add(_treasure ); if (_winner>0) { _shares = _PlayerGameRound.shares[ _winner-1 ]; if (_shares>0) { //from the whole treasure now since new version _treasure = (_GameRoundData.treasureSupply.mul( _sharePrice )) / magnitude; _gains = _gains.add( _treasure.mul( _shares ) / _GameRoundData.sharePots[ _winner-1] ); } } return( _gains ); } //process streaming HDX20 appreciation and dev fees appreciation function process_sub_Taxes( GameRoundData_s storage _GameRoundData , uint256 minimum) private { uint256 _sharePrice = _GameRoundData.sharePrice; uint256 _potValue = _GameRoundData.allFeeSupply.mul( _sharePrice ) / magnitude; uint256 _appreciation = SafeMath.mul( _potValue , AppreciationFees) / AddedFees; uint256 _dev = SafeMath.mul( _potValue , DevFees) / AddedFees; if (_dev > _GameRoundData.devAppreciationPayout) { _dev -= _GameRoundData.devAppreciationPayout; if (_dev>minimum) { _GameRoundData.devAppreciationPayout = _GameRoundData.devAppreciationPayout.add( _dev ); HDXcontract.buyTokenFromGame.value( _dev )( owner , address(0)); } } if (_appreciation> _GameRoundData.hdx20AppreciationPayout) { _appreciation -= _GameRoundData.hdx20AppreciationPayout; if (_appreciation>minimum) { _GameRoundData.hdx20AppreciationPayout = _GameRoundData.hdx20AppreciationPayout.add( _appreciation ); HDXcontract.appreciateTokenPrice.value( _appreciation )(); } } } //process the fees, hdx20 appreciation, calcul results at the end of the race function process_Taxes( GameRoundData_s storage _GameRoundData ) private { uint32 turnround = _GameRoundData.extraData[0]; if (turnround>0 && turnround<(1<<30)) { _GameRoundData.extraData[0] = turnround | (1<<30); uint256 _sharePrice = _GameRoundData.sharePrice; uint256 _potValue = _GameRoundData.allFeeSupply.mul( _sharePrice ) / magnitude; uint256 _treasure = SafeMath.mul( _potValue , TreasureFees) / AddedFees; genTreasure = genTreasure.add( _treasure ); //take care of any left over process_sub_Taxes( _GameRoundData , 0); } } function BuyShareWithDividends( uint32 perso , uint256 eth , uint32 action, address _referrer_address ) public onlyDirectTransaction { require( maintenanceMode==false && this_gRND>0 && (eth>=minimumSharePrice) && (eth <=100 ether) && perso<=3 && action <=5 && block.number <GameRoundData[ this_gRND ].blockNumberTimeout ); address _customer_address = msg.sender; eth = HDXcontract.payWithToken( eth , _customer_address ); require( eth>0 ); CoreBuyShare( _customer_address , perso , eth , action , _referrer_address ); } function BuyShare( uint32 perso , uint32 action , address _referrer_address ) public payable onlyDirectTransaction { address _customer_address = msg.sender; uint256 eth = msg.value; require( maintenanceMode==false && this_gRND>0 && (eth>=minimumSharePrice) &&(eth <=100 ether) && perso<=3 && action <=5 && block.number <GameRoundData[ this_gRND ].blockNumberTimeout); CoreBuyShare( _customer_address , perso , eth , action , _referrer_address); } /*================================ = CORE BUY FUNCTIONS = ================================*/ function CoreBuyShare( address _player_address , uint32 perso , uint256 eth , uint32 action , address _referrer_address ) private { PlayerGameRound_s storage _PlayerGameRound = PlayerGameRound[ _player_address][ this_gRND]; GameRoundData_s storage _GameRoundData = GameRoundData[ this_gRND ]; if (PlayerData[ _player_address].gRND != this_gRND) { if (PlayerData[_player_address].gRND !=0) { uint256 _gains = get_PendingGains( _player_address , PlayerData[ _player_address].gRND ); PlayerData[ _player_address].chest = PlayerData[ _player_address].chest.add( _gains); } PlayerData[ _player_address ].gRND = this_gRND; } //HDX20BuyFees uint256 _tempo = (eth.mul(HDX20BuyFees)) / 100; _GameRoundData.shareEthBalance = _GameRoundData.shareEthBalance.add( eth-_tempo ); //minus the hdx20 fees uint256 _nb_token = HDXcontract.buyTokenFromGame.value( _tempo )( _player_address , _referrer_address); //keep track for result UI screen how many token bought in this game round _PlayerGameRound.token += uint128(_nb_token); //increase the treasure shares buyTreasureShares(_GameRoundData , (eth.mul(TREASUREBuyFees)) / 100 ); //what is left for the player eth = eth.mul( BUYPercentage) / 100; uint256 _nbshare = (eth.mul( magnitude)) / _GameRoundData.sharePrice; _GameRoundData.shareSupply = _GameRoundData.shareSupply.add( _nbshare ); _GameRoundData.sharePots[ perso ] = _GameRoundData.sharePots[ perso ].add( _nbshare); _tempo = _PlayerGameRound.shares[ perso ]; if (_tempo==0) { _GameRoundData.extraData[ 2+perso ]++; } _PlayerGameRound.shares[ perso ] = _tempo.add( _nbshare); //this will always raise the price after 1 share if (_GameRoundData.shareSupply>magnitude) { _GameRoundData.sharePrice = (_GameRoundData.shareEthBalance.mul( magnitude)) / _GameRoundData.shareSupply; } _PlayerGameRound.treasure_payoutsTo = _PlayerGameRound.treasure_payoutsTo.add( uint128(_nbshare.mul( _GameRoundData.treasurePerShare[ perso ] ) / magnitude) ); //HDX20 streaming appreciation process_sub_Taxes( _GameRoundData , 0.2 ether); uint32 actionValue = ApplyAction( perso , action , _nbshare , _player_address); _GameRoundData.actionValue[ action] = actionValue; emit onBuyShare( _player_address , this_gRND , perso , _nb_token , action, actionValue ); } struct GameVar_s { uint32[4] perso_energy; uint32[4] perso_distance; uint32[4] powerUpShield; uint32[4] powerUpSpeed; uint32 event_type; uint32 event_target; uint32 winner; uint256 this_gRND; uint256 treasureAmountFind; bytes32 seed; uint256 blockNumberTimeout; uint32 turnround; } function actionPowerUpShield( uint32 perso , GameVar_s gamevar) pure private { gamevar.powerUpShield[ perso ] = 100; } function actionPowerUpSpeed( uint32 perso , GameVar_s gamevar) pure private { gamevar.powerUpSpeed[ perso ] = 100; } function actionApple( uint32 perso , GameVar_s gamevar) pure private { gamevar.event_type = 6; //apple / banana etc... gamevar.event_target = 1<<(perso*3); gamevar.perso_energy[ perso ] += 20; if (gamevar.perso_energy[ perso] > 150) gamevar.perso_energy[ perso ] = 150; } function actionBanana( GameVar_s gamevar ) pure private { gamevar.event_type = 6; //apple / banana etc... uint32 result = 2; uint32 target = get_modulo_value(gamevar.seed,18, 4); if (gamevar.winner>0) target = gamevar.winner-1; uint32 shield = uint32(gamevar.powerUpShield[ target ]); if (shield>20) result = 5; //jumping banana else { uint32 dd = 4 * (101 - shield); if (gamevar.perso_distance[ target ]>=dd) gamevar.perso_distance[ target ] -= dd; else gamevar.perso_distance[ target ] = 0; } gamevar.event_target = result<<(target*3); } function getTreasureProbabilityType( bytes32 seed ) private pure returns( uint32 ) { uint8[22] memory this_TreasureProbability =[ 1,1,1,1,1,1,1,1,1,1,1,1, //12 chances to have 10% 2,2,2,2,2,2, //6 chances to have 15% 3,3,3, //3 chances to have 20% 4 //1 chance to have 25% ]; return( this_TreasureProbability[ get_modulo_value(seed,24, 22) ] ); } function distribute_treasure( uint32 type2 , uint32 target , GameVar_s gamevar) private { uint8[5] memory this_TreasureValue =[ 1, 10, 15, 20, 25 ]; //from the whole treasure now since new version uint256 _treasureSupply = GameRoundData[ gamevar.this_gRND].treasureSupply; uint256 _sharePrice = GameRoundData[ gamevar.this_gRND].sharePrice; uint256 _shareSupply = GameRoundData[ gamevar.this_gRND].shareSupply; //how many shares to sell uint256 _amount = _treasureSupply.mul(this_TreasureValue[ type2 ] ) / 100; GameRoundData[ gamevar.this_gRND].treasureSupply = _treasureSupply.sub( _amount ); GameRoundData[ gamevar.this_gRND].shareSupply = _shareSupply.sub( _amount ); //in eth _amount = _amount.mul( _sharePrice ) / magnitude; //price of shares should not change GameRoundData[ gamevar.this_gRND].shareEthBalance = GameRoundData[ gamevar.this_gRND].shareEthBalance.sub( _amount ); gamevar.treasureAmountFind = _amount; GameRoundData[ gamevar.this_gRND].totalTreasureFound = GameRoundData[ gamevar.this_gRND].totalTreasureFound.add( _amount ); uint256 _shares = GameRoundData[ gamevar.this_gRND].sharePots[ target ]; if (_shares>0) { GameRoundData[ gamevar.this_gRND].treasurePerShare[ target ] = GameRoundData[ gamevar.this_gRND].treasurePerShare[ target ].add( uint128(((_amount.mul(magnitude)) / _shares))); } } function actionTreasure( uint32 perso, GameVar_s gamevar ) private { gamevar.event_target = get_modulo_value(gamevar.seed,18, 14); gamevar.event_type = getTreasureProbabilityType( gamevar.seed ); if (gamevar.event_target==perso) { distribute_treasure( gamevar.event_type , gamevar.event_target, gamevar); } } function apply_attack( uint32 perso, uint32 target , GameVar_s gamevar) pure private { for(uint i=0;i<4;i++) { uint32 damage = (1+(target % 3)) * 10; uint32 shield = uint32( gamevar.powerUpShield[i] ); if (damage<= shield || i==perso) damage = 0; else damage -= shield; if (damage<gamevar.perso_energy[i]) gamevar.perso_energy[i] -= damage; else gamevar.perso_energy[i] = 1; //minimum target >>= 2; } } function actionAttack( uint32 perso , GameVar_s gamevar ) pure private { gamevar.event_type = 5; gamevar.event_target = get_modulo_value(gamevar.seed,24,256); //8 bits 4x2 apply_attack( perso , gamevar.event_target , gamevar); } function ApplyAction( uint32 perso , uint32 action , uint256 nbshare , address _player_address) private returns( uint32) { uint32 actionValue = GameRoundData[ this_gRND].actionValue[ action ]; //only the last one is activating within the same block if (block.number<= GameRoundData[ this_gRND].actionBlockNumber[ action]) return( actionValue); GameVar_s memory gamevar; gamevar.turnround = GameRoundData[ this_gRND ].extraData[0]; //now we introduce a new price increase for the items nbshare = nbshare.mul(100*100); nbshare /= (100+(gamevar.turnround/6)); nbshare /= magnitude; nbshare += 10; if (nbshare>5000) nbshare = 5000; actionValue += uint32( nbshare ); uint16[6] memory actionPrice =[ 1000, //apple 4000, //powerup shield 5000, //powerup speed 2000, //chest 1000, //banana action 3000 //attack ]; if (actionValue<actionPrice[action] && gamevar.turnround>0) { return( actionValue ); } if (actionValue>=actionPrice[action]) { GameRoundData[ this_gRND].actionBlockNumber[ action] = block.number; actionValue = 0; } else action = 100; //this is the first action gamevar.turnround++; gamevar.this_gRND = this_gRND; gamevar.winner = GameRoundData[ gamevar.this_gRND].extraData[1]; uint i; for( i=0;i<4;i++) { gamevar.perso_energy[i] = GameRoundData[ gamevar.this_gRND].persoData[i]; gamevar.perso_distance[i] = GameRoundData[ gamevar.this_gRND].persoData[4+i]; gamevar.powerUpSpeed[i] = GameRoundData[ gamevar.this_gRND].powerUpData[i] / 2; gamevar.powerUpShield[i] = GameRoundData[ gamevar.this_gRND].powerUpData[4+i] / 2; } //a little boost for the fist action maker if (gamevar.turnround==1) gamevar.perso_energy[ perso ] += 5; getSeed( gamevar); if (action==0) actionApple( perso , gamevar ); if (action==1) actionPowerUpShield( perso , gamevar); if (action==2) actionPowerUpSpeed( perso , gamevar ); if (action==3) actionTreasure( perso, gamevar); if (action==4) actionBanana( gamevar); if (action==5) actionAttack( perso , gamevar); gamevar.event_type |= (perso<<16); uint32 CurrentWinnerXpos = 0; //gamevar.perso_distance[0]; //this.Racers[n].perso_distance; for( i=0; i<4;i++) { //tiredness gamevar.perso_energy[ i ] *= 95; gamevar.perso_energy[ i ] /= 100; uint32 spd1 = (gamevar.perso_energy[ i ]*10) + (gamevar.powerUpSpeed[ i ]*10); gamevar.perso_distance[ i ] = ( (gamevar.perso_distance[ i ]*95) + (spd1*100) )/100; if (gamevar.perso_distance[i] > CurrentWinnerXpos) { CurrentWinnerXpos = gamevar.perso_distance[i]; gamevar.winner = uint8(i); } GameRoundData[ gamevar.this_gRND].persoData[i] = gamevar.perso_energy[i]; GameRoundData[ gamevar.this_gRND].persoData[4+i] = gamevar.perso_distance[i]; GameRoundData[ gamevar.this_gRND].powerUpData[i] = gamevar.powerUpSpeed[i]; GameRoundData[ gamevar.this_gRND].powerUpData[4+i] = gamevar.powerUpShield[i]; } GameRoundData[ gamevar.this_gRND ].extraData[0] = gamevar.turnround; GameRoundData[ gamevar.this_gRND].extraData[1] = 1+gamevar.winner; gamevar.blockNumberTimeout = block.number + ((24*3600) / blockTimeAverage); GameRoundData[ gamevar.this_gRND].blockNumberTimeout = gamevar.blockNumberTimeout; emitRound( gamevar , _player_address); return( actionValue ); } function emitRound(GameVar_s gamevar , address _player_address) private { emit onNewRound( gamevar.this_gRND, gamevar.turnround, gamevar.event_type, gamevar.event_target, gamevar.perso_energy, gamevar.perso_distance, gamevar.powerUpSpeed, gamevar.powerUpShield, gamevar.blockNumberTimeout, gamevar.treasureAmountFind, _player_address ); } function get_Gains(address _player_address) private view returns( uint256) { uint256 _gains = PlayerData[ _player_address ].chest.add( get_PendingGains( _player_address , PlayerData[ _player_address].gRND ) ); if (_gains > PlayerData[ _player_address].payoutsTo) { _gains -= PlayerData[ _player_address].payoutsTo; } else _gains = 0; return( _gains ); } function WithdrawGains() public isPlayer { address _customer_address = msg.sender; uint256 _gains = get_Gains( _customer_address ); require( _gains>0); PlayerData[ _customer_address ].payoutsTo = PlayerData[ _customer_address ].payoutsTo.add( _gains ); emit onWithdrawGains( _customer_address , _gains , now); _customer_address.transfer( _gains ); } function getSeed(GameVar_s gamevar) private view { uint256 _seed = uint256( blockhash( block.number-1) ); _seed ^= uint256( blockhash( block.number-2) ); _seed ^= uint256(block.coinbase) / now; _seed += gamevar.perso_distance[0]; _seed += gamevar.perso_distance[1]; _seed += gamevar.perso_distance[2]; _seed += gamevar.perso_distance[3]; _seed += gasleft(); gamevar.seed = keccak256(abi.encodePacked( _seed)); } function CloseEntry() public onlyOwner isNotMaintenance { GameRoundData_s storage _GameRoundData = GameRoundData[ this_gRND ]; process_Taxes( _GameRoundData); emit onCloseEntry( this_gRND ); } function get_probability( bytes32 seed , uint32 bytepos , uint32 percentage) pure private returns( bool ) { uint32 v = uint32(seed[bytepos]); if (v<= ((255*percentage)/100)) return( true ); else return( false ); } function get_modulo_value( bytes32 seed , uint32 bytepos, uint32 mod) pure private returns( uint32 ) { return( ((uint32(seed[ bytepos])*256)+(uint32(seed[ bytepos+1]))) % mod); } /*================================ = VIEW AND HELPERS FUNCTIONS = ================================*/ function view_get_Treasure() public view returns(uint256) { return( genTreasure); } function view_get_allFees() public view returns(uint256) { return( (GameRoundData[ this_gRND].allFeeSupply * GameRoundData[ this_gRND].sharePrice) / magnitude); } function view_get_gameData() public view returns( uint256 sharePrice, uint256[4] sharePots, uint256 shareSupply , uint256 shareEthBalance, uint128[4] treasurePerShare, uint32[4] totalPlayers , uint32[6] actionValue , uint256[4] shares , uint256 treasure_payoutsTo ,uint256 treasureSupply ) { address _player_address = msg.sender; sharePrice = GameRoundData[ this_gRND].sharePrice; sharePots = GameRoundData[ this_gRND].sharePots; shareSupply = GameRoundData[ this_gRND].shareSupply; shareEthBalance = GameRoundData[ this_gRND].shareEthBalance; treasurePerShare = GameRoundData[ this_gRND].treasurePerShare; treasureSupply = GameRoundData[ this_gRND].treasureSupply; uint32[4] memory totalPlayersm; totalPlayersm[0] = GameRoundData[ this_gRND].extraData[2]; totalPlayersm[1] = GameRoundData[ this_gRND].extraData[3]; totalPlayersm[2] = GameRoundData[ this_gRND].extraData[4]; totalPlayersm[3] = GameRoundData[ this_gRND].extraData[5]; totalPlayers = totalPlayersm; actionValue = GameRoundData[ this_gRND].actionValue; shares = PlayerGameRound[_player_address][this_gRND].shares; treasure_payoutsTo = PlayerGameRound[_player_address][this_gRND].treasure_payoutsTo; } function view_get_Gains() public view returns( uint256 gains) { address _player_address = msg.sender; uint256 _gains = PlayerData[ _player_address ].chest.add( get_PendingGains( _player_address , PlayerData[ _player_address].gRND) ); if (_gains > PlayerData[ _player_address].payoutsTo) { _gains -= PlayerData[ _player_address].payoutsTo; } else _gains = 0; return( _gains ); } function view_get_gameStates() public view returns(uint8[4] types, uint256 grnd, uint32 turnround, uint256 minimumshare , uint256 blockNumber , uint256 blockNumberTimeout, uint32[6] actionValue , uint32[8] persoData , uint32[8] powerUpData , uint256 blockNumberCurrent , uint256 blockTimeAvg) { return( this_Perso_Type, this_gRND , GameRoundData[ this_gRND].extraData[0] , minimumSharePrice , GameRoundData[ this_gRND].blockNumber,GameRoundData[ this_gRND].blockNumberTimeout, GameRoundData[ this_gRND].actionValue , GameRoundData[ this_gRND].persoData , GameRoundData[ this_gRND].powerUpData, block.number , blockTimeAverage /*, view_get_MyRacer()*/); } function view_get_ResultData() public view returns(uint32 TotalPlayer, uint256 TotalPayout ,uint256 MyTokenValue, uint256 MyToken, uint256 MyGains , uint256 MyTreasureFound ) { address _player_address = msg.sender; GameRoundData_s storage _GameRoundData = GameRoundData[ this_gRND ]; TotalPlayer = _GameRoundData.extraData[2]+_GameRoundData.extraData[3]+_GameRoundData.extraData[4]+_GameRoundData.extraData[5]; TotalPayout = get_TotalPayout( _GameRoundData ); MyToken = PlayerGameRound[ _player_address][ this_gRND].token; MyTokenValue = MyToken * HDXcontract.sellingPrice( true ); MyTokenValue /= magnitude; MyGains = 0; MyTreasureFound = 0; if (PlayerData[ _player_address].gRND == this_gRND) { MyGains = get_PendingGainsAll( _player_address , this_gRND ); //just here for the view function so not used for any payout for(uint i=0;i<4;i++) { MyTreasureFound += PlayerGameRound[_player_address][ this_gRND].shares[ i ].mul( _GameRoundData.treasurePerShare[ i ] ) / magnitude; } if (MyTreasureFound >= PlayerGameRound[_player_address][this_gRND].treasure_payoutsTo) MyTreasureFound = MyTreasureFound.sub( PlayerGameRound[_player_address][this_gRND].treasure_payoutsTo ); else MyTreasureFound = 0; } } function totalEthereumBalance() public view returns(uint256) { return address(this).balance; } function view_get_maintenanceMode() public view returns(bool) { return( maintenanceMode); } function view_get_blockNumbers() public view returns( uint256 b1 , uint256 b2 ) { return( block.number , GameRoundData[ this_gRND ].blockNumberTimeout); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a); return c; } } library SafeMath128 { function mul(uint128 a, uint128 b) internal pure returns (uint128 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b); return c; } function sub(uint128 a, uint128 b) internal pure returns (uint128) { require(b <= a); return a - b; } function add(uint128 a, uint128 b) internal pure returns (uint128 c) { c = a + b; require(c >= a); return c; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"view_get_Treasure","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"view_get_maintenanceMode","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"view_get_gameStates","outputs":[{"name":"types","type":"uint8[4]"},{"name":"grnd","type":"uint256"},{"name":"turnround","type":"uint32"},{"name":"minimumshare","type":"uint256"},{"name":"blockNumber","type":"uint256"},{"name":"blockNumberTimeout","type":"uint256"},{"name":"actionValue","type":"uint32[6]"},{"name":"persoData","type":"uint32[8]"},{"name":"powerUpData","type":"uint32[8]"},{"name":"blockNumberCurrent","type":"uint256"},{"name":"blockTimeAvg","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"p","type":"uint8[4]"}],"name":"initRace","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"CloseEntry","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"blocktimeavg","type":"uint256"}],"name":"changeBlockTimeAverage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"perso","type":"uint32"},{"name":"eth","type":"uint256"},{"name":"action","type":"uint32"},{"name":"_referrer_address","type":"address"}],"name":"BuyShareWithDividends","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"refundMe","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_next","type":"address"}],"name":"changeHDXcontract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalEthereumBalance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"view_get_Gains","outputs":[{"name":"gains","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"view_get_gameData","outputs":[{"name":"sharePrice","type":"uint256"},{"name":"sharePots","type":"uint256[4]"},{"name":"shareSupply","type":"uint256"},{"name":"shareEthBalance","type":"uint256"},{"name":"treasurePerShare","type":"uint128[4]"},{"name":"totalPlayers","type":"uint32[4]"},{"name":"actionValue","type":"uint32[6]"},{"name":"shares","type":"uint256[4]"},{"name":"treasure_payoutsTo","type":"uint256"},{"name":"treasureSupply","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_nextOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"view_get_ResultData","outputs":[{"name":"TotalPlayer","type":"uint32"},{"name":"TotalPayout","type":"uint256"},{"name":"MyTokenValue","type":"uint256"},{"name":"MyToken","type":"uint256"},{"name":"MyGains","type":"uint256"},{"name":"MyTreasureFound","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"view_get_blockNumbers","outputs":[{"name":"b1","type":"uint256"},{"name":"b2","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"WithdrawGains","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"disableMaintenance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"enableMaintenance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"perso","type":"uint32"},{"name":"action","type":"uint32"},{"name":"_referrer_address","type":"address"}],"name":"BuyShare","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"view_get_allFees","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"ChargeTreasure","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"previousOwner","type":"address"},{"indexed":false,"name":"nextOwner","type":"address"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"previous","type":"address"},{"indexed":false,"name":"next","type":"address"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"HDXcontractChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"customerAddress","type":"address"},{"indexed":false,"name":"ethereumWithdrawn","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onWithdrawGains","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"gRND","type":"uint256"},{"indexed":false,"name":"turnRound","type":"uint32"},{"indexed":false,"name":"eventType","type":"uint32"},{"indexed":false,"name":"eventTarget","type":"uint32"},{"indexed":false,"name":"persoEnergy","type":"uint32[4]"},{"indexed":false,"name":"persoDistance","type":"uint32[4]"},{"indexed":false,"name":"powerUpSpeed","type":"uint32[4]"},{"indexed":false,"name":"powerUpShield","type":"uint32[4]"},{"indexed":false,"name":"blockNumberTimeout","type":"uint256"},{"indexed":false,"name":"treasureAmountFind","type":"uint256"},{"indexed":false,"name":"customerAddress","type":"address"}],"name":"onNewRound","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"gRND","type":"uint256"},{"indexed":false,"name":"persoType","type":"uint8[4]"},{"indexed":false,"name":"blockNumber","type":"uint256"}],"name":"onNewRace","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"customerAddress","type":"address"},{"indexed":false,"name":"gRND","type":"uint256"},{"indexed":false,"name":"perso","type":"uint32"},{"indexed":false,"name":"nbToken","type":"uint256"},{"indexed":false,"name":"actionType","type":"uint32"},{"indexed":false,"name":"actionValue","type":"uint32"}],"name":"onBuyShare","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"mode","type":"bool"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onMaintenance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"customerAddress","type":"address"},{"indexed":false,"name":"eth","type":"uint256"},{"indexed":false,"name":"timeStamp","type":"uint256"}],"name":"onRefund","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"gRND","type":"uint256"}],"name":"onCloseEntry","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"blocktimeavg","type":"uint256"}],"name":"onChangeBlockTimeAverage","type":"event"}]
Contract Creation Code
608060405260008054600160a060020a031916738942a5995bd168f347f7ec58f25a54a9a064f8821781556005805460ff191690556006819055600755600f60085534801561004d57600080fd5b5060018054600160a060020a031916331790556000303111156100a657600154604051600160a060020a0390911690303180156108fc02916000818181858888f193505050501580156100a4573d6000803e3d6000fd5b505b613bb680620000b66000396000f3006080604052600436106101275763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630149eea0811461014057806310b7d9ae146101675780631449c321146101905780631e98d3341461029e578063212a6fd3146102e057806332dc04aa146102f5578063342d1c321461030d5780635a9e426b146103415780635b366096146103565780636b2f463214610377578063844d38ee1461038c57806388037e1c146103a15780638da5cb5b146104c1578063a6f9dae1146104f2578063ae5dbd4314610513578063b395f27814610562578063bd679ab214610590578063bdc0ba8e146105a5578063cc0e13e2146105ba578063e8657538146105cf578063ee142686146105f2578063fee1382314610607575b600054600160a060020a0316331461013e57600080fd5b005b34801561014c57600080fd5b5061015561060f565b60408051918252519081900360200190f35b34801561017357600080fd5b5061017c610615565b604080519115158252519081900360200190f35b34801561019c57600080fd5b506101a561061e565b604051808c608080838360005b838110156101ca5781810151838201526020016101b2565b505050509050018b81526020018a63ffffffff1663ffffffff16815260200189815260200188815260200187815260200186600660200280838360005b8381101561021f578181015183820152602001610207565b5050505090500185600860200280838360005b8381101561024a578181015183820152602001610232565b5050505090500184600860200280838360005b8381101561027557818101518382015260200161025d565b505050509050018381526020018281526020019b50505050505050505050505060405180910390f35b3480156102aa57600080fd5b5060408051608081810190925261013e913691600491608491908390819083908290808284375093965061084395505050505050565b3480156102ec57600080fd5b5061013e610a49565b34801561030157600080fd5b5061013e600435610ac6565b34801561031957600080fd5b5061013e63ffffffff6004358116906024359060443516600160a060020a0360643516610b25565b34801561034d57600080fd5b5061013e610c82565b34801561036257600080fd5b5061013e600160a060020a0360043516610e53565b34801561038357600080fd5b50610155610f15565b34801561039857600080fd5b50610155610f1a565b3480156103ad57600080fd5b506103b6610fb9565b6040518a8152602081018a608080838360005b838110156103e15781810151838201526020016103c9565b5050505090500189815260200188815260200187600460200280838360005b83811015610418578181015183820152602001610400565b5050505090500186600460200280838360005b8381101561044357818101518382015260200161042b565b5050505090500185600660200280838360005b8381101561046e578181015183820152602001610456565b5050505090500184600460200280838360005b83811015610499578181015183820152602001610481565b505050509050018381526020018281526020019a505050505050505050505060405180910390f35b3480156104cd57600080fd5b506104d661133d565b60408051600160a060020a039092168252519081900360200190f35b3480156104fe57600080fd5b5061013e600160a060020a036004351661134c565b34801561051f57600080fd5b5061052861140e565b6040805163ffffffff90971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b34801561056e57600080fd5b506105776116e0565b6040805192835260208301919091528051918290030190f35b34801561059c57600080fd5b5061013e6116f9565b3480156105b157600080fd5b5061013e6117f5565b3480156105c657600080fd5b5061013e611889565b61013e63ffffffff60043581169060243516600160a060020a03604435166118f1565b3480156105fe57600080fd5b506101556119a0565b61013e6119cb565b60075490565b60055460ff1690565b610626613a72565b6000806000806000610636613a91565b61063e613ab0565b610646613ab0565b600654600081815260046020526040812090918291600991906019018360088082049290920154600654600090815260046020819052604080832080546001820154975483516080810194859052600790981685026101000a90960463ffffffff169766038d7ea4c680009791969095601884019560168501956017909501944394928e9291908390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116106d157905050506040805160c08101909152939e508892506006915083905082826020028201916000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161072557505060408051610100810191829052959a508994506008935091508390506000855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610781575050604080516101008101918290529599508894506008935091508390506000855b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116107dd579050505050505092509a509a509a509a509a509a509a509a509a509a509a50909192939495969798999a565b600154600090819081908190600160a060020a0316331461086357600080fd5b60055460ff161561087357600080fd5b60068054600101908190556000908152600460205260408120945092505b6004831015610960578483600481106108a657fe5b6020020151600984600481106108b857fe5b602091828204019190066101000a81548160ff021916908360ff160217905550606484601601846008811015156108eb57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055506019846016018460040160088110151561092a57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508280600101935050610891565b4380855563128a180001600185015566038d7ea4c680006002850181905560075490925061098f9085906119dc565b9050670de0b6b3a76400006109aa828463ffffffff611a8a16565b8115156109b357fe5b046007808601829055549091506109d0908263ffffffff611ab616565b6007556006546040518181527f56bb87056d3ab27d1f849434662a0094311af359f66c9c50e1a3a0f2941e34f79190879043906020810183608080838360005b83811015610a28578181015183820152602001610a10565b50505050905001828152602001935050505060405180910390a15050505050565b600154600090600160a060020a03163314610a6357600080fd5b60055460ff1615610a7357600080fd5b506006546000908152600460205260409020610a8e81611acb565b60065460408051918252517f4eb04f9aed2df935e25cbec04051b51a0d2dedf786d3ef9ef4cfcb717ff8115f9181900360200190a150565b600154600160a060020a03163314610add57600080fd5b60008111610aea57600080fd5b60088190556040805182815290517f6c1cf48245a0a91e114596b04dfcbe443303e5f72fab6771794891112fe4395f9181900360200190a150565b6000333214610b3357600080fd5b60055460ff16158015610b4857506000600654115b8015610b5b575066038d7ea4c680008410155b8015610b70575068056bc75e2d631000008411155b8015610b83575060038563ffffffff1611155b8015610b96575060058363ffffffff1611155b8015610bb5575060065460009081526004602052604090206001015443105b1515610bc057600080fd5b5060008054604080517f52dde1c300000000000000000000000000000000000000000000000000000000815260048101879052336024820181905291519193600160a060020a03909316926352dde1c3926044808401936020939083900390910190829087803b158015610c3357600080fd5b505af1158015610c47573d6000803e3d6000fd5b505050506040513d6020811015610c5d57600080fd5b5051935060008411610c6e57600080fd5b610c7b8186868686611b86565b5050505050565b6005546000908190819060ff161515600114610c9d57600080fd5b3392506000600654118015610cca575060065460009081526004602052604081206019015463ffffffff16115b8015610cf55750600654600090815260046020526040902060190154634000000063ffffffff909116105b8015610d1e5750600654600160a060020a03841660009081526002602081905260409091200154145b1515610d2957600080fd5b5060009050805b6004811015610dcb57600654600081815260046020818152604080842060020154600160a060020a03891685526003835281852095855294909152909120610d8d929184908110610d7d57fe5b015484910263ffffffff6120cd16565b600160a060020a038416600090815260036020908152604080832060065484529091528120919350908260048110610dc157fe5b0155600101610d30565b6000821115610e4e57604051600160a060020a0384169083156108fc029084906000818181858888f19350505050158015610e0a573d6000803e3d6000fd5b50604080518381524260208201528151600160a060020a038616927fe139691e7435f1fb40ec50ed3729009226be49087fd00e9e5bac276c2a8f40cf928290030190a25b505050565b600154600160a060020a03163314610e6a57600080fd5b600054600160a060020a0382811691161415610e8557600080fd5b600160a060020a0381161515610e9a57600080fd5b60005460408051600160a060020a03928316815291831660208301524282820152517f87ab77b91a9a6a5a04a748607e0ee38d580963c4e21fe45d2e79ffeef26bc55e9181900360600190a16000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b303190565b336000818152600260208190526040822001549091908290610f6690610f419084906120dd565b600160a060020a0384166000908152600260205260409020549063ffffffff6120cd16565b600160a060020a038316600090815260026020526040902060010154909150811115610faf57600160a060020a0382166000908152600260205260409020600101549003610fb3565b5060005b92915050565b6000610fc3613a72565b600080610fce613a72565b610fd6613a72565b610fde613a91565b610fe6613a72565b6000806000610ff3613a72565b60065460009081526004602081905260409182902060028101548351608081019094529e50339450600301908282826020028201915b8154815260200190600101908083116110295750505050509a506004600060065481526020019081526020016000206008015499506004600060065481526020019081526020016000206007015498506004600060065481526020019081526020016000206014016004806020026040519081016040528092919082600480156110fa576020028201916000905b82829054906101000a90046001608060020a03166001608060020a031681526020019060100190602082600f010492830192600103820291508084116110b75790505b505060065460009081526004602052604090206009810154949c5093965050601990920191506002905060088104919091015460079091166004026101000a900463ffffffff1681600063ffffffff909216602092830291909101526006546000908152600490915260409020601901600360088104919091015460079091166004026101000a900463ffffffff1681600163ffffffff909216602092830291909101526006546000908152600491829052604090206019019060088104919091015460079091166004026101000a900463ffffffff1681600263ffffffff909216602092830291909101526006546000908152600490915260409020601901600560088104919091015460079091166004026101000a900463ffffffff1681600363ffffffff929092166020928302919091015260068054600090815260049092526040808320815160c0810192839052949a508a949360189091019291908390855b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161125e5750505050600160a060020a038516600090815260036020908152604080832060065484529091529081902081516080810192839052949a5092506004915082845b8154815260200190600101908083116112d957505050600160a060020a03909416600090815260036020908152604080832060065484529091529020600401549d9e9c9d9b9c9a9b999a9899979891976001608060020a0316965093945092505050565b600154600160a060020a031681565b600154600160a060020a0316331461136357600080fd5b600154600160a060020a038281169116141561137e57600080fd5b600160a060020a038116151561139357600080fd5b60015460408051600160a060020a03928316815291831660208301524282820152517fc13a1166d81cd3b0b352a367aebab95f3a6f6bc695fdab8e9a9d335239c3861b9181900360600190a16001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6006546000908152600460205260408120601981015468010000000000000000810463ffffffff9081166c01000000000000000000000000830482160170010000000000000000000000000000000083048216017401000000000000000000000000000000000000000090920416019190819081908190819033908261149382612346565b600160a060020a03848116600090815260036020908152604080832060065484528252808320600490810154845483517f1097b9ee0000000000000000000000000000000000000000000000000000000081526001938101939093529251969e5070010000000000000000000000000000000090046001608060020a03169b50931693631097b9ee93602480820194918390030190829087803b15801561153957600080fd5b505af115801561154d573d6000803e3d6000fd5b505050506040513d602081101561156357600080fd5b5051600654600160a060020a038516600090815260026020819052604082200154670de0b6b3a7640000938a02939093049950965086955014156116d5576115ad836006546123f6565b9450600090505b600481101561164e57670de0b6b3a76400006116376014840183600481106115d857fe5b600281049190910154600160a060020a03871660009081526003602090815260408083206006548452909152902060019092166010026101000a90046001608060020a031690846004811061162957fe5b01549063ffffffff611a8a16565b81151561164057fe5b0493909301926001016115b4565b600160a060020a038316600090815260036020908152604080832060065484529091529020600401546001608060020a031684106116d057600160a060020a038316600090815260036020908152604080832060065484529091529020600401546116c99085906001608060020a031663ffffffff611ab616565b93506116d5565b600093505b505050909192939495565b6006546000908152600460205260409020600101544391565b336000908152600260208190526040822001548190151561171957600080fd5b33915061172582612573565b90506000811161173457600080fd5b600160a060020a038216600090815260026020526040902060010154611760908263ffffffff6120cd16565b600160a060020a038316600081815260026020908152604091829020600101939093558051918252918101839052428183015290517f8ea11b70a47e5aaa4024df0985799a384faaaf34e6da0aadbadcae0fbfca45ac9181900360600190a1604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015610e4e573d6000803e3d6000fd5b6117fd613a72565b600154600160a060020a0316331461181457600080fd5b506040805160808101825260008082526001602080840191909152600283850152600360608401526005805460ff1916905583519182524290820152825191927fb04e455982e111d37c1d6ff02f82a465d673bb8931f9595e16b3aaf421001e5692918290030190a161188681610843565b50565b600154600160a060020a031633146118a057600080fd5b6005805460ff1916600117908190556040805160ff929092161515825242602083015280517fb04e455982e111d37c1d6ff02f82a465d673bb8931f9595e16b3aaf421001e569281900390910190a1565b60008033321461190057600080fd5b50506005543390349060ff1615801561191b57506000600654115b801561192e575066038d7ea4c680008110155b8015611943575068056bc75e2d631000008111155b8015611956575060038563ffffffff1611155b8015611969575060058463ffffffff1611155b8015611988575060065460009081526004602052604090206001015443105b151561199357600080fd5b610c7b8286838787611b86565b60065460009081526004602052604090206002810154600a90910154670de0b6b3a764000091020490565b6119d7600754346120cd565b600755565b60008060008460020154611a01670de0b6b3a764000086611a8a90919063ffffffff16565b811515611a0a57fe5b0491506064611a2083603c63ffffffff611a8a16565b811515611a2957fe5b049050611a438186600901546120cd90919063ffffffff16565b6009860155600a850154611a5f9082840363ffffffff6120cd16565b600a8601556008850154611a79908363ffffffff6120cd16565b600895909501949094559392505050565b6000821515611a9b57506000610fb3565b50818102818382811515611aab57fe5b0414610fb357600080fd5b600082821115611ac557600080fd5b50900390565b601981015463ffffffff16600080808084118015611af2575063400000008463ffffffff16105b15610c7b5760198501805463ffffffff19166340000000861763ffffffff908116919091179091556002860154600a870154909450670de0b6b3a764000091611b3e91908690611a8a16565b811515611b4757fe5b0491506028611b5783600a611a8a565b811515611b6057fe5b049050611b78816007546120cd90919063ffffffff16565b600755610c7b85600061260e565b600160a060020a0385166000818152600360209081526040808320600654808552908352818420600484528285209585526002938490529184209092015490939291829182918291829114611c8657600160a060020a038c166000908152600260208190526040909120015415611c6557600160a060020a038c1660009081526002602081905260409091200154611c1f908d906120dd565b600160a060020a038d16600090815260026020526040902054909550611c4b908663ffffffff6120cd16565b600160a060020a038d166000908152600260205260409020555b600654600160a060020a038d16600090815260026020819052604090912001555b6064611c998b600563ffffffff611a8a16565b811515611ca257fe5b049350611cbe848b0387600701546120cd90919063ffffffff16565b6007870155600054604080517fc671b934000000000000000000000000000000000000000000000000000000008152600160a060020a038f811660048301528b811660248301529151919092169163c671b93491879160448082019260209290919082900301818588803b158015611d3557600080fd5b505af1158015611d49573d6000803e3d6000fd5b50505050506040513d6020811015611d6057600080fd5b50516004880180546001608060020a037001000000000000000000000000000000008083048216850182160291161790559250611db9866064611daa8d602863ffffffff611a8a16565b811515611db357fe5b046119dc565b506064611dcd8b602863ffffffff611a8a16565b811515611dd657fe5b60028801549190049a50611df88b670de0b6b3a764000063ffffffff611a8a16565b811515611e0157fe5b049150611e1b8287600801546120cd90919063ffffffff16565b6008870155611e47826003880163ffffffff8e1660048110611e3957fe5b01549063ffffffff6120cd16565b6003870163ffffffff8d1660048110611e5c57fe5b01558663ffffffff8c1660048110611e7057fe5b01549350831515611ec6576019860163ffffffff60028d011660068110611e9357fe5b6008810491909101805460079092166004026101000a63ffffffff81810219841693829004811660010116029190911790555b611ed6848363ffffffff6120cd16565b8763ffffffff8d1660048110611ee857fe5b01556008860154670de0b6b3a76400001015611f305760088601546007870154611f2090670de0b6b3a764000063ffffffff611a8a16565b811515611f2957fe5b0460028701555b611f9e670de0b6b3a7640000611f796014890163ffffffff8f1660048110611f5457fe5b60028104919091015486916001166010026101000a90046001608060020a0316611a8a565b811515611f8257fe5b60048a01546001608060020a031691900463ffffffff61280416565b6004880180546fffffffffffffffffffffffffffffffff19166001608060020a0392909216919091179055611fdb866702c68af0bb14000061260e565b611fe78b8a848f612820565b9050806018870163ffffffff8b1660068110611fff57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055507f12ca57ddb41cb2f73bbe08965d3d608bb3c1947bc95672ef54022490f55360218c6006548d868d866040518087600160a060020a0316600160a060020a031681526020018681526020018563ffffffff1663ffffffff1681526020018481526020018363ffffffff1663ffffffff1681526020018263ffffffff1663ffffffff168152602001965050505050505060405180910390a1505050505050505050505050565b81810182811015610fb357600080fd5b600080600080600080600080600089600260008d600160a060020a0316600160a060020a0316815260200190815260200160002060020154141580612120575089155b1561212e5760009850612338565b5050600088815260046020908152604080832060198101546002820154600160a060020a038f168652600385528386208e875290945291842090995064010000000090910463ffffffff1697509195508594509250835b60048110156122395781816004811061219a57fe5b015492506121d2670de0b6b3a76400006121ba858763ffffffff611a8a16565b8115156121c357fe5b8891900463ffffffff6120cd16565b955061222f670de0b6b3a764000061221760148b0184600481106121f257fe5b60028104919091015487916001166010026101000a90046001608060020a0316611a8a565b81151561222057fe5b8791900463ffffffff6120cd16565b9450600101612185565b60048201546001608060020a0316851061227357600482015461226c9086906001608060020a031663ffffffff611ab616565b9450612278565b600094505b612288868663ffffffff6120cd16565b955060008763ffffffff161180156122b057506019880154634000000063ffffffff90911610155b15612334578163ffffffff600019890116600481106122cb57fe5b015492506000831115612334576009880154670de0b6b3a7640000906122f7908663ffffffff611a8a16565b81151561230057fe5b0494506123316003890163ffffffff6000198a01166004811061231f57fe5b01546121ba878663ffffffff611a8a16565b95505b8598505b505050505050505092915050565b600281015460009081908180805b60048310156123995760038701836004811061236c57fe5b0154915061238c670de0b6b3a7640000612217848763ffffffff611a8a16565b9450600190920191612354565b6009870154670de0b6b3a7640000906123b8908663ffffffff611a8a16565b8115156123c157fe5b0490506123eb87600d01546123df83886120cd90919063ffffffff16565b9063ffffffff6120cd16565b979650505050505050565b600080600080600080600080600089600260008d600160a060020a0316600160a060020a0316815260200190815260200160002060020154141580612439575089155b156124475760009850612338565b5050600088815260046020908152604080832060198101546002820154600160a060020a038f168652600385528386208e875290945291842090995064010000000090910463ffffffff1697509195508594509250835b60048110156124fd578181600481106124b357fe5b015492506124d3670de0b6b3a76400006121ba858763ffffffff611a8a16565b95506124f3670de0b6b3a764000061221760148b0184600481106121f257fe5b945060010161249e565b60048201546001608060020a031685106125375760048201546125309086906001608060020a031663ffffffff611ab616565b945061253c565b600094505b61254c868663ffffffff6120cd16565b955060008763ffffffff161115612334578163ffffffff600019890116600481106122cb57fe5b600160a060020a03811660009081526002602081905260408220015481906125c5906125a09085906120dd565b600160a060020a0385166000908152600260205260409020549063ffffffff6120cd16565b600160a060020a038416600090815260026020526040902060010154909150811115610faf57600160a060020a0383166000908152600260205260409020600101549003610fb3565b6002820154600a83015460009081908190670de0b6b3a764000090612639908663ffffffff611a8a16565b81151561264257fe5b0492506028612652846019611a8a565b81151561265b57fe5b049150602861266b846005611a8a565b81151561267457fe5b04905085600c015481111561274d57600c86015490038481111561274d57600c8601546126a7908263ffffffff6120cd16565b600c87015560008054600154604080517fc671b934000000000000000000000000000000000000000000000000000000008152600160a060020a03928316600482015260248101949094525191169163c671b93491849160448082019260209290919082900301818588803b15801561271f57600080fd5b505af1158015612733573d6000803e3d6000fd5b50505050506040513d602081101561274a57600080fd5b50505b85600b01548211156127fc5785600b015482039150848211156127fc57600b86015461277f908363ffffffff6120cd16565b600b87015560008054604080517f16ff1c760000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216926316ff1c76928692600480820193929182900301818588803b1580156127e257600080fd5b505af11580156127f6573d6000803e3d6000fd5b50505050505b505050505050565b8181016001608060020a038084169082161015610fb357600080fd5b60008061282b613ad0565b612833613a91565b60008060006004600060065481526020019081526020016000206018018a63ffffffff1660068110151561286357fe5b600891828204019190066004029054906101000a900463ffffffff169550600460006006548152602001908152602001600020600e018a63ffffffff166006811015156128ac57fe5b015443116128bc578596506130a5565b60065460009081526004602052604090206019015463ffffffff9081166101608701526128ef908a9061271090611a8a16565b61016086015190995060069063ffffffff160460640163ffffffff168981151561291557fe5b049850670de0b6b3a76400008904600a0198506113888911156129385761138898505b6040805160c0810182526103e8808252610fa06020830152611388928201929092526107d060608201526080810191909152610bb860a08201529589019593508363ffffffff8b166006811061298a57fe5b602002015161ffff168663ffffffff161080156129b25750600085610160015163ffffffff16115b156129bf578596506130a5565b8363ffffffff8b16600681106129d157fe5b602002015161ffff1663ffffffff871610612a1d5743600460006006548152602001908152602001600020600e018b63ffffffff16600681101515612a1257fe5b015560009550612a22565b606499505b6101608501805160010163ffffffff90811690915260065460e08701819052600090815260046020526040812060190154640100000000900490911660c087015292505b6004831015612c2a5760e085015160009081526004602052604090206016018360088110612a9057fe5b600891828204019190066004029054906101000a900463ffffffff16856000015184600481101515612abe57fe5b63ffffffff9092166020928302919091015260e086015160009081526004918290526040902060160190840160088110612af457fe5b600891828204019190066004029054906101000a900463ffffffff16856020015184600481101515612b2257fe5b63ffffffff9092166020928302919091015260e086015160009081526004909152604090206002906017018460088110612b5857fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff16811515612b8357fe5b04856060015184600481101515612b9657fe5b63ffffffff9092166020928302919091015260e0860151600090815260049182905260409020600291601790910190850160088110612bd157fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff16811515612bfc57fe5b04856040015184600481101515612c0f57fe5b63ffffffff9092166020929092020152600190920191612a66565b84610160015163ffffffff1660011415612c6757845160059063ffffffff8d1660048110612c5457fe5b6020020180519190910163ffffffff1690525b612c70856130b3565b63ffffffff8a161515612c8757612c878b86613195565b8963ffffffff1660011415612ca057612ca08b86613220565b8963ffffffff1660021415612cb957612cb98b86613239565b8963ffffffff1660031415612cd257612cd28b86613252565b8963ffffffff1660041415612cea57612cea856132ae565b8963ffffffff1660051415612d0357612d038b866133d8565b60808501805163ffffffff8d81166201000002909117169052600092508291505b6004831015613001578451605f908460048110612d3d57fe5b6020020180519190910263ffffffff16905284516064908460048110612d5f57fe5b6020020181815163ffffffff16811515612d7557fe5b0463ffffffff1690525060608501518360048110612d8f57fe5b60200201518551600a909102908460048110612da757fe5b6020020151600a02019050606481606402866020015185600481101515612dca57fe5b6020020151605f020163ffffffff16811515612de257fe5b04856020015184600481101515612df557fe5b602002019063ffffffff16908163ffffffff16815250508163ffffffff16856020015184600481101515612e2557fe5b602002015163ffffffff161115612e575760208501518360048110612e4657fe5b602002015160ff841660c087015291505b84518360048110612e6457fe5b6020020151600460008760e00151815260200190815260200160002060160184600881101515612e9057fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846020015183600481101515612ecb57fe5b6020020151600460008760e00151815260200190815260200160002060160184600401600881101515612efa57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846060015183600481101515612f3557fe5b6020020151600460008760e00151815260200190815260200160002060170184600881101515612f6157fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846040015183600481101515612f9c57fe5b6020020151600460008760e00151815260200190815260200160002060170184600401600881101515612fcb57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508280600101935050612d24565b61016085015160e0860180516000908152600460205260408082206019908101805463ffffffff96871663ffffffff1990911617905560c08a01519351835291200180546001929092019092166401000000000267ffffffff00000000199091161790556008546201518081151561307557fe5b044301610140860181905260e08601516000908152600460205260409020600101556130a1858961340c565b8596505b505050505050949350505050565b6001194390810140600019909101401842418115156130ce57fe5b602084810151805191810151604082015160609092015163ffffffff90811691811695909404959095189183169190910192909201911601015a8101905080604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b6020831061315b5780518252601f19909201916020918201910161313c565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120610120959095019490945250505050565b6006608082015263ffffffff60038302811660020a811660a083015281516014918416600481106131c257fe5b60200201805163ffffffff92018216905281516096918416600481106131e457fe5b602002015163ffffffff16111561321c57805160969063ffffffff84166004811061320b57fe5b63ffffffff90921660209290920201525b5050565b604081015160649063ffffffff84166004811061320b57fe5b606081015160649063ffffffff84166004811061320b57fe5b6132648161012001516012600e61358c565b63ffffffff1660a082015261012081015161327e906135f4565b63ffffffff908116608083015260a08201518116908316141561321c5761321c81608001518260a00151836136dd565b60066080820152610120810151600290600090819081906132d2906012600461358c565b925060008560c0015163ffffffff1611156132f25760018560c001510392505b604085015163ffffffff84166004811061330857fe5b6020020151915060148263ffffffff16111561332757600593506133b8565b8160650360040290508063ffffffff1685602001518463ffffffff1660048110151561334f57fe5b602002015163ffffffff161061338e576020850151819063ffffffff85166004811061337757fe5b6020020180519190910363ffffffff1690526133b8565b602085015160009063ffffffff8516600481106133a757fe5b63ffffffff90921660209290920201525b505063ffffffff918216600391909102821660020a021660a09190910152565b600560808201526101208101516133f390601861010061358c565b63ffffffff1660a0820181905261321c90839083613981565b7f5a250066b073a4ff8db1911b1f4467cf987e161fd19daa3dfa3f4c7518d81b638260e0015183610160015184608001518560a0015186600001518760200151886060015189604001518a61014001518b61010001518b604051808c81526020018b63ffffffff1663ffffffff1681526020018a63ffffffff1663ffffffff1681526020018963ffffffff1663ffffffff16815260200188600460200280838360005b838110156134c75781810151838201526020016134af565b5050505090500187600460200280838360005b838110156134f25781810151838201526020016134da565b5050505090500186600460200280838360005b8381101561351d578181015183820152602001613505565b5050505090500185600460200280838360005b83811015613548578181015183820152602001613530565b5050505090500184815260200183815260200182600160a060020a0316600160a060020a031681526020019b50505050505050505050505060405180910390a15050565b60008163ffffffff16848460010163ffffffff166020811015156135ac57fe5b60f860020a91901a8102048563ffffffff8616602081106135c957fe5b1a60f860020a0260f860020a9004610100020163ffffffff168115156135eb57fe5b06949350505050565b60006135fe613b4b565b50604080516102c081018252600180825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810191909152600261018082018190526101a082018190526101c082018190526101e08201819052610200820181905261022082015260036102408201819052610260820181905261028082015260046102a0820152806136be846018601661358c565b63ffffffff16601681106136ce57fe5b602002015160ff169392505050565b6136e5613b6b565b506040805160a08101825260018152600a602080830191909152600f82840152601460608301526019608083015260e08401805160009081526004909252838220600901548151835284832060020154915183529382206008015492939290918060646137728763ffffffff8c166005811061375d57fe5b6020020151879060ff1663ffffffff611a8a16565b81151561377b57fe5b04915061378e858363ffffffff611ab616565b60e08801516000908152600460205260409020600901556137b5838363ffffffff611ab616565b60e0880151600090815260046020526040902060080155670de0b6b3a76400006137e5838663ffffffff611a8a16565b8115156137ee57fe5b60e0890151600090815260046020526040902060070154919004925061381a908363ffffffff611ab616565b60e0880180516000908152600460208181526040808420600701959095556101008c018790529251825290915220600d015461385c908363ffffffff6120cd16565b60e0880180516000908152600460208190526040808320600d019490945591518152919091206003019063ffffffff8a1690811061389657fe5b0154905060008111156139765761391c816138bf84670de0b6b3a764000063ffffffff611a8a16565b8115156138c857fe5b04600460008a60e0015181526020019081526020016000206014018a63ffffffff166004811015156138f657fe5b60028104919091015460019091166010026101000a90046001608060020a031690612804565b60e088015160009081526004602081905260409091206014019063ffffffff8b1690811061394657fe5b600291828204019190066010026101000a8154816001608060020a0302191690836001608060020a031602179055505b505050505050505050565b600080805b60048310156127fc576040840151600a6001600363ffffffff8916060102925083600481106139b157fe5b602002015190508063ffffffff168263ffffffff161115806139d857508563ffffffff1683145b156139e657600091506139ec565b80820391505b835183600481106139f957fe5b602002015163ffffffff168263ffffffff161015613a3757835182908460048110613a2057fe5b6020020180519190910363ffffffff169052613a58565b83516001908460048110613a4757fe5b63ffffffff90921660209290920201525b600463ffffffff9095169490940493600190920191613986565b6080604051908101604052806004906020820280388339509192915050565b60c0604051908101604052806006906020820280388339509192915050565b610100604051908101604052806008906020820280388339509192915050565b61030060405190810160405280613ae5613a72565b8152602001613af2613a72565b8152602001613aff613a72565b8152602001613b0c613a72565b815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101009091015290565b6102c0604051908101604052806016906020820280388339509192915050565b60a06040519081016040528060059060208202803883395091929150505600a165627a7a723058200a3f7e0d78e2dc9e106361c06668727f9b354baa9c91352f455a0b3aa7d6e23f0029
Deployed Bytecode
0x6080604052600436106101275763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630149eea0811461014057806310b7d9ae146101675780631449c321146101905780631e98d3341461029e578063212a6fd3146102e057806332dc04aa146102f5578063342d1c321461030d5780635a9e426b146103415780635b366096146103565780636b2f463214610377578063844d38ee1461038c57806388037e1c146103a15780638da5cb5b146104c1578063a6f9dae1146104f2578063ae5dbd4314610513578063b395f27814610562578063bd679ab214610590578063bdc0ba8e146105a5578063cc0e13e2146105ba578063e8657538146105cf578063ee142686146105f2578063fee1382314610607575b600054600160a060020a0316331461013e57600080fd5b005b34801561014c57600080fd5b5061015561060f565b60408051918252519081900360200190f35b34801561017357600080fd5b5061017c610615565b604080519115158252519081900360200190f35b34801561019c57600080fd5b506101a561061e565b604051808c608080838360005b838110156101ca5781810151838201526020016101b2565b505050509050018b81526020018a63ffffffff1663ffffffff16815260200189815260200188815260200187815260200186600660200280838360005b8381101561021f578181015183820152602001610207565b5050505090500185600860200280838360005b8381101561024a578181015183820152602001610232565b5050505090500184600860200280838360005b8381101561027557818101518382015260200161025d565b505050509050018381526020018281526020019b50505050505050505050505060405180910390f35b3480156102aa57600080fd5b5060408051608081810190925261013e913691600491608491908390819083908290808284375093965061084395505050505050565b3480156102ec57600080fd5b5061013e610a49565b34801561030157600080fd5b5061013e600435610ac6565b34801561031957600080fd5b5061013e63ffffffff6004358116906024359060443516600160a060020a0360643516610b25565b34801561034d57600080fd5b5061013e610c82565b34801561036257600080fd5b5061013e600160a060020a0360043516610e53565b34801561038357600080fd5b50610155610f15565b34801561039857600080fd5b50610155610f1a565b3480156103ad57600080fd5b506103b6610fb9565b6040518a8152602081018a608080838360005b838110156103e15781810151838201526020016103c9565b5050505090500189815260200188815260200187600460200280838360005b83811015610418578181015183820152602001610400565b5050505090500186600460200280838360005b8381101561044357818101518382015260200161042b565b5050505090500185600660200280838360005b8381101561046e578181015183820152602001610456565b5050505090500184600460200280838360005b83811015610499578181015183820152602001610481565b505050509050018381526020018281526020019a505050505050505050505060405180910390f35b3480156104cd57600080fd5b506104d661133d565b60408051600160a060020a039092168252519081900360200190f35b3480156104fe57600080fd5b5061013e600160a060020a036004351661134c565b34801561051f57600080fd5b5061052861140e565b6040805163ffffffff90971687526020870195909552858501939093526060850191909152608084015260a0830152519081900360c00190f35b34801561056e57600080fd5b506105776116e0565b6040805192835260208301919091528051918290030190f35b34801561059c57600080fd5b5061013e6116f9565b3480156105b157600080fd5b5061013e6117f5565b3480156105c657600080fd5b5061013e611889565b61013e63ffffffff60043581169060243516600160a060020a03604435166118f1565b3480156105fe57600080fd5b506101556119a0565b61013e6119cb565b60075490565b60055460ff1690565b610626613a72565b6000806000806000610636613a91565b61063e613ab0565b610646613ab0565b600654600081815260046020526040812090918291600991906019018360088082049290920154600654600090815260046020819052604080832080546001820154975483516080810194859052600790981685026101000a90960463ffffffff169766038d7ea4c680009791969095601884019560168501956017909501944394928e9291908390855b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116106d157905050506040805160c08101909152939e508892506006915083905082826020028201916000905b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161072557505060408051610100810191829052959a508994506008935091508390506000855b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610781575050604080516101008101918290529599508894506008935091508390506000855b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116107dd579050505050505092509a509a509a509a509a509a509a509a509a509a509a50909192939495969798999a565b600154600090819081908190600160a060020a0316331461086357600080fd5b60055460ff161561087357600080fd5b60068054600101908190556000908152600460205260408120945092505b6004831015610960578483600481106108a657fe5b6020020151600984600481106108b857fe5b602091828204019190066101000a81548160ff021916908360ff160217905550606484601601846008811015156108eb57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055506019846016018460040160088110151561092a57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508280600101935050610891565b4380855563128a180001600185015566038d7ea4c680006002850181905560075490925061098f9085906119dc565b9050670de0b6b3a76400006109aa828463ffffffff611a8a16565b8115156109b357fe5b046007808601829055549091506109d0908263ffffffff611ab616565b6007556006546040518181527f56bb87056d3ab27d1f849434662a0094311af359f66c9c50e1a3a0f2941e34f79190879043906020810183608080838360005b83811015610a28578181015183820152602001610a10565b50505050905001828152602001935050505060405180910390a15050505050565b600154600090600160a060020a03163314610a6357600080fd5b60055460ff1615610a7357600080fd5b506006546000908152600460205260409020610a8e81611acb565b60065460408051918252517f4eb04f9aed2df935e25cbec04051b51a0d2dedf786d3ef9ef4cfcb717ff8115f9181900360200190a150565b600154600160a060020a03163314610add57600080fd5b60008111610aea57600080fd5b60088190556040805182815290517f6c1cf48245a0a91e114596b04dfcbe443303e5f72fab6771794891112fe4395f9181900360200190a150565b6000333214610b3357600080fd5b60055460ff16158015610b4857506000600654115b8015610b5b575066038d7ea4c680008410155b8015610b70575068056bc75e2d631000008411155b8015610b83575060038563ffffffff1611155b8015610b96575060058363ffffffff1611155b8015610bb5575060065460009081526004602052604090206001015443105b1515610bc057600080fd5b5060008054604080517f52dde1c300000000000000000000000000000000000000000000000000000000815260048101879052336024820181905291519193600160a060020a03909316926352dde1c3926044808401936020939083900390910190829087803b158015610c3357600080fd5b505af1158015610c47573d6000803e3d6000fd5b505050506040513d6020811015610c5d57600080fd5b5051935060008411610c6e57600080fd5b610c7b8186868686611b86565b5050505050565b6005546000908190819060ff161515600114610c9d57600080fd5b3392506000600654118015610cca575060065460009081526004602052604081206019015463ffffffff16115b8015610cf55750600654600090815260046020526040902060190154634000000063ffffffff909116105b8015610d1e5750600654600160a060020a03841660009081526002602081905260409091200154145b1515610d2957600080fd5b5060009050805b6004811015610dcb57600654600081815260046020818152604080842060020154600160a060020a03891685526003835281852095855294909152909120610d8d929184908110610d7d57fe5b015484910263ffffffff6120cd16565b600160a060020a038416600090815260036020908152604080832060065484529091528120919350908260048110610dc157fe5b0155600101610d30565b6000821115610e4e57604051600160a060020a0384169083156108fc029084906000818181858888f19350505050158015610e0a573d6000803e3d6000fd5b50604080518381524260208201528151600160a060020a038616927fe139691e7435f1fb40ec50ed3729009226be49087fd00e9e5bac276c2a8f40cf928290030190a25b505050565b600154600160a060020a03163314610e6a57600080fd5b600054600160a060020a0382811691161415610e8557600080fd5b600160a060020a0381161515610e9a57600080fd5b60005460408051600160a060020a03928316815291831660208301524282820152517f87ab77b91a9a6a5a04a748607e0ee38d580963c4e21fe45d2e79ffeef26bc55e9181900360600190a16000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b303190565b336000818152600260208190526040822001549091908290610f6690610f419084906120dd565b600160a060020a0384166000908152600260205260409020549063ffffffff6120cd16565b600160a060020a038316600090815260026020526040902060010154909150811115610faf57600160a060020a0382166000908152600260205260409020600101549003610fb3565b5060005b92915050565b6000610fc3613a72565b600080610fce613a72565b610fd6613a72565b610fde613a91565b610fe6613a72565b6000806000610ff3613a72565b60065460009081526004602081905260409182902060028101548351608081019094529e50339450600301908282826020028201915b8154815260200190600101908083116110295750505050509a506004600060065481526020019081526020016000206008015499506004600060065481526020019081526020016000206007015498506004600060065481526020019081526020016000206014016004806020026040519081016040528092919082600480156110fa576020028201916000905b82829054906101000a90046001608060020a03166001608060020a031681526020019060100190602082600f010492830192600103820291508084116110b75790505b505060065460009081526004602052604090206009810154949c5093965050601990920191506002905060088104919091015460079091166004026101000a900463ffffffff1681600063ffffffff909216602092830291909101526006546000908152600490915260409020601901600360088104919091015460079091166004026101000a900463ffffffff1681600163ffffffff909216602092830291909101526006546000908152600491829052604090206019019060088104919091015460079091166004026101000a900463ffffffff1681600263ffffffff909216602092830291909101526006546000908152600490915260409020601901600560088104919091015460079091166004026101000a900463ffffffff1681600363ffffffff929092166020928302919091015260068054600090815260049092526040808320815160c0810192839052949a508a949360189091019291908390855b82829054906101000a900463ffffffff1663ffffffff168152602001906004019060208260030104928301926001038202915080841161125e5750505050600160a060020a038516600090815260036020908152604080832060065484529091529081902081516080810192839052949a5092506004915082845b8154815260200190600101908083116112d957505050600160a060020a03909416600090815260036020908152604080832060065484529091529020600401549d9e9c9d9b9c9a9b999a9899979891976001608060020a0316965093945092505050565b600154600160a060020a031681565b600154600160a060020a0316331461136357600080fd5b600154600160a060020a038281169116141561137e57600080fd5b600160a060020a038116151561139357600080fd5b60015460408051600160a060020a03928316815291831660208301524282820152517fc13a1166d81cd3b0b352a367aebab95f3a6f6bc695fdab8e9a9d335239c3861b9181900360600190a16001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6006546000908152600460205260408120601981015468010000000000000000810463ffffffff9081166c01000000000000000000000000830482160170010000000000000000000000000000000083048216017401000000000000000000000000000000000000000090920416019190819081908190819033908261149382612346565b600160a060020a03848116600090815260036020908152604080832060065484528252808320600490810154845483517f1097b9ee0000000000000000000000000000000000000000000000000000000081526001938101939093529251969e5070010000000000000000000000000000000090046001608060020a03169b50931693631097b9ee93602480820194918390030190829087803b15801561153957600080fd5b505af115801561154d573d6000803e3d6000fd5b505050506040513d602081101561156357600080fd5b5051600654600160a060020a038516600090815260026020819052604082200154670de0b6b3a7640000938a02939093049950965086955014156116d5576115ad836006546123f6565b9450600090505b600481101561164e57670de0b6b3a76400006116376014840183600481106115d857fe5b600281049190910154600160a060020a03871660009081526003602090815260408083206006548452909152902060019092166010026101000a90046001608060020a031690846004811061162957fe5b01549063ffffffff611a8a16565b81151561164057fe5b0493909301926001016115b4565b600160a060020a038316600090815260036020908152604080832060065484529091529020600401546001608060020a031684106116d057600160a060020a038316600090815260036020908152604080832060065484529091529020600401546116c99085906001608060020a031663ffffffff611ab616565b93506116d5565b600093505b505050909192939495565b6006546000908152600460205260409020600101544391565b336000908152600260208190526040822001548190151561171957600080fd5b33915061172582612573565b90506000811161173457600080fd5b600160a060020a038216600090815260026020526040902060010154611760908263ffffffff6120cd16565b600160a060020a038316600081815260026020908152604091829020600101939093558051918252918101839052428183015290517f8ea11b70a47e5aaa4024df0985799a384faaaf34e6da0aadbadcae0fbfca45ac9181900360600190a1604051600160a060020a0383169082156108fc029083906000818181858888f19350505050158015610e4e573d6000803e3d6000fd5b6117fd613a72565b600154600160a060020a0316331461181457600080fd5b506040805160808101825260008082526001602080840191909152600283850152600360608401526005805460ff1916905583519182524290820152825191927fb04e455982e111d37c1d6ff02f82a465d673bb8931f9595e16b3aaf421001e5692918290030190a161188681610843565b50565b600154600160a060020a031633146118a057600080fd5b6005805460ff1916600117908190556040805160ff929092161515825242602083015280517fb04e455982e111d37c1d6ff02f82a465d673bb8931f9595e16b3aaf421001e569281900390910190a1565b60008033321461190057600080fd5b50506005543390349060ff1615801561191b57506000600654115b801561192e575066038d7ea4c680008110155b8015611943575068056bc75e2d631000008111155b8015611956575060038563ffffffff1611155b8015611969575060058463ffffffff1611155b8015611988575060065460009081526004602052604090206001015443105b151561199357600080fd5b610c7b8286838787611b86565b60065460009081526004602052604090206002810154600a90910154670de0b6b3a764000091020490565b6119d7600754346120cd565b600755565b60008060008460020154611a01670de0b6b3a764000086611a8a90919063ffffffff16565b811515611a0a57fe5b0491506064611a2083603c63ffffffff611a8a16565b811515611a2957fe5b049050611a438186600901546120cd90919063ffffffff16565b6009860155600a850154611a5f9082840363ffffffff6120cd16565b600a8601556008850154611a79908363ffffffff6120cd16565b600895909501949094559392505050565b6000821515611a9b57506000610fb3565b50818102818382811515611aab57fe5b0414610fb357600080fd5b600082821115611ac557600080fd5b50900390565b601981015463ffffffff16600080808084118015611af2575063400000008463ffffffff16105b15610c7b5760198501805463ffffffff19166340000000861763ffffffff908116919091179091556002860154600a870154909450670de0b6b3a764000091611b3e91908690611a8a16565b811515611b4757fe5b0491506028611b5783600a611a8a565b811515611b6057fe5b049050611b78816007546120cd90919063ffffffff16565b600755610c7b85600061260e565b600160a060020a0385166000818152600360209081526040808320600654808552908352818420600484528285209585526002938490529184209092015490939291829182918291829114611c8657600160a060020a038c166000908152600260208190526040909120015415611c6557600160a060020a038c1660009081526002602081905260409091200154611c1f908d906120dd565b600160a060020a038d16600090815260026020526040902054909550611c4b908663ffffffff6120cd16565b600160a060020a038d166000908152600260205260409020555b600654600160a060020a038d16600090815260026020819052604090912001555b6064611c998b600563ffffffff611a8a16565b811515611ca257fe5b049350611cbe848b0387600701546120cd90919063ffffffff16565b6007870155600054604080517fc671b934000000000000000000000000000000000000000000000000000000008152600160a060020a038f811660048301528b811660248301529151919092169163c671b93491879160448082019260209290919082900301818588803b158015611d3557600080fd5b505af1158015611d49573d6000803e3d6000fd5b50505050506040513d6020811015611d6057600080fd5b50516004880180546001608060020a037001000000000000000000000000000000008083048216850182160291161790559250611db9866064611daa8d602863ffffffff611a8a16565b811515611db357fe5b046119dc565b506064611dcd8b602863ffffffff611a8a16565b811515611dd657fe5b60028801549190049a50611df88b670de0b6b3a764000063ffffffff611a8a16565b811515611e0157fe5b049150611e1b8287600801546120cd90919063ffffffff16565b6008870155611e47826003880163ffffffff8e1660048110611e3957fe5b01549063ffffffff6120cd16565b6003870163ffffffff8d1660048110611e5c57fe5b01558663ffffffff8c1660048110611e7057fe5b01549350831515611ec6576019860163ffffffff60028d011660068110611e9357fe5b6008810491909101805460079092166004026101000a63ffffffff81810219841693829004811660010116029190911790555b611ed6848363ffffffff6120cd16565b8763ffffffff8d1660048110611ee857fe5b01556008860154670de0b6b3a76400001015611f305760088601546007870154611f2090670de0b6b3a764000063ffffffff611a8a16565b811515611f2957fe5b0460028701555b611f9e670de0b6b3a7640000611f796014890163ffffffff8f1660048110611f5457fe5b60028104919091015486916001166010026101000a90046001608060020a0316611a8a565b811515611f8257fe5b60048a01546001608060020a031691900463ffffffff61280416565b6004880180546fffffffffffffffffffffffffffffffff19166001608060020a0392909216919091179055611fdb866702c68af0bb14000061260e565b611fe78b8a848f612820565b9050806018870163ffffffff8b1660068110611fff57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055507f12ca57ddb41cb2f73bbe08965d3d608bb3c1947bc95672ef54022490f55360218c6006548d868d866040518087600160a060020a0316600160a060020a031681526020018681526020018563ffffffff1663ffffffff1681526020018481526020018363ffffffff1663ffffffff1681526020018263ffffffff1663ffffffff168152602001965050505050505060405180910390a1505050505050505050505050565b81810182811015610fb357600080fd5b600080600080600080600080600089600260008d600160a060020a0316600160a060020a0316815260200190815260200160002060020154141580612120575089155b1561212e5760009850612338565b5050600088815260046020908152604080832060198101546002820154600160a060020a038f168652600385528386208e875290945291842090995064010000000090910463ffffffff1697509195508594509250835b60048110156122395781816004811061219a57fe5b015492506121d2670de0b6b3a76400006121ba858763ffffffff611a8a16565b8115156121c357fe5b8891900463ffffffff6120cd16565b955061222f670de0b6b3a764000061221760148b0184600481106121f257fe5b60028104919091015487916001166010026101000a90046001608060020a0316611a8a565b81151561222057fe5b8791900463ffffffff6120cd16565b9450600101612185565b60048201546001608060020a0316851061227357600482015461226c9086906001608060020a031663ffffffff611ab616565b9450612278565b600094505b612288868663ffffffff6120cd16565b955060008763ffffffff161180156122b057506019880154634000000063ffffffff90911610155b15612334578163ffffffff600019890116600481106122cb57fe5b015492506000831115612334576009880154670de0b6b3a7640000906122f7908663ffffffff611a8a16565b81151561230057fe5b0494506123316003890163ffffffff6000198a01166004811061231f57fe5b01546121ba878663ffffffff611a8a16565b95505b8598505b505050505050505092915050565b600281015460009081908180805b60048310156123995760038701836004811061236c57fe5b0154915061238c670de0b6b3a7640000612217848763ffffffff611a8a16565b9450600190920191612354565b6009870154670de0b6b3a7640000906123b8908663ffffffff611a8a16565b8115156123c157fe5b0490506123eb87600d01546123df83886120cd90919063ffffffff16565b9063ffffffff6120cd16565b979650505050505050565b600080600080600080600080600089600260008d600160a060020a0316600160a060020a0316815260200190815260200160002060020154141580612439575089155b156124475760009850612338565b5050600088815260046020908152604080832060198101546002820154600160a060020a038f168652600385528386208e875290945291842090995064010000000090910463ffffffff1697509195508594509250835b60048110156124fd578181600481106124b357fe5b015492506124d3670de0b6b3a76400006121ba858763ffffffff611a8a16565b95506124f3670de0b6b3a764000061221760148b0184600481106121f257fe5b945060010161249e565b60048201546001608060020a031685106125375760048201546125309086906001608060020a031663ffffffff611ab616565b945061253c565b600094505b61254c868663ffffffff6120cd16565b955060008763ffffffff161115612334578163ffffffff600019890116600481106122cb57fe5b600160a060020a03811660009081526002602081905260408220015481906125c5906125a09085906120dd565b600160a060020a0385166000908152600260205260409020549063ffffffff6120cd16565b600160a060020a038416600090815260026020526040902060010154909150811115610faf57600160a060020a0383166000908152600260205260409020600101549003610fb3565b6002820154600a83015460009081908190670de0b6b3a764000090612639908663ffffffff611a8a16565b81151561264257fe5b0492506028612652846019611a8a565b81151561265b57fe5b049150602861266b846005611a8a565b81151561267457fe5b04905085600c015481111561274d57600c86015490038481111561274d57600c8601546126a7908263ffffffff6120cd16565b600c87015560008054600154604080517fc671b934000000000000000000000000000000000000000000000000000000008152600160a060020a03928316600482015260248101949094525191169163c671b93491849160448082019260209290919082900301818588803b15801561271f57600080fd5b505af1158015612733573d6000803e3d6000fd5b50505050506040513d602081101561274a57600080fd5b50505b85600b01548211156127fc5785600b015482039150848211156127fc57600b86015461277f908363ffffffff6120cd16565b600b87015560008054604080517f16ff1c760000000000000000000000000000000000000000000000000000000081529051600160a060020a03909216926316ff1c76928692600480820193929182900301818588803b1580156127e257600080fd5b505af11580156127f6573d6000803e3d6000fd5b50505050505b505050505050565b8181016001608060020a038084169082161015610fb357600080fd5b60008061282b613ad0565b612833613a91565b60008060006004600060065481526020019081526020016000206018018a63ffffffff1660068110151561286357fe5b600891828204019190066004029054906101000a900463ffffffff169550600460006006548152602001908152602001600020600e018a63ffffffff166006811015156128ac57fe5b015443116128bc578596506130a5565b60065460009081526004602052604090206019015463ffffffff9081166101608701526128ef908a9061271090611a8a16565b61016086015190995060069063ffffffff160460640163ffffffff168981151561291557fe5b049850670de0b6b3a76400008904600a0198506113888911156129385761138898505b6040805160c0810182526103e8808252610fa06020830152611388928201929092526107d060608201526080810191909152610bb860a08201529589019593508363ffffffff8b166006811061298a57fe5b602002015161ffff168663ffffffff161080156129b25750600085610160015163ffffffff16115b156129bf578596506130a5565b8363ffffffff8b16600681106129d157fe5b602002015161ffff1663ffffffff871610612a1d5743600460006006548152602001908152602001600020600e018b63ffffffff16600681101515612a1257fe5b015560009550612a22565b606499505b6101608501805160010163ffffffff90811690915260065460e08701819052600090815260046020526040812060190154640100000000900490911660c087015292505b6004831015612c2a5760e085015160009081526004602052604090206016018360088110612a9057fe5b600891828204019190066004029054906101000a900463ffffffff16856000015184600481101515612abe57fe5b63ffffffff9092166020928302919091015260e086015160009081526004918290526040902060160190840160088110612af457fe5b600891828204019190066004029054906101000a900463ffffffff16856020015184600481101515612b2257fe5b63ffffffff9092166020928302919091015260e086015160009081526004909152604090206002906017018460088110612b5857fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff16811515612b8357fe5b04856060015184600481101515612b9657fe5b63ffffffff9092166020928302919091015260e0860151600090815260049182905260409020600291601790910190850160088110612bd157fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff16811515612bfc57fe5b04856040015184600481101515612c0f57fe5b63ffffffff9092166020929092020152600190920191612a66565b84610160015163ffffffff1660011415612c6757845160059063ffffffff8d1660048110612c5457fe5b6020020180519190910163ffffffff1690525b612c70856130b3565b63ffffffff8a161515612c8757612c878b86613195565b8963ffffffff1660011415612ca057612ca08b86613220565b8963ffffffff1660021415612cb957612cb98b86613239565b8963ffffffff1660031415612cd257612cd28b86613252565b8963ffffffff1660041415612cea57612cea856132ae565b8963ffffffff1660051415612d0357612d038b866133d8565b60808501805163ffffffff8d81166201000002909117169052600092508291505b6004831015613001578451605f908460048110612d3d57fe5b6020020180519190910263ffffffff16905284516064908460048110612d5f57fe5b6020020181815163ffffffff16811515612d7557fe5b0463ffffffff1690525060608501518360048110612d8f57fe5b60200201518551600a909102908460048110612da757fe5b6020020151600a02019050606481606402866020015185600481101515612dca57fe5b6020020151605f020163ffffffff16811515612de257fe5b04856020015184600481101515612df557fe5b602002019063ffffffff16908163ffffffff16815250508163ffffffff16856020015184600481101515612e2557fe5b602002015163ffffffff161115612e575760208501518360048110612e4657fe5b602002015160ff841660c087015291505b84518360048110612e6457fe5b6020020151600460008760e00151815260200190815260200160002060160184600881101515612e9057fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846020015183600481101515612ecb57fe5b6020020151600460008760e00151815260200190815260200160002060160184600401600881101515612efa57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846060015183600481101515612f3557fe5b6020020151600460008760e00151815260200190815260200160002060170184600881101515612f6157fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff160217905550846040015183600481101515612f9c57fe5b6020020151600460008760e00151815260200190815260200160002060170184600401600881101515612fcb57fe5b600891828204019190066004026101000a81548163ffffffff021916908363ffffffff1602179055508280600101935050612d24565b61016085015160e0860180516000908152600460205260408082206019908101805463ffffffff96871663ffffffff1990911617905560c08a01519351835291200180546001929092019092166401000000000267ffffffff00000000199091161790556008546201518081151561307557fe5b044301610140860181905260e08601516000908152600460205260409020600101556130a1858961340c565b8596505b505050505050949350505050565b6001194390810140600019909101401842418115156130ce57fe5b602084810151805191810151604082015160609092015163ffffffff90811691811695909404959095189183169190910192909201911601015a8101905080604051602001808281526020019150506040516020818303038152906040526040518082805190602001908083835b6020831061315b5780518252601f19909201916020918201910161313c565b5181516020939093036101000a60001901801990911692169190911790526040519201829003909120610120959095019490945250505050565b6006608082015263ffffffff60038302811660020a811660a083015281516014918416600481106131c257fe5b60200201805163ffffffff92018216905281516096918416600481106131e457fe5b602002015163ffffffff16111561321c57805160969063ffffffff84166004811061320b57fe5b63ffffffff90921660209290920201525b5050565b604081015160649063ffffffff84166004811061320b57fe5b606081015160649063ffffffff84166004811061320b57fe5b6132648161012001516012600e61358c565b63ffffffff1660a082015261012081015161327e906135f4565b63ffffffff908116608083015260a08201518116908316141561321c5761321c81608001518260a00151836136dd565b60066080820152610120810151600290600090819081906132d2906012600461358c565b925060008560c0015163ffffffff1611156132f25760018560c001510392505b604085015163ffffffff84166004811061330857fe5b6020020151915060148263ffffffff16111561332757600593506133b8565b8160650360040290508063ffffffff1685602001518463ffffffff1660048110151561334f57fe5b602002015163ffffffff161061338e576020850151819063ffffffff85166004811061337757fe5b6020020180519190910363ffffffff1690526133b8565b602085015160009063ffffffff8516600481106133a757fe5b63ffffffff90921660209290920201525b505063ffffffff918216600391909102821660020a021660a09190910152565b600560808201526101208101516133f390601861010061358c565b63ffffffff1660a0820181905261321c90839083613981565b7f5a250066b073a4ff8db1911b1f4467cf987e161fd19daa3dfa3f4c7518d81b638260e0015183610160015184608001518560a0015186600001518760200151886060015189604001518a61014001518b61010001518b604051808c81526020018b63ffffffff1663ffffffff1681526020018a63ffffffff1663ffffffff1681526020018963ffffffff1663ffffffff16815260200188600460200280838360005b838110156134c75781810151838201526020016134af565b5050505090500187600460200280838360005b838110156134f25781810151838201526020016134da565b5050505090500186600460200280838360005b8381101561351d578181015183820152602001613505565b5050505090500185600460200280838360005b83811015613548578181015183820152602001613530565b5050505090500184815260200183815260200182600160a060020a0316600160a060020a031681526020019b50505050505050505050505060405180910390a15050565b60008163ffffffff16848460010163ffffffff166020811015156135ac57fe5b60f860020a91901a8102048563ffffffff8616602081106135c957fe5b1a60f860020a0260f860020a9004610100020163ffffffff168115156135eb57fe5b06949350505050565b60006135fe613b4b565b50604080516102c081018252600180825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810191909152600261018082018190526101a082018190526101c082018190526101e08201819052610200820181905261022082015260036102408201819052610260820181905261028082015260046102a0820152806136be846018601661358c565b63ffffffff16601681106136ce57fe5b602002015160ff169392505050565b6136e5613b6b565b506040805160a08101825260018152600a602080830191909152600f82840152601460608301526019608083015260e08401805160009081526004909252838220600901548151835284832060020154915183529382206008015492939290918060646137728763ffffffff8c166005811061375d57fe5b6020020151879060ff1663ffffffff611a8a16565b81151561377b57fe5b04915061378e858363ffffffff611ab616565b60e08801516000908152600460205260409020600901556137b5838363ffffffff611ab616565b60e0880151600090815260046020526040902060080155670de0b6b3a76400006137e5838663ffffffff611a8a16565b8115156137ee57fe5b60e0890151600090815260046020526040902060070154919004925061381a908363ffffffff611ab616565b60e0880180516000908152600460208181526040808420600701959095556101008c018790529251825290915220600d015461385c908363ffffffff6120cd16565b60e0880180516000908152600460208190526040808320600d019490945591518152919091206003019063ffffffff8a1690811061389657fe5b0154905060008111156139765761391c816138bf84670de0b6b3a764000063ffffffff611a8a16565b8115156138c857fe5b04600460008a60e0015181526020019081526020016000206014018a63ffffffff166004811015156138f657fe5b60028104919091015460019091166010026101000a90046001608060020a031690612804565b60e088015160009081526004602081905260409091206014019063ffffffff8b1690811061394657fe5b600291828204019190066010026101000a8154816001608060020a0302191690836001608060020a031602179055505b505050505050505050565b600080805b60048310156127fc576040840151600a6001600363ffffffff8916060102925083600481106139b157fe5b602002015190508063ffffffff168263ffffffff161115806139d857508563ffffffff1683145b156139e657600091506139ec565b80820391505b835183600481106139f957fe5b602002015163ffffffff168263ffffffff161015613a3757835182908460048110613a2057fe5b6020020180519190910363ffffffff169052613a58565b83516001908460048110613a4757fe5b63ffffffff90921660209290920201525b600463ffffffff9095169490940493600190920191613986565b6080604051908101604052806004906020820280388339509192915050565b60c0604051908101604052806006906020820280388339509192915050565b610100604051908101604052806008906020820280388339509192915050565b61030060405190810160405280613ae5613a72565b8152602001613af2613a72565b8152602001613aff613a72565b8152602001613b0c613a72565b815260006020820181905260408201819052606082018190526080820181905260a0820181905260c0820181905260e082018190526101009091015290565b6102c0604051908101604052806016906020820280388339509192915050565b60a06040519081016040528060059060208202803883395091929150505600a165627a7a723058200a3f7e0d78e2dc9e106361c06668727f9b354baa9c91352f455a0b3aa7d6e23f0029
Swarm Source
bzzr://0a3f7e0d78e2dc9e106361c06668727f9b354baa9c91352f455a0b3aa7d6e23f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $2,555.87 | 0.1577 | $403.12 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.