Address Details
contract
token

0xF9d922c055A3f1759299467dAfaFdf43BE844f7a

Token
Minereum CELO (MNEC)
Creator
0x074a2b–d4c25d at 0xc0f07c–42c307
Balance
0 CELO ( )
Locked CELO Balance
0.00 CELO
Voting CELO Balance
0.00 CELO
Pending Unlocked Gold
0.00 CELO
Tokens
Fetching tokens...
Transactions
290 Transactions
Transfers
812,054 Transfers
Gas Used
1,941,395,486
Last Balance Update
25156531
This contract has been verified via Sourcify. View contract in Sourcify repository
Contract name:
Minereum




Optimization enabled
true
Compiler version
v0.6.0+commit.26b70077




Optimization runs
200
EVM Version
istanbul




Verified at
2022-12-09T19:58:32.188995Z

contracts/test.sol

pragma solidity ^0.6.0;

interface publicCalls {
  function GenesisDestroyAmountCount (  ) external view returns ( uint256 );
  function GenesisDestroyAmountCountSet ( uint256 _GenesisDestroyAmountCount ) external;
  function GenesisDestroyCountStake (  ) external view returns ( uint256 );
  function GenesisDestroyCountStakeSet ( uint256 _GenesisDestroyCountStake ) external;
  function GenesisDestroyed (  ) external view returns ( uint256 );
  function GenesisDestroyedSet ( uint256 _GenesisDestroyed ) external;
  function NormalAddressBuyPricePerMNE ( address ) external view returns ( uint256 );
  function NormalAddressBuyPricePerMNESet ( address _address, uint256 _NormalAddressBuyPricePerMNE ) external;
  function NormalAddressFeeCount (  ) external view returns ( uint256 );
  function NormalAddressFeeCountSet ( uint256 _NormalAddressFeeCount ) external;
  function NormalAddressSalesCount (  ) external view returns ( uint256 );
  function NormalAddressSalesCountSet ( uint256 _NormalAddressSalesCount ) external;
  function NormalAddressSalesPriceCount (  ) external view returns ( uint256 );
  function NormalAddressSalesPriceCountSet ( uint256 _NormalAddressSalesPriceCount ) external;
  function NormalBalanceImported (  ) external view returns ( uint256 );
  function NormalBalanceImportedSet ( uint256 _NormalBalanceImported ) external;
  function NormalImportedAmountCount (  ) external view returns ( uint256 );
  function NormalImportedAmountCountSet ( uint256 _NormalImportedAmountCount ) external;
  function allowAddressToDestroyGenesis ( address ) external view returns ( address );
  function allowAddressToDestroyGenesisSet ( address _address, address _allowAddressToDestroyGenesis ) external;
  function allowReceiveGenesisTransfers ( address ) external view returns ( bool );
  function allowReceiveGenesisTransfersSet ( address _address, bool _allowReceiveGenesisTransfers ) external;
  function allowed ( address, address ) external view returns ( uint256 );
  function allowedSet ( address _address, address _spender, uint256 _amount ) external;
  function amountOfGenesisToBuyStakes (  ) external view returns ( uint256 );
  function amountOfGenesisToBuyStakesSet ( address _from, uint256 _amountOfGenesisToBuyStakes ) external;
  function amountOfGenesisToTransferStakes (  ) external view returns ( uint256 );
  function amountOfGenesisToTransferStakesSet ( address _from, uint256 _amountOfGenesisToTransferStakes ) external;
  function amountOfMNEForToken (  ) external view returns ( uint256 );
  function amountOfMNEForTokenICO (  ) external view returns ( uint256 );
  function amountOfMNEForTokenICOSet ( address _from, uint256 _amountOfMNEForTokenICO ) external;
  function amountOfMNEForTokenSet ( address _from, uint256 _amountOfMNEForToken ) external;
  function amountOfMNEToBuyStakes (  ) external view returns ( uint256 );
  function amountOfMNEToBuyStakesSet ( address _from, uint256 _amountOfMNEToBuyStakes ) external;
  function amountOfMNEToTransferStakes (  ) external view returns ( uint256 );
  function amountOfMNEToTransferStakesSet ( address _from, uint256 _amountOfMNEToTransferStakes ) external;
  function availableBalance (  ) external view returns ( uint256 );
  function availableBalanceSet ( uint256 _availableBalance ) external;
  function balances ( address ) external view returns ( uint256 );
  function balancesSet ( address _address, uint256 _balances ) external;
  function buyStakeGenesisCount (  ) external view returns ( uint256 );
  function buyStakeGenesisCountSet ( uint256 _buyStakeGenesisCount ) external;
  function buyStakeMNECount (  ) external view returns ( uint256 );
  function buyStakeMNECountSet ( uint256 _buyStakeMNECount ) external;
  function ethFeeForSellerLevel1 (  ) external view returns ( uint256 );
  function ethFeeForSellerLevel1Set ( address _from, uint256 _ethFeeForSellerLevel1 ) external;
  function ethFeeForToken (  ) external view returns ( uint256 );
  function ethFeeForTokenICO (  ) external view returns ( uint256 );
  function ethFeeForTokenICOSet ( address _from, uint256 _ethFeeForTokenICO ) external;
  function ethFeeForTokenSet ( address _from, uint256 _ethFeeForToken ) external;
  function ethFeeToBuyLevel1 (  ) external view returns ( uint256 );
  function ethFeeToBuyLevel1Set ( address _from, uint256 _ethFeeToBuyLevel1 ) external;
  function ethFeeToUpgradeToLevel2 (  ) external view returns ( uint256 );
  function ethFeeToUpgradeToLevel2Set ( address _from, uint256 _ethFeeToUpgradeToLevel2 ) external;
  function ethFeeToUpgradeToLevel3 (  ) external view returns ( uint256 );
  function ethFeeToUpgradeToLevel3Set ( address _from, uint256 _ethFeeToUpgradeToLevel3 ) external;
  function ethPercentFeeGenesisExchange (  ) external view returns ( uint256 );
  function ethPercentFeeGenesisExchangeSet ( address _from, uint256 _ethPercentFeeGenesisExchange ) external;
  function ethPercentFeeNormalExchange (  ) external view returns ( uint256 );
  function ethPercentFeeNormalExchangeSet ( address _from, uint256 _ethPercentFeeNormalExchange ) external;
  function ethPercentStakeExchange (  ) external view returns ( uint256 );
  function ethPercentStakeExchangeSet ( address _from, uint256 _ethPercentStakeExchange ) external;
  function genesisAddressCount (  ) external view returns ( uint256 );
  function genesisAddressCountSet ( uint256 _genesisAddressCount ) external;
  function genesisAddressesForSaleLevel1Index ( address ) external view returns ( uint256 );
  function genesisAddressesForSaleLevel1IndexSet ( address _address, uint256 _genesisAddressesForSaleLevel1Index ) external;
  function genesisAddressesForSaleLevel2Index ( address ) external view returns ( uint256 );
  function genesisAddressesForSaleLevel2IndexSet ( address _address, uint256 _genesisAddressesForSaleLevel2Index ) external;
  function genesisAddressesForSaleLevel3Index ( address ) external view returns ( uint256 );
  function genesisAddressesForSaleLevel3IndexSet ( address _address, uint256 _genesisAddressesForSaleLevel3Index ) external;
  function genesisBuyPrice ( address ) external view returns ( uint256 );
  function genesisBuyPriceSet ( address _address, uint256 _genesisBuyPrice ) external;
  function genesisCallerAddress (  ) external view returns ( address );
  function genesisCallerAddressSet ( address _genesisCallerAddress ) external;
  function genesisInitialSupply ( address ) external view returns ( uint256 );
  function genesisInitialSupplySet ( address _address, uint256 _genesisInitialSupply ) external;
  function genesisRewardPerBlock (  ) external view returns ( uint256 );
  function genesisSalesCount (  ) external view returns ( uint256 );
  function genesisSalesCountSet ( uint256 _genesisSalesCount ) external;
  function genesisSalesPriceCount (  ) external view returns ( uint256 );
  function genesisSalesPriceCountSet ( uint256 _genesisSalesPriceCount ) external;
  function genesisSupplyPerAddress (  ) external view returns ( uint256 );
  function genesisTransfersCount (  ) external view returns ( uint256 );
  function genesisTransfersCountSet ( uint256 _genesisTransfersCount ) external;
  function initialBlockCount (  ) external view returns ( uint256 );
  function initialBlockCountPerAddress ( address ) external view returns ( uint256 );
  function initialBlockCountPerAddressSet ( address _address, uint256 _initialBlockCountPerAddress ) external;
  function initialBlockCountSet ( uint256 _initialBlockCount ) external;
  function isGenesisAddress ( address ) external view returns ( uint8 );
  function isGenesisAddressForSale ( address ) external view returns ( bool );
  function isGenesisAddressForSaleSet ( address _address, bool _isGenesisAddressForSale ) external;
  function isGenesisAddressSet ( address _address, uint8 _isGenesisAddress ) external;
  function isNormalAddressForSale ( address ) external view returns ( bool );
  function isNormalAddressForSaleSet ( address _address, bool _isNormalAddressForSale ) external;
  function level2ActivationsFromLevel1Count (  ) external view returns ( uint256 );
  function level2ActivationsFromLevel1CountSet ( uint256 _level2ActivationsFromLevel1Count ) external;
  function level3ActivationsFromDevCount (  ) external view returns ( uint256 );
  function level3ActivationsFromDevCountSet ( uint256 _level3ActivationsFromDevCount ) external;
  function level3ActivationsFromLevel1Count (  ) external view returns ( uint256 );
  function level3ActivationsFromLevel1CountSet ( uint256 _level3ActivationsFromLevel1Count ) external;
  function level3ActivationsFromLevel2Count (  ) external view returns ( uint256 );
  function level3ActivationsFromLevel2CountSet ( uint256 _level3ActivationsFromLevel2Count ) external;
  function maxBlocks (  ) external view returns ( uint256 );
  function mneBurned (  ) external view returns ( uint256 );
  function mneBurnedSet ( uint256 _mneBurned ) external;
  function normalAddressesForSaleIndex ( address ) external view returns ( uint256 );
  function normalAddressesForSaleIndexSet ( address _address, uint256 _normalAddressesForSaleIndex ) external;
  function overallSupply (  ) external view returns ( uint256 );
  function overallSupplySet ( uint256 _overallSupply ) external;
  function ownerGenesis (  ) external view returns ( address );
  function ownerGenesisBuys (  ) external view returns ( address );
  function ownerMain (  ) external view returns ( address );
  function ownerNormalAddress (  ) external view returns ( address );
  function ownerStakeBuys (  ) external view returns ( address );
  function ownerStakes (  ) external view returns ( address );
  function ownerTokenService (  ) external view returns ( address );
  function setOwnerGenesis (  ) external;
  function setOwnerGenesisBuys (  ) external;
  function setOwnerMain (  ) external;
  function setOwnerNormalAddress (  ) external;
  function setOwnerStakeBuys (  ) external;
  function setOwnerStakes (  ) external;
  function setOwnerTokenService (  ) external;
  function setupRunning (  ) external view returns ( bool );
  function setupRunningSet ( bool _setupRunning ) external;
  function stakeBalances ( address ) external view returns ( uint256 );
  function stakeBalancesSet ( address _address, uint256 _stakeBalances ) external;
  function stakeBuyPrice ( address ) external view returns ( uint256 );
  function stakeBuyPriceSet ( address _address, uint256 _stakeBuyPrice ) external;
  function stakeDecimals (  ) external view returns ( uint256 );
  function stakeDecimalsSet ( address _from, uint256 _stakeDecimals ) external;
  function stakeHoldersImported (  ) external view returns ( uint256 );
  function stakeHoldersImportedSet ( uint256 _stakeHoldersImported ) external;
  function stakeHoldersListIndex ( address ) external view returns ( uint256 );
  function stakeHoldersListIndexSet ( address _address, uint256 _stakeHoldersListIndex ) external;
  function stakeMneBurnCount (  ) external view returns ( uint256 );
  function stakeMneBurnCountSet ( uint256 _stakeMneBurnCount ) external;
  function stakeMneTransferBurnCount (  ) external view returns ( uint256 );
  function stakeMneTransferBurnCountSet ( uint256 _stakeMneTransferBurnCount ) external;
  function stakesForSaleIndex ( address ) external view returns ( uint256 );
  function stakesForSaleIndexSet ( address _address, uint256 _stakesForSaleIndex ) external;
  function tokenCreated ( address, uint256 ) external view returns ( address );
  function tokenCreatedSet ( address _address, address _tokenCreated ) external;
  function tokenICOCreated ( address, uint256 ) external view returns ( address );
  function tokenICOCreatedSet ( address _address, address _tokenICOCreated ) external;
  function totalMaxAvailableAmount (  ) external view returns ( uint256 );
  function totalMaxAvailableAmountSet ( uint256 _totalMaxAvailableAmount ) external;
  function totalPaidStakeHolders (  ) external view returns ( uint256 );
  function totalPaidStakeHoldersSet ( uint256 _totalPaidStakeHolders ) external;
  function transferStakeGenesisCount (  ) external view returns ( uint256 );
  function transferStakeGenesisCountSet ( uint256 _transferStakeGenesisCount ) external;
  function transferStakeMNECount (  ) external view returns ( uint256 );
  function transferStakeMNECountSet ( uint256 _transferStakeMNECount ) external;
}

interface publicArrays {  
  function Level1TradeHistoryAmountETH ( uint256 ) external view returns ( uint256 );
  function Level1TradeHistoryAmountETHFee ( uint256 ) external view returns ( uint256 );
  function Level1TradeHistoryAmountETHFeeLength (  ) external view returns ( uint256 len );
  function Level1TradeHistoryAmountETHFeeSet ( uint256 _Level1TradeHistoryAmountETHFee ) external;
  function Level1TradeHistoryAmountETHLength (  ) external view returns ( uint256 len );
  function Level1TradeHistoryAmountETHSet ( uint256 _Level1TradeHistoryAmountETH ) external;
  function Level1TradeHistoryAmountMNE ( uint256 ) external view returns ( uint256 );
  function Level1TradeHistoryAmountMNELength (  ) external view returns ( uint256 len );
  function Level1TradeHistoryAmountMNESet ( uint256 _Level1TradeHistoryAmountMNE ) external;
  function Level1TradeHistoryBuyer ( uint256 ) external view returns ( address );
  function Level1TradeHistoryBuyerLength (  ) external view returns ( uint256 len );
  function Level1TradeHistoryBuyerSet ( address _Level1TradeHistoryBuyer ) external;
  function Level1TradeHistoryDate ( uint256 ) external view returns ( uint256 );
  function Level1TradeHistoryDateLength (  ) external view returns ( uint256 len );
  function Level1TradeHistoryDateSet ( uint256 _Level1TradeHistoryDate ) external;
  function Level1TradeHistorySeller ( uint256 ) external view returns ( address );
  function Level1TradeHistorySellerLength (  ) external view returns ( uint256 len );
  function Level1TradeHistorySellerSet ( address _Level1TradeHistorySeller ) external;
  function Level2TradeHistoryAmountETH ( uint256 ) external view returns ( uint256 );
  function Level2TradeHistoryAmountETHFee ( uint256 ) external view returns ( uint256 );
  function Level2TradeHistoryAmountETHFeeLength (  ) external view returns ( uint256 len );
  function Level2TradeHistoryAmountETHFeeSet ( uint256 _Level2TradeHistoryAmountETHFee ) external;
  function Level2TradeHistoryAmountETHLength (  ) external view returns ( uint256 len );
  function Level2TradeHistoryAmountETHSet ( uint256 _Level2TradeHistoryAmountETH ) external;
  function Level2TradeHistoryAmountMNE ( uint256 ) external view returns ( uint256 );
  function Level2TradeHistoryAmountMNELength (  ) external view returns ( uint256 len );
  function Level2TradeHistoryAmountMNESet ( uint256 _Level2TradeHistoryAmountMNE ) external;
  function Level2TradeHistoryAvailableAmountMNE ( uint256 ) external view returns ( uint256 );
  function Level2TradeHistoryAvailableAmountMNELength (  ) external view returns ( uint256 len );
  function Level2TradeHistoryAvailableAmountMNESet ( uint256 _Level2TradeHistoryAvailableAmountMNE ) external;
  function Level2TradeHistoryBuyer ( uint256 ) external view returns ( address );
  function Level2TradeHistoryBuyerLength (  ) external view returns ( uint256 len );
  function Level2TradeHistoryBuyerSet ( address _Level2TradeHistoryBuyer ) external;
  function Level2TradeHistoryDate ( uint256 ) external view returns ( uint256 );
  function Level2TradeHistoryDateLength (  ) external view returns ( uint256 len );
  function Level2TradeHistoryDateSet ( uint256 _Level2TradeHistoryDate ) external;
  function Level2TradeHistorySeller ( uint256 ) external view returns ( address );
  function Level2TradeHistorySellerLength (  ) external view returns ( uint256 len );
  function Level2TradeHistorySellerSet ( address _Level2TradeHistorySeller ) external;
  function Level3TradeHistoryAmountETH ( uint256 ) external view returns ( uint256 );
  function Level3TradeHistoryAmountETHFee ( uint256 ) external view returns ( uint256 );
  function Level3TradeHistoryAmountETHFeeLength (  ) external view returns ( uint256 len );
  function Level3TradeHistoryAmountETHFeeSet ( uint256 _Level3TradeHistoryAmountETHFee ) external;
  function Level3TradeHistoryAmountETHLength (  ) external view returns ( uint256 len );
  function Level3TradeHistoryAmountETHSet ( uint256 _Level3TradeHistoryAmountETH ) external;
  function Level3TradeHistoryAmountMNE ( uint256 ) external view returns ( uint256 );
  function Level3TradeHistoryAmountMNELength (  ) external view returns ( uint256 len );
  function Level3TradeHistoryAmountMNESet ( uint256 _Level3TradeHistoryAmountMNE ) external;
  function Level3TradeHistoryAvailableAmountMNE ( uint256 ) external view returns ( uint256 );
  function Level3TradeHistoryAvailableAmountMNELength (  ) external view returns ( uint256 len );
  function Level3TradeHistoryAvailableAmountMNESet ( uint256 _Level3TradeHistoryAvailableAmountMNE ) external;
  function Level3TradeHistoryBuyer ( uint256 ) external view returns ( address );
  function Level3TradeHistoryBuyerLength (  ) external view returns ( uint256 len );
  function Level3TradeHistoryBuyerSet ( address _Level3TradeHistoryBuyer ) external;
  function Level3TradeHistoryDate ( uint256 ) external view returns ( uint256 );
  function Level3TradeHistoryDateLength (  ) external view returns ( uint256 len );
  function Level3TradeHistoryDateSet ( uint256 _Level3TradeHistoryDate ) external;
  function Level3TradeHistorySeller ( uint256 ) external view returns ( address );
  function Level3TradeHistorySellerLength (  ) external view returns ( uint256 len );
  function Level3TradeHistorySellerSet ( address _Level3TradeHistorySeller ) external;
  function MNETradeHistoryAmountETH ( uint256 ) external view returns ( uint256 );
  function MNETradeHistoryAmountETHFee ( uint256 ) external view returns ( uint256 );
  function MNETradeHistoryAmountETHFeeLength (  ) external view returns ( uint256 len );
  function MNETradeHistoryAmountETHFeeSet ( uint256 _MNETradeHistoryAmountETHFee ) external;
  function MNETradeHistoryAmountETHLength (  ) external view returns ( uint256 len );
  function MNETradeHistoryAmountETHSet ( uint256 _MNETradeHistoryAmountETH ) external;
  function MNETradeHistoryAmountMNE ( uint256 ) external view returns ( uint256 );
  function MNETradeHistoryAmountMNELength (  ) external view returns ( uint256 len );
  function MNETradeHistoryAmountMNESet ( uint256 _MNETradeHistoryAmountMNE ) external;
  function MNETradeHistoryBuyer ( uint256 ) external view returns ( address );
  function MNETradeHistoryBuyerLength (  ) external view returns ( uint256 len );
  function MNETradeHistoryBuyerSet ( address _MNETradeHistoryBuyer ) external;
  function MNETradeHistoryDate ( uint256 ) external view returns ( uint256 );
  function MNETradeHistoryDateLength (  ) external view returns ( uint256 len );
  function MNETradeHistoryDateSet ( uint256 _MNETradeHistoryDate ) external;
  function MNETradeHistorySeller ( uint256 ) external view returns ( address );
  function MNETradeHistorySellerLength (  ) external view returns ( uint256 len );
  function MNETradeHistorySellerSet ( address _MNETradeHistorySeller ) external;
  function StakeTradeHistoryBuyer ( uint256 ) external view returns ( address );
  function StakeTradeHistoryBuyerLength (  ) external view returns ( uint256 len );
  function StakeTradeHistoryBuyerSet ( address _StakeTradeHistoryBuyer ) external;
  function StakeTradeHistoryDate ( uint256 ) external view returns ( uint256 );
  function StakeTradeHistoryDateLength (  ) external view returns ( uint256 len );
  function StakeTradeHistoryDateSet ( uint256 _StakeTradeHistoryDate ) external;
  function StakeTradeHistoryETHFee ( uint256 ) external view returns ( uint256 );
  function StakeTradeHistoryETHFeeLength (  ) external view returns ( uint256 len );
  function StakeTradeHistoryETHFeeSet ( uint256 _StakeTradeHistoryETHFee ) external;
  function StakeTradeHistoryETHPrice ( uint256 ) external view returns ( uint256 );
  function StakeTradeHistoryETHPriceLength (  ) external view returns ( uint256 len );
  function StakeTradeHistoryETHPriceSet ( uint256 _StakeTradeHistoryETHPrice ) external;
  function StakeTradeHistoryMNEGenesisBurned ( uint256 ) external view returns ( uint256 );
  function StakeTradeHistoryMNEGenesisBurnedLength (  ) external view returns ( uint256 len );
  function StakeTradeHistoryMNEGenesisBurnedSet ( uint256 _StakeTradeHistoryMNEGenesisBurned ) external;
  function StakeTradeHistorySeller ( uint256 ) external view returns ( address );
  function StakeTradeHistorySellerLength (  ) external view returns ( uint256 len );
  function StakeTradeHistorySellerSet ( address _StakeTradeHistorySeller ) external;
  function StakeTradeHistoryStakeAmount ( uint256 ) external view returns ( uint256 );
  function StakeTradeHistoryStakeAmountLength (  ) external view returns ( uint256 len );
  function StakeTradeHistoryStakeAmountSet ( uint256 _StakeTradeHistoryStakeAmount ) external;
  function deleteGenesisAddressesForSaleLevel1 (  ) external;
  function deleteGenesisAddressesForSaleLevel2 (  ) external;
  function deleteGenesisAddressesForSaleLevel3 (  ) external;
  function deleteNormalAddressesForSale (  ) external;
  function deleteStakeHoldersList (  ) external;
  function deleteStakesForSale (  ) external;
  function genesisAddressesForSaleLevel1 ( uint256 ) external view returns ( address );
  function genesisAddressesForSaleLevel1Length (  ) external view returns ( uint256 len );
  function genesisAddressesForSaleLevel1Set ( address _genesisAddressesForSaleLevel1 ) external;
  function genesisAddressesForSaleLevel1SetAt ( uint256 i, address _address ) external;
  function genesisAddressesForSaleLevel2 ( uint256 ) external view returns ( address );
  function genesisAddressesForSaleLevel2Length (  ) external view returns ( uint256 len );
  function genesisAddressesForSaleLevel2Set ( address _genesisAddressesForSaleLevel2 ) external;
  function genesisAddressesForSaleLevel2SetAt ( uint256 i, address _address ) external;
  function genesisAddressesForSaleLevel3 ( uint256 ) external view returns ( address );
  function genesisAddressesForSaleLevel3Length (  ) external view returns ( uint256 len );
  function genesisAddressesForSaleLevel3Set ( address _genesisAddressesForSaleLevel3 ) external;
  function genesisAddressesForSaleLevel3SetAt ( uint256 i, address _address ) external;
  function normalAddressesForSale ( uint256 ) external view returns ( address );
  function normalAddressesForSaleLength (  ) external view returns ( uint256 len );
  function normalAddressesForSaleSet ( address _normalAddressesForSale ) external;
  function normalAddressesForSaleSetAt ( uint256 i, address _address ) external;
  function ownerGenesis (  ) external view returns ( address );
  function ownerGenesisBuys (  ) external view returns ( address );
  function ownerMain (  ) external view returns ( address );
  function ownerNormalAddress (  ) external view returns ( address );
  function ownerStakeBuys (  ) external view returns ( address );
  function ownerStakes (  ) external view returns ( address );
  function setOwnerGenesis (  ) external;
  function setOwnerGenesisBuys (  ) external;
  function setOwnerMain (  ) external;
  function setOwnerNormalAddress (  ) external;
  function setOwnerStakeBuys (  ) external;
  function setOwnerStakes (  ) external;
  function stakeHoldersList ( uint256 ) external view returns ( address );
  function stakeHoldersListAt ( uint256 i, address _address ) external;
  function stakeHoldersListLength (  ) external view returns ( uint256 len );
  function stakeHoldersListSet ( address _stakeHoldersList ) external;
  function stakesForSale ( uint256 ) external view returns ( address );
  function stakesForSaleLength (  ) external view returns ( uint256 len );
  function stakesForSaleSet ( address _stakesForSale ) external;
  function stakesForSaleSetAt ( uint256 i, address _address ) external;
}

