Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Donut
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 2019-01-21 */ pragma solidity ^0.4.25; /** Sweet Bet / Strawberry Donuts */ library Random { struct Data { uint blockNumber; bytes32 hash; } function random(Data memory d, uint max) internal view returns (uint) { if(d.hash == 0){ //Use simplified entropy d.hash = keccak256(abi.encodePacked(now, block.difficulty, block.number, blockhash(block.number - 1))); }else{ //Use entropy based on blockhash at which transaction has been confirmed d.hash = keccak256(abi.encodePacked(d.hash)); } return uint(d.hash)%max; } function init(Data memory d, uint blockNumber) internal view { if(blockNumber != d.blockNumber){ //We have Random for different block. So we must reinit it //If, in the unlikely case, the block is too far away, then the blockhash //will return 0 and we will use simplified entropy. //It is highly unlikely because nor players, nor administration are interested in it d.hash = blockhash(blockNumber); d.blockNumber = blockNumber; } } } library Cylinder { using Random for Random.Data; uint constant CYLINDER_CAPACITY = 5; uint constant MULTIPLIER_PERCENT = 120; uint constant WITHDRAW_PERCENT = 99; uint constant JACKPOT_PERCENT = 1; uint constant SERVICE_PERCENT = 1; uint constant PROMO_PERCENT = 2; //Jackpot chances - once in a number of games uint constant HALF_JACKPOT_CHANCE = 50; uint constant FULL_JACKPOT_CHANCE = 500; address constant SERVICE = 0x7B2395bC947f552b424cB9646fC261810D3CEB44; address constant PROMO = 0x6eE0Bf1Fc770e7aa9D39F99C39FA977c6103D41e; //The deposit structure holds all the info about the deposit made struct Deposit { address depositor; //The depositor address uint64 timeAt; //When the deposit was made } //The result of the game. Always stored at height%CYLINDER_CAPACITY index struct GameResult{ uint48 timeAt; //Time of finalization uint48 blockAt; //Block number of finalization uint48 height; //Height of the cylinder slots uint8 unlucky; //index of the unlucky one in slots relative to height uint96 jackpot; //The jackpot won (if not 0) bool full; //Full jackpot won } struct Data{ uint dep; Deposit[] slots; GameResult[] results; uint currentCylinderHeight; uint jackpot; } function checkPercentConsistency() pure internal { //All the percent should be consistent with each other assert(100 * CYLINDER_CAPACITY == MULTIPLIER_PERCENT * (CYLINDER_CAPACITY-1) + (JACKPOT_PERCENT + SERVICE_PERCENT + PROMO_PERCENT)*CYLINDER_CAPACITY); assert(WITHDRAW_PERCENT <= 100); } function addDep(Cylinder.Data storage c, address depositor) internal returns (bool){ c.slots.push(Deposit(depositor, uint64(now))); if(c.slots.length % CYLINDER_CAPACITY == 0) { //Indicate that we need to put the game to the list of ready to finish games c.currentCylinderHeight += CYLINDER_CAPACITY; return true; //The game should be finished }else{ return false; //The game continues } } function finish(Cylinder.Data storage c, uint height, Random.Data memory r) internal { GameResult memory gr = computeGameResult(c, height, r); uint dep = c.dep; uint unlucky = gr.unlucky; //The loser index uint reward = dep*MULTIPLIER_PERCENT/100; uint length = height + CYLINDER_CAPACITY; uint total = dep*CYLINDER_CAPACITY; uint jackAmount = c.jackpot; uint jackWon = gr.jackpot; for(uint i=height; i<length; ++i){ if(i-height != unlucky){ //Winners Deposit storage d = c.slots[i]; if(!d.depositor.send(reward)) //If we can not send the money (it may be malicious contract) jackAmount += reward; //add it to jackpot } } if(jackWon > 0){ //Jackpot won!!! Send it to (un)lucky one Deposit storage win = c.slots[height + unlucky]; if(win.depositor.send(jackWon)) jackAmount -= jackWon; //jackWon is always <= jackAmount } c.jackpot = jackAmount + total*JACKPOT_PERCENT/100; c.results.push(gr); SERVICE.transfer(total*(SERVICE_PERCENT)/100); PROMO.transfer(total*PROMO_PERCENT/100); } function computeGameResult(Cylinder.Data storage c, uint height, Random.Data memory r) internal view returns (GameResult memory) { assert(height + CYLINDER_CAPACITY <= c.currentCylinderHeight); uint unlucky = r.random(CYLINDER_CAPACITY); //The loser index uint jackAmount = c.jackpot; uint jackWon = 0; bool fullJack = false; uint jpchance = r.random(FULL_JACKPOT_CHANCE); if(jpchance % HALF_JACKPOT_CHANCE == 0){ //Jackpot won!!! if(jpchance == 0){ //Once in FULL_JACKPOT_CHANCE the unlucky one gets full jackpot fullJack = true; jackWon = jackAmount; }else{ //Once in HALF_JACKPOT_CHANCE the unlucky one gets half of jackpot jackWon = jackAmount/2; } //jackWon is always not more than c.jackpot } return GameResult(uint48(now), uint48(block.number), uint48(height), uint8(unlucky), uint96(jackWon), fullJack); } function withdraw(Cylinder.Data storage c, address addr) internal returns (bool){ uint length = c.slots.length; uint dep = c.dep; for(uint i=c.currentCylinderHeight; i<length; ++i){ Deposit storage deposit = c.slots[i]; if(deposit.depositor == addr){ //Return dep uint ret = dep*WITHDRAW_PERCENT/100; deposit.depositor.transfer(msg.value + ret); SERVICE.transfer(dep - ret); --length; //We need only length-1 further on if(i < length){ c.slots[i] = c.slots[length]; } c.slots.length = length; return true; } } } function getCylinder(Cylinder.Data storage c, uint idx) internal view returns (uint96 dep, uint64 index, address[] deps, uint8 unlucky, int96 jackpot, uint64 lastDepTime){ dep = uint96(c.dep); index = uint64(idx); require(idx <= c.slots.length/CYLINDER_CAPACITY, "Wrong cylinder index"); if(uint(index) >= c.results.length){ uint size = c.slots.length - index*CYLINDER_CAPACITY; if(size > CYLINDER_CAPACITY) size = CYLINDER_CAPACITY; deps = new address[](size); }else{ deps = new address[](CYLINDER_CAPACITY); Cylinder.GameResult storage gr = c.results[index]; unlucky = gr.unlucky; jackpot = gr.full ? -int96(gr.jackpot) : int96(gr.jackpot); lastDepTime = gr.timeAt; } for(uint i=0; i<deps.length; ++i){ Deposit storage d = c.slots[index*CYLINDER_CAPACITY + i]; deps[i] = d.depositor; if(lastDepTime < uint(d.timeAt)) lastDepTime = d.timeAt; } } function getCapacity() internal pure returns (uint) { return CYLINDER_CAPACITY; } } contract Donut { using Cylinder for Cylinder.Data; using Random for Random.Data; uint[14] public BETS = [ 0.01 ether, 0.02 ether, 0.04 ether, 0.05 ether, 0.07 ether, 0.08 ether, 0.1 ether, 0.15 ether, 0.2 ether, 0.3 ether, 0.4 ether, 0.5 ether, 0.8 ether, 1 ether ]; struct GameToFinish{ uint8 game; uint64 blockNumber; uint64 height; } Cylinder.Data[] private games; GameToFinish[] private gtf; //Games that are waiting to be finished uint private gtfStart = 0; //Starting index of games to finish queue constructor() public { Cylinder.checkPercentConsistency(); //Initialize games for different bets games.length = BETS.length; } function() public payable { //first choose the game on the basis of the bets table for(int i=int(BETS.length)-1; i>=0; i--){ uint bet = BETS[uint(i)]; if(msg.value >= bet){ //Finish the games if there are any waiting finishGames(); if(msg.value > bet) //return change msg.sender.transfer(msg.value - bet); Cylinder.Data storage game = games[uint(i)]; if(game.dep == 0){ //Initialize game data on first deposit game.dep = bet; } uint height = game.currentCylinderHeight; if(game.addDep(msg.sender)){ //The game is ready to be finished //Put it to finish queue gtf.push(GameToFinish(uint8(i), uint64(block.number), uint64(height))); } return; } } if(msg.value == 0.00000112 ether){ withdraw(); return; } if(msg.value == 0){ finishGames(); return; } revert("Deposit is too small"); } function withdrawFrom(uint game) public { require(game < BETS.length); require(games[game].withdraw(msg.sender), "You are not betting in this game"); //Finish the games if there are any waiting finishGames(); } function withdraw() public { uint length = BETS.length; for(uint i=0; i<length; ++i){ if(games[i].withdraw(msg.sender)){ //Finish the games if there are any waiting finishGames(); return; } } revert("You are not betting in any game"); } function finishGames() private { Random.Data memory r; uint length = gtf.length; for(uint i=gtfStart; i<length; ++i){ GameToFinish memory g = gtf[i]; uint bn = g.blockNumber; if(bn == block.number) break; //We can not finish the game in the same block r.init(bn); Cylinder.Data storage c = games[g.game]; c.finish(g.height, r); delete gtf[i]; } if(i > gtfStart) gtfStart = i; } function getGameState(uint game) public view returns (uint64 blockNumber, bytes32 blockHash, uint96 dep, uint64 slotsCount, uint64 resultsCount, uint64 currentCylinderIndex, uint96 jackpot){ Cylinder.Data storage c = games[game]; dep = uint96(c.dep); slotsCount = uint64(c.slots.length); resultsCount = uint64(c.results.length); currentCylinderIndex = uint64(c.currentCylinderHeight/Cylinder.getCapacity()); jackpot = uint96(c.jackpot); blockNumber = uint64(block.number-1); blockHash = blockhash(block.number-1); } function getGameStates() public view returns (uint64 blockNumber, bytes32 blockHash, uint96[] dep, uint64[] slotsCount, uint64[] resultsCount, uint64[] currentCylinderIndex, uint96[] jackpot){ dep = new uint96[](BETS.length); slotsCount = new uint64[](BETS.length); resultsCount = new uint64[](BETS.length); currentCylinderIndex = new uint64[](BETS.length); jackpot = new uint96[](BETS.length); for(uint i=0; i<BETS.length; ++i){ (blockNumber, blockHash, dep[i], slotsCount[i], resultsCount[i], currentCylinderIndex[i], jackpot[i]) = getGameState(i); } } function getCylinder(uint game, int _idx) public view returns (uint64 blockNumber, bytes32 blockHash, uint96 dep, uint64 index, address[] deps, uint8 unlucky, int96 jackpot, uint64 lastDepTime, uint8 status){ Cylinder.Data storage c = games[game]; index = uint64(_idx < 0 ? c.slots.length/Cylinder.getCapacity() : uint(_idx)); (dep, index, deps, unlucky, jackpot, lastDepTime) = c.getCylinder(index); blockNumber = uint64(block.number-1); blockHash = blockhash(block.number-1); //status = 0; //The game is running uint8 _unlucky; int96 _jackpot; //We will try to get preliminary results of the ready to be finished game (_unlucky, _jackpot, status) = _getGameResults(game, index); if(status == 2){ unlucky = _unlucky; jackpot = _jackpot; } } function _getGameResults(uint game, uint index) private view returns (uint8 unlucky, int96 jackpot, uint8 status){ Cylinder.Data storage c = games[game]; if(index < c.results.length){ status = 3; //Finished and has finalized results }else if(c.slots.length >= (index+1)*Cylinder.getCapacity()){ status = 1; //Closed, but no results yet //This game needs finishing, so try to find out who wins Random.Data memory r; uint length = gtf.length; for(uint i=gtfStart; i<length; ++i){ GameToFinish memory g = gtf[i]; uint bn = g.blockNumber; if(blockhash(bn) == 0) break; //We either on the same block or too far from this block r.init(bn); Cylinder.GameResult memory gr = games[g.game].computeGameResult(g.height, r); if(uint(g.height) == index*Cylinder.getCapacity() && uint(g.game) == game){ //We have found our game so just fill the results unlucky = gr.unlucky; jackpot = gr.full ? -int96(gr.jackpot) : int96(gr.jackpot); //The jackpot amount may be inaccurate status = 2; //Closed and has preliminary results break; } } } } function getCylinders(uint game, uint idxFrom, uint idxTo) public view returns (uint blockNumber, bytes32 blockHash, uint96 dep, uint64[] index, address[] deps, uint8[] unlucky, int96[] jackpot, uint64[] lastDepTime, uint8[] status){ Cylinder.Data storage c = games[game]; uint lastCylinderIndex = c.slots.length/Cylinder.getCapacity(); blockNumber = block.number-1; blockHash = blockhash(block.number-1); dep = uint96(c.dep); require(idxFrom <= lastCylinderIndex && idxFrom <= idxTo, "Wrong cylinder index range"); if(idxTo > lastCylinderIndex) idxTo = lastCylinderIndex; uint count = idxTo - idxFrom + 1; index = new uint64[](count); deps = new address[](count*Cylinder.getCapacity()); unlucky = new uint8[](count); jackpot = new int96[](count); lastDepTime = new uint64[](count); status = new uint8[](count); _putCylindersToArrays(game, idxFrom, count, index, deps, unlucky, jackpot, lastDepTime, status); } function _putCylindersToArrays(uint game, uint idxFrom, uint count, uint64[] index, address[] deps, uint8[] unlucky, int96[] jackpot, uint64[] lastDepTime, uint8[] status) private view { for(uint i=0; i<count; ++i){ address[] memory _deps; (, , , index[i], _deps, unlucky[i], jackpot[i], lastDepTime[i], status[i]) = getCylinder(game, int(idxFrom + i)); _copyDeps(i*Cylinder.getCapacity(), deps, _deps); } } function _copyDeps(uint start, address[] deps, address[] memory _deps) private pure { for(uint j=0; j<_deps.length; ++j){ deps[start + j] = _deps[j]; } } function getUnfinishedCount() public view returns (uint) { return gtf.length - gtfStart; } function getUnfinished(uint i) public view returns (uint game, uint blockNumber, uint cylinder) { game = gtf[gtfStart + i].game; blockNumber = gtf[gtfStart + i].blockNumber; cylinder = gtf[gtfStart + i].height/Cylinder.getCapacity(); } function getTotalCylindersCount() public view returns (uint) { return gtf.length; } function testRandom() public view returns (uint[] numbers) { numbers = new uint[](32); Random.Data memory r; for(uint i=0; i<256; i+=8){ numbers[i/8] = Random.random(r, 10); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"getGameStates","outputs":[{"name":"blockNumber","type":"uint64"},{"name":"blockHash","type":"bytes32"},{"name":"dep","type":"uint96[]"},{"name":"slotsCount","type":"uint64[]"},{"name":"resultsCount","type":"uint64[]"},{"name":"currentCylinderIndex","type":"uint64[]"},{"name":"jackpot","type":"uint96[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"i","type":"uint256"}],"name":"getUnfinished","outputs":[{"name":"game","type":"uint256"},{"name":"blockNumber","type":"uint256"},{"name":"cylinder","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getTotalCylindersCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"BETS","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getUnfinishedCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"game","type":"uint256"},{"name":"idxFrom","type":"uint256"},{"name":"idxTo","type":"uint256"}],"name":"getCylinders","outputs":[{"name":"blockNumber","type":"uint256"},{"name":"blockHash","type":"bytes32"},{"name":"dep","type":"uint96"},{"name":"index","type":"uint64[]"},{"name":"deps","type":"address[]"},{"name":"unlucky","type":"uint8[]"},{"name":"jackpot","type":"int96[]"},{"name":"lastDepTime","type":"uint64[]"},{"name":"status","type":"uint8[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"game","type":"uint256"}],"name":"withdrawFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"game","type":"uint256"},{"name":"_idx","type":"int256"}],"name":"getCylinder","outputs":[{"name":"blockNumber","type":"uint64"},{"name":"blockHash","type":"bytes32"},{"name":"dep","type":"uint96"},{"name":"index","type":"uint64"},{"name":"deps","type":"address[]"},{"name":"unlucky","type":"uint8"},{"name":"jackpot","type":"int96"},{"name":"lastDepTime","type":"uint64"},{"name":"status","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"testRandom","outputs":[{"name":"numbers","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"game","type":"uint256"}],"name":"getGameState","outputs":[{"name":"blockNumber","type":"uint64"},{"name":"blockHash","type":"bytes32"},{"name":"dep","type":"uint96"},{"name":"slotsCount","type":"uint64"},{"name":"resultsCount","type":"uint64"},{"name":"currentCylinderIndex","type":"uint64"},{"name":"jackpot","type":"uint96"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"}]
Contract Creation Code
610240604052662386f26fc10000608090815266470de4df82000060a052668e1bc9bf04000060c05266b1a2bc2ec5000060e05266f8b0a10e4700006101005267011c37937e0800006101205267016345785d8a000061014052670214e8348c4f0000610160526702c68af0bb14000061018052670429d069189e00006101a05267058d15e1762800006101c0526706f05b59d3b200006101e052670b1a2bc2ec50000061020052670de0b6b3a764000061022052620000c490600090600e62000107565b506000601055348015620000d757600080fd5b50620000f064010000000062001fda6200010582021704565b600e620000fe818062000156565b5062000278565b565b82600e810192821562000144579160200282015b8281111562000144578251829067ffffffffffffffff169055916020019190600101906200011b565b50620001529291506200018a565b5090565b8154818355818111156200018557600502816005028360005260206000209182019101620001859190620001aa565b505050565b620001a791905b8082111562000152576000815560010162000191565b90565b620001a791905b8082111562000152576000808255620001ce6001830182620001f6565b620001de60028301600062000219565b506000600382018190556004820155600501620001b1565b508054600082559060005260206000209081019062000216919062000239565b50565b50805460008255906000526020600020908101906200021691906200018a565b620001a791905b80821115620001525780547fffffffff0000000000000000000000000000000000000000000000000000000016815560010162000240565b61200880620002886000396000f3006080604052600436106100ae5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630abcdf9481146102aa5780633c7af096146104515780633ccfd60b1461048757806364ed74cf1461049e57806392d5a1ae146104c5578063adcbafe7146104dd578063d34dfc68146104f2578063e6dad824146106f6578063ec284e0a1461070e578063fbddd14b146107e5578063ffde0c741461084a575b600d600080805b6000841261022f57600084600e81106100ca57fe5b01549250348311610223576100dd6108bb565b823411156101165760405133903485900380156108fc02916000818181858888f19350505050158015610114573d6000803e3d6000fd5b505b600e80548590811061012457fe5b90600052602060002090600502019150816000015460001415610145578282555b50600381015461015b823363ffffffff6109f916565b1561021e576040805160608101825260ff808716825267ffffffffffffffff43811660208401908152858216948401948552600f805460018101825560009190915293517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802909401805491519551831669010000000000000000000270ffffffffffffffff00000000000000000019969093166101000268ffffffffffffffff00199590941660ff19909216919091179390931691909117929092169190911790555b6102a4565b600019909301926100b5565b34650104c533c00014156102455761021e610acd565b3415156102545761021e6108bb565b6040805160e560020a62461bcd02815260206004820152601460248201527f4465706f73697420697320746f6f20736d616c6c000000000000000000000000604482015290519081900360640190fd5b50505050005b3480156102b657600080fd5b506102bf610b77565b604051808867ffffffffffffffff1667ffffffffffffffff1681526020018760001916600019168152602001806020018060200180602001806020018060200186810386528b818151815260200191508051906020019060200280838360005b8381101561033757818101518382015260200161031f565b5050505090500186810385528a818151815260200191508051906020019060200280838360005b8381101561037657818101518382015260200161035e565b50505050905001868103845289818151815260200191508051906020019060200280838360005b838110156103b557818101518382015260200161039d565b50505050905001868103835288818151815260200191508051906020019060200280838360005b838110156103f45781810151838201526020016103dc565b50505050905001868103825287818151815260200191508051906020019060200280838360005b8381101561043357818101518382015260200161041b565b505050509050019c5050505050505050505050505060405180910390f35b34801561045d57600080fd5b50610469600435610d11565b60408051938452602084019290925282820152519081900360600190f35b34801561049357600080fd5b5061049c610acd565b005b3480156104aa57600080fd5b506104b3610dbe565b60408051918252519081900360200190f35b3480156104d157600080fd5b506104b3600435610dc5565b3480156104e957600080fd5b506104b3610dd9565b3480156104fe57600080fd5b50610510600435602435604435610de3565b604051808a81526020018960001916600019168152602001886bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200180602001806020018060200180602001806020018060200187810387528d818151815260200191508051906020019060200280838360005b8381101561059a578181015183820152602001610582565b5050505090500187810386528c818151815260200191508051906020019060200280838360005b838110156105d95781810151838201526020016105c1565b5050505090500187810385528b818151815260200191508051906020019060200280838360005b83811015610618578181015183820152602001610600565b5050505090500187810384528a818151815260200191508051906020019060200280838360005b8381101561065757818101518382015260200161063f565b50505050905001878103835289818151815260200191508051906020019060200280838360005b8381101561069657818101518382015260200161067e565b50505050905001878103825288818151815260200191508051906020019060200280838360005b838110156106d55781810151838201526020016106bd565b505050509050019f5050505050505050505050505050505060405180910390f35b34801561070257600080fd5b5061049c600435610ff1565b34801561071a57600080fd5b50610729600435602435611072565b6040805167ffffffffffffffff808c16825260208083018c90526bffffffffffffffffffffffff8b1693830193909352888116606083015260ff80881660a0840152600b87810b900b60c084015290851660e0830152831661010082015261012060808201818152885191830191909152875191929091610140840191898101910280838360005b838110156107c95781810151838201526020016107b1565b505050509050019a505050505050505050505060405180910390f35b3480156107f157600080fd5b506107fa611149565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561083657818101518382015260200161081e565b505050509050019250505060405180910390f35b34801561085657600080fd5b506108626004356111b9565b6040805167ffffffffffffffff988916815260208101979097526bffffffffffffffffffffffff958616878201529387166060870152918616608086015290941660a0840152921660c082015290519081900360e00190f35b6108c3611f05565b6000806108ce611f1c565b600f5460105490935091506000805b848410156109e157600f8054859081106108f357fe5b600091825260209182902060408051606081018252929091015460ff8116835267ffffffffffffffff6101008204811694840185905269010000000000000000009091041690820152935091504382141561094d576109e1565b61095d868363ffffffff61123116565b8251600e8054909160ff1690811061097157fe5b906000526020600020906005020190506109a4836040015167ffffffffffffffff1687836112449092919063ffffffff16565b600f8054859081106109b257fe5b6000918252602090912001805470ffffffffffffffffffffffffffffffffff19169055600193909301926108dd565b6010548411156109f15760108490555b505050505050565b60408051808201909152600160a060020a03808316825267ffffffffffffffff428116602080850191825260018088018054918201815560008181529283209651969091018054935190941674010000000000000000000000000000000000000000027bffffffffffffffff0000000000000000000000000000000000000000199690951673ffffffffffffffffffffffffffffffffffffffff19909316929092179490941692909217905554600590061515610ac3575060038201805460050190556001610ac7565b5060005b92915050565b600e60005b81811015610b2357610b0933600e83815481101515610aed57fe5b906000526020600020906005020161155590919063ffffffff16565b15610b1b57610b166108bb565b610b73565b600101610ad2565b6040805160e560020a62461bcd02815260206004820152601f60248201527f596f7520617265206e6f742062657474696e6720696e20616e792067616d6500604482015290519081900360640190fd5b5050565b60008060608060608060606000600e604051908082528060200260200182016040528015610baf578160200160208202803883390190505b5060408051600e8082526101e08201909252919750602082016101c080388339505060408051600e8082526101e082019092529297509050602082016101c080388339505060408051600e8082526101e082019092529296509050602082016101c080388339505060408051600e8082526101e082019092529295509050602082016101c080388339019050509150600090505b600e811015610d0757610c55816111b9565b8c88815181101515610c6357fe5b9060200190602002018c89815181101515610c7a57fe5b9060200190602002018c8a815181101515610c9157fe5b9060200190602002018c8b815181101515610ca857fe5b9060200190602002018c8c815181101515610cbf57fe5b6bffffffffffffffffffffffff9687166020918202909201015267ffffffffffffffff9586169052948416909452939091169091529190911690529098509650600101610c43565b5090919293949596565b6000806000600f8460105401815481101515610d2957fe5b600091825260209091200154601054600f805460ff909316955091908601908110610d5057fe5b600091825260209091200154610100900467ffffffffffffffff169150610d7561171c565b600f8560105401815481101515610d8857fe5b6000918252602090912001546901000000000000000000900467ffffffffffffffff16811515610db457fe5b0490509193909250565b600f545b90565b600081600e8110610dd257fe5b0154905081565b601054600f540390565b60008060006060806060806060806000806000600e8f815481101515610e0557fe5b90600052602060002090600502019250610e1d61171c565b6001840154811515610e2b57fe5b845460001943019e508e409d509b50049150818e11801590610e4d57508c8e11155b1515610ea3576040805160e560020a62461bcd02815260206004820152601a60248201527f57726f6e672063796c696e64657220696e6465782072616e6765000000000000604482015290519081900360640190fd5b818d1115610eaf57819c505b8d8d03600101905080604051908082528060200260200182016040528015610ee1578160200160208202803883390190505b509850610eec61171c565b8102604051908082528060200260200182016040528015610f17578160200160208202803883390190505b50975080604051908082528060200260200182016040528015610f44578160200160208202803883390190505b50965080604051908082528060200260200182016040528015610f71578160200160208202803883390190505b50955080604051908082528060200260200182016040528015610f9e578160200160208202803883390190505b50945080604051908082528060200260200182016040528015610fcb578160200160208202803883390190505b509350610fdf8f8f838c8c8c8c8c8c611721565b50505093979b92969a50939750939750565b600e8110610ffe57600080fd5b61101133600e83815481101515610aed57fe5b1515611067576040805160e560020a62461bcd02815260206004820181905260248201527f596f7520617265206e6f742062657474696e6720696e20746869732067616d65604482015290519081900360640190fd5b61106f6108bb565b50565b60008060008060606000806000806000806000600e8e81548110151561109457fe5b9060005260206000209060050201925060008d126110b2578c6110ca565b6110ba61171c565b60018401548115156110c857fe5b045b98506110e68367ffffffffffffffff8b1663ffffffff61181e16565b809a50819b50829c50839d50849e50859f50505050505050600143039b5060014303409a5061111f8e8a67ffffffffffffffff16611ad4565b95509092509050600260ff85161415611139578196508095505b5050509295985092959850929598565b6060611153611f05565b604080516020808252610420820190925260009180820161040080388339019050509250600090505b6101008110156111b45761119182600a611c96565b83600883048151811015156111a257fe5b6020908102909101015260080161117c565b505090565b600080600080600080600080600e898154811015156111d457fe5b6000918252602090912060059091020180546001820154600283015491985096509450905061120161171c565b816003015481151561120f57fe5b60049092015460001943019b8c409b5097995095975093959390049392915050565b81518114610b7357804060208301529052565b61124c611f3c565b6000806000806000806000806000806112668e8e8e611ddb565b8e546060820151919c509a5060ff169850606460788b0204975060058d01965060058a0295508d6004015494508a608001516bffffffffffffffffffffffff1693508c92505b86831015611314578c830389146113095760018e018054849081106112cd57fe5b600091825260208220018054604051919450600160a060020a0316918a156108fc02918b91818181858888f19350505050151561130957938701935b8260010192506112ac565b600084111561136b5760018e0180548e8b0190811061132f57fe5b600091825260208220018054604051919350600160a060020a03169186156108fc02918791818181858888f193505050501561136b5783850394505b6064860485018e600401819055508d6002018b90806001815401808255809150509060018203906000526020600020016000909192909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548165ffffffffffff021916908365ffffffffffff16021790555060608201518160000160126101000a81548160ff021916908360ff16021790555060808201518160000160136101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060a082015181600001601f6101000a81548160ff021916908315150217905550505050737b2395bc947f552b424cb9646fc261810d3ceb44600160a060020a03166108fc6064600189028115156114d157fe5b049081150290604051600060405180830381858888f193505050501580156114fd573d6000803e3d6000fd5b50604051736ee0bf1fc770e7aa9d39f99c39fa977c6103d41e906064600289020480156108fc02916000818181858888f19350505050158015611544573d6000803e3d6000fd5b505050505050505050505050505050565b600182015482546003840154600092919083805b84831015611711576001880180548490811061158157fe5b60009182526020909120018054909250600160a060020a0388811691161415611706576064606385028354604051929091049250600160a060020a03169034830180156108fc02916000818181858888f193505050501580156115e8573d6000803e3d6000fd5b50604051737b2395bc947f552b424cb9646fc261810d3ceb449082860380156108fc02916000818181858888f1935050505015801561162b573d6000803e3d6000fd5b5060001990940193848310156116ee576001880180548690811061164b57fe5b90600052602060002001886001018481548110151561166657fe5b6000918252602090912082549101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117808255915467ffffffffffffffff740100000000000000000000000000000000000000009182900416027bffffffffffffffff0000000000000000000000000000000000000000199092169190911790555b846116fc60018a0182611f71565b5060019550611711565b826001019250611569565b505050505092915050565b600590565b600060605b888210156118115761173a8b838c01611072565b9091929394959697509091929394959650909192939495508d8881518110151561176057fe5b9060200190602002018c8981518110151561177757fe5b9060200190602002018c8a81518110151561178e57fe5b9060200190602002018c8b8151811015156117a557fe5b9060200190602002018c8c8151811015156117bc57fe5b60ff9687166020918202909201015267ffffffffffffffff9586169052600b95860b90950b90945293169091529290921690915290506118066117fd61171c565b83028883611eac565b816001019150611726565b5050505050505050505050565b815460018301548290606090600090819081908190819081908190600590048b1115611894576040805160e560020a62461bcd02815260206004820152601460248201527f57726f6e672063796c696e64657220696e646578000000000000000000000000604482015290519081900360640190fd5b60028c015467ffffffffffffffff8a16106119025760058967ffffffffffffffff16028c6001018054905003935060058411156118d057600593505b836040519080825280602002602001820160405280156118fa578160200160208202803883390190505b5097506119f9565b60408051600580825260c08201909252906020820160a0803883390190505097508b6002018967ffffffffffffffff1681548110151561193e57fe5b6000918252602090912001805460ff72010000000000000000000000000000000000008204811699509194507f01000000000000000000000000000000000000000000000000000000000000009004166119be57825473010000000000000000000000000000000000000090046bffffffffffffffffffffffff166119e9565b825473010000000000000000000000000000000000000090046bffffffffffffffffffffffff166000035b835490965065ffffffffffff1694505b600091505b8751821015611ac65760018c01805467ffffffffffffffff8b166005028401908110611a2657fe5b600091825260209091200180548951919250600160a060020a031690899084908110611a4e57fe5b600160a060020a03909216602092830290910190910152805467ffffffffffffffff7401000000000000000000000000000000000000000090910481169086161015611abb57805474010000000000000000000000000000000000000000900467ffffffffffffffff1694505b8160010191506119fe565b505050509295509295509295565b600080600080611ae2611f05565b600080611aed611f1c565b6000611af7611f3c565b600e80548d908110611b0557fe5b9060005260206000209060050201965086600201805490508b1015611b2d5760039750611c88565b611b3561171c565b8b600101028760010180549050101515611c8857600f546010546001995090955093505b84841015611c8857600f805485908110611b6f57fe5b600091825260209182902060408051606081018252929091015460ff8116835267ffffffffffffffff61010082048116948401859052690100000000000000000090910416908201529350915081401515611bc957611c88565b611bd9868363ffffffff61123116565b611c1f836040015167ffffffffffffffff1687600e866000015160ff16815481101515611c0257fe5b9060005260206000209060050201611ddb9092919063ffffffff16565b9050611c2961171c565b8b02836040015167ffffffffffffffff16148015611c4a5750825160ff168c145b15611c7d57806060015199508060a00151611c69578060800151611c72565b80608001516000035b985060029750611c88565b836001019350611b59565b505050505050509250925092565b60208201516000901515611d435760408051426020808301919091524482840152436060830181905260001901406080808401919091528351808403909101815260a090920192839052815191929182918401908083835b60208310611d0d5780518252601f199092019160209182019101611cee565b51815160209384036101000a60001901801990921691161790526040519190930181900390209187019190915250611dc3915050565b60208084015160408051808401929092528051808303840181529181019081905281519192909182918401908083835b60208310611d925780518252601f199092019160209182019101611d73565b51815160209384036101000a6000190180199092169116179052604051919093018190039020918701919091525050505b60208301518290811515611dd357fe5b069392505050565b611de3611f3c565b600080600080600088600301546005890111151515611dfe57fe5b611e0f87600563ffffffff611c9616565b60048a0154909550935060009250829150611e32876101f463ffffffff611c9616565b9050603281061515611e5857801515611e515760019150839250611e58565b6002840492505b506040805160c08101825265ffffffffffff42811682524381166020830152989098169088015260ff90931660608701526bffffffffffffffffffffffff16608086015250151560a0840152509092915050565b60005b8151811015611eff578181815181101515611ec657fe5b9060200190602002015183828601815181101515611ee057fe5b600160a060020a03909216602092830290910190910152600101611eaf565b50505050565b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b815481835581811115611f9557600083815260209020611f95918101908301611f9a565b505050565b610dc291905b80821115611fd65780547fffffffff00000000000000000000000000000000000000000000000000000000168155600101611fa0565b5090565b5600a165627a7a7230582003b5b0e3e7471601c1f0771fc3583c63b733a6262629cfff172aae9468aa19740029
Deployed Bytecode
0x6080604052600436106100ae5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416630abcdf9481146102aa5780633c7af096146104515780633ccfd60b1461048757806364ed74cf1461049e57806392d5a1ae146104c5578063adcbafe7146104dd578063d34dfc68146104f2578063e6dad824146106f6578063ec284e0a1461070e578063fbddd14b146107e5578063ffde0c741461084a575b600d600080805b6000841261022f57600084600e81106100ca57fe5b01549250348311610223576100dd6108bb565b823411156101165760405133903485900380156108fc02916000818181858888f19350505050158015610114573d6000803e3d6000fd5b505b600e80548590811061012457fe5b90600052602060002090600502019150816000015460001415610145578282555b50600381015461015b823363ffffffff6109f916565b1561021e576040805160608101825260ff808716825267ffffffffffffffff43811660208401908152858216948401948552600f805460018101825560009190915293517f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802909401805491519551831669010000000000000000000270ffffffffffffffff00000000000000000019969093166101000268ffffffffffffffff00199590941660ff19909216919091179390931691909117929092169190911790555b6102a4565b600019909301926100b5565b34650104c533c00014156102455761021e610acd565b3415156102545761021e6108bb565b6040805160e560020a62461bcd02815260206004820152601460248201527f4465706f73697420697320746f6f20736d616c6c000000000000000000000000604482015290519081900360640190fd5b50505050005b3480156102b657600080fd5b506102bf610b77565b604051808867ffffffffffffffff1667ffffffffffffffff1681526020018760001916600019168152602001806020018060200180602001806020018060200186810386528b818151815260200191508051906020019060200280838360005b8381101561033757818101518382015260200161031f565b5050505090500186810385528a818151815260200191508051906020019060200280838360005b8381101561037657818101518382015260200161035e565b50505050905001868103845289818151815260200191508051906020019060200280838360005b838110156103b557818101518382015260200161039d565b50505050905001868103835288818151815260200191508051906020019060200280838360005b838110156103f45781810151838201526020016103dc565b50505050905001868103825287818151815260200191508051906020019060200280838360005b8381101561043357818101518382015260200161041b565b505050509050019c5050505050505050505050505060405180910390f35b34801561045d57600080fd5b50610469600435610d11565b60408051938452602084019290925282820152519081900360600190f35b34801561049357600080fd5b5061049c610acd565b005b3480156104aa57600080fd5b506104b3610dbe565b60408051918252519081900360200190f35b3480156104d157600080fd5b506104b3600435610dc5565b3480156104e957600080fd5b506104b3610dd9565b3480156104fe57600080fd5b50610510600435602435604435610de3565b604051808a81526020018960001916600019168152602001886bffffffffffffffffffffffff166bffffffffffffffffffffffff16815260200180602001806020018060200180602001806020018060200187810387528d818151815260200191508051906020019060200280838360005b8381101561059a578181015183820152602001610582565b5050505090500187810386528c818151815260200191508051906020019060200280838360005b838110156105d95781810151838201526020016105c1565b5050505090500187810385528b818151815260200191508051906020019060200280838360005b83811015610618578181015183820152602001610600565b5050505090500187810384528a818151815260200191508051906020019060200280838360005b8381101561065757818101518382015260200161063f565b50505050905001878103835289818151815260200191508051906020019060200280838360005b8381101561069657818101518382015260200161067e565b50505050905001878103825288818151815260200191508051906020019060200280838360005b838110156106d55781810151838201526020016106bd565b505050509050019f5050505050505050505050505050505060405180910390f35b34801561070257600080fd5b5061049c600435610ff1565b34801561071a57600080fd5b50610729600435602435611072565b6040805167ffffffffffffffff808c16825260208083018c90526bffffffffffffffffffffffff8b1693830193909352888116606083015260ff80881660a0840152600b87810b900b60c084015290851660e0830152831661010082015261012060808201818152885191830191909152875191929091610140840191898101910280838360005b838110156107c95781810151838201526020016107b1565b505050509050019a505050505050505050505060405180910390f35b3480156107f157600080fd5b506107fa611149565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561083657818101518382015260200161081e565b505050509050019250505060405180910390f35b34801561085657600080fd5b506108626004356111b9565b6040805167ffffffffffffffff988916815260208101979097526bffffffffffffffffffffffff958616878201529387166060870152918616608086015290941660a0840152921660c082015290519081900360e00190f35b6108c3611f05565b6000806108ce611f1c565b600f5460105490935091506000805b848410156109e157600f8054859081106108f357fe5b600091825260209182902060408051606081018252929091015460ff8116835267ffffffffffffffff6101008204811694840185905269010000000000000000009091041690820152935091504382141561094d576109e1565b61095d868363ffffffff61123116565b8251600e8054909160ff1690811061097157fe5b906000526020600020906005020190506109a4836040015167ffffffffffffffff1687836112449092919063ffffffff16565b600f8054859081106109b257fe5b6000918252602090912001805470ffffffffffffffffffffffffffffffffff19169055600193909301926108dd565b6010548411156109f15760108490555b505050505050565b60408051808201909152600160a060020a03808316825267ffffffffffffffff428116602080850191825260018088018054918201815560008181529283209651969091018054935190941674010000000000000000000000000000000000000000027bffffffffffffffff0000000000000000000000000000000000000000199690951673ffffffffffffffffffffffffffffffffffffffff19909316929092179490941692909217905554600590061515610ac3575060038201805460050190556001610ac7565b5060005b92915050565b600e60005b81811015610b2357610b0933600e83815481101515610aed57fe5b906000526020600020906005020161155590919063ffffffff16565b15610b1b57610b166108bb565b610b73565b600101610ad2565b6040805160e560020a62461bcd02815260206004820152601f60248201527f596f7520617265206e6f742062657474696e6720696e20616e792067616d6500604482015290519081900360640190fd5b5050565b60008060608060608060606000600e604051908082528060200260200182016040528015610baf578160200160208202803883390190505b5060408051600e8082526101e08201909252919750602082016101c080388339505060408051600e8082526101e082019092529297509050602082016101c080388339505060408051600e8082526101e082019092529296509050602082016101c080388339505060408051600e8082526101e082019092529295509050602082016101c080388339019050509150600090505b600e811015610d0757610c55816111b9565b8c88815181101515610c6357fe5b9060200190602002018c89815181101515610c7a57fe5b9060200190602002018c8a815181101515610c9157fe5b9060200190602002018c8b815181101515610ca857fe5b9060200190602002018c8c815181101515610cbf57fe5b6bffffffffffffffffffffffff9687166020918202909201015267ffffffffffffffff9586169052948416909452939091169091529190911690529098509650600101610c43565b5090919293949596565b6000806000600f8460105401815481101515610d2957fe5b600091825260209091200154601054600f805460ff909316955091908601908110610d5057fe5b600091825260209091200154610100900467ffffffffffffffff169150610d7561171c565b600f8560105401815481101515610d8857fe5b6000918252602090912001546901000000000000000000900467ffffffffffffffff16811515610db457fe5b0490509193909250565b600f545b90565b600081600e8110610dd257fe5b0154905081565b601054600f540390565b60008060006060806060806060806000806000600e8f815481101515610e0557fe5b90600052602060002090600502019250610e1d61171c565b6001840154811515610e2b57fe5b845460001943019e508e409d509b50049150818e11801590610e4d57508c8e11155b1515610ea3576040805160e560020a62461bcd02815260206004820152601a60248201527f57726f6e672063796c696e64657220696e6465782072616e6765000000000000604482015290519081900360640190fd5b818d1115610eaf57819c505b8d8d03600101905080604051908082528060200260200182016040528015610ee1578160200160208202803883390190505b509850610eec61171c565b8102604051908082528060200260200182016040528015610f17578160200160208202803883390190505b50975080604051908082528060200260200182016040528015610f44578160200160208202803883390190505b50965080604051908082528060200260200182016040528015610f71578160200160208202803883390190505b50955080604051908082528060200260200182016040528015610f9e578160200160208202803883390190505b50945080604051908082528060200260200182016040528015610fcb578160200160208202803883390190505b509350610fdf8f8f838c8c8c8c8c8c611721565b50505093979b92969a50939750939750565b600e8110610ffe57600080fd5b61101133600e83815481101515610aed57fe5b1515611067576040805160e560020a62461bcd02815260206004820181905260248201527f596f7520617265206e6f742062657474696e6720696e20746869732067616d65604482015290519081900360640190fd5b61106f6108bb565b50565b60008060008060606000806000806000806000600e8e81548110151561109457fe5b9060005260206000209060050201925060008d126110b2578c6110ca565b6110ba61171c565b60018401548115156110c857fe5b045b98506110e68367ffffffffffffffff8b1663ffffffff61181e16565b809a50819b50829c50839d50849e50859f50505050505050600143039b5060014303409a5061111f8e8a67ffffffffffffffff16611ad4565b95509092509050600260ff85161415611139578196508095505b5050509295985092959850929598565b6060611153611f05565b604080516020808252610420820190925260009180820161040080388339019050509250600090505b6101008110156111b45761119182600a611c96565b83600883048151811015156111a257fe5b6020908102909101015260080161117c565b505090565b600080600080600080600080600e898154811015156111d457fe5b6000918252602090912060059091020180546001820154600283015491985096509450905061120161171c565b816003015481151561120f57fe5b60049092015460001943019b8c409b5097995095975093959390049392915050565b81518114610b7357804060208301529052565b61124c611f3c565b6000806000806000806000806000806112668e8e8e611ddb565b8e546060820151919c509a5060ff169850606460788b0204975060058d01965060058a0295508d6004015494508a608001516bffffffffffffffffffffffff1693508c92505b86831015611314578c830389146113095760018e018054849081106112cd57fe5b600091825260208220018054604051919450600160a060020a0316918a156108fc02918b91818181858888f19350505050151561130957938701935b8260010192506112ac565b600084111561136b5760018e0180548e8b0190811061132f57fe5b600091825260208220018054604051919350600160a060020a03169186156108fc02918791818181858888f193505050501561136b5783850394505b6064860485018e600401819055508d6002018b90806001815401808255809150509060018203906000526020600020016000909192909190915060008201518160000160006101000a81548165ffffffffffff021916908365ffffffffffff16021790555060208201518160000160066101000a81548165ffffffffffff021916908365ffffffffffff160217905550604082015181600001600c6101000a81548165ffffffffffff021916908365ffffffffffff16021790555060608201518160000160126101000a81548160ff021916908360ff16021790555060808201518160000160136101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060a082015181600001601f6101000a81548160ff021916908315150217905550505050737b2395bc947f552b424cb9646fc261810d3ceb44600160a060020a03166108fc6064600189028115156114d157fe5b049081150290604051600060405180830381858888f193505050501580156114fd573d6000803e3d6000fd5b50604051736ee0bf1fc770e7aa9d39f99c39fa977c6103d41e906064600289020480156108fc02916000818181858888f19350505050158015611544573d6000803e3d6000fd5b505050505050505050505050505050565b600182015482546003840154600092919083805b84831015611711576001880180548490811061158157fe5b60009182526020909120018054909250600160a060020a0388811691161415611706576064606385028354604051929091049250600160a060020a03169034830180156108fc02916000818181858888f193505050501580156115e8573d6000803e3d6000fd5b50604051737b2395bc947f552b424cb9646fc261810d3ceb449082860380156108fc02916000818181858888f1935050505015801561162b573d6000803e3d6000fd5b5060001990940193848310156116ee576001880180548690811061164b57fe5b90600052602060002001886001018481548110151561166657fe5b6000918252602090912082549101805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0390921691909117808255915467ffffffffffffffff740100000000000000000000000000000000000000009182900416027bffffffffffffffff0000000000000000000000000000000000000000199092169190911790555b846116fc60018a0182611f71565b5060019550611711565b826001019250611569565b505050505092915050565b600590565b600060605b888210156118115761173a8b838c01611072565b9091929394959697509091929394959650909192939495508d8881518110151561176057fe5b9060200190602002018c8981518110151561177757fe5b9060200190602002018c8a81518110151561178e57fe5b9060200190602002018c8b8151811015156117a557fe5b9060200190602002018c8c8151811015156117bc57fe5b60ff9687166020918202909201015267ffffffffffffffff9586169052600b95860b90950b90945293169091529290921690915290506118066117fd61171c565b83028883611eac565b816001019150611726565b5050505050505050505050565b815460018301548290606090600090819081908190819081908190600590048b1115611894576040805160e560020a62461bcd02815260206004820152601460248201527f57726f6e672063796c696e64657220696e646578000000000000000000000000604482015290519081900360640190fd5b60028c015467ffffffffffffffff8a16106119025760058967ffffffffffffffff16028c6001018054905003935060058411156118d057600593505b836040519080825280602002602001820160405280156118fa578160200160208202803883390190505b5097506119f9565b60408051600580825260c08201909252906020820160a0803883390190505097508b6002018967ffffffffffffffff1681548110151561193e57fe5b6000918252602090912001805460ff72010000000000000000000000000000000000008204811699509194507f01000000000000000000000000000000000000000000000000000000000000009004166119be57825473010000000000000000000000000000000000000090046bffffffffffffffffffffffff166119e9565b825473010000000000000000000000000000000000000090046bffffffffffffffffffffffff166000035b835490965065ffffffffffff1694505b600091505b8751821015611ac65760018c01805467ffffffffffffffff8b166005028401908110611a2657fe5b600091825260209091200180548951919250600160a060020a031690899084908110611a4e57fe5b600160a060020a03909216602092830290910190910152805467ffffffffffffffff7401000000000000000000000000000000000000000090910481169086161015611abb57805474010000000000000000000000000000000000000000900467ffffffffffffffff1694505b8160010191506119fe565b505050509295509295509295565b600080600080611ae2611f05565b600080611aed611f1c565b6000611af7611f3c565b600e80548d908110611b0557fe5b9060005260206000209060050201965086600201805490508b1015611b2d5760039750611c88565b611b3561171c565b8b600101028760010180549050101515611c8857600f546010546001995090955093505b84841015611c8857600f805485908110611b6f57fe5b600091825260209182902060408051606081018252929091015460ff8116835267ffffffffffffffff61010082048116948401859052690100000000000000000090910416908201529350915081401515611bc957611c88565b611bd9868363ffffffff61123116565b611c1f836040015167ffffffffffffffff1687600e866000015160ff16815481101515611c0257fe5b9060005260206000209060050201611ddb9092919063ffffffff16565b9050611c2961171c565b8b02836040015167ffffffffffffffff16148015611c4a5750825160ff168c145b15611c7d57806060015199508060a00151611c69578060800151611c72565b80608001516000035b985060029750611c88565b836001019350611b59565b505050505050509250925092565b60208201516000901515611d435760408051426020808301919091524482840152436060830181905260001901406080808401919091528351808403909101815260a090920192839052815191929182918401908083835b60208310611d0d5780518252601f199092019160209182019101611cee565b51815160209384036101000a60001901801990921691161790526040519190930181900390209187019190915250611dc3915050565b60208084015160408051808401929092528051808303840181529181019081905281519192909182918401908083835b60208310611d925780518252601f199092019160209182019101611d73565b51815160209384036101000a6000190180199092169116179052604051919093018190039020918701919091525050505b60208301518290811515611dd357fe5b069392505050565b611de3611f3c565b600080600080600088600301546005890111151515611dfe57fe5b611e0f87600563ffffffff611c9616565b60048a0154909550935060009250829150611e32876101f463ffffffff611c9616565b9050603281061515611e5857801515611e515760019150839250611e58565b6002840492505b506040805160c08101825265ffffffffffff42811682524381166020830152989098169088015260ff90931660608701526bffffffffffffffffffffffff16608086015250151560a0840152509092915050565b60005b8151811015611eff578181815181101515611ec657fe5b9060200190602002015183828601815181101515611ee057fe5b600160a060020a03909216602092830290910190910152600101611eaf565b50505050565b604080518082019091526000808252602082015290565b604080516060810182526000808252602082018190529181019190915290565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b815481835581811115611f9557600083815260209020611f95918101908301611f9a565b505050565b610dc291905b80821115611fd65780547fffffffff00000000000000000000000000000000000000000000000000000000168155600101611fa0565b5090565b5600a165627a7a7230582003b5b0e3e7471601c1f0771fc3583c63b733a6262629cfff172aae9468aa19740029
Swarm Source
bzzr://03b5b0e3e7471601c1f0771fc3583c63b733a6262629cfff172aae9468aa1974
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.