14.2k txs
37.6k calls
constructor
constructor((address payableERC20, address paymentERC20, address fundAccount, address swapContract, address aiTradeHubContractV2, address aiTradeHubContractV3, uint256 trading_fee, uint256 withdrawal_fee, uint256 contribution_fee, uint256 monthly_fee, uint256 amount_each_target, uint256 payment_token_exchange_rate) cfg)
functions
allowance
viewfunction allowance(address tokenAddress, address owner, address spender) view returns (uint256)
checkAutomation
viewfunction checkAutomation(uint256 startIndex, uint256 maxResult) view returns (uint256[], uint256)
getConfig
viewfunction getConfig() view returns (address owner, address paymentERC20, address payableERC20, uint256 amount_each_target, uint256 contribution_fee, uint256 trading_fee, uint256 withdrawal_fee, uint256 monthly_fee)
getStats
viewfunction getStats(address wallet) view returns (uint256 num_contributors, uint256 total_pending_amount, uint256 total_locked_amount, uint256 last_distribute_profit, uint256 user_locked_amount, uint256 user_pending_amount, uint256 user_paid_amount, uint256 user_balance, uint256 user_claimable_profit, uint256 user_current_service_fee, uint8 user_payout_type)
getV2Stats
viewfunction getV2Stats(address wallet) view returns (uint256 num_contributors, uint256 total_pending_amount, uint256 total_locked_amount, uint256 last_distribute_profit, uint256 user_locked_amount, uint256 user_pending_amount, uint256 user_debt_amount, uint256 user_paid_amount, uint256 user_balance, uint256 user_claimable_profit, uint256 user_current_service_fee, bool user_is_re_compound)
getV3Stats
viewfunction getV3Stats(address wallet) view returns (uint256 num_contributors, uint256 total_pending_amount, uint256 total_locked_amount, uint256 last_distribute_profit, uint256 user_locked_amount, uint256 user_pending_amount, uint256 user_paid_amount, uint256 user_balance, uint256 user_claimable_profit, uint256 user_current_service_fee, uint8 user_payout_type)
isMigrateAllowed
viewfunction isMigrateAllowed(address wallet) view returns (bool)
approve
nonpayablefunction approve(address[] tokenAddresses, address spender, uint256 amount)
chargeMonthlyFee
nonpayablefunction chargeMonthlyFee(address wallet)
claimServiceResults
nonpayablefunction claimServiceResults()
distributeServiceResults
nonpayablefunction distributeServiceResults(uint256 amount)
migrate
nonpayablefunction migrate(address contributor)
migrateManual
nonpayablefunction migrateManual()
migrateWallet
nonpayablefunction migrateWallet(address newWallet)
performAutomation
nonpayablefunction performAutomation(uint256[] indexesToProcess)
purchaseServiceCredits
nonpayablefunction purchaseServiceCredits(uint256 amount)
recompound
nonpayablefunction recompound()
setAddressFeeExempt
nonpayablefunction setAddressFeeExempt(address wallet, bool exempt)
setAutomationForwarder
nonpayablefunction setAutomationForwarder(address forwarder)
setPayoutPreference
nonpayablefunction setPayoutPreference(uint8 payoutPreference)
setSwapContract
nonpayablefunction setSwapContract(address swapContract)
transfer
nonpayablefunction transfer(address tokenAddress, address to, uint256 amount)
transferFrom
nonpayablefunction transferFrom(address tokenAddress, address from, address to, uint256 amount)
transferFunds
nonpayablefunction transferFunds(address to, uint256 amount)
withdrawFunds
nonpayablefunction withdrawFunds(uint256 amount)
events
ClaimServiceResults
event ClaimServiceResults(address indexed contributor, address paymentToken, uint256 lockedAmt, uint256 amount, uint256 withdrawalFee, uint256 tradingFee)
Contribute
event Contribute(address indexed contributor, uint256 amount, uint256 fee, uint256 additionFee, uint256 lockedAmt, uint8 contributionType)
Indexed
event Indexed(address wallet, uint256 amountLocked, uint256 amountPending)
Migrated
event Migrated(address indexed wallet, uint256 balance, uint256 lockedAmt, uint256 pendingAmt, uint256 paidAmt)
MigrateWallet
event MigrateWallet(address indexed oldWallet, address indexed newWallet, uint256 balance, uint256 lockedAmt, uint256 pendingAmt, uint256 paidAmt, uint256 fee)
MonthlyFeeCharged
event MonthlyFeeCharged(address indexed contributor, uint256 lockedAmt, address token, uint256 fee, uint256 debtAdded)
NextTarget
event NextTarget()
ServiceResultsDistributed
event ServiceResultsDistributed(uint256 amount)
TransferFunds
event TransferFunds(address indexed from, address indexed to, uint256 amount, uint256 fee)
WithdrawFunds
event WithdrawFunds(address indexed contributor, address to, uint256 amount, uint256 fee, address token)
errors
AITradeHubAddressInvalidError
error AITradeHubAddressInvalidError()
AITradeHubAlreadyMigratedError
error AITradeHubAlreadyMigratedError()
AITradeHubAmountInvalidError
error AITradeHubAmountInvalidError()
AITradeHubApprovalInvalidAddressError
error AITradeHubApprovalInvalidAddressError()
AITradeHubDataInvalidError
error AITradeHubDataInvalidError()
AITradeHubInsufficientAllowanceError
error AITradeHubInsufficientAllowanceError(address tokenAddress, address spender, uint256 allowance, uint256 needed)
AITradeHubInsufficientFundsError
error AITradeHubInsufficientFundsError()
AITradeHubNoProfitToClaimError
error AITradeHubNoProfitToClaimError()
AITradeHubNotVerifyError
error AITradeHubNotVerifyError()
AITradeHubPermissionDeniedError
error AITradeHubPermissionDeniedError()
AITradeHubPoolNotReadyError
error AITradeHubPoolNotReadyError()
AITradeHubTokenAddressInvalidError
error AITradeHubTokenAddressInvalidError()
AITradeHubTransferFundAccountNotActiveError
error AITradeHubTransferFundAccountNotActiveError()
AITradeHubTransferLockedError
error AITradeHubTransferLockedError()
AITradeHubWalletMigrateExceedNumberOfTimesError
error AITradeHubWalletMigrateExceedNumberOfTimesError(uint256 nextTime)
AITradeHubWalletMigrateNotEmptyError
error AITradeHubWalletMigrateNotEmptyError()
creation bytecode
0x60806040523480156200001157600080fd5b50604051620036053803806200360583398101604081905262000034916200015b565b60008054336001600160a01b0319918216811790925560028054821690921790915581516006805483166001600160a01b03928316179055602083015160078054841691831691909117905560408301516001805484169183169190911790556060830151600380548416918316919091179055608083015160048054841691831691909117905560a083015160058054909316911617905560c081015160085560e0810151600955610100810151600a55610120810151600b55610140810151600c556101600151600d556200022e565b60405161018081016001600160401b03811182821017156200013857634e487b7160e01b600052604160045260246000fd5b60405290565b80516001600160a01b03811681146200015657600080fd5b919050565b600061018082840312156200016f57600080fd5b6200017962000106565b62000184836200013e565b815262000194602084016200013e565b6020820152620001a7604084016200013e565b6040820152620001ba606084016200013e565b6060820152620001cd608084016200013e565b6080820152620001e060a084016200013e565b60a082015260c0838101519082015260e08084015190820152610100808401519082015261012080840151908201526101408084015190820152610160928301519281019290925250919050565b6133c7806200023e6000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c8063990dc9db116100de578063cf83244311610097578063e1eaf05a11610071578063e1eaf05a146103e3578063e20ed8bf146103f6578063f0ae8c3714610409578063f653ff111461041c57600080fd5b8063cf832443146103aa578063d259ab42146103bd578063d40d17bc146103d057600080fd5b8063990dc9db146102bd578063beabacc8146102d0578063bfde2a66146102e3578063c23f85d614610306578063c3f909d414610330578063ce5494bb1461039757600080fd5b80634ece5dc6116101305780634ece5dc6146101ed5780635bd3b444146102005780635d9b50961461021357806367ab2de01461021b578063719d7ea414610289578063927da1051461029c57600080fd5b8063155dd5ee1461017857806315dacbea1461018d578063228d8907146101a0578063394c8964146101ca5780633df954af146101dd5780634aab810c146101e5575b600080fd5b61018b610186366004612d86565b61042f565b005b61018b61019b366004612dbb565b610462565b6101b36101ae366004612e06565b6104a8565b6040516101c1929190612e28565b60405180910390f35b61018b6101d8366004612eb5565b6106da565b61018b610835565b61018b610866565b61018b6101fb366004612d86565b610895565b61018b61020e366004612ef7565b6108c9565b61018b61093e565b61022e610229366004612f53565b61096d565b604080519c8d5260208d019b909b52998b019890985260608a0196909652608089019490945260a088019290925260c087015260e08601526101008501526101208401526101408301521515610160820152610180016101c1565b61018b610297366004612f53565b610a1e565b6102af6102aa366004612f6e565b610a52565b6040519081526020016101c1565b61018b6102cb366004612fb1565b610ab0565b61018b6102de366004612fdb565b610ae4565b6102f66102f1366004612f53565b610b1b565b60405190151581526020016101c1565b610319610314366004612f53565b610b2c565b6040516101c19b9a9998979695949392919061304b565b600054600754600654600c54600a54600854600954600b54604080516001600160a01b03998a168152978916602089015297909516968601969096526060850192909252608084015260a083015260c082019290925260e0810191909152610100016101c1565b61018b6103a5366004612f53565b610c5d565b61018b6103b83660046130bd565b610c91565b61018b6103cb366004612f53565b610ce7565b61018b6103de366004612f53565b610d34565b61018b6103f1366004612f53565b610d81565b61018b610404366004612d86565b610db0565b610319610417366004612f53565b610de5565b61018b61042a366004613101565b610e8f565b61043833610e99565b61045557604051632d04c8c360e11b815260040160405180910390fd5b61045f3382610f08565b50565b61046b33610e99565b61048857604051632d04c8c360e11b815260040160405180910390fd5b3361049585858385610f41565b6104a185858585610fcf565b5050505050565b600f54606090600090818467ffffffffffffffff8111156104cb576104cb61311e565b6040519080825280602002602001820160405280156104f4578160200160208202803683370190505b509050811580610502575084155b8061050d5750818610155b1561051b57925090506106d3565b6000865b8381101561062e576000600f600001828154811061053f5761053f613134565b60009182526020808320909101546001600160a01b031680835260159091526040822090925090600682015460ff16600281111561057f5761057f613017565b0361058b57505061061c565b600061059683611251565b905060006105a3826112cb565b905060006105b183836112eb565b84549091506000906105c490839061130e565b9050806000036105d95750505050505061061c565b8689896105e581613160565b9a50815181106105f7576105f7613134565b6020026020010181815250508c88036106155750505050505061062e565b5050505050505b8061062681613160565b91505061051f565b5060008167ffffffffffffffff81111561064a5761064a61311e565b604051908082528060200260200182016040528015610673578160200160208202803683370190505b50905060005b828110156106ca5783818151811061069357610693613134565b60200260200101518282815181106106ad576106ad613134565b6020908102919091010152806106c281613160565b915050610679565b50945091925050505b9250929050565b6002546001600160a01b031633146107055760405163e682221f60e01b815260040160405180910390fd5b600f5481811580610714575080155b1561071f5750505050565b60005b8181101561082657600085858381811061073e5761073e613134565b9050602002013590508381106107545750610814565b6000600f600001828154811061076c5761076c613134565b60009182526020808320909101546001600160a01b031680835260159091526040822090925090600682015460ff1660028111156107ac576107ac613017565b036107b957505050610814565b6001600682015460ff1660028111156107d4576107d4613017565b036107e7576107e282611331565b610810565b6002600682015460ff16600281111561080257610802613017565b036108105761081082611427565b5050505b8061081e81613160565b915050610722565b5061082f611564565b50505050565b61083e33610e99565b61085b57604051632d04c8c360e11b815260040160405180910390fd5b61086433611331565b565b61086f33610e99565b61088c57604051632d04c8c360e11b815260040160405180910390fd5b61086433611427565b6000546001600160a01b031633146108c05760405163e682221f60e01b815260040160405180910390fd5b61045f81611714565b6108d233610e99565b6108ef57604051632d04c8c360e11b815260040160405180910390fd5b60005b838110156104a15761092c85858381811061090f5761090f613134565b90506020020160208101906109249190612f53565b3385856117d6565b8061093681613160565b9150506108f2565b61094733610e99565b61096457604051632d04c8c360e11b815260040160405180910390fd5b61086433611846565b6004805460405163611fc2eb60e11b81526001600160a01b03848116938201939093526000928392839283928392839283928392839283928392839291169063c23f85d69060240161018060405180830381865afa1580156109d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f79190613179565b9b509b509b509b509b509b509b509b509b509b509b509b5091939597999b5091939597999b565b6000546001600160a01b03163314610a495760405163e682221f60e01b815260040160405180910390fd5b61045f81611af5565b6000610a5d33610e99565b610a7a57604051632d04c8c360e11b815260040160405180910390fd5b506001600160a01b0392831660009081526017602090815260408083209486168352938152838220929094168152925290205490565b610ab933610e99565b610ad657604051632d04c8c360e11b815260040160405180910390fd5b610ae08282611cb0565b5050565b610aed33610e99565b610b0a57604051632d04c8c360e11b815260040160405180910390fd5b610b1683338484610fcf565b505050565b6000610b2682611df8565b92915050565b600f546012546013546014546001600160a01b038516600090815260156020908152604080832081516101208101835281548152600182015493810193909352600280820154928401929092526003810154606084015260048101546080840152600581015460a084015260068101549596958493849384938493849384938493919260c084019160ff90911690811115610bc957610bc9613017565b6002811115610bda57610bda613017565b81526006820154610100900460ff161515602080830191909152600790920154604091820152908201519082015160608301518351929b50909950975095509050610c248d611251565b9350610c39610c32856112cb565b85906112eb565b9350610c448d611ef2565b92508060c0015191505091939597999b90929496989a50565b6000546001600160a01b03163314610c885760405163e682221f60e01b815260040160405180910390fd5b61045f81611846565b6000546001600160a01b03163314610cbc5760405163e682221f60e01b815260040160405180910390fd5b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610d125760405163e682221f60e01b815260040160405180910390fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610d5f5760405163e682221f60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b610d8a33610e99565b610da757604051632d04c8c360e11b815260040160405180910390fd5b61045f81611fff565b610db933610e99565b610dd657604051632d04c8c360e11b815260040160405180910390fd5b61045f33826000806001612242565b60055460405163611fc2eb60e11b81526001600160a01b038381166004830152600092839283928392839283928392839283928392839291169063c23f85d69060240161016060405180830381865afa158015610e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6a919061320c565b9a509a509a509a509a509a509a509a509a509a509a5091939597999b90929496989a50565b61045f33826123be565b6003546040516396bfc22960e01b81526001600160a01b03838116600483015260009216906396bfc22990602401602060405180830381865afa158015610ee4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b269190613296565b80600003610f2957604051634caaf3df60e01b815260040160405180910390fd5b600654610ae0906001600160a01b0316838084610fcf565b6001600160a01b038085166000908152601760209081526040808320878516845282528083209386168352929052205460001981146104a15781811015610fc157604051638d129a4560e01b81526001600160a01b0380871660048301528416602482015260448101829052606481018390526084015b60405180910390fd5b6104a18585858585036117d6565b6001600160a01b0383161580610fec57506001600160a01b038216155b1561100a57604051638a65f90160e01b815260040160405180910390fd5b6006546001600160a01b0385811691161480159061103657506007546001600160a01b03858116911614155b156110545760405163c7d51dd160e01b815260040160405180910390fd5b6001600160a01b0380841660009081526015602052604090206006549091908116908616036110d257600061109a8260010154836002015461130e90919063ffffffff16565b9050828110156110bd5760405163376500a960e01b815260040160405180910390fd5b6110c7858461244a565b506110d0611564565b505b6007546001600160a01b039081169086160361112e576110f184612469565b5080548211156111145760405163376500a960e01b815260040160405180910390fd5b8181600001600082825461112891906132b3565b90915550505b6001600160a01b0383166000908152600e602052604081205486919060ff166111665761115a846124e7565b90506111668282612507565b6001600160a01b03821663a9059cbb8661118084886132b3565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156111cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ef9190613296565b50604080516001600160a01b038781168252602082018790529181018390528882166060820152908716907f8b267306e225b16f74e5e3314efa6828eb10e0be29b121a41cf61a2b88bea95a906080015b60405180910390a250505050505050565b6001600160a01b03811660009081526015602052604081206011546001820154839161128e916402540be400916112889190612521565b90612556565b905060006112b66402540be4006112888560040154866001015461252190919063ffffffff16565b90506112c282826112eb565b95945050505050565b6000610b266103e86112886000600801548561252190919063ffffffff16565b6000828211156112fa57600080fd5b600061130683856132b3565b949350505050565b60008061131b83856132c6565b90508381101561132a57600080fd5b9392505050565b6001600160a01b03818116600090815260156020526040902060025490911633148061135f5761135f612570565b600061136a84612469565b905061137584611af5565b8254600081900361139e57826104a1576040516335f8a8ab60e11b815260040160405180910390fd5b600d546000906113af908390612521565b6007549091506113c8906001600160a01b031683612507565b6006546113df906001600160a01b03163083612697565b60038501546113ee908361130e565b6003860155600d54611413908790839060019061140c908890612521565b8815612242565b505060008355505060115460049091015550565b6001600160a01b03818116600090815260156020526040902060025490911633148061145557611455612570565b600061146084612469565b905061146b84611af5565b8254600081900361149457826104a1576040516335f8a8ab60e11b815260040160405180910390fd5b600061149f826124e7565b905060006114ad83836112eb565b905080156114f6576007546114cc906001600160a01b031688836126b2565b60038601546114db908261130e565b60038701556007546114f6906001600160a01b031683612507565b6000865560115460048701556007546001870154604080516001600160a01b039384168152602081019290925281018390526060810184905260808101869052908816907f47cf617568507abde429aeddaa35c4ac4bf8ce81f14aab0c7b1465f9456769279060a001611240565b600c54601254600061157683836132ef565b9050801561163857600f545b6000811180156115925750600082115b15611636576000600f6115a66001846132b3565b815481106115b6576115b6613134565b60009182526020808320909101546001600160a01b0316808352601590915260408220600181015491935091906115ed908661272e565b9050806000036115ff57505050611624565b6116098382612744565b5061161483826127ba565b61161e81866132b3565b94505050505b8061162e81613303565b915050611582565b505b6013548311610b1657601654600090815b818110801561165757508583105b156116fd5760006016828154811061167157611671613134565b60009182526020808320600292830201546001600160a01b0316808452601590915260408320918201549093509091906116b4906116af888c6132b3565b61272e565b9050806000036116c6575050506116eb565b6116d08382612933565b506116db8382612aad565b6116e581876132c6565b95505050505b806116f581613160565b915050611649565b5084820361170d5761170d612570565b5050611638565b8060000361173557604051634caaf3df60e01b815260040160405180910390fd5b6012546000036117585760405163561fcaa560e01b815260040160405180910390fd5b60125460009061177190611288846402540be400612521565b601154909150611781908261130e565b6011554260145560075461179f906001600160a01b03163084612697565b6040518281527f913b9c8079c863b971af48acfdba4daf1f76d3b7cbad90231fe9a8597c2c44bb9060200160405180910390a15050565b6001600160a01b03831615806117f357506001600160a01b038216155b15611811576040516312045ddb60e01b815260040160405180910390fd5b6001600160a01b0393841660009081526017602090815260408083209587168352948152848220939095168152919093522055565b6001600160a01b03811660009081526015602052604090206006810154610100900460ff161561188957604051634e1a4be360e01b815260040160405180910390fd5b600554604051635fef153360e11b81526001600160a01b038481166004830152600092839283928392839283928392169063bfde2a6690602401602060405180830381865afa1580156118e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119049190613296565b6119565761191189610de5565b90919293949596979899509091929394959697985090919293949596975090919293949596509050809750819850829950839a50849b50859c505050505050506119b4565b61195f8961096d565b909192939495969798999a509091929394959697989950909192939495969798509091929394959697509091929394509050809650819850829950839a50849b50859c5050505050505080156119b457600191505b60006119c0888861130e565b90506119d28a82600260006001612242565b60006119de868661130e565b9050808a60000160008282546119f491906132c6565b92505081905550868a6003016000828254611a0f91906132c6565b909155505060068a01805461ff0019166101001790556001846002811115611a3957611a39613017565b03611a595760068a0180546001919060ff191682805b0217905550611a95565b6002846002811115611a6d57611a6d613017565b03611a885760068a0180546002919060ff1916600183611a4f565b60068a01805460ff191690555b60408051828152602081018b9052908101899052606081018890526001600160a01b038c16907fc8102fa5c0a66c20caa3ebb502aecfcc6e0ea963896d5a14c1bd8c10c456c5539060800160405180910390a25050505050505050505050565b6001600160a01b038116600090815260156020526040812090611b1783611ef2565b90508160050154600003611b2c574260058301555b80600003611b3957505050565b80611b448482612933565b90506000611b5283836112eb565b600654909150611b6b906001600160a01b031682612507565b6001840154600654604080519283526001600160a01b0391821660208401528201839052606082018490528616907f7aea1f971c87ffe5a9f4607a1255b6b1bd057acbfad49e32a23388b58e4f4f6b9060800160405180910390a28115611ca0578354600d54600090611bdf908390612521565b90508015611c9d57611bf1848261272e565b9250611bfd84846112eb565b9350611c0981846112eb565b600d54909150611c1a908290612556565b808755611c289083906112eb565b600754909350611c41906001600160a01b031684612507565b6001860154600754604080519283526001600160a01b0391821660208401528201859052606082018690528816907f7aea1f971c87ffe5a9f4607a1255b6b1bd057acbfad49e32a23388b58e4f4f6b9060800160405180910390a25b50505b4284600501819055505050505050565b336001600160a01b0383161580611cd85750806001600160a01b0316836001600160a01b0316145b15611cf657604051638a65f90160e01b815260040160405180910390fd5b611cff33610e99565b158015611d125750611d1083610e99565b155b15611d305760405163245576bd60e01b815260040160405180910390fd5b6001600160a01b038116600090815260156020526040812060028101546001820154919291611d5e9161130e565b9050831580611d6c57508084115b15611d8a57604051634caaf3df60e01b815260040160405180910390fd5b611d94838561244a565b50611d9f85856127ba565b611da7611564565b60408051858152600060208201526001600160a01b0380881692908616917f0efb2754289a5bd9215ae68acd4f4ae527ad5ae20f6de58c7448df1c7df37d8191015b60405180910390a35050505050565b6001600160a01b03811660009081526015602052604081206006810154610100900460ff1615611e2b5750600092915050565b60055460405163611fc2eb60e11b81526001600160a01b038581166004830152600092839283928392839291169063c23f85d69060240161016060405180830381865afa158015611e80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea4919061320c565b50509850985098509850985050505050600080861180611ec45750600085115b80611ecf5750600084115b80611eda5750600083115b80611ee55750600082115b9998505050505050505050565b6001600160a01b038116600090815260156020908152604080832081516101208101835281548152600182015493810193909352600280820154928401929092526003810154606084015260048101546080840152600581015460a0840152600681015484939260c084019160ff1690811115611f7157611f71613017565b6002811115611f8257611f82613017565b81526006820154610100900460ff161515602082015260079091015460409091015260a0810151909150426000829003611fc157506000949350505050565b6000611fcd83836132b3565b90506000611fde8560200151612af8565b90506000611ff362278d006112888486612521565b98975050505050505050565b336000818152601560205260408082206001600160a01b0385168084529190922090158061203e5750826001600160a01b0316846001600160a01b0316145b1561205c57604051638a65f90160e01b815260040160405180910390fd5b600081600101541180612073575060008160020154115b8061207e5750805415155b8061208d575060008160040154115b156120ab5760405163f8f3f0d160e01b815260040160405180910390fd5b62093a808260070154426120bf91906132b3565b10156120f35760078201546120d79062093a8061130e565b604051634f4cccf960e11b8152600401610fb891815260200190565b60008260010154836002015461210991906132c6565b9050612115848261244a565b5061212085826127ba565b61212985612b18565b612131611564565b82548255600380840154908301556005808401549083015560048084015490830155600680840154908301805460ff9092169160ff1916600183600281111561217c5761217c613017565b021790555060068381018054918401805461ff0019166101009384900460ff1615159093029290921790915542600784015560008085556003850181905560058501556011546004850155805460ff191690556121d884612ba5565b8154600183015460028401546003850154604080519485526020850193909352918301526060820152600060808201526001600160a01b0380871691908616907f64b77114a6fda7f6c8d44d5ff3fb7bf917be8198f1786d8ff3585eb9d40fa4ec9060a001611de9565b6000848185600281111561225857612258613017565b036122d2578560000361227e57604051634caaf3df60e01b815260040160405180910390fd5b61228786612ce2565b915061229386836112eb565b6001546006549192506122b5916001600160a01b03908116918a911685612d02565b6006546122cd906001600160a01b0316883084612d02565b61232e565b60018560028111156122e6576122e6613017565b0361232e5760026122f687612ce2565b612300919061331a565b915061230c86836112eb565b60015460065491925061232e916001600160a01b03908116918a911685612d02565b61233787612b18565b6001600160a01b038716600090815260156020526040902061235988836127ba565b876001600160a01b03167f5718d8d1ad1471435598a485613572496ea31f06a6b78f50f98fdd43ff84aa9783858885600101548b60405161239e95949392919061332e565b60405180910390a283156123b4576123b4611564565b5050505050505050565b8060028111156123d0576123d0613017565b6001600160a01b03831660009081526015602052604090206006015460ff16600281111561240057612400613017565b03612409575050565b6001600160a01b0382166000908152601560205260409020600601805482919060ff1916600183600281111561244157612441613017565b02179055505050565b6000806124578484612933565b9050801561132a576113068482612744565b6001600160a01b0381166000908152601560205260408120818061248c85611251565b905080156124d45761249d816112cb565b915060006124ab82846112eb565b84549091506124ba908261130e565b84556007546124d2906001600160a01b031684612507565b505b5060115460049092019190915592915050565b6000610b266103e86112886000600901548561252190919063ffffffff16565b600154610ae0906001600160a01b038481169116836126b2565b60008260000361253357506000610b26565b600061253f8385613364565b90508261254c858361331a565b1461132a57600080fd5b600080821161256457600080fd5b6000611306838561331a565b601654600081900361257f5750565b6000805b8281101561264c576000601682815481106125a0576125a0613134565b906000526020600020906002020160010154111561263a5781811461262c57601681815481106125d2576125d2613134565b9060005260206000209060020201601683815481106125f3576125f3613134565b60009182526020909120825460029092020180546001600160a01b0319166001600160a01b039092169190911781556001918201549101555b8161263681613160565b9250505b8061264481613160565b915050612583565b505b601654811015610ae05760168054806126695761266961337b565b60008281526020812060026000199093019283020180546001600160a01b031916815560010155905561264e565b600154610b16906001600160a01b0385811691168484612d02565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015612701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127259190613296565b610b1657600080fd5b600081831061273d578161132a565b5090919050565b6001600160a01b03821660009081526015602052604081206001810154829061276e90859061272e565b905080600003612782578392505050610b26565b61278b85612469565b50600182015461279b90826112eb565b60018301556012546127ad90826112eb565b6012556112c284826112eb565b6001600160a01b038216600090815260156020526040902060028101546127e1908361130e565b60028201556013546127f3908361130e565b6013556016541580159061284a5750601680546001600160a01b038516919061281e906001906132b3565b8154811061282e5761282e613134565b60009182526020909120600290910201546001600160a01b0316145b1561289d5760168054839190612862906001906132b3565b8154811061287257612872613134565b9060005260206000209060020201600101600082825461289291906132c6565b90915550610b169050565b50604080518082019091526001600160a01b039283168152602081019182526016805460018101825560009190915290517fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289600290920291820180546001600160a01b0319169190941617909255517fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b512428a90910155565b6001600160a01b03821660009081526015602052604081206002810154829061295d90859061272e565b905080600003612971578392505050610b26565b600282015461298090826112eb565b600283015560135461299290826112eb565b601355601654819060005b81811015612a97578215612a9757876001600160a01b0316601682815481106129c8576129c8613134565b60009182526020909120600290910201546001600160a01b031603612a85576000612a17601683815481106129ff576129ff613134565b9060005260206000209060020201600101548561272e565b9050612a508160168481548110612a3057612a30613134565b9060005260206000209060020201600101546112eb90919063ffffffff16565b60168381548110612a6357612a63613134565b6000918252602090912060016002909202010155612a8184826112eb565b9350505b80612a8f81613160565b91505061299d565b50612aa286846112eb565b979650505050505050565b612ab682612469565b506001600160a01b03821660009081526015602052604090206001810154612ade908361130e565b6001820155601254612af0908361130e565b601255505050565b6000610b266103e86112886000600b01548561252190919063ffffffff16565b6001600160a01b038116600090815260106020526040812054900361045f57600f54612b459060016132c6565b6001600160a01b038216600081815260106020526040812092909255600f805460018101825592527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290910180546001600160a01b031916909117905550565b6001600160a01b03811660009081526010602052604081205490819003612bca575050565b6000612bd76001836132b3565b600f54909150600090612bec906001906132b3565b9050808214612c8b576000600f6000018281548110612c0d57612c0d613134565b600091825260209091200154600f80546001600160a01b039092169250829185908110612c3c57612c3c613134565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055612c708360016132c6565b6001600160a01b039091166000908152601060205260409020555b600f805480612c9c57612c9c61337b565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0395909516815260109094525050604082209190915550565b6000610b266103e86112886000600a01548561252190919063ffffffff16565b6040516323b872dd60e01b81526001600160a01b0384811660048301528381166024830152604482018390528516906323b872dd906064016020604051808303816000875af1158015612d59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7d9190613296565b61082f57600080fd5b600060208284031215612d9857600080fd5b5035919050565b80356001600160a01b0381168114612db657600080fd5b919050565b60008060008060808587031215612dd157600080fd5b612dda85612d9f565b9350612de860208601612d9f565b9250612df660408601612d9f565b9396929550929360600135925050565b60008060408385031215612e1957600080fd5b50508035926020909101359150565b604080825283519082018190526000906020906060840190828701845b82811015612e6157815184529284019290840190600101612e45565b50505092019290925292915050565b60008083601f840112612e8257600080fd5b50813567ffffffffffffffff811115612e9a57600080fd5b6020830191508360208260051b85010111156106d357600080fd5b60008060208385031215612ec857600080fd5b823567ffffffffffffffff811115612edf57600080fd5b612eeb85828601612e70565b90969095509350505050565b60008060008060608587031215612f0d57600080fd5b843567ffffffffffffffff811115612f2457600080fd5b612f3087828801612e70565b9095509350612f43905060208601612d9f565b9396929550929360400135925050565b600060208284031215612f6557600080fd5b61132a82612d9f565b600080600060608486031215612f8357600080fd5b612f8c84612d9f565b9250612f9a60208501612d9f565b9150612fa860408501612d9f565b90509250925092565b60008060408385031215612fc457600080fd5b612fcd83612d9f565b946020939093013593505050565b600080600060608486031215612ff057600080fd5b612ff984612d9f565b925061300760208501612d9f565b9150604084013590509250925092565b634e487b7160e01b600052602160045260246000fd5b6003811061045f57634e487b7160e01b600052602160045260246000fd5b6000610160820190508c82528b60208301528a60408301528960608301528860808301528760a08301528660c08301528560e083015284610100830152836101208301526130988361302d565b826101408301529c9b505050505050505050505050565b801515811461045f57600080fd5b600080604083850312156130d057600080fd5b6130d983612d9f565b915060208301356130e9816130af565b809150509250929050565b6003811061045f57600080fd5b60006020828403121561311357600080fd5b813561132a816130f4565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016131725761317261314a565b5060010190565b6000806000806000806000806000806000806101808d8f03121561319c57600080fd5b8c519b5060208d01519a5060408d0151995060608d0151985060808d0151975060a08d0151965060c08d0151955060e08d015194506101008d015193506101208d015192506101408d015191506101608d01516131f8816130af565b809150509295989b509295989b509295989b565b60008060008060008060008060008060006101608c8e03121561322e57600080fd5b8b519a5060208c0151995060408c0151985060608c0151975060808c0151965060a08c0151955060c08c0151945060e08c015193506101008c015192506101208c015191506101408c0151613282816130f4565b809150509295989b509295989b9093969950565b6000602082840312156132a857600080fd5b815161132a816130af565b81810381811115610b2657610b2661314a565b80820180821115610b2657610b2661314a565b634e487b7160e01b600052601260045260246000fd5b6000826132fe576132fe6132d9565b500690565b6000816133125761331261314a565b506000190190565b600082613329576133296132d9565b500490565b600060a0820190508682528560208301528460408301528360608301526133548361302d565b8260808301529695505050505050565b8082028115828204841417610b2657610b2661314a565b634e487b7160e01b600052603160045260246000fdfea264697066735822122002d0e5c1ef162e2abbebdb46d6af8ae630266c419b875254e529fb02f9529f7964736f6c634300081300330000000000000000000000007379793595df041488f9bf917d1fab6c692b580c0000000000000000000000008ac76a51cc950d9822d68b83fe1ad97b32cd580d0000000000000000000000003e3899adb50acd77bb010262803bb240dcc512230000000000000000000000005e4ff9fadf96dd6e8a32a7b66d99faf0060d4c1000000000000000000000000084dd19de1830f2ea65c8fc4a6b64052a625a2ec9000000000000000000000000a2e70aa5e3f1638a2f95e4306a16e636841eb9c4000000000000000000000000000000000000000000000000000000000000012c00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000152d02c7e14af6800000000000000000000000000000000000000000000000000000000000000000000a