interface genesisCalls {
  function AllowAddressToDestroyGenesis ( address _from, address _address ) external;
  function AllowReceiveGenesisTransfers ( address _from ) external;
  function BurnTokens ( address _from, uint256 mneToBurn ) external returns ( bool success );
  function RemoveAllowAddressToDestroyGenesis ( address _from ) external;
  function RemoveAllowReceiveGenesisTransfers ( address _from ) external;
  function RemoveGenesisAddressFromSale ( address _from ) external;
  function SetGenesisForSale ( address _from, uint256 weiPrice ) external;
  function TransferGenesis ( address _from, address _to ) external;
  function UpgradeToLevel2FromLevel1 ( address _address, uint256 weiValue ) external;
  function UpgradeToLevel3FromDev ( address _address ) external;
  function UpgradeToLevel3FromLevel1 ( address _address, uint256 weiValue ) external;
  function UpgradeToLevel3FromLevel2 ( address _address, uint256 weiValue ) external;
  function availableBalanceOf ( address _address ) external view returns ( uint256 Balance );
  function balanceOf ( address _address ) external view returns ( uint256 balance );
  function deleteAddressFromGenesisSaleList ( address _address ) external;
  function isAnyGenesisAddress ( address _address ) external view returns ( bool success );
  function isGenesisAddressLevel1 ( address _address ) external view returns ( bool success );
  function isGenesisAddressLevel2 ( address _address ) external view returns ( bool success );
  function isGenesisAddressLevel2Or3 ( address _address ) external view returns ( bool success );
  function isGenesisAddressLevel3 ( address _address ) external view returns ( bool success );
  function ownerGenesis (  ) external view returns ( address );
  function ownerGenesisBuys (  ) external view returns ( address );
  function ownerMain (  ) external view returns ( address );
  function ownerNormalAddress (  ) external view returns ( address );
  function ownerStakeBuys (  ) external view returns ( address );
  function ownerStakes (  ) external view returns ( address );
  function setGenesisCallerAddress ( address _caller ) external returns ( bool success );
  function setOwnerGenesisBuys (  ) external;
  function setOwnerMain (  ) external;
  function setOwnerNormalAddress (  ) external;
  function setOwnerStakeBuys (  ) external;
  function setOwnerStakes (  ) external;
  function BurnGenesisAddresses ( address _from, address[] calldata _genesisAddressesToBurn ) external;
}

interface normalAddress {
  function BuyNormalAddress ( address _from, address _address, uint256 _msgvalue ) external returns ( uint256 _totalToSend );
  function RemoveNormalAddressFromSale ( address _address ) external;
  function setBalanceNormalAddress ( address _from, address _address, uint256 balance ) external;
  function SetNormalAddressForSale ( address _from, uint256 weiPricePerMNE ) external;
  function setOwnerMain (  ) external;
  function ownerMain (  ) external view returns ( address );
}

interface stakes {
  function RemoveStakeFromSale ( address _from ) external;
  function SetStakeForSale ( address _from, uint256 priceInWei ) external;
  function StakeTransferGenesis ( address _from, address _to, uint256 _value, address[] calldata _genesisAddressesToBurn ) external;
  function StakeTransferMNE ( address _from, address _to, uint256 _value ) external returns ( uint256 _mneToBurn );
  function ownerMain (  ) external view returns ( address );
  function setBalanceStakes ( address _from, address _address, uint256 balance ) external;
  function setOwnerMain (  ) external;
}

interface stakeBuys {
  function BuyStakeGenesis ( address _from, address _address, address[] calldata _genesisAddressesToBurn, uint256 _msgvalue ) external returns ( uint256 _feesToPayToSeller );
  function BuyStakeMNE ( address _from, address _address, uint256 _msgvalue ) external returns ( uint256 _mneToBurn, uint256 _feesToPayToSeller );
  function ownerMain (  ) external view returns ( address );
  function setOwnerMain (  ) external;
}

interface genesisBuys {
  function BuyGenesisLevel1FromNormal ( address _from, address _address, uint256 _msgvalue ) external returns ( uint256 _totalToSend );
  function BuyGenesisLevel2FromNormal ( address _from, address _address, uint256 _msgvalue ) external returns ( uint256 _totalToSend );
  function BuyGenesisLevel3FromNormal ( address _from, address _address, uint256 _msgvalue ) external returns ( uint256 _totalToSend );
  function ownerMain (  ) external view returns ( address );
  function setOwnerMain (  ) external;
}

interface tokenService {  
  function ownerMain (  ) external view returns ( address );
  function setOwnerMain (  ) external;
  function circulatingSupply() external view returns (uint256);
  function DestroyGenesisAddressLevel1(address _address) external;
  function Bridge(address _sender, address _address, uint _amount) external;
}

interface baseTransfers {
	function setOwnerMain (  ) external;
	function transfer ( address _from, address _to, uint256 _value ) external;
	function transferFrom ( address _sender, address _from, address _to, uint256 _amount ) external returns ( bool success );
	function stopSetup ( address _from ) external returns ( bool success );
	function totalSupply (  ) external view returns ( uint256 TotalSupply );
}

interface mneStaking {
	function startStaking(address _sender, uint256 _amountToStake, address[] calldata _addressList, uint256[] calldata uintList) external;
}

interface luckyDraw {
	function BuyTickets(address _sender, uint256[] calldata _max) payable external returns ( uint256 );
}

interface externalService {
	function externalFunction(address _sender, address[] calldata _addressList, uint256[] calldata _uintList) payable external returns ( uint256 );
}

interface externalReceiver {
	function externalFunction(address _sender, uint256 _mneAmount, address[] calldata _addressList, uint256[] calldata _uintList) payable external;
}

