785 txs
666 calls
constructor
constructor(address initialOwner, address usdt_, address nft_, address engineWallet_, address marketingWallet_)
functions
activeListingIdOf
viewfunction activeListingIdOf(uint256) view returns (uint256)
BOOST_10_BPS
viewfunction BOOST_10_BPS() view returns (uint256)
BOOST_20_BPS
viewfunction BOOST_20_BPS() view returns (uint256)
BOOST_30_BPS
viewfunction BOOST_30_BPS() view returns (uint256)
BPS
viewfunction BPS() view returns (uint256)
buybackBps
viewfunction buybackBps() view returns (uint256)
claimable
viewfunction claimable(uint256 tokenId) view returns (uint256)
currentPhase
viewfunction currentPhase() view returns (uint8)
directReferrals
viewfunction directReferrals(address, uint256) view returns (address)
engineWallet
viewfunction engineWallet() view returns (address)
getActiveListingIdOf
viewfunction getActiveListingIdOf(uint256 tokenId) view returns (uint256)
getActiveListings
viewfunction getActiveListings() view returns (uint256[] ids)
getBuybackRefPrice
viewfunction getBuybackRefPrice(uint256 tokenId) view returns (uint256)
getGlobalStats
viewfunction getGlobalStats() view returns (uint256 _totalUsers, uint256 _totalMinted, uint256 _totalActive, uint256 _activeListings)
getMinerInfo
viewfunction getMinerInfo(uint256 tokenId) view returns (tuple M)
getMyListings
viewfunction getMyListings() view returns (uint256[] ids)
getReferralCountsByLevel
viewfunction getReferralCountsByLevel(address u) view returns (uint256[10])
getReferralEarningsByLevel
viewfunction getReferralEarningsByLevel(address u) view returns (uint256[10])
getUpgradeRefPrice
viewfunction getUpgradeRefPrice(uint256 tokenId) view returns (uint256)
hasUnlocked
viewfunction hasUnlocked(address user, uint8 level) view returns (bool)
listingIdCounter
viewfunction listingIdCounter() view returns (uint256)
listings
viewfunction listings(uint256) view returns (address seller, uint256 tokenId, uint256 price, bool active)
MARKET_ENGINE_BPS
viewfunction MARKET_ENGINE_BPS() view returns (uint256)
MARKET_FEE_BPS
viewfunction MARKET_FEE_BPS() view returns (uint256)
MARKET_MKT_BPS
viewfunction MARKET_MKT_BPS() view returns (uint256)
marketingWallet
viewfunction marketingWallet() view returns (address)
miner
viewfunction miner(uint256) view returns (bool isActive, bool expired, uint64 startTime, uint64 lastClaim, uint32 usedHours, uint32 maxHours, uint256 baseProdPerHour, uint16 permBoostBps, uint16 tempBoostBps, uint64 tempBoostUntil, uint256 buybackRefPrice, uint256 upgradeRefPrice, uint256 totalClaimed)
nft
viewfunction nft() view returns (address)
OCLOCK_20_BPS
viewfunction OCLOCK_20_BPS() view returns (uint256)
OCLOCK_35_BPS
viewfunction OCLOCK_35_BPS() view returns (uint256)
OVERCLOCK_DURATION
viewfunction OVERCLOCK_DURATION() view returns (uint256)
owner
viewfunction owner() view returns (address)
PERM_BOOST_CAP_BPS
viewfunction PERM_BOOST_CAP_BPS() view returns (uint256)
phaseAllocation
viewfunction phaseAllocation(uint8, uint8) view returns (uint256)
phaseMinted
viewfunction phaseMinted(uint8, uint8) view returns (uint256)
phaseMultiplierBps
viewfunction phaseMultiplierBps(uint8) view returns (uint256)
plans
viewfunction plans(uint8) view returns (uint256 initialPrice, uint256 baseProdPerHour, uint32 maxHours, uint8 referralLevels)
PRICE_MULTIPLIER_CAP_BPS
viewfunction PRICE_MULTIPLIER_CAP_BPS() view returns (uint256)
PRIMARY_ENGINE_BPS
viewfunction PRIMARY_ENGINE_BPS() view returns (uint256)
PRIMARY_MKT_BPS
viewfunction PRIMARY_MKT_BPS() view returns (uint256)
prodPerHour
viewfunction prodPerHour(uint256 tokenId) view returns (uint256)
refs
viewfunction refs(address) view returns (address referrer, uint256 totalEarnings)
RENEW_250H_BPS
viewfunction RENEW_250H_BPS() view returns (uint256)
totalActive
viewfunction totalActive() view returns (uint256)
totalMinted
viewfunction totalMinted() view returns (uint256)
totalUsers
viewfunction totalUsers() view returns (uint256)
UPGRADE_ENGINE_BPS
viewfunction UPGRADE_ENGINE_BPS() view returns (uint16)
UPGRADE_MKT_BPS
viewfunction UPGRADE_MKT_BPS() view returns (uint16)
UPGRADE_RESERVE_BPS
viewfunction UPGRADE_RESERVE_BPS() view returns (uint16)
usdt
viewfunction usdt() view returns (address)
activate
nonpayablefunction activate(uint256 tokenId)
autoListInternal
nonpayablefunction autoListInternal(uint256 tokenId)
boost
nonpayablefunction boost(uint256 tokenId, uint8 tierPct)
buyInternal
nonpayablefunction buyInternal(uint256 listingId)
buyPrimary
nonpayablefunction buyPrimary(uint8 model, address ref)
cancelListing
nonpayablefunction cancelListing(uint256 listingId)
claim
nonpayablefunction claim(uint256 tokenId)
claimBatch
nonpayablefunction claimBatch(uint256[] tokenIds)
extendLife
nonpayablefunction extendLife(uint256 tokenId, uint16 packHours)
listInternal
nonpayablefunction listInternal(uint256 tokenId, uint256 price)
onERC721Received
nonpayablefunction onERC721Received(address, address, uint256, bytes) returns (bytes4)
overclock
nonpayablefunction overclock(uint256 tokenId, uint8 tierPct)
pause
nonpayablefunction pause(uint256 tokenId)
renounceOwnership
nonpayablefunction renounceOwnership()
resume
nonpayablefunction resume(uint256 tokenId)
sellToSystem
nonpayablefunction sellToSystem(uint256 tokenId)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
Activated
event Activated(address indexed owner, uint256 indexed tokenId, uint256 refPrice)
Boosted
event Boosted(address indexed owner, uint256 indexed tokenId, uint16 boostBps, uint256 cost)
BoughtBack
event BoughtBack(address indexed seller, uint256 indexed tokenId, uint256 payout)
Claimed
event Claimed(address indexed owner, uint256 indexed tokenId, uint256 amount, uint256 hoursClaimed)
Delisted
event Delisted(address indexed seller, uint256 indexed listingId)
Expired
event Expired(address indexed owner, uint256 indexed tokenId)
Extended
event Extended(address indexed owner, uint256 indexed tokenId, uint16 hoursAdded, uint256 cost)
Listed
event Listed(address indexed seller, uint256 indexed listingId, uint256 indexed tokenId, uint256 price)
MinerPaused
event MinerPaused(uint256 indexed tokenId, address indexed owner, uint64 timestamp)
MinerResumed
event MinerResumed(uint256 indexed tokenId, address indexed owner, uint64 timestamp)
Overclocked
event Overclocked(address indexed owner, uint256 indexed tokenId, uint16 boostBps, uint256 cost, uint64 until)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PhaseAdvanced
event PhaseAdvanced(uint8 newPhase)
PhaseConfigured
event PhaseConfigured(uint8 phase, uint8 model, uint256 allocation, uint256 multiplierBps)
PrimaryBought
event PrimaryBought(address indexed buyer, uint8 indexed model, uint256 indexed tokenId, uint256 price)
ReferralReward
event ReferralReward(address indexed from, address indexed to, uint8 level, uint256 amount)
SoldInternal
event SoldInternal(address indexed buyer, address indexed seller, uint256 indexed listingId, uint256 tokenId, uint256 price)
errors
InsufficientClaimLiquidity
error InsufficientClaimLiquidity(uint256 needed, uint256 balance)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x6101006040526001600755348015610015575f5ffd5b506040516164e63803806164e6833981016040819052610034916109a3565b846001600160a01b03811661006357604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61006c816108be565b50600180556001600160a01b0384161580159061009157506001600160a01b03831615155b6100cc5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640161005a565b6001600160a01b038216158015906100ec57506001600160a01b03811615155b6101265760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc81dd85b1b195d60aa1b604482015260640161005a565b6001600160a01b03848116608090815284821660a05283821660c05290821660e052604080518083018252678ac7230489e8000081526616345785d8a0006020808301918252610c80838501908152600160608086018281525f808052600280875297517fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b5595517fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077c5592517fac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077d8054945163ffffffff92831664ffffffffff199687161764010000000060ff9283168102919091179092558951808c018b526802b5e3af16b1880000815266766c7d74835555818901908152610c35828d019081528287018c8152978b528b8a5291517fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e055517fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e155517fe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e280549651918516968816969096179082168302179094558851808b018a5268056bc75e2d63100000815266fba68a97971555818801908152610c10828c0190815260048387018181528c8c528c8b5293517f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28c5591517f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28d55517f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28e80549351918616938916939093179087168402179091558951808c018b52680d8d726b7177a80000815267029a2241af62c000818901908152610bf0828d0190815260068388018181526003808e528e8d5294517f88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c35592517f88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c45590517f88601476d11616a71c5be67555bd1dff4b1cbf21533d2669b768b61518cfe1c580549351918816938b16939093179089168602179091558b51808e018d52681b1ae4d6e2ef500000815267057e4851c7979555818b01908152610bd2828f019081526007838a01818152968e528e8d5292517fee60d0579bcffd98e668647d59fec1ff86a7fb340ce572e844f234ae73a6918f5590517fee60d0579bcffd98e668647d59fec1ff86a7fb340ce572e844f234ae73a6919055517fee60d0579bcffd98e668647d59fec1ff86a7fb340ce572e844f234ae73a6919180549551918816958b16959095179089168602179093558b51808e018d52683635c9adc5dea000008152670b469471f8014000818b01908152610b47828f019081526008838a0190815260058e528e8d5292517fb98b78633099fa36ed8b8680c4f8092689e1e04080eb9cbb077ca38a14d7e3845590517fb98b78633099fa36ed8b8680c4f8092689e1e04080eb9cbb077ca38a14d7e38555517fb98b78633099fa36ed8b8680c4f8092689e1e04080eb9cbb077ca38a14d7e38680549251918816928b169290921790891686021790558b51808e018d52686c6b935b8bbd40000081526716e5fa4207650000818b01908152610b68828f019081526009838a01818152948e528e8d5292517f59dd4b18488d12f51eda69757a0ed42a2010c14b564330cc74a06895e60c077b5590517f59dd4b18488d12f51eda69757a0ed42a2010c14b564330cc74a06895e60c077c55517f59dd4b18488d12f51eda69757a0ed42a2010c14b564330cc74a06895e60c077d80549351918816938b16939093179089168602179091558b519c8d018c5269010f0cf064dd592000008d526739d2f941e420aaaa8d8a01908152610bb89c8e019c8d52600a968e01878152938b529a89529b517facd8ef244210bb6898e73c48bf820ed8ecc857a3bab8d79c10e4fa92b1e9ca655598517facd8ef244210bb6898e73c48bf820ed8ecc857a3bab8d79c10e4fa92b1e9ca665598517facd8ef244210bb6898e73c48bf820ed8ecc857a3bab8d79c10e4fa92b1e9ca6780549a5191909316999095169890981793909216909602919091179055929092526127107f13da86008ba1c6922daee3e07db95305ef49ebced9f5467a0b8613fcc6b343e355614e207fbbc70db1b6c7afd11e79c0fb0051300458f1a3acb8ee9789d9b6b26c61ad9bc75561c3507fbff4442b8ed600beeb8e26b1279a0f0d14c6edfaec26d968ee13c86f7d4c2ba8558152620186a07fa856840544dc26124927add067d799967eac11be13e14d82cc281ea46fa3975955815460ff19169091555b60048160ff161015610860576107f8815f610fa061090d565b6108068160016107d061090d565b6108148160026105dc61090d565b6108228160036103e861090d565b61083081600461025861090d565b61083e81600561012c61090d565b61084b81600660a061090d565b610858816007605061090d565b6001016107df565b506103e8610872610190610258610a04565b146108b45760405162461bcd60e51b815260206004820152601260248201527108ccaca40e6e0d8d2e840dad2e6dac2e8c6d60731b604482015260640161005a565b5050505050610a29565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60ff8381165f818152600b60209081526040808320948716808452948252808320869055838352600a82529182902054825193845290830193909352810183905260608101919091527f0dd13b11b802595586c55b160d3cf7981d7a89b3c2564dbd8d1ba584e00bc25d9060800160405180910390a1505050565b80516001600160a01b038116811461099e575f5ffd5b919050565b5f5f5f5f5f60a086880312156109b7575f5ffd5b6109c086610988565b94506109ce60208701610988565b93506109dc60408701610988565b92506109ea60608701610988565b91506109f860808701610988565b90509295509295909350565b80820180821115610a2357634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05160c05160e05161591e610bc85f395f81816107c201528181611ede015281816123b001528181612b100152613c1c01525f81816103cd01528181611ea30152818161235b01528181612abb01528181613b920152614a1b01525f818161060b01528181610bb901528181610e4401528181610fd1015281816112a1015281816113640152818161155f015281816116ff0152818161181601528181611ac701528181611b4101528181611cdd01528181612006015281816123f5015281816126a101528181612b5101528181612bea01528181612d4b01528181613157015281816133db01528181613591015281816138af01528181613d4a01528181613e33015281816141420152818161465301528181614711015261488c01525f81816104a9015281816119e501528181611bf001528181612303015281816123380152818161238d01528181612a6301528181612a9801528181612aed01528181613b6f01528181613bc401528181613bf901528181613ed90152818161400701528181614370015281816144d00152614eb5015261591e5ff3fe608060405234801561000f575f5ffd5b5060043610610367575f3560e01c80636dd5a903116101cf578063a76d806b11610101578063d43c89b4116100a5578063d43c89b4146108f9578063d587e5071461090c578063dc00ac331461092b578063de74e57b1461093e578063e6f84533146109ab578063f08dfb09146109be578063f2fde38b146109d1578063f7163689146109e4578063f74fb84514610a04575f5ffd5b8063a76d806b14610899578063b260c42a146108a2578063b5da26a51461066b578063baa9f0fa146108b5578063bff1f9e1146108be578063c1622f8a146108c7578063c90a249314610463578063d1d58b25146108e6575f5ffd5b806387c35bc01161017357806387c35bc0146108005780638827aeb6146108085780638da5cb5b14610811578063957b06171461080857806398548f6f146108215780639f2363bf14610834578063a2309ff81461085e578063a2ceb78b14610867578063a4b7d6d11461087a575f5ffd5b80636dd5a90314610739578063715018a61461074257806371aae7871461074a57806371eeea331461075357806375c6c6da1461077d57806375f0a874146107bd5780637b9ea87e146107e45780637d2388ef146107f7575f5ffd5b80633579bcbe116102a857806354cab2911161024c57806354cab29114610650578063553c02481461065957806357759600146106625780635825237b1461066b57806360a31a881461067457806362abebce146106e25780636658c827146106f55780636b1c4b61146106fe5780636b4169c314610711575f5ffd5b80633579bcbe14610590578063357f3ca6146105a3578063379607f5146105ad5780633a091fae146105c0578063405cb769146105d3578063414000b5146105f357806347ccca02146106065780634e9652661461062d575f5ffd5b8063231701e91161030f578063231701e91461045a578063243bb56d14610463578063249d39e91461047f5780632546c851146104885780632b05abfe146104915780632f48ab7d146104a4578063305a67a8146104cb578063324e20c0146104de575f5ffd5b8062754eea1461036b578063055ad42e1461038957806305ad3935146103a8578063079e43a5146103c85780630c10f2aa146103ef5780630fcc40e714610404578063136439dd1461041b578063150b7a021461042e575b5f5ffd5b610373610a0e565b60405161038091906150f5565b60405180910390f35b6009546103969060ff1681565b60405160ff9091168152602001610380565b6103bb6103b636600461514b565b610b5d565b6040516103809190615175565b6103bb7f000000000000000000000000000000000000000000000000000000000000000081565b6104026103fd366004615197565b610b91565b005b61040d61038481565b604051908152602001610380565b6104026104293660046151c5565b610e1c565b61044161043c3660046151dc565b610fc5565b6040516001600160e01b03199091168152602001610380565b61040d60075481565b61046c6103e881565b60405161ffff9091168152602001610380565b61040d61271081565b61040d6101f481565b61040d61049f3660046151c5565b611045565b6103bb7f000000000000000000000000000000000000000000000000000000000000000081565b6104026104d93660046151c5565b6111cc565b6105776104ec3660046151c5565b600360208190525f918252604090912080546001820154600283015493830154600484015460059094015460ff808516966101008604909116956001600160401b0362010000808804821697600160501b810483169763ffffffff600160901b8304811698600160b01b9093041696909561ffff808216969482041694600160201b9091041692908d565b6040516103809d9c9b9a99989796959493929190615273565b61040261059e3660046151c5565b61133c565b61040d620186a081565b6104026105bb3660046151c5565b6116df565b6104026105ce3660046151c5565b6117ee565b6105e66105e136600461530b565b611c5c565b6040516103809190615326565b6104026106013660046151c5565b611cb5565b6103bb7f000000000000000000000000000000000000000000000000000000000000000081565b61064061063b366004615357565b611e7f565b6040519015158152602001610380565b61040d6104b081565b61040d6103e881565b61040d600f5481565b61040d61019081565b6106b3610682366004615383565b600260208190525f918252604090912080546001820154919092015463ffffffff811690600160201b900460ff1684565b6040516103809493929190938452602084019290925263ffffffff16604083015260ff16606082015260800190565b6104026106f036600461539e565b611f8a565b61040d6105dc81565b61040d61070c3660046151c5565b6120aa565b6107196120b4565b604080519485526020850193909352918301526060820152608001610380565b61040d61177081565b61040261210e565b61040d610dac81565b61040d61076136600461540d565b600c60209081525f928352604080842090915290825290205481565b6107af61078b36600461530b565b60046020525f9081526040902080546001909101546001600160a01b039091169082565b604051610380929190615429565b6103bb7f000000000000000000000000000000000000000000000000000000000000000081565b6104026107f2366004615442565b612121565b61046c611f4081565b610373612548565b61040d61025881565b5f546001600160a01b03166103bb565b61040261082f36600461546e565b612679565b61040d61084236600461540d565b600b60209081525f928352604080842090915290825290205481565b61040d600e5481565b6104026108753660046151c5565b6128a3565b61040d6108883660046151c5565b60086020525f908152604090205481565b61040d61138881565b6104026108b03660046151c5565b612d23565b61040d611b5881565b61040d600d5481565b61040d6108d5366004615383565b600a6020525f908152604090205481565b61040d6108f43660046151c5565b612f30565b6105e661090736600461530b565b6130d7565b61040d61091a3660046151c5565b5f9081526008602052604090205490565b610402610939366004615197565b61312f565b61097f61094c3660046151c5565b60066020525f908152604090208054600182015460028301546003909301546001600160a01b0390921692909160ff1684565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610380565b6104026109b9366004615497565b6133b3565b61040d6109cc3660046151c5565b61370e565b6104026109df36600461530b565b613718565b6109f76109f23660046151c5565b613752565b60405161038091906154b7565b61040d62093a8081565b6007546060905f816001600160401b03811115610a2d57610a2d6155d2565b604051908082528060200260200182016040528015610a56578160200160208202803683370190505b5090505f60015b83811015610ac8575f818152600660205260409020600381015460ff168015610a8f575080546001600160a01b031633145b15610abf57818484610aa0816155fa565b955081518110610ab257610ab2615612565b6020026020010181815250505b50600101610a5d565b50806001600160401b03811115610ae157610ae16155d2565b604051908082528060200260200182016040528015610b0a578160200160208202803683370190505b5093505f5b81811015610b5657828181518110610b2957610b29615612565b6020026020010151858281518110610b4357610b43615612565b6020908102919091010152600101610b0f565b5050505090565b6005602052815f5260405f208181548110610b76575f80fd5b5f918252602090912001546001600160a01b03169150829050565b610b99613a66565b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610bfe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c229190615626565b6001600160a01b031614610c515760405162461bcd60e51b8152600401610c4890615641565b60405180910390fd5b8060ff16600a1480610c6657508060ff166014145b80610c7457508060ff16601e145b610c905760405162461bcd60e51b8152600401610c4890615664565b5f8281526003602052604090208054610100900460ff1615610cc45760405162461bcd60e51b8152600401610c489061568a565b5f8260ff16600a14610ceb578260ff16601414610ce357611770610cef565b610dac610cef565b6105dc5b90505f61271082610cff87613abf565b610d0991906156ab565b610d1391906156c2565b90505f610d2460ff861660646156ab565b600285015490915061138890610d419061ffff80851691166156e1565b1115610d7b5760405162461bcd60e51b81526020600482015260096024820152680426f6f7374206361760bc1b6044820152606401610c48565b610d8482613ad3565b6002840180548291905f90610d9e90849061ffff166156f4565b92506101000a81548161ffff021916908361ffff16021790555085336001600160a01b03167fbd2c55c132ce6bf4edbcaf8e0c9665cc39410a959ca8f88daa6b1b1fdb24117e8385604051610e0392919061ffff929092168252602082015260400190565b60405180910390a350505050610e1860018055565b5050565b610e24613a66565b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015610e89573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ead9190615626565b6001600160a01b031614610ed35760405162461bcd60e51b8152600401610c4890615641565b5f8181526003602052604090208054610100900460ff1615610f075760405162461bcd60e51b8152600401610c489061568a565b805460ff16610f285760405162461bcd60e51b8152600401610c489061570e565b610f3182613c47565b805460ff67ffffffffffffffff60501b011916600160501b426001600160401b031602178155600f5415610f77576001600f5f828254610f719190615732565b90915550505b6040516001600160401b0342168152339083907f42206c87409bb0676010371fd59e79bd5f5532ceae16fca9ff9f58e5724b83cc906020015b60405180910390a350610fc260018055565b50565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110335760405162461bcd60e51b815260206004820152601260248201527113db9b1e4810db1bdd59135a5b995c93919560721b6044820152606401610c48565b50630a85bd0160e11b95945050505050565b5f81815260036020818152604080842081516101a081018352815460ff8082161515835261010080830482161515848801526001600160401b0362010000808504821686890152600160501b85048216606087015263ffffffff600160901b860481166080880152600160b01b90950490941660a0860152600186015460c0860152600286015461ffff80821660e08801908152958204811693870193909352600160201b9004166101208501529684015461014084015260048401546101608401526005909301546101808301526009549092168652600a90935290842054905191929091849161113a91166127106156e1565b90505f8361012001516001600160401b0316421061115a57612710611170565b6101008401516111709061ffff166127106156e1565b60c085015190915061271061118585836156ab565b61118f91906156c2565b905061271061119e84836156ab565b6111a891906156c2565b90506127106111b783836156ab565b6111c191906156c2565b979650505050505050565b6111d4613a66565b5f818152600660205260409020600381015460ff166112055760405162461bcd60e51b8152600401610c489061570e565b80546001600160a01b0316331461124b5760405162461bcd60e51b815260206004820152600a6024820152692737ba1039b2b63632b960b11b6044820152606401610c48565b60038101805460ff1916905560018101545f908152600860205260409020548290036112855760018101545f908152600860205260408120555b6001810154604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916342842e0e916112d9913091339190600401615745565b5f604051808303815f87803b1580156112f0575f5ffd5b505af1158015611302573d5f5f3e3d5ffd5b50506040518492503391507f070be797ebb4cddc2d58b4fe8de5939531dd771aaed937a59fbe5c9dc8a5d099905f90a350610fc260018055565b611344613a66565b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156113a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113cd9190615626565b6001600160a01b0316146113f35760405162461bcd60e51b8152600401610c4890615641565b5f818152600860205260409020541561141e5760405162461bcd60e51b8152600401610c4890615769565b61142781613c47565b5f8181526003602052604090208054610100900460ff161561145b5760405162461bcd60e51b8152600401610c489061568a565b80545f9063ffffffff600160901b82048116600160b01b9092041611611481575f6114a3565b81546114a39063ffffffff600160901b8204811691600160b01b900416615791565b63ffffffff1690505f81116114ca5760405162461bcd60e51b8152600401610c48906157ad565b81545f90600160b01b900463ffffffff16826114e586614120565b6114ef91906156ab565b6114f991906156c2565b90505f61271061150b836123286156ab565b61151591906156c2565b90505f61271061152487613abf565b611530906113886156ab565b61153a91906156c2565b905080821015611548578091505b604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e9061159890339030908b90600401615745565b5f604051808303815f87803b1580156115af575f5ffd5b505af11580156115c1573d5f5f3e3d5ffd5b5050600780545f93509150826115d6836155fa565b909155506040805160808101825233815260208082018b81528284018881526001606085018181525f88815260068652878120965187546001600160a01b0319166001600160a01b0390911617875593519186019190915590516002850155516003909301805460ff1916931515939093179092558a82526008905220819055865490915060ff161561168b57855460ff19168655600f541561168b576001600f5f8282546116859190615732565b90915550505b8681336001600160a01b03167f03dec9cb5eb28fc88294be525eef5c4e1c3f2ca49fbe9c31a5ae6f11945aaec1866040516116c891815260200190565b60405180910390a4505050505050610fc260018055565b6116e7613a66565b6040516331a9108f60e11b8152600481018290525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa15801561174c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117709190615626565b90506001600160a01b038116331461179a5760405162461bcd60e51b8152600401610c4890615641565b5f6117a783836001614250565b9050806117e35760405162461bcd60e51b815260206004820152600a6024820152690434c41494d5f4e4f4f560b41b6044820152606401610c48565b5050610fc260018055565b6117f6613a66565b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa15801561185b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187f9190615626565b6001600160a01b0316146118a55760405162461bcd60e51b8152600401610c4890615641565b5f81815260086020526040902054156118ef5760405162461bcd60e51b815260206004820152600c60248201526b2634b9ba32b2103a37b5b2b760a11b6044820152606401610c48565b5f8181526003602052604090208054610100900460ff16156119235760405162461bcd60e51b8152600401610c489061568a565b80545f9063ffffffff600160901b82048116600160b01b9092041611611949575f61196b565b815461196b9063ffffffff600160901b8204811691600160b01b900416615791565b63ffffffff1690505f81116119925760405162461bcd60e51b8152600401610c48906157ad565b5f61199c84614120565b83549091505f90600160b01b900463ffffffff166119ba84846156ab565b6119c491906156c2565b90505f6127106119d6611b58846156ab565b6119e091906156c2565b9050807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611a2f9190615175565b602060405180830381865afa158015611a4a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a6e91906157d3565b1015611ab05760405162461bcd60e51b8152602060048201526011602482015270125b9cdd59999a58da595b9d081554d115607a1b6044820152606401610c48565b604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90611b0090339030908b90600401615745565b5f604051808303815f87803b158015611b17575f5ffd5b505af1158015611b29573d5f5f3e3d5ffd5b5050604051630852cd8d60e31b8152600481018990527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506342966c6891506024015f604051808303815f87803b158015611b8c575f5ffd5b505af1158015611b9e573d5f5f3e3d5ffd5b5050865460ff16159150611bd6905057845460ff19168555600f5415611bd6576001600f5f828254611bd09190615732565b90915550505b845461ff001916610100178555611c176001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633836145f2565b604051818152869033907fa52290e9bbeea08e85a4902c066be363bfea47a8be21bba8d1e325b67df795c69060200160405180910390a35050505050610fc260018055565b611c646150d6565b6001600160a01b0382165f908152600460205260409081902081516101408101909252600c01600a8282826020028201915b815481526020019060010190808311611c965750505050509050919050565b611cbd613a66565b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015611d22573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d469190615626565b6001600160a01b031614611d6c5760405162461bcd60e51b8152600401610c4890615641565b5f8181526003602052604090208054610100900460ff1615611da05760405162461bcd60e51b8152600401610c489061568a565b805460ff1615611dc25760405162461bcd60e51b8152600401610c48906157ea565b805460ff19166001178082556001600160401b0362010000909104165f03611e0657805469ffffffffffffffff0000191662010000426001600160401b0316021781555b8054600160501b600160901b031916600160501b426001600160401b031602178155600f8054600191905f90611e3d9084906156e1565b90915550506040516001600160401b0342168152339083907f810c01292d3b3e7c9ffe751d090756ba68118a2c42801ccf28051a5717870c2890602001610fb0565b5f60018260ff161080611e955750600a8260ff16115b15611ea157505f611f84565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03161480611f1257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b15611f1f57506001611f84565b5f611f298461464f565b60ff9081165f908152600260208181526040928390208351608081018552815481526001820154928101929092529091015463ffffffff811692820192909252600160201b9091048216606090910181905290841611159150505b92915050565b611f92613a66565b5f5b818110156120a0575f838383818110611faf57611faf615612565b602090810292909201355f8181526003909352604090922080549293509160ff1690508015611fe557508054610100900460ff16155b611ff0575050612098565b6040516331a9108f60e11b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa925050508015612071575060408051601f3d908101601f1916820190925261206e91810190615626565b60015b1561209557336001600160a01b038216036120935761209183335f614250565b505b505b50505b600101611f94565b50610e1860018055565b5f611f8482613abf565b5f8080808060015b6007548110156120f5575f8181526006602052604090206003015460ff16156120ed57816120e9816155fa565b9250505b6001016120bc565b50600d54600e54600f5491965094509250905090919293565b612116614925565b61211f5f614951565b565b612129613a66565b600760ff8316111561216d5760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081b5bd9195b609a1b6044820152606401610c48565b60ff8083165f908152600260208181526040928390208351608081018552815480825260018301549382019390935292015463ffffffff811693830193909352600160201b90920490921660608301526121ff5760405162461bcd60e51b81526020600482015260136024820152724d6f64656c206e6f7420617661696c61626c6560681b6044820152606401610c48565b60095460ff9081165f818152600b6020908152604080832094881680845294825280832054938352600c82528083209483529390529190912054106122775760405162461bcd60e51b815260206004820152600e60248201526d141a185cd9481cdbdb19081bdd5d60921b6044820152606401610c48565b60095460ff165f908152600a602052604081205482516127109161229a916156ab565b6122a491906156c2565b90505f6127106122b6610258846156ab565b6122c091906156c2565b90505f6127106122d2610190856156ab565b6122dc91906156c2565b90505f816122ea8486615732565b6122f49190615732565b905061232b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163330846149a0565b6123806001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f0000000000000000000000000000000000000000000000000000000000000000866149a0565b6123d56001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f0000000000000000000000000000000000000000000000000000000000000000856149a0565b604051630348ab1560e51b815233600482015260ff881660248201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063691562a0906044016020604051808303815f875af1158015612443573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061246791906157d3565b5f818152600360208181526040928390208054938b015163ffffffff16600160b01b026001600160d01b031990941693909317835589015160018301556002820180546001600160601b03191690558101879055875160048201559091506124cf33896149c8565b6001600e5f8282546124e191906156e1565b909155506124f0905089614c02565b818960ff16336001600160a01b03167f204afba2fa3455dc820c9fee8f5455497a472e2d7193c1b3e6a78d19bf187ba58960405161253091815260200190565b60405180910390a450505050505050610e1860018055565b6007546060905f816001600160401b03811115612567576125676155d2565b604051908082528060200260200182016040528015612590578160200160208202803683370190505b5090505f60015b838110156125eb575f8181526006602052604090206003015460ff16156125e3578083836125c4816155fa565b9450815181106125d6576125d6615612565b6020026020010181815250505b600101612597565b50806001600160401b03811115612604576126046155d2565b60405190808252806020026020018201604052801561262d578160200160208202803683370190505b5093505f5b81811015610b565782818151811061264c5761264c615612565b602002602001015185828151811061266657612666615612565b6020908102919091010152600101612632565b612681613a66565b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa1580156126e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061270a9190615626565b6001600160a01b0316146127305760405162461bcd60e51b8152600401610c4890615641565b8061ffff1660fa148061274857508061ffff166101f4145b8061275857508061ffff166103e8145b6127935760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964207061636b60a01b6044820152606401610c48565b5f8281526003602052604090208054610100900460ff16156127c75760405162461bcd60e51b8152600401610c489061568a565b5f6127d760fa61ffff85166156c2565b90505f6127e6826104b06156ab565b90505f612710826127f688613abf565b61280091906156ab565b61280a91906156c2565b905061281581613ad3565b835461ffff861690859060169061283a908490600160b01b900463ffffffff16615812565b92506101000a81548163ffffffff021916908363ffffffff16021790555085336001600160a01b03167f9a3005d3b63dabda9047e395b13738a587dac530d65d9ac060dbb6421d3a2a3d8784604051610e0392919061ffff929092168252602082015260400190565b6128ab613a66565b5f818152600660205260409020600381015460ff166128fe5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206c697374696e6760881b6044820152606401610c48565b8054336001600160a01b03909116036129445760405162461bcd60e51b815260206004820152600860248201526753656c662062757960c01b6044820152606401610c48565b60028101545f612710612959610258846156ab565b61296391906156c2565b90505f612710612975610190856156ab565b61297f91906156c2565b90505f61298c82846156e1565b9050838111156129d25760405162461bcd60e51b8152602060048201526011602482015270466565206578636565647320707269636560781b6044820152606401610c48565b60038501805460ff1916905560018501545f90815260086020526040902054869003612a0c5760018501545f908152600860205260408120555b335f908152600460205260409020546001600160a01b0316612a3e578454612a3e9033906001600160a01b03166149c8565b8454612a8b9033906001600160a01b0316612a598488615732565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169291906149a0565b612ae06001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f0000000000000000000000000000000000000000000000000000000000000000866149a0565b612b356001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f0000000000000000000000000000000000000000000000000000000000000000856149a0565b6001850154604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916342842e0e91612b89913091339190600401615745565b5f604051808303815f87803b158015612ba0575f5ffd5b505af1158015612bb2573d5f5f3e3d5ffd5b505050506001850180545f90815260036020526040808220805460ff1916815592549051632bbacfe360e11b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906357759fc690602401602060405180830381865afa158015612c37573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c5b919061582e565b60ff81165f908152600260205260408120549192509061271090612c8390620186a0906156ab565b612c8d91906156c2565b90505f818811612c9d5787612c9f565b815b905083600301545f1480612cb65750836003015481105b15612cc357600384018190555b885460018a015460408051918252602082018b90528c926001600160a01b03169133917f6dcef017cc53467bf0780bcb702819032f869d4fa4591dffd79fbeef06233bf8910160405180910390a4505050505050505050610fc260018055565b612d2b613a66565b6040516331a9108f60e11b81526004810182905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015612d90573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612db49190615626565b6001600160a01b031614612dda5760405162461bcd60e51b8152600401610c4890615641565b5f8181526003602052604090208054610100900460ff1615612e0e5760405162461bcd60e51b8152600401610c489061568a565b805460ff1615612e305760405162461bcd60e51b8152600401610c48906157ea565b5f816001015411612e755760405162461bcd60e51b815260206004820152600f60248201526e139bdd081a5b9a5d1a585b1a5e9959608a1b6044820152606401610c48565b805460ff19166001178082556001600160401b0362010000909104165f03612eb957805469ffffffffffffffff0000191662010000426001600160401b0316021781555b8054600160501b600160901b031916600160501b426001600160401b031602178155600f8054600191905f90612ef09084906156e1565b90915550829050337ff89be561c4ce44410305a86555ebae8b579de22890a703ac89051c5971b5d4dc612f2283613abf565b604051908152602001610fb0565b5f81815260036020818152604080842081516101a081018352815460ff80821615801584526101008084049092161515968401969096526001600160401b0362010000808404821696850196909652600160501b83048116606085015263ffffffff600160901b840481166080860152600160b01b90930490921660a0840152600184015460c0840152600284015461ffff80821660e086015295810490951690830152600160201b90930490921661012083015292830154610140820152600483015461016082015260059092015461018083015280613012575080602001515b1561301f57505f92915050565b5f610e1082606001516001600160401b03164261303c9190615732565b61304691906156c2565b9050805f0361305857505f9392505050565b5f826080015163ffffffff168360a0015163ffffffff161161307a575f61308e565b82608001518360a0015161308e9190615791565b63ffffffff169050805f036130a757505f949350505050565b5f8183116130b557826130b7565b815b9050806130c387611045565b6130cd91906156ab565b9695505050505050565b6130df6150d6565b6001600160a01b0382165f908152600460205260409081902081516101408101909252600201600a828282602002820191815481526020019060010190808311611c965750505050509050919050565b613137613a66565b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa15801561319c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131c09190615626565b6001600160a01b0316146131e65760405162461bcd60e51b8152600401610c4890615641565b8060ff16601414806131fb57508060ff166023145b6132175760405162461bcd60e51b8152600401610c4890615664565b5f8281526003602052604090208054610100900460ff161561324b5760405162461bcd60e51b8152600401610c489061568a565b6002810154600160201b90046001600160401b03164210156132a25760405162461bcd60e51b815260206004820152601060248201526f4f766572636c6f636b2061637469766560801b6044820152606401610c48565b5f8260ff166014146132b6576103846132ba565b6101f45b90505f612710826132ca87613abf565b6132d491906156ab565b6132de91906156c2565b90506132e981613ad3565b6132f760ff851660646156ab565b60028401805461ffff92909216620100000263ffff00001990921691909117905561332562093a80426156e1565b6002840180546bffffffffffffffff000000001916600160201b6001600160401b03938416810291909117918290556040805162010000840461ffff168152602081018690529190920490921690820152859033907f5cce9e779c839c2487075280b16170f17c82662a7414e3bc44d72c106d106bb09060600160405180910390a3505050610e1860018055565b6133bb613a66565b6040516331a9108f60e11b81526004810183905233906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636352211e90602401602060405180830381865afa158015613420573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134449190615626565b6001600160a01b03161461346a5760405162461bcd60e51b8152600401610c4890615641565b5f81116134a65760405162461bcd60e51b815260206004820152600a6024820152695a65726f20707269636560b01b6044820152606401610c48565b5f82815260086020526040902054156134d15760405162461bcd60e51b8152600401610c4890615769565b6134da82613c47565b5f8281526003602052604090208054610100900460ff161561350e5760405162461bcd60e51b8152600401610c489061568a565b5f61271061351b85613abf565b613527906113886156ab565b61353191906156c2565b90508083101561357a5760405162461bcd60e51b81526020600482015260146024820152732132b637bb901a9812903ab833b930b232a932b360611b6044820152606401610c48565b604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e906135ca90339030908990600401615745565b5f604051808303815f87803b1580156135e1575f5ffd5b505af11580156135f3573d5f5f3e3d5ffd5b5050600780545f9350915082613608836155fa565b909155506040805160808101825233815260208082018981528284018981526001606085018181525f88815260068652878120965187546001600160a01b0319166001600160a01b0390911617875593519186019190915590516002850155516003909301805460ff1916931515939093179092558882526008905220819055835490915060ff16156136bd57825460ff19168355600f54156136bd576001600f5f8282546136b79190615732565b90915550505b8481336001600160a01b03167f03dec9cb5eb28fc88294be525eef5c4e1c3f2ca49fbe9c31a5ae6f11945aaec1876040516136fa91815260200190565b60405180910390a4505050610e1860018055565b5f611f8482614120565b613720614925565b6001600160a01b038116613749575f604051631e4fbdf760e01b8152600401610c489190615175565b610fc281614951565b604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a08101919091525f82815260036020818152604080842081516101a081018352815460ff808216151583526101008083049091161515958301959095526001600160401b0362010000808304821684870152600160501b83048216606085015263ffffffff600160901b840481166080860152600160b01b90930490921660a0840152600184015460c0840152600284015461ffff80821660e086015292810490921695830195909552600160201b90049093166101208401529283015461014083015260048084015461016084015260059093015461018083015251632bbacfe360e11b81529092916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916357759fc6916138e69188910190815260200190565b602060405180830381865afa158015613901573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613925919061582e565b9050604051806101c001604052808260ff168152602001835f01511515815260200183602001511515815260200183604001516001600160401b0316815260200183606001516001600160401b03168152602001836080015163ffffffff1681526020018360a0015163ffffffff1681526020018360c0015181526020016139ac86613abf565b81526020018360e0015161ffff16815260200183610100015161ffff1681526020018361012001516001600160401b03168152602001306001600160a01b031663d1d58b25876040518263ffffffff1660e01b8152600401613a1091815260200190565b602060405180830381865afa158015613a2b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a4f91906157d3565b815260200183610180015181525092505050919050565b600260015403613ab85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c48565b6002600155565b5f9081526003602052604090206004015490565b5f8111613b0e5760405162461bcd60e51b815260206004820152600960248201526816995c9bc818dbdcdd60ba1b6044820152606401610c48565b5f612710613b1e6103e8846156ab565b613b2891906156c2565b90505f612710613b3a611f40856156ab565b613b4491906156c2565b90505f612710613b566103e8866156ab565b613b6091906156c2565b9050613bb76001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f0000000000000000000000000000000000000000000000000000000000000000866149a0565b613bec6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163330856149a0565b613c416001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337f0000000000000000000000000000000000000000000000000000000000000000846149a0565b50505050565b5f818152600360205260409020805460ff168015613c6c57508054610100900460ff16155b613c74575050565b80545f90610e1090613c9690600160501b90046001600160401b031642615732565b613ca091906156c2565b9050805f03613cae57505050565b81545f9063ffffffff600160901b82048116600160b01b9092041611613cd4575f613cf6565b8254613cf69063ffffffff600160901b8204811691600160b01b900416615791565b63ffffffff169050805f03613de357825461ffff1916610100178355600f5415613d32576001600f5f828254613d2c9190615732565b90915550505b6040516331a9108f60e11b81526004810185905284907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015613d97573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613dbb9190615626565b6001600160a01b03165f5160206158c95f395f51905f5260405160405180910390a350505050565b5f818311613df15782613df3565b815b90505f81613e0087611045565b613e0a91906156ab565b9050805f03613e1b57505050505050565b6040516331a9108f60e11b8152600481018790525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636352211e90602401602060405180830381865afa158015613e80573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ea49190615626565b90505f613eb082614cc9565b90505f612710613ec083866156ab565b613eca91906156c2565b613ed490856156e1565b9050807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401613f239190615175565b602060405180830381865afa158015613f3e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f6291906157d3565b1015613f7357505050505050505050565b613f7f85610e10615849565b8854613f9b9190600160501b90046001600160401b0316615872565b88546001600160401b0391909116600160501b02600160501b600160901b03199091161780895585908990601290613fe290849063ffffffff600160901b90910416615812565b92506101000a81548163ffffffff021916908363ffffffff16021790555061403e83857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166145f29092919063ffffffff16565b60408051858152602081018790528a916001600160a01b038616917f9cdcf2f7714cca3508c7f0110b04a90a80a3a8dd0e35de99689db74d28c5383e910160405180910390a383886005015f82825461409791906156e1565b909155506140a790508385614dcf565b875463ffffffff600160b01b82048116600160901b909204161061411557875461ffff1916610100178855600f54156140f2576001600f5f8282546140ec9190615732565b90915550505b60405189906001600160a01b038516905f5160206158c95f395f51905f52905f90a35b505050505050505050565b604051632bbacfe360e11b8152600481018290525f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906357759fc690602401602060405180830381865afa158015614187573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141ab919061582e565b60ff81165f9081526002602052604081205491925090612710906141d390620186a0906156ab565b6141dd91906156c2565b5f858152600360208190526040822001549192508190036142385760095460ff9081165f908152600a6020908152604080832054938716835260029091529020546127109161422b916156ab565b61423591906156c2565b90505b8181116142455780614247565b815b95945050505050565b5f838152600360205260408120805460ff16801561427557508054610100900460ff16155b614282575f9150506145eb565b80545f90610e10906142a490600160501b90046001600160401b031642615732565b6142ae91906156c2565b9050805f036142c1575f925050506145eb565b81545f906142e59063ffffffff600160901b8204811691600160b01b900416615791565b63ffffffff1690505f8183116142fb57826142fd565b815b9050805f03614312575f9450505050506145eb565b5f8161431d8a611045565b61432791906156ab565b9050805f0361433d575f955050505050506145eb565b5f61434789614cc9565b90505f61271061435783856156ab565b61436191906156c2565b61436b90846156e1565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016143ba9190615175565b602060405180830381865afa1580156143d5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143f991906157d3565b90508181101561443c57891561442c576040516371dfef7b60e11b81526004810183905260248101829052604401610c48565b5f985050505050505050506145eb565b61444885610e10615849565b88546144649190600160501b90046001600160401b0316615872565b88546001600160401b0391909116600160501b02600160501b600160901b031990911617808955859089906012906144ab90849063ffffffff600160901b90910416615812565b92506101000a81548163ffffffff021916908363ffffffff1602179055506145078b857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166145f29092919063ffffffff16565b60408051858152602081018790528d916001600160a01b038e16917f9cdcf2f7714cca3508c7f0110b04a90a80a3a8dd0e35de99689db74d28c5383e910160405180910390a383886005015f82825461456091906156e1565b9091555061457090508b85614dcf565b875463ffffffff600160b01b82048116600160901b90920416106145de57875461ffff1916610100178855600f54156145bb576001600f5f8282546145b59190615732565b90915550505b6040518c906001600160a01b038d16905f5160206158c95f395f51905f52905f90a35b6001985050505050505050505b9392505050565b61464a83846001600160a01b031663a9059cbb8585604051602401614618929190615429565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614fe1565b505050565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231846040518263ffffffff1660e01b815260040161469d9190615175565b602060405180830381865afa1580156146b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146dc91906157d3565b9050805f036146ed575f9392505050565b5f805b8281101561491d57604051632f745c5960e01b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632f745c59906147489089908690600401615429565b602060405180830381865afa158015614763573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061478791906157d3565b5f8181526003602081815260409283902083516101a081018552815460ff8082161580158085526101008085049093161515968501969096526001600160401b0362010000808504821699860199909952600160501b84048116606086015263ffffffff600160901b850481166080870152600160b01b90940490931660a0850152600185015460c0850152600285015461ffff80821660e087015298810490981691840191909152600160201b9096041661012082015292810154610140840152600481015461016084015260050154610180830152929350919061486f57508060200151155b1561491357604051632bbacfe360e11b8152600481018390525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906357759fc690602401602060405180830381865afa1580156148d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148fd919061582e565b90508460ff168160ff161115614911578094505b505b50506001016146f0565b509392505050565b5f546001600160a01b0316331461211f573360405163118cdaa760e01b8152600401610c489190615175565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b613c4184856001600160a01b03166323b872dd86868660405160240161461893929190615745565b6001600160a01b038281165f9081526004602052604090205416156149eb575050565b806001600160a01b0381161580614a135750826001600160a01b0316816001600160a01b0316145b15614a3b57507f00000000000000000000000000000000000000000000000000000000000000005b805f5b60148160ff16108015614a5957506001600160a01b03821615155b15614ada57846001600160a01b0316826001600160a01b031603614aab5760405162461bcd60e51b8152602060048201526009602482015268526566206379636c6560b81b6044820152606401610c48565b6001600160a01b039182165f908152600460205260409020549091169080614ad281615891565b915050614a3e565b506001600160a01b038481165f90815260046020526040902080546001600160a01b031916918416918217905515614be5576001600160a01b038281165f908152600560209081526040822080546001810182559083529082200180546001600160a01b0319169287169290921790915582905b600a8160ff16108015614b6957506001600160a01b03821615155b15614be2576001600160a01b0382165f908152600460205260409020600190600c0160ff8316600a8110614b9f57614b9f615612565b015f828254614bae91906156e1565b90915550506001600160a01b039182165f908152600460205260409020549091169080614bda81615891565b915050614b4e565b50505b6001600d5f828254614bf791906156e1565b909155505050505050565b60095460ff9081165f908152600c602090815260408083209385168352929052908120805460019290614c369084906156e1565b90915550614c449050615044565b8015614c575750600954600360ff909116105b15610fc25760098054600191905f90614c7490849060ff166158af565b82546101009290920a60ff818102199093169183160217909155600954604051911681527fd0e47a271d69b0e6e3f9bd81c7c695bfbcb309e6ee66a23e6ad80a8f90190574915060200160405180910390a150565b6001600160a01b038082165f9081526004602052604081205490911681805b600a8260ff16108015614d0357506001600160a01b03831615155b8015614d12575060198160ff16105b15614dc757614d2b83614d268460016158af565b6150cb565b15614da2575f60ff831615614d7d578260ff16600114614d75578260ff16600214614d6d578260ff16600314614d62576064614d65565b60c85b60ff16614d81565b61012c614d81565b6101f4614d81565b6103e85b61ffff169050614d9181866156e1565b945082614d9d81615891565b935050505b6001600160a01b039283165f9081526004602052604090205490921691600101614ce8565b505050919050565b6001600160a01b038083165f9081526004602052604081205490911690805b600a8260ff16108015614e0957506001600160a01b03831615155b8015614e18575060198160ff16105b15614fda57614e2c83614d268460016158af565b15614fb5575f60ff831615614e7e578260ff16600114614e76578260ff16600214614e6e578260ff16600314614e63576064614e66565b60c85b60ff16614e82565b61012c614e82565b6101f4614e82565b6103e85b61ffff1690505f612710614e9683886156ab565b614ea091906156c2565b90508015614fa557614edc6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686836145f2565b6001600160a01b0385165f9081526004602052604081206001018054839290614f069084906156e1565b90915550506001600160a01b0385165f908152600460205260409020819060020160ff8616600a8110614f3b57614f3b615612565b015f828254614f4a91906156e1565b90915550506001600160a01b038086169088167f9e049ed607614d479b674dbbbd87ad8695ec902d2f960b95e7a01c5c86b2d165614f898760016158af565b6040805160ff9092168252602082018690520160405180910390a35b83614faf81615891565b94505050505b6001600160a01b039283165f9081526004602052604090205490921691600101614dee565b5050505050565b5f5f60205f8451602086015f885af180615000576040513d5f823e3d81fd5b50505f513d91508115615017578060011415615024565b6001600160a01b0384163b155b15613c415783604051635274afe760e01b8152600401610c489190615175565b5f805b600760ff8216116150c35760095460ff9081165f908152600b602090815260408083209385168352929052205480158015906150a3575060095460ff9081165f908152600c602090815260408083209386168352929052205481115b156150b0575f9250505090565b50806150bb81615891565b915050615047565b506001905090565b5f6145eb8383611e7f565b604051806101400160405280600a906020820280368337509192915050565b602080825282518282018190525f918401906040840190835b8181101561512c57835183526020938401939092019160010161510e565b509095945050505050565b6001600160a01b0381168114610fc2575f5ffd5b5f5f6040838503121561515c575f5ffd5b823561516781615137565b946020939093013593505050565b6001600160a01b0391909116815260200190565b60ff81168114610fc2575f5ffd5b5f5f604083850312156151a8575f5ffd5b8235915060208301356151ba81615189565b809150509250929050565b5f602082840312156151d5575f5ffd5b5035919050565b5f5f5f5f5f608086880312156151f0575f5ffd5b85356151fb81615137565b9450602086013561520b81615137565b93506040860135925060608601356001600160401b0381111561522c575f5ffd5b8601601f8101881361523c575f5ffd5b80356001600160401b03811115615251575f5ffd5b886020828401011115615262575f5ffd5b959894975092955050506020019190565b8d151581528c151560208201526001600160401b038c811660408301528b16606082015263ffffffff8a1660808201526101a0810163ffffffff8a1660a08301528860c08301526152ca60e083018961ffff169052565b61ffff969096166101008201526001600160401b03949094166101208501526101408401929092526101608301526101809091015298975050505050505050565b5f6020828403121561531b575f5ffd5b81356145eb81615137565b610140810181835f5b600a81101561534e57815183526020928301929091019060010161532f565b50505092915050565b5f5f60408385031215615368575f5ffd5b823561537381615137565b915060208301356151ba81615189565b5f60208284031215615393575f5ffd5b81356145eb81615189565b5f5f602083850312156153af575f5ffd5b82356001600160401b038111156153c4575f5ffd5b8301601f810185136153d4575f5ffd5b80356001600160401b038111156153e9575f5ffd5b8560208260051b84010111156153fd575f5ffd5b6020919091019590945092505050565b5f5f6040838503121561541e575f5ffd5b823561537381615189565b6001600160a01b03929092168252602082015260400190565b5f5f60408385031215615453575f5ffd5b823561545e81615189565b915060208301356151ba81615137565b5f5f6040838503121561547f575f5ffd5b82359150602083013561ffff811681146151ba575f5ffd5b5f5f604083850312156154a8575f5ffd5b50508035926020909101359150565b815160ff1681526101c0810160208301516154d6602084018215159052565b5060408301516154ea604084018215159052565b50606083015161550560608401826001600160401b03169052565b50608083015161552060808401826001600160401b03169052565b5060a083015161553860a084018263ffffffff169052565b5060c083015161555060c084018263ffffffff169052565b5060e083015160e083015261010083015161010083015261012083015161557e61012084018261ffff169052565b5061014083015161559661014084018261ffff169052565b506101608301516155b36101608401826001600160401b03169052565b506101808301516101808301526101a08301516101a083015292915050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f6001820161560b5761560b6155e6565b5060010190565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215615636575f5ffd5b81516145eb81615137565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b6020808252600c908201526b24b73b30b634b2103a34b2b960a11b604082015260600190565b602080825260079082015266115e1c1a5c995960ca1b604082015260600190565b8082028115828204841417611f8457611f846155e6565b5f826156dc57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115611f8457611f846155e6565b61ffff8181168382160190811115611f8457611f846155e6565b6020808252600a90820152694e6f742061637469766560b01b604082015260600190565b81810381811115611f8457611f846155e6565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252600e908201526d105b1c9958591e481b1a5cdd195960921b604082015260600190565b63ffffffff8281168282160390811115611f8457611f846155e6565b6020808252600c908201526b4e6f2072656d61696e696e6760a01b604082015260600190565b5f602082840312156157e3575f5ffd5b5051919050565b6020808252600e908201526d416c72656164792061637469766560901b604082015260600190565b63ffffffff8181168382160190811115611f8457611f846155e6565b5f6020828403121561583e575f5ffd5b81516145eb81615189565b6001600160401b03818116838216029081169081811461586b5761586b6155e6565b5092915050565b6001600160401b038181168382160190811115611f8457611f846155e6565b5f60ff821660ff81036158a6576158a66155e6565b60010192915050565b60ff8181168382160190811115611f8457611f846155e656fe751a0eb66c3cc9aa48957d09bd3cc81db888f5bcac6689def5fb9e18ec3cf201a26469706673582212208529b0e66abec362fa6191ae5b80d8c3924ca631cc12f173ee8707e28b63f72f64736f6c634300081e00330000000000000000000000002fd8158fb9b5a78fa36164c52499e81723d1133a00000000000000000000000055d398326f99059ff775485246999027b3197955000000000000000000000000ff26cfe3fc1855ed221a5d3da77f5e92d36ca859000000000000000000000000c625954ba808568af5d3e2150b24218ed60732a60000000000000000000000000fedcba6c29688229ac518213e8ab84dcbed2dab