0 txs
48 calls
constructor
No constructor.
functions
allTokens
viewfunction allTokens() view returns (address[])
asset
viewfunction asset() view returns (address)
assetYieldCoefficient
viewfunction assetYieldCoefficient() view returns (uint256, uint256)
beefyVault
viewfunction beefyVault() view 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[])
registry
viewfunction registry() view returns (address)
rescueConfig
viewfunction rescueConfig() view returns (uint16 feeBps, address feeRecipient, uint8 status)
rewardEmissionsPerSecondPerAsset
viewfunction rewardEmissionsPerSecondPerAsset() view returns (uint256[], uint256[])
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()
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_)
maxApproveVault
nonpayablefunction maxApproveVault()
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
0x608080604052346015576154ec908161001a8239f35b5f80fdfe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806301ffc9a7146102a9578063034db235146102a45780630f0d65691461029f57806316f3542a1461029a57806317417e0e14610295578063222142d0146102905780632968766e1461028b5780632a7c08471461028657806331f91a8414610281578063326c36811461027c57806338d52e0f146102775780633c5343b714610272578063402d267d1461026d578063441e13e214610268578063492f4e18146102635780634acf47d01461025e578063688e89c1146102595780636b6b97cd146102545780636d13e02c1461024f5780636ff97f1d1461024a5780637284e416146102455780637b10399914610240578063831b67c01461023b578063839006f2146102365780639003adfe146102315780639af1d35a1461022c578063a129ca4a14610227578063a69a2ad114610222578063ac7a1b5b1461021d578063ba4ddbdf14610218578063bf9766fe14610213578063d52bacf31461020e578063daa8bfdd14610209578063dae864cf14610204578063db56b101146101ff578063de700806146101fa578063e8e5ccf3146101f5578063ea26266c146101f0578063f50cd5f8146101eb578063fa4c5453146101e65763fbfa77cf0361000e576125df565b612567565b6124bf565b612485565b61246d565b6123dd565b6123b3565b612398565b612371565b6122ed565b612226565b6121de565b6121b3565b61210c565b611f1a565b611da3565b611c91565b611a1b565b61197a565b61194f565b611861565b611724565b6116d9565b611561565b611464565b61142a565b611400565b61122d565b6111bd565b610f12565b610e65565b610c4e565b610a95565b610770565b61071a565b6105a1565b610429565b6103f4565b6103c0565b610390565b3461037b57602060031936011261037b576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361037b57807ff2670b730000000000000000000000000000000000000000000000000000000060209214908115610351575b8115610327575b506040519015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150145f61031c565b7fe8662db90000000000000000000000000000000000000000000000000000000081149150610315565b5f80fd5b6001600160a01b0381160361037b57565b3461037b57602060031936011261037b576103ac60043561037f565b60206040515f8152f35b5f91031261037b57565b3461037b575f60031936011261037b57602060286103e76001198036013560f01c36030190565b013560601c604051908152f35b3461037b57602060031936011261037b576020600435801590811561041e57506040519015158152f35b60019150145f61031c565b3461037b575f60031936011261037b5760206040517f585fc1073b6cfa774673b8c567d17fb3595441dcb101cca207779783ece150808152f35b9181601f8401121561037b5782359167ffffffffffffffff831161037b576020808501948460051b01011161037b57565b9181601f8401121561037b5782359167ffffffffffffffff831161037b576020838186019501011161037b57565b9081518082526020808093019301915f5b8281106104e1575050505090565b8351855293810193928101926001016104d3565b9081518082526020808093019301915f5b828110610514575050505090565b83516001600160a01b031685529381019392810192600101610506565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9261058261059e9593610574610590946080885260808801906104c2565b9086820360208801526104f5565b9084820360408601526104c2565b916060818403910152610531565b90565b3461037b5760a060031936011261037b5767ffffffffffffffff60443581811161037b576105d3903690600401610463565b909160643590811161037b576105ed903690600401610494565b5050608435906105fc8261037f565b61060f6001198036013560f01c36030190565b3560601c33036106f05761062592602435614cd2565b6001600160a01b03610638949394613c8f565b16916bffffffffffffffffffffffff5f54168451156106eb576020850151843b1561037b576040517f740d45200000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9290921660048301526024820152925f908490604490829084905af19283156106e6576106c9936106cd575b5060405194859485610556565b0390f35b806106da6106e0926117d1565b806103b6565b5f6106bc565b612773565b6126dd565b60046040517f8d1af8bd000000000000000000000000000000000000000000000000000000008152fd5b3461037b57602060031936011261037b57602061074160043561073c8161037f565b612e7d565b6040519015158152f35b909161076261059e936040845260408401906104c2565b9160208184039101526104c2565b3461037b575f60031936011261037b576001600160a01b036bffffffffffffffffffffffff5f54166107a0613c8f565b6107a8614ebb565b93906107b2614ecc565b9290931660408051937f26a5bea800000000000000000000000000000000000000000000000000000000855260045f86806108058b600483019190916bffffffffffffffffffffffff6020820193169052565b0381875afa9586156106e6575f96610a71575b5061082e6108298651885190612f6e565b612d0b565b9561083f6108298751835190612f6e565b975f5b87518110156108825780610870818e8c61086a836108638f98600199612717565b5192612717565b52612717565b5161087b828d612717565b5201610842565b508a91929395996108986108ab9698519761270a565b5160019687969187811890881002871890565b945f975b6108e2575b5050505050505050826106c9939495505181106108d7575b50519283928361074b565b8084528452846108cc565b8098979851891015610a69576109086108fb8a83612717565b516001600160a01b031690565b8d8b805180927f74168e070000000000000000000000000000000000000000000000000000000082528180610964878b8b84019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b03915afa9182156106e6578d928f928e89915f915f94610a35575b5050914211610a2d575b6109939192613d19565b9290156109f05750916109e7826109e16109d08d9e9f958d8f986109c38f6109bd6109ca95612f9f565b90612717565b5190614984565b92612f9f565b916109db8386612717565b51612f6e565b92612717565b525b01976108af565b9b9150610a278b8b9c94610a178d966109e18e6c0c9f2c9cd04674edea400000009761486e565b52610a2181612f91565b9d612717565b526109e9565b5f9150610989565b610a5993945080919250903d10610a62575b610a51818361183e565b810190612f7b565b91908f8061097f565b503d610a47565b8798506108b4565b610a8e9196503d805f833e610a86818361183e565b810190612ebd565b945f610818565b3461037b57606060031936011261037b57600467ffffffffffffffff813581811161037b57610ac79036908401610463565b9160243590811161037b57610adf9036908501610463565b60443592610aec8461037f565b610b3e610af7613045565b94610b22610b03613dea565b610b11989198368b88612637565b610b1c36898b61268f565b90613191565b610b2d368885612637565b610b3836868861268f565b90613f96565b9380518603610c25575f5b868110610b5257005b610b5f6108fb8284612717565b6001600160a01b03610b89610b7d610b78858c89612734565b612744565b6001600160a01b031690565b911603610bfc57610b9b818587612734565b35151580610bd9575b610bb057600101610b49565b876040517ff00866c7000000000000000000000000000000000000000000000000000000008152fd5b50610bec610be78288612717565b61274e565b610bf581610eb9565b1515610ba4565b876040517f672215de000000000000000000000000000000000000000000000000000000008152fd5b866040517f672215de000000000000000000000000000000000000000000000000000000008152fd5b3461037b57608060031936011261037b5760043567ffffffffffffffff60243581811161037b57610c83903690600401610463565b92909160443590811161037b57610c9e903690600401610494565b505060643591610cad8361037f565b610cb5613045565b610cbd613dea565b909460ff60025460b01c16610cd1816121d4565b8015159081610e50575b50610e2657610d006028610cf86001198036013560f01c36030190565b013560601c90565b95610d09612cca565b968792610d14612cca565b99610d1d612cca565b97610d26614a13565b9980610da55750610d99969492610d486106c99b9a99979593610d8a9361272b565b3592610d69846001600160a01b03610d608285614f50565b9316938461461d565b610d728661270a565b52610d7c8d61270a565b906001600160a01b03169052565b610d938761270a565b52613191565b60405194859485610556565b909192949550600181145f14610df35750610d8a610d9996948b94610d69610ddc6106c99d9c9b99966001600160a01b039661272b565b3591610de883826151d5565b95869116938461461d565b6040517fb3f26d5d0000000000000000000000000000000000000000000000000000000081526004810191909152602490fd5b60046040517f2311b472000000000000000000000000000000000000000000000000000000008152fd5b60019150610e5d816121d4565b14155f610cdb565b3461037b575f60031936011261037b576020603c6103e76001198036013560f01c36030190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60021115610ec357565b610e8c565b60209060206040818301928281528551809452019301915f5b828110610eef575050505090565b909192938451906002821015610ec3579081528201938201929190600101610ee1565b3461037b57608060031936011261037b5767ffffffffffffffff60243581811161037b57610f44903690600401610463565b9160443590811161037b57610f5d903690600401610463565b9190610f6a60643561037f565b610f7d6001198036013560f01c36030190565b3560601c33036106f057916bffffffffffffffffffffffff5f541692610fa1613c8f565b94610faa61444c565b91610fb58351612d0b565b94610fc0858361272b565b3594851515936001600160a01b038a169160015b82811061101457505050505050610ffd575b6106c9610ff1613b3b565b60405191829182610ec8565b61100a94606435946143a7565b5f80808080610fe6565b61101f818388612734565b3561102e610b78838689612734565b604080517f8e6e20a90000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff8f1660048201526001600160a01b039290921660248301529190602080826044818b5afa80156106e6576110a69284925f92611190575b5050808218908211021890565b91826110f6575b50895183106110c1575b5050600101610fd4565b906110cb91612fad565b6110d5828c612717565b526110e0818b612717565b516110ed575b5f806110b7565b600196506110e6565b611104610b7885888b612734565b873b1561037b5790517f5612785a0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff8f1660048201526001600160a01b0391821660248201526044810184905260648035909216918101919091525f81608481838b5af180156106e657156110ad57806106da61118a926117d1565b5f6110ad565b6111af9250803d106111b6575b6111a7818361183e565b8101906133ad565b5f80611099565b503d61119d565b3461037b57602060031936011261037b576004356111da8161037f565b6111e381612e7d565b156111f35760206040515f198152f35b6024906001600160a01b03604051917f41756256000000000000000000000000000000000000000000000000000000008352166004820152fd5b3461037b575f60031936011261037b576002805460b01c60ff16611250816121d4565b03610e26576bffffffffffffffffffffffff5f5416611270610b7d6133d1565b6040517fef4caa830000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152336024820152602081604481855afa9081156106e6575f916113d1575b50156113a7576113086112d861444c565b6113026112f16112ea6108fb8461270a565b3090613488565b6112fd6108fb8461270a565b61447d565b50613518565b1561139e5761133660015b61133161131e612610565b915f83525f60208401526040830161277e565b61278a565b803b1561037b576040517f794350640000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152905f908290602490829084905af180156106e65761139157005b806106da610018926117d1565b6113365f611313565b60046040517f70bd5300000000000000000000000000000000000000000000000000000000008152fd5b6113f3915060203d6020116113f9575b6113eb818361183e565b81019061275b565b5f6112c7565b503d6113e1565b3461037b575f60031936011261037b5760206bffffffffffffffffffffffff5f5416604051908152f35b3461037b575f60031936011261037b5760206040517f04f51a4c4a4cf53ba4f53f09da86706c7e9f45dbe97807ec7c84e2f7701146018152f35b604060031936011261037b5760043561147c8161037f565b61148f6001198036013560f01c36030190565b3560601c33036106f0576114a6906024359061502f565b6001600160a01b036114b6613c8f565b16906bffffffffffffffffffffffff5f541691803b1561037b576040517f3b1bc9570000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff939093166004840152602483018290525f908390604490829084905af19182156106e6576106c992611541575b506040519081529081906020820190565b61154a906117d1565b5f611530565b90602061059e928181520190610531565b3461037b57604060031936011261037b5760043561157e8161037f565b60243567ffffffffffffffff811161037b5761159e903690600401610494565b50506001600160a01b0390816115b2612813565b1633036116af577fffffffffffffffffffffffffffffffffffffffff0000000000000000000000005f54165f55816115f86028610cf86001198036013560f01c36030190565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529116602082602481845afa9081156106e6576106c99461166c9461167a945f94611686575b5091839161165893169061461d565b604051928391602083019190602083019252565b03601f19810183528261183e565b60405191829182611550565b61165893919294506116a69060203d6020116111b6576111a7818361183e565b93919092611649565b60046040517f8cec1de2000000000000000000000000000000000000000000000000000000008152fd5b3461037b575f60031936011261037b5760206040517fe72db512f617f63e889242cd75fa9e0d2876dc0efa5932893da1cf5a9a0624aa8152f35b90602061059e9281815201906104f5565b3461037b575f60031936011261037b576106c961173f61355a565b6040519182916020835260208301906104f5565b90600182811c9216801561179a575b602083101461176d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611762565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116117e557604052565b6117a4565b6060810190811067ffffffffffffffff8211176117e557604052565b6080810190811067ffffffffffffffff8211176117e557604052565b6020810190811067ffffffffffffffff8211176117e557604052565b90601f601f19910116810190811067ffffffffffffffff8211176117e557604052565b3461037b575f60031936011261037b576040515f60035461188181611753565b8084529060209060019081811690811561190757506001146118ae575b6106c98561167a8187038261183e565b60035f90815293507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8385106118f45750505050810160200161167a826106c961189e565b80548686018401529382019381016118d8565b8695506106c99693506020925061167a9491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101929361189e565b3461037b575f60031936011261037b576020611969612813565b6001600160a01b0360405191168152f35b3461037b57608060031936011261037b5767ffffffffffffffff60043581811161037b576119ac903690600401610494565b9060243583811161037b576119c5903690600401610494565b9060443585811161037b576119de903690600401610494565b92909160643596871161037b576119fc610018973690600401610494565b9690956128a0565b909161076261059e936040845260408401906104f5565b3461037b57602060031936011261037b576004803590611a3a8261037f565b60025460b01c60ff1691611a4d836121d4565b60038314611c68576bffffffffffffffffffffffff5f541690611a71610b7d6133d1565b9060409485517ff5dbed1400000000000000000000000000000000000000000000000000000000815260208180611acf33898b84019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b0381875afa9081156106e6575f91611c49575b5015611c215780611af46002926121d4565b03611b5b575b505050611b0561511e565b929091611b21611b1d611b18308761474e565b613831565b1590565b611b3457506106c9905192839283611a04565b90517fac4984c7000000000000000000000000000000000000000000000000000000008152fd5b611ba990611b9e611b786060611b6f61385e565b015161ffff1690565b91611b8e611b84612610565b61ffff9094168452565b6001600160a01b03166020830152565b60028187015261278a565b803b1561037b5783517f258eef130000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9092168383019081525f91839182908490829060200103925af180156106e657611c0e575b8080611afa565b806106da611c1b926117d1565b5f611c07565b8486517f70bd5300000000000000000000000000000000000000000000000000000000008152fd5b611c62915060203d6020116113f9576113eb818361183e565b5f611ae2565b506040517f2311b472000000000000000000000000000000000000000000000000000000008152fd5b3461037b575f60031936011261037b57611ca961385e565b611cb1613dea565b611cbb8251612d0b565b926040015f5b8351811015611d0c5780611cfb6001600160a01b03611ce260019488612717565b5116611cee8387612717565b5161ffff8651169161391d565b611d058288612717565b5201611cc1565b5050506106c960405192839283611a04565b604081019060408152825180925260608101916020809401905f5b818110611d7e57505050828183039101528180845192838152019301915f5b828110611d66575050505090565b835161ffff1685529381019392810192600101611d58565b909194938551906005821015610ec35790815293949385019385019190600101611d39565b3461037b575f60031936011261037b57611dbb61385e565b611dc3613a08565b611dcb613a08565b915f9061ffff611ddd825161ffff1690565b16611ee1575b80602060609201611e00611df9825161ffff1690565b61ffff1690565b611ec1575b5060408101611e19611df9825161ffff1690565b611e8d575b5001611e2f611df9825161ffff1690565b611e49575b5080825282526106c960405192839283611d1e565b611e6b611e8791611e63611e5d8587612717565b60039052565b5161ffff1690565b611e7e611e7784612f91565b9386612717565b9061ffff169052565b5f611e34565b611ea8611ebb915f611e9f8789612717565b525161ffff1690565b611e7e611eb486612f91565b9588612717565b5f611e1e565b611ea8611edb91611e63611ed58789612717565b60029052565b5f611e05565b9050611ef5611eef8361270a565b60019052565b6060611f03825161ffff1690565b91611f13600193611e7e8761270a565b9050611de3565b3461037b575f60031936011261037b57611f32612d3c565b60026040820151611f42816121d4565b611f4b816121d4565b03610e26576bffffffffffffffffffffffff5f5416611f6b610b7d6133d1565b6040517f1838fe0f0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152336024820152602081604481855afa9081156106e6575f916120ed575b50156113a75761200e7603000000000000000000000000000000000000000000007fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff6002541617600255565b803b1561037b576040517f88bb34d50000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9290921660048301525f908290602490829084905af180156106e6576120da575b5061207261444c565b60208201915f5b8251811015610018576001906120d46120b66120a13061209c6108fb868a612717565b613488565b6120b0611df9875161ffff1690565b9061490a565b6120c36108fb8488612717565b87516001600160a01b031690613a57565b01612079565b806106da6120e7926117d1565b5f612069565b612106915060203d6020116113f9576113eb818361183e565b5f611fc2565b3461037b575f60031936011261037b5761212461385e565b61212c613dea565b90916040015f5b83518110156121995761216a6001600160a01b036121518387612717565b511661215d8386612717565b5161ffff8551169161391d565b906121758185612717565b519182039182116121945760019161218d8286612717565b5201612133565b612f41565b6121a38385614a25565b906106c960405192839283611a04565b3461037b575f60031936011261037b576121a36121ce61511e565b90614a25565b60041115610ec357565b3461037b575f60031936011261037b57606060025460ff8160b01c166001600160a01b036040519261ffff8116845260101c16602083015261221f816121d4565b6040820152f35b3461037b57604060031936011261037b576004356122438161037f565b60243567ffffffffffffffff811161037b57612263903690600401610494565b916001600160a01b0390816122766146c4565b16906bffffffffffffffffffffffff5f5416823b1561037b576122dd5f95604051978896879586957f134ab1950000000000000000000000000000000000000000000000000000000087526004870152166024850152606060448501526064840191613693565b03915afa80156106e65761139157005b3461037b575f60031936011261037b57604051612309816117ea565b60028152602080820160403682378251156106eb575f8152825192600193600110156106eb5783836001604084015260405192602084019060208552518091526040840194915f5b82811061235e5785870386f35b8351875295810195928101928401612351565b3461037b575f60031936011261037b57602060146103e76001198036013560f01c36030190565b3461037b575f60031936011261037b576106c9610ff1613b3b565b3461037b575f60031936011261037b576123cb613b91565b60408051928352602083019190915290f35b3461037b575f60031936011261037b576004602060286124066001198036013560f01c36030190565b013560601c604051928380927fb69ef8a80000000000000000000000000000000000000000000000000000000082525afa80156106e6576020915f91612450575b50604051908152f35b6124679150823d84116111b6576111a7818361183e565b5f612447565b3461037b575f60031936011261037b57610018612d7c565b3461037b575f60031936011261037b5760206040517f8e24cef3d118e2320bff2d4ac4e82fd5ff0dd3a6e6044ca19f91cd3b6f84750e8152f35b3461037b57606060031936011261037b576004356bffffffffffffffffffffffff8116810361037b576124f360243561037f565b60443567ffffffffffffffff811161037b57612513903690600401610494565b50506001600160a01b03612525612813565b1633036116af57610018906bffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000005f5416175f55565b3461037b575f60031936011261037b57604051612583816117ea565b60028152602081019060403683376125a46001198036013560f01c36030190565b918151156106eb57603c83013560601c90528051600110156106eb576028919091013560601c60408201526106c99060405191829182611713565b3461037b575f60031936011261037b5760206126046001198036013560f01c36030190565b3560601c604051908152f35b6040519061261d826117ea565b565b67ffffffffffffffff81116117e55760051b60200190565b92916126428261261f565b91612650604051938461183e565b829481845260208094019160051b810192831161037b57905b8282106126765750505050565b83809183356126848161037f565b815201910190612669565b929161269a8261261f565b916126a8604051938461183e565b829481845260208094019160051b810192831161037b57905b8282106126ce5750505050565b813581529083019083016126c1565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051156106eb5760200190565b80518210156106eb5760209160051b010190565b90156106eb5790565b91908110156106eb5760051b0190565b3561059e8161037f565b516002811015610ec35790565b9081602091031261037b5751801515810361037b5790565b6040513d5f823e3d90fd5b612787826121d4565b52565b61ffff81511690600254917fffffffffffffffffff000000000000000000000000000000000000000000000076ff00000000000000000000000000000000000000000000604075ffffffffffffffffffffffffffffffffffffffff0000602086015160101b169401516127fc816121d4565b612805816121d4565b60b01b169316171717600255565b6004602061282a6001198036013560f01c36030190565b3560601c604051928380927f8f75315b0000000000000000000000000000000000000000000000000000000082525afa9081156106e6575f9161286b575090565b90506020813d602011612898575b816128866020938361183e565b8101031261037b575161059e8161037f565b3d9150612879565b969492909593917ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009687549860ff8a60401c16159967ffffffffffffffff811680159081612a50575b6001149081612a46575b159081612a3d575b50612a13576129369960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008d93161790556129b757612ba4565b61293c57565b6129887ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff8154169055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1565b612a0e7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff825416179055565b612ba4565b60046040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b9050155f6128fb565b303b1591506128f3565b8c91506128e9565b601f8111612a64575050565b60035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b906020601f840160051c83019310612abb575b601f0160051c01905b818110612ab0575050565b5f8155600101612aa5565b9091508190612a9c565b919067ffffffffffffffff81116117e557612aea81612ae5600354611753565b612a58565b5f601f8211600114612b27578190612b1793945f92612b1c575b50505f198260011b9260031b1c19161790565b600355565b013590505f80612b04565b60035f52601f198216937fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f5b868110612b8c5750836001959610612b73575b505050811b01600355565b5f1960f88560031b161c199101351690555f8080612b68565b90926020600181928686013581550194019101612b55565b9197969594929097612bb461466b565b612bbc6146c4565b926001600160a01b035f9416803b1561037b576040518080937f35088889000000000000000000000000000000000000000000000000000000009d8e83526004830191612c08926136b3565b03815a5f948591f180156106e657612cb7575b50612c2461466b565b612c47604051612c33816117ea565b8481525f60208201525f604082015261278a565b612c52610b7d6133d1565b90813b15612cb35783612c75999a6040519a8b95869485938452600484016136b3565b03925af19182156106e65761261d95612c9393612ca0575b506136c4565b612c9b613821565b612ac5565b806106da612cad926117d1565b5f612c8d565b8380fd5b612cc29193506117d1565b5f915f612c1b565b604051906040820182811067ffffffffffffffff8211176117e5576040526001825260203681840137565b604051612d0181611822565b5f8152905f368137565b90612d158261261f565b612d22604051918261183e565b828152601f19612d32829461261f565b0190602036910137565b60405190612d49826117ea565b81604060ff60025461ffff811684526001600160a01b038160101c16602085015260b01c1691612d78836121d4565b0152565b612d8f6001198036013560f01c36030190565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000060208083018281526028850135606090811c602486018190525f1960448088019190915286529395603c0135901c92601f199290915f90612df560648861183e565b86519082875af15f513d82612e61575b505015612e14575b5050505050565b60405160208101959095526001600160a01b031660248501525f604485015260649081018452612e5793612e5291612e4c908261183e565b82614c60565b614c60565b5f80808080612e0d565b909150612e755750823b15155b5f80612e05565b600114612e6e565b6001600160a01b03612e986001198036013560f01c36030190565b9116603c82013560601c8114918215612eb057505090565b6028013560601c14919050565b602090818184031261037b5780519067ffffffffffffffff821161037b57019180601f8401121561037b578251612ef38161261f565b93612f01604051958661183e565b818552838086019260051b82010192831161037b578301905b828210612f28575050505090565b8380918351612f368161037f565b815201910190612f1a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9190820180921161219457565b919082604091031261037b576020825192015190565b5f1981146121945760010190565b905f19820191821161219457565b9190820391821161219457565b60405190612fc782611806565b5f6060838281528260208201528260408201520152565b519061ffff8216820361037b57565b9081608091031261037b5761303d60606040519261300a84611806565b61301381612fde565b845261302160208201612fde565b602085015261303260408201612fde565b604085015201612fde565b606082015290565b61304d612fba565b506bffffffffffffffffffffffff5f5416613069610b7d613d60565b6040517f7c4d3fef0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152336024820152602081604481855afa9081156106e6575f91613172575b5015613148576040517f4a79e4d90000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff929092166004830152608090829060249082905afa9081156106e6575f9161311f575090565b61059e915060803d608011613141575b613139818361183e565b810190612fed565b503d61312f565b60046040517f463396db000000000000000000000000000000000000000000000000000000008152fd5b61318b915060203d6020116113f9576113eb818361183e565b5f6130c0565b91909392935f5b83518110156133a5576131ab8183612717565b51806131bb575b50600101613198565b6131c86108fb8387612717565b6131d28386612717565b51916131f3604092838b01946131ed611df9875161ffff1690565b9161391d565b9283821161337c57918493916001958861ffff613215613334975161ffff1690565b161561333a5761324b83613245613240613293979661323a61328b9761325097612717565b51612fad565b613f41565b96612fad565b613eed565b61327361325b612610565b6fffffffffffffffffffffffffffffffff9096168652565b6effffffffffffffffffffffffffffff166020850152565b820160019052565b6132ba6132a36108fb858a612717565b6001600160a01b03165f52600160205260405f2090565b8151602083015160409093015160809390931b7effffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161791151560f81b7fff0000000000000000000000000000000000000000000000000000000000000016919091179055565b906131b2565b505061324b61334b915f9394612fad565b91613374613357612610565b8381526effffffffffffffffffffffffffffff9094166020850152565b820152613293565b600483517f156bbc5b000000000000000000000000000000000000000000000000000000008152fd5b505050509050565b9081602091031261037b575190565b9081602091031261037b575161059e8161037f565b6024602060146133ea6001198036013560f01c36030190565b013560601c604051928380927fb407991c0000000000000000000000000000000000000000000000000000000082527f04f51a4c4a4cf53ba4f53f09da86706c7e9f45dbe97807ec7c84e2f77011460160048301525afa80156106e6576001600160a01b03915f9161345b57501690565b61347d915060203d602011613481575b613475818361183e565b8101906133bc565b1690565b503d61346b565b6001600160a01b039081169073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee82036134b55750503190565b60246020929360405194859384927f70a082310000000000000000000000000000000000000000000000000000000084521660048301525afa9081156106e6575f916134ff575090565b61059e915060203d6020116111b6576111a7818361183e565b60015b815181101561355457613541306001600160a01b0361353a8486612717565b5116613488565b61354d5760010161351b565b5050600190565b50505f90565b6135bd61356561444c565b5f613571610b7d613c8f565b81546040517f26a5bea80000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff909116600482015293849190829081906024820190565b03915afa9182156106e6575f92613677575b506135e06108298251845190612f6e565b925f5b825181101561360f57806136096135ff6108fb60019487612717565b610d7c8389612717565b016135e3565b5091908051915f5b815181101561366557806136306108fb60019385612717565b61363a8582613d19565b5015613648575b5001613617565b61365f90610d7c61365888612f91565b978a612717565b5f613641565b505050825181106136735750565b8252565b61368c9192503d805f833e610a86818361183e565b905f6135cf565b601f8260209493601f1993818652868601375f8582860101520116010190565b91602061059e938181520191613693565b6136cc61466b565b6136d7610b7d613d60565b5f54604080517f4a79e4d90000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff909216600483015291939190608081602481885afa80156106e65760406137439161ffff935f91613802575b50015161ffff1690565b166137ab575b50823b1561037b5761378d925f92836040518096819582947f35088889000000000000000000000000000000000000000000000000000000008452600484016136b3565b03925af180156106e65761379e5750565b806106da61261d926117d1565b9390926137b661444c565b925f5b84518110156137f5576001906137ef6137d0612610565b5f808252602082015260018a8201526132ba6132a36108fb858b612717565b016137b9565b509250929093505f613749565b61381b915060803d60801161314157613139818361183e565b5f613739565b61382961466b565b61261d612d7c565b5f5b815181101561354d57613849610be78284612717565b6002811015610ec35761355457600101613833565b613866612fba565b506001600160a01b03613877613d60565b1660806bffffffffffffffffffffffff5f54166024604051809481937f4a79e4d900000000000000000000000000000000000000000000000000000000835260048301525afa9081156106e6575f9161311f575090565b8181029291811591840414171561219457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8115613918570490565b6138e1565b6001600160a01b0390929192165f52600160205260405f209060405191613943836117ea565b549160406fffffffffffffffffffffffffffffffff84169182815260208101946effffffffffffffffffffffffffffff8160801c16865260f81c15159182910152806139ff575b6139bc5750505161059e91506effffffffffffffffffffffffffffff165b6effffffffffffffffffffffffffffff1690565b8303928311612194576139a86139e36139db6139f99361059e966138ce565b612710900490565b92516effffffffffffffffffffffffffffff1690565b90612f6e565b5080841161398a565b6040519060a0820182811067ffffffffffffffff8211176117e557604052600482526080366020840137565b9190613a41828285614984565b9282156139185709151581018091116121945790565b9082613a6257505050565b6001600160a01b0391821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8103613b305750824710613af8575f809381938293165af13d15613af3573d613aaa816149f7565b90613ab8604051928361183e565b81525f60203d92013e5b15613ac957565b60046040517fd6bda275000000000000000000000000000000000000000000000000000000008152fd5b613ac2565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815247600482015260248101849052604490fd5b61261d93925061461d565b613b43612cca565b90613b55613b4f61355a565b51612d0b565b915f5b8151811015613b8d57613b6e610be78284612717565b90613b798186612717565b916002811015610ec3576001925201613b58565b5050565b670de0b6b3a7640000613bb5610b7d6028610cf86001198036013560f01c36030190565b604051907f18160ddd0000000000000000000000000000000000000000000000000000000082526020908183600481845afa9283156106e6575f93613c70575b508215613c6857908060049392604051948580927fb69ef8a80000000000000000000000000000000000000000000000000000000082525afa80156106e657613c489385925f92613c4b575b5050614984565b91565b613c619250803d106111b6576111a7818361183e565b5f80613c41565b505050908190565b613c88919350823d84116111b6576111a7818361183e565b915f613bf5565b602460206014613ca86001198036013560f01c36030190565b013560601c604051928380927fb407991c0000000000000000000000000000000000000000000000000000000082527f585fc1073b6cfa774673b8c567d17fb3595441dcb101cca207779783ece1508060048301525afa80156106e6576001600160a01b03915f9161345b57501690565b91909160015b8351811015613d56576001600160a01b0380613d3b8387612717565b511690831614613d4d57600101613d1f565b92505060019190565b505090505f905f90565b602460206014613d796001198036013560f01c36030190565b013560601c604051928380927fb407991c0000000000000000000000000000000000000000000000000000000082527f8e24cef3d118e2320bff2d4ac4e82fd5ff0dd3a6e6044ca19f91cd3b6f84750e60048301525afa80156106e6576001600160a01b03915f9161345b57501690565b60025460b01c60ff16613dfc816121d4565b80613e0e5750613e0a61511e565b9091565b90613e18826121d4565b60019160018114908115613ed9575b5015613e8a57613e3561511e565b9190928083855f925b613e49575b50505050565b8051831015613e8557838093613e73613e693061209c6108fb8588612717565b6109db8387612717565b613e7d8286612717565b520192613e3e565b613e43565b90613e9361444c565b91613e9e8351612d0b565b915f815b613eaa575050565b8451811015613b8d57818091613ec73061209c6108fb848b612717565b613ed18288612717565b520190613ea2565b60029150613ee6816121d4565b145f613e27565b6effffffffffffffffffffffffffffff90818111613f09571690565b604490604051907f6dfcc650000000000000000000000000000000000000000000000000000000008252607860048301526024820152fd5b6fffffffffffffffffffffffffffffffff90818111613f5e571690565b604490604051907f6dfcc650000000000000000000000000000000000000000000000000000000008252608060048301526024820152fd5b9190613fa860025460ff9060b01c1690565b613fb1816121d4565b80613fc1575061059e925061474e565b9190613fcc836121d4565b6001928084036140fd5750613fe48493929351612d0b565b91613fee8261270a565b51613ff88461270a565b526140028261270a565b51151591815f9181935b614067575b5050905015614035575b61402b57505061059e9051612d0b565b61059e925061474e565b6140627fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff60025416600255565b61401b565b87518410156140f8576108fb61407d8583612717565b516140ba866140948c61209c6108fb843093612717565b926140b58d8d6140b08488188589100285189889968794612717565b613a57565b612fad565b6140c4878a612717565b526140cf8689612717565b516140ef575b116140e5575b928101928161400c565b90915081906140db565b955082956140d5565b614011565b806141096003926121d4565b03610e26575f939291825b614126575b50505061059e9150613b4f565b835185101561415d5782856141556141436108fb88998599612717565b8461414e8488612717565b5191613a57565b019493614114565b614119565b919061417460025460ff9060b01c1690565b61417d816121d4565b8061418d575061059e925061474e565b9190614198836121d4565b60019280840361426057506141b08493929351612d0b565b916141ba8261270a565b516141c48461270a565b526141ce8261270a565b51151591815f9181935b6141f55750509050156140355761402b57505061059e9051612d0b565b87518410156140f8576108fb61420b8583612717565b51614222866140948c61209c6108fb843093612717565b61422c878a612717565b526142378689612717565b51614257575b1161424d575b92810192816141d8565b9091508190614243565b9550829561423d565b8061426c6003926121d4565b03610e26575f939291825b6142885750505061059e9150613b4f565b835185101561415d5782856142a56141436108fb88998599612717565b019493614277565b9193909260ff60025460b01c166142c3816121d4565b8015159081614392575b50610e26576142ea6028610cf86001198036013560f01c36030190565b906142f3612cca565b916142fc612cca565b96614305612cca565b9661430e614a13565b9680614360575061434f9293916143249161272b565b359261433c846001600160a01b03610d608285614f50565b6143458561270a565b52610d7c8861270a565b6143588561270a565b525b93929190565b60018103610df357509161433c610ddc6001600160a01b0395936143839561272b565b61438c8561270a565b5261435a565b6001915061439f816121d4565b14155f6142cd565b9094939294856143cc575b50508151156106eb576143c9936020830152615364565b50565b6001600160a01b0316803b1561037b576040517f740d45200000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff929092166004830152602482018690525f908290604490829084905af180156106e65761443d575b806143b2565b614446906117d1565b5f614437565b614454612cca565b90603c61446a6001198036013560f01c36030190565b013560601c8251156106eb576020830152565b91906144926001198036013560f01c36030190565b602881013560601c90603c6001600160a01b03861691013560601c81145f146145d257506040517f70a08231000000000000000000000000000000000000000000000000000000008082523060048301529394509091602091908282602481875afa9182156106e6575f926145b3575b50833b1561037b576040517fb6b55f2500000000000000000000000000000000000000000000000000000000815260048101919091525f8160248183885af180156106e6576145a0575b506040519384523060048501528184602481865afa80156106e65761059e9461457d935f92614583575b5050612fad565b90614f50565b6145999250803d106111b6576111a7818361183e565b5f80614576565b806106da6145ad926117d1565b5f61454c565b6145cb919250833d85116111b6576111a7818361183e565b905f614502565b81036145e35761059e929350614f50565b6040517f417562560000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602490fd5b61261d926001600160a01b03604051937fa9059cbb000000000000000000000000000000000000000000000000000000006020860152166024840152604483015260448252612e5282611806565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561469a57565b60046040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152fd5b6024602060146146dd6001198036013560f01c36030190565b013560601c604051928380927fb407991c0000000000000000000000000000000000000000000000000000000082527fe72db512f617f63e889242cd75fa9e0d2876dc0efa5932893da1cf5a9a0624aa60048301525afa80156106e6576001600160a01b03915f9161345b57501690565b6147579061270a565b5161476b6001198036013560f01c36030190565b91603c602884013560601c93013560601c9261478783826151d5565b90803b1561037b576040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101929092525f908290602490829084905af180156106e65761485b575b506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015292602084602481845afa80156106e65761482c945f9161483c575b50808411614834575b5061461d565b61059e612cca565b92505f614826565b614855915060203d6020116111b6576111a7818361183e565b5f61481d565b806106da614868926117d1565b5f6147d5565b906c0c9f2c9cd04674edea4000000090818302915f19818509938380861095039480860395146148fd57848311156148f05790829109815f038216809204600280826003021880830282030280830282030280830282030280830282030280830282030280920290030293600183805f03040190848311900302920304170290565b82156003026011186152b3565b50509061059e925061390e565b90808202905f1981840990828083109203918083039214614979576127109082821115614967577fbc01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e91940990828211900360fc1b910360041c170290565b634e487b715f5260116020526024601cfd5b505061271091500490565b91818302915f19818509938380861095039480860395146148fd57848311156148f05790829109815f038216809204600280826003021880830282030280830282030280830282030280830282030280830282030280920290030293600183805f03040190848311900302920304170290565b67ffffffffffffffff81116117e557601f01601f191660200190565b60405190614a2082611822565b5f8252565b91906bffffffffffffffffffffffff5f541690614a43610b7d613c8f565b92604092604051917f26a5bea80000000000000000000000000000000000000000000000000000000083526004955f8480614a9686600483019190916bffffffffffffffffffffffff6020820193169052565b0381845afa9384156106e6575f94614c44575b50614aba6108298951865190612f6e565b93614acb6108298a51835190612f6e565b965f5b8a51811015614b105780614af4614aea6108fb6001948f612717565b610d7c838b612717565b614afe818a612717565b51614b09828c612717565b5201614ace565b509297909398919695508151935f5b8151811015614c2757614b356108fb8284612717565b908186517f8e6e20a90000000000000000000000000000000000000000000000000000000081528d818d8180614b956020998a968d84019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b03915afa9081156106e6576001945f92614c0a575b50508a614bb78884613d19565b939015614bdf5750614bd7916109db84614bd093612717565b918b612717565b525b01614b1f565b9050614bf1919250610d7c8a8c612717565b614c04614bfd89612f91565b988b612717565b52614bd9565b614c209250803d106111b6576111a7818361183e565b5f80614baa565b505050505091939250935083518110614c3d5750565b8084528252565b614c599194503d805f833e610a86818361183e565b925f614aa9565b905f602091828151910182855af115612773575f513d614cc957506001600160a01b0381163b155b614c8f5750565b6024906001600160a01b03604051917f5274afe7000000000000000000000000000000000000000000000000000000008352166004820152fd5b60011415614c88565b919290926040916040614ce361385e565b019161ffff614cf4845161ffff1690565b1615614e6a5790614d0f91614d07613dea565b9790966142ad565b919083925f5b8851811015614e5d57614d28818b612717565b51614d338288612717565b51614d3d91612fad565b614d4690613f41565b614d50828b612717565b516001600160a01b0316614d64838d612717565b51895161ffff1661ffff1690614d799261391d565b614d8290613eed565b614d8a612610565b6fffffffffffffffffffffffffffffffff90921682526effffffffffffffffffffffffffffff1660208201526001818a0152614dc6828b612717565b516001600160a01b03165f9081526001602052604090208151602083015160409093015160809390931b7effffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161791151560f81b7fff0000000000000000000000000000000000000000000000000000000000000016919091179055600101614d15565b5095509550955095915050565b91509150614e7a9492939461444c565b945f5b8651811015614ea45780614e9e614e996108fb6001948b612717565b6152c3565b01614e7d565b509091929450614eb3936142ad565b929391929091565b614ec3612cf5565b9061059e612cf5565b614ed461385e565b90614edd613dea565b926040019080845f5b8351811015614f4757614f1d6001600160a01b03614f048387612717565b5116614f10838a612717565b5161ffff8851169161391d565b90614f288189612717565b5191820391821161219457600191614f40828a612717565b5201614ee6565b50939250935050565b6001600160a01b031690604051907f18160ddd0000000000000000000000000000000000000000000000000000000082526020928383600481845afa9283156106e6575f93615010575b508215615009579083600492604051938480927fb69ef8a80000000000000000000000000000000000000000000000000000000082525afa9182156106e65761059e945f93614fea575050614984565b615001929350803d106111b6576111a7818361183e565b905f80613c41565b5091505090565b615028919350843d86116111b6576111a7818361183e565b915f614f9a565b90604061503a61385e565b019061ffff825116156150f857916132ba6132a36108fb61261d946150ec6150b16150ab61324061509d6150a36109db9d9c615074613dea565b9390986150836108fb8b61270a565b906131ed611df96150938861270a565b51925161ffff1690565b9b6154ac565b9c8d9161270a565b96613eed565b6150d46150bc612610565b6fffffffffffffffffffffffffffffffff9098168852565b6effffffffffffffffffffffffffffff166020870152565b6001604086015261270a565b905061059e91615119614e99603c610cf86001198036013560f01c36030190565b6154ac565b6151316001198036013560f01c36030190565b602881013560601c91615142612cca565b92603c61514d612cca565b93013560601c61515c8561270a565b52604051907f70a08231000000000000000000000000000000000000000000000000000000008252306004830152602082602481845afa9081156106e6576151ab925f926151b4575b50614f50565b6127878361270a565b6151ce91925060203d6020116111b6576111a7818361183e565b905f6151a5565b6001600160a01b03166040517f18160ddd0000000000000000000000000000000000000000000000000000000081526020918282600481845afa9182156106e6575f92615294575b50811561528e57928260049394604051948580927fb69ef8a80000000000000000000000000000000000000000000000000000000082525afa9283156106e65761059e945f9461526f575b5050613a34565b615286929450803d106111b6576111a7818361183e565b915f80615268565b50505090565b6152ac919250833d85116111b6576111a7818361183e565b905f61521d565b634e487b715f526020526024601cfd5b6001600160a01b0381165f52600160205260405f2060408051916152e6836117ea565b54916fffffffffffffffffffffffffffffffff831681526effffffffffffffffffffffffffffff8360801c169283602083015260f81c1515918291015261532b575050565b6132ba61261d926040519261533f846117ea565b5f845260208401525f60408401526001600160a01b03165f52600160205260405f2090565b9092604090604061537361385e565b0161ffff615383825161ffff1690565b161561547557615391613dea565b9290505f5b8551811015615465578083858a896001956153b08361270a565b511561545b5761324061543f936153f783610863816153f18a6154559c6131ed611df9615093866153eb6154049f6153fe9f6108fb91612717565b95612717565b99612717565b5190612fad565b92613eed565b61542761540f612610565b6fffffffffffffffffffffffffffffffff9094168452565b6effffffffffffffffffffffffffffff166020830152565b6001818901526132ba6132a36108fb858c612717565b01615396565b5050505050615455565b50959250505061059e9291614162565b5091939290505f5b845181101561549f5780615499614e996108fb60019489612717565b0161547d565b5090929161059e92614162565b9060ff60025460b01c166154bf816121d4565b80151590816154d7575b50610e265761059e9161447d565b600191506154e4816121d4565b14155f6154c956