contract Minereum { 
string public name; 
string public symbol; 
uint8 public decimals; 

event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
event LogStakeHolderSends(address indexed to, uint balance, uint amountToSend);
event LogFailedStakeHolderSends(address indexed to, uint balance, uint amountToSend);
event StakeTransfer(address indexed from, address indexed to, uint256 value);

publicCalls public pc;
publicArrays public pa;
genesisCalls public gn;
normalAddress public na;
stakes public st;
stakeBuys public stb;
genesisBuys public gnb;
tokenService public tks;
baseTransfers public bst;
mneStaking public mneStk;
luckyDraw public lkd;
externalService public extS1;
externalReceiver public extR1;
address public external1Address;

address public updaterAddress = 0x0000000000000000000000000000000000000000;
function setUpdater() public {if (updaterAddress == 0x0000000000000000000000000000000000000000) updaterAddress = msg.sender; else revert();}
address public payoutOwner = 0x0000000000000000000000000000000000000000;
bool public payoutBlocked = true;
address payable public secondaryPayoutAddress = payable(msg.sender);

modifier onlyOwner(){
    require(msg.sender == external1Address || msg.sender == address(pc) || msg.sender == address(pa) || msg.sender == address(gn) || msg.sender == address(na) || msg.sender == address(st) || msg.sender == address(stb) || msg.sender == address(gnb) || msg.sender == address(tks) || msg.sender == address(bst) || msg.sender == address(mneStk) || msg.sender == address(lkd) || msg.sender == address(extS1) || msg.sender == address(extR1));
     _;
}

constructor(address _publicCallsAddress, address _publicArraysAddress, address _genesisCallsAddress, address _normalAddressAddress,
 address _stakesAddress, address _stakesBuysAddress,address _genesisBuysAddress, address _tokenServiceAddress, address _baseTransfersAddress) public {
name = "Minereum CELO"; 
symbol = "MNEC"; 
decimals = 8; 
setUpdater();
pc = publicCalls(_publicCallsAddress);
pc.setOwnerMain();
pa = publicArrays(_publicArraysAddress);
pa.setOwnerMain();
gn = genesisCalls(_genesisCallsAddress);
gn.setOwnerMain();
na = normalAddress(_normalAddressAddress);
na.setOwnerMain();
st = stakes(_stakesAddress);
st.setOwnerMain();
stb = stakeBuys(_stakesBuysAddress);
stb.setOwnerMain();
gnb = genesisBuys(_genesisBuysAddress);
gnb.setOwnerMain();
tks = tokenService(_tokenServiceAddress);
tks.setOwnerMain();
bst = baseTransfers(_baseTransfersAddress);
bst.setOwnerMain();
}

function reloadGenesis(address _address) public { if (msg.sender == updaterAddress)	{gn = genesisCalls(_address); gn.setOwnerMain(); } else revert();}
function reloadNormalAddress(address _address) public { if (msg.sender == updaterAddress)	{na = normalAddress(_address); na.setOwnerMain(); } else revert();}
function reloadStakes(address _address) public { if (msg.sender == updaterAddress)	{st = stakes(_address); st.setOwnerMain(); } else revert();}
function reloadStakeBuys(address _address) public { if (msg.sender == updaterAddress)	{stb = stakeBuys(_address); stb.setOwnerMain(); } else revert();}
function reloadGenesisBuys(address _address) public { if (msg.sender == updaterAddress)	{gnb = genesisBuys(_address); gnb.setOwnerMain(); } else revert();}
function reloadTokenService(address _address) public { if (msg.sender == updaterAddress)	{tks = tokenService(_address); tks.setOwnerMain(); } else revert();}
function reloadBaseTransfers(address _address) public { if (msg.sender == updaterAddress)	{bst = baseTransfers(_address); bst.setOwnerMain(); } else revert();}
function reloadPublicCalls(address _address, uint code) public { if (!(code == 1234)) revert();  if (msg.sender == updaterAddress)	{pc = publicCalls(_address); pc.setOwnerMain();} else revert();}
function reloadPublicArrays(address _address, uint code) public { if (!(code == 1234)) revert();  if (msg.sender == updaterAddress)	{pa = publicArrays(_address); pa.setOwnerMain();} else revert();}
function loadMNEStaking(address _address) public { if (msg.sender == updaterAddress)	{mneStk = mneStaking(_address); } else revert();}
function loadLuckyDraw(address _address) public { if (msg.sender == updaterAddress)	{lkd = luckyDraw(_address); } else revert();}

function externalService1(address _address) public { if (msg.sender == updaterAddress)	{extS1 = externalService(_address); } else revert();}
function externalReceiver1(address _address) public { if (msg.sender == updaterAddress)	{extR1 = externalReceiver(_address); } else revert();}

function external1AddressSet(address _address) public { if (msg.sender == updaterAddress)	{external1Address = _address; } else revert();}

function updateTokenInfo(string memory _name, string memory _symbol) public {if (msg.sender == updaterAddress) { name = _name; symbol = _symbol; } else revert();}

function setPayoutOwner(address _address) public
{
	if(msg.sender == updaterAddress)
		payoutOwner = _address;
	else
		revert();
}

function setSecondaryPayoutAddress(address payable _address) public
{
	if(msg.sender == payoutOwner)
		secondaryPayoutAddress = _address;
	else
		revert();
}

function SetBlockPayouts(bool toBlock) public
{
	if(msg.sender == payoutOwner)
	{
		payoutBlocked = toBlock;
	}
}


function currentEthBlock() public view returns (uint256 blockNumber) 
{
	return block.number;
}

function currentBlock() public view returns (uint256 blockNumber)
{
	return block.number - pc.initialBlockCount();
}

function availableBalanceOf(address _address) public view returns (uint256 Balance)
{
	return gn.availableBalanceOf(_address);
}

function totalSupply() public view returns (uint256 TotalSupply)
{	
	return bst.totalSupply();
}

function circulatingSupply() public view returns (uint256)
{
   return tks.circulatingSupply();
}

function transfer(address _to, uint256 _value)  public { 
if (_to == address(this)) revert('if (_to == address(this))');
bst.transfer(msg.sender, _to, _value);
emit Transfer(msg.sender, _to, _value); 
}

function transferReserved(address _from, address _to, uint256 _value) public onlyOwner { 
emit Transfer(_from, _to, _value); 
}

function DestroyGenesisAddressLevel1() public {
	if (gn.isGenesisAddressLevel1(msg.sender))
	{
		emit Transfer(msg.sender, 0x0000000000000000000000000000000000000000, balanceOf(msg.sender));
		tks.DestroyGenesisAddressLevel1(msg.sender);
	}
	else
	{
		revert('Address not Genesis Level 1');
	}
}

function Bridge(address _address, uint _amount) public {
	emit Transfer(address(this), _address, _amount);
	tks.Bridge(msg.sender, _address, _amount);	
}

function transferFrom(
        address _from,
        address _to,
        uint256 _amount
) public returns (bool success) {
		bool result = bst.transferFrom(msg.sender, _from, _to, _amount);
        if (result) emit Transfer(_from, _to, _amount);
        return result;    
}

function approve(address _spender, uint256 _amount) public returns (bool success) {
    pc.allowedSet(msg.sender,_spender, _amount);
    emit Approval(msg.sender, _spender, _amount);
    return true;
}

function allowance(address _owner, address _spender) public view returns (uint256 remaining) {
    return pc.allowed(_owner,_spender);
}

function balanceOf(address _address) public view returns (uint256 balance) {
	return gn.balanceOf(_address);
}

function stakeBalanceOf(address _address) public view returns (uint256 balance) {
	return pc.stakeBalances(_address);
}

function TransferGenesis(address _to) public {
	emit Transfer(msg.sender, _to, balanceOf(msg.sender));	
	if (_to == address(this)) revert('if (_to == address(this))');	
	gn.TransferGenesis(msg.sender, _to);	
}

function SetGenesisForSale(uint256 weiPrice) public {	
	gn.SetGenesisForSale(msg.sender, weiPrice);
}

function AllowReceiveGenesisTransfers() public { 
	gn.AllowReceiveGenesisTransfers(msg.sender);
}

function RemoveAllowReceiveGenesisTransfers() public { 
	gn.RemoveAllowReceiveGenesisTransfers(msg.sender);
}

function RemoveGenesisAddressFromSale() public { 
	gn.RemoveGenesisAddressFromSale(msg.sender);
}

function AllowAddressToDestroyGenesis(address _address) public  { 
	gn.AllowAddressToDestroyGenesis(msg.sender, _address);
}

function RemoveAllowAddressToDestroyGenesis() public { 
	gn.RemoveAllowAddressToDestroyGenesis(msg.sender);
}

function UpgradeToLevel2FromLevel1() public payable {
	gn.UpgradeToLevel2FromLevel1(msg.sender, msg.value);
}

function UpgradeToLevel3FromLevel1() public payable {
	gn.UpgradeToLevel3FromLevel1(msg.sender, msg.value);
}

function UpgradeToLevel3FromLevel2() public payable {
	gn.UpgradeToLevel3FromLevel2(msg.sender, msg.value);
}

function UpgradeToLevel3FromDev() public {
	gn.UpgradeToLevel3FromDev(msg.sender);
}

function UpgradeOthersToLevel2FromLevel1(address[] memory _addresses) public payable {
	uint count = _addresses.length;
	if (msg.value != (pc.ethFeeToUpgradeToLevel2()*count)) revert('(msg.value != pc.ethFeeToUpgradeToLevel2()*count)');
	uint i = 0;
	while (i < count)
	{
		gn.UpgradeToLevel2FromLevel1(_addresses[i], pc.ethFeeToUpgradeToLevel2());
		i++;
	}
}

function UpgradeOthersToLevel3FromLevel1(address[] memory _addresses) public payable {
	uint count = _addresses.length;
	if (msg.value != ((pc.ethFeeToUpgradeToLevel2() + pc.ethFeeToUpgradeToLevel3())*count)) revert('(weiValue != ((msg.value + pc.ethFeeToUpgradeToLevel3())*count))');
	uint i = 0;
	while (i < count)
	{
		gn.UpgradeToLevel3FromLevel1(_addresses[i], (pc.ethFeeToUpgradeToLevel2() + pc.ethFeeToUpgradeToLevel3()));
		i++;
	}
}

function UpgradeOthersToLevel3FromLevel2(address[] memory _addresses) public payable {
	uint count = _addresses.length;
	if (msg.value != (pc.ethFeeToUpgradeToLevel3()*count)) revert('(msg.value != (pc.ethFeeToUpgradeToLevel3()*count))');
	uint i = 0;
	while (i < count)
	{
		gn.UpgradeToLevel3FromLevel2(_addresses[i], pc.ethFeeToUpgradeToLevel3());
		i++;
	}
}

function UpgradeOthersToLevel3FromDev(address[] memory _addresses) public {
	uint count = _addresses.length;	
	uint i = 0;
	while (i < count)
	{
		gn.UpgradeToLevel3FromDev(_addresses[i]);
		i++;
	}
}

function BuyGenesisAddress(address payable _address) public payable
{
	if (gn.isGenesisAddressLevel1(_address))
		BuyGenesisLevel1FromNormal(_address);
	else if (gn.isGenesisAddressLevel2(_address))
		BuyGenesisLevel2FromNormal(_address);
	else if (gn.isGenesisAddressLevel3(_address))
		BuyGenesisLevel3FromNormal(_address);
	else
		revert('Address not for sale');
}

function SetNormalAddressForSale(uint256 weiPricePerMNE) public {	
	na.SetNormalAddressForSale(msg.sender, weiPricePerMNE);
}

function RemoveNormalAddressFromSale() public
{
	na.RemoveNormalAddressFromSale(msg.sender);
}

function BuyNormalAddress(address payable _address) public payable{
	emit Transfer(_address, msg.sender, balanceOf(_address));
	uint256 feesToPayToSeller = na.BuyNormalAddress(msg.sender, address(_address), msg.value);				
	if(!_address.send(feesToPayToSeller)) revert('(!_address.send(feesToPayToSeller))');		
}

function setBalanceNormalAddress(address _address, uint256 _balance) public
{
	na.setBalanceNormalAddress(msg.sender, _address, _balance);
	emit Transfer(address(this), _address, _balance); 
}

function ContractTransferAllFundsOut() public
{
	//in case of hack, funds can be transfered out to another addresses and transferred to the stake holders from there
	if (payoutBlocked)
		if(!secondaryPayoutAddress.send(address(this).balance)) revert();
}

function PayoutStakeHolders() public {
	require(msg.sender == tx.origin); //For security reasons this line is to prevent smart contract calls
	if (payoutBlocked) revert('Payouts Blocked'); //In case of hack, payouts can be blocked
	uint contractBalance = address(this).balance;
	if (!(contractBalance > 0)) revert('(!(contractBalance > 0))');
	uint i;
	uint max;
	
	i = 0;
	max = pa.stakeHoldersListLength();

	while (i < max)
	{
		address payable add = payable(pa.stakeHoldersList(i));
		uint balance = pc.stakeBalances(add);
		uint amountToSend = contractBalance * balance / pc.stakeDecimals();
		if (amountToSend > 0)
		{
			if (!add.send(amountToSend))
				emit LogFailedStakeHolderSends(add, balance, amountToSend);
			else
			{
				pc.totalPaidStakeHoldersSet(pc.totalPaidStakeHolders() + amountToSend);				
			}			
		}
		i++;
	}
}

function stopSetup() public returns (bool success)
{
	return bst.stopSetup(msg.sender);
}

function BurnTokens(uint256 mneToBurn) public returns (bool success) {	
	gn.BurnTokens(msg.sender, mneToBurn);
	emit Transfer(msg.sender, 0x0000000000000000000000000000000000000000, mneToBurn);
	return true;
}

function SetStakeForSale(uint256 priceInWei) public
{	
	st.SetStakeForSale(msg.sender, priceInWei);
}

function RemoveStakeFromSale() public {
	st.RemoveStakeFromSale(msg.sender);
}

function StakeTransferMNE(address _to, uint256 _value) public {
	if (_to == address(this)) revert('if (_to == address(this))');
	BurnTokens(st.StakeTransferMNE(msg.sender, _to, _value));
	emit StakeTransfer(msg.sender, _to, _value); 
}

function BurnGenesisAddresses(address[] memory _genesisAddressesToBurn) public
{
	uint i = 0;	
	while(i < _genesisAddressesToBurn.length)
	{
		emit Transfer(_genesisAddressesToBurn[i], 0x0000000000000000000000000000000000000000, balanceOf(_genesisAddressesToBurn[i]));
		i++;
	}
	gn.BurnGenesisAddresses(msg.sender, _genesisAddressesToBurn);	
}

function StakeTransferGenesis(address _to, uint256 _value, address[] memory _genesisAddressesToBurn) public {
	if (_to == address(this)) revert('if (_to == address(this))');
	uint i = 0;	
	while(i < _genesisAddressesToBurn.length)
	{
		emit Transfer(_genesisAddressesToBurn[i], 0x0000000000000000000000000000000000000000, balanceOf(_genesisAddressesToBurn[i]));
		i++;
	}
	st.StakeTransferGenesis(msg.sender, _to, _value, _genesisAddressesToBurn);	
	emit StakeTransfer(msg.sender, _to, _value); 
}

function setBalanceStakes(address _address, uint256 balance) public {
	st.setBalanceStakes(msg.sender, _address, balance);
}

function BuyGenesisLevel1FromNormal(address payable _address) public payable {
	emit Transfer(_address, msg.sender, balanceOf(_address));
	uint256 feesToPayToSeller = gnb.BuyGenesisLevel1FromNormal(msg.sender, address(_address), msg.value);
	if(!_address.send(feesToPayToSeller)) revert('(!_address.send(feesToPayToSeller))');				
}

function BuyGenesisLevel2FromNormal(address payable _address) public payable{
	emit Transfer(_address, msg.sender, balanceOf(_address));
	uint256 feesToPayToSeller = gnb.BuyGenesisLevel2FromNormal(msg.sender, address(_address), msg.value);	
	if(!_address.send(feesToPayToSeller)) revert('(!_address.send(feesToPayToSeller))');	
}

function BuyGenesisLevel3FromNormal(address payable _address) public payable{
	emit Transfer(_address, msg.sender, balanceOf(_address));
	uint256 feesToPayToSeller = gnb.BuyGenesisLevel3FromNormal(msg.sender, address(_address), msg.value);	
	if(!_address.send(feesToPayToSeller)) revert('(!_address.send(feesToPayToSeller))');		
}

function BuyStakeMNE(address payable _address) public payable {
	uint256 balanceToSend = pc.stakeBalances(_address);
	(uint256 mneToBurn, uint256 feesToPayToSeller) = stb.BuyStakeMNE(msg.sender, address(_address), msg.value);
	BurnTokens(mneToBurn);
	if(!_address.send(feesToPayToSeller)) revert('(!_address.send(feesToPayToSeller))');	
	emit StakeTransfer(_address, msg.sender, balanceToSend); 
}

function BuyStakeGenesis(address payable _address, address[] memory _genesisAddressesToBurn) public payable {
	uint256 balanceToSend = pc.stakeBalances(_address);
	uint i = 0;
	while(i < _genesisAddressesToBurn.length)
	{
		emit Transfer(_genesisAddressesToBurn[i], 0x0000000000000000000000000000000000000000, balanceOf(_genesisAddressesToBurn[i]));
		i++;
	}
	uint256 feesToPayToSeller = stb.BuyStakeGenesis(msg.sender, address(_address), _genesisAddressesToBurn, msg.value);
	if(!_address.send(feesToPayToSeller)) revert();		
	emit StakeTransfer(_address, msg.sender, balanceToSend); 
}

function Payment() public payable {
	
}

function BuyLuckyDrawTickets(uint256[] memory max) public payable {
	uint256 _mneToBurn = lkd.BuyTickets.value(msg.value)(msg.sender, max);
	if (_mneToBurn > 0) BurnTokens(_mneToBurn);
}

function ExternalFunction1(uint256 _amountToStake, address[] memory _addressList, uint256[] memory uintList) public {
	if (_amountToStake > 0)
	{
		bst.transfer(msg.sender, address(mneStk), _amountToStake);
		emit Transfer(msg.sender, address(mneStk), _amountToStake); 
	}
	mneStk.startStaking(msg.sender, _amountToStake, _addressList, uintList);
}

function isAnyGenesisAddress(address _address) public view returns (bool success) {
	return gn.isAnyGenesisAddress(_address);
}

function isGenesisAddressLevel1(address _address) public view returns (bool success) {
	return gn.isGenesisAddressLevel1(_address);
}

function isGenesisAddressLevel2(address _address) public view returns (bool success) {
	return gn.isGenesisAddressLevel2(_address);
}

function isGenesisAddressLevel3(address _address) public view returns (bool success) {
	return gn.isGenesisAddressLevel3(_address);
}

function isGenesisAddressLevel2Or3(address _address) public view returns (bool success) {
	return gn.isGenesisAddressLevel2Or3(_address);
}

function registerAddressesValue(address[] memory _addressList, uint _value) public {
	uint i = 0;
	if (pc.setupRunning() == false) revert();
	if (msg.sender != pc.genesisCallerAddress()) revert(); 
	
	while(i < _addressList.length)
	{
		emit Transfer(address(this), _addressList[i], _value);
		i++;
	}
}

function ethFeeToUpgradeToLevel2Set(uint256 _ethFeeToUpgradeToLevel2) public {pc.ethFeeToUpgradeToLevel2Set(msg.sender, _ethFeeToUpgradeToLevel2);}
function ethFeeToUpgradeToLevel3Set(uint256 _ethFeeToUpgradeToLevel3) public {pc.ethFeeToUpgradeToLevel3Set(msg.sender, _ethFeeToUpgradeToLevel3);}
function ethFeeToBuyLevel1Set(uint256 _ethFeeToBuyLevel1) public {pc.ethFeeToBuyLevel1Set(msg.sender, _ethFeeToBuyLevel1);}
function ethFeeForSellerLevel1Set(uint256 _ethFeeForSellerLevel1) public {pc.ethFeeForSellerLevel1Set(msg.sender, _ethFeeForSellerLevel1);}
function ethPercentFeeGenesisExchangeSet(uint256 _ethPercentFeeGenesisExchange) public {pc.ethPercentFeeGenesisExchangeSet(msg.sender, _ethPercentFeeGenesisExchange);}
function ethPercentFeeNormalExchangeSet(uint256 _ethPercentFeeNormalExchange) public {pc.ethPercentFeeNormalExchangeSet(msg.sender, _ethPercentFeeNormalExchange);}
function ethPercentStakeExchangeSet(uint256 _ethPercentStakeExchange) public {pc.ethPercentStakeExchangeSet(msg.sender, _ethPercentStakeExchange);}
function amountOfGenesisToBuyStakesSet(uint256 _amountOfGenesisToBuyStakes) public {pc.amountOfGenesisToBuyStakesSet(msg.sender, _amountOfGenesisToBuyStakes);}
function amountOfMNEToBuyStakesSet(uint256 _amountOfMNEToBuyStakes) public {pc.amountOfMNEToBuyStakesSet(msg.sender, _amountOfMNEToBuyStakes);}
function amountOfMNEToTransferStakesSet(uint256 _amountOfMNEToTransferStakes) public {pc.amountOfMNEToTransferStakesSet(msg.sender, _amountOfMNEToTransferStakes);}
function amountOfGenesisToTransferStakesSet(uint256 _amountOfGenesisToTransferStakes) public {pc.amountOfGenesisToTransferStakesSet(msg.sender, _amountOfGenesisToTransferStakes);}
function stakeDecimalsSet(uint256 _stakeDecimals) public {pc.stakeDecimalsSet(msg.sender, _stakeDecimals);}


function ServiceFunction1(address[] memory _addressList, uint256[] memory _uintList) public payable {
	uint256 _mneToBurn = extS1.externalFunction.value(msg.value)(msg.sender, _addressList, _uintList);
	if (_mneToBurn > 0) BurnTokens(_mneToBurn);	
}

function ReceiverFunction1(uint256 _mneAmount, address[] memory _addressList, uint256[] memory _uintList) public payable {
	if (_mneAmount > 0)
	{
		bst.transfer(msg.sender, address(extR1), _mneAmount);
		emit Transfer(msg.sender, address(extR1), _mneAmount); 
	}
	extR1.externalFunction.value(msg.value)(msg.sender, _mneAmount, _addressList, _uintList);	
}
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"_publicCallsAddress","internalType":"address"},{"type":"address","name":"_publicArraysAddress","internalType":"address"},{"type":"address","name":"_genesisCallsAddress","internalType":"address"},{"type":"address","name":"_normalAddressAddress","internalType":"address"},{"type":"address","name":"_stakesAddress","internalType":"address"},{"type":"address","name":"_stakesBuysAddress","internalType":"address"},{"type":"address","name":"_genesisBuysAddress","internalType":"address"},{"type":"address","name":"_tokenServiceAddress","internalType":"address"},{"type":"address","name":"_baseTransfersAddress","internalType":"address"}]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"_owner","internalType":"address","indexed":true},{"type":"address","name":"_spender","internalType":"address","indexed":true},{"type":"uint256","name":"_value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"LogFailedStakeHolderSends","inputs":[{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"balance","internalType":"uint256","indexed":false},{"type":"uint256","name":"amountToSend","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"LogStakeHolderSends","inputs":[{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"balance","internalType":"uint256","indexed":false},{"type":"uint256","name":"amountToSend","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"StakeTransfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"AllowAddressToDestroyGenesis","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"AllowReceiveGenesisTransfers","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"Bridge","inputs":[{"type":"address","name":"_address","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"BurnGenesisAddresses","inputs":[{"type":"address[]","name":"_genesisAddressesToBurn","internalType":"address[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"BurnTokens","inputs":[{"type":"uint256","name":"mneToBurn","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"BuyGenesisAddress","inputs":[{"type":"address","name":"_address","internalType":"address payable"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"BuyGenesisLevel1FromNormal","inputs":[{"type":"address","name":"_address","internalType":"address payable"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"BuyGenesisLevel2FromNormal","inputs":[{"type":"address","name":"_address","internalType":"address payable"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"BuyGenesisLevel3FromNormal","inputs":[{"type":"address","name":"_address","internalType":"address payable"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"BuyLuckyDrawTickets","inputs":[{"type":"uint256[]","name":"max","internalType":"uint256[]"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"BuyNormalAddress","inputs":[{"type":"address","name":"_address","internalType":"address payable"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"BuyStakeGenesis","inputs":[{"type":"address","name":"_address","internalType":"address payable"},{"type":"address[]","name":"_genesisAddressesToBurn","internalType":"address[]"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"BuyStakeMNE","inputs":[{"type":"address","name":"_address","internalType":"address payable"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"ContractTransferAllFundsOut","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"DestroyGenesisAddressLevel1","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"ExternalFunction1","inputs":[{"type":"uint256","name":"_amountToStake","internalType":"uint256"},{"type":"address[]","name":"_addressList","internalType":"address[]"},{"type":"uint256[]","name":"uintList","internalType":"uint256[]"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"Payment","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"PayoutStakeHolders","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"ReceiverFunction1","inputs":[{"type":"uint256","name":"_mneAmount","internalType":"uint256"},{"type":"address[]","name":"_addressList","internalType":"address[]"},{"type":"uint256[]","name":"_uintList","internalType":"uint256[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"RemoveAllowAddressToDestroyGenesis","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"RemoveAllowReceiveGenesisTransfers","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"RemoveGenesisAddressFromSale","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"RemoveNormalAddressFromSale","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"RemoveStakeFromSale","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"ServiceFunction1","inputs":[{"type":"address[]","name":"_addressList","internalType":"address[]"},{"type":"uint256[]","name":"_uintList","internalType":"uint256[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"SetBlockPayouts","inputs":[{"type":"bool","name":"toBlock","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"SetGenesisForSale","inputs":[{"type":"uint256","name":"weiPrice","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"SetNormalAddressForSale","inputs":[{"type":"uint256","name":"weiPricePerMNE","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"SetStakeForSale","inputs":[{"type":"uint256","name":"priceInWei","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"StakeTransferGenesis","inputs":[{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"},{"type":"address[]","name":"_genesisAddressesToBurn","internalType":"address[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"StakeTransferMNE","inputs":[{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"TransferGenesis","inputs":[{"type":"address","name":"_to","internalType":"address"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"UpgradeOthersToLevel2FromLevel1","inputs":[{"type":"address[]","name":"_addresses","internalType":"address[]"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"UpgradeOthersToLevel3FromDev","inputs":[{"type":"address[]","name":"_addresses","internalType":"address[]"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"UpgradeOthersToLevel3FromLevel1","inputs":[{"type":"address[]","name":"_addresses","internalType":"address[]"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"UpgradeOthersToLevel3FromLevel2","inputs":[{"type":"address[]","name":"_addresses","internalType":"address[]"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"UpgradeToLevel2FromLevel1","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"UpgradeToLevel3FromDev","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"UpgradeToLevel3FromLevel1","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"UpgradeToLevel3FromLevel2","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"remaining","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"_owner","internalType":"address"},{"type":"address","name":"_spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"amountOfGenesisToBuyStakesSet","inputs":[{"type":"uint256","name":"_amountOfGenesisToBuyStakes","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"amountOfGenesisToTransferStakesSet","inputs":[{"type":"uint256","name":"_amountOfGenesisToTransferStakes","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"amountOfMNEToBuyStakesSet","inputs":[{"type":"uint256","name":"_amountOfMNEToBuyStakes","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"amountOfMNEToTransferStakesSet","inputs":[{"type":"uint256","name":"_amountOfMNEToTransferStakes","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"_spender","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"Balance","internalType":"uint256"}],"name":"availableBalanceOf","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"balance","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract baseTransfers"}],"name":"bst","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"circulatingSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"blockNumber","internalType":"uint256"}],"name":"currentBlock","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"blockNumber","internalType":"uint256"}],"name":"currentEthBlock","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"ethFeeForSellerLevel1Set","inputs":[{"type":"uint256","name":"_ethFeeForSellerLevel1","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"ethFeeToBuyLevel1Set","inputs":[{"type":"uint256","name":"_ethFeeToBuyLevel1","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"ethFeeToUpgradeToLevel2Set","inputs":[{"type":"uint256","name":"_ethFeeToUpgradeToLevel2","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"ethFeeToUpgradeToLevel3Set","inputs":[{"type":"uint256","name":"_ethFeeToUpgradeToLevel3","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"ethPercentFeeGenesisExchangeSet","inputs":[{"type":"uint256","name":"_ethPercentFeeGenesisExchange","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"ethPercentFeeNormalExchangeSet","inputs":[{"type":"uint256","name":"_ethPercentFeeNormalExchange","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"ethPercentStakeExchangeSet","inputs":[{"type":"uint256","name":"_ethPercentStakeExchange","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract externalReceiver"}],"name":"extR1","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract externalService"}],"name":"extS1","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"external1Address","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"external1AddressSet","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"externalReceiver1","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"externalService1","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract genesisCalls"}],"name":"gn","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract genesisBuys"}],"name":"gnb","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"isAnyGenesisAddress","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"isGenesisAddressLevel1","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"isGenesisAddressLevel2","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"isGenesisAddressLevel2Or3","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"isGenesisAddressLevel3","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract luckyDraw"}],"name":"lkd","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"loadLuckyDraw","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"loadMNEStaking","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract mneStaking"}],"name":"mneStk","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract normalAddress"}],"name":"na","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract publicArrays"}],"name":"pa","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"payoutBlocked","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"payoutOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract publicCalls"}],"name":"pc","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"registerAddressesValue","inputs":[{"type":"address[]","name":"_addressList","internalType":"address[]"},{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"reloadBaseTransfers","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"reloadGenesis","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"reloadGenesisBuys","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"reloadNormalAddress","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"reloadPublicArrays","inputs":[{"type":"address","name":"_address","internalType":"address"},{"type":"uint256","name":"code","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"reloadPublicCalls","inputs":[{"type":"address","name":"_address","internalType":"address"},{"type":"uint256","name":"code","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"reloadStakeBuys","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"reloadStakes","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"reloadTokenService","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address payable"}],"name":"secondaryPayoutAddress","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setBalanceNormalAddress","inputs":[{"type":"address","name":"_address","internalType":"address"},{"type":"uint256","name":"_balance","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setBalanceStakes","inputs":[{"type":"address","name":"_address","internalType":"address"},{"type":"uint256","name":"balance","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setPayoutOwner","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSecondaryPayoutAddress","inputs":[{"type":"address","name":"_address","internalType":"address payable"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setUpdater","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract stakes"}],"name":"st","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"balance","internalType":"uint256"}],"name":"stakeBalanceOf","inputs":[{"type":"address","name":"_address","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"stakeDecimalsSet","inputs":[{"type":"uint256","name":"_stakeDecimals","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract stakeBuys"}],"name":"stb","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"stopSetup","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract tokenService"}],"name":"tks","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"TotalSupply","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transfer","inputs":[{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferReserved","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateTokenInfo","inputs":[{"type":"string","name":"_name","internalType":"string"},{"type":"string","name":"_symbol","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"updaterAddress","inputs":[]}]
              

Contract Creation Code

0x6080604052601080546001600160a01b0319908116909155601180546001600160a81b031916600160a01b17905560128054909116331790553480156200004557600080fd5b506040516200660e3803806200660e83398181016040526101208110156200006c57600080fd5b5080516020808301516040808501516060860151608087015160a088015160c089015160e08a0151610100909a01518651808801909752600d8088526c4d696e657265756d2043454c4f60981b9790990196875298999698949793969295919490939091620000df9160009190620005b0565b50604080518082019091526004808252634d4e454360e01b60209092019182526200010d91600191620005b0565b506002805460ff191660081790556200012e6001600160e01b036200058016565b88600260016101000a8154816001600160a01b0302191690836001600160a01b03160217905550600260019054906101000a90046001600160a01b03166001600160a01b03166313b9f0c76040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620001a657600080fd5b505af1158015620001bb573d6000803e3d6000fd5b5050600380546001600160a01b0319166001600160a01b038c81169190911791829055604080516313b9f0c760e01b815290519290911693506313b9f0c7925060048082019260009290919082900301818387803b1580156200021d57600080fd5b505af115801562000232573d6000803e3d6000fd5b5050600480546001600160a01b0319166001600160a01b038b811691909117808355604080516313b9f0c760e01b815290519190921694506313b9f0c793508183019260009282900301818387803b1580156200028e57600080fd5b505af1158015620002a3573d6000803e3d6000fd5b5050600580546001600160a01b0319166001600160a01b038a81169190911791829055604080516313b9f0c760e01b815290519290911693506313b9f0c7925060048082019260009290919082900301818387803b1580156200030557600080fd5b505af11580156200031a573d6000803e3d6000fd5b5050600680546001600160a01b0319166001600160a01b038981169190911791829055604080516313b9f0c760e01b815290519290911693506313b9f0c7925060048082019260009290919082900301818387803b1580156200037c57600080fd5b505af115801562000391573d6000803e3d6000fd5b5050600780546001600160a01b0319166001600160a01b038881169190911791829055604080516313b9f0c760e01b815290519290911693506313b9f0c7925060048082019260009290919082900301818387803b158015620003f357600080fd5b505af115801562000408573d6000803e3d6000fd5b5050600880546001600160a01b0319166001600160a01b038781169190911791829055604080516313b9f0c760e01b815290519290911693506313b9f0c7925060048082019260009290919082900301818387803b1580156200046a57600080fd5b505af11580156200047f573d6000803e3d6000fd5b5050600980546001600160a01b0319166001600160a01b038681169190911791829055604080516313b9f0c760e01b815290519290911693506313b9f0c7925060048082019260009290919082900301818387803b158015620004e157600080fd5b505af1158015620004f6573d6000803e3d6000fd5b5050600a80546001600160a01b0319166001600160a01b038581169190911791829055604080516313b9f0c760e01b815290519290911693506313b9f0c7925060048082019260009290919082900301818387803b1580156200055857600080fd5b505af11580156200056d573d6000803e3d6000fd5b5050505050505050505050505062000655565b6010546001600160a01b0316620005a957601080546001600160a01b03191633179055620005ae565b600080fd5b565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005f357805160ff191683800117855562000623565b8280016001018555821562000623579182015b828111156200062357825182559160200191906001019062000606565b506200063192915062000635565b5090565b6200065291905b808211156200063157600081556001016200063c565b90565b615fa980620006656000396000f3fe6080604052600436106106d35760003560e01c80637347060c1161037a578063b9c25cae116101d1578063ddcbfce011610102578063e69919ae116100a0578063ef3dd5c81161007a578063ef3dd5c814611fe1578063fd3c763814612014578063fdbc653014612047578063ffc4b1681461205c576106d3565b8063e69919ae14611eeb578063e9095e5c14611f00578063eb0fbbad14611fae576106d3565b8063e12ed13c116100dc578063e12ed13c14611e79578063e241263014611e8e578063e33eaaf714611ea3578063e4c4b47c14611eb8576106d3565b8063ddcbfce014611e07578063df02f1db14611e31578063df462a4714611e64576106d3565b8063c92f146a1161016f578063dae487ca11610149578063dae487ca14611d63578063db16cb5b14611d78578063dd2c455c14611da2578063dd62ed3e14611dcc576106d3565b8063c92f146a14611cf1578063cf91e33114611d06578063d4f7457914611d39576106d3565b8063bdbdcd75116101ab578063bdbdcd7514611b45578063c0ea2e7714611b78578063c169653314611b8d578063c3536e8b14611c50576106d3565b8063b9c25cae14611ae8578063bad0f93414611afd578063bd65fc4c14611b30576106d3565b806393c63b9d116102ab578063aa13504e11610249578063aee1fabc11610223578063aee1fabc14611a61578063af46aa0814611a76578063b3e9047614611aa9578063b4e85ec814611ad3576106d3565b8063aa13504e146118f6578063ac0f738f14611929578063aede090f1461193e576106d3565b806397b5e5541161028557806397b5e55414611858578063a33b12601461188b578063a5094f8f14611893578063a9059cbb146118bd576106d3565b806393c63b9d146117dd57806394ccd96f1461181057806395d89b4114611843576106d3565b806380167ebf116103185780638af8edfc116102f25780638af8edfc146116cf5780638ccb0023146116e45780639055a23e146117955780639358928b146117c8576106d3565b806380167ebf146116045780638278188a146116a55780638a670113146116ba576106d3565b8063742ec16411610354578063742ec164146114ef57806374a72e41146115195780637b411ca5146115c95780637d20a24f146115de576106d3565b80637347060c1461147b57806373668817146114a157806373f0cc2d146114da576106d3565b80633521bbed1161052e57806361a3be801161045f5780636dcb9800116103fd5780637022c79e116103d75780637022c79e146113d45780637050ec891461140757806370a082311461144057806370a8a2e614611473576106d3565b80636dcb98001461136f5780636e3ee8f1146113995780636fd615bf146113bf576106d3565b80636af43470116104395780636af434701461128b5780636b3b2800146112935780636be2ca43146112b95780636c2f12e6146112ce576106d3565b806361a3be8014611226578063633865511461123b57806366a497b714611261576106d3565b80634890bb51116104cc578063542aa99f116104a6578063542aa99f1461119957806357e08c60146111ae5780635b48a884146111e75780635b65268f14611211576106d3565b80634890bb511461112e57806350ac2f6914611136578063522c628f14611160576106d3565b80633c64cfc6116105085780633c64cfc6146110b6578063416e8604146110ef578063460b72ce14611104578063474b07bf14611119576106d3565b80633521bbed14610f1957806336d6991014610f4c578063399c40ea14610f7f576106d3565b806321df8098116106085780632940187a116105a65780633118f543116105805780633118f54314610e89578063313ce56714610e9e5780633181a5a714610ec957806333d5993414610eef576106d3565b80632940187a14610cf65780632cd3fd7014610d295780632f71d02214610d53576106d3565b806323e46e7c116105e257806323e46e7c14610c3f57806324ac57b714610c6b57806325d998bb14610c805780632631ef1214610cb3576106d3565b806321df809814610b9057806322e3f16214610bc357806323b872dd14610bfc576106d3565b80630d061e7511610675578063177e48d01161064f578063177e48d014610a7d57806318160ddd14610b1e5780631d2cb86114610b335780631ec32a6614610b66576106d3565b80630d061e7514610a0b578063124d83d814610a20578063128fb93014610a4a576106d3565b8063095ea7b3116106b1578063095ea7b3146108b857806309ae18441461090557806309f6c607146109b35780630a63361c146109da576106d3565b806306fdde03146106d857806307c5c18e14610762578063088c35fd1461088e575b600080fd5b3480156106e457600080fd5b506106ed61208f565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561072757818101518382015260200161070f565b50505050905090810190601f1680156107545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61088c6004803603606081101561077857600080fd5b81359190810190604081016020820135600160201b81111561079957600080fd5b8201836020820111156107ab57600080fd5b803590602001918460208302840111600160201b831117156107cc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561081b57600080fd5b82018360208201111561082d57600080fd5b803590602001918460208302840111600160201b8311171561084e57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061211d945050505050565b005b34801561089a57600080fd5b5061088c600480360360208110156108b157600080fd5b50356122ce565b3480156108c457600080fd5b506108f1600480360360408110156108db57600080fd5b506001600160a01b038135169060200135612340565b604080519115158252519081900360200190f35b34801561091157600080fd5b5061088c6004803603602081101561092857600080fd5b810190602081018135600160201b81111561094257600080fd5b82018360208201111561095457600080fd5b803590602001918460208302840111600160201b8311171561097557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612403945050505050565b3480156109bf57600080fd5b506109c8612529565b60408051918252519081900360200190f35b3480156109e657600080fd5b506109ef61252e565b604080516001600160a01b039092168252519081900360200190f35b348015610a1757600080fd5b506109ef61253d565b348015610a2c57600080fd5b5061088c60048036036020811015610a4357600080fd5b503561254c565b348015610a5657600080fd5b5061088c60048036036020811015610a6d57600080fd5b50356001600160a01b03166125a3565b61088c60048036036020811015610a9357600080fd5b810190602081018135600160201b811115610aad57600080fd5b820183602082011115610abf57600080fd5b803590602001918460208302840111600160201b83111715610ae057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506125d5945050505050565b348015610b2a57600080fd5b506109c86127b1565b348015610b3f57600080fd5b5061088c60048036036020811015610b5657600080fd5b50356001600160a01b0316612827565b348015610b7257600080fd5b5061088c60048036036020811015610b8957600080fd5b503561285a565b348015610b9c57600080fd5b5061088c60048036036020811015610bb357600080fd5b50356001600160a01b03166128b1565b348015610bcf57600080fd5b5061088c60048036036040811015610be657600080fd5b506001600160a01b03813516906020013561293e565b348015610c0857600080fd5b506108f160048036036060811015610c1f57600080fd5b506001600160a01b038135811691602081013590911690604001356129c7565b348015610c4b57600080fd5b5061088c60048036036020811015610c6257600080fd5b50351515612aa2565b348015610c7757600080fd5b506109ef612ad1565b348015610c8c57600080fd5b506109c860048036036020811015610ca357600080fd5b50356001600160a01b0316612ae0565b348015610cbf57600080fd5b5061088c60048036036060811015610cd657600080fd5b506001600160a01b03813581169160208101359091169060400135612b65565b348015610d0257600080fd5b506108f160048036036020811015610d1957600080fd5b50356001600160a01b0316612cd0565b348015610d3557600080fd5b506108f160048036036020811015610d4c57600080fd5b5035612d23565b348015610d5f57600080fd5b5061088c60048036036040811015610d7657600080fd5b810190602081018135600160201b811115610d9057600080fd5b820183602082011115610da257600080fd5b803590602001918460018302840111600160201b83111715610dc357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610e1557600080fd5b820183602082011115610e2757600080fd5b803590602001918460018302840111600160201b83111715610e4857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612dd4945050505050565b348015610e9557600080fd5b506109ef612e12565b348015610eaa57600080fd5b50610eb3612e21565b6040805160ff9092168252519081900360200190f35b61088c60048036036020811015610edf57600080fd5b50356001600160a01b0316612e2a565b348015610efb57600080fd5b5061088c60048036036020811015610f1257600080fd5b5035613017565b348015610f2557600080fd5b5061088c60048036036020811015610f3c57600080fd5b50356001600160a01b031661306e565b348015610f5857600080fd5b506108f160048036036020811015610f6f57600080fd5b50356001600160a01b03166130a1565b348015610f8b57600080fd5b5061088c60048036036060811015610fa257600080fd5b81359190810190604081016020820135600160201b811115610fc357600080fd5b820183602082011115610fd557600080fd5b803590602001918460208302840111600160201b83111715610ff657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561104557600080fd5b82018360208201111561105757600080fd5b803590602001918460208302840111600160201b8311171561107857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506130f4945050505050565b3480156110c257600080fd5b5061088c600480360360408110156110d957600080fd5b506001600160a01b0381351690602001356132a4565b3480156110fb57600080fd5b506109ef6132ff565b34801561111057600080fd5b5061088c61330e565b34801561112557600080fd5b506109ef61346f565b61088c61347e565b34801561114257600080fd5b5061088c6004803603602081101561115957600080fd5b50356134eb565b34801561116c57600080fd5b5061088c6004803603604081101561118357600080fd5b506001600160a01b038135169060200135613542565b3480156111a557600080fd5b506108f16135dd565b3480156111ba57600080fd5b5061088c600480360360408110156111d157600080fd5b506001600160a01b03813516906020013561363d565b3480156111f357600080fd5b5061088c6004803603602081101561120a57600080fd5b50356136e2565b34801561121d57600080fd5b5061088c613735565b34801561123257600080fd5b5061088c613782565b61088c6004803603602081101561125157600080fd5b50356001600160a01b03166137cf565b34801561126d57600080fd5b5061088c6004803603602081101561128457600080fd5b5035613984565b61088c6139db565b61088c600480360360208110156112a957600080fd5b50356001600160a01b0316613a2e565b3480156112c557600080fd5b5061088c613b4f565b61088c600480360360208110156112e457600080fd5b810190602081018135600160201b8111156112fe57600080fd5b82018360208201111561131057600080fd5b803590602001918460208302840111600160201b8311171561133157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613b9b945050505050565b34801561137b57600080fd5b5061088c6004803603602081101561139257600080fd5b5035613d72565b61088c600480360360208110156113af57600080fd5b50356001600160a01b0316613dc9565b3480156113cb57600080fd5b506109ef613e5b565b3480156113e057600080fd5b5061088c600480360360208110156113f757600080fd5b50356001600160a01b0316613e6a565b34801561141357600080fd5b5061088c6004803603604081101561142a57600080fd5b506001600160a01b038135169060200135613eda565b34801561144c57600080fd5b506109c86004803603602081101561146357600080fd5b50356001600160a01b0316613ff9565b61088c61404c565b61088c6004803603602081101561149157600080fd5b50356001600160a01b031661409f565b3480156114ad57600080fd5b5061088c600480360360408110156114c457600080fd5b506001600160a01b038135169060200135614131565b3480156114e657600080fd5b506109ef6141c9565b3480156114fb57600080fd5b5061088c6004803603602081101561151257600080fd5b50356141d8565b34801561152557600080fd5b5061088c6004803603604081101561153c57600080fd5b810190602081018135600160201b81111561155657600080fd5b82018360208201111561156857600080fd5b803590602001918460208302840111600160201b8311171561158957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550509135925061422c915050565b3480156115d557600080fd5b5061088c614396565b61088c600480360360208110156115f457600080fd5b50356001600160a01b03166147a7565b61088c6004803603602081101561161a57600080fd5b810190602081018135600160201b81111561163457600080fd5b82018360208201111561164657600080fd5b803590602001918460208302840111600160201b8311171561166757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550614839945050505050565b3480156116b157600080fd5b506109ef614908565b3480156116c657600080fd5b506109ef614917565b3480156116db57600080fd5b506109ef614926565b61088c600480360360408110156116fa57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561172457600080fd5b82018360208201111561173657600080fd5b803590602001918460208302840111600160201b8311171561175757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550614935945050505050565b3480156117a157600080fd5b506108f1600480360360208110156117b857600080fd5b50356001600160a01b0316614b5d565b3480156117d457600080fd5b506109c8614bb0565b3480156117e957600080fd5b5061088c6004803603602081101561180057600080fd5b50356001600160a01b0316614bf5565b34801561181c57600080fd5b5061088c6004803603602081101561183357600080fd5b50356001600160a01b0316614c61565b34801561184f57600080fd5b506106ed614c94565b34801561186457600080fd5b5061088c6004803603602081101561187b57600080fd5b50356001600160a01b0316614cee565b61088c61346d565b34801561189f57600080fd5b5061088c600480360360208110156118b657600080fd5b5035614d5e565b3480156118c957600080fd5b5061088c600480360360408110156118e057600080fd5b506001600160a01b038135169060200135614db5565b34801561190257600080fd5b5061088c6004803603602081101561191957600080fd5b50356001600160a01b0316614eb4565b34801561193557600080fd5b5061088c614ee7565b61088c6004803603604081101561195457600080fd5b810190602081018135600160201b81111561196e57600080fd5b82018360208201111561198057600080fd5b803590602001918460208302840111600160201b831117156119a157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156119f057600080fd5b820183602082011115611a0257600080fd5b803590602001918460208302840111600160201b83111715611a2357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550614f34945050505050565b348015611a6d57600080fd5b506109ef61504c565b348015611a8257600080fd5b506109c860048036036020811015611a9957600080fd5b50356001600160a01b031661505b565b348015611ab557600080fd5b5061088c60048036036020811015611acc57600080fd5b50356150b0565b348015611adf57600080fd5b5061088c615107565b348015611af457600080fd5b5061088c615153565b348015611b0957600080fd5b5061088c60048036036020811015611b2057600080fd5b50356001600160a01b03166151a0565b348015611b3c57600080fd5b506109ef615210565b348015611b5157600080fd5b5061088c60048036036020811015611b6857600080fd5b50356001600160a01b031661521f565b348015611b8457600080fd5b506108f161528f565b348015611b9957600080fd5b5061088c60048036036060811015611bb057600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115611bdf57600080fd5b820183602082011115611bf157600080fd5b803590602001918460208302840111600160201b83111715611c1257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061529f945050505050565b61088c60048036036020811015611c6657600080fd5b810190602081018135600160201b811115611c8057600080fd5b820183602082011115611c9257600080fd5b803590602001918460208302840111600160201b83111715611cb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550615455945050505050565b348015611cfd57600080fd5b5061088c615716565b348015611d1257600080fd5b5061088c60048036036020811015611d2957600080fd5b50356001600160a01b0316615763565b348015611d4557600080fd5b5061088c60048036036020811015611d5c57600080fd5b5035615846565b348015611d6f57600080fd5b506109ef61589d565b348015611d8457600080fd5b5061088c60048036036020811015611d9b57600080fd5b50356158ac565b348015611dae57600080fd5b5061088c60048036036020811015611dc557600080fd5b50356158ff565b348015611dd857600080fd5b506109c860048036036040811015611def57600080fd5b506001600160a01b0381358116916020013516615956565b348015611e1357600080fd5b5061088c60048036036020811015611e2a57600080fd5b50356159e6565b348015611e3d57600080fd5b5061088c60048036036020811015611e5457600080fd5b50356001600160a01b0316615a3d565b348015611e7057600080fd5b506109ef615a70565b348015611e8557600080fd5b506109c8615a7f565b348015611e9a57600080fd5b5061088c615b02565b348015611eaf57600080fd5b5061088c615b29565b348015611ec457600080fd5b5061088c60048036036020811015611edb57600080fd5b50356001600160a01b0316615b6c565b348015611ef757600080fd5b506109ef615b9f565b348015611f0c57600080fd5b5061088c60048036036020811015611f2357600080fd5b810190602081018135600160201b811115611f3d57600080fd5b820183602082011115611f4f57600080fd5b803590602001918460208302840111600160201b83111715611f7057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550615bb3945050505050565b348015611fba57600080fd5b506108f160048036036020811015611fd157600080fd5b50356001600160a01b0316615c57565b348015611fed57600080fd5b5061088c6004803603602081101561200457600080fd5b50356001600160a01b0316615caa565b34801561202057600080fd5b5061088c6004803603602081101561203757600080fd5b50356001600160a01b0316615cff565b34801561205357600080fd5b506109ef615d6f565b34801561206857600080fd5b506108f16004803603602081101561207f57600080fd5b50356001600160a01b0316615d7e565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156121155780601f106120ea57610100808354040283529160200191612115565b820191906000526020600020905b8154815290600101906020018083116120f857829003601f168201915b505050505081565b82156121cd57600a54600e54604080516317d5759960e31b81523360048201526001600160a01b039283166024820152604481018790529051919092169163beabacc891606480830192600092919082900301818387803b15801561218157600080fd5b505af1158015612195573d6000803e3d6000fd5b5050600e546040805187815290516001600160a01b039092169350339250600080516020615f23833981519152919081900360200190a35b600e54604051632433a49160e11b81523360048201818152602483018790526080604484019081528651608485015286516001600160a01b03909516946348674922943494938a938a938a93606481019160a4909101906020808801910280838360005b83811015612249578181015183820152602001612231565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015612288578181015183820152602001612270565b5050505090500196505050505050506000604051808303818588803b1580156122b057600080fd5b505af11580156122c4573d6000803e3d6000fd5b5050505050505050565b600254604080516305de45bd60e11b81523360048201526024810184905290516101009092046001600160a01b031691630bbc8b7a9160448082019260009290919082900301818387803b15801561232557600080fd5b505af1158015612339573d6000803e3d6000fd5b5050505050565b6002546040805163779a859960e11b81523360048201526001600160a01b03858116602483015260448201859052915160009361010090049092169163ef350b3291606480820192869290919082900301818387803b1580156123a257600080fd5b505af11580156123b6573d6000803e3d6000fd5b50506040805185815290516001600160a01b03871693503392507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a350600192915050565b60005b815181101561247b5760006001600160a01b031682828151811061242657fe5b60200260200101516001600160a01b0316600080516020615f2383398151915261246285858151811061245557fe5b6020026020010151613ff9565b60408051918252519081900360200190a3600101612406565b6004805460408051633ca4fe7b60e11b815233938101848152602482019283528651604483015286516001600160a01b0390941694637949fcf6949093889390916064909101906020808601910280838360005b838110156124e75781810151838201526020016124cf565b505050509050019350505050600060405180830381600087803b15801561250d57600080fd5b505af1158015612521573d6000803e3d6000fd5b505050505050565b435b90565b6003546001600160a01b031681565b6012546001600160a01b031681565b60025460408051633429fca760e21b81523360048201526024810184905290516101009092046001600160a01b03169163d0a7f29c9160448082019260009290919082900301818387803b15801561232557600080fd5b6010546001600160a01b03163314156106d357600b80546001600160a01b0319166001600160a01b0383161790555b50565b805160025460408051633238268960e01b81529051839261010090046001600160a01b0316916332382689916004808301926020929190829003018186803b15801561262057600080fd5b505afa158015612634573d6000803e3d6000fd5b505050506040513d602081101561264a57600080fd5b505102341461268a5760405162461bcd60e51b8152600401808060200182810382526031815260200180615f436031913960400191505060405180910390fd5b60005b818110156127ac5760045483516001600160a01b03909116906376067e67908590849081106126b857fe5b6020026020010151600260019054906101000a90046001600160a01b03166001600160a01b031663323826896040518163ffffffff1660e01b815260040160206040518083038186803b15801561270e57600080fd5b505afa158015612722573d6000803e3d6000fd5b505050506040513d602081101561273857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b15801561278857600080fd5b505af115801561279c573d6000803e3d6000fd5b50506001909201915061268d9050565b505050565b600a54604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b1580156127f657600080fd5b505afa15801561280a573d6000803e3d6000fd5b505050506040513d602081101561282057600080fd5b5051905090565b6010546001600160a01b03163314156106d357600e80546001600160a01b0319166001600160a01b0383161790556125d2565b600254604080516372a4edd560e01b81523360048201526024810184905290516101009092046001600160a01b0316916372a4edd59160448082019260009290919082900301818387803b15801561232557600080fd5b6010546001600160a01b03163314156106d357600780546001600160a01b0319166001600160a01b038381169190911791829055604080516313b9f0c760e01b8152905192909116916313b9f0c79160048082019260009290919082900301818387803b15801561292157600080fd5b505af1158015612935573d6000803e3d6000fd5b505050506125d2565b6040805182815290516001600160a01b038416913091600080516020615f238339815191529181900360200190a3600954604080516359bc8a9160e01b81523360048201526001600160a01b03858116602483015260448201859052915191909216916359bc8a9191606480830192600092919082900301818387803b15801561250d57600080fd5b600a5460408051630aed65f560e11b81523360048201526001600160a01b0386811660248301528581166044830152606482018590529151600093849316916315dacbea91608480830192602092919082900301818787803b158015612a2c57600080fd5b505af1158015612a40573d6000803e3d6000fd5b505050506040513d6020811015612a5657600080fd5b505190508015612a9a57836001600160a01b0316856001600160a01b0316600080516020615f23833981519152856040518082815260200191505060405180910390a35b949350505050565b6011546001600160a01b03163314156125d25760118054821515600160a01b0260ff60a01b1990911617905550565b600b546001600160a01b031681565b60048054604080516325d998bb60e01b81526001600160a01b03858116948201949094529051600093909216916325d998bb91602480820192602092909190829003018186803b158015612b3357600080fd5b505afa158015612b47573d6000803e3d6000fd5b505050506040513d6020811015612b5d57600080fd5b505192915050565b600f546001600160a01b0316331480612b8d575060025461010090046001600160a01b031633145b80612ba257506003546001600160a01b031633145b80612bb757506004546001600160a01b031633145b80612bcc57506005546001600160a01b031633145b80612be157506006546001600160a01b031633145b80612bf657506007546001600160a01b031633145b80612c0b57506008546001600160a01b031633145b80612c2057506009546001600160a01b031633145b80612c355750600a546001600160a01b031633145b80612c4a5750600b546001600160a01b031633145b80612c5f5750600c546001600160a01b031633145b80612c745750600d546001600160a01b031633145b80612c895750600e546001600160a01b031633145b612c9257600080fd5b816001600160a01b0316836001600160a01b0316600080516020615f23833981519152836040518082815260200191505060405180910390a3505050565b60048054604080516314a00c3d60e11b81526001600160a01b0385811694820194909452905160009390921691632940187a91602480820192602092909190829003018186803b158015612b3357600080fd5b6004805460408051631c46b08160e11b8152339381019390935260248301849052516000926001600160a01b039092169163388d610291604480830192602092919082900301818787803b158015612d7a57600080fd5b505af1158015612d8e573d6000803e3d6000fd5b505050506040513d6020811015612da457600080fd5b50506040805183815290516000913391600080516020615f238339815191529181900360200190a3506001919050565b6010546001600160a01b03163314156106d3578151612dfa906000906020850190615dd4565b5080516127ac906001906020840190615dd4565b5050565b6004546001600160a01b031681565b60025460ff1681565b600480546040805163482ad11f60e11b81526001600160a01b038581169482019490945290519290911691639055a23e91602480820192602092909190829003018186803b158015612e7b57600080fd5b505afa158015612e8f573d6000803e3d6000fd5b505050506040513d6020811015612ea557600080fd5b505115612eba57612eb581613a2e565b6125d2565b60048054604080516314a00c3d60e11b81526001600160a01b038581169482019490945290519290911691632940187a91602480820192602092909190829003018186803b158015612f0b57600080fd5b505afa158015612f1f573d6000803e3d6000fd5b505050506040513d6020811015612f3557600080fd5b505115612f4557612eb58161409f565b60048054604080516001620769d360e31b031981526001600160a01b03858116948201949094529051929091169163ffc4b16891602480820192602092909190829003018186803b158015612f9957600080fd5b505afa158015612fad573d6000803e3d6000fd5b505050506040513d6020811015612fc357600080fd5b505115612fd357612eb581613dc9565b6040805162461bcd60e51b815260206004820152601460248201527341646472657373206e6f7420666f722073616c6560601b604482015290519081900360640190fd5b6002546040805163f5d1858560e01b81523360048201526024810184905290516101009092046001600160a01b03169163f5d185859160448082019260009290919082900301818387803b15801561232557600080fd5b6010546001600160a01b03163314156106d357600f80546001600160a01b0319166001600160a01b0383161790556125d2565b600480546040805163036d699160e41b81526001600160a01b03858116948201949094529051600093909216916336d6991091602480820192602092909190829003018186803b158015612b3357600080fd5b82156131a457600a54600b54604080516317d5759960e31b81523360048201526001600160a01b039283166024820152604481018790529051919092169163beabacc891606480830192600092919082900301818387803b15801561315857600080fd5b505af115801561316c573d6000803e3d6000fd5b5050600b546040805187815290516001600160a01b039092169350339250600080516020615f23833981519152919081900360200190a35b600b54604051630a67889360e01b81523360048201818152602483018790526080604484019081528651608485015286516001600160a01b0390951694630a6788939489938993899391929091606482019160a401906020808801910280838360005b8381101561321f578181015183820152602001613207565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561325e578181015183820152602001613246565b505050509050019650505050505050600060405180830381600087803b15801561328757600080fd5b505af115801561329b573d6000803e3d6000fd5b50505050505050565b6006546040805163f8e4df0f60e01b81523360048201526001600160a01b038581166024830152604482018590529151919092169163f8e4df0f91606480830192600092919082900301818387803b15801561250d57600080fd5b6005546001600160a01b031681565b600480546040805163482ad11f60e11b81523393810193909352516001600160a01b0390911691639055a23e916024808301926020929190829003018186803b15801561335a57600080fd5b505afa15801561336e573d6000803e3d6000fd5b505050506040513d602081101561338457600080fd5b50511561342057600033600080516020615f238339815191526133a682613ff9565b60408051918252519081900360200190a360095460408051634cb752db60e01b815233600482015290516001600160a01b0390921691634cb752db9160248082019260009290919082900301818387803b15801561340357600080fd5b505af1158015613417573d6000803e3d6000fd5b5050505061346d565b6040805162461bcd60e51b815260206004820152601b60248201527f41646472657373206e6f742047656e65736973204c6576656c20310000000000604482015290519081900360640190fd5b565b600e546001600160a01b031681565b60048054604080516376067e6760e01b81523393810193909352346024840152516001600160a01b03909116916376067e6791604480830192600092919082900301818387803b1580156134d157600080fd5b505af11580156134e5573d6000803e3d6000fd5b50505050565b6002546040805163c226832b60e01b81523360048201526024810184905290516101009092046001600160a01b03169163c226832b9160448082019260009290919082900301818387803b15801561232557600080fd5b806104d21461355057600080fd5b6010546001600160a01b03163314156106d357600380546001600160a01b0319166001600160a01b038481169190911791829055604080516313b9f0c760e01b8152905192909116916313b9f0c79160048082019260009290919082900301818387803b1580156135c057600080fd5b505af11580156135d4573d6000803e3d6000fd5b50505050612e0e565b600a5460408051633b8d674f60e01b815233600482015290516000926001600160a01b031691633b8d674f91602480830192602092919082900301818787803b15801561362957600080fd5b505af115801561280a573d6000803e3d6000fd5b60055460408051631e4eb16d60e31b81523360048201526001600160a01b038581166024830152604482018590529151919092169163f2758b6891606480830192600092919082900301818387803b15801561369857600080fd5b505af11580156136ac573d6000803e3d6000fd5b50506040805184815290516001600160a01b0386169350309250600080516020615f238339815191529181900360200190a35050565b60055460408051631d90fdf560e31b81523360048201526024810184905290516001600160a01b039092169163ec87efa89160448082019260009290919082900301818387803b15801561232557600080fd5b60048054604080516306baf26360e01b81523393810193909352516001600160a01b03909116916306baf26391602480830192600092919082900301818387803b1580156134d157600080fd5b60048054604080516352ba171d60e01b81523393810193909352516001600160a01b03909116916352ba171d91602480830192600092919082900301818387803b1580156134d157600080fd5b60025460408051633b317dab60e01b81526001600160a01b0384811660048301529151600093610100900490921691633b317dab91602480820192602092909190829003018186803b15801561382457600080fd5b505afa158015613838573d6000803e3d6000fd5b505050506040513d602081101561384e57600080fd5b505160075460408051632bfac20f60e01b81523360048201526001600160a01b038681166024830152346044830152825194955060009485949190911692632bfac20f926064808201939182900301818787803b1580156138ae57600080fd5b505af11580156138c2573d6000803e3d6000fd5b505050506040513d60408110156138d857600080fd5b50805160209091015190925090506138ef82612d23565b506040516001600160a01b0385169082156108fc029083906000818181858888f193505050506139505760405162461bcd60e51b8152600401808060200182810382526023815260200180615ecd6023913960400191505060405180910390fd5b60408051848152905133916001600160a01b03871691600080516020615ead8339815191529181900360200190a350505050565b60025460408051637626dfcf60e01b81523360048201526024810184905290516101009092046001600160a01b031691637626dfcf9160448082019260009290919082900301818387803b15801561232557600080fd5b600480546040805163ecc517f160e01b81523393810193909352346024840152516001600160a01b039091169163ecc517f191604480830192600092919082900301818387803b1580156134d157600080fd5b336001600160a01b038216600080516020615f23833981519152613a5184613ff9565b60408051918252519081900360200190a36008546040805163eb19110d60e01b81523360048201526001600160a01b0384811660248301523460448301529151600093929092169163eb19110d9160648082019260209290919082900301818787803b158015613ac057600080fd5b505af1158015613ad4573d6000803e3d6000fd5b505050506040513d6020811015613aea57600080fd5b50516040519091506001600160a01b0383169082156108fc029083906000818181858888f19350505050612e0e5760405162461bcd60e51b8152600401808060200182810382526023815260200180615ecd6023913960400191505060405180910390fd5b6005546040805163062199f760e31b815233600482015290516001600160a01b039092169163310ccfb89160248082019260009290919082900301818387803b1580156134d157600080fd5b80516002546040805163d050a90560e01b81529051839261010090046001600160a01b03169163d050a905916004808301926020929190829003018186803b158015613be657600080fd5b505afa158015613bfa573d6000803e3d6000fd5b505050506040513d6020811015613c1057600080fd5b5051023414613c505760405162461bcd60e51b8152600401808060200182810382526033815260200180615ef06033913960400191505060405180910390fd5b60005b818110156127ac5760045483516001600160a01b039091169063ecc517f190859084908110613c7e57fe5b6020026020010151600260019054906101000a90046001600160a01b03166001600160a01b031663d050a9056040518163ffffffff1660e01b815260040160206040518083038186803b158015613cd457600080fd5b505afa158015613ce8573d6000803e3d6000fd5b505050506040513d6020811015613cfe57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b158015613d4e57600080fd5b505af1158015613d62573d6000803e3d6000fd5b505060019092019150613c539050565b6002546040805163225e453360e21b81523360048201526024810184905290516101009092046001600160a01b03169163897914cc9160448082019260009290919082900301818387803b15801561232557600080fd5b336001600160a01b038216600080516020615f23833981519152613dec84613ff9565b60408051918252519081900360200190a36008546040805163e7cba43360e01b81523360048201526001600160a01b0384811660248301523460448301529151600093929092169163e7cba4339160648082019260209290919082900301818787803b158015613ac057600080fd5b600f546001600160a01b031681565b6010546001600160a01b03163314156106d357600580546001600160a01b0319166001600160a01b038381169190911791829055604080516313b9f0c760e01b8152905192909116916313b9f0c79160048082019260009290919082900301818387803b15801561292157600080fd5b6001600160a01b038216301415613f34576040805162461bcd60e51b8152602060048201526019602482015278696620285f746f203d3d20616464726573732874686973292960381b604482015290519081900360640190fd5b60065460408051631c1b2e5560e21b81523360048201526001600160a01b038581166024830152604482018590529151613fc693929092169163706cb954916064808201926020929091908290030181600087803b158015613f9557600080fd5b505af1158015613fa9573d6000803e3d6000fd5b505050506040513d6020811015613fbf57600080fd5b5051612d23565b506040805182815290516001600160a01b038416913391600080516020615ead8339815191529181900360200190a35050565b60048054604080516370a0823160e01b81526001600160a01b03858116948201949094529051600093909216916370a0823191602480820192602092909190829003018186803b158015612b3357600080fd5b600480546040805163016e045960e41b81523393810193909352346024840152516001600160a01b03909116916316e0459091604480830192600092919082900301818387803b1580156134d157600080fd5b336001600160a01b038216600080516020615f238339815191526140c284613ff9565b60408051918252519081900360200190a3600854604080516345b4f43b60e01b81523360048201526001600160a01b038481166024830152346044830152915160009392909216916345b4f43b9160648082019260209290919082900301818787803b158015613ac057600080fd5b806104d21461413f57600080fd5b6010546001600160a01b03163314156106d35781600260016101000a8154816001600160a01b0302191690836001600160a01b03160217905550600260019054906101000a90046001600160a01b03166001600160a01b03166313b9f0c76040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156135c057600080fd5b6006546001600160a01b031681565b600480546040805163ed401ac360e01b8152339381019390935260248301849052516001600160a01b039091169163ed401ac391604480830192600092919082900301818387803b15801561232557600080fd5b600254604080516349ca9db360e01b8152905160009261010090046001600160a01b0316916349ca9db3916004808301926020929190829003018186803b15801561427657600080fd5b505afa15801561428a573d6000803e3d6000fd5b505050506040513d60208110156142a057600080fd5b50516142ab57600080fd5b600260019054906101000a90046001600160a01b03166001600160a01b031663fb6560676040518163ffffffff1660e01b815260040160206040518083038186803b1580156142f957600080fd5b505afa15801561430d573d6000803e3d6000fd5b505050506040513d602081101561432357600080fd5b50516001600160a01b0316331461433957600080fd5b82518110156127ac5782818151811061434e57fe5b60200260200101516001600160a01b0316306001600160a01b0316600080516020615f23833981519152846040518082815260200191505060405180910390a3600101614339565b3332146143a257600080fd5b601154600160a01b900460ff16156143f3576040805162461bcd60e51b815260206004820152600f60248201526e14185e5bdd5d1cc8109b1bd8dad959608a1b604482015290519081900360640190fd5b4780614446576040805162461bcd60e51b815260206004820152601860248201527f282128636f6e747261637442616c616e6365203e203029290000000000000000604482015290519081900360640190fd5b6003546040805163643a943160e01b8152905160009283926001600160a01b039091169163643a943191600480820192602092909190829003018186803b15801561449057600080fd5b505afa1580156144a4573d6000803e3d6000fd5b505050506040513d60208110156144ba57600080fd5b505190505b808210156127ac576003546040805163124183a760e31b81526004810185905290516000926001600160a01b03169163920c1d38916024808301926020929190829003018186803b15801561451357600080fd5b505afa158015614527573d6000803e3d6000fd5b505050506040513d602081101561453d57600080fd5b505160025460408051633b317dab60e01b81526001600160a01b038085166004830152915193945060009361010090930490911691633b317dab91602480820192602092909190829003018186803b15801561459857600080fd5b505afa1580156145ac573d6000803e3d6000fd5b505050506040513d60208110156145c257600080fd5b50516002546040805163433ad96960e11b815290519293506000926101009092046001600160a01b031691638675b2d291600480820192602092909190829003018186803b15801561461357600080fd5b505afa158015614627573d6000803e3d6000fd5b505050506040513d602081101561463d57600080fd5b50518683028161464957fe5b0490508015614799576040516001600160a01b0384169082156108fc029083906000818181858888f193505050506146c357604080518381526020810183905281516001600160a01b038616927f50a6033bb1b577c577f67a1425e1ac9939c9382b114ae85b5274fd3e76a7f7df928290030190a2614799565b6002546040805163028f4a6960e41b815290516101009092046001600160a01b031691631eeb57ec91849184916328f4a690916004808301926020929190829003018186803b15801561471557600080fd5b505afa158015614729573d6000803e3d6000fd5b505050506040513d602081101561473f57600080fd5b5051604080516001600160e01b031960e086901b16815292909101600483015251602480830192600092919082900301818387803b15801561478057600080fd5b505af1158015614794573d6000803e3d6000fd5b505050505b5050600190920191506144bf565b336001600160a01b038216600080516020615f238339815191526147ca84613ff9565b60408051918252519081900360200190a360055460408051636311a8d360e11b81523360048201526001600160a01b0384811660248301523460448301529151600093929092169163c62351a69160648082019260209290919082900301818787803b158015613ac057600080fd5b600c5460408051631a3a8c1f60e21b81523360048201818152602483019384528551604484015285516000956001600160a01b0316946368ea307c94349493899390929160640190602080860191028083838d5b838110156148a557818101518382015260200161488d565b5050505090500193505050506020604051808303818588803b1580156148ca57600080fd5b505af11580156148de573d6000803e3d6000fd5b50505050506040513d60208110156148f557600080fd5b505190508015612e0e576127ac81612d23565b6008546001600160a01b031681565b6011546001600160a01b031681565b600a546001600160a01b031681565b60025460408051633b317dab60e01b81526001600160a01b0385811660048301529151600093610100900490921691633b317dab91602480820192602092909190829003018186803b15801561498a57600080fd5b505afa15801561499e573d6000803e3d6000fd5b505050506040513d60208110156149b457600080fd5b5051905060005b8251811015614a235760006001600160a01b03168382815181106149db57fe5b60200260200101516001600160a01b0316600080516020615f23833981519152614a0a86858151811061245557fe5b60408051918252519081900360200190a36001016149bb565b6007546040516367711a5960e01b815233600482018181526001600160a01b038881166024850152346064850181905260806044860190815289516084870152895160009793909316956367711a5995948c948c9493919260a40190602080870191028083838e5b83811015614aa3578181015183820152602001614a8b565b5050505090500195505050505050602060405180830381600087803b158015614acb57600080fd5b505af1158015614adf573d6000803e3d6000fd5b505050506040513d6020811015614af557600080fd5b50516040519091506001600160a01b0386169082156108fc029083906000818181858888f19350505050614b2857600080fd5b60408051848152905133916001600160a01b03881691600080516020615ead8339815191529181900360200190a35050505050565b600480546040805163482ad11f60e11b81526001600160a01b0385811694820194909452905160009390921691639055a23e91602480820192602092909190829003018186803b158015612b3357600080fd5b60095460408051639358928b60e01b815290516000926001600160a01b031691639358928b916004808301926020929190829003018186803b1580156127f657600080fd5b6010546001600160a01b03163314156106d357600480546001600160a01b0319166001600160a01b0383811691909117808355604080516313b9f0c760e01b8152905191909216926313b9f0c79280820192600092909182900301818387803b15801561292157600080fd5b6010546001600160a01b03163314156106d357601180546001600160a01b0319166001600160a01b0383161790556125d2565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156121155780601f106120ea57610100808354040283529160200191612115565b6010546001600160a01b03163314156106d357600980546001600160a01b0319166001600160a01b038381169190911791829055604080516313b9f0c760e01b8152905192909116916313b9f0c79160048082019260009290919082900301818387803b15801561292157600080fd5b60025460408051634ea8c93760e11b81523360048201526024810184905290516101009092046001600160a01b031691639d51926e9160448082019260009290919082900301818387803b15801561232557600080fd5b6001600160a01b038216301415614e0f576040805162461bcd60e51b8152602060048201526019602482015278696620285f746f203d3d20616464726573732874686973292960381b604482015290519081900360640190fd5b600a54604080516317d5759960e31b81523360048201526001600160a01b038581166024830152604482018590529151919092169163beabacc891606480830192600092919082900301818387803b158015614e6a57600080fd5b505af1158015614e7e573d6000803e3d6000fd5b50506040805184815290516001600160a01b0386169350339250600080516020615f238339815191529181900360200190a35050565b6010546001600160a01b03163314156106d357600d80546001600160a01b0319166001600160a01b0383161790556125d2565b600480546040805163ca02eb9d60e01b81523393810193909352516001600160a01b039091169163ca02eb9d91602480830192600092919082900301818387803b1580156134d157600080fd5b600d5460405163fe942a2d60e01b815233600482018181526060602484019081528651606485015286516000956001600160a01b03169463fe942a2d94349490938a938a936044810191608490910190602080880191028083838f5b83811015614fa8578181015183820152602001614f90565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015614fe7578181015183820152602001614fcf565b50505050905001955050505050506020604051808303818588803b15801561500e57600080fd5b505af1158015615022573d6000803e3d6000fd5b50505050506040513d602081101561503957600080fd5b5051905080156127ac576134e581612d23565b600d546001600160a01b031681565b60025460408051633b317dab60e01b81526001600160a01b0384811660048301529151600093610100900490921691633b317dab91602480820192602092909190829003018186803b158015612b3357600080fd5b600254604080516344c077ab60e11b81523360048201526024810184905290516101009092046001600160a01b031691638980ef569160448082019260009290919082900301818387803b15801561232557600080fd5b6006546040805163ac39285b60e01b815233600482015290516001600160a01b039092169163ac39285b9160248082019260009290919082900301818387803b1580156134d157600080fd5b600480546040805163034043e160e51b81523393810193909352516001600160a01b03909116916368087c2091602480830192600092919082900301818387803b1580156134d157600080fd5b6010546001600160a01b03163314156106d357600880546001600160a01b0319166001600160a01b038381169190911791829055604080516313b9f0c760e01b8152905192909116916313b9f0c79160048082019260009290919082900301818387803b15801561292157600080fd5b6007546001600160a01b031681565b6010546001600160a01b03163314156106d357600680546001600160a01b0319166001600160a01b038381169190911791829055604080516313b9f0c760e01b8152905192909116916313b9f0c79160048082019260009290919082900301818387803b15801561292157600080fd5b601154600160a01b900460ff1681565b6001600160a01b0383163014156152f9576040805162461bcd60e51b8152602060048201526019602482015278696620285f746f203d3d20616464726573732874686973292960381b604482015290519081900360640190fd5b60005b81518110156153645760006001600160a01b031682828151811061531c57fe5b60200260200101516001600160a01b0316600080516020615f2383398151915261534b85858151811061245557fe5b60408051918252519081900360200190a36001016152fc565b600654604051632464a27d60e01b815233600482018181526001600160a01b038881166024850152604484018890526080606485019081528751608486015287519190951694632464a27d948a938a938a93919260a401906020808601910280838360005b838110156153e15781810151838201526020016153c9565b5050505090500195505050505050600060405180830381600087803b15801561540957600080fd5b505af115801561541d573d6000803e3d6000fd5b50506040805186815290516001600160a01b0388169350339250600080516020615ead8339815191529181900360200190a350505050565b80516002546040805163d050a90560e01b81529051839261010090046001600160a01b03169163d050a905916004808301926020929190829003018186803b1580156154a057600080fd5b505afa1580156154b4573d6000803e3d6000fd5b505050506040513d60208110156154ca57600080fd5b505160025460408051633238268960e01b815290516101009092046001600160a01b031691633238268991600480820192602092909190829003018186803b15801561551557600080fd5b505afa158015615529573d6000803e3d6000fd5b505050506040513d602081101561553f57600080fd5b5051010234146155805760405162461bcd60e51b8152600401808060200182810382526040815260200180615e6d6040913960400191505060405180910390fd5b60005b818110156127ac5760045483516001600160a01b03909116906316e04590908590849081106155ae57fe5b6020026020010151600260019054906101000a90046001600160a01b03166001600160a01b031663d050a9056040518163ffffffff1660e01b815260040160206040518083038186803b15801561560457600080fd5b505afa158015615618573d6000803e3d6000fd5b505050506040513d602081101561562e57600080fd5b505160025460408051633238268960e01b815290516101009092046001600160a01b031691633238268991600480820192602092909190829003018186803b15801561567957600080fd5b505afa15801561568d573d6000803e3d6000fd5b505050506040513d60208110156156a357600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b0390941660048501529101602483015251604480830192600092919082900301818387803b1580156156f257600080fd5b505af1158015615706573d6000803e3d6000fd5b5050600190920191506155839050565b60048054604080516371681de560e11b81523393810193909352516001600160a01b039091169163e2d03bca91602480830192600092919082900301818387803b1580156134d157600080fd5b6001600160a01b03811633600080516020615f2383398151915261578682613ff9565b60408051918252519081900360200190a36001600160a01b0381163014156157f1576040805162461bcd60e51b8152602060048201526019602482015278696620285f746f203d3d20616464726573732874686973292960381b604482015290519081900360640190fd5b60048054604080516334d5831d60e21b815233938101939093526001600160a01b038481166024850152905191169163d3560c7491604480830192600092919082900301818387803b15801561232557600080fd5b60025460408051631d25fd5560e01b81523360048201526024810184905290516101009092046001600160a01b031691631d25fd559160448082019260009290919082900301818387803b15801561232557600080fd5b6009546001600160a01b031681565b60065460408051637cb6d17b60e11b81523360048201526024810184905290516001600160a01b039092169163f96da2f69160448082019260009290919082900301818387803b15801561232557600080fd5b6002546040805163124e91b960e01b81523360048201526024810184905290516101009092046001600160a01b03169163124e91b99160448082019260009290919082900301818387803b15801561232557600080fd5b60025460408051635c65816560e01b81526001600160a01b03858116600483015284811660248301529151600093610100900490921691635c65816591604480820192602092909190829003018186803b1580156159b357600080fd5b505afa1580156159c7573d6000803e3d6000fd5b505050506040513d60208110156159dd57600080fd5b50519392505050565b60025460408051633bb868dd60e21b81523360048201526024810184905290516101009092046001600160a01b03169163eee1a3749160448082019260009290919082900301818387803b15801561232557600080fd5b6011546001600160a01b03163314156106d357601280546001600160a01b0319166001600160a01b0383161790556125d2565b600c546001600160a01b031681565b6000600260019054906101000a90046001600160a01b03166001600160a01b031663e5f65c716040518163ffffffff1660e01b815260040160206040518083038186803b158015615acf57600080fd5b505afa158015615ae3573d6000803e3d6000fd5b505050506040513d6020811015615af957600080fd5b50514303905090565b6010546001600160a01b03166106d357601080546001600160a01b0319163317905561346d565b601154600160a01b900460ff161561346d576012546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505061346d57600080fd5b6010546001600160a01b03163314156106d357600c80546001600160a01b0319166001600160a01b0383161790556125d2565b60025461010090046001600160a01b031681565b805160005b818110156127ac5760045483516001600160a01b03909116906352ba171d90859084908110615be357fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015615c3357600080fd5b505af1158015615c47573d6000803e3d6000fd5b505060019092019150615bb89050565b600480546040805163eb0fbbad60e01b81526001600160a01b038581169482019490945290516000939092169163eb0fbbad91602480820192602092909190829003018186803b158015612b3357600080fd5b600480546040805163d42e1c2f60e01b815233938101939093526001600160a01b038481166024850152905191169163d42e1c2f91604480830192600092919082900301818387803b15801561232557600080fd5b6010546001600160a01b03163314156106d357600a80546001600160a01b0319166001600160a01b038381169190911791829055604080516313b9f0c760e01b8152905192909116916313b9f0c79160048082019260009290919082900301818387803b15801561292157600080fd5b6010546001600160a01b031681565b60048054604080516001620769d360e31b031981526001600160a01b038581169482019490945290516000939092169163ffc4b16891602480820192602092909190829003018186803b158015612b3357600080fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10615e1557805160ff1916838001178555615e42565b82800160010185558215615e42579182015b82811115615e42578251825591602001919060010190615e27565b50615e4e929150615e52565b5090565b61252b91905b80821115615e4e5760008155600101615e5856fe2877656956616c756520213d2028286d73672e76616c7565202b2070632e657468466565546f55706772616465546f4c6576656c332829292a636f756e742929cc6ddb19d323297cc6ed8f3dbda06395f6f153d24bf678f36305752ab635e10928215f616464726573732e73656e642866656573546f506179546f53656c6c65722929286d73672e76616c756520213d202870632e657468466565546f55706772616465546f4c6576656c3328292a636f756e742929ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef286d73672e76616c756520213d2070632e657468466565546f55706772616465546f4c6576656c3228292a636f756e7429a264697066735822122068af78f55939e51c0f34a5a04df0a6c1f0843f4203fbde9d023e8ea6ab0bcc5e64736f6c634300060000330000000000000000000000000e35a9caef5f24e1802c51ee935836af07d73b3300000000000000000000000012c60985421f3ea92ac4997e2cec8b1bbf33ee660000000000000000000000007d5424f6c617c486ab4437b88410357bba7d124e000000000000000000000000426d86b00f85d8ea716727fec9cdff58f65504b3000000000000000000000000c59e57fc338e4dd177904faccd063c688833bf710000000000000000000000008efd839d6bcabaac5072d1c2bb360cbdb130c1b60000000000000000000000007ca3ffa001d9bc98bf1fdfb1e48830b785cd67990000000000000000000000005e179082c652fd750b7bf3b48c5a253a63ba98330000000000000000000000000e5047e1273dfab56eb800f31da9e8a8872e14d8

Deployed ByteCode

0x6080604052600436106106d35760003560e01c80637347060c1161037a578063b9c25cae116101d1578063ddcbfce011610102578063e69919ae116100a0578063ef3dd5c81161007a578063ef3dd5c814611fe1578063fd3c763814612014578063fdbc653014612047578063ffc4b1681461205c576106d3565b8063e69919ae14611eeb578063e9095e5c14611f00578063eb0fbbad14611fae576106d3565b8063e12ed13c116100dc578063e12ed13c14611e79578063e241263014611e8e578063e33eaaf714611ea3578063e4c4b47c14611eb8576106d3565b8063ddcbfce014611e07578063df02f1db14611e31578063df462a4714611e64576106d3565b8063c92f146a1161016f578063dae487ca11610149578063dae487ca14611d63578063db16cb5b14611d78578063dd2c455c14611da2578063dd62ed3e14611dcc576106d3565b8063c92f146a14611cf1578063cf91e33114611d06578063d4f7457914611d39576106d3565b8063bdbdcd75116101ab578063bdbdcd7514611b45578063c0ea2e7714611b78578063c169653314611b8d578063c3536e8b14611c50576106d3565b8063b9c25cae14611ae8578063bad0f93414611afd578063bd65fc4c14611b30576106d3565b806393c63b9d116102ab578063aa13504e11610249578063aee1fabc11610223578063aee1fabc14611a61578063af46aa0814611a76578063b3e9047614611aa9578063b4e85ec814611ad3576106d3565b8063aa13504e146118f6578063ac0f738f14611929578063aede090f1461193e576106d3565b806397b5e5541161028557806397b5e55414611858578063a33b12601461188b578063a5094f8f14611893578063a9059cbb146118bd576106d3565b806393c63b9d146117dd57806394ccd96f1461181057806395d89b4114611843576106d3565b806380167ebf116103185780638af8edfc116102f25780638af8edfc146116cf5780638ccb0023146116e45780639055a23e146117955780639358928b146117c8576106d3565b806380167ebf146116045780638278188a146116a55780638a670113146116ba576106d3565b8063742ec16411610354578063742ec164146114ef57806374a72e41146115195780637b411ca5146115c95780637d20a24f146115de576106d3565b80637347060c1461147b57806373668817146114a157806373f0cc2d146114da576106d3565b80633521bbed1161052e57806361a3be801161045f5780636dcb9800116103fd5780637022c79e116103d75780637022c79e146113d45780637050ec891461140757806370a082311461144057806370a8a2e614611473576106d3565b80636dcb98001461136f5780636e3ee8f1146113995780636fd615bf146113bf576106d3565b80636af43470116104395780636af434701461128b5780636b3b2800146112935780636be2ca43146112b95780636c2f12e6146112ce576106d3565b806361a3be8014611226578063633865511461123b57806366a497b714611261576106d3565b80634890bb51116104cc578063542aa99f116104a6578063542aa99f1461119957806357e08c60146111ae5780635b48a884146111e75780635b65268f14611211576106d3565b80634890bb511461112e57806350ac2f6914611136578063522c628f14611160576106d3565b80633c64cfc6116105085780633c64cfc6146110b6578063416e8604146110ef578063460b72ce14611104578063474b07bf14611119576106d3565b80633521bbed14610f1957806336d6991014610f4c578063399c40ea14610f7f576106d3565b806321df8098116106085780632940187a116105a65780633118f543116105805780633118f54314610e89578063313ce56714610e9e5780633181a5a714610ec957806333d5993414610eef576106d3565b80632940187a14610cf65780632cd3fd7014610d295780632f71d02214610d53576106d3565b806323e46e7c116105e257806323e46e7c14610c3f57806324ac57b714610c6b57806325d998bb14610c805780632631ef1214610cb3576106d3565b806321df809814610b9057806322e3f16214610bc357806323b872dd14610bfc576106d3565b80630d061e7511610675578063177e48d01161064f578063177e48d014610a7d57806318160ddd14610b1e5780631d2cb86114610b335780631ec32a6614610b66576106d3565b80630d061e7514610a0b578063124d83d814610a20578063128fb93014610a4a576106d3565b8063095ea7b3116106b1578063095ea7b3146108b857806309ae18441461090557806309f6c607146109b35780630a63361c146109da576106d3565b806306fdde03146106d857806307c5c18e14610762578063088c35fd1461088e575b600080fd5b3480156106e457600080fd5b506106ed61208f565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561072757818101518382015260200161070f565b50505050905090810190601f1680156107545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61088c6004803603606081101561077857600080fd5b81359190810190604081016020820135600160201b81111561079957600080fd5b8201836020820111156107ab57600080fd5b803590602001918460208302840111600160201b831117156107cc57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561081b57600080fd5b82018360208201111561082d57600080fd5b803590602001918460208302840111600160201b8311171561084e57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061211d945050505050565b005b34801561089a57600080fd5b5061088c600480360360208110156108b157600080fd5b50356122ce565b3480156108c457600080fd5b506108f1600480360360408110156108db57600080fd5b506001600160a01b038135169060200135612340565b604080519115158252519081900360200190f35b34801561091157600080fd5b5061088c6004803603602081101561092857600080fd5b810190602081018135600160201b81111561094257600080fd5b82018360208201111561095457600080fd5b803590602001918460208302840111600160201b8311171561097557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612403945050505050565b3480156109bf57600080fd5b506109c8612529565b60408051918252519081900360200190f35b3480156109e657600080fd5b506109ef61252e565b604080516001600160a01b039092168252519081900360200190f35b348015610a1757600080fd5b506109ef61253d565b348015610a2c57600080fd5b5061088c60048036036020811015610a4357600080fd5b503561254c565b348015610a5657600080fd5b5061088c60048036036020811015610a6d57600080fd5b50356001600160a01b03166125a3565b61088c60048036036020811015610a9357600080fd5b810190602081018135600160201b811115610aad57600080fd5b820183602082011115610abf57600080fd5b803590602001918460208302840111600160201b83111715610ae057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506125d5945050505050565b348015610b2a57600080fd5b506109c86127b1565b348015610b3f57600080fd5b5061088c60048036036020811015610b5657600080fd5b50356001600160a01b0316612827565b348015610b7257600080fd5b5061088c60048036036020811015610b8957600080fd5b503561285a565b348015610b9c57600080fd5b5061088c60048036036020811015610bb357600080fd5b50356001600160a01b03166128b1565b348015610bcf57600080fd5b5061088c60048036036040811015610be657600080fd5b506001600160a01b03813516906020013561293e565b348015610c0857600080fd5b506108f160048036036060811015610c1f57600080fd5b506001600160a01b038135811691602081013590911690604001356129c7565b348015610c4b57600080fd5b5061088c60048036036020811015610c6257600080fd5b50351515612aa2565b348015610c7757600080fd5b506109ef612ad1565b348015610c8c57600080fd5b506109c860048036036020811015610ca357600080fd5b50356001600160a01b0316612ae0565b348015610cbf57600080fd5b5061088c60048036036060811015610cd657600080fd5b506001600160a01b03813581169160208101359091169060400135612b65565b348015610d0257600080fd5b506108f160048036036020811015610d1957600080fd5b50356001600160a01b0316612cd0565b348015610d3557600080fd5b506108f160048036036020811015610d4c57600080fd5b5035612d23565b348015610d5f57600080fd5b5061088c60048036036040811015610d7657600080fd5b810190602081018135600160201b811115610d9057600080fd5b820183602082011115610da257600080fd5b803590602001918460018302840111600160201b83111715610dc357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610e1557600080fd5b820183602082011115610e2757600080fd5b803590602001918460018302840111600160201b83111715610e4857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612dd4945050505050565b348015610e9557600080fd5b506109ef612e12565b348015610eaa57600080fd5b50610eb3612e21565b6040805160ff9092168252519081900360200190f35b61088c60048036036020811015610edf57600080fd5b50356001600160a01b0316612e2a565b348015610efb57600080fd5b5061088c60048036036020811015610f1257600080fd5b5035613017565b348015610f2557600080fd5b5061088c60048036036020811015610f3c57600080fd5b50356001600160a01b031661306e565b348015610f5857600080fd5b506108f160048036036020811015610f6f57600080fd5b50356001600160a01b03166130a1565b348015610f8b57600080fd5b5061088c60048036036060811015610fa257600080fd5b81359190810190604081016020820135600160201b811115610fc357600080fd5b820183602082011115610fd557600080fd5b803590602001918460208302840111600160201b83111715610ff657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b81111561104557600080fd5b82018360208201111561105757600080fd5b803590602001918460208302840111600160201b8311171561107857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506130f4945050505050565b3480156110c257600080fd5b5061088c600480360360408110156110d957600080fd5b506001600160a01b0381351690602001356132a4565b3480156110fb57600080fd5b506109ef6132ff565b34801561111057600080fd5b5061088c61330e565b34801561112557600080fd5b506109ef61346f565b61088c61347e565b34801561114257600080fd5b5061088c6004803603602081101561115957600080fd5b50356134eb565b34801561116c57600080fd5b5061088c6004803603604081101561118357600080fd5b506001600160a01b038135169060200135613542565b3480156111a557600080fd5b506108f16135dd565b3480156111ba57600080fd5b5061088c600480360360408110156111d157600080fd5b506001600160a01b03813516906020013561363d565b3480156111f357600080fd5b5061088c6004803603602081101561120a57600080fd5b50356136e2565b34801561121d57600080fd5b5061088c613735565b34801561123257600080fd5b5061088c613782565b61088c6004803603602081101561125157600080fd5b50356001600160a01b03166137cf565b34801561126d57600080fd5b5061088c6004803603602081101561128457600080fd5b5035613984565b61088c6139db565b61088c600480360360208110156112a957600080fd5b50356001600160a01b0316613a2e565b3480156112c557600080fd5b5061088c613b4f565b61088c600480360360208110156112e457600080fd5b810190602081018135600160201b8111156112fe57600080fd5b82018360208201111561131057600080fd5b803590602001918460208302840111600160201b8311171561133157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613b9b945050505050565b34801561137b57600080fd5b5061088c6004803603602081101561139257600080fd5b5035613d72565b61088c600480360360208110156113af57600080fd5b50356001600160a01b0316613dc9565b3480156113cb57600080fd5b506109ef613e5b565b3480156113e057600080fd5b5061088c600480360360208110156113f757600080fd5b50356001600160a01b0316613e6a565b34801561141357600080fd5b5061088c6004803603604081101561142a57600080fd5b506001600160a01b038135169060200135613eda565b34801561144c57600080fd5b506109c86004803603602081101561146357600080fd5b50356001600160a01b0316613ff9565b61088c61404c565b61088c6004803603602081101561149157600080fd5b50356001600160a01b031661409f565b3480156114ad57600080fd5b5061088c600480360360408110156114c457600080fd5b506001600160a01b038135169060200135614131565b3480156114e657600080fd5b506109ef6141c9565b3480156114fb57600080fd5b5061088c6004803603602081101561151257600080fd5b50356141d8565b34801561152557600080fd5b5061088c6004803603604081101561153c57600080fd5b810190602081018135600160201b81111561155657600080fd5b82018360208201111561156857600080fd5b803590602001918460208302840111600160201b8311171561158957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550509135925061422c915050565b3480156115d557600080fd5b5061088c614396565b61088c600480360360208110156115f457600080fd5b50356001600160a01b03166147a7565b61088c6004803603602081101561161a57600080fd5b810190602081018135600160201b81111561163457600080fd5b82018360208201111561164657600080fd5b803590602001918460208302840111600160201b8311171561166757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550614839945050505050565b3480156116b157600080fd5b506109ef614908565b3480156116c657600080fd5b506109ef614917565b3480156116db57600080fd5b506109ef614926565b61088c600480360360408110156116fa57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561172457600080fd5b82018360208201111561173657600080fd5b803590602001918460208302840111600160201b8311171561175757600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550614935945050505050565b3480156117a157600080fd5b506108f1600480360360208110156117b857600080fd5b50356001600160a01b0316614b5d565b3480156117d457600080fd5b506109c8614bb0565b3480156117e957600080fd5b5061088c6004803603602081101561180057600080fd5b50356001600160a01b0316614bf5565b34801561181c57600080fd5b5061088c6004803603602081101561183357600080fd5b50356001600160a01b0316614c61565b34801561184f57600080fd5b506106ed614c94565b34801561186457600080fd5b5061088c6004803603602081101561187b57600080fd5b50356001600160a01b0316614cee565b61088c61346d565b34801561189f57600080fd5b5061088c600480360360208110156118b657600080fd5b5035614d5e565b3480156118c957600080fd5b5061088c600480360360408110156118e057600080fd5b506001600160a01b038135169060200135614db5565b34801561190257600080fd5b5061088c6004803603602081101561191957600080fd5b50356001600160a01b0316614eb4565b34801561193557600080fd5b5061088c614ee7565b61088c6004803603604081101561195457600080fd5b810190602081018135600160201b81111561196e57600080fd5b82018360208201111561198057600080fd5b803590602001918460208302840111600160201b831117156119a157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b8111156119f057600080fd5b820183602082011115611a0257600080fd5b803590602001918460208302840111600160201b83111715611a2357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550614f34945050505050565b348015611a6d57600080fd5b506109ef61504c565b348015611a8257600080fd5b506109c860048036036020811015611a9957600080fd5b50356001600160a01b031661505b565b348015611ab557600080fd5b5061088c60048036036020811015611acc57600080fd5b50356150b0565b348015611adf57600080fd5b5061088c615107565b348015611af457600080fd5b5061088c615153565b348015611b0957600080fd5b5061088c60048036036020811015611b2057600080fd5b50356001600160a01b03166151a0565b348015611b3c57600080fd5b506109ef615210565b348015611b5157600080fd5b5061088c60048036036020811015611b6857600080fd5b50356001600160a01b031661521f565b348015611b8457600080fd5b506108f161528f565b348015611b9957600080fd5b5061088c60048036036060811015611bb057600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115611bdf57600080fd5b820183602082011115611bf157600080fd5b803590602001918460208302840111600160201b83111715611c1257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061529f945050505050565b61088c60048036036020811015611c6657600080fd5b810190602081018135600160201b811115611c8057600080fd5b820183602082011115611c9257600080fd5b803590602001918460208302840111600160201b83111715611cb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550615455945050505050565b348015611cfd57600080fd5b5061088c615716565b348015611d1257600080fd5b5061088c60048036036020811015611d2957600080fd5b50356001600160a01b0316615763565b348015611d4557600080fd5b5061088c60048036036020811015611d5c57600080fd5b5035615846565b348015611d6f57600080fd5b506109ef61589d565b348015611d8457600080fd5b5061088c60048036036020811015611d9b57600080fd5b50356158ac565b348015611dae57600080fd5b5061088c60048036036020811015611dc557600080fd5b50356158ff565b348015611dd857600080fd5b506109c860048036036040811015611def57600080fd5b506001600160a01b0381358116916020013516615956565b348015611e1357600080fd5b5061088c60048036036020811015611e2a57600080fd5b50356159e6565b348015611e3d57600080fd5b5061088c60048036036020811015611e5457600080fd5b50356001600160a01b0316615a3d565b348015611e7057600080fd5b506109ef615a70565b348015611e8557600080fd5b506109c8615a7f565b348015611e9a57600080fd5b5061088c615b02565b348015611eaf57600080fd5b5061088c615b29565b348015611ec457600080fd5b5061088c60048036036020811015611edb57600080fd5b50356001600160a01b0316615b6c565b348015611ef757600080fd5b506109ef615b9f565b348015611f0c57600080fd5b5061088c60048036036020811015611f2357600080fd5b810190602081018135600160201b811115611f3d57600080fd5b820183602082011115611f4f57600080fd5b803590602001918460208302840111600160201b83111715611f7057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550615bb3945050505050565b348015611fba57600080fd5b506108f160048036036020811015611fd157600080fd5b50356001600160a01b0316615c57565b348015611fed57600080fd5b5061088c6004803603602081101561200457600080fd5b50356001600160a01b0316615caa565b34801561202057600080fd5b5061088c6004803603602081101561203757600080fd5b50356001600160a01b0316615cff565b34801561205357600080fd5b506109ef615d6f565b34801561206857600080fd5b506108f16004803603602081101561207f57600080fd5b50356001600160a01b0316615d7e565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156121155780601f106120ea57610100808354040283529160200191612115565b820191906000526020600020905b8154815290600101906020018083116120f857829003601f168201915b505050505081565b82156121cd57600a54600e54604080516317d5759960e31b81523360048201526001600160a01b039283166024820152604481018790529051919092169163beabacc891606480830192600092919082900301818387803b15801561218157600080fd5b505af1158015612195573d6000803e3d6000fd5b5050600e546040805187815290516001600160a01b039092169350339250600080516020615f23833981519152919081900360200190a35b600e54604051632433a49160e11b81523360048201818152602483018790526080604484019081528651608485015286516001600160a01b03909516946348674922943494938a938a938a93606481019160a4909101906020808801910280838360005b83811015612249578181015183820152602001612231565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015612288578181015183820152602001612270565b5050505090500196505050505050506000604051808303818588803b1580156122b057600080fd5b505af11580156122c4573d6000803e3d6000fd5b5050505050505050565b600254604080516305de45bd60e11b81523360048201526024810184905290516101009092046001600160a01b031691630bbc8b7a9160448082019260009290919082900301818387803b15801561232557600080fd5b505af1158015612339573d6000803e3d6000fd5b5050505050565b6002546040805163779a859960e11b81523360048201526001600160a01b03858116602483015260448201859052915160009361010090049092169163ef350b3291606480820192869290919082900301818387803b1580156123a257600080fd5b505af11580156123b6573d6000803e3d6000fd5b50506040805185815290516001600160a01b03871693503392507f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259181900360200190a350600192915050565b60005b815181101561247b5760006001600160a01b031682828151811061242657fe5b60200260200101516001600160a01b0316600080516020615f2383398151915261246285858151811061245557fe5b6020026020010151613ff9565b60408051918252519081900360200190a3600101612406565b6004805460408051633ca4fe7b60e11b815233938101848152602482019283528651604483015286516001600160a01b0390941694637949fcf6949093889390916064909101906020808601910280838360005b838110156124e75781810151838201526020016124cf565b505050509050019350505050600060405180830381600087803b15801561250d57600080fd5b505af1158015612521573d6000803e3d6000fd5b505050505050565b435b90565b6003546001600160a01b031681565b6012546001600160a01b031681565b60025460408051633429fca760e21b81523360048201526024810184905290516101009092046001600160a01b03169163d0a7f29c9160448082019260009290919082900301818387803b15801561232557600080fd5b6010546001600160a01b03163314156106d357600b80546001600160a01b0319166001600160a01b0383161790555b50565b805160025460408051633238268960e01b81529051839261010090046001600160a01b0316916332382689916004808301926020929190829003018186803b15801561262057600080fd5b505afa158015612634573d6000803e3d6000fd5b505050506040513d602081101561264a57600080fd5b505102341461268a5760405162461bcd60e51b8152600401808060200182810382526031815260200180615f436031913960400191505060405180910390fd5b60005b818110156127ac5760045483516001600160a01b03909116906376067e67908590849081106126b857fe5b6020026020010151600260019054906101000a90046001600160a01b03166001600160a01b031663323826896040518163ffffffff1660e01b815260040160206040518083038186803b15801561270e57600080fd5b505afa158015612722573d6000803e3d6000fd5b505050506040513d602081101561273857600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b15801561278857600080fd5b505af115801561279c573d6000803e3d6000fd5b50506001909201915061268d9050565b505050565b600a54604080516318160ddd60e01b815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b1580156127f657600080fd5b505afa15801561280a573d6000803e3d6000fd5b505050506040513d602081101561282057600080fd5b5051905090565b6010546001600160a01b03163314156106d357600e80546001600160a01b0319166001600160a01b0383161790556125d2565b600254604080516372a4edd560e01b81523360048201526024810184905290516101009092046001600160a01b0316916372a4edd59160448082019260009290919082900301818387803b15801561232557600080fd5b6010546001600160a01b03163314156106d357600780546001600160a01b0319166001600160a01b038381169190911791829055604080516313b9f0c760e01b8152905192909116916313b9f0c79160048082019260009290919082900301818387803b15801561292157600080fd5b505af1158015612935573d6000803e3d6000fd5b505050506125d2565b6040805182815290516001600160a01b038416913091600080516020615f238339815191529181900360200190a3600954604080516359bc8a9160e01b81523360048201526001600160a01b03858116602483015260448201859052915191909216916359bc8a9191606480830192600092919082900301818387803b15801561250d57600080fd5b600a5460408051630aed65f560e11b81523360048201526001600160a01b0386811660248301528581166044830152606482018590529151600093849316916315dacbea91608480830192602092919082900301818787803b158015612a2c57600080fd5b505af1158015612a40573d6000803e3d6000fd5b505050506040513d6020811015612a5657600080fd5b505190508015612a9a57836001600160a01b0316856001600160a01b0316600080516020615f23833981519152856040518082815260200191505060405180910390a35b949350505050565b6011546001600160a01b03163314156125d25760118054821515600160a01b0260ff60a01b1990911617905550565b600b546001600160a01b031681565b60048054604080516325d998bb60e01b81526001600160a01b03858116948201949094529051600093909216916325d998bb91602480820192602092909190829003018186803b158015612b3357600080fd5b505afa158015612b47573d6000803e3d6000fd5b505050506040513d6020811015612b5d57600080fd5b505192915050565b600f546001600160a01b0316331480612b8d575060025461010090046001600160a01b031633145b80612ba257506003546001600160a01b031633145b80612bb757506004546001600160a01b031633145b80612bcc57506005546001600160a01b031633145b80612be157506006546001600160a01b031633145b80612bf657506007546001600160a01b031633145b80612c0b57506008546001600160a01b031633145b80612c2057506009546001600160a01b031633145b80612c355750600a546001600160a01b031633145b80612c4a5750600b546001600160a01b031633145b80612c5f5750600c546001600160a01b031633145b80612c745750600d546001600160a01b031633145b80612c895750600e546001600160a01b031633145b612c9257600080fd5b816001600160a01b0316836001600160a01b0316600080516020615f23833981519152836040518082815260200191505060405180910390a3505050565b60048054604080516314a00c3d60e11b81526001600160a01b0385811694820194909452905160009390921691632940187a91602480820192602092909190829003018186803b158015612b3357600080fd5b6004805460408051631c46b08160e11b8152339381019390935260248301849052516000926001600160a01b039092169163388d610291604480830192602092919082900301818787803b158015612d7a57600080fd5b505af1158015612d8e573d6000803e3d6000fd5b505050506040513d6020811015612da457600080fd5b50506040805183815290516000913391600080516020615f238339815191529181900360200190a3506001919050565b6010546001600160a01b03163314156106d3578151612dfa906000906020850190615dd4565b5080516127ac906001906020840190615dd4565b5050565b6004546001600160a01b031681565b60025460ff1681565b600480546040805163482ad11f60e11b81526001600160a01b038581169482019490945290519290911691639055a23e91602480820192602092909190829003018186803b158015612e7b57600080fd5b505afa158015612e8f573d6000803e3d6000fd5b505050506040513d6020811015612ea557600080fd5b505115612eba57612eb581613a2e565b6125d2565b60048054604080516314a00c3d60e11b81526001600160a01b038581169482019490945290519290911691632940187a91602480820192602092909190829003018186803b158015612f0b57600080fd5b505afa158015612f1f573d6000803e3d6000fd5b505050506040513d6020811015612f3557600080fd5b505115612f4557612eb58161409f565b60048054604080516001620769d360e31b031981526001600160a01b03858116948201949094529051929091169163ffc4b16891602480820192602092909190829003018186803b158015612f9957600080fd5b505afa158015612fad573d6000803e3d6000fd5b505050506040513d6020811015612fc357600080fd5b505115612fd357612eb581613dc9565b6040805162461bcd60e51b815260206004820152601460248201527341646472657373206e6f7420666f722073616c6560601b604482015290519081900360640190fd5b6002546040805163f5d1858560e01b81523360048201526024810184905290516101009092046001600160a01b03169163f5d185859160448082019260009290919082900301818387803b15801561232557600080fd5b6010546001600160a01b03163314156106d357600f80546001600160a01b0319166001600160a01b0383161790556125d2565b600480546040805163036d699160e41b81526001600160a01b03858116948201949094529051600093909216916336d6991091602480820192602092909190829003018186803b158015612b3357600080fd5b82156131a457600a54600b54604080516317d5759960e31b81523360048201526001600160a01b039283166024820152604481018790529051919092169163beabacc891606480830192600092919082900301818387803b15801561315857600080fd5b505af115801561316c573d6000803e3d6000fd5b5050600b546040805187815290516001600160a01b039092169350339250600080516020615f23833981519152919081900360200190a35b600b54604051630a67889360e01b81523360048201818152602483018790526080604484019081528651608485015286516001600160a01b0390951694630a6788939489938993899391929091606482019160a401906020808801910280838360005b8381101561321f578181015183820152602001613207565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561325e578181015183820152602001613246565b505050509050019650505050505050600060405180830381600087803b15801561328757600080fd5b505af115801561329b573d6000803e3d6000fd5b50505050505050565b6006546040805163f8e4df0f60e01b81523360048201526001600160a01b038581166024830152604482018590529151919092169163f8e4df0f91606480830192600092919082900301818387803b15801561250d57600080fd5b6005546001600160a01b031681565b600480546040805163482ad11f60e11b81523393810193909352516001600160a01b0390911691639055a23e916024808301926020929190829003018186803b15801561335a57600080fd5b505afa15801561336e573d6000803e3d6000fd5b505050506040513d602081101561338457600080fd5b50511561342057600033600080516020615f238339815191526133a682613ff9565b60408051918252519081900360200190a360095460408051634cb752db60e01b815233600482015290516001600160a01b0390921691634cb752db9160248082019260009290919082900301818387803b15801561340357600080fd5b505af1158015613417573d6000803e3d6000fd5b5050505061346d565b6040805162461bcd60e51b815260206004820152601b60248201527f41646472657373206e6f742047656e65736973204c6576656c20310000000000604482015290519081900360640190fd5b565b600e546001600160a01b031681565b60048054604080516376067e6760e01b81523393810193909352346024840152516001600160a01b03909116916376067e6791604480830192600092919082900301818387803b1580156134d157600080fd5b505af11580156134e5573d6000803e3d6000fd5b50505050565b6002546040805163c226832b60e01b81523360048201526024810184905290516101009092046001600160a01b03169163c226832b9160448082019260009290919082900301818387803b15801561232557600080fd5b806104d21461355057600080fd5b6010546001600160a01b03163314156106d357600380546001600160a01b0319166001600160a01b038481169190911791829055604080516313b9f0c760e01b8152905192909116916313b9f0c79160048082019260009290919082900301818387803b1580156135c057600080fd5b505af11580156135d4573d6000803e3d6000fd5b50505050612e0e565b600a5460408051633b8d674f60e01b815233600482015290516000926001600160a01b031691633b8d674f91602480830192602092919082900301818787803b15801561362957600080fd5b505af115801561280a573d6000803e3d6000fd5b60055460408051631e4eb16d60e31b81523360048201526001600160a01b038581166024830152604482018590529151919092169163f2758b6891606480830192600092919082900301818387803b15801561369857600080fd5b505af11580156136ac573d6000803e3d6000fd5b50506040805184815290516001600160a01b0386169350309250600080516020615f238339815191529181900360200190a35050565b60055460408051631d90fdf560e31b81523360048201526024810184905290516001600160a01b039092169163ec87efa89160448082019260009290919082900301818387803b15801561232557600080fd5b60048054604080516306baf26360e01b81523393810193909352516001600160a01b03909116916306baf26391602480830192600092919082900301818387803b1580156134d157600080fd5b60048054604080516352ba171d60e01b81523393810193909352516001600160a01b03909116916352ba171d91602480830192600092919082900301818387803b1580156134d157600080fd5b60025460408051633b317dab60e01b81526001600160a01b0384811660048301529151600093610100900490921691633b317dab91602480820192602092909190829003018186803b15801561382457600080fd5b505afa158015613838573d6000803e3d6000fd5b505050506040513d602081101561384e57600080fd5b505160075460408051632bfac20f60e01b81523360048201526001600160a01b038681166024830152346044830152825194955060009485949190911692632bfac20f926064808201939182900301818787803b1580156138ae57600080fd5b505af11580156138c2573d6000803e3d6000fd5b505050506040513d60408110156138d857600080fd5b50805160209091015190925090506138ef82612d23565b506040516001600160a01b0385169082156108fc029083906000818181858888f193505050506139505760405162461bcd60e51b8152600401808060200182810382526023815260200180615ecd6023913960400191505060405180910390fd5b60408051848152905133916001600160a01b03871691600080516020615ead8339815191529181900360200190a350505050565b60025460408051637626dfcf60e01b81523360048201526024810184905290516101009092046001600160a01b031691637626dfcf9160448082019260009290919082900301818387803b15801561232557600080fd5b600480546040805163ecc517f160e01b81523393810193909352346024840152516001600160a01b039091169163ecc517f191604480830192600092919082900301818387803b1580156134d157600080fd5b336001600160a01b038216600080516020615f23833981519152613a5184613ff9565b60408051918252519081900360200190a36008546040805163eb19110d60e01b81523360048201526001600160a01b0384811660248301523460448301529151600093929092169163eb19110d9160648082019260209290919082900301818787803b158015613ac057600080fd5b505af1158015613ad4573d6000803e3d6000fd5b505050506040513d6020811015613aea57600080fd5b50516040519091506001600160a01b0383169082156108fc029083906000818181858888f19350505050612e0e5760405162461bcd60e51b8152600401808060200182810382526023815260200180615ecd6023913960400191505060405180910390fd5b6005546040805163062199f760e31b815233600482015290516001600160a01b039092169163310ccfb89160248082019260009290919082900301818387803b1580156134d157600080fd5b80516002546040805163d050a90560e01b81529051839261010090046001600160a01b03169163d050a905916004808301926020929190829003018186803b158015613be657600080fd5b505afa158015613bfa573d6000803e3d6000fd5b505050506040513d6020811015613c1057600080fd5b5051023414613c505760405162461bcd60e51b8152600401808060200182810382526033815260200180615ef06033913960400191505060405180910390fd5b60005b818110156127ac5760045483516001600160a01b039091169063ecc517f190859084908110613c7e57fe5b6020026020010151600260019054906101000a90046001600160a01b03166001600160a01b031663d050a9056040518163ffffffff1660e01b815260040160206040518083038186803b158015613cd457600080fd5b505afa158015613ce8573d6000803e3d6000fd5b505050506040513d6020811015613cfe57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915251604480830192600092919082900301818387803b158015613d4e57600080fd5b505af1158015613d62573d6000803e3d6000fd5b505060019092019150613c539050565b6002546040805163225e453360e21b81523360048201526024810184905290516101009092046001600160a01b03169163897914cc9160448082019260009290919082900301818387803b15801561232557600080fd5b336001600160a01b038216600080516020615f23833981519152613dec84613ff9565b60408051918252519081900360200190a36008546040805163e7cba43360e01b81523360048201526001600160a01b0384811660248301523460448301529151600093929092169163e7cba4339160648082019260209290919082900301818787803b158015613ac057600080fd5b600f546001600160a01b031681565b6010546001600160a01b03163314156106d357600580546001600160a01b0319166001600160a01b038381169190911791829055604080516313b9f0c760e01b8152905192909116916313b9f0c79160048082019260009290919082900301818387803b15801561292157600080fd5b6001600160a01b038216301415613f34576040805162461bcd60e51b8152602060048201526019602482015278696620285f746f203d3d20616464726573732874686973292960381b604482015290519081900360640190fd5b60065460408051631c1b2e5560e21b81523360048201526001600160a01b038581166024830152604482018590529151613fc693929092169163706cb954916064808201926020929091908290030181600087803b158015613f9557600080fd5b505af1158015613fa9573d6000803e3d6000fd5b505050506040513d6020811015613fbf57600080fd5b5051612d23565b506040805182815290516001600160a01b038416913391600080516020615ead8339815191529181900360200190a35050565b60048054604080516370a0823160e01b81526001600160a01b03858116948201949094529051600093909216916370a0823191602480820192602092909190829003018186803b158015612b3357600080fd5b600480546040805163016e045960e41b81523393810193909352346024840152516001600160a01b03909116916316e0459091604480830192600092919082900301818387803b1580156134d157600080fd5b336001600160a01b038216600080516020615f238339815191526140c284613ff9565b60408051918252519081900360200190a3600854604080516345b4f43b60e01b81523360048201526001600160a01b038481166024830152346044830152915160009392909216916345b4f43b9160648082019260209290919082900301818787803b158015613ac057600080fd5b806104d21461413f57600080fd5b6010546001600160a01b03163314156106d35781600260016101000a8154816001600160a01b0302191690836001600160a01b03160217905550600260019054906101000a90046001600160a01b03166001600160a01b03166313b9f0c76040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156135c057600080fd5b6006546001600160a01b031681565b600480546040805163ed401ac360e01b8152339381019390935260248301849052516001600160a01b039091169163ed401ac391604480830192600092919082900301818387803b15801561232557600080fd5b600254604080516349ca9db360e01b8152905160009261010090046001600160a01b0316916349ca9db3916004808301926020929190829003018186803b15801561427657600080fd5b505afa15801561428a573d6000803e3d6000fd5b505050506040513d60208110156142a057600080fd5b50516142ab57600080fd5b600260019054906101000a90046001600160a01b03166001600160a01b031663fb6560676040518163ffffffff1660e01b815260040160206040518083038186803b1580156142f957600080fd5b505afa15801561430d573d6000803e3d6000fd5b505050506040513d602081101561432357600080fd5b50516001600160a01b0316331461433957600080fd5b82518110156127ac5782818151811061434e57fe5b60200260200101516001600160a01b0316306001600160a01b0316600080516020615f23833981519152846040518082815260200191505060405180910390a3600101614339565b3332146143a257600080fd5b601154600160a01b900460ff16156143f3576040805162461bcd60e51b815260206004820152600f60248201526e14185e5bdd5d1cc8109b1bd8dad959608a1b604482015290519081900360640190fd5b4780614446576040805162461bcd60e51b815260206004820152601860248201527f282128636f6e747261637442616c616e6365203e203029290000000000000000604482015290519081900360640190fd5b6003546040805163643a943160e01b8152905160009283926001600160a01b039091169163643a943191600480820192602092909190829003018186803b15801561449057600080fd5b505afa1580156144a4573d6000803e3d6000fd5b505050506040513d60208110156144ba57600080fd5b505190505b808210156127ac576003546040805163124183a760e31b81526004810185905290516000926001600160a01b03169163920c1d38916024808301926020929190829003018186803b15801561451357600080fd5b505afa158015614527573d6000803e3d6000fd5b505050506040513d602081101561453d57600080fd5b505160025460408051633b317dab60e01b81526001600160a01b038085166004830152915193945060009361010090930490911691633b317dab91602480820192602092909190829003018186803b15801561459857600080fd5b505afa1580156145ac573d6000803e3d6000fd5b505050506040513d60208110156145c257600080fd5b50516002546040805163433ad96960e11b815290519293506000926101009092046001600160a01b031691638675b2d291600480820192602092909190829003018186803b15801561461357600080fd5b505afa158015614627573d6000803e3d6000fd5b505050506040513d602081101561463d57600080fd5b50518683028161464957fe5b0490508015614799576040516001600160a01b0384169082156108fc029083906000818181858888f193505050506146c357604080518381526020810183905281516001600160a01b038616927f50a6033bb1b577c577f67a1425e1ac9939c9382b114ae85b5274fd3e76a7f7df928290030190a2614799565b6002546040805163028f4a6960e41b815290516101009092046001600160a01b031691631eeb57ec91849184916328f4a690916004808301926020929190829003018186803b15801561471557600080fd5b505afa158015614729573d6000803e3d6000fd5b505050506040513d602081101561473f57600080fd5b5051604080516001600160e01b031960e086901b16815292909101600483015251602480830192600092919082900301818387803b15801561478057600080fd5b505af1158015614794573d6000803e3d6000fd5b505050505b5050600190920191506144bf565b336001600160a01b038216600080516020615f238339815191526147ca84613ff9565b60408051918252519081900360200190a360055460408051636311a8d360e11b81523360048201526001600160a01b0384811660248301523460448301529151600093929092169163c62351a69160648082019260209290919082900301818787803b158015613ac057600080fd5b600c5460408051631a3a8c1f60e21b81523360048201818152602483019384528551604484015285516000956001600160a01b0316946368ea307c94349493899390929160640190602080860191028083838d5b838110156148a557818101518382015260200161488d565b5050505090500193505050506020604051808303818588803b1580156148ca57600080fd5b505af11580156148de573d6000803e3d6000fd5b50505050506040513d60208110156148f557600080fd5b505190508015612e0e576127ac81612d23565b6008546001600160a01b031681565b6011546001600160a01b031681565b600a546001600160a01b031681565b60025460408051633b317dab60e01b81526001600160a01b0385811660048301529151600093610100900490921691633b317dab91602480820192602092909190829003018186803b15801561498a57600080fd5b505afa15801561499e573d6000803e3d6000fd5b505050506040513d60208110156149b457600080fd5b5051905060005b8251811015614a235760006001600160a01b03168382815181106149db57fe5b60200260200101516001600160a01b0316600080516020615f23833981519152614a0a86858151811061245557fe5b60408051918252519081900360200190a36001016149bb565b6007546040516367711a5960e01b815233600482018181526001600160a01b038881166024850152346064850181905260806044860190815289516084870152895160009793909316956367711a5995948c948c9493919260a40190602080870191028083838e5b83811015614aa3578181015183820152602001614a8b565b5050505090500195505050505050602060405180830381600087803b158015614acb57600080fd5b505af1158015614adf573d6000803e3d6000fd5b505050506040513d6020811015614af557600080fd5b50516040519091506001600160a01b0386169082156108fc029083906000818181858888f19350505050614b2857600080fd5b60408051848152905133916001600160a01b03881691600080516020615ead8339815191529181900360200190a35050505050565b600480546040805163482ad11f60e11b81526001600160a01b0385811694820194909452905160009390921691639055a23e91602480820192602092909190829003018186803b158015612b3357600080fd5b60095460408051639358928b60e01b815290516000926001600160a01b031691639358928b916004808301926020929190829003018186803b1580156127f657600080fd5b6010546001600160a01b03163314156106d357600480546001600160a01b0319166001600160a01b0383811691909117808355604080516313b9f0c760e01b8152905191909216926313b9f0c79280820192600092909182900301818387803b15801561292157600080fd5b6010546001600160a01b03163314156106d357601180546001600160a01b0319166001600160a01b0383161790556125d2565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156121155780601f106120ea57610100808354040283529160200191612115565b6010546001600160a01b03163314156106d357600980546001600160a01b0319166001600160a01b038381169190911791829055604080516313b9f0c760e01b8152905192909116916313b9f0c79160048082019260009290919082900301818387803b15801561292157600080fd5b60025460408051634ea8c93760e11b81523360048201526024810184905290516101009092046001600160a01b031691639d51926e9160448082019260009290919082900301818387803b15801561232557600080fd5b6001600160a01b038216301415614e0f576040805162461bcd60e51b8152602060048201526019602482015278696620285f746f203d3d20616464726573732874686973292960381b604482015290519081900360640190fd5b600a54604080516317d5759960e31b81523360048201526001600160a01b038581166024830152604482018590529151919092169163beabacc891606480830192600092919082900301818387803b158015614e6a57600080fd5b505af1158015614e7e573d6000803e3d6000fd5b50506040805184815290516001600160a01b0386169350339250600080516020615f238339815191529181900360200190a35050565b6010546001600160a01b03163314156106d357600d80546001600160a01b0319166001600160a01b0383161790556125d2565b600480546040805163ca02eb9d60e01b81523393810193909352516001600160a01b039091169163ca02eb9d91602480830192600092919082900301818387803b1580156134d157600080fd5b600d5460405163fe942a2d60e01b815233600482018181526060602484019081528651606485015286516000956001600160a01b03169463fe942a2d94349490938a938a936044810191608490910190602080880191028083838f5b83811015614fa8578181015183820152602001614f90565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015614fe7578181015183820152602001614fcf565b50505050905001955050505050506020604051808303818588803b15801561500e57600080fd5b505af1158015615022573d6000803e3d6000fd5b50505050506040513d602081101561503957600080fd5b5051905080156127ac576134e581612d23565b600d546001600160a01b031681565b60025460408051633b317dab60e01b81526001600160a01b0384811660048301529151600093610100900490921691633b317dab91602480820192602092909190829003018186803b158015612b3357600080fd5b600254604080516344c077ab60e11b81523360048201526024810184905290516101009092046001600160a01b031691638980ef569160448082019260009290919082900301818387803b15801561232557600080fd5b6006546040805163ac39285b60e01b815233600482015290516001600160a01b039092169163ac39285b9160248082019260009290919082900301818387803b1580156134d157600080fd5b600480546040805163034043e160e51b81523393810193909352516001600160a01b03909116916368087c2091602480830192600092919082900301818387803b1580156134d157600080fd5b6010546001600160a01b03163314156106d357600880546001600160a01b0319166001600160a01b038381169190911791829055604080516313b9f0c760e01b8152905192909116916313b9f0c79160048082019260009290919082900301818387803b15801561292157600080fd5b6007546001600160a01b031681565b6010546001600160a01b03163314156106d357600680546001600160a01b0319166001600160a01b038381169190911791829055604080516313b9f0c760e01b8152905192909116916313b9f0c79160048082019260009290919082900301818387803b15801561292157600080fd5b601154600160a01b900460ff1681565b6001600160a01b0383163014156152f9576040805162461bcd60e51b8152602060048201526019602482015278696620285f746f203d3d20616464726573732874686973292960381b604482015290519081900360640190fd5b60005b81518110156153645760006001600160a01b031682828151811061531c57fe5b60200260200101516001600160a01b0316600080516020615f2383398151915261534b85858151811061245557fe5b60408051918252519081900360200190a36001016152fc565b600654604051632464a27d60e01b815233600482018181526001600160a01b038881166024850152604484018890526080606485019081528751608486015287519190951694632464a27d948a938a938a93919260a401906020808601910280838360005b838110156153e15781810151838201526020016153c9565b5050505090500195505050505050600060405180830381600087803b15801561540957600080fd5b505af115801561541d573d6000803e3d6000fd5b50506040805186815290516001600160a01b0388169350339250600080516020615ead8339815191529181900360200190a350505050565b80516002546040805163d050a90560e01b81529051839261010090046001600160a01b03169163d050a905916004808301926020929190829003018186803b1580156154a057600080fd5b505afa1580156154b4573d6000803e3d6000fd5b505050506040513d60208110156154ca57600080fd5b505160025460408051633238268960e01b815290516101009092046001600160a01b031691633238268991600480820192602092909190829003018186803b15801561551557600080fd5b505afa158015615529573d6000803e3d6000fd5b505050506040513d602081101561553f57600080fd5b5051010234146155805760405162461bcd60e51b8152600401808060200182810382526040815260200180615e6d6040913960400191505060405180910390fd5b60005b818110156127ac5760045483516001600160a01b03909116906316e04590908590849081106155ae57fe5b6020026020010151600260019054906101000a90046001600160a01b03166001600160a01b031663d050a9056040518163ffffffff1660e01b815260040160206040518083038186803b15801561560457600080fd5b505afa158015615618573d6000803e3d6000fd5b505050506040513d602081101561562e57600080fd5b505160025460408051633238268960e01b815290516101009092046001600160a01b031691633238268991600480820192602092909190829003018186803b15801561567957600080fd5b505afa15801561568d573d6000803e3d6000fd5b505050506040513d60208110156156a357600080fd5b5051604080516001600160e01b031960e087901b1681526001600160a01b0390941660048501529101602483015251604480830192600092919082900301818387803b1580156156f257600080fd5b505af1158015615706573d6000803e3d6000fd5b5050600190920191506155839050565b60048054604080516371681de560e11b81523393810193909352516001600160a01b039091169163e2d03bca91602480830192600092919082900301818387803b1580156134d157600080fd5b6001600160a01b03811633600080516020615f2383398151915261578682613ff9565b60408051918252519081900360200190a36001600160a01b0381163014156157f1576040805162461bcd60e51b8152602060048201526019602482015278696620285f746f203d3d20616464726573732874686973292960381b604482015290519081900360640190fd5b60048054604080516334d5831d60e21b815233938101939093526001600160a01b038481166024850152905191169163d3560c7491604480830192600092919082900301818387803b15801561232557600080fd5b60025460408051631d25fd5560e01b81523360048201526024810184905290516101009092046001600160a01b031691631d25fd559160448082019260009290919082900301818387803b15801561232557600080fd5b6009546001600160a01b031681565b60065460408051637cb6d17b60e11b81523360048201526024810184905290516001600160a01b039092169163f96da2f69160448082019260009290919082900301818387803b15801561232557600080fd5b6002546040805163124e91b960e01b81523360048201526024810184905290516101009092046001600160a01b03169163124e91b99160448082019260009290919082900301818387803b15801561232557600080fd5b60025460408051635c65816560e01b81526001600160a01b03858116600483015284811660248301529151600093610100900490921691635c65816591604480820192602092909190829003018186803b1580156159b357600080fd5b505afa1580156159c7573d6000803e3d6000fd5b505050506040513d60208110156159dd57600080fd5b50519392505050565b60025460408051633bb868dd60e21b81523360048201526024810184905290516101009092046001600160a01b03169163eee1a3749160448082019260009290919082900301818387803b15801561232557600080fd5b6011546001600160a01b03163314156106d357601280546001600160a01b0319166001600160a01b0383161790556125d2565b600c546001600160a01b031681565b6000600260019054906101000a90046001600160a01b03166001600160a01b031663e5f65c716040518163ffffffff1660e01b815260040160206040518083038186803b158015615acf57600080fd5b505afa158015615ae3573d6000803e3d6000fd5b505050506040513d6020811015615af957600080fd5b50514303905090565b6010546001600160a01b03166106d357601080546001600160a01b0319163317905561346d565b601154600160a01b900460ff161561346d576012546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505061346d57600080fd5b6010546001600160a01b03163314156106d357600c80546001600160a01b0319166001600160a01b0383161790556125d2565b60025461010090046001600160a01b031681565b805160005b818110156127ac5760045483516001600160a01b03909116906352ba171d90859084908110615be357fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015615c3357600080fd5b505af1158015615c47573d6000803e3d6000fd5b505060019092019150615bb89050565b600480546040805163eb0fbbad60e01b81526001600160a01b038581169482019490945290516000939092169163eb0fbbad91602480820192602092909190829003018186803b158015612b3357600080fd5b600480546040805163d42e1c2f60e01b815233938101939093526001600160a01b038481166024850152905191169163d42e1c2f91604480830192600092919082900301818387803b15801561232557600080fd5b6010546001600160a01b03163314156106d357600a80546001600160a01b0319166001600160a01b038381169190911791829055604080516313b9f0c760e01b8152905192909116916313b9f0c79160048082019260009290919082900301818387803b15801561292157600080fd5b6010546001600160a01b031681565b60048054604080516001620769d360e31b031981526001600160a01b038581169482019490945290516000939092169163ffc4b16891602480820192602092909190829003018186803b158015612b3357600080fd5b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10615e1557805160ff1916838001178555615e42565b82800160010185558215615e42579182015b82811115615e42578251825591602001919060010190615e27565b50615e4e929150615e52565b5090565b61252b91905b80821115615e4e5760008155600101615e5856fe2877656956616c756520213d2028286d73672e76616c7565202b2070632e657468466565546f55706772616465546f4c6576656c332829292a636f756e742929cc6ddb19d323297cc6ed8f3dbda06395f6f153d24bf678f36305752ab635e10928215f616464726573732e73656e642866656573546f506179546f53656c6c65722929286d73672e76616c756520213d202870632e657468466565546f55706772616465546f4c6576656c3328292a636f756e742929ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef286d73672e76616c756520213d2070632e657468466565546f55706772616465546f4c6576656c3228292a636f756e7429a264697066735822122068af78f55939e51c0f34a5a04df0a6c1f0843f4203fbde9d023e8ea6ab0bcc5e64736f6c63430006000033