Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 157 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw ETH | 5785147 | 2445 days ago | IN | 0 ETH | 0.00031288 | ||||
Clear Zo Daily L... | 5731683 | 2454 days ago | IN | 0 ETH | 0.00072457 | ||||
Clear Zo Daily L... | 5731671 | 2454 days ago | IN | 0 ETH | 0.00072457 | ||||
Clear Zo Daily L... | 5731669 | 2454 days ago | IN | 0 ETH | 0.00072457 | ||||
Clear Zo Daily L... | 5713320 | 2458 days ago | IN | 0 ETH | 0.00072457 | ||||
Clear Zo Daily L... | 5713317 | 2458 days ago | IN | 0 ETH | 0.00072457 | ||||
Clear Zo Daily L... | 5699729 | 2460 days ago | IN | 0 ETH | 0.00072457 | ||||
Clear Zo Daily L... | 5694057 | 2461 days ago | IN | 0 ETH | 0.00034429 | ||||
Clear Zo Daily L... | 5691664 | 2461 days ago | IN | 0 ETH | 0.00034429 | ||||
Clear Zo Daily L... | 5689894 | 2462 days ago | IN | 0 ETH | 0.00072457 | ||||
Clear Zo Daily L... | 5685478 | 2462 days ago | IN | 0 ETH | 0.00072457 | ||||
Public Sell | 5684957 | 2463 days ago | IN | 0 ETH | 0.00048792 | ||||
Clear Zo Daily L... | 5679621 | 2463 days ago | IN | 0 ETH | 0.00072457 | ||||
Clear Zo Daily L... | 5677647 | 2464 days ago | IN | 0 ETH | 0.00072457 | ||||
Clear Zo Daily L... | 5672466 | 2465 days ago | IN | 0 ETH | 0.00049957 | ||||
Buy Zo Assets | 5671115 | 2465 days ago | IN | 0.025 ETH | 0.00063065 | ||||
Synthesize | 5671103 | 2465 days ago | IN | 0.003 ETH | 0.001 | ||||
Clear Zo Daily L... | 5666047 | 2466 days ago | IN | 0 ETH | 0.00036229 | ||||
Put On Sale | 5665617 | 2466 days ago | IN | 0 ETH | 0.00048871 | ||||
Buy Zo Assets | 5664617 | 2466 days ago | IN | 0.0125 ETH | 0.00046566 | ||||
Buy Zo Assets | 5664592 | 2466 days ago | IN | 0.0125 ETH | 0.00046566 | ||||
Buy Zo Assets | 5664589 | 2466 days ago | IN | 0.0125 ETH | 0.00067789 | ||||
Put On Sale | 5664261 | 2466 days ago | IN | 0 ETH | 0.00074526 | ||||
Get Synthesizati... | 5663892 | 2466 days ago | IN | 0 ETH | 0.00121825 | ||||
Synthesize | 5663867 | 2466 days ago | IN | 0.003 ETH | 0.005505 |
Latest 12 internal transactions
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
5785147 | 2445 days ago | 0.4336 ETH | ||||
5663892 | 2466 days ago | 0.003 ETH | ||||
5663745 | 2466 days ago | 0.003 ETH | ||||
5663721 | 2466 days ago | 0.003 ETH | ||||
5663596 | 2466 days ago | 0.003 ETH | ||||
5663585 | 2466 days ago | 0.003 ETH | ||||
5663572 | 2466 days ago | 0.003 ETH | ||||
5663555 | 2466 days ago | 0.003 ETH | ||||
5663550 | 2466 days ago | 0.003 ETH | ||||
5628462 | 2473 days ago | 0.0389 ETH | ||||
5620406 | 2474 days ago | 0.003 ETH | ||||
5614613 | 2475 days ago | 0.003 ETH |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xeAc5ba02...3C09aA629 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
AlchemyMove
Compiler Version
v0.4.23+commit.124ca40d
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-05-14 */ pragma solidity ^0.4.18; contract Manager { address public ceo; address public cfo; address public coo; address public cao; event OwnershipTransferred(address previousCeo, address newCeo); event Pause(); event Unpause(); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Manager() public { coo = msg.sender; cfo = 0x7810704C6197aFA95e940eF6F719dF32657AD5af; ceo = 0x96C0815aF056c5294Ad368e3FBDb39a1c9Ae4e2B; cao = 0xC4888491B404FfD15cA7F599D624b12a9D845725; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyCEO() { require(msg.sender == ceo); _; } modifier onlyCOO() { require(msg.sender == coo); _; } modifier onlyCAO() { require(msg.sender == cao); _; } bool allowTransfer = false; function changeAllowTransferState() public onlyCOO { if (allowTransfer) { allowTransfer = false; } else { allowTransfer = true; } } modifier whenTransferAllowed() { require(allowTransfer); _; } /** * @dev Allows the current owner to transfer control of the contract to a newCeo. * @param newCeo The address to transfer ownership to. */ function demiseCEO(address newCeo) public onlyCEO { require(newCeo != address(0)); emit OwnershipTransferred(ceo, newCeo); ceo = newCeo; } function setCFO(address newCfo) public onlyCEO { require(newCfo != address(0)); cfo = newCfo; } function setCOO(address newCoo) public onlyCEO { require(newCoo != address(0)); coo = newCoo; } function setCAO(address newCao) public onlyCEO { require(newCao != address(0)); cao = newCao; } bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyCAO whenNotPaused public { paused = true; emit Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyCAO whenPaused public { paused = false; emit Unpause(); } } contract AlchemyBase is Manager { // Assets of each account mapping (address => bytes32[8]) assets; // Event event Transfer(address from, address to); // Get all assets of a particular account function assetOf(address account) public view returns(bytes32[8]) { return assets[account]; } function _checkAndAdd(bytes32 x, bytes32 y) internal pure returns(bytes32) { bytes32 mask = bytes32(255); // 0x11111111 bytes32 result; uint maskedX; uint maskedY; uint maskedResult; for (uint i = 0; i < 31; i++) { // Get current mask if (i > 0) { mask = mask << 8; } // Get masked values maskedX = uint(x & mask); maskedY = uint(y & mask); maskedResult = maskedX + maskedY; // Prevent overflow require(maskedResult < (2 ** (8 * (i + 1)))); // Clear result digits in masked position result = (result ^ mask) & result; // Write to result result = result | bytes32(maskedResult); } return result; } function _checkAndSub(bytes32 x, bytes32 y) internal pure returns(bytes32) { bytes32 mask = bytes32(255); // 0x11111111 bytes32 result; uint maskedX; uint maskedY; uint maskedResult; for (uint i = 0; i < 31; i++) { // Get current mask if (i > 0) { mask = mask << 8; } // Get masked values maskedX = uint(x & mask); maskedY = uint(y & mask); // Ensure x >= y require(maskedX >= maskedY); // Calculate result maskedResult = maskedX - maskedY; // Clear result digits in masked position result = (result ^ mask) & result; // Write to result result = result | bytes32(maskedResult); } return result; } // Transfer assets from one account to another function transfer(address to, bytes32[8] value) public whenNotPaused whenTransferAllowed { // One can not transfer assets to self require(msg.sender != to); bytes32[8] memory assetFrom = assets[msg.sender]; bytes32[8] memory assetTo = assets[to]; for (uint256 i = 0; i < 8; i++) { assetFrom[i] = _checkAndSub(assetFrom[i], value[i]); assetTo[i] = _checkAndAdd(assetTo[i], value[i]); } assets[msg.sender] = assetFrom; assets[to] = assetTo; // Emit the transfer event emit Transfer(msg.sender, to); } // Withdraw ETH to the owner account. Ownable-->Pausable-->AlchemyBase function withdrawETH() external onlyCAO { cfo.transfer(address(this).balance); } } contract AlchemyPatent is AlchemyBase { // patent struct struct Patent { // current patent owner address patentOwner; // the time when owner get the patent uint256 beginTime; // whether this patent is on sale bool onSale; // the sale price uint256 price; // last deal price uint256 lastPrice; // the time when this sale is put on uint256 sellTime; } // Creator of each kind of asset mapping (uint16 => Patent) public patents; // patent fee ratio // Values 0-10,000 map to 0%-100% uint256 public feeRatio = 9705; uint256 public patentValidTime = 2 days; uint256 public patentSaleTimeDelay = 2 hours; // Event event RegisterCreator(address account, uint16 kind); event SellPatent(uint16 assetId, uint256 sellPrice); event ChangePatentSale(uint16 assetId, uint256 newPrice); event BuyPatent(uint16 assetId, address buyer); // set the patent fee ratio function setPatentFee(uint256 newFeeRatio) external onlyCOO { require(newFeeRatio <= 10000); feeRatio = newFeeRatio; } // sell the patent function sellPatent(uint16 assetId, uint256 sellPrice) public whenNotPaused { Patent memory patent = patents[assetId]; require(patent.patentOwner == msg.sender); if (patent.lastPrice > 0) { require(sellPrice <= 2 * patent.lastPrice); } else { require(sellPrice <= 1 ether); } require(!patent.onSale); patent.onSale = true; patent.price = sellPrice; patent.sellTime = now; patents[assetId] = patent; // Emit the event emit SellPatent(assetId, sellPrice); } function publicSell(uint16 assetId) public whenNotPaused { Patent memory patent = patents[assetId]; require(patent.patentOwner != address(0)); // this is a valid patent require(!patent.onSale); require(patent.beginTime + patentValidTime < now); patent.onSale = true; patent.price = patent.lastPrice; patent.sellTime = now; patents[assetId] = patent; // Emit the event emit SellPatent(assetId, patent.lastPrice); } // change sell price function changePatentSale(uint16 assetId, uint256 newPrice) external whenNotPaused { Patent memory patent = patents[assetId]; require(patent.patentOwner == msg.sender); if (patent.lastPrice > 0) { require(newPrice <= 2 * patent.lastPrice); } else { require(newPrice <= 1 ether); } require(patent.onSale == true); patent.price = newPrice; patents[assetId] = patent; // Emit the event emit ChangePatentSale(assetId, newPrice); } // buy patent function buyPatent(uint16 assetId) external payable whenNotPaused { Patent memory patent = patents[assetId]; require(patent.patentOwner != address(0)); // this is a valid patent require(patent.patentOwner != msg.sender); require(patent.onSale); require(msg.value >= patent.price); require(now >= patent.sellTime + patentSaleTimeDelay); patent.patentOwner.transfer(patent.price / 10000 * feeRatio); patent.patentOwner = msg.sender; patent.beginTime = now; patent.onSale = false; patent.lastPrice = patent.price; patents[assetId] = patent; //Emit the event emit BuyPatent(assetId, msg.sender); } } contract ChemistryInterface { function isChemistry() public pure returns (bool); // function turnOnFurnace(bytes32 x0, bytes32 x1, bytes32 x2, bytes32 x3) public returns (bytes32 r0, bytes32 r1, bytes32 r2, bytes32 r3); function turnOnFurnace(uint16[5] inputAssets, uint128 addition) public returns (uint16[5]); function computeCooldownTime(uint128 typeAdd, uint256 baseTime) public returns (uint256); } contract SkinInterface { function getActiveSkin(address account) public view returns (uint128); } contract AlchemySynthesize is AlchemyPatent { // Synthesize formula ChemistryInterface public chemistry; SkinInterface public skinContract; // Cooldown after submit a after submit a transformation request uint256[9] public cooldownLevels = [ 5 minutes, 10 minutes, 15 minutes, 20 minutes, 25 minutes, 30 minutes, 35 minutes, 40 minutes, 45 minutes ]; // patent fee for each level uint256[9] public pFees = [ 0, 2 finney, 4 finney, 8 finney, 12 finney, 18 finney, 26 finney, 36 finney, 48 finney ]; // alchemy furnace struct struct Furnace { // the pending assets for synthesize uint16[5] pendingAssets; // cooldown end time of synthesise uint256 cooldownEndTime; // whether this furnace is using bool inSynthesization; // uint256 count; } uint256 public maxSCount = 10; // furnace of each account mapping (address => Furnace) public accountsToFurnace; // alchemy level of each asset mapping (uint16 => uint256) public assetLevel; // Pre-paid ether for synthesization, will be returned to user if the synthesization failed (minus gas). uint256 public prePaidFee = 1000000 * 3000000000; // (1million gas * 3 gwei) bool public isSynthesizeAllowed = false; // When a synthesization request starts, our daemon needs to call getSynthesizationResult() after cooldown. // event SynthesizeStart(address account); event AutoSynthesize(address account, uint256 cooldownEndTime); event SynthesizeSuccess(address account); // Initialize the asset level function initializeLevel() public onlyCOO { // Level of assets uint8[9] memory levelSplits = [4, // end of level 0. start of level is 0 19, // end of level 1 46, // end of level 2 82, // end of level 3 125, // end of level 4 156, 180, 195, 198]; // end of level 8 uint256 currentLevel = 0; for (uint8 i = 0; i < 198; i ++) { if (i == levelSplits[currentLevel]) { currentLevel ++; } assetLevel[uint16(i)] = currentLevel; } } function setAssetLevel(uint16 assetId, uint256 level) public onlyCOO { assetLevel[assetId] = level; } function setMaxCount(uint256 max) external onlyCOO { maxSCount = max; } function setPatentFees(uint256[9] newFees) external onlyCOO { for (uint256 i = 0; i < 9; i++) { pFees[i] = newFees[i]; } } function changeSynthesizeAllowed(bool newState) external onlyCOO { isSynthesizeAllowed = newState; } // Get furnace information function getFurnace(address account) public view returns (uint16[5], uint256, bool, uint256) { return (accountsToFurnace[account].pendingAssets, accountsToFurnace[account].cooldownEndTime, accountsToFurnace[account].inSynthesization, accountsToFurnace[account].count); } // Set chemistry science contract address function setChemistryAddress(address chemistryAddress) external onlyCOO { ChemistryInterface candidateContract = ChemistryInterface(chemistryAddress); require(candidateContract.isChemistry()); chemistry = candidateContract; } // Set skin contract address function setSkinContract(address skinAddress) external onlyCOO { skinContract = SkinInterface(skinAddress); } // setPrePaidFee: set advance amount, only owner can call this function setPrePaidFee(uint256 newPrePaidFee) external onlyCOO { prePaidFee = newPrePaidFee; } // _isCooldownReady: check whether cooldown period has been passed function _isCooldownReady(address account) internal view returns (bool) { return (accountsToFurnace[account].cooldownEndTime <= now); } // synthesize: call _isCooldownReady, pending assets, fire SynthesizeStart event function synthesize(uint16[5] inputAssets, uint256 sCount) public payable whenNotPaused { require(isSynthesizeAllowed == true); // Check msg.sender is not in another synthesizing process require(accountsToFurnace[msg.sender].inSynthesization == false); // require(sCount <= maxSCount && sCount > 0); // Check whether assets are valid bytes32[8] memory asset = assets[msg.sender]; bytes32 mask; // 0x11111111 uint256 maskedValue; uint256 count; bytes32 _asset; uint256 pos; uint256 maxLevel = 0; uint256 totalFee = 0; uint256 _assetLevel; Patent memory _patent; uint16 currentAsset; for (uint256 i = 0; i < 5; i++) { currentAsset = inputAssets[i]; if (currentAsset < 248) { _asset = asset[currentAsset / 31]; pos = currentAsset % 31; mask = bytes32(255) << (8 * pos); maskedValue = uint256(_asset & mask); require(maskedValue >= (sCount << (8*pos))); maskedValue -= (sCount << (8*pos)); _asset = ((_asset ^ mask) & _asset) | bytes32(maskedValue); asset[currentAsset / 31] = _asset; count += 1; // handle patent fee _assetLevel = assetLevel[currentAsset]; if (_assetLevel > maxLevel) { maxLevel = _assetLevel; } if (_assetLevel > 0) { _patent = patents[currentAsset]; if (_patent.patentOwner != address(0) && _patent.patentOwner != msg.sender && !_patent.onSale && (_patent.beginTime + patentValidTime > now)) { maskedValue = pFees[_assetLevel] * sCount; _patent.patentOwner.transfer(maskedValue / 10000 * feeRatio); totalFee += maskedValue; } } } } require(msg.value >= prePaidFee + totalFee); require(count >= 2 && count <= 5); // Check whether cooldown has ends require(_isCooldownReady(msg.sender)); uint128 skinType = skinContract.getActiveSkin(msg.sender); uint256 _cooldownTime = chemistry.computeCooldownTime(skinType, cooldownLevels[maxLevel]); accountsToFurnace[msg.sender].pendingAssets = inputAssets; accountsToFurnace[msg.sender].cooldownEndTime = now + _cooldownTime; accountsToFurnace[msg.sender].inSynthesization = true; accountsToFurnace[msg.sender].count = sCount; assets[msg.sender] = asset; // Emit SnthesizeStart event // SynthesizeStart(msg.sender); emit AutoSynthesize(msg.sender, accountsToFurnace[msg.sender].cooldownEndTime); } function getPatentFee(address account, uint16[5] inputAssets, uint256 sCount) external view returns (uint256) { uint256 totalFee = 0; uint256 _assetLevel; Patent memory _patent; uint16 currentAsset; for (uint256 i = 0; i < 5; i++) { currentAsset = inputAssets[i]; if (currentAsset < 248) { // handle patent fee _assetLevel = assetLevel[currentAsset]; if (_assetLevel > 0) { _patent = patents[currentAsset]; if (_patent.patentOwner != address(0) && _patent.patentOwner != account && !_patent.onSale && (_patent.beginTime + patentValidTime > now)) { totalFee += pFees[_assetLevel] * sCount; } } } } return totalFee; } // getSynthesizationResult: auto synthesize daemin call this. if cooldown time has passed, give final result // Anyone can call this function, if they are willing to pay the gas function getSynthesizationResult(address account) external whenNotPaused { // Make sure this account is in synthesization require(accountsToFurnace[account].inSynthesization); // Make sure the cooldown has ends require(_isCooldownReady(account)); // Get result using pending assets uint16[5] memory _pendingAssets = accountsToFurnace[account].pendingAssets; uint128 skinType = skinContract.getActiveSkin(account); uint16[5] memory resultAssets; //= chemistry.turnOnFurnace(_pendingAssets, skinType); // Write result bytes32[8] memory asset = assets[account]; bytes32 mask; // 0x11111111 uint256 maskedValue; uint256 j; uint256 pos; for (uint256 k = 0; k < accountsToFurnace[account].count; k++) { resultAssets = chemistry.turnOnFurnace(_pendingAssets, skinType); for (uint256 i = 0; i < 5; i++) { if (resultAssets[i] < 248) { j = resultAssets[i] / 31; pos = resultAssets[i] % 31; mask = bytes32(255) << (8 * pos); maskedValue = uint256(asset[j] & mask); require(maskedValue < (uint256(255) << (8*pos))); maskedValue += (uint256(1) << (8*pos)); asset[j] = ((asset[j] ^ mask) & asset[j]) | bytes32(maskedValue); // handle patent if (resultAssets[i] > 3 && patents[resultAssets[i]].patentOwner == address(0)) { patents[resultAssets[i]] = Patent({patentOwner: account, beginTime: now, onSale: false, price: 0, lastPrice: 100 finney, sellTime: 0}); // Emit the event emit RegisterCreator(account, resultAssets[i]); } } } } // Mark this synthesization as finished accountsToFurnace[account].inSynthesization = false; accountsToFurnace[account].count = 0; assets[account] = asset; msg.sender.transfer(prePaidFee); emit SynthesizeSuccess(account); } } contract AlchemyMinting is AlchemySynthesize { // Limit the nubmer of zero order assets the owner can create every day uint256 public zoDailyLimit = 1000; // we can create 4 * 1000 = 4000 0-order asset each day uint256[4] public zoCreated; // Limit the number each account can buy every day mapping(address => bytes32) public accountsBoughtZoAsset; mapping(address => uint256) public accountsZoLastRefreshTime; // Price of zero order assets uint256 public zoPrice = 2500 szabo; // Last daily limit refresh time uint256 public zoLastRefreshTime = now; // Event event BuyZeroOrderAsset(address account, bytes32 values); // To ensure scarcity, we are unable to change the max numbers of zo assets every day. // We are only able to modify the price function setZoPrice(uint256 newPrice) external onlyCOO { zoPrice = newPrice; } // Buy zo assets from us function buyZoAssets(bytes32 values) external payable whenNotPaused { // Check whether we need to refresh the daily limit bytes32 history = accountsBoughtZoAsset[msg.sender]; if (accountsZoLastRefreshTime[msg.sender] == uint256(0)) { // This account's first time to buy zo asset, we do not need to clear accountsBoughtZoAsset accountsZoLastRefreshTime[msg.sender] = zoLastRefreshTime; } else { if (accountsZoLastRefreshTime[msg.sender] < zoLastRefreshTime) { history = bytes32(0); accountsZoLastRefreshTime[msg.sender] = zoLastRefreshTime; } } uint256 currentCount = 0; uint256 count = 0; bytes32 mask = bytes32(255); // 0x11111111 uint256 maskedValue; uint256 maskedResult; bytes32 asset = assets[msg.sender][0]; for (uint256 i = 0; i < 4; i++) { if (i > 0) { mask = mask << 8; } maskedValue = uint256(values & mask); currentCount = maskedValue / 2 ** (8 * i); count += currentCount; // Check whether this account has bought too many assets maskedResult = uint256(history & mask); maskedResult += maskedValue; require(maskedResult < (2 ** (8 * (i + 1)))); // Update account bought history history = ((history ^ mask) & history) | bytes32(maskedResult); // Check whether this account will have too many assets maskedResult = uint256(asset & mask); maskedResult += maskedValue; require(maskedResult < (2 ** (8 * (i + 1)))); // Update user asset asset = ((asset ^ mask) & asset) | bytes32(maskedResult); // Check whether we have enough assets to sell require(zoCreated[i] + currentCount <= zoDailyLimit); // Update our creation history zoCreated[i] += currentCount; } // Ensure this account buy at least one zo asset require(count > 0); // Check whether there are enough money for payment require(msg.value >= count * zoPrice); // Write updated user asset assets[msg.sender][0] = asset; // Write updated history accountsBoughtZoAsset[msg.sender] = history; // Emit BuyZeroOrderAsset event emit BuyZeroOrderAsset(msg.sender, values); } // Our daemon will refresh daily limit function clearZoDailyLimit() external onlyCOO { uint256 nextDay = zoLastRefreshTime + 1 days; if (now > nextDay) { zoLastRefreshTime = nextDay; for (uint256 i = 0; i < 4; i++) { zoCreated[i] =0; } } } } contract AlchemyMarket is AlchemyMinting { // Sale order struct struct SaleOrder { // Asset id to be sold uint64 assetId; // Sale amount uint64 amount; // Desired price uint128 desiredPrice; // Seller address seller; } // Max number of sale orders of each account uint128 public maxSaleNum = 20; // Cut ratio for a transaction // Values 0-10,000 map to 0%-100% uint256 public trCut = 275; // Next sale id uint256 public nextSaleId = 1; // Sale orders list mapping (uint256 => SaleOrder) public saleOrderList; // Sale information of each account mapping (address => uint256) public accountToSaleNum; // events event PutOnSale(address account, uint256 saleId); event WithdrawSale(address account, uint256 saleId); event ChangeSale(address account, uint256 saleId); event BuyInMarket(address buyer, uint256 saleId, uint256 amount); event SaleClear(uint256 saleId); // functions function setTrCut(uint256 newCut) public onlyCOO { trCut = newCut; } // Put asset on sale function putOnSale(uint256 assetId, uint256 amount, uint256 price) external whenNotPaused { // One account can have no more than maxSaleNum sale orders require(accountToSaleNum[msg.sender] < maxSaleNum); // check whether zero order asset is to be sold // which is not allowed require(assetId > 3 && assetId < 248); require(amount > 0 && amount < 256); uint256 assetFloor = assetId / 31; uint256 assetPos = assetId - 31 * assetFloor; bytes32 allAsset = assets[msg.sender][assetFloor]; bytes32 mask = bytes32(255) << (8 * assetPos); // 0x11111111 uint256 maskedValue; uint256 maskedResult; uint256 addAmount = amount << (8 * assetPos); // check whether there are enough unpending assets to sell maskedValue = uint256(allAsset & mask); require(addAmount <= maskedValue); // Remove assets to be sold from owner maskedResult = maskedValue - addAmount; allAsset = ((allAsset ^ mask) & allAsset) | bytes32(maskedResult); assets[msg.sender][assetFloor] = allAsset; // Put on sale SaleOrder memory saleorder = SaleOrder( uint64(assetId), uint64(amount), uint128(price), msg.sender ); saleOrderList[nextSaleId] = saleorder; nextSaleId += 1; accountToSaleNum[msg.sender] += 1; // Emit the Approval event emit PutOnSale(msg.sender, nextSaleId-1); } // Withdraw an sale order function withdrawSale(uint256 saleId) external whenNotPaused { // Can only withdraw self's sale order require(saleOrderList[saleId].seller == msg.sender); uint256 assetId = uint256(saleOrderList[saleId].assetId); uint256 assetFloor = assetId / 31; uint256 assetPos = assetId - 31 * assetFloor; bytes32 allAsset = assets[msg.sender][assetFloor]; bytes32 mask = bytes32(255) << (8 * assetPos); // 0x11111111 uint256 maskedValue; uint256 maskedResult; uint256 addAmount = uint256(saleOrderList[saleId].amount) << (8 * assetPos); // check whether this account will have too many assets maskedValue = uint256(allAsset & mask); require(addAmount + maskedValue < 2**(8 * (assetPos + 1))); // Retransfer asset to be sold from owner maskedResult = maskedValue + addAmount; allAsset = ((allAsset ^ mask) & allAsset) | bytes32(maskedResult); assets[msg.sender][assetFloor] = allAsset; // Delete sale order delete saleOrderList[saleId]; accountToSaleNum[msg.sender] -= 1; // Emit the cancel event emit WithdrawSale(msg.sender, saleId); } // // Change sale order // function changeSale(uint256 assetId, uint256 amount, uint256 price, uint256 saleId) external whenNotPaused { // // Check if msg sender is the seller // require(msg.sender == saleOrderList[saleId].seller); // // } // Buy assets in market function buyInMarket(uint256 saleId, uint256 amount) external payable whenNotPaused { address seller = saleOrderList[saleId].seller; // Check whether the saleId is a valid sale order require(seller != address(0)); // Check the sender isn't the seller require(msg.sender != seller); require(saleOrderList[saleId].amount >= uint64(amount)); // Check whether pay value is enough require(msg.value / saleOrderList[saleId].desiredPrice >= amount); uint256 totalprice = amount * saleOrderList[saleId].desiredPrice; uint64 assetId = saleOrderList[saleId].assetId; uint256 assetFloor = assetId / 31; uint256 assetPos = assetId - 31 * assetFloor; bytes32 allAsset = assets[msg.sender][assetFloor]; bytes32 mask = bytes32(255) << (8 * assetPos); // 0x11111111 uint256 maskedValue; uint256 maskedResult; uint256 addAmount = amount << (8 * assetPos); // check whether this account will have too many assets maskedValue = uint256(allAsset & mask); require(addAmount + maskedValue < 2**(8 * (assetPos + 1))); // Transfer assets to buyer maskedResult = maskedValue + addAmount; allAsset = ((allAsset ^ mask) & allAsset) | bytes32(maskedResult); assets[msg.sender][assetFloor] = allAsset; saleOrderList[saleId].amount -= uint64(amount); // Cut and then send the proceeds to seller uint256 sellerProceeds = totalprice - _computeCut(totalprice); seller.transfer(sellerProceeds); // Emit the buy event emit BuyInMarket(msg.sender, saleId, amount); // If the sale has complete, clear this order if (saleOrderList[saleId].amount == 0) { accountToSaleNum[seller] -= 1; delete saleOrderList[saleId]; // Emit the clear event emit SaleClear(saleId); } } // Compute the marketCut function _computeCut(uint256 _price) internal view returns (uint256) { return _price / 10000 * trCut; } } contract AlchemyMove is AlchemyMarket { // bool public isMovingEnable = true; // function disableMoving() external onlyCOO { isMovingEnable = false; } // move data of player function moveAccountData(address[] accounts, bytes32[] _assets, uint256[] saleNums) external onlyCOO { require(isMovingEnable); uint256 j; address account; for (uint256 i = 0; i < accounts.length; i++) { account = accounts[i]; for (j = 0; j < 8; j++) { assets[account][j] = _assets[j + 8*i]; } accountToSaleNum[account] = saleNums[i]; } } function moveFurnaceData(address[] accounts, uint16[] _pendingAssets, uint256[] cooldownTimes, bool[] furnaceState, uint256[] counts) external onlyCOO { require(isMovingEnable); Furnace memory _furnace; uint256 j; address account; for (uint256 i = 0; i < accounts.length; i++) { account = accounts[i]; for (j = 0; j < 5; j++) { _furnace.pendingAssets[j] = _pendingAssets[j + 5*i]; } _furnace.cooldownEndTime = cooldownTimes[i]; _furnace.inSynthesization = furnaceState[i]; _furnace.count = counts[i]; accountsToFurnace[account] = _furnace; } } function movePatentData(uint16[] ids, address[] owners, uint256[] beginTimes, bool[] onsaleStates, uint256[] prices, uint256[] lastprices, uint256[] selltimes) external onlyCOO { require(isMovingEnable); //Patent memory _patent; uint16 id; for (uint256 i = 0; i < ids.length; i++) { id = ids[i]; /*_patent.patentOwner = owners[i]; _patent.beginTime = beginTimes[i]; _patent.onSale = onsaleStates[i]; _patent.price = prices[i]; _patent.lastPrice = lastprices[i]; _patent.sellTime = selltimes[i];*/ patents[id] = Patent({patentOwner: owners[i], beginTime: beginTimes[i], onSale: onsaleStates[i], price: prices[i], lastPrice: lastprices[i], sellTime: selltimes[i]}); } } function moveMarketData(uint256[] saleIds, uint64[] assetIds, uint64[] amounts, uint128[] desiredPrices, address[] sellers) external onlyCOO { require(isMovingEnable); SaleOrder memory _saleOrder; uint256 _saleId; for (uint256 i = 0; i < saleIds.length; i++) { _saleId = saleIds[i]; _saleOrder.assetId = assetIds[i]; _saleOrder.amount = amounts[i]; _saleOrder.desiredPrice = desiredPrices[i]; _saleOrder.seller = sellers[i]; saleOrderList[_saleId] = _saleOrder; } } function writeNextId(uint256 _id) external onlyCOO { require(isMovingEnable); nextSaleId = _id; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"zoDailyLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"saleId","type":"uint256"}],"name":"withdrawSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"accounts","type":"address[]"},{"name":"_assets","type":"bytes32[]"},{"name":"saleNums","type":"uint256[]"}],"name":"moveAccountData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"coo","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"chemistry","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"zoCreated","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"assetId","type":"uint256"},{"name":"amount","type":"uint256"},{"name":"price","type":"uint256"}],"name":"putOnSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"saleOrderList","outputs":[{"name":"assetId","type":"uint64"},{"name":"amount","type":"uint64"},{"name":"desiredPrice","type":"uint128"},{"name":"seller","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"writeNextId","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cfo","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"accountToSaleNum","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newFeeRatio","type":"uint256"}],"name":"setPatentFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newCoo","type":"address"}],"name":"setCOO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"assetId","type":"uint16"},{"name":"sellPrice","type":"uint256"}],"name":"sellPatent","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"accountsZoLastRefreshTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"skinAddress","type":"address"}],"name":"setSkinContract","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cao","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"patentValidTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newPrice","type":"uint256"}],"name":"setZoPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"feeRatio","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"assetId","type":"uint16"},{"name":"newPrice","type":"uint256"}],"name":"changePatentSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newCfo","type":"address"}],"name":"setCFO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"trCut","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"getFurnace","outputs":[{"name":"","type":"uint16[5]"},{"name":"","type":"uint256"},{"name":"","type":"bool"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isSynthesizeAllowed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"saleId","type":"uint256"},{"name":"amount","type":"uint256"}],"name":"buyInMarket","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"assetId","type":"uint16"}],"name":"publicSell","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"assetOf","outputs":[{"name":"","type":"bytes32[8]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"cooldownLevels","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"prePaidFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newState","type":"bool"}],"name":"changeSynthesizeAllowed","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"bytes32[8]"}],"name":"transfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"saleIds","type":"uint256[]"},{"name":"assetIds","type":"uint64[]"},{"name":"amounts","type":"uint64[]"},{"name":"desiredPrices","type":"uint128[]"},{"name":"sellers","type":"address[]"}],"name":"moveMarketData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"accountsBoughtZoAsset","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint16"}],"name":"patents","outputs":[{"name":"patentOwner","type":"address"},{"name":"beginTime","type":"uint256"},{"name":"onSale","type":"bool"},{"name":"price","type":"uint256"},{"name":"lastPrice","type":"uint256"},{"name":"sellTime","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ceo","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"zoPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxSaleNum","outputs":[{"name":"","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newPrePaidFee","type":"uint256"}],"name":"setPrePaidFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"clearZoDailyLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint16"}],"name":"assetLevel","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"max","type":"uint256"}],"name":"setMaxCount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"getSynthesizationResult","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"assetId","type":"uint16"}],"name":"buyPatent","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"inputAssets","type":"uint16[5]"},{"name":"sCount","type":"uint256"}],"name":"synthesize","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"values","type":"bytes32"}],"name":"buyZoAssets","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"newCao","type":"address"}],"name":"setCAO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"disableMoving","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"changeAllowTransferState","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"accounts","type":"address[]"},{"name":"_pendingAssets","type":"uint16[]"},{"name":"cooldownTimes","type":"uint256[]"},{"name":"furnaceState","type":"bool[]"},{"name":"counts","type":"uint256[]"}],"name":"moveFurnaceData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"},{"name":"inputAssets","type":"uint16[5]"},{"name":"sCount","type":"uint256"}],"name":"getPatentFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"zoLastRefreshTime","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"patentSaleTimeDelay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isMovingEnable","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newCut","type":"uint256"}],"name":"setTrCut","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"pFees","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"ids","type":"uint16[]"},{"name":"owners","type":"address[]"},{"name":"beginTimes","type":"uint256[]"},{"name":"onsaleStates","type":"bool[]"},{"name":"prices","type":"uint256[]"},{"name":"lastprices","type":"uint256[]"},{"name":"selltimes","type":"uint256[]"}],"name":"movePatentData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"nextSaleId","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"withdrawETH","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"chemistryAddress","type":"address"}],"name":"setChemistryAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"maxSCount","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"accountsToFurnace","outputs":[{"name":"cooldownEndTime","type":"uint256"},{"name":"inSynthesization","type":"bool"},{"name":"count","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"initializeLevel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"assetId","type":"uint16"},{"name":"level","type":"uint256"}],"name":"setAssetLevel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"skinContract","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newFees","type":"uint256[9]"}],"name":"setPatentFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newCeo","type":"address"}],"name":"demiseCEO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"},{"indexed":false,"name":"saleId","type":"uint256"}],"name":"PutOnSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"},{"indexed":false,"name":"saleId","type":"uint256"}],"name":"WithdrawSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"},{"indexed":false,"name":"saleId","type":"uint256"}],"name":"ChangeSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"buyer","type":"address"},{"indexed":false,"name":"saleId","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"BuyInMarket","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"saleId","type":"uint256"}],"name":"SaleClear","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"},{"indexed":false,"name":"values","type":"bytes32"}],"name":"BuyZeroOrderAsset","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"},{"indexed":false,"name":"cooldownEndTime","type":"uint256"}],"name":"AutoSynthesize","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"SynthesizeSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"},{"indexed":false,"name":"kind","type":"uint16"}],"name":"RegisterCreator","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"assetId","type":"uint16"},{"indexed":false,"name":"sellPrice","type":"uint256"}],"name":"SellPatent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"assetId","type":"uint16"},{"indexed":false,"name":"newPrice","type":"uint256"}],"name":"ChangePatentSale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"assetId","type":"uint16"},{"indexed":false,"name":"buyer","type":"address"}],"name":"BuyPatent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"from","type":"address"},{"indexed":false,"name":"to","type":"address"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"previousCeo","type":"address"},{"indexed":false,"name":"newCeo","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"}]
Deployed Bytecode
0x60806040526004361061031d5763ffffffff60e060020a600035041662e62620811461032257806302ce8ac91461034957806304812aaf1461036357806307cdee491461039b5780630f18a530146103cc57806311d32f7d146103e1578063121c5e91146103f95780631808c6a9146104175780631bcdd57d146104735780631ed203471461048b578063207b0266146104a057806321ac8967146104c15780632ba73c15146104d95780632cdf2bfd146104fa5780632ed15894146105195780632f1c935e1461053a5780632f94afba1461055b5780633463c5c7146105705780633e31c77f146105855780633f4ba83a1461059d57806341744dd4146105b257806341dc02cf146105c75780634e0a3379146105e657806356f913991461060757806357cfd2961461061c5780635a65f0041461068c5780635c975abb146106b557806369d0b5e2146106ca5780636f5eb4b5146106d857806371f96211146106f457806377f954441461074e5780637b04b1f81461076657806380c4e5c51461077b57806381f91c4a1461079557806382f2d8d7146107e657806383d3618f146108365780638456cb59146108575780638b7a8f6d1461086c578063908921fc146108c557806394efadea146108da57806395a4f76d146108ef57806397b3116e14610920578063990ae72714610938578063a1420a8c1461094d578063a35e617f14610969578063a6113c0d14610981578063acbd9563146109a2578063af5c6f38146109b1578063bc27c7bb146109e9578063bca3eb24146109f4578063bd8c564314610a15578063c04c68eb14610a2a578063c79403f514610a3f578063cec33f4e14610a8f578063d0cf49e914610ab5578063d1dfdc0714610aca578063d3bdd24214610adf578063dba9a8a214610af4578063dcbac58a14610b0c578063de326c1e14610b24578063deb077b914610b8c578063e086e5ec14610ba1578063eb0db6ac14610bb6578063f5878d4014610bd7578063f87f9b2214610bec578063f883dfb514610c2b578063f913b91914610c40578063fb98a40914610c5f578063fce1e3e914610c74578063fde1773314610c8b575b600080fd5b34801561032e57600080fd5b50610337610cac565b60408051918252519081900360200190f35b34801561035557600080fd5b50610361600435610cb2565b005b34801561036f57600080fd5b506103616024600480358281019290820135918135808301929082013591604435918201910135610e65565b3480156103a757600080fd5b506103b0610f63565b60408051600160a060020a039092168252519081900360200190f35b3480156103d857600080fd5b506103b0610f72565b3480156103ed57600080fd5b50610337600435610f81565b34801561040557600080fd5b50610361600435602435604435610f95565b34801561042357600080fd5b5061042f6004356111eb565b6040805167ffffffffffffffff95861681529390941660208401526001608060020a0390911682840152600160a060020a0316606082015290519081900360800190f35b34801561047f57600080fd5b50610361600435611249565b34801561049757600080fd5b506103b061127a565b3480156104ac57600080fd5b50610337600160a060020a0360043516611289565b3480156104cd57600080fd5b5061036160043561129b565b3480156104e557600080fd5b50610361600160a060020a03600435166112ca565b34801561050657600080fd5b5061036161ffff6004351660243561131c565b34801561052557600080fd5b50610337600160a060020a03600435166114bd565b34801561054657600080fd5b50610361600160a060020a03600435166114cf565b34801561056757600080fd5b506103b061150c565b34801561057c57600080fd5b5061033761151b565b34801561059157600080fd5b50610361600435611521565b3480156105a957600080fd5b50610361611541565b3480156105be57600080fd5b506103376115be565b3480156105d357600080fd5b5061036161ffff600435166024356115c4565b3480156105f257600080fd5b50610361600160a060020a036004351661175d565b34801561061357600080fd5b506103376117af565b34801561062857600080fd5b5061063d600160a060020a03600435166117b5565b604051808560a080838360005b8381101561066257818101518382015260200161064a565b50505050919091019485525050901515602083015260408083019190915251908190036060019150f35b34801561069857600080fd5b506106a1611852565b604080519115158252519081900360200190f35b3480156106c157600080fd5b506106a161185b565b61036160043560243561186b565b3480156106e457600080fd5b5061036161ffff60043516611bce565b34801561070057600080fd5b50610715600160a060020a0360043516611d47565b604051808261010080838360005b8381101561073b578181015183820152602001610723565b5050505090500191505060405180910390f35b34801561075a57600080fd5b50610337600435611d9b565b34801561077257600080fd5b50610337611da8565b34801561078757600080fd5b506103616004351515611dae565b3480156107a157600080fd5b50604080516101008082019092526103619160048035600160a060020a03169236926101249190602490600890839083908082843750939650611ddc95505050505050565b3480156107f257600080fd5b506103616024600480358281019290820135918135808301929082013591604435808301929082013591606435808301929082013591608435918201910135612001565b34801561084257600080fd5b50610337600160a060020a0360043516612194565b34801561086357600080fd5b506103616121a6565b34801561087857600080fd5b5061088861ffff60043516612228565b60408051600160a060020a0390971687526020870195909552921515858501526060850191909152608084015260a0830152519081900360c00190f35b3480156108d157600080fd5b506103b061226b565b3480156108e657600080fd5b5061033761227a565b3480156108fb57600080fd5b50610904612280565b604080516001608060020a039092168252519081900360200190f35b34801561092c57600080fd5b5061036160043561228f565b34801561094457600080fd5b506103616122af565b34801561095957600080fd5b5061033761ffff60043516612310565b34801561097557600080fd5b50610361600435612322565b34801561098d57600080fd5b50610361600160a060020a0360043516612342565b61036161ffff6004351661297d565b6040805160a081810190925261036191369160049160a4919083906005908390839080828437509396505092359350612b8492505050565b61036160043561317d565b348015610a0057600080fd5b50610361600160a060020a03600435166133a6565b348015610a2157600080fd5b506103616133f8565b348015610a3657600080fd5b5061036161341f565b348015610a4b57600080fd5b5061036160246004803582810192908201359181358083019290820135916044358083019290820135916064358083019290820135916084359182019101356134b8565b348015610a9b57600080fd5b50610337600160a060020a0360043516602460c43561363b565b348015610ac157600080fd5b50610337613778565b348015610ad657600080fd5b5061033761377e565b348015610aeb57600080fd5b506106a1613784565b348015610b0057600080fd5b5061036160043561378d565b348015610b1857600080fd5b506103376004356137ad565b348015610b3057600080fd5b50610361602460048035828101929082013591813580830192908201359160443580830192908201359160643580830192908201359160843580830192908201359160a43580830192908201359160c4359182019101356137ba565b348015610b9857600080fd5b5061033761395a565b348015610bad57600080fd5b50610361613960565b348015610bc257600080fd5b50610361600160a060020a03600435166139b9565b348015610be357600080fd5b50610337613a72565b348015610bf857600080fd5b50610c0d600160a060020a0360043516613a78565b60408051938452911515602084015282820152519081900360600190f35b348015610c3757600080fd5b50610361613a9f565b348015610c4c57600080fd5b5061036161ffff60043516602435613b6c565b348015610c6b57600080fd5b506103b0613b9e565b348015610c8057600080fd5b506103616004613bad565b348015610c9757600080fd5b50610361600160a060020a0360043516613c00565b60225481565b600080600080600080600080600360159054906101000a900460ff16151515610cda57600080fd5b6000898152602e602052604090206001015433600160a060020a03908116911614610d0457600080fd5b6000898152602e602052604090205467ffffffffffffffff169750601f88600160a060020a03331660009081526004602052604090209190049750601f8802890396508760088110610d5257fe5b015460008a8152602e602052604090205490955060ff6008888102600290810a928302975087891696506801000000000000000090930467ffffffffffffffff1690910292506001880102900a81840110610dac57600080fd5b33600160a060020a03166000908152600460205260409020818401868618909616861795925085908860088110610ddf57fe5b01556000898152602e602090815260408083208381556001018054600160a060020a031916905533600160a060020a0316808452602f835292819020805460001901905580519283529082018b905280517f0d0e55f4e2a77f6d27f3ecdbe59fb9f5b4f4de61c10b3243e99905d4763baab69281900390910190a1505050505050505050565b6002546000908190819033600160a060020a03908116911614610e8757600080fd5b60305460ff161515610e9857600080fd5b5060005b87811015610f5857888882818110610eb057fe5b90506020020135600160a060020a03169150600092505b6008831015610f1e578686600883028501818110610ee157fe5b600160a060020a0385166000908152600460209081526040909120910292909201359190508460088110610f1157fe5b0155600190920191610ec7565b848482818110610f2a57fe5b600160a060020a0385166000908152602f602090815260409091209102929092013590915550600101610e9c565b505050505050505050565b600254600160a060020a031681565b600954600160a060020a031681565b60238160048110610f8e57fe5b0154905081565b6000806000806000806000610fa8613d72565b60035460a860020a900460ff1615610fbf57600080fd5b602b54600160a060020a0333166000908152602f60205260409020546001608060020a0390911611610ff057600080fd5b60038b118015611000575060f88b105b151561100b57600080fd5b60008a11801561101c57506101008a105b151561102757600080fd5b33600160a060020a03166000908152600460205260409020601f808d04995089028c039750886008811061105757fe5b015495506008870260020a60ff8102955085871694508a0291508382111561107e57600080fd5b33600160a060020a031660009081526004602052604090208285038787189097168717969350869089600881106110b157fe5b0155506040805160808101825267ffffffffffffffff808d1682528b811660208084019182526001608060020a03808e16858701908152600160a060020a0333811660608801818152602d80546000908152602e88528b81208b5181549a519751891670010000000000000000000000000000000002978c1668010000000000000000026fffffffffffffffff00000000000000001991909c1667ffffffffffffffff19909b169a909a17999099169990991790951693909317865591516001958601805491909216600160a060020a0319909116179055815484018255808552602f8352938690208054909301909255905484519283526000190190820152825191927f490fad3155d80ff0da3b5e2676a2b0121544ec602724a25f5f41157862ad582a92918290030190a15050505050505050505050565b602e602052600090815260409020805460019091015467ffffffffffffffff80831692680100000000000000008104909116917001000000000000000000000000000000009091046001608060020a031690600160a060020a031684565b60025433600160a060020a0390811691161461126457600080fd5b60305460ff16151561127557600080fd5b602d55565b600154600160a060020a031681565b602f6020526000908152604090205481565b60025433600160a060020a039081169116146112b657600080fd5b6127108111156112c557600080fd5b600655565b60005433600160a060020a039081169116146112e557600080fd5b600160a060020a03811615156112fa57600080fd5b60028054600160a060020a031916600160a060020a0392909216919091179055565b611324613d99565b60035460a860020a900460ff161561133b57600080fd5b5061ffff8216600090815260056020818152604092839020835160c0810185528154600160a060020a03908116808352600184015494830194909452600283015460ff16151595820195909552600382015460608201526004820154608082015292015460a083015290913316146113b257600080fd5b6000816080015111156113d85760808101516002028211156113d357600080fd5b6113ed565b670de0b6b3a76400008211156113ed57600080fd5b6040810151156113fc57600080fd5b60016040828101828152606084018581524260a0860190815261ffff88166000818152600560208181529187902089518154600160a060020a031916600160a060020a03909116178155828a015198810198909855945160028801805460ff1916911515919091179055925160038701556080870151600487015590519490920193909355815190815291820184905280517fb45cdbf07b9b4ad1b38fb04c30a818fd2e90c821dcaf060686ea3ef2579280189281900390910190a1505050565b60286020526000908152604090205481565b60025433600160a060020a039081169116146114ea57600080fd5b600a8054600160a060020a031916600160a060020a0392909216919091179055565b600354600160a060020a031681565b60075481565b60025433600160a060020a0390811691161461153c57600080fd5b602955565b60035433600160a060020a0390811691161461155c57600080fd5b60035460a860020a900460ff16151561157457600080fd5b6003805475ff000000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b60065481565b6115cc613d99565b60035460a860020a900460ff16156115e357600080fd5b5061ffff8216600090815260056020818152604092839020835160c0810185528154600160a060020a03908116808352600184015494830194909452600283015460ff16151595820195909552600382015460608201526004820154608082015292015460a0830152909133161461165a57600080fd5b60008160800151111561168057608081015160020282111561167b57600080fd5b611695565b670de0b6b3a764000082111561169557600080fd5b604081015115156001146116a857600080fd5b6060810182815261ffff841660008181526005602081815260409283902086518154600160a060020a031916600160a060020a039091161781558187015160018201558387015160028201805460ff1916911515919091179055945160038601556080860151600486015560a08601519490910193909355805191825291810184905281517f07a0d309f3fa6e1bde730dd9b564960ab61a43da521d1cb7dfd12c6ba159da4d929181900390910190a1505050565b60005433600160a060020a0390811691161461177857600080fd5b600160a060020a038116151561178d57600080fd5b60018054600160a060020a031916600160a060020a0392909216919091179055565b602c5481565b6117bd613ddb565b600160a060020a0382166000908152601e6020526040808220600181015460028201546003830154845160a081019586905286958695949360ff1692919085906005908289855b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116118045790505050505050935093509350935093509193509193565b60215460ff1681565b60035460a860020a900460ff1681565b6000806000806000806000806000806000600360159054906101000a900460ff1615151561189857600080fd5b60008d8152602e6020526040902060010154600160a060020a03169a508a15156118c157600080fd5b8a600160a060020a031633600160a060020a0316141515156118e257600080fd5b60008d8152602e602052604090205467ffffffffffffffff808e166801000000000000000090920416101561191657600080fd5b60008d8152602e60205260409020548c9070010000000000000000000000000000000090046001608060020a03163481151561194e57fe5b04101561195a57600080fd5b60008d8152602e6020908152604080832054600160a060020a0333168452600490925290912070010000000000000000000000000000000082046001608060020a03168e029b5067ffffffffffffffff9182169a50601f808c0490921699509089028a03975088600881106119cb57fe5b015495506008808802600290810a60ff8102975087891696508e02935060018901909102900a848301106119fe57600080fd5b33600160a060020a03166000908152600460205260409020828501878718909716871796935086908960088110611a3157fe5b0181600019169055508b602e60008f815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550611a998a613c9a565b604051908b039150600160a060020a038c169082156108fc029083906000818181858888f19350505050158015611ad4573d6000803e3d6000fd5b5060408051600160a060020a0333168152602081018f90528082018e905290517f866fb457041aa925cda702a45b50856a602a57e61980bf5e172752908d5d92d89181900360600190a160008d8152602e602052604090205468010000000000000000900467ffffffffffffffff161515611bbf57600160a060020a038b166000908152602f6020908152604080832080546000190190558f8352602e82528083209283556001929092018054600160a060020a031916905581518f815291517fd3af65fc11919244eae04f3fc1081a6286128ba8cabfa4ccdb92921b65ed49a99281900390910190a15b50505050505050505050505050565b611bd6613d99565b60035460a860020a900460ff1615611bed57600080fd5b5061ffff8116600090815260056020818152604092839020835160c0810185528154600160a060020a0316808252600183015493820193909352600282015460ff1615159481019490945260038101546060850152600481015460808501529091015460a08301521515611c6057600080fd5b604081015115611c6f57600080fd5b600754602082015142910110611c8457600080fd5b60016040828101828152608084018051606086019081524260a0870190815261ffff8816600081815260056020818152918890208a518154600160a060020a031916600160a060020a03909116178155828b015199810199909955955160028901805460ff1916911515919091179055925160038801559251600487018190559051959093019490945582519081529283015280517fb45cdbf07b9b4ad1b38fb04c30a818fd2e90c821dcaf060686ea3ef2579280189281900390910190a15050565b611d4f613dfa565b600160a060020a0382166000908152600460205260409081902081516101008101928390529160089082845b81548152600190910190602001808311611d7b5750505050509050919050565b600b8160098110610f8e57fe5b60205481565b60025433600160a060020a03908116911614611dc957600080fd5b6021805460ff1916911515919091179055565b611de4613dfa565b611dec613dfa565b60035460009060a860020a900460ff1615611e0657600080fd5b60035474010000000000000000000000000000000000000000900460ff161515611e2f57600080fd5b84600160a060020a031633600160a060020a031614151515611e5057600080fd5b33600160a060020a03166000908152600460205260409081902081516101008101928390529160089082845b81548152600190910190602001808311611e7c5750505050600160a060020a038716600090815260046020526040908190208151610100810192839052939650915060089082845b81548152600190910190602001808311611ec45750505050509150600090505b6008811015611f6b57611f17838260088110611efc57fe5b6020020151858360088110611f0d57fe5b6020020151613ca7565b838260088110611f2357fe5b6020020152611f52828260088110611f3757fe5b6020020151858360088110611f4857fe5b6020020151613cf8565b828260088110611f5e57fe5b6020020152600101611ee4565b600160a060020a0333166000908152600460205260409020611f8f90846008613e1a565b50600160a060020a0385166000908152600460205260409020611fb490836008613e1a565b5060408051600160a060020a0333811682528716602082015281517f4853ae1b4d437c4255ac16cd3ceda3465975023f27cb141584cd9d44440fed82929181900390910190a15050505050565b612009613d72565b600254600090819033600160a060020a0390811691161461202957600080fd5b60305460ff16151561203a57600080fd5b5060005b8b811015611bbf578c8c8281811061205257fe5b9050602002013591508a8a82818110151561206957fe5b602002919091013567ffffffffffffffff1684525088888281811061208a57fe5b6020908102929092013567ffffffffffffffff1691850191909152508686828181106120b257fe5b60200291909101356001608060020a03166040850152508484828181106120d557fe5b60209081029290920135600160a060020a03908116606087019081526000868152602e855260409081902088518154968a0151928a015167ffffffffffffffff1990971667ffffffffffffffff918216176fffffffffffffffff00000000000000001916680100000000000000009190931602919091176001608060020a0390811670010000000000000000000000000000000091909616029490941784555160019384018054600160a060020a03191691909216179055500161203e565b60276020526000908152604090205481565b60035433600160a060020a039081169116146121c157600080fd5b60035460a860020a900460ff16156121d857600080fd5b6003805475ff000000000000000000000000000000000000000000191660a860020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b6005602081905260009182526040909120805460018201546002830154600384015460048501549490950154600160a060020a0390931694919360ff9091169286565b600054600160a060020a031681565b60295481565b602b546001608060020a031681565b60025433600160a060020a039081169116146122aa57600080fd5b602055565b600254600090819033600160a060020a039081169116146122cf57600080fd5b602a54620151800191508142111561230c5750602a81905560005b600481101561230c5760006023826004811061230257fe5b01556001016122ea565b5050565b601f6020526000908152604090205481565b60025433600160a060020a0390811691161461233d57600080fd5b601d55565b61234a613ddb565b6000612354613ddb565b61235c613dfa565b600080600080600080600360159054906101000a900460ff1615151561238157600080fd5b600160a060020a038b166000908152601e602052604090206002015460ff1615156123ab57600080fd5b6123b48b613d51565b15156123bf57600080fd5b600160a060020a038b166000908152601e6020526040808220815160a08101928390529290916005918390855b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116123ec57905050505050509950600a60009054906101000a9004600160a060020a0316600160a060020a03166390cd61708c6040518263ffffffff1660e060020a0281526004018082600160a060020a0316600160a060020a03168152602001915050602060405180830381600087803b15801561249b57600080fd5b505af11580156124af573d6000803e3d6000fd5b505050506040513d60208110156124c557600080fd5b5051600160a060020a038c16600090815260046020526040908190208151610100810192839052929b509060089082845b815481526001909101906020018083116124f65750505050509650600091505b600160a060020a038b166000908152601e60205260409020600301548210156128bb576009546040517f6d27a326000000000000000000000000000000000000000000000000000000008152600160a060020a0390911690636d27a326908c908c90600401808360a080838360005b8381101561259d578181015183820152602001612585565b50505050905001826001608060020a03166001608060020a031681526020019250505060a060405180830381600087803b1580156125da57600080fd5b505af11580156125ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525060a081101561261357600080fd5b509750600090505b60058110156128b05760f888826005811061263257fe5b602002015161ffff1610156128a857601f88826005811061264f57fe5b602002015161ffff1681151561266157fe5b0461ffff169350601f888260058110151561267857fe5b602002015161ffff1681151561268a57fe5b0661ffff1692508260080260ff600102600019169060020a0295508587856008811015156126b457fe5b60200201511694506008830260020a60ff0285106126d157600080fd5b600880840260020a959095019485908890869081106126ec57fe5b6020020151878987600881106126fe57fe5b602002015118161787856008811061271257fe5b6020020152600388826005811061272557fe5b602002015161ffff1611801561276e575060006005818a8483811061274657fe5b6020908102919091015161ffff16825281019190915260400160002054600160a060020a0316145b156128a8576040805160c081018252600160a060020a038d16815242602082015260009181018290526060810182905267016345785d8a0000608082015260a08101829052906005908a848381106127c257fe5b6020908102919091015161ffff16825281810192909252604090810160002083518154600160a060020a031916600160a060020a0390911617815591830151600183015582015160028201805460ff1916911515919091179055606082015160038201556080820151600482015560a0909101516005918201557f633377e1aee66d4ee7f6fa8c861d9549e2535911b539befce37b7b0c610b5779908c908a908490811061286c57fe5b60200201516040518083600160a060020a0316600160a060020a031681526020018261ffff1661ffff1681526020019250505060405180910390a15b60010161261b565b600190910190612516565b600160a060020a038b166000908152601e6020908152604080832060028101805460ff19169055600301839055600490915290206128fb90886008613e1a565b50602054604051600160a060020a0333169180156108fc02916000818181858888f19350505050158015612933573d6000803e3d6000fd5b5060408051600160a060020a038d16815290517f88bcbf7d5a6bdf17bf2d6180a2b117fda17d75ec329a6ada78f3dd2cb5b1af469181900360200190a15050505050505050505050565b612985613d99565b60035460a860020a900460ff161561299c57600080fd5b5061ffff8116600090815260056020818152604092839020835160c0810185528154600160a060020a0316808252600183015493820193909352600282015460ff1615159481019490945260038101546060850152600481015460808501529091015460a08301521515612a0f57600080fd5b33600160a060020a03168160000151600160a060020a031614151515612a3457600080fd5b80604001511515612a4457600080fd5b6060810151341015612a5557600080fd5b60085460a082015101421015612a6a57600080fd5b8060000151600160a060020a03166108fc6006546127108460600151811515612a8f57fe5b04029081150290604051600060405180830381858888f19350505050158015612abc573d6000803e3d6000fd5b5033600160a060020a039081168083524260208085019182526000604080870182815260608801805160808a0190815261ffff8b168086526005808852958590208b518154600160a060020a0319169b169a909a178a55965160018a0155915160028901805460ff191691151591909117905551600388015551600487015560a08701519590910194909455835191825281019190915281517fab46795f5ab8b9a85edbf68b140d034895cdb237e456fe9004be017493a45e8e929181900390910190a15050565b612b8c613dfa565b600080600080600080600080612ba0613d99565b60035460009081908190819060a860020a900460ff1615612bc057600080fd5b60215460ff161515600114612bd457600080fd5b600160a060020a0333166000908152601e602052604090206002015460ff1615612bfd57600080fd5b601d548f11158015612c0f575060008f115b1515612c1a57600080fd5b33600160a060020a03166000908152600460205260409081902081516101008101928390529160089082845b81548152600190910190602001808311612c465750505050509d506000975060009650600092505b6005831015612e7d578f8360058110612c8357fe5b6020020151935060f88461ffff161015612e72578d601f61ffff86160461ffff16600881101515612cb057fe5b60200201519950601f61ffff851660ff91900661ffff166008810260020a9182029e508b8f169d5099508f028c1015612ce857600080fd5b6008890260020a8f02909b039a8c8a189099168b1798898e601f61ffff87160461ffff16600881101515612d1857fe5b6020908102919091019190915261ffff85166000908152601f909152604090205460019b909b019a955087861115612d4e578597505b6000861115612e725761ffff8416600090815260056020818152604092839020835160c0810185528154600160a060020a0316808252600183015493820193909352600282015460ff1615159481019490945260038101546060850152600481015460808501529091015460a083015290955015801590612de5575033600160a060020a03168560000151600160a060020a031614155b8015612df357508460400151155b8015612e06575042600754866020015101115b15612e72578e60148760098110612e1957fe5b0154029b508460000151600160a060020a03166108fc6006546127108f811515612e3f57fe5b04029081150290604051600060405180830381858888f19350505050158015612e6c573d6000803e3d6000fd5b50958b01955b600190920191612c6e565b6020548701341015612e8e57600080fd5b60028b10158015612ea0575060058b11155b1515612eab57600080fd5b612eb433613d51565b1515612ebf57600080fd5b600a54604080517f90cd6170000000000000000000000000000000000000000000000000000000008152600160a060020a033381166004830152915191909216916390cd61709160248083019260209291908290030181600087803b158015612f2757600080fd5b505af1158015612f3b573d6000803e3d6000fd5b505050506040513d6020811015612f5157600080fd5b505160098054919350600160a060020a03909116906388c91d24908490600b908c908110612f7b57fe5b01546040518363ffffffff1660e060020a02815260040180836001608060020a03166001608060020a0316815260200182815260200192505050602060405180830381600087803b158015612fcf57600080fd5b505af1158015612fe3573d6000803e3d6000fd5b505050506040513d6020811015612ff957600080fd5b810190808051906020019092919050505090508f601e600033600160a060020a0316600160a060020a03168152602001908152602001600020600001906005613043929190613e5a565b50804201601e600033600160a060020a0316600160a060020a03168152602001908152602001600020600101819055506001601e600033600160a060020a0316600160a060020a0316815260200190815260200160002060020160006101000a81548160ff0219169083151502179055508e601e600033600160a060020a0316600160a060020a03168152602001908152602001600020600301819055508d6004600033600160a060020a0316600160a060020a03168152602001908152602001600020906008613115929190613e1a565b50600160a060020a0333166000818152601e60209081526040918290206001015482519384529083015280517f4c6128220f623f71e1fd741c758736624b4c958a2632c88b65f1708ba396a01e9281900390910190a150505050505050505050505050505050565b600080600080600080600080600360159054906101000a900460ff161515156131a557600080fd5b600160a060020a03331660009081526027602090815260408083205460289092529091205490985015156131f457602a54600160a060020a033316600090815260286020526040902055613238565b602a54600160a060020a033316600090815260286020526040902054101561323857602a54600160a060020a03331660009081526028602052604081209190915597505b505033600160a060020a031660009081526004602052604081205490955085945060ff9350845b600481101561331e57600081111561327957610100909402935b88851693506008810260020a8481151561328f57fe5b04965094860194878516840192506008600182010260020a83106132b257600080fd5b84881890971690911795818416830191906008600182010260020a83106132d857600080fd5b60225485831890921683179187602383600481106132f257fe5b015401111561330057600080fd5b866023826004811061330e57fe5b018054909101905560010161325f565b6000861161332b57600080fd5b602954860234101561333c57600080fd5b33600160a060020a0316600081815260046020908152604080832086905560278252918290208b9055815192835282018b905280517fcfd83f2a84806a5664e01fb360426529f02468a8135b953d3ad27d9303908ba69281900390910190a1505050505050505050565b60005433600160a060020a039081169116146133c157600080fd5b600160a060020a03811615156133d657600080fd5b60038054600160a060020a031916600160a060020a0392909216919091179055565b60025433600160a060020a0390811691161461341357600080fd5b6030805460ff19169055565b60025433600160a060020a0390811691161461343a57600080fd5b60035474010000000000000000000000000000000000000000900460ff1615613480576003805474ff0000000000000000000000000000000000000000191690556134b6565b6003805474ff00000000000000000000000000000000000000001916740100000000000000000000000000000000000000001790555b565b6134c0613eec565b6002546000908190819033600160a060020a039081169116146134e257600080fd5b60305460ff1615156134f357600080fd5b5060005b8c81101561362b578d8d8281811061350b57fe5b90506020020135600160a060020a03169150600092505b6005831015613572578b8b60058302850181811061353c57fe5b9050602002013561ffff1684600001518460058110151561355957fe5b61ffff9092166020929092020152600190920191613522565b89898281811061357e57fe5b90506020020135846020018181525050878782818110151561359c57fe5b602002919091013515156040860152508585828181106135b857fe5b60209081029290920135606087015250600160a060020a0383166000908152601e9091526040902084518591906135f29082906005613e5a565b506020820151600182810191909155604083015160028301805460ff1916911515919091179055606090920151600390910155016134f7565b5050505050505050505050505050565b6000806000613648613d99565b6000925082805b600581101561376b5787816005811061366457fe5b602002013561ffff16915060f88261ffff1610156137635761ffff82166000908152601f602052604081205494508411156137635761ffff8216600090815260056020818152604092839020835160c0810185528154600160a060020a0316808252600183015493820193909352600282015460ff1615159481019490945260038101546060850152600481015460808501529091015460a083015290935015801590613727575088600160a060020a03168360000151600160a060020a031614155b801561373557508260400151155b8015613748575042600754846020015101115b1561376357866014856009811061375b57fe5b015402850194505b60010161364f565b5092979650505050505050565b602a5481565b60085481565b60305460ff1681565b60025433600160a060020a039081169116146137a857600080fd5b602c55565b60148160098110610f8e57fe5b600254600090819033600160a060020a039081169116146137da57600080fd5b60305460ff1615156137eb57600080fd5b5060005b8e811015613948578f8f8281811061380357fe5b9050602002013561ffff16915060c0604051908101604052808f8f84818110151561382a57fe5b90506020020135600160a060020a0316600160a060020a031681526020018d8d84818110151561385657fe5b9050602002013581526020018b8b84818110151561387057fe5b6020908102929092013515158352500189898481811061388c57fe5b90506020020135815260200187878481811015156138a657fe5b90506020020135815260200185858481811015156138c057fe5b6020908102929092013590925261ffff85166000908152600580835260409182902085518154600160a060020a031916600160a060020a03909116178155928501516001808501919091559185015160028401805460ff1916911515919091179055606085015160038401556080850151600484015560a090940151919093015550016137ef565b50505050505050505050505050505050565b602d5481565b60035433600160a060020a0390811691161461397b57600080fd5b600154604051600160a060020a039182169130163180156108fc02916000818181858888f193505050501580156139b6573d6000803e3d6000fd5b50565b60025460009033600160a060020a039081169116146139d757600080fd5b81905080600160a060020a03166309bb03b46040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015613a1857600080fd5b505af1158015613a2c573d6000803e3d6000fd5b505050506040513d6020811015613a4257600080fd5b50511515613a4f57600080fd5b60098054600160a060020a031916600160a060020a039290921691909117905550565b601d5481565b601e60205260009081526040902060018101546002820154600390920154909160ff169083565b613aa7613f1e565b600254600090819033600160a060020a03908116911614613ac757600080fd5b505060408051610120810182526004815260136020820152602e9181019190915260526060820152607d6080820152609c60a082015260b460c082015260c360e082015260c661010082015290506000805b60c68160ff161015613b6757828260098110613b3157fe5b602002015160ff168160ff161415613b4a576001909101905b60ff81166000908152601f60205260409020829055600101613b19565b505050565b60025433600160a060020a03908116911614613b8757600080fd5b61ffff9091166000908152601f6020526040902055565b600a54600160a060020a031681565b60025460009033600160a060020a03908116911614613bcb57600080fd5b5060005b600981101561230c57818160098110613be457fe5b602002013560148260098110613bf657fe5b0155600101613bcf565b60005433600160a060020a03908116911614613c1b57600080fd5b600160a060020a0381161515613c3057600080fd5b60005460408051600160a060020a039283168152918316602083015280517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09281900390910190a160008054600160a060020a031916600160a060020a0392909216919091179055565b602c546127109091040290565b600060ff81808080805b601f81101561376b576000811115613ccb57610100909502945b8886169350878616925082841015613ce257600080fd5b8284038587189095168517949150600101613cb1565b600060ff81808080805b601f81101561376b576000811115613d1c57610100909502945b8886169350878616925082840191506008600182010260020a8210613d4057600080fd5b858518909416811793600101613d02565b600160a060020a03166000908152601e602052604090206001015442101590565b60408051608081018252600080825260208201819052918101829052606081019190915290565b60c0604051908101604052806000600160a060020a03168152602001600081526020016000151581526020016000815260200160008152602001600081525090565b60a0604051908101604052806005906020820280388339509192915050565b610100604051908101604052806008906020820280388339509192915050565b8260088101928215613e4a579160200282015b82811115613e4a5782518255602090920191600190910190613e2d565b50613e56929150613f3e565b5090565b600183019183908215613ee05791602002820160005b83821115613eb057835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302613e70565b8015613ede5782816101000a81549061ffff0219169055600201602081600101049283019260010302613eb0565b505b50613e56929150613f5b565b61010060405190810160405280613f01613ddb565b815260200160008152602001600015158152602001600081525090565b610120604051908101604052806009906020820280388339509192915050565b613f5891905b80821115613e565760008155600101613f44565b90565b613f5891905b80821115613e5657805461ffff19168155600101613f615600a165627a7a723058200540429efb7d1e83dfe496528ad0e2086a51e1e7e684de7f3cc88f5e65d7abd40029
Swarm Source
bzzr://0540429efb7d1e83dfe496528ad0e2086a51e1e7e684de7f3cc88f5e65d7abd4
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.