0 txs
136 calls
constructor
constructor()
functions
borrowTargetFactorNumerator
viewfunction borrowTargetFactorNumerator() view returns (uint256)
bVault
viewfunction bVault() view returns (address)
collateralFactorNumerator
viewfunction collateralFactorNumerator() view returns (uint256)
controller
viewfunction controller() view returns (address)
depositArbCheck
purefunction depositArbCheck() pure returns (bool)
feeDenominator
viewfunction feeDenominator() view returns (uint256)
fold
viewfunction fold() view returns (bool)
governance
viewfunction governance() view returns (address)
harvestMSIG
viewfunction harvestMSIG() view returns (address)
incentives
viewfunction incentives() view returns (address)
investedUnderlyingBalance
viewfunction investedUnderlyingBalance() view returns (uint256)
isRewardToken
viewfunction isRewardToken(address _token) view returns (bool)
mToken
viewfunction mToken() view returns (address)
nextImplementation
viewfunction nextImplementation() view returns (address)
nextImplementationDelay
viewfunction nextImplementationDelay() view returns (uint256)
nextImplementationTimestamp
viewfunction nextImplementationTimestamp() view returns (uint256)
pausedInvesting
viewfunction pausedInvesting() view returns (bool)
pendingFee
viewfunction pendingFee() view returns (uint256)
platformFeeNumerator
viewfunction platformFeeNumerator() view returns (uint256)
profitSharingNumerator
viewfunction profitSharingNumerator() view returns (uint256)
rewardPool
viewfunction rewardPool() view returns (address)
rewardToken
viewfunction rewardToken() view returns (address)
rewardTokens
viewfunction rewardTokens() view returns (address[])
rewardTokens
viewfunction rewardTokens(uint256) view returns (address)
sell
viewfunction sell() view returns (bool)
sellFloor
viewfunction sellFloor() view returns (uint256)
shouldUpgrade
viewfunction shouldUpgrade() view returns (bool, address)
storedBalance
viewfunction storedBalance() view returns (uint256)
strategist
viewfunction strategist() view returns (address)
strategistFeeNumerator
viewfunction strategistFeeNumerator() view returns (uint256)
totalFeeNumerator
viewfunction totalFeeNumerator() view returns (uint256)
underlying
viewfunction underlying() view returns (address)
universalLiquidator
viewfunction universalLiquidator() view returns (address)
unsalvagableTokens
viewfunction unsalvagableTokens(address token) view returns (bool)
vault
viewfunction vault() view returns (address)
weth
viewfunction weth() view returns (address)
_setCollateralFactorNumerator
nonpayablefunction _setCollateralFactorNumerator(uint256 _numerator)
addRewardToken
nonpayablefunction addRewardToken(address _token)
currentBalance
nonpayablefunction currentBalance() returns (uint256)
doHardWork
nonpayablefunction doHardWork()
emergencyExit
nonpayablefunction emergencyExit()
finalizeUpgrade
nonpayablefunction finalizeUpgrade()
initialize
nonpayablefunction initialize()
initialize
nonpayablefunction initialize(address _storage, address _underlying, address _vault, address _rewardPool, address _rewardToken, address _strategist)
initialize
nonpayablefunction initialize(address _storage)
initializeBaseStrategy
nonpayablefunction initializeBaseStrategy(address _storage, address _underlying, address _vault, address _mToken, address _comptroller, address _rewardToken, uint256 _borrowTargetFactorNumerator, uint256 _collateralFactorNumerator, bool _fold)
initializeStrategy
nonpayablefunction initializeStrategy(address _storage, address _vault)
receiveFlashLoan
nonpayablefunction receiveFlashLoan(address[], uint256[] amounts, uint256[] feeAmounts, bytes)
salvage
nonpayablefunction salvage(address recipient, address token, uint256 amount)
scheduleUpgrade
nonpayablefunction scheduleUpgrade(address impl)
setBorrowTargetFactorNumerator
nonpayablefunction setBorrowTargetFactorNumerator(uint256 _numerator)
setFold
nonpayablefunction setFold(bool _fold)
setIncentives
nonpayablefunction setIncentives(address _incentives)
setStorage
nonpayablefunction setStorage(address _store)
toggleMerklOperator
nonpayablefunction toggleMerklOperator(address merklClaim, address operator)
withdrawAllToVault
nonpayablefunction withdrawAllToVault()
withdrawToVault
nonpayablefunction withdrawToVault(uint256 amountUnderlying)
events
BorrowFactorNumeratorChanged
event BorrowFactorNumeratorChanged(uint256 oldNumerator, uint256 newNumerator)
CollateralFactorNumeratorChanged
event CollateralFactorNumeratorChanged(uint256 oldNumerator, uint256 newNumerator)
FoldToggled
event FoldToggled(bool fold)
PlatformFeeLogInReward
event PlatformFeeLogInReward(address indexed treasury, address indexed rewardToken, uint256 profitAmount, uint256 feeAmount, uint256 timestamp)
ProfitAndBuybackLog
event ProfitAndBuybackLog(address indexed rewardToken, uint256 profitAmount, uint256 feeAmount, uint256 timestamp)
ProfitAndBuybackLog
event ProfitAndBuybackLog(uint256 profitAmount, uint256 feeAmount, uint256 timestamp)
ProfitLogInReward
event ProfitLogInReward(address indexed rewardToken, uint256 profitAmount, uint256 feeAmount, uint256 timestamp)
ProfitLogInReward
event ProfitLogInReward(uint256 profitAmount, uint256 feeAmount, uint256 timestamp)
ProfitsNotCollected
event ProfitsNotCollected(address indexed rewardToken, bool sell, bool floor)
ProfitsNotCollected
event ProfitsNotCollected(bool sell, bool floor)
RewardTokenAdded
event RewardTokenAdded(address token)
StrategistFeeLogInReward
event StrategistFeeLogInReward(address indexed strategist, address indexed rewardToken, uint256 profitAmount, uint256 feeAmount, uint256 timestamp)
ToggledEmergencyState
event ToggledEmergencyState(bool paused)
errors
No errors.
creation bytecode
0x608060405234801561001057600080fd5b5061003c60017f62ae7bf2df4e95c187ea09c8c47c3fc3d9abc36298f5b5b6c5e2e7b4b291fe26610815565b7f62ae7bf2df4e95c187ea09c8c47c3fc3d9abc36298f5b5b6c5e2e7b4b291fe251461006a5761006a61083c565b61009560017fa7ec62784904ff31cbcc32d09932a58e7f1e4476e1d041995b37c917990b16dd610815565b7fa7ec62784904ff31cbcc32d09932a58e7f1e4476e1d041995b37c917990b16dc146100c3576100c361083c565b6100ee60017fa1709211eeccf8f4ad5b6700d52a1a9525b5f5ae1e9e5f9e5a0c2fc23c86e531610815565b7fa1709211eeccf8f4ad5b6700d52a1a9525b5f5ae1e9e5f9e5a0c2fc23c86e5301461011c5761011c61083c565b61014760017fefd7c7d9ef1040fc87e7ad11fe15f86e1d11e1df03c6d7c87f7e1f4041f08d42610815565b7fefd7c7d9ef1040fc87e7ad11fe15f86e1d11e1df03c6d7c87f7e1f4041f08d41146101755761017561083c565b6101a060017fdae0aafd977983cb1e78d8f638900ff361dc3c48c43118ca1dd77d1af3f47bc0610815565b7fdae0aafd977983cb1e78d8f638900ff361dc3c48c43118ca1dd77d1af3f47bbf146101ce576101ce61083c565b6101f960017f45418d9b5c2787ae64acbffccad43f2b487c1a16e24385aa9d2b059f9d1d163d610815565b7f45418d9b5c2787ae64acbffccad43f2b487c1a16e24385aa9d2b059f9d1d163c146102275761022761083c565b61025260017f3d9bb16e77837e25cada0cf894835418b38e8e18fbec6cfd192eb344bebfa6b9610815565b7f3d9bb16e77837e25cada0cf894835418b38e8e18fbec6cfd192eb344bebfa6b8146102805761028061083c565b6102ab60017fc403216a7704d160f6a3b5c3b149a1226a6080f0a5dd27b27d9ba9c022fa0afd610815565b7fc403216a7704d160f6a3b5c3b149a1226a6080f0a5dd27b27d9ba9c022fa0afc146102d9576102d961083c565b61030460017f656de32df98753b07482576beb0d00a6b949ebf84c066c765f54f26725221bb7610815565b7f656de32df98753b07482576beb0d00a6b949ebf84c066c765f54f26725221bb6146103325761033261083c565b61035d60017fa07a20a2d463a602c2b891eb35f244624d9068572811f63d0e094072fb54591b610815565b7fa07a20a2d463a602c2b891eb35f244624d9068572811f63d0e094072fb54591a1461038b5761038b61083c565b6103b660017fe3ee74fb7893020b457d8071ed1ef76ace2bf4903abd7b24d3ce312e9c72c02a610815565b7fe3ee74fb7893020b457d8071ed1ef76ace2bf4903abd7b24d3ce312e9c72c029146103e4576103e461083c565b61040f60017f0286fd414602b432a8c80a0125e9a25de9bba96da9d5068c832ff73f09208a3c610815565b7f0286fd414602b432a8c80a0125e9a25de9bba96da9d5068c832ff73f09208a3b1461043d5761043d61083c565b61046860017f29f7fcd4fe2517c1963807a1ec27b0e45e67c60a874d5eeac7a0b1ab1bb84448610815565b7f29f7fcd4fe2517c1963807a1ec27b0e45e67c60a874d5eeac7a0b1ab1bb84447146104965761049661083c565b6104c160017f414c5263b05428f1be1bfa98e25407cc78dd031d0d3cd2a2e3d63b488804f22f610815565b7f414c5263b05428f1be1bfa98e25407cc78dd031d0d3cd2a2e3d63b488804f22e146104ef576104ef61083c565b61051a60017f82b330ca72bcd6db11a26f10ce47ebcfe574a9c646bccbc6f1cd4478eae16b32610815565b7f82b330ca72bcd6db11a26f10ce47ebcfe574a9c646bccbc6f1cd4478eae16b31146105485761054861083c565b61057360017f6a7b588c950d46e2de3db2f157e5e0e4f29054c8d60f17bf0c30352e223a458e610815565b7f6a7b588c950d46e2de3db2f157e5e0e4f29054c8d60f17bf0c30352e223a458d146105a1576105a161083c565b6105cc60017fef1528bd6b0f43c4ad46f8ba3f79dd3c19967fed33d44b75a620f289a9b2b640610815565b7fef1528bd6b0f43c4ad46f8ba3f79dd3c19967fed33d44b75a620f289a9b2b63f146105fa576105fa61083c565b61062560017f21e6ad38ea5ca89af03560d16f1da9e505dccbd1ec61d0683be425888164fec4610815565b7f21e6ad38ea5ca89af03560d16f1da9e505dccbd1ec61d0683be425888164fec3146106535761065361083c565b61067e60017f280539da846b4989609abdccfea039bd1453e4f710c670b29b9eeaca0730c1a3610815565b7f280539da846b4989609abdccfea039bd1453e4f710c670b29b9eeaca0730c1a2146106ac576106ac61083c565b6106d760017f0af7af9f5ccfa82c3497f40c7c382677637aee27293a6243a22216b51481bd98610815565b7f0af7af9f5ccfa82c3497f40c7c382677637aee27293a6243a22216b51481bd97146107055761070561083c565b61073060017f129eccdfbcf3761d8e2f66393221fa8277b7623ad13ed7693a0025435931c64b610815565b7f129eccdfbcf3761d8e2f66393221fa8277b7623ad13ed7693a0025435931c64a1461075e5761075e61083c565b61078960017fa65533f4b41f3786d877c8fdd4ae6d27ada84e1d9c62ea3aca309e9aa03af1ce610815565b7fa65533f4b41f3786d877c8fdd4ae6d27ada84e1d9c62ea3aca309e9aa03af1cd146107b7576107b761083c565b6107e260017f1841be4c16015a744c9fbf595f7c6b32d40278c16c1fc7cf2de88c6348de44bb610815565b7f1841be4c16015a744c9fbf595f7c6b32d40278c16c1fc7cf2de88c6348de44ba146108105761081061083c565b610852565b8181038181111561083657634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052600160045260246000fd5b615be7806108616000396000f3fe60806040526004361061028a5760003560e01c806303140ff41461029657806306974e8d146102be57806309ff18f0146102e05780630c80447a146102f55780630d5df7ba146103175780631113ef521461032c578063180b0d7e1461034c5780631c03e6cc146103615780631fe4a6861461038157806320d1ceaf14610396578063394b71cf146103ab5780633f282b8d146103cd5780633fc8cef3146103ed578063457100741461040857806345d01e4a1461042d5780634d352ab2146104425780634fa5d854146104625780635018594614610477578063560a9c47146104975780635641ec03146104b75780635aa6e675146104cc578063643090bc146104e157806366666aa9146104f65780636f307dc31461050b578063759098881461052057806375f6d6ce146105355780637bb7bed1146105555780638129fc1c1461057557806382de9c1b1461058a5780638f56ed931461059f5780639137c1a7146105bf5780639a138d6d146105df5780639a508c8e146105ff5780639d16acfd14610614578063a1dab23e14610648578063a83656931461065d578063b5d7a94f14610672578063b5fd73f814610687578063b60f151a146106a7578063b8d3370b146106bc578063bfd131f1146106d1578063c23ff8b6146106e6578063c2a2a07b14610706578063c2b18aa01461071a578063c3b6f9391461073c578063c4d66de814610751578063cc2a9a5b14610771578063ce845d1d14610791578063ce8c42e8146107a6578063d3df8aa4146107c6578063e684f46a146107db578063e9eca994146107f0578063ec09560614610805578063f04f27071461082d578063f77c47911461084d578063f7c618c114610862578063fbfa77cf1461087757600080fd5b3661029157005b600080fd5b3480156102a257600080fd5b506102ab61088c565b6040519081526020015b60405180910390f35b3480156102ca57600080fd5b506102d36108fc565b6040516102b59190615052565b3480156102ec57600080fd5b506102d3610967565b34801561030157600080fd5b5061031561031036600461507b565b61097f565b005b34801561032357600080fd5b506102d3610a3e565b34801561033857600080fd5b50610315610347366004615098565b610a56565b34801561035857600080fd5b506102ab610b3d565b34801561036d57600080fd5b5061031561037c36600461507b565b610b84565b34801561038d57600080fd5b506102d3610c66565b3480156103a257600080fd5b506102ab610c7e565b3480156103b757600080fd5b506102d3600080516020615b3283398151915281565b3480156103d957600080fd5b506103156103e83660046150d9565b610cc5565b3480156103f957600080fd5b506102d36006602160991b0181565b34801561041457600080fd5b5061041d610da8565b60405190151581526020016102b5565b34801561043957600080fd5b506102ab610dc1565b34801561044e57600080fd5b5061031561045d3660046150f2565b610e63565b34801561046e57600080fd5b50610315610f62565b34801561048357600080fd5b5061041d61049236600461507b565b61100a565b3480156104a357600080fd5b506103156104b236600461507b565b611074565b3480156104c357600080fd5b5061031561110d565b3480156104d857600080fd5b506102d36111a7565b3480156104ed57600080fd5b506102ab6111ee565b34801561050257600080fd5b506102d3611206565b34801561051757600080fd5b506102d361121e565b34801561052c57600080fd5b506102ab611236565b34801561054157600080fd5b50610315610550366004615139565b61124e565b34801561056157600080fd5b506102d36105703660046150d9565b6112f6565b34801561058157600080fd5b50610315611320565b34801561059657600080fd5b506102ab6113af565b3480156105ab57600080fd5b506103156105ba366004615156565b6113c7565b3480156105cb57600080fd5b506103156105da36600461507b565b61167b565b3480156105eb57600080fd5b506103156105fa3660046150f2565b61176a565b34801561060b57600080fd5b5061031561185e565b34801561062057600080fd5b506106296118f6565b6040805192151583526001600160a01b039091166020830152016102b5565b34801561065457600080fd5b506102ab611942565b34801561066957600080fd5b506102ab61195a565b34801561067e57600080fd5b506102ab6119a1565b34801561069357600080fd5b5061041d6106a236600461507b565b6119b9565b3480156106b357600080fd5b506102ab6119cc565b3480156106c857600080fd5b506102ab611a13565b3480156106dd57600080fd5b50610315611a39565b3480156106f257600080fd5b506103156107013660046150d9565b611bd4565b34801561071257600080fd5b50600161041d565b34801561072657600080fd5b5061072f611cf7565b6040516102b59190615245565b34801561074857600080fd5b506102d3611d22565b34801561075d57600080fd5b5061031561076c36600461507b565b611d3a565b34801561077d57600080fd5b5061031561078c366004615258565b611db0565b34801561079d57600080fd5b506102ab611e76565b3480156107b257600080fd5b506103156107c13660046150d9565b611f7b565b3480156107d257600080fd5b5061041d61215f565b3480156107e757600080fd5b5061041d612178565b3480156107fc57600080fd5b506102ab612191565b34801561081157600080fd5b506102d37397b3e5712cde7db13e939a188c8ca90db5b0513181565b34801561083957600080fd5b5061031561084836600461541f565b6121a9565b34801561085957600080fd5b506102d3612415565b34801561086e57600080fd5b506102d361245c565b34801561088357600080fd5b506102d3612474565b6000610896612415565b6001600160a01b03166303140ff46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f7919061553d565b905090565b6000610906612415565b6001600160a01b03166306974e8d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610943573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f79190615556565b60006108f76000805160206159b28339815191525490565b61098761248c565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b81526004016109b29190615052565b602060405180830381865afa1580156109cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f39190615573565b610a185760405162461bcd60e51b8152600401610a0f90615590565b60405180910390fd5b610a218161249f565b610a3b610a36610a2f61195a565b42906124b6565b6124c9565b50565b60006108f76000805160206159328339815191525490565b610a5e61248c565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b8152600401610a899190615052565b602060405180830381865afa158015610aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aca9190615573565b610ae65760405162461bcd60e51b8152600401610a0f90615590565b610aef8261100a565b15610b245760405162461bcd60e51b815260206004820152600560248201526410b9b0b63b60d91b6044820152606401610a0f565b610b386001600160a01b03831684836124e0565b505050565b6000610b47612415565b6001600160a01b031663180b0d7e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d3573d6000803e3d6000fd5b610b8c61248c565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b8152600401610bb79190615052565b602060405180830381865afa158015610bd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf89190615573565b610c145760405162461bcd60e51b8152600401610a0f90615590565b606680546001810182556000919091527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540180546001600160a01b0319166001600160a01b0392909216919091179055565b60006108f76000805160206159d28339815191525490565b6000610c88612415565b6001600160a01b03166320d1ceaf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d3573d6000803e3d6000fd5b610ccd61248c565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b8152600401610cf89190615052565b602060405180830381865afa158015610d15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d399190615573565b610d555760405162461bcd60e51b8152600401610a0f90615590565b610d5d6119a1565b8110610d915760405162461bcd60e51b81526020600482015260036024820152622137b960e91b6044820152606401610a0f565b610a3b600080516020615b72833981519152829055565b60006108f7600080516020615952833981519152612536565b600080610dcc61121e565b6001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610df79190615052565b602060405180830381865afa158015610e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e38919061553d565b9050610e5d610e456111ee565b610e57610e50612191565b84906124b6565b90612549565b91505090565b600054610100900460ff1680610e7c575060005460ff16155b610e985760405162461bcd60e51b8152600401610a0f906155b8565b600054610100900460ff16158015610eba576000805461ffff19166101011790555b73833589fcd6edb6e08f4c7c32d4f71b54bda0291373edc817a28e8b93b03976fbd4a3ddbc9f7d176c2273fbb21d0380bee3312b33c4353c8936a0f13ef26c73a88594d404727625a9437c3f886c7643872296ae610f22878588868686600061036f816113c7565b60408051602081019091526001600160a01b0382168152610f47906066906001614fd8565b50505050508015610b38576000805461ff0019169055505050565b610f6a612474565b6001600160a01b0316336001600160a01b03161480610fa15750610f8c612415565b6001600160a01b0316336001600160a01b0316145b80610fc45750610faf6111a7565b6001600160a01b0316336001600160a01b0316145b610fe05760405162461bcd60e51b8152600401610a0f90615606565b610fe8612555565b610ff0612653565b610ff86126a9565b611000612a68565b611008612b7e565b565b600061101461245c565b6001600160a01b0316826001600160a01b0316148061104b575061103661121e565b6001600160a01b0316826001600160a01b0316145b8061106e5750611059611d22565b6001600160a01b0316826001600160a01b0316145b92915050565b61107c61248c565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b81526004016110a79190615052565b602060405180830381865afa1580156110c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e89190615573565b6111045760405162461bcd60e51b8152600401610a0f90615590565b610a3b81612ba1565b61111561248c565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b81526004016111409190615052565b602060405180830381865afa15801561115d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111819190615573565b61119d5760405162461bcd60e51b8152600401610a0f90615590565b6110006000612bb8565b60006111b161248c565b6001600160a01b0316635aa6e6756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610943573d6000803e3d6000fd5b60006108f7600080516020615b528339815191525490565b60006108f76000805160206159f28339815191525490565b60006108f7600080516020615b128339815191525490565b60006108f7600080516020615b728339815191525490565b61125661248c565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b81526004016112819190615052565b602060405180830381865afa15801561129e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c29190615573565b6112de5760405162461bcd60e51b8152600401610a0f90615590565b610a3b600080516020615af283398151915282612beb565b6066818154811061130657600080fd5b6000918252602090912001546001600160a01b0316905081565b600054610100900460ff1680611339575060005460ff16155b6113555760405162461bcd60e51b8152600401610a0f906155b8565b600054610100900460ff16158015611377576000805461ffff19166101011790555b60017f62ae7bf2df4e95c187ea09c8c47c3fc3d9abc36298f5b5b6c5e2e7b4b291fe25558015610a3b576000805461ff001916905550565b60006108f7600080516020615a928339815191525490565b600054610100900460ff16806113e0575060005460ff16155b6113fc5760405162461bcd60e51b8152600401610a0f906155b8565b600054610100900460ff1615801561141e576000805461ffff19166101011790555b6114408a8a8a89897397b3e5712cde7db13e939a188c8ca90db5b05131611db0565b886001600160a01b0316876001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ac9190615556565b6001600160a01b0316146114e85760405162461bcd60e51b81526020600482015260036024820152621d5b9960ea1b6044820152606401610a0f565b6114f187612c05565b6103e883106115285760405162461bcd60e51b815260206004820152600360248201526218dbdb60ea1b6044820152606401610a0f565b82841061155d5760405162461bcd60e51b81526020600482015260036024820152623137b960e91b6044820152606401610a0f565b611574600080516020615992833981519152849055565b61158b600080516020615b72833981519152859055565b6115a3600080516020615af283398151915283612beb565b6040805160018082528183019092526000916020808301908036833701905050905087816000815181106115d9576115d961565f565b6001600160a01b039283166020918202929092010152604051631853304760e31b81529088169063c299823890611614908490600401615245565b6000604051808303816000875af1158015611633573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261165b9190810190615675565b5050801561166f576000805461ff00191690555b50505050505050505050565b61168361248c565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b81526004016116ae9190615052565b602060405180830381865afa1580156116cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ef9190615573565b61170b5760405162461bcd60e51b8152600401610a0f90615590565b6001600160a01b0381166117615760405162461bcd60e51b815260206004820152601e60248201527f6e65772073746f726167652073686f756c646e277420626520656d70747900006044820152606401610a0f565b610a3b81612c1c565b61177261248c565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b815260040161179d9190615052565b602060405180830381865afa1580156117ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117de9190615573565b6117fa5760405162461bcd60e51b8152600401610a0f90615590565b60405163bdac7ca360e01b81526001600160a01b0383169063bdac7ca390611828903090859060040161570a565b600060405180830381600087803b15801561184257600080fd5b505af1158015611856573d6000803e3d6000fd5b505050505050565b61186661248c565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b81526004016118919190615052565b602060405180830381865afa1580156118ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d29190615573565b6118ee5760405162461bcd60e51b8152600401610a0f90615590565b611000612c2e565b6000806119016113af565b1580159061191557506119126113af565b42115b801561193257506000611926610967565b6001600160a01b031614155b61193a610967565b915091509091565b60006108f7600080516020615a728339815191525490565b6000611964612415565b6001600160a01b031663a83656936040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d3573d6000803e3d6000fd5b60006108f76000805160206159928339815191525490565b600061106e826119c7611cf7565b612c42565b60006119d6612415565b6001600160a01b031663b60f151a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d3573d6000803e3d6000fd5b60006108f7611a206119cc565b611a33611a2b610c7e565b611a3361088c565b906124b6565b611a41612474565b6001600160a01b0316336001600160a01b03161480611a785750611a63612415565b6001600160a01b0316336001600160a01b0316145b80611a9b5750611a866111a7565b6001600160a01b0316336001600160a01b0316145b611ab75760405162461bcd60e51b8152600401610a0f90615606565b6000611ac161121e565b9050611acd6001612bb8565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190611afc903090600401615052565b602060405180830381865afa158015611b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3d919061553d565b1115611bcc57611bcc611b4e612474565b6040516370a0823160e01b81526001600160a01b038416906370a0823190611b7a903090600401615052565b602060405180830381865afa158015611b97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bbb919061553d565b6001600160a01b03841691906124e0565b610a3b612b7e565b611bdc61248c565b6001600160a01b031663dee1f0e4336040518263ffffffff1660e01b8152600401611c079190615052565b602060405180830381865afa158015611c24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c489190615573565b611c645760405162461bcd60e51b8152600401610a0f90615590565b6103e8811115611ca05760405162461bcd60e51b8152602060048201526007602482015266636f6c6c61742d60c81b6044820152606401610a0f565b611ca8611236565b8111611ce05760405162461bcd60e51b8152602060048201526007602482015266636f6c6c61742b60c81b6044820152606401610a0f565b610a3b600080516020615992833981519152829055565b60606108f77f45418d9b5c2787ae64acbffccad43f2b487c1a16e24385aa9d2b059f9d1d163c612c9d565b60006108f76000805160206158f28339815191525490565b600054610100900460ff1680611d53575060005460ff16155b611d6f5760405162461bcd60e51b8152600401610a0f906155b8565b600054610100900460ff16158015611d91576000805461ffff19166101011790555b611d9a82612d4b565b8015611dac576000805461ff00191690555b5050565b600054610100900460ff1680611dc9575060005460ff16155b611de55760405162461bcd60e51b8152600401610a0f906155b8565b600054610100900460ff16158015611e07576000805461ffff19166101011790555b611e1087611d3a565b611e1986612db3565b611e2285612dca565b611e2b84612de1565b611e3483612df8565b611e3d82612e0f565b611e476001612e26565b611e516000612e3e565b611e5b6000612e55565b8015611e6d576000805461ff00191690555b50505050505050565b600080611e81611d22565b90506000816001600160a01b0316633af9e669306040518263ffffffff1660e01b8152600401611eb19190615052565b6020604051808303816000875af1158015611ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef4919061553d565b90506000826001600160a01b03166317bfdfbc306040518263ffffffff1660e01b8152600401611f249190615052565b6020604051808303816000875af1158015611f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f67919061553d565b9050611f738282612549565b935050505090565b611f83612474565b6001600160a01b0316336001600160a01b03161480611fba5750611fa5612415565b6001600160a01b0316336001600160a01b0316145b80611fdd5750611fc86111a7565b6001600160a01b0316336001600160a01b0316145b611ff95760405162461bcd60e51b8152600401610a0f90615606565b612001612e6d565b600061200b61121e565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161203b9190615052565b602060405180830381865afa158015612058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207c919061553d565b90508083116120a157610b38612090612474565b6001600160a01b03841690856124e0565b60006120ad8483612549565b90506120b881612edb565b6120d46120c3612474565b6001600160a01b03851690866124e0565b6040516370a0823160e01b81526001600160a01b038416906370a0823190612100903090600401615052565b602060405180830381865afa15801561211d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612141919061553d565b9150811561215157612151612a68565b612159612b7e565b50505050565b60006108f7600080516020615ab2833981519152612536565b60006108f7600080516020615af2833981519152612536565b60006108f7600080516020615ad28339815191525490565b33600080516020615b32833981519152146121c357600080fd5b60655460ff1615806121dd5750606554610100900460ff16155b6122205760405162461bcd60e51b81526020600482015260146024820152734f6e6c79206f6e652063616e206265207472756560601b6044820152606401610a0f565b60655460ff16806122385750606554610100900460ff165b6122795760405162461bcd60e51b81526020600482015260126024820152714f6e652068617320746f206265207472756560701b6044820152606401610a0f565b600061228361121e565b905060006122ce8460008151811061229d5761229d61565f565b6020026020010151866000815181106122b8576122b861565f565b60200260200101516124b690919063ffffffff16565b60655490915060ff161561230d576122ff856000815181106122f2576122f261565f565b6020026020010151613032565b612308816132ed565b6123f3565b6000612317611d22565b90506000816001600160a01b03166317bfdfbc306040518263ffffffff1660e01b81526004016123479190615052565b6020604051808303816000875af1158015612366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238a919061553d565b905060006123b2886000815181106123a4576123a461565f565b6020026020010151836133d1565b90506123c96001600160a01b0386168460006133e7565b6123dd6001600160a01b03861684836133e7565b6123e6816134ea565b6123ef846135a2565b5050505b6118566001600160a01b038316600080516020615b32833981519152836124e0565b600061241f61248c565b6001600160a01b031663f77c47916040518163ffffffff1660e01b8152600401602060405180830381865afa158015610943573d6000803e3d6000fd5b60006108f7600080516020615a528339815191525490565b60006108f7600080516020615a128339815191525490565b6000805160206159728339815191525490565b610a3b6000805160206159b2833981519152829055565b60006124c2828461573a565b9392505050565b610a3b600080516020615a92833981519152829055565b610b388363a9059cbb60e01b84846040516024016124ff92919061574d565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613746565b6000612540825490565b60011492915050565b60006124c28284615766565b61255d612e6d565b60006125676111ee565b90506103e8811115610a3b5761257c816135a2565b600061258661121e565b90506125fe82826001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016125b89190615052565b602060405180830381865afa1580156125d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125f9919061553d565b6133d1565b9150600061262561260d611a13565b61261f612618610b3d565b869061381b565b90613827565b90506126318282613833565b610b38600080516020615b5283398151915261264f85610e576111ee565b9055565b61265b611206565b6001600160a01b031663b88a802f6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561269557600080fd5b505af1158015612159573d6000803e3d6000fd5b6126b1610da8565b6126f9577f408a4b113351e616bb41bad991f29bbad84b43c3810e7492a6bc7c6388dfe0c26126de610da8565b604080519115158252600060208301520160405180910390a1565b600061270361245c565b9050600061270f6108fc565b905060005b606654811015612887576000606682815481106127335761273361565f565b60009182526020822001546040516370a0823160e01b81526001600160a01b03909116925082906370a082319061276e903090600401615052565b602060405180830381865afa15801561278b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127af919061553d565b9050806000036127c057505061287f565b846001600160a01b0316826001600160a01b03161461287c576127ee6001600160a01b0383168560006133e7565b6128026001600160a01b03831685836133e7565b60405163d5bcb9b560e01b81526001600160a01b0385169063d5bcb9b590612837908590899086906001903090600401615779565b6020604051808303816000875af1158015612856573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287a919061553d565b505b50505b600101612714565b506040516370a0823160e01b81526000906001600160a01b038416906370a08231906128b7903090600401615052565b602060405180830381865afa1580156128d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128f8919061553d565b90506305f5e10081101561290b57505050565b6129158382613833565b6040516370a0823160e01b81526000906001600160a01b038516906370a0823190612944903090600401615052565b602060405180830381865afa158015612961573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612985919061553d565b90506509184e72a00081101561299b5750505050565b60006129a561121e565b9050846001600160a01b0316816001600160a01b031614612a61576129d56001600160a01b0386168560006133e7565b6129e96001600160a01b03861685846133e7565b60405163d5bcb9b560e01b81526001600160a01b0385169063d5bcb9b590612a1e908890859087906001903090600401615779565b6020604051808303816000875af1158015612a3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611856919061553d565b5050505050565b612a7061215f565b15612ada5760405162461bcd60e51b815260206004820152603460248201527f416374696f6e20626c6f636b65642061732074686520737472617465677920696044820152737320696e20656d657267656e637920737461746560601b6064820152608401610a0f565b6000612ae461121e565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612b149190615052565b602060405180830381865afa158015612b31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b55919061553d565b90508015612b6657612b6681613032565b612b6e612178565b612b76575050565b611dac613be9565b6000612b88611e76565b9050610a3b600080516020615ad2833981519152829055565b610a3b600080516020615932833981519152829055565b8015612bdb57612bc6612555565b612bce612653565b612bd66126a9565b612be3565b612be3612e6d565b610a3b614196565b611dac8282612bfb576000612bfe565b60015b60ff169055565b610a3b6000805160206158f2833981519152829055565b60008051602061597283398151915255565b612c38600061249f565b61100860006124c9565b6000805b8251811015612c9357836001600160a01b0316838281518110612c6b57612c6b61565f565b60200260200101516001600160a01b031603612c8b57600191505061106e565b600101612c46565b5060009392505050565b6060612ca7825490565b6001600160401b03811115612cbe57612cbe6152da565b604051908082528060200260200182016040528015612ce7578160200160208202803683370190505b50905060005b8151811015612d4557612d1381612d0585600161573a565b612d0f919061573a565b5490565b828281518110612d2557612d2561565f565b6001600160a01b0390921660209283029190910190910152600101612ced565b50919050565b600054610100900460ff1680612d64575060005460ff16155b612d805760405162461bcd60e51b8152600401610a0f906155b8565b600054610100900460ff16158015612da2576000805461ffff19166101011790555b612dab82612c1c565b611d9a611320565b610a3b600080516020615b12833981519152829055565b610a3b600080516020615a12833981519152829055565b610a3b6000805160206159f2833981519152829055565b610a3b600080516020615a52833981519152829055565b610a3b6000805160206159d2833981519152829055565b610a3b60008051602061595283398151915282612beb565b610a3b600080516020615a72833981519152829055565b610a3b600080516020615ab283398151915282612beb565b6000612e77612191565b612e7f611e76565b1115612ebd576000612e9a612e92612191565b610e57611e76565b9050612eb9612ea7610b3d565b61261f612eb2611a13565b849061381b565b9150505b611bcc600080516020615b5283398151915261264f83611a336111ee565b6000612ee561121e565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612f159190615052565b602060405180830381865afa158015612f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f56919061553d565b9050612f7c83612f64612178565b612f6f57600061419e565b612f77611236565b61419e565b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190612fab903090600401615052565b602060405180830381865afa158015612fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fec919061553d565b905083612ff98284612549565b10156121595760405162461bcd60e51b81526020600482015260086024820152671dda5d1a08185b5d60c21b6044820152606401610a0f565b8060000361303d5750565b600061304761121e565b90506000613053611d22565b90506000826001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016130839190615052565b602060405180830381865afa1580156130a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130c4919061553d565b9050808410156130d15750825b60006130db611206565b6001600160a01b03166302c3bcbb846040518263ffffffff1660e01b81526004016131069190615052565b602060405180830381865afa158015613123573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613147919061553d565b90506000613226670de0b6b3a764000061261f866001600160a01b031663bd6d894d6040518163ffffffff1660e01b81526004016020604051808303816000875af115801561319a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131be919061553d565b876001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613220919061553d565b9061381b565b905081811061323757505050505050565b826132428383612549565b11613259576132566002610e578484612549565b92505b61326e6001600160a01b0386168560006133e7565b6132826001600160a01b03861685856133e7565b60405163140e25ad60e31b8152600481018490526001600160a01b0385169063a0712d68906024016020604051808303816000875af11580156132c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6d919061553d565b806000036132f85750565b613300611d22565b6001600160a01b031663c5ebeaec826040518263ffffffff1660e01b815260040161332d91815260200190565b6020604051808303816000875af115801561334c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613370919061553d565b506006602160991b0161338161121e565b6001600160a01b031603610a3b576006602160991b016001600160a01b031663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b15801561184257600080fd5b60008183106133e057816124c2565b5090919050565b8015806134605750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e9061341d903090869060040161570a565b602060405180830381865afa15801561343a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345e919061553d565b155b6134cb5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610a0f565b610b388363095ea7b360e01b84846040516024016124ff92919061574d565b806000036134f55750565b60006134ff61121e565b9050600061350b611d22565b90506135226001600160a01b0383168260006133e7565b6135366001600160a01b03831682856133e7565b60405163073a938160e11b8152600481018490526001600160a01b03821690630e752702906024015b6020604051808303816000875af115801561357e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612159919061553d565b60006135ac611d22565b90506000816001600160a01b031663bd6d894d6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156135f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613614919061553d565b905061362881670de0b6b3a7640000613827565b83101561365c5760405163db006a7560e01b8152600160048201526001600160a01b0383169063db006a759060240161355f565b60405163852a12e360e01b8152600481018490526001600160a01b0383169063852a12e3906024016020604051808303816000875af11580156136a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c7919061553d565b506006602160991b016136d861121e565b6001600160a01b031603610b38576006602160991b016001600160a01b031663d0e30db0476040518263ffffffff1660e01b81526004016000604051808303818588803b15801561372857600080fd5b505af115801561373c573d6000803e3d6000fd5b5050505050505050565b600061379b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166144dc9092919063ffffffff16565b90508051600014806137bc5750808060200190518101906137bc9190615573565b610b385760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a0f565b60006124c282846157a9565b60006124c282846157c0565b600a811115613ac6576000613846610b3d565b905060006138598261261f61261861088c565b905060006138738361261f61386c610c7e565b879061381b565b9050600061388d8461261f6138866119cc565b889061381b565b90506000613899610c66565b905060006138a5612415565b6001600160a01b0316635aa6e6756040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139069190615556565b9050876001600160a01b0316600080516020615912833981519152888542604051613933939291906157e2565b60405180910390a2876001600160a01b0316816001600160a01b0316600080516020615b92833981519152898742604051613970939291906157e2565b60405180910390a3876001600160a01b0316826001600160a01b0316600080516020615a328339815191528988426040516139ad939291906157e2565b60405180910390a360006139bf612415565b6001600160a01b031663a98e929c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a209190615556565b9050613a376001600160a01b038a168260006133e7565b613a4b6001600160a01b038a16828a6133e7565b604051631112a1b760e11b81526001600160a01b038a81166004830152602482018690526044820188905260648201879052821690632225436e90608401600060405180830381600087803b158015613aa357600080fd5b505af1158015613ab7573d6000803e3d6000fd5b50505050505050505050505050565b816001600160a01b031660008051602061591283398151915260008042604051613af2939291906157e2565b60405180910390a2816001600160a01b0316613b0c612415565b6001600160a01b0316635aa6e6756040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b6d9190615556565b6001600160a01b0316600080516020615b9283398151915260008042604051613b98939291906157e2565b60405180910390a3816001600160a01b0316613bb2610c66565b6001600160a01b0316600080516020615a3283398151915260008042604051613bdd939291906157e2565b60405180910390a35050565b6000613bf3611d22565b90506000613bff611236565b90506000826001600160a01b0316633af9e669306040518263ffffffff1660e01b8152600401613c2f9190615052565b6020604051808303816000875af1158015613c4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c72919061553d565b90506000836001600160a01b03166317bfdfbc306040518263ffffffff1660e01b8152600401613ca29190615052565b6020604051808303816000875af1158015613cc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ce5919061553d565b90506000613cf38383612549565b90506000613d10613d066103e887612549565b61261f848861381b565b9050600081841115613d2e57613d266000612edb565b506000613fa4565b613d388285612549565b90506000613d44611206565b90506000816001600160a01b03166302c3bcbb8a6040518263ffffffff1660e01b8152600401613d749190615052565b602060405180830381865afa158015613d91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db5919061553d565b90506000613e6a670de0b6b3a764000061261f8c6001600160a01b031663bd6d894d6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015613e08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e2c919061553d565b8d6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131fc573d6000803e3d6000fd5b90506000836001600160a01b0316634a5844328c6040518263ffffffff1660e01b8152600401613e9a9190615052565b602060405180830381865afa158015613eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613edb919061553d565b905060008b6001600160a01b03166347bd37186040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f41919061553d565b9050600082821015613f8d57613f5c6001610e578585612549565b905084841015613f8557613f7e613f786002610e578888612549565b826133d1565b9050613f91565b506000613f91565b5060005b80871115613f9d578096505b5050505050505b6000613fae61121e565b90506000816001600160a01b03166370a08231600080516020615b328339815191526040518263ffffffff1660e01b8152600401613fec9190615052565b602060405180830381865afa158015614009573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061402d919061553d565b9050808311156140485761404387878b8b6144f3565b61418b565b60408051600180825281830190925260009160208083019080368337505060408051600180825281830190925292935060009291506020808301908036833701905050604080516000602082018190529293500160405160208183030381529060405290506140b561121e565b836000815181106140c8576140c861565f565b60200260200101906001600160a01b031690816001600160a01b03168152505085826000815181106140fc576140fc61565f565b60209081029190910101526065805460ff19166001179055604051632e1c224f60e11b8152600080516020615b3283398151915290635c38449e9061414b903090879087908790600401615848565b600060405180830381600087803b15801561416557600080fd5b505af1158015614179573d6000803e3d6000fd5b50506065805460ff1916905550505050505b505050505050505050565b6110086149a1565b60006141a8611d22565b90506000816001600160a01b0316633af9e669306040518263ffffffff1660e01b81526004016141d89190615052565b6020604051808303816000875af11580156141f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061421b919061553d565b90506000826001600160a01b03166317bfdfbc306040518263ffffffff1660e01b815260040161424b9190615052565b6020604051808303816000875af115801561426a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061428e919061553d565b905060008061429d8484612549565b905060006142ab8289612549565b90506142c66142bc6103e889612549565b61261f838a61381b565b925050506000818310156142dc575060006142e9565b6142e68383612549565b90505b60006142f361121e565b90506000816001600160a01b03166370a08231600080516020615b328339815191526040518263ffffffff1660e01b81526004016143319190615052565b602060405180830381865afa15801561434e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614372919061553d565b905080831115614389576140438987878a8c614ba8565b604080516001808252818301909252600091602080830190803683375050604080516001808252818301909252929350600092915060208083019080368337019050506040805160006020820181905292935001604051602081830303815290604052905084836000815181106144025761440261565f565b60200260200101906001600160a01b031690816001600160a01b03168152505085826000815181106144365761443661565f565b60209081029190910101526065805461ff001916610100179055604051632e1c224f60e11b8152600080516020615b3283398151915290635c38449e90614487903090879087908790600401615848565b600060405180830381600087803b1580156144a157600080fd5b505af11580156144b5573d6000803e3d6000fd5b50506065805461ff0019169055506144ce90508c6135a2565b505050505050505050505050565b60606144eb8484600085614e5f565b949350505050565b60006144fd61121e565b9050600061450b8686612549565b9050600061452861451e6103e886612549565b61261f848761381b565b90506000614534611206565b90506000816001600160a01b03166302c3bcbb886040518263ffffffff1660e01b81526004016145649190615052565b602060405180830381865afa158015614581573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145a5919061553d565b9050600061465a670de0b6b3a764000061261f8a6001600160a01b031663bd6d894d6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156145f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061461c919061553d565b8b6001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156131fc573d6000803e3d6000fd5b90506000836001600160a01b0316634a5844328a6040518263ffffffff1660e01b815260040161468a9190615052565b602060405180830381865afa1580156146a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146cb919061553d565b90506000896001600160a01b03166347bd37186040518163ffffffff1660e01b8152600401602060405180830381865afa15801561470d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614731919061553d565b90506000828210156147775761474c6001610e578585612549565b90508484101561476f57614768613f786002610e578888612549565b905061477b565b50600061477b565b5060005b80614786888e612549565b1115614799576147968c826124b6565b96505b5050505050505b80861015611e6d5760006147b48288612549565b905060006148156147d789610e576103e861261f6147d06119a1565b8f9061381b565b886001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125d5573d6000803e3d6000fd5b905061482961482483836133d1565b6132ed565b6040516370a0823160e01b81526000906001600160a01b038716906370a0823190614858903090600401615052565b602060405180830381865afa158015614875573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614899919061553d565b905080156148aa576148aa81613032565b6040516305eff7ef60e21b81526001600160a01b038916906317bfdfbc906148d6903090600401615052565b6020604051808303816000875af11580156148f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614919919061553d565b604051633af9e66960e01b81529099506001600160a01b03891690633af9e66990614948903090600401615052565b6020604051808303816000875af1158015614967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061498b919061553d565b99506149978a8a612549565b94505050506147a0565b60006149ab611d22565b90506000816001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156149ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a11919061553d565b90506000826001600160a01b0316633af9e669306040518263ffffffff1660e01b8152600401614a419190615052565b6020604051808303816000875af1158015614a60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a84919061553d565b90506000836001600160a01b03166317bfdfbc306040518263ffffffff1660e01b8152600401614ab49190615052565b6020604051808303816000875af1158015614ad3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614af7919061553d565b90506000614b10614b066111ee565b610e578585612549565b9050614b26614b1f85836133d1565b600061419e565b604051633af9e66960e01b81526001600160a01b03861690633af9e66990614b52903090600401615052565b6020604051808303816000875af1158015614b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b95919061553d565b92508215612a6157612a616000196135a2565b6000614bb261121e565b9050600080614bc18787612549565b90506000614bcf828a612549565b9050614bea614be06103e887612549565b61261f838861381b565b925050505b80851115614db7576000614c10614c046119a1565b61261f886103e861381b565b90506000614c1e8784612549565b90506000614c3c6147d7614c328b86612549565b6125f98d866124b6565b9050614c47816135a2565b6040516370a0823160e01b81526000906001600160a01b038716906370a0823190614c76903090600401615052565b602060405180830381865afa158015614c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cb7919061553d565b9050614ccb614cc684836133d1565b6134ea565b6040516305eff7ef60e21b81526001600160a01b038916906317bfdfbc90614cf7903090600401615052565b6020604051808303816000875af1158015614d16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d3a919061553d565b604051633af9e66960e01b81529099506001600160a01b03891690633af9e66990614d69903090600401615052565b6020604051808303816000875af1158015614d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dac919061553d565b995050505050614bef565b6040516370a0823160e01b81526000906001600160a01b038416906370a0823190614de6903090600401615052565b602060405180830381865afa158015614e03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e27919061553d565b90508781101561373c576000614e3d8983612549565b90506000614e4b8989612549565b905061166f614e5a83836133d1565b6135a2565b606082471015614ec05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610a0f565b600080866001600160a01b03168587604051614edc91906158c2565b60006040518083038185875af1925050503d8060008114614f19576040519150601f19603f3d011682016040523d82523d6000602084013e614f1e565b606091505b5091509150614f2f87838387614f3a565b979650505050505050565b60608315614fa9578251600003614fa2576001600160a01b0385163b614fa25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a0f565b50816144eb565b6144eb8383815115614fbe5781518083602001fd5b8060405162461bcd60e51b8152600401610a0f91906158de565b82805482825590600052602060002090810192821561502d579160200282015b8281111561502d57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614ff8565b5061503992915061503d565b5090565b5b80821115615039576000815560010161503e565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610a3b57600080fd5b60006020828403121561508d57600080fd5b81356124c281615066565b6000806000606084860312156150ad57600080fd5b83356150b881615066565b925060208401356150c881615066565b929592945050506040919091013590565b6000602082840312156150eb57600080fd5b5035919050565b6000806040838503121561510557600080fd5b823561511081615066565b9150602083013561512081615066565b809150509250929050565b8015158114610a3b57600080fd5b60006020828403121561514b57600080fd5b81356124c28161512b565b60008060008060008060008060006101208a8c03121561517557600080fd5b893561518081615066565b985060208a013561519081615066565b975060408a01356151a081615066565b965060608a01356151b081615066565b955060808a01356151c081615066565b945060a08a01356151d081615066565b935060c08a0135925060e08a013591506101008a01356151ef8161512b565b809150509295985092959850929598565b600081518084526020840193506020830160005b8281101561523b5781516001600160a01b0316865260209586019590910190600101615214565b5093949350505050565b6020815260006124c26020830184615200565b60008060008060008060c0878903121561527157600080fd5b863561527c81615066565b9550602087013561528c81615066565b9450604087013561529c81615066565b935060608701356152ac81615066565b925060808701356152bc81615066565b915060a08701356152cc81615066565b809150509295509295509295565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715615318576153186152da565b604052919050565b60006001600160401b03821115615339576153396152da565b5060051b60200190565b600082601f83011261535457600080fd5b813561536761536282615320565b6152f0565b8082825260208201915060208360051b86010192508583111561538957600080fd5b602085015b838110156153a657803583526020928301920161538e565b5095945050505050565b600082601f8301126153c157600080fd5b81356001600160401b038111156153da576153da6152da565b6153ed601f8201601f19166020016152f0565b81815284602083860101111561540257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561543557600080fd5b84356001600160401b0381111561544b57600080fd5b8501601f8101871361545c57600080fd5b803561546a61536282615320565b8082825260208201915060208360051b85010192508983111561548c57600080fd5b6020840193505b828410156154b75783356154a681615066565b825260209384019390910190615493565b965050505060208501356001600160401b038111156154d557600080fd5b6154e187828801615343565b93505060408501356001600160401b038111156154fd57600080fd5b61550987828801615343565b92505060608501356001600160401b0381111561552557600080fd5b615531878288016153b0565b91505092959194509250565b60006020828403121561554f57600080fd5b5051919050565b60006020828403121561556857600080fd5b81516124c281615066565b60006020828403121561558557600080fd5b81516124c28161512b565b6020808252600e908201526d4e6f7420676f7665726e616e636560901b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526039908201527f5468652073656e6465722068617320746f2062652074686520636f6e74726f6c6040820152781b195c8b0819dbdd995c9b985b98d94b081bdc881d985d5b1d603a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561568757600080fd5b81516001600160401b0381111561569d57600080fd5b8201601f810184136156ae57600080fd5b80516156bc61536282615320565b8082825260208201915060208360051b8501019250868311156156de57600080fd5b6020840193505b828410156157005783518252602093840193909101906156e5565b9695505050505050565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561106e5761106e615724565b6001600160a01b03929092168252602082015260400190565b8181038181111561106e5761106e615724565b6001600160a01b039586168152938516602085015260408401929092526060830152909116608082015260a00190565b808202811582820484141761106e5761106e615724565b6000826157dd57634e487b7160e01b600052601260045260246000fd5b500490565b9283526020830191909152604082015260600190565b60005b838110156158135781810151838201526020016157fb565b50506000910152565b600081518084526158348160208601602086016157f8565b601f01601f19169290920160200192915050565b6001600160a01b038516815260806020820181905260009061586c90830186615200565b82810360408401528451808252602080870192019060005b818110156158a2578351835260209384019390920191600101615884565b505083810360608501526158b6818661581c565b98975050505050505050565b600082516158d48184602087016157f8565b9190910192915050565b6020815260006124c2602083018461581c56fe21e6ad38ea5ca89af03560d16f1da9e505dccbd1ec61d0683be425888164fec31072be0ffac0739a43e2bbe8b9b7dd277f79e5eed4fc2bac67005b3f09118a7def1528bd6b0f43c4ad46f8ba3f79dd3c19967fed33d44b75a620f289a9b2b63f656de32df98753b07482576beb0d00a6b949ebf84c066c765f54f26725221bb6a7ec62784904ff31cbcc32d09932a58e7f1e4476e1d041995b37c917990b16dc129eccdfbcf3761d8e2f66393221fa8277b7623ad13ed7693a0025435931c64a29f7fcd4fe2517c1963807a1ec27b0e45e67c60a874d5eeac7a0b1ab1bb844476a7b588c950d46e2de3db2f157e5e0e4f29054c8d60f17bf0c30352e223a458d3d9bb16e77837e25cada0cf894835418b38e8e18fbec6cfd192eb344bebfa6b8efd7c7d9ef1040fc87e7ad11fe15f86e1d11e1df03c6d7c87f7e1f4041f08d4111b8e2ade018b082c0f17123af08137fdf13800d50b83fda08b49ba4ca2aa5cddae0aafd977983cb1e78d8f638900ff361dc3c48c43118ca1dd77d1af3f47bbfc403216a7704d160f6a3b5c3b149a1226a6080f0a5dd27b27d9ba9c022fa0afc414c5263b05428f1be1bfa98e25407cc78dd031d0d3cd2a2e3d63b488804f22ea07a20a2d463a602c2b891eb35f244624d9068572811f63d0e094072fb54591a280539da846b4989609abdccfea039bd1453e4f710c670b29b9eeaca0730c1a21841be4c16015a744c9fbf595f7c6b32d40278c16c1fc7cf2de88c6348de44baa1709211eeccf8f4ad5b6700d52a1a9525b5f5ae1e9e5f9e5a0c2fc23c86e530000000000000000000000000ba12222222228d8ba445958a75a0704d566bf2c80af7af9f5ccfa82c3497f40c7c382677637aee27293a6243a22216b51481bd97a65533f4b41f3786d877c8fdd4ae6d27ada84e1d9c62ea3aca309e9aa03af1cda9dc538e563d9581dd26a09bae7f821924cec58d0811f80e8462740f2adab4c7a264697066735822122003dd350e644502f28ffc196bde826aec49daaac7a5e170bafdd1a69a5e522e7164736f6c634300081a0033