0 txs
26 calls
constructor
No constructor.
functions
allTokens
viewfunction allTokens() view returns (address[])
asset
viewfunction asset() view returns (address)
assetYieldCoefficient
viewfunction assetYieldCoefficient() view returns (uint256, uint256)
aToken
purefunction aToken() pure returns (address)
collectedFees
viewfunction collectedFees() view returns (address[] tokens, uint256[] collected)
delayedWithdrawalAdapter
viewfunction delayedWithdrawalAdapter(address token) view returns (address)
description
viewfunction description() view returns (string)
FEE_MANAGER
viewfunction FEE_MANAGER() view returns (bytes32)
fees
viewfunction fees() view returns (uint8[] types, uint16[] bps)
globalRegistry
purefunction globalRegistry() pure returns (address)
GUARDIAN_MANAGER
viewfunction GUARDIAN_MANAGER() view returns (bytes32)
isDepositTokenSupported
viewfunction isDepositTokenSupported(address depositToken) view returns (bool)
isSpecialWithdrawalSupported
viewfunction isSpecialWithdrawalSupported(uint256 withdrawalCode) view returns (bool)
LIQUIDITY_MINING_MANAGER
viewfunction LIQUIDITY_MINING_MANAGER() view returns (bytes32)
maxDeposit
viewfunction maxDeposit(address depositToken) view returns (uint256)
maxWithdraw
viewfunction maxWithdraw() view returns (address[], uint256[])
pool
viewfunction pool() view returns (address)
registry
viewfunction registry() view returns (address)
rescueConfig
viewfunction rescueConfig() view returns (uint16 feeBps, address feeRecipient, uint8 status)
rewardEmissionsPerSecondPerAsset
viewfunction rewardEmissionsPerSecondPerAsset() view returns (uint256[], uint256[])
rewards
viewfunction rewards() view returns (address)
strategyId
viewfunction strategyId() view returns (uint96)
supportedDepositTokens
viewfunction supportedDepositTokens() view returns (address[])
supportedSpecialWithdrawals
viewfunction supportedSpecialWithdrawals() view returns (uint256[])
supportedWithdrawals
viewfunction supportedWithdrawals() view returns (uint8[])
supportsInterface
purefunction supportsInterface(bytes4 interfaceId) pure returns (bool)
TOS_MANAGER
viewfunction TOS_MANAGER() view returns (bytes32)
totalAssetsInFarm
viewfunction totalAssetsInFarm() view returns (uint256)
totalBalances
viewfunction totalBalances() view returns (address[] tokens, uint256[] balances)
validatePositionCreation
viewfunction validatePositionCreation(address sender, bytes creationData) view
vault
viewfunction vault() view returns (address)
cancelRescue
nonpayablefunction cancelRescue()
claimAndDepositAssetRewards
nonpayablefunction claimAndDepositAssetRewards() returns (uint256 amountToClaim)
confirmRescue
nonpayablefunction confirmRescue()
deposited
payablefunction deposited(address depositToken, uint256 depositAmount) payable returns (uint256 assetsDeposited)
init
nonpayablefunction init(bytes tosData, bytes guardianData, bytes feesData, string description_)
maxApprovePool
nonpayablefunction maxApprovePool()
migrateToNewStrategy
nonpayablefunction migrateToNewStrategy(address newStrategy, bytes migrationData) returns (bytes)
rescue
nonpayablefunction rescue(address feeRecipient) returns (address[] tokens, uint256[] rescued)
specialWithdraw
nonpayablefunction specialWithdraw(uint256 positionId, uint256 withdrawalCode, uint256[] toWithdraw, bytes withdrawalData, address recipient) returns (uint256[] balanceChanges, address[] actualWithdrawnTokens, uint256[] actualWithdrawnAmounts, bytes result)
specialWithdrawFees
nonpayablefunction specialWithdrawFees(uint256 withdrawalCode, uint256[] toWithdraw, bytes withdrawData, address recipient) returns (uint256[] balanceChanges, address[] actualWithdrawnTokens, uint256[] actualWithdrawnAmounts, bytes result)
strategyRegistered
nonpayablefunction strategyRegistered(uint96 strategyId_, address oldStrategy, bytes migrationResultData)
withdraw
nonpayablefunction withdraw(uint256 positionId, address[] tokens, uint256[] toWithdraw, address recipient) returns (uint8[])
withdrawFees
nonpayablefunction withdrawFees(address[] tokens, uint256[] toWithdraw, address recipient)
events
Initialized
event Initialized(uint64 version)
errors
CallerCantPerformAction
error CallerCantPerformAction()
CantWithdrawFees
error CantWithdrawFees()
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InvalidDepositToken
error InvalidDepositToken(address invalidToken)
InvalidInitialization
error InvalidInitialization()
InvalidRescueStatus
error InvalidRescueStatus()
InvalidSpecialWithdrawalCode
error InvalidSpecialWithdrawalCode(uint256 invalidCode)
InvalidTokens
error InvalidTokens()
NotEnoughFees
error NotEnoughFees()
NotInitializing
error NotInitializing()
OnlyImmediateWithdrawalsSupported
error OnlyImmediateWithdrawalsSupported()
OnlyStrategyRegistry
error OnlyStrategyRegistry()
OnlyVault
error OnlyVault()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
WithdrawMustBeImmediate
error WithdrawMustBeImmediate()
creation bytecode
0x6080806040523460155761594a908161001a8239f35b5f80fdfe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806301ffc9a7146102d9578063034db235146102d457806316f0115b146102cf57806316f3542a146102ca57806317417e0e146102c5578063222142d0146102c05780632968766e146102bb5780632a7c0847146102b657806331f91a84146102b1578063326c3681146102ac57806338d52e0f146102a75780633c5343b7146102a2578063402d267d1461029d578063441e13e214610298578063492f4e18146102935780634acf47d01461028e578063688e89c1146102895780636b6b97cd146102845780636d13e02c1461027f5780636eb7e8721461027a5780636ff97f1d146102755780637284e416146102705780637b1039991461026b578063831b67c014610266578063839006f2146102615780639003adfe1461025c5780639af1d35a146102575780639ec5a89414610252578063a0c1f15e1461024d578063a129ca4a14610248578063a69a2ad114610243578063ac7a1b5b1461023e578063ba4ddbdf14610239578063bf9766fe14610234578063d52bacf31461022f578063daa8bfdd1461022a578063dae864cf14610225578063db56b10114610220578063de7008061461021b578063e808a8b814610216578063ea26266c14610211578063f50cd5f81461020c578063fa4c5453146102075763fbfa77cf0361000e57612813565b61279b565b6126f3565b6126b9565b6126a1565b612611565b6125e7565b6125cc565b6125a5565b61251c565b612455565b61240d565b6123e2565b61233b565b612149565b612122565b6120fb565b611f84565b611e72565b611bfb565b611b5a565b611b2f565b611a41565b611920565b611743565b611709565b61158e565b611491565b611457565b61142d565b61125a565b6111ea565b610f3f565b610e92565b610cc9565b610b1c565b6107f7565b6107a1565b6105d1565b610459565b610424565b6103f0565b6103c0565b346103ab5760206003193601126103ab576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036103ab57807ff2670b730000000000000000000000000000000000000000000000000000000060209214908115610381575b8115610357575b506040519015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150145f61034c565b7fe8662db90000000000000000000000000000000000000000000000000000000081149150610345565b5f80fd5b6001600160a01b038116036103ab57565b346103ab5760206003193601126103ab576103dc6004356103af565b60206040515f8152f35b5f9103126103ab57565b346103ab575f6003193601126103ab57602060506104176001198036013560f01c36030190565b013560601c604051908152f35b346103ab5760206003193601126103ab576020600435801590811561044e57506040519015158152f35b60019150145f61034c565b346103ab575f6003193601126103ab5760206040517f585fc1073b6cfa774673b8c567d17fb3595441dcb101cca207779783ece150808152f35b9181601f840112156103ab5782359167ffffffffffffffff83116103ab576020808501948460051b0101116103ab57565b9181601f840112156103ab5782359167ffffffffffffffff83116103ab57602083818601950101116103ab57565b9081518082526020808093019301915f5b828110610511575050505090565b835185529381019392810192600101610503565b9081518082526020808093019301915f5b828110610544575050505090565b83516001600160a01b031685529381019392810192600101610536565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b926105b26105ce95936105a46105c0946080885260808801906104f2565b908682036020880152610525565b9084820360408601526104f2565b916060818403910152610561565b90565b346103ab5760a06003193601126103ab5767ffffffffffffffff6044358181116103ab57610603903690600401610493565b90916064359081116103ab5761061d9036906004016104c4565b50506084359061062c826103af565b61063f6001198036013560f01c36030190565b3560601c33036107775761065592602435614fec565b90919261066f610663613ef4565b6001600160a01b031690565b6bffffffffffffffffffffffff5f54166106888361293e565b51823b156103ab576040517f740d45200000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9290921660048301526024820152905f908290604490829084905af1801561077257610759575b506106f36137ea565b518151810361071457509061071091925b60405194859485610586565b0390f35b61072090949194612a72565b915f5b855181101561074b57806107396001928861294b565b51610744828761294b565b5201610723565b509093506107109192610704565b8061076661076c926119cd565b806103e6565b5f6106ea565b6129a7565b60046040517f8d1af8bd000000000000000000000000000000000000000000000000000000008152fd5b346103ab5760206003193601126103ab5760206107c86004356107c3816103af565b61310e565b6040519015158152f35b90916107e96105ce936040845260408401906104f2565b9160208184039101526104f2565b346103ab575f6003193601126103ab576001600160a01b036bffffffffffffffffffffffff5f5416610827613ef4565b61082f6151f7565b939061083961542b565b9290931660408051937f26a5bea800000000000000000000000000000000000000000000000000000000855260045f868061088c8b600483019190916bffffffffffffffffffffffff6020820193169052565b0381875afa958615610772575f96610af8575b506108b56108b0865188519061320d565b612a72565b956108c66108b0875183519061320d565b975f5b875181101561090957806108f7818e8c6108f1836108ea8f9860019961294b565b519261294b565b5261294b565b51610902828d61294b565b52016108c9565b508a919293959961091f6109329698519761293e565b5160019687969187811890881002871890565b945f975b610969575b5050505050505050826107109394955051811061095e575b5051928392836107d2565b808452845284610953565b8098979851891015610af05761098f6109828a8361294b565b516001600160a01b031690565b8d8b805180927f74168e0700000000000000000000000000000000000000000000000000000000825281806109eb878b8b84019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b03915afa918215610772578d928f928e89915f915f94610abc575b5050914211610ab4575b610a1a9192613f7e565b929015610a77575091610a6e82610a68610a578d9e9f958d8f98610a4a8f610a44610a519561323e565b9061294b565b5190614c8d565b9261323e565b91610a62838661294b565b5161320d565b9261294b565b525b0197610936565b9b9150610aae8b8b9c94610a9e8d96610a688e6c0c9f2c9cd04674edea4000000097614b77565b52610aa881613230565b9d61294b565b52610a70565b5f9150610a10565b610ae093945080919250903d10610ae9575b610ad88183611a1e565b81019061321a565b91908f80610a06565b503d610ace565b87985061093b565b610b159196503d805f833e610b0d8183611a1e565b81019061314e565b945f61089f565b346103ab5760606003193601126103ab57600467ffffffffffffffff81358181116103ab57610b4e9036908401610493565b916024359081116103ab57610b669036908501610493565b60443592610b73846103af565b610bc5610b7e6132e4565b94610ba9610b8a61404f565b610b98989198368b8861286b565b610ba336898b6128c3565b90613430565b610bb436888561286b565b610bbf3686886128c3565b906141fb565b9380518603610ca0575f5b868110610bd957005b610be6610982828461294b565b6001600160a01b03610c04610663610bff858c89612968565b612978565b911603610c7757610c16818587612968565b35151580610c54575b610c2b57600101610bd0565b876040517ff00866c7000000000000000000000000000000000000000000000000000000008152fd5b50610c67610c62828861294b565b612982565b610c7081610ee6565b1515610c1f565b876040517f672215de000000000000000000000000000000000000000000000000000000008152fd5b866040517f672215de000000000000000000000000000000000000000000000000000000008152fd5b346103ab5760806003193601126103ab5767ffffffffffffffff6004356024358281116103ab57610cfe903690600401610493565b926044359081116103ab57610d179036906004016104c4565b505060643592610d26846103af565b610d2e6132e4565b610d3661404f565b909460ff60025460b01c16610d4a81612403565b8015159081610e7d575b50610e535780158015610e49575b15610e16575061071093929161070491610d956106636028610d8d6001198036013560f01c36030190565b013560601c90565b97610da7610da1614686565b51612a72565b978891610e076001600160a01b03610dbd612a47565b9c610de4610ddb610dcc612a47565b9b610dd5614d1c565b9d61295f565b35809583614893565b83610dee8761293e565b5216610df98d61293e565b906001600160a01b03169052565b610e108761293e565b52613430565b6040517fb3f26d5d0000000000000000000000000000000000000000000000000000000081526004810191909152602490fd5b5060018114610d62565b60046040517f2311b472000000000000000000000000000000000000000000000000000000008152fd5b60019150610e8a81612403565b14155f610d54565b346103ab575f6003193601126103ab576020603c6104176001198036013560f01c36030190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60021115610ef057565b610eb9565b60209060206040818301928281528551809452019301915f5b828110610f1c575050505090565b909192938451906002821015610ef0579081528201938201929190600101610f0e565b346103ab5760806003193601126103ab5767ffffffffffffffff6024358181116103ab57610f71903690600401610493565b916044359081116103ab57610f8a903690600401610493565b9190610f976064356103af565b610faa6001198036013560f01c36030190565b3560601c330361077757916bffffffffffffffffffffffff5f541692610fce613ef4565b94610fd7614686565b91610fe28351612a72565b94610fed858361295f565b3594851515936001600160a01b038a169160015b8281106110415750505050505061102a575b61071061101e613da3565b60405191829182610ef5565b61103794606435946145e1565b5f80808080611013565b61104c818388612968565b3561105b610bff838689612968565b604080517f8e6e20a90000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff8f1660048201526001600160a01b039290921660248301529190602080826044818b5afa8015610772576110d39284925f926111bd575b5050808218908211021890565b9182611123575b50895183106110ee575b5050600101611001565b906110f89161324c565b611102828c61294b565b5261110d818b61294b565b5161111a575b5f806110e4565b60019650611113565b611131610bff85888b612968565b873b156103ab5790517f5612785a0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff8f1660048201526001600160a01b0391821660248201526044810184905260648035909216918101919091525f81608481838b5af1801561077257156110da57806107666111b7926119cd565b5f6110da565b6111dc9250803d106111e3575b6111d48183611a1e565b810190612aa3565b5f806110c6565b503d6111ca565b346103ab5760206003193601126103ab57600435611207816103af565b6112108161310e565b156112205760206040515f198152f35b6024906001600160a01b03604051917f41756256000000000000000000000000000000000000000000000000000000008352166004820152fd5b346103ab575f6003193601126103ab576002805460b01c60ff1661127d81612403565b03610e53576bffffffffffffffffffffffff5f541661129d610663613661565b6040517fef4caa830000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152336024820152602081604481855afa908115610772575f916113fe575b50156113d457611335611305614686565b61132f61131e6113176109828461293e565b3090613718565b61132a6109828461293e565b614798565b506137a8565b156113cb5761136360015b61135e61134b612844565b915f83525f6020840152604083016129b2565b6129be565b803b156103ab576040517f794350640000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152905f908290602490829084905af18015610772576113be57005b80610766610018926119cd565b6113635f611340565b60046040517f70bd5300000000000000000000000000000000000000000000000000000000008152fd5b611420915060203d602011611426575b6114188183611a1e565b81019061298f565b5f6112f4565b503d61140e565b346103ab575f6003193601126103ab5760206bffffffffffffffffffffffff5f5416604051908152f35b346103ab575f6003193601126103ab5760206040517f04f51a4c4a4cf53ba4f53f09da86706c7e9f45dbe97807ec7c84e2f7701146018152f35b60406003193601126103ab576004356114a9816103af565b6114bc6001198036013560f01c36030190565b3560601c3303610777576114d390602435906154af565b6001600160a01b036114e3613ef4565b16906bffffffffffffffffffffffff5f541691803b156103ab576040517f3b1bc9570000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff939093166004840152602483018290525f908390604490829084905af1918215610772576107109261156e575b506040519081529081906020820190565b611577906119cd565b5f61155d565b9060206105ce928181520190610561565b346103ab5760406003193601126103ab576004356115ab816103af565b60243567ffffffffffffffff81116103ab576115cb9036906004016104c4565b50506001600160a01b0390816115df612b16565b1633036116df577fffffffffffffffffffffffffffffffffffffffff0000000000000000000000005f54165f556116276106636028610d8d6001198036013560f01c36030190565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152906020826024818785165afa908115610772576107109461169c946116aa945f946116b6575b50918391611688931690614893565b604051928391602083019190602083019252565b03601f198101835282611a1e565b6040519182918261157d565b61168893919294506116d69060203d6020116111e3576111d48183611a1e565b93919092611679565b60046040517f8cec1de2000000000000000000000000000000000000000000000000000000008152fd5b346103ab575f6003193601126103ab5760206040517fe72db512f617f63e889242cd75fa9e0d2876dc0efa5932893da1cf5a9a0624aa8152f35b346103ab575f6003193601126103ab576117666001198036013560f01c36030190565b606481013560601c611776612a47565b61178a602884013560601c610df98361293e565b603c83013560601c92604051927f70674ab9000000000000000000000000000000000000000000000000000000008452602084806117cd88308860048501612ab2565b0381845afa938415610772575f946118ee575b50836117f2575b604051848152602090f35b803b156103ab57845f9161183994836040518097819582947f236300dc0000000000000000000000000000000000000000000000000000000084528b309160048601612ae1565b03925af1918215610772576050926118db575b50013560601c803b156103ab576040517f617ba0370000000000000000000000000000000000000000000000000000000081526001600160a01b03939093166004840152602483018290523060448401525f60648401819052908390608490829084905af191821561077257610710926118c8575b80806117e7565b806107666118d5926119cd565b5f6118c1565b806107666118e8926119cd565b5f61184c565b61190891945060203d6020116111e3576111d48183611a1e565b925f6117e0565b9060206105ce928181520190610525565b346103ab575f6003193601126103ab5761071061193b6137ea565b604051918291602083526020830190610525565b90600182811c92168015611996575b602083101461196957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f169161195e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116119e157604052565b6119a0565b6060810190811067ffffffffffffffff8211176119e157604052565b6080810190811067ffffffffffffffff8211176119e157604052565b90601f601f19910116810190811067ffffffffffffffff8211176119e157604052565b346103ab575f6003193601126103ab576040515f600354611a618161194f565b80845290602090600190818116908115611ae75750600114611a8e575b610710856116aa81870382611a1e565b60035f90815293507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b838510611ad4575050505081016020016116aa82610710611a7e565b8054868601840152938201938101611ab8565b869550610710969350602092506116aa9491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b8201019293611a7e565b346103ab575f6003193601126103ab576020611b49612b16565b6001600160a01b0360405191168152f35b346103ab5760806003193601126103ab5767ffffffffffffffff6004358181116103ab57611b8c9036906004016104c4565b906024358381116103ab57611ba59036906004016104c4565b906044358581116103ab57611bbe9036906004016104c4565b9290916064359687116103ab57611bdc6100189736906004016104c4565b969095612ba3565b90916107e96105ce93604084526040840190610525565b346103ab5760206003193601126103ab576004803590611c1a826103af565b60025460b01c60ff1691611c2d83612403565b60038314611e49576bffffffffffffffffffffffff5f541690611c51610663613661565b9060409485517ff5dbed1400000000000000000000000000000000000000000000000000000000815260208180611caf33898b84019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b0381875afa908115610772575f91611e2a575b5015611e025780611cd4600292612403565b03611d3c575b505050611ce561559e565b929091611d02611cfe611cf93087876149c4565b613ac1565b1590565b611d155750610710905192839283611be4565b90517fac4984c7000000000000000000000000000000000000000000000000000000008152fd5b611d8a90611d7f611d596060611d50613aee565b015161ffff1690565b91611d6f611d65612844565b61ffff9094168452565b6001600160a01b03166020830152565b6002818701526129be565b803b156103ab5783517f258eef130000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9092168383019081525f91839182908490829060200103925af1801561077257611def575b8080611cda565b80610766611dfc926119cd565b5f611de8565b8486517f70bd5300000000000000000000000000000000000000000000000000000000008152fd5b611e43915060203d602011611426576114188183611a1e565b5f611cc2565b506040517f2311b472000000000000000000000000000000000000000000000000000000008152fd5b346103ab575f6003193601126103ab57611e8a613aee565b611e9261404f565b611e9c8251612a72565b926040015f5b8351811015611eed5780611edc6001600160a01b03611ec36001948861294b565b5116611ecf838761294b565b5161ffff86511691613ba8565b611ee6828861294b565b5201611ea2565b50505061071060405192839283611be4565b604081019060408152825180925260608101916020809401905f5b818110611f5f57505050828183039101528180845192838152019301915f5b828110611f47575050505090565b835161ffff1685529381019392810192600101611f39565b909194938551906005821015610ef05790815293949385019385019190600101611f1a565b346103ab575f6003193601126103ab57611f9c613aee565b611fa4613c93565b611fac613c93565b915f9061ffff611fbe825161ffff1690565b166120c2575b80602060609201611fe1611fda825161ffff1690565b61ffff1690565b6120a2575b5060408101611ffa611fda825161ffff1690565b61206e575b5001612010611fda825161ffff1690565b61202a575b50808252825261071060405192839283611eff565b61204c6120689161204461203e858761294b565b60039052565b5161ffff1690565b61205f61205884613230565b938661294b565b9061ffff169052565b5f612015565b61208961209c915f612080878961294b565b525161ffff1690565b61205f61209586613230565b958861294b565b5f611fff565b6120896120bc916120446120b6878961294b565b60029052565b5f611fe6565b90506120d66120d08361293e565b60019052565b60606120e4825161ffff1690565b916120f460019361205f8761293e565b9050611fc4565b346103ab575f6003193601126103ab57602060646104176001198036013560f01c36030190565b346103ab575f6003193601126103ab57602060286104176001198036013560f01c36030190565b346103ab575f6003193601126103ab57612161612fcd565b6002604082015161217181612403565b61217a81612403565b03610e53576bffffffffffffffffffffffff5f541661219a610663613661565b6040517f1838fe0f0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152336024820152602081604481855afa908115610772575f9161231c575b50156113d45761223d7603000000000000000000000000000000000000000000007fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff6002541617600255565b803b156103ab576040517f88bb34d50000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9290921660048301525f908290602490829084905af1801561077257612309575b506122a1614686565b60208201915f5b8251811015610018576001906123036122e56122d0306122cb610982868a61294b565b613718565b6122df611fda875161ffff1690565b90614c13565b6122f2610982848861294b565b87516001600160a01b031690613cbf565b016122a8565b80610766612316926119cd565b5f612298565b612335915060203d602011611426576114188183611a1e565b5f6121f1565b346103ab575f6003193601126103ab57612353613aee565b61235b61404f565b90916040015f5b83518110156123c8576123996001600160a01b03612380838761294b565b511661238c838661294b565b5161ffff85511691613ba8565b906123a4818561294b565b519182039182116123c3576001916123bc828661294b565b5201612362565b6131d2565b6123d28385614d3f565b9061071060405192839283611be4565b346103ab575f6003193601126103ab576123d26123fd61559e565b90614d3f565b60041115610ef057565b346103ab575f6003193601126103ab57606060025460ff8160b01c166001600160a01b036040519261ffff8116845260101c16602083015261244e81612403565b6040820152f35b346103ab5760406003193601126103ab57600435612472816103af565b60243567ffffffffffffffff81116103ab576124929036906004016104c4565b916001600160a01b0390816124a561493a565b16906bffffffffffffffffffffffff5f5416823b156103ab5761250c5f95604051978896879586957f134ab1950000000000000000000000000000000000000000000000000000000087526004870152166024850152606060448501526064840191613923565b03915afa8015610772576113be57005b346103ab575f6003193601126103ab57604051612538816119e6565b60028152602080820160403682378251156125a0575f8152825192600193600110156125a05783836001604084015260405192602084019060208552518091526040840194915f5b82811061258d5785870386f35b8351875295810195928101928401612580565b612911565b346103ab575f6003193601126103ab57602060146104176001198036013560f01c36030190565b346103ab575f6003193601126103ab5761071061101e613da3565b346103ab575f6003193601126103ab576125ff613df6565b60408051928352602083019190915290f35b346103ab575f6003193601126103ab5760046020602861263a6001198036013560f01c36030190565b013560601c604051928380927f18160ddd0000000000000000000000000000000000000000000000000000000082525afa8015610772576020915f91612684575b50604051908152f35b61269b9150823d84116111e3576111d48183611a1e565b5f61267b565b346103ab575f6003193601126103ab5761001861300d565b346103ab575f6003193601126103ab5760206040517f8e24cef3d118e2320bff2d4ac4e82fd5ff0dd3a6e6044ca19f91cd3b6f84750e8152f35b346103ab5760606003193601126103ab576004356bffffffffffffffffffffffff811681036103ab576127276024356103af565b60443567ffffffffffffffff81116103ab576127479036906004016104c4565b50506001600160a01b03612759612b16565b1633036116df57610018906bffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000005f5416175f55565b346103ab575f6003193601126103ab576040516127b7816119e6565b60028152602081019060403683376127d86001198036013560f01c36030190565b918151156125a057603c83013560601c90528051600110156125a0576028919091013560601c6040820152610710906040519182918261190f565b346103ab575f6003193601126103ab5760206128386001198036013560f01c36030190565b3560601c604051908152f35b60405190612851826119e6565b565b67ffffffffffffffff81116119e15760051b60200190565b929161287682612853565b916128846040519384611a1e565b829481845260208094019160051b81019283116103ab57905b8282106128aa5750505050565b83809183356128b8816103af565b81520191019061289d565b92916128ce82612853565b916128dc6040519384611a1e565b829481845260208094019160051b81019283116103ab57905b8282106129025750505050565b813581529083019083016128f5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051156125a05760200190565b80518210156125a05760209160051b010190565b90156125a05790565b91908110156125a05760051b0190565b356105ce816103af565b516002811015610ef05790565b908160209103126103ab575180151581036103ab5790565b6040513d5f823e3d90fd5b6129bb82612403565b52565b61ffff81511690600254917fffffffffffffffffff000000000000000000000000000000000000000000000076ff00000000000000000000000000000000000000000000604075ffffffffffffffffffffffffffffffffffffffff0000602086015160101b16940151612a3081612403565b612a3981612403565b60b01b169316171717600255565b604051906040820182811067ffffffffffffffff8211176119e1576040526001825260203681840137565b90612a7c82612853565b612a896040519182611a1e565b828152601f19612a998294612853565b0190602036910137565b908160209103126103ab575190565b91612aca604092959495606085526060850190610525565b946001600160a01b03809216602085015216910152565b929093612afa6060939695608086526080860190610525565b9560208501526001600160a01b03809216604085015216910152565b60046020612b2d6001198036013560f01c36030190565b3560601c604051928380927f8f75315b0000000000000000000000000000000000000000000000000000000082525afa908115610772575f91612b6e575090565b90506020813d602011612b9b575b81612b8960209383611a1e565b810103126103ab57516105ce816103af565b3d9150612b7c565b969492909593917ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009687549860ff8a60401c16159967ffffffffffffffff811680159081612d53575b6001149081612d49575b159081612d40575b50612d1657612c399960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008d9316179055612cba57612ea7565b612c3f57565b612c8b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff8154169055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1565b612d117ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff825416179055565b612ea7565b60046040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b9050155f612bfe565b303b159150612bf6565b8c9150612bec565b601f8111612d67575050565b60035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b906020601f840160051c83019310612dbe575b601f0160051c01905b818110612db3575050565b5f8155600101612da8565b9091508190612d9f565b919067ffffffffffffffff81116119e157612ded81612de860035461194f565b612d5b565b5f601f8211600114612e2a578190612e1a93945f92612e1f575b50505f198260011b9260031b1c19161790565b600355565b013590505f80612e07565b60035f52601f198216937fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f5b868110612e8f5750836001959610612e76575b505050811b01600355565b5f1960f88560031b161c199101351690555f8080612e6b565b90926020600181928686013581550194019101612e58565b9197969594929097612eb76148e1565b612ebf61493a565b926001600160a01b035f9416803b156103ab576040518080937f35088889000000000000000000000000000000000000000000000000000000009d8e83526004830191612f0b92613943565b03815a5f948591f1801561077257612fba575b50612f276148e1565b612f4a604051612f36816119e6565b8481525f60208201525f60408201526129be565b612f55610663613661565b90813b15612fb65783612f78999a6040519a8b9586948593845260048401613943565b03925af19182156107725761285195612f9693612fa3575b50613954565b612f9e613ab1565b612dc8565b80610766612fb0926119cd565b5f612f90565b8380fd5b612fc59193506119cd565b5f915f612f1e565b60405190612fda826119e6565b81604060ff60025461ffff811684526001600160a01b038160101c16602085015260b01c169161300983612403565b0152565b6130206001198036013560f01c36030190565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000060208083018281526050850135606090811c602486018190525f1960448088019190915286529395603c0135901c92601f199290915f90613086606488611a1e565b86519082875af15f513d826130f2575b5050156130a5575b5050505050565b60405160208101959095526001600160a01b031660248501525f6044850152606490810184526130e8936130e3916130dd9082611a1e565b82614f7a565b614f7a565b5f8080808061309e565b9091506131065750823b15155b5f80613096565b6001146130ff565b6001600160a01b036131296001198036013560f01c36030190565b9116603c82013560601c811491821561314157505090565b6028013560601c14919050565b60209081818403126103ab5780519067ffffffffffffffff82116103ab57019180601f840112156103ab57825161318481612853565b936131926040519586611a1e565b818552838086019260051b8201019283116103ab578301905b8282106131b9575050505090565b83809183516131c7816103af565b8152019101906131ab565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90600182018092116123c357565b919082018092116123c357565b91908260409103126103ab576020825192015190565b5f1981146123c35760010190565b905f1982019182116123c357565b919082039182116123c357565b6040519061326682611a02565b5f6060838281528260208201528260408201520152565b519061ffff821682036103ab57565b908160809103126103ab576132dc6060604051926132a984611a02565b6132b28161327d565b84526132c06020820161327d565b60208501526132d16040820161327d565b60408501520161327d565b606082015290565b6132ec613259565b506bffffffffffffffffffffffff5f5416613308610663613fc5565b6040517f7c4d3fef0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152336024820152602081604481855afa908115610772575f91613411575b50156133e7576040517f4a79e4d90000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff929092166004830152608090829060249082905afa908115610772575f916133be575090565b6105ce915060803d6080116133e0575b6133d88183611a1e565b81019061328c565b503d6133ce565b60046040517f463396db000000000000000000000000000000000000000000000000000000008152fd5b61342a915060203d602011611426576114188183611a1e565b5f61335f565b91909392935f5b83518110156136445761344a818361294b565b518061345a575b50600101613437565b613467610982838761294b565b613471838661294b565b5191613492604092838b019461348c611fda875161ffff1690565b91613ba8565b9283821161361b57918493916001958861ffff6134b46135d3975161ffff1690565b16156135d9576134ea836134e46134df61353297966134d961352a976134ef9761294b565b5161324c565b6141a6565b9661324c565b614152565b6135126134fa612844565b6fffffffffffffffffffffffffffffffff9096168652565b6effffffffffffffffffffffffffffff166020850152565b820160019052565b613559613542610982858a61294b565b6001600160a01b03165f52600160205260405f2090565b8151602083015160409093015160809390931b7effffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161791151560f81b7fff0000000000000000000000000000000000000000000000000000000000000016919091179055565b90613451565b50506134ea6135ea915f939461324c565b916136136135f6612844565b8381526effffffffffffffffffffffffffffff9094166020850152565b820152613532565b600483517f156bbc5b000000000000000000000000000000000000000000000000000000008152fd5b505050509050565b908160209103126103ab57516105ce816103af565b60246020601461367a6001198036013560f01c36030190565b013560601c604051928380927fb407991c0000000000000000000000000000000000000000000000000000000082527f04f51a4c4a4cf53ba4f53f09da86706c7e9f45dbe97807ec7c84e2f77011460160048301525afa8015610772576001600160a01b03915f916136eb57501690565b61370d915060203d602011613711575b6137058183611a1e565b81019061364c565b1690565b503d6136fb565b6001600160a01b039081169073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee82036137455750503190565b60246020929360405194859384927f70a082310000000000000000000000000000000000000000000000000000000084521660048301525afa908115610772575f9161378f575090565b6105ce915060203d6020116111e3576111d48183611a1e565b60015b81518110156137e4576137d1306001600160a01b036137ca848661294b565b5116613718565b6137dd576001016137ab565b5050600190565b50505f90565b61384d6137f5614686565b5f613801610663613ef4565b81546040517f26a5bea80000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff909116600482015293849190829081906024820190565b03915afa918215610772575f92613907575b506138706108b0825184519061320d565b925f5b825181101561389f578061389961388f6109826001948761294b565b610df9838961294b565b01613873565b5091908051915f5b81518110156138f557806138c06109826001938561294b565b6138ca8582613f7e565b50156138d8575b50016138a7565b6138ef90610df96138e888613230565b978a61294b565b5f6138d1565b505050825181106139035750565b8252565b61391c9192503d805f833e610b0d8183611a1e565b905f61385f565b601f8260209493601f1993818652868601375f8582860101520116010190565b9160206105ce938181520191613923565b61395c6148e1565b613967610663613fc5565b5f54604080517f4a79e4d90000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff909216600483015291939190608081602481885afa80156107725760406139d39161ffff935f91613a92575b50015161ffff1690565b16613a3b575b50823b156103ab57613a1d925f92836040518096819582947f3508888900000000000000000000000000000000000000000000000000000000845260048401613943565b03925af1801561077257613a2e5750565b80610766612851926119cd565b939092613a46614686565b925f5b8451811015613a8557600190613a7f613a60612844565b5f808252602082015260018a820152613559613542610982858b61294b565b01613a49565b509250929093505f6139d9565b613aab915060803d6080116133e0576133d88183611a1e565b5f6139c9565b613ab96148e1565b61285161300d565b5f5b81518110156137dd57613ad9610c62828461294b565b6002811015610ef0576137e457600101613ac3565b613af6613259565b506001600160a01b03613b07613fc5565b1660806bffffffffffffffffffffffff5f54166024604051809481937f4a79e4d900000000000000000000000000000000000000000000000000000000835260048301525afa908115610772575f916133be575090565b818102929181159184041417156123c357565b8115613b7b570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b6001600160a01b0390929192165f52600160205260405f209060405191613bce836119e6565b549160406fffffffffffffffffffffffffffffffff84169182815260208101946effffffffffffffffffffffffffffff8160801c16865260f81c1515918291015280613c8a575b613c47575050516105ce91506effffffffffffffffffffffffffffff165b6effffffffffffffffffffffffffffff1690565b83039283116123c357613c33613c6e613c66613c84936105ce96613b5e565b612710900490565b92516effffffffffffffffffffffffffffff1690565b9061320d565b50808411613c15565b6040519060a0820182811067ffffffffffffffff8211176119e157604052600482526080366020840137565b9082613cca57505050565b6001600160a01b0391821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8103613d985750824710613d60575f809381938293165af13d15613d5b573d613d1281614d00565b90613d206040519283611a1e565b81525f60203d92013e5b15613d3157565b60046040517fd6bda275000000000000000000000000000000000000000000000000000000008152fd5b613d2a565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815247600482015260248101849052604490fd5b612851939250614893565b613dae610da1614686565b90613dba610da16137ea565b915f5b8151811015613df257613dd3610c62828461294b565b90613dde818661294b565b916002811015610ef0576001925201613dbd565b5050565b670de0b6b3a7640000613e1a6106636028610d8d6001198036013560f01c36030190565b604051907fb1bf962d0000000000000000000000000000000000000000000000000000000082526020908183600481845afa928315610772575f93613ed5575b508215613ecd57908060049392604051948580927f18160ddd0000000000000000000000000000000000000000000000000000000082525afa801561077257613ead9385925f92613eb0575b5050614c8d565b91565b613ec69250803d106111e3576111d48183611a1e565b5f80613ea6565b505050908190565b613eed919350823d84116111e3576111d48183611a1e565b915f613e5a565b602460206014613f0d6001198036013560f01c36030190565b013560601c604051928380927fb407991c0000000000000000000000000000000000000000000000000000000082527f585fc1073b6cfa774673b8c567d17fb3595441dcb101cca207779783ece1508060048301525afa8015610772576001600160a01b03915f916136eb57501690565b91909160015b8351811015613fbb576001600160a01b0380613fa0838761294b565b511690831614613fb257600101613f84565b92505060019190565b505090505f905f90565b602460206014613fde6001198036013560f01c36030190565b013560601c604051928380927fb407991c0000000000000000000000000000000000000000000000000000000082527f8e24cef3d118e2320bff2d4ac4e82fd5ff0dd3a6e6044ca19f91cd3b6f84750e60048301525afa8015610772576001600160a01b03915f916136eb57501690565b60025460b01c60ff1661406181612403565b80614073575061406f61559e565b9091565b9061407d82612403565b6001916001811490811561413e575b50156140ef5761409a61559e565b9190928083855f925b6140ae575b50505050565b80518310156140ea578380936140d86140ce306122cb610982858861294b565b610a62838761294b565b6140e2828661294b565b5201926140a3565b6140a8565b906140f8614686565b916141038351612a72565b915f815b61410f575050565b8451811015613df25781809161412c306122cb610982848b61294b565b614136828861294b565b520190614107565b6002915061414b81612403565b145f61408c565b6effffffffffffffffffffffffffffff9081811161416e571690565b604490604051907f6dfcc650000000000000000000000000000000000000000000000000000000008252607860048301526024820152fd5b6fffffffffffffffffffffffffffffffff908181116141c3571690565b604490604051907f6dfcc650000000000000000000000000000000000000000000000000000000008252608060048301526024820152fd5b919061420d60025460ff9060b01c1690565b61421681612403565b8061422557506105ce926149c4565b919061423083612403565b60019280840361436057506142488493929351612a72565b916142528261293e565b5161425c8461293e565b526142668261293e565b51151591815f9181935b6142ca575b5050905015614298575b61428f5750506105ce9051612a72565b6105ce926149c4565b6142c57fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff60025416600255565b61427f565b875184101561435b576109826142e0858361294b565b5161431d866142f78c6122cb61098284309361294b565b926143188d8d614313848818858910028518988996879461294b565b613cbf565b61324c565b614327878a61294b565b52614332868961294b565b51614352575b11614348575b9281019281614270565b909150819061433e565b95508295614338565b614275565b8061436c600392612403565b03610e53575f939291825b614389575b5050506105ce9150610da1565b83518510156143c05782856143b86143a66109828899859961294b565b846143b1848861294b565b5191613cbf565b019493614377565b61437c565b91906143d760025460ff9060b01c1690565b6143e081612403565b806143ef57506105ce926149c4565b91906143fa83612403565b6001928084036144c257506144128493929351612a72565b9161441c8261293e565b516144268461293e565b526144308261293e565b51151591815f9181935b6144575750509050156142985761428f5750506105ce9051612a72565b875184101561435b5761098261446d858361294b565b51614484866142f78c6122cb61098284309361294b565b61448e878a61294b565b52614499868961294b565b516144b9575b116144af575b928101928161443a565b90915081906144a5565b9550829561449f565b806144ce600392612403565b03610e53575f939291825b6144ea575050506105ce9150610da1565b83518510156143c05782856145076143a66109828899859961294b565b0194936144d9565b939091929360ff60025460b01c1661452681612403565b80151590816145cc575b50610e5357801580156145c2575b15610e16575061455f6106636028610d8d6001198036013560f01c36030190565b9361456b610da1614686565b906145b26001600160a01b0361457f612a47565b9761459d610ddb61458e612a47565b99614597614d1c565b9961295f565b836145a78661293e565b5216610df98861293e565b6145bb8561293e565b5293929190565b506001811461453e565b600191506145d981612403565b14155f614530565b909493929485614606575b50508151156125a0576146039360208301526157c2565b50565b6001600160a01b0316803b156103ab576040517f740d45200000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff929092166004830152602482018690525f908290604490829084905af1801561077257614677575b806145ec565b614680906119cd565b5f614671565b6146996001198036013560f01c36030190565b6040517f6657732f000000000000000000000000000000000000000000000000000000008152602882013560601c60048201529091905f8180602481010381606487013560601c5afa908115610772575f9161477e575b508051603c6147016108b0836131ff565b94013560601c9161471583610df98761293e565b6001906001935f5b84811061473a5750505050614731906131ff565b81036139035750565b8061474961098286938661294b565b836001600160a01b03821603614761575b500161471d565b61477890610df96147718a613230565b998c61294b565b5f61475a565b61479291503d805f833e610b0d8183611a1e565b5f6146f0565b6147ab6001198036013560f01c36030190565b6001600160a01b03821690603c81013560601c82036148475760509150013560601c803b156103ab576040517f617ba0370000000000000000000000000000000000000000000000000000000081526001600160a01b03929092166004830152602482018390523060448301525f60648301819052908290608490829084905af180156107725761483a575090565b806107666105ce926119cd565b6028013560601c03614857575090565b6040517f417562560000000000000000000000000000000000000000000000000000000081526001600160a01b03919091166004820152602490fd5b612851926001600160a01b03604051937fa9059cbb0000000000000000000000000000000000000000000000000000000060208601521660248401526044830152604482526130e382611a02565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561491057565b60046040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152fd5b6024602060146149536001198036013560f01c36030190565b013560601c604051928380927fb407991c0000000000000000000000000000000000000000000000000000000082527fe72db512f617f63e889242cd75fa9e0d2876dc0efa5932893da1cf5a9a0624aa60048301525afa8015610772576001600160a01b03915f916136eb57501690565b909291926149db6001198036013560f01c36030190565b606481013560601c94806149ee8461293e565b5180614ae6575b5050909194614a166028614a07612a47565b94013560601c610df98561293e565b60019586805b614a32575b50505050506105ce91925051612a72565b8551811015614ae1579081614a4b89969594938361294b565b5180614a5f575b5085019091929394614a1c565b9550614a6e610982828961294b565b95833b156103ab57845f91614ab1604051998a9384937f236300dc0000000000000000000000000000000000000000000000000000000085528b60048601612ae1565b038183875af19081156107725789968792614ace575b5090614a52565b80610766614adb926119cd565b5f614ac7565b614a21565b6040517f69328dec000000000000000000000000000000000000000000000000000000008152603c85013560601c600482015260248101919091526001600160a01b039091166044820152602081806064810103815f605088013560601c5af1801561077257614b58575b81906149f5565b614b709060203d6020116111e3576111d48183611a1e565b505f614b51565b906c0c9f2c9cd04674edea4000000090818302915f1981850993838086109503948086039514614c065784831115614bf95790829109815f038216809204600280826003021880830282030280830282030280830282030280830282030280830282030280920290030293600183805f03040190848311900302920304170290565b8215600302601118615711565b5050906105ce9250613b71565b90808202905f1981840990828083109203918083039214614c82576127109082821115614c70577fbc01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e91940990828211900360fc1b910360041c170290565b634e487b715f5260116020526024601cfd5b505061271091500490565b91818302915f1981850993838086109503948086039514614c065784831115614bf95790829109815f038216809204600280826003021880830282030280830282030280830282030280830282030280830282030280920290030293600183805f03040190848311900302920304170290565b67ffffffffffffffff81116119e157601f01601f191660200190565b604051906020820182811067ffffffffffffffff8211176119e1576040525f8252565b91906bffffffffffffffffffffffff5f541690614d5d610663613ef4565b92604092604051917f26a5bea80000000000000000000000000000000000000000000000000000000083526004955f8480614db086600483019190916bffffffffffffffffffffffff6020820193169052565b0381845afa938415610772575f94614f5e575b50614dd46108b0895186519061320d565b93614de56108b08a5183519061320d565b965f5b8a51811015614e2a5780614e0e614e046109826001948f61294b565b610df9838b61294b565b614e18818a61294b565b51614e23828c61294b565b5201614de8565b509297909398919695508151935f5b8151811015614f4157614e4f610982828461294b565b908186517f8e6e20a90000000000000000000000000000000000000000000000000000000081528d818d8180614eaf6020998a968d84019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b03915afa908115610772576001945f92614f24575b50508a614ed18884613f7e565b939015614ef95750614ef191610a6284614eea9361294b565b918b61294b565b525b01614e39565b9050614f0b919250610df98a8c61294b565b614f1e614f1789613230565b988b61294b565b52614ef3565b614f3a9250803d106111e3576111d48183611a1e565b5f80614ec4565b505050505091939250935083518110614f575750565b8084528252565b614f739194503d805f833e610b0d8183611a1e565b925f614dc3565b905f602091828151910182855af1156129a7575f513d614fe357506001600160a01b0381163b155b614fa95750565b6024906001600160a01b03604051917f5274afe7000000000000000000000000000000000000000000000000000000008352166004820152fd5b60011415614fa2565b919290926040916040614ffd613aee565b019161ffff61500e845161ffff1690565b161561518457906150299161502161404f565b97909661450f565b919083925f5b885181101561517757615042818b61294b565b5161504d828861294b565b516150579161324c565b615060906141a6565b61506a828b61294b565b516001600160a01b031661507e838d61294b565b51895161ffff1661ffff169061509392613ba8565b61509c90614152565b6150a4612844565b6fffffffffffffffffffffffffffffffff90921682526effffffffffffffffffffffffffffff1660208201526001818a01526150e0828b61294b565b516001600160a01b03165f9081526001602052604090208151602083015160409093015160809390931b7effffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161791151560f81b7fff000000000000000000000000000000000000000000000000000000000000001691909117905560010161502f565b5095509550955095915050565b9150915061519494929394614686565b945f5b86518110156151be57806151b86151b36109826001948b61294b565b615721565b01615197565b5090919294506151cd9361450f565b929391929091565b91908260809103126103ab578151916020810151916060604083015192015190565b61520a6001198036013560f01c36030190565b6028606482013560601c91013560601c91604092604051907f18160ddd000000000000000000000000000000000000000000000000000000008252600491602081600481855afa908115610772575f9161540c575b506040517f6657732f0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152916001918083109083180282185f846024818a5afa938415610772575f946153f0575b5083946152c6849551612a72565b986152d18751612a72565b985f955b6152e4575b5050505050505050565b87518610156153eb57856152fe61098261534f988b61294b565b908351917f7eff4ba8000000000000000000000000000000000000000000000000000000008352828060809a8b938b8a84019060209093929360408301946001600160a01b03809216845216910152565b0381865afa8015610772578998828f928f908a908d975f955f926153b4575b5050421115615384575b505050505001956152d5565b6153a9936c0c9f2c9cd04674edea400000006153a385610a689561294b565b52614b77565b528c5f828e89615378565b6153d893965080919250903d106153e4575b6153d08183611a1e565b8101906151d5565b95925050935f8061536e565b503d6153c6565b6152da565b839450615406903d805f833e610b0d8183611a1e565b936152b8565b615425915060203d6020116111e3576111d48183611a1e565b5f61525f565b615433613aee565b9061543c61404f565b926040019080845f5b83518110156154a65761547c6001600160a01b03615463838761294b565b511661546f838a61294b565b5161ffff88511691613ba8565b90615487818961294b565b519182039182116123c35760019161549f828a61294b565b5201615445565b50939250935050565b9060406154ba613aee565b019061ffff8251161561557857916135596135426109826128519461556c61553161552b6134df61551d615523610a629d9c6154f461404f565b9390986155036109828b61293e565b9061348c611fda6155138861293e565b51925161ffff1690565b9b61590a565b9c8d9161293e565b96614152565b61555461553c612844565b6fffffffffffffffffffffffffffffffff9098168852565b6effffffffffffffffffffffffffffff166020870152565b6001604086015261293e565b90506105ce916155996151b3603c610d8d6001198036013560f01c36030190565b61590a565b6155b16001198036013560f01c36030190565b6064602882013560601c91013560601c916155ca614686565b926155d58451612a72565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048083019190915292959293602092918381602481885afa908115610772575f916156f4575b5061562e8861293e565b5261564461563a612a47565b94610df98661293e565b6001948594855b615659575b50505050505050565b8980518710156156ee5785615674610982896156a79461294b565b8651809381927f70674ab90000000000000000000000000000000000000000000000000000000083523087898501612ab2565b0381875afa96871561077257889788925f916156d1575b506156c9828d61294b565b52019561564b565b6156e89150883d8a116111e3576111d48183611a1e565b5f6156be565b50615650565b61570b9150843d86116111e3576111d48183611a1e565b5f615624565b634e487b715f526020526024601cfd5b6001600160a01b0381165f52600160205260405f206040805191615744836119e6565b54916fffffffffffffffffffffffffffffffff831681526effffffffffffffffffffffffffffff8360801c169283602083015260f81c15159182910152615789575050565b613559612851926040519261579d846119e6565b5f845260208401525f60408401526001600160a01b03165f52600160205260405f2090565b909260409060406157d1613aee565b0161ffff6157e1825161ffff1690565b16156158d3576157ef61404f565b9290505f5b85518110156158c3578083858a8960019561580e8361293e565b51156158b9576134df61589d93615855836108ea8161584f8a6158b39c61348c611fda615513866158496158629f61585c9f6109829161294b565b9561294b565b9961294b565b519061324c565b92614152565b61588561586d612844565b6fffffffffffffffffffffffffffffffff9094168452565b6effffffffffffffffffffffffffffff166020830152565b600181890152613559613542610982858c61294b565b016157f4565b50505050506158b3565b5095925050506105ce92916143c5565b5091939290505f5b84518110156158fd57806158f76151b36109826001948961294b565b016158db565b509092916105ce926143c5565b9060ff60025460b01c1661591d81612403565b8015159081615935575b50610e53576105ce91614798565b6001915061594281612403565b14155f61592756