1.3k txs
4.6k calls
constructor
constructor(uint256 maxTolerance, uint256 maxInitiatorFee, uint256 minLiquidityRatio)
functions
accountToInitiator
viewfunction accountToInitiator(address account) view returns (address initiator)
getPositionState
viewfunction getPositionState(address positionManager, uint256 oldId, int24 tickLower, int24 tickUpper, address initiator) view returns (tuple position)
initiatorInfo
viewfunction initiatorInfo(address initiator) view returns (uint64 upperSqrtPriceDeviation, uint64 lowerSqrtPriceDeviation, uint64 fee, uint64 minLiquidityRatio)
isPoolUnbalanced
purefunction isPoolUnbalanced(tuple position) pure returns (bool isPoolUnbalanced_)
MAX_INITIATOR_FEE
viewfunction MAX_INITIATOR_FEE() view returns (uint256)
MAX_TOLERANCE
viewfunction MAX_TOLERANCE() view returns (uint256)
MIN_LIQUIDITY_RATIO
viewfunction MIN_LIQUIDITY_RATIO() view returns (uint256)
onERC721Received
purefunction onERC721Received(address, address, uint256, bytes) pure returns (bytes4)
strategyHook
viewfunction strategyHook(address account) view returns (address hook)
executeAction
nonpayablefunction executeAction(bytes rebalanceData) returns (tuple depositData)
rebalance
nonpayablefunction rebalance(address account_, address positionManager, uint256 oldId, int24 tickLower, int24 tickUpper, bytes swapData)
setAccountInfo
nonpayablefunction setAccountInfo(address account_, address initiator, address hook)
setInitiatorInfo
nonpayablefunction setInitiatorInfo(uint256 tolerance, uint256 fee, uint256 minLiquidityRatio)
uniswapV3SwapCallback
nonpayablefunction uniswapV3SwapCallback(int256 amount0Delta, int256 amount1Delta, bytes data)
events
AccountInfoSet
event AccountInfoSet(address indexed account, address indexed initiator, address indexed strategyHook)
Rebalance
event Rebalance(address indexed account, address indexed positionManager, uint256 oldId, uint256 newId)
errors
InitiatorNotValid
error InitiatorNotValid()
InsufficientLiquidity
error InsufficientLiquidity()
InvalidValue
error InvalidValue()
NotAnAccount
error NotAnAccount()
OnlyAccount
error OnlyAccount()
OnlyAccountOwner
error OnlyAccountOwner()
OnlyPool
error OnlyPool()
OnlyPositionManager
error OnlyPositionManager()
Reentered
error Reentered()
UnbalancedPool
error UnbalancedPool()
creation bytecode
0x60e060405234801562000010575f80fd5b50604051620053f5380380620053f5833981016040819052620000339162000045565b60809290925260a05260c05262000071565b5f805f6060848603121562000058575f80fd5b8351925060208401519150604084015190509250925092565b60805160a05160c051615344620000b15f395f818161020301526108aa01525f8181610315015261085701525f8181610348015261088001526153445ff3fe6080604052600436106100dc575f3560e01c80635a1c94c21161007c578063830e703f11610057578063830e703f1461036a5780639583aef014610389578063a129568d146103bd578063fa461e33146103e9575f80fd5b80635a1c94c2146102e55780635f1bbfc21461030457806370cd8d2714610337575f80fd5b806326473274116100b757806326473274146101a6578063304e0270146101f25780634d3b3985146102335780634df8604a1461025f575f80fd5b80630ace53951461011b5780630f59b86a1461014f578063150b7a021461016e575f80fd5b36610117573373827922686190790b37229fd06084350e74485b721461011557604051637b7524c960e01b815260040160405180910390fd5b005b5f80fd5b348015610126575f80fd5b5061013a610135366004613f68565b610408565b60405190151581526020015b60405180910390f35b34801561015a575f80fd5b50610115610169366004614095565b610432565b348015610179575f80fd5b5061018d610188366004614126565b610533565b6040516001600160e01b03199091168152602001610146565b3480156101b1575f80fd5b506101da6101c0366004614193565b60036020525f90815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610146565b3480156101fd575f80fd5b506102257f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610146565b34801561023e575f80fd5b5061025261024d3660046141ae565b610545565b6040516101469190614212565b34801561026a575f80fd5b506102b2610279366004614193565b60016020525f90815260409020546001600160401b0380821691600160401b8104821691600160801b8204811691600160c01b90041684565b604080516001600160401b0395861681529385166020850152918416918301919091529091166060820152608001610146565b3480156102f0575f80fd5b506101156102ff366004614321565b610716565b34801561030f575f80fd5b506102257f000000000000000000000000000000000000000000000000000000000000000081565b348015610342575f80fd5b506102257f000000000000000000000000000000000000000000000000000000000000000081565b348015610375575f80fd5b5061011561038436600461434a565b6109bc565b348015610394575f80fd5b506101da6103a3366004614193565b60026020525f90815260409020546001600160a01b031681565b3480156103c8575f80fd5b506103dc6103d7366004614392565b610b81565b604051610146919061449e565b3480156103f4575f80fd5b506101156104033660046144b0565b611038565b5f81610160015182610140015111158061042c575081610180015182610140015110155b92915050565b5f546001600160a01b03161561045b5760405163b5dfd9e560e01b815260040160405180910390fd5b6001600160a01b038781165f908152600260205260409020541633146104945760405163fde6c87960e01b815260040160405180910390fd5b5f80546001600160a01b0319166001600160a01b0389161781556104bd8787338888888861112f565b60405162b9252f60e41b81529091506001600160a01b03891690630b9252f0906104ed903090859060040161454b565b5f604051808303815f87803b158015610504575f80fd5b505af1158015610516573d5f803e3d5ffd5b50505f80546001600160a01b031916905550505050505050505050565b630a85bd0160e11b5b95945050505050565b61054d613dd7565b5f806001600160a01b0388167303a520b32c04bf3beef7beb72e919cf822ed34f1146105825761057d8388611324565b610595565b61059583888760020b8960020b146114fb565b915091508460020b8660020b036106125760808301516105b58184614596565b6105bf91906145ce565b60808401519092506105d28160026145ce565b6105dc9083614596565b6105e691906145ce565b6105f090836145f4565b60020b60c08401819052610605908290614619565b60020b60a0840152610625565b600285810b60a085015286900b60c08401525b6106328360c00151611725565b6001600160a01b031661010084015260a083015161064f90611725565b6001600160a01b0316610120840152602083015160408401515f91829161067691906119dd565b915091505f6106858383611bc1565b6001600160a01b038881165f90815260016020526040902054911691506106c6908290600160401b90046001600160401b0316670de0b6b3a7640000611c1e565b6101608701526001600160a01b0387165f908152600160205260409020546107019082906001600160401b0316670de0b6b3a7640000611c1e565b61018087015250939998505050505050505050565b5f546001600160a01b03161561073f5760405163b5dfd9e560e01b815260040160405180910390fd5b335f908152600160209081526040808320815160808101835290546001600160401b038082168352600160401b8204811694830194909452600160801b8104841692820192909252600160c01b9091049091166060820152906107c46107ad86670de0b6b3a764000061463e565b6107bf90670de0b6b3a7640000614651565b611c39565b60608301519091506001600160401b0316156108555781604001516001600160401b03168411806108095750815f01516001600160401b0316816001600160401b0316115b80610820575081606001516001600160401b031683105b806108325750670de0b6b3a764000083115b1561085057604051632a9ffab760e21b815260040160405180910390fd5b6108fc565b7f00000000000000000000000000000000000000000000000000000000000000008411806108a257507f000000000000000000000000000000000000000000000000000000000000000085115b806108cc57507f000000000000000000000000000000000000000000000000000000000000000083105b806108de5750670de0b6b3a764000083115b156108fc57604051632a9ffab760e21b815260040160405180910390fd5b6001600160401b038085166040840152831660608301526109286107ad86670de0b6b3a7640000614668565b6001600160401b0390811660208085019182529282168452335f9081526001909352604092839020845181549251948601516060909601518416600160c01b026001600160c01b03968516600160801b02969096166001600160801b03958516600160401b026fffffffffffffffffffffffffffffffff199094169190941617919091179290921617919091179055505050565b5f546001600160a01b0316156109e55760405163b5dfd9e560e01b815260040160405180910390fd5b604051630972932760e21b81526001600160a01b038416600482015273da14fdd72345c4d2511357214c5b89a919768e59906325ca4c9c90602401602060405180830381865afa158015610a3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5f919061468a565b610a7c57604051630ea8370b60e41b815260040160405180910390fd5b826001600160a01b0316638da5cb5b6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610ab9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610add91906146a3565b6001600160a01b0316336001600160a01b031614610b0e576040516312272fd360e11b815260040160405180910390fd5b6001600160a01b038084165f81815260026020908152604080832080548689166001600160a01b0319918216811790925560039093528184208054968816969093168617909255519092917f343ef5cc595144359c9db657cd7fcef6ecc88d06d17651a8292e553ab73b1c7091a4505050565b610bac6040518060800160405280606081526020016060815260200160608152602001606081525090565b5f546001600160a01b03163314610bd65760405163f3f6425d60e01b815260040160405180910390fd5b335f908152600360205260408120546001600160a01b0316906060908080610bfc613dd7565b5f610c286040518060800160405280606081526020016060815260200160608152602001606081525090565b5f80610c368c8e018e614824565b84518051919e509398509396509094509250905f90610c5757610c57614948565b6020026020010151975082602001515f81518110610c7757610c77614948565b60200260200101519650610c8e8888848488610545565b94505050506001600160a01b03871615610d225760c082015160a083015160405163bd5d93c960e01b81523360048201526001600160a01b03888116602483015260448201889052600293840b60648301529190920b608483015288169063bd5d93c99060a4015f6040518083038186803b158015610d0b575f80fd5b505afa158015610d1d573d5f803e3d5ffd5b505050505b610d2b82610408565b15610d4957604051633a8bf65960e01b815260040160405180910390fd5b5f805f610d57888887611cdd565b6001600160a01b038088165f9081526001602052604081205460608b01516101408c01516101008d01516101208e0151989b5096995094975091958695869586958695610dcf956001600160401b03600160c01b820481169662ffffff90931695600160801b90920416939290811691168e8e611fde565b94509450945094509450610dea8e8e8c878787878f8f61209c565b9098509650610df88a610408565b15610e1657604051633a8bf65960e01b815260040160405180910390fd5b5f610e238e8c8b8b6121a6565b929e509a50909850905085811015610e4e5760405163bb55fd2760e01b815260040160405180910390fd5b610e658a86868e602001518f604001518e8e61258b565b60405163095ea7b360e01b8152336004820152602481018f9052919a509850600196506001600160a01b038f16955063095ea7b394506044019250610ea8915050565b5f604051808303815f87803b158015610ebf575f80fd5b505af1158015610ed1573d5f803e3d5ffd5b505050505f841115610efa576020860151610ef6906001600160a01b03163386612608565b5060025b8215610f25576040860151610f19906001600160a01b03163385612608565b610f228161495c565b90505b8115610f5657610f4a73940181a94a35a4569e4529a3cdfb74e38fd986313384612608565b610f538161495c565b90505b610f658988888488888861267d565b9b50506001600160a01b038a1615610fe257604051636ae9e26760e11b81523360048201526001600160a01b03898116602483015260448201899052606482018890528b169063d5d3c4ce906084015f604051808303815f87803b158015610fcb575f80fd5b505af1158015610fdd573d5f803e3d5ffd5b505050505b60408051888152602081018890526001600160a01b038a169133917ffea7a9a6e25cd0bbbfa80ce0c7646e61ee5e0551b3fdaaff0642e6f6adcc72e2910160405180910390a35050505050505050505092915050565b5f80808061104885870187614974565b93509350935093507303a520b32c04bf3beef7beb72e919cf822ed34f16001600160a01b0316846001600160a01b0316036110b55733611089848484612a23565b6001600160a01b0316146110b057604051634b60273560e01b815260040160405180910390fd5b6110e8565b336110c1848484612a4c565b6001600160a01b0316146110e857604051634b60273560e01b815260040160405180910390fd5b5f881315611109576111046001600160a01b038416338a612a82565b611125565b5f871315611125576111256001600160a01b0383163389612a82565b5050505050505050565b6040805160018082528183019092526060915f91906020808301908036833701905050905088815f8151811061116757611167614948565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905088815f815181106111b6576111b6614948565b60209081029190910101526040805160018082528183019092525f918160200160208202803683370190505090506001815f815181106111f8576111f8614948565b60209081029190910101526040805160018082528183019092525f918160200160208202803683370190505090506002815f8151811061123a5761123a614948565b6020026020010181815250505f604051806080016040528086815260200185815260200184815260200183815250905060606112976040518060800160405280606081526020016060815260200160608152602001606081525090565b6112b96040518060600160405280606081526020015f81526020015f81525090565b5f848f8f8f8f8f6040516020016112d5969594939291906149cd565b604051602081830303815290604052905084838386846040516020016112ff959493929190614a34565b6040516020818303038152906040529950505050505050505050979650505050505050565b60405163133f757160e31b8152600481018290525f9081908190819073827922686190790b37229fd06084350e74485b72906399fbab889060240161018060405180830381865afa15801561137b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139f9190614b26565b505050506001600160801b031660e08e015260029290920b60808d01526001600160a01b0392831660408d01529290911660208b015290945092506113e89150839050826145f4565b9250611401866020015187604001518860800151612a4c565b6001600160a01b031680875260408051633850c7bd60e01b81529051633850c7bd9160048082019260c0929091908290030181865afa158015611446573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061146a9190614c0f565b5050506001600160a01b039283166101408a01525087516040805163ddca3f4360e01b8152905192975092169163ddca3f439160048083019260209291908290030181865afa1580156114bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114e39190614c84565b62ffffff166060909601959095525090939092509050565b60405163133f757160e31b8152600481018390525f908190819081907303a520b32c04bf3beef7beb72e919cf822ed34f1906399fbab889060240161018060405180830381865afa158015611552573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115769190614c9f565b909192939495969798999a509091929394959697989950909192509091509050508c6020018d6040018e6060018f60e001846001600160801b03166001600160801b0316815250849950859a508662ffffff1662ffffff16815250866001600160a01b03166001600160a01b0316815250866001600160a01b03166001600160a01b0316815250505050505050818161160f91906145f4565b9250611628876020015188604001518960600151612a23565b6001600160a01b031680885260408051633850c7bd60e01b81529051633850c7bd9160048082019260e0929091908290030181865afa15801561166d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116919190614d07565b5050506001600160a01b039093166101408b015250945050841561171b57865f01516001600160a01b031663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117129190614d94565b60020b60808801525b5050935093915050565b60020b5f60ff82901d80830118620d89e881111561174e5761174e6345c3193d60e11b84612b0a565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b18600282161561178a576ffff97272373d413259a46990580e213a0260801c5b60048216156117a9576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b60088216156117c8576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156117e7576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615611806576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615611825576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615611844576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615611864576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615611884576ff987a7253ac413176f2b074cf7815e540260801c5b6104008216156118a4576ff3392b0822b70005940c7a398e4b70f30260801c5b6108008216156118c4576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156118e4576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615611904576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615611924576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615611944576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615611965576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615611985576e5d6af8dedb81196699c329225ee6040260801c5b620400008216156119a4576d2216e584f5fa1ea926041bedfe980260801c5b620800008216156119c1576b048a170391f7dc42444e8fa20260801c5b5f8413156119cd575f19045b63ffffffff0160201c9392505050565b6040805160028082526060820183525f9283928392909160208301908036833701905050905084815f81518110611a1657611a16614948565b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110611a4a57611a4a614948565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183525f939192909183019080368337019050509050670de0b6b3a7640000815f81518110611a9f57611a9f614948565b602002602001018181525050670de0b6b3a764000081600181518110611ac757611ac7614948565b6020908102919091010152604080516002808252606082019092525f9173d0690557600eb8be8391d1d97346e2aab5300d5f91631580f7f1918491879181602001602082028036833701905050866040518563ffffffff1660e01b8152600401611b349493929190614daf565b5f60405180830381865afa158015611b4e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b759190810190614e27565b9050805f81518110611b8957611b89614948565b60200260200101515f015181600181518110611ba757611ba7614948565b602090810291909101015151909890975095505050505050565b5f815f03611be4575073fffd8963efd1fc6a506488495d951d5263988d2661042c565b5f611bfc846b204fce5e3e2502611000000085611c1e565b90505f611c0882611c39565b905061053c655af3107a4000606083901b614ed1565b5f825f190484118302158202611c32575f80fd5b5091020490565b60b581600160881b8110611c525760409190911b9060801c5b69010000000000000000008110611c6e5760209190911b9060401c5b650100000000008110611c865760109190911b9060201c5b63010000008110611c9c5760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b5f80806001600160a01b038616731dc7a0f5336f52724b650e39174cfcbbedd67bf1148015611d9357604051630852cd8d60e31b815260048101879052731dc7a0f5336f52724b650e39174cfcbbedd67bf1906342966c68906024016020604051808303815f875af1158015611d55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d799190614ee4565b915073827922686190790b37229fd06084350e74485b7296505b6040805160a08101825287815260e08701516001600160801b03908116602083019081525f8385018181526060850191825242608086019081529551630624e65f60e11b81529451600486015291519092166024840152516044830152516064820152905160848201526001600160a01b03881690630c49ccbe9060a40160408051808303815f875af1158015611e2c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e509190614efb565b50506040805160808101825287815230602082019081526001600160801b0382840181815260608401828152945163fc6f786560e01b81529351600485015291516001600160a01b039081166024850152915181166044840152925190921660648201529088169063fc6f78659060840160408051808303815f875af1158015611edc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f009190614efb565b604051630852cd8d60e31b81526004810189905291955093506001600160a01b038816906342966c68906024015f604051808303815f87803b158015611f44575f80fd5b505af1158015611f56573d5f803e3d5ffd5b505050508015611fd45760208501516001600160a01b031673940181a94a35a4569e4529a3cdfb74e38fd9863103611f9c57611f92828561463e565b93505f9150611fd4565b60408501516001600160a01b031673940181a94a35a4569e4529a3cdfb74e38fd9863103611fd457611fce828461463e565b92505f91505b5093509350939050565b5f8080808064e8d4a510008c028b01611ffb8b8b8b8b8b86612b19565b919650935091505f6120458c8c8c8961201d57612018878e61463e565b612027565b612027888e614668565b8a61203b57612036898e614668565b612c3a565b612036888e61463e565b6001600160801b0316905061206d8f670de0b6b3a764000083611c1e9092919063ffffffff16565b96506120849050838d670de0b6b3a7640000611c1e565b93508383039250509850985098509850989350505050565b5f80855f036120af575082905081612198565b8a515f036121865761216c888a6060015162ffffff168b5f01516001600160a01b0316631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa158015612104573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121289190614f1d565b8c61014001518d61010001518e61012001518e612145578a61214f565b61214f8e8c614668565b8f6121635761215e8f8c614668565b612165565b8a5b8e8e612cf9565b945061217c8a8a8a888888612dc2565b9092509050612198565b6121928a8a8a8e612fdb565b90925090505b995099975050505050505050565b5f8080806001600160a01b038816731dc7a0f5336f52724b650e39174cfcbbedd67bf11480156121e85773827922686190790b37229fd06084350e74485b7298505b6020880151612201906001600160a01b03168a89612608565b604088015161221a906001600160a01b03168a88612608565b5f806001600160a01b038b167303a520b32c04bf3beef7beb72e919cf822ed34f1146123575773827922686190790b37229fd06084350e74485b726001600160a01b031663b5007d1f6040518061018001604052808d602001516001600160a01b031681526020018d604001516001600160a01b031681526020018d6080015160020b81526020018d60c0015160020b81526020018d60a0015160020b81526020018c81526020018b81526020015f81526020015f8152602001306001600160a01b031681526020014281526020015f6001600160a01b03168152506040518263ffffffff1660e01b81526004016123129190614f38565b6080604051808303815f875af115801561232e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123529190615011565b61245c565b7303a520b32c04bf3beef7beb72e919cf822ed34f16001600160a01b031663883164566040518061016001604052808d602001516001600160a01b031681526020018d604001516001600160a01b031681526020018d6060015162ffffff1681526020018d60c0015160020b81526020018d60a0015160020b81526020018c81526020018b81526020015f81526020015f8152602001306001600160a01b03168152602001428152506040518263ffffffff1660e01b815260040161241c919061504c565b6080604051808303815f875af1158015612438573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061245c9190615011565b9299506001600160801b0390911697509250905061247a828a614668565b94506124868189614668565b9350821561257d5760405163095ea7b360e01b8152731dc7a0f5336f52724b650e39174cfcbbedd67bf160048201526024810188905273827922686190790b37229fd06084350e74485b729063095ea7b3906044015f604051808303815f87803b1580156124f2575f80fd5b505af1158015612504573d5f803e3d5ffd5b505060405163140e25ad60e31b8152600481018a9052731dc7a0f5336f52724b650e39174cfcbbedd67bf1925063a0712d6891506024016020604051808303815f875af1158015612557573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061257b9190614ee4565b505b505050945094509450949050565b5f8087156125c9578684116125a1575f846125a6565b868403875b9750935086156125c4576125c46001600160a01b0387168a89612a82565b6125fa565b8683116125d7575f836125dc565b868303875b9750925086156125fa576125fa6001600160a01b0386168a89612a82565b509197909650945050505050565b816014528060345263095ea7b360601b5f5260205f604460105f875af13d1560015f51141716612674575f60345263095ea7b360601b5f525f38604460105f875af1508060345260205f604460105f875af13d1560015f5114171661267457633e3f8f735f526004601cfd5b5f603452505050565b6126a86040518060800160405280606081526020016060815260200160608152602001606081525090565b846001600160401b038111156126c0576126c0613e42565b6040519080825280602002602001820160405280156126e9578160200160208202803683370190505b508152846001600160401b0381111561270457612704613e42565b60405190808252806020026020018201604052801561272d578160200160208202803683370190505b506020820152846001600160401b0381111561274b5761274b613e42565b604051908082528060200260200182016040528015612774578160200160208202803683370190505b506040820152846001600160401b0381111561279257612792613e42565b6040519080825280602002602001820160405280156127bb578160200160208202803683370190505b506060820152805180518991905f906127d6576127d6614948565b60200260200101906001600160a01b031690816001600160a01b0316815250508681602001515f8151811061280d5761280d614948565b602002602001018181525050600181604001515f8151811061283157612831614948565b602002602001018181525050600281606001515f8151811061285557612855614948565b6020908102919091010152600184156128ee57602087015182518051600190811061288257612882614948565b60200260200101906001600160a01b031690816001600160a01b0316815250508482604001516001815181106128ba576128ba614948565b602002602001018181525050600182606001516001815181106128df576128df614948565b60209081029190910101525060025b831561297f576040870151825180518390811061290d5761290d614948565b60200260200101906001600160a01b031690816001600160a01b031681525050838260400151828151811061294457612944614948565b60200260200101818152505060018260600151828151811061296857612968614948565b602090810291909101015261297c8161495c565b90505b8215612a175773940181a94a35a4569e4529a3cdfb74e38fd98631825f015182815181106129af576129af614948565b60200260200101906001600160a01b031690816001600160a01b03168152505082826040015182815181106129e6576129e6614948565b602002602001018181525050600182606001518281518110612a0a57612a0a614948565b6020026020010181815250505b50979650505050505050565b5f612a447333128a8fc17869897dce68ed026d694621f6fdfd8585856132ad565b949350505050565b5f612a4473ec8e5342b19977b4ef8892e02d8daecfa1315831735e7bb104d84c7cb9b682aac2f3d509f5f406809a868686613394565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505080612b045760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064015b60405180910390fd5b50505050565b815f528060020b60045260245ffd5b5f805f868910612b3e5760019250859150612b378960018887613457565b9050612c2e565b878911612b5457849150612b37895f8787613457565b5f612b608a8a8a6134b3565b90505f612b6f8b60018a6134fb565b90505f612b7c828961463e565b90505f612b9289670de0b6b3a764000084611c1e565b905083811015612be757600196505f612bb7858a670de0b6b3a7640000819003611c1e565b670de0b6b3a7640000019050612bd08286038483611c1e565b955050612be08d6001878b613547565b9550612c29565b5f965086612bfe858a670de0b6b3a7640000611c1e565b670de0b6b3a7640000039050612c178583038483611c1e565b965050612c268d5f888b613457565b94505b505050505b96509650969350505050565b5f836001600160a01b0316856001600160a01b03161115612c59579293925b846001600160a01b0316866001600160a01b031611612c8c57612c85612c808686866135a1565b613605565b905061053c565b836001600160a01b0316866001600160a01b03161015612ce1575f612cb28786866135a1565b90505f612cc087898661361f565b9050612cd8818310612cd25781613605565b82613605565b9250505061053c565b612cef612c8086868561361f565b9695505050505050565b5f8080805b6064811015612dad57612d158e8e8e8e8a8a613658565b9250886001600160a01b0316836001600160a01b031610612d4657612d3c8d8d8d8b613701565b9350505050612db4565b896001600160a01b0316836001600160a01b031611612d6b57612d3c8d8d8d8a61373d565b612d788e8e8e8e8761376e565b9096509450612d8d8e8b8b8b8b8b8b8a6137e8565b909750955091508115612da557849350505050612db4565b600101612cfe565b5083925050505b9a9950505050505050505050565b5f805f86612dd557876101800151612ddc565b8761016001515b90505f6001600160a01b038a167303a520b32c04bf3beef7beb72e919cf822ed34f114612e62578989602001518a604001518b60800151604051602001612e4e94939291906001600160a01b03948516815292841660208401529216604082015260029190910b606082015260800190565b604051602081830303815290604052612ebf565b8989602001518a604001518b60600151604051602001612eaf94939291906001600160a01b03948516815292841660208401529216604082015262ffffff91909116606082015260800190565b6040516020818303038152906040525b90505f808a5f01516001600160a01b031663128acb08308c8c612ee190615110565b88886040518663ffffffff1660e01b8152600401612f0395949392919061512a565b60408051808303815f875af1158015612f1e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f429190614efb565b9150915089612f5957612f5482615110565b612f62565b612f6281615110565b891115612f7a576001600160a01b0384166101408c01525b89612f9757612f8882615110565b612f92908961463e565b612fa1565b612fa18289614668565b955089612fb757612fb28188614668565b612fca565b612fc081615110565b612fca908861463e565b945050505050965096945050505050565b5f805f805f85806020019051810190612ff49190615164565b9250925092505f8761300a578860400151613010565b88602001515b90506130266001600160a01b0382168585612608565b5f80856001600160a01b03168460405161304091906151f3565b5f604051808303815f865af19150503d805f8114613079576040519150601f19603f3d011682016040523d82523d5f602084013e61307e565b606091505b50915091508181906130a35760405162461bcd60e51b8152600401612afb919061520e565b507303a520b32c04bf3beef7beb72e919cf822ed34f0196001600160a01b038d1601613149578a5f01516001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015613108573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312c9190614d07565b5050506001600160a01b039093166101408f0152506131c3915050565b8a5f01516001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160c060405180830381865afa158015613188573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131ac9190614c0f565b5050506001600160a01b039092166101408e015250505b60208b01516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561320b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061322f9190614ee4565b6040808d015190516370a0823160e01b81523060048201529199506001600160a01b0316906370a0823190602401602060405180830381865afa158015613278573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061329c9190614ee4565b965050505050505094509492505050565b5f826001600160a01b0316846001600160a01b0316106132cb575f80fd5b604080516001600160a01b03808716602083015285169181019190915262ffffff83166060820152859060800160408051601f19818403018152908290528051602091820120613373939290917fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5491016001600160f81b0319815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b60408051601f19818403018152919052805160209091012095945050505050565b5f826001600160a01b0316846001600160a01b0316106133b2575f80fd5b604080516001600160a01b038087166020830152851691810191909152600283900b6060820152612cef9087906080016040516020818303038152906040528051906020012087604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b8152606093841b60148201526f5af43d82803e903d91602b57fd5bf3ff60801b6028820152921b6038830152604c8201526037808220606c830152605591012090565b5f6001600160801b0385111561346b575f80fd5b5f613483670de0b6b3a7640000848103908690611c1e565b9050846134a15761349c81600160c01b6002890a61394d565b612cef565b612cef816002880a600160c01b61394d565b5f6001600160801b038411156134c7575f80fd5b8284035f836002870a816134dd576134dd61456e565b0460028702869003039050612cef82670de0b6b3a764000083611c1e565b5f8261352957613524826135146002600160601b615300565b61351f600288615300565b61394d565b612a44565b612a4482613538600287615300565b61351f6002600160601b615300565b5f6001600160801b0385111561355b575f80fd5b5f8461357857613573846002880a600160c01b61394d565b61358a565b61358a84600160c01b6002890a61394d565b9050612cef81670de0b6b3a7640000858103611c1e565b5f826001600160a01b0316846001600160a01b031611156135c0579192915b5f6135e2856001600160a01b0316856001600160a01b0316600160601b6139e9565b90506135fa83828787036001600160a01b03166139e9565b9150505b9392505050565b806001600160801b038116811461361a575f80fd5b919050565b5f826001600160a01b0316846001600160a01b0316111561363e579192915b612a4482600160601b8686036001600160a01b03166139e9565b5f8061366b84620f424089810390611c1e565b90505f8089156136a9576136828789856001613a8f565b6001600160a01b031691506136998789875f613b7e565b6001600160a01b031690506136d9565b6136b58789875f613a8f565b6001600160a01b031691506136cd8789856001613b7e565b6001600160a01b031690505b896136f6576136f18183016002808206151591040190565b612db4565b600282820104612db4565b5f8061371483620f424088810390613c5c565b90505f6137248587846001613a8f565b90506137328186885f613c7f565b979650505050505050565b5f8061375083620f424088810390613c5c565b90505f6137608587846001613b7e565b90506137328582885f613ccb565b5f8086156137ac575f6137848486886001613ccb565b905061379681620f4240898103613c5c565b92506137a48486885f613c7f565b9150506137de565b5f6137ba8585886001613c7f565b90506137cc81620f4240898103613c5c565b92506137da8585885f613ccb565b9150505b9550959350505050565b5f805f805f8c156138235761380d868c8a8d11613805575f6135a1565b8a8d036135a1565b915061381c8c87898c0161361f565b905061384f565b613830868c898d016135a1565b915061384c8c878a8c11613844575f61361f565b8a8c0361361f565b90505b5f81831061386f5761386a82670de0b6b3a764000085611c1e565b613882565b61388283670de0b6b3a764000084611c1e565b670de0b6b3a7640000039050620f42408110828410156138ec575f6138b28f8a6138ab88613605565b6001613c7f565b90508f6138c457808c039a508a6138e5565b8b81116138dd576138d88a6009600a611c1e565b6138e1565b8b81035b9950895b5050613938565b5f613902898f6138fb87613605565b6001613ccb565b90508f61392e578c81116139225761391d8a6009600a611c1e565b613926565b8c81035b995089613935565b808d039a508a5b50505b9e989d50969b50969950505050505050505050565b5f838302815f198587098281108382030391505080841161396c575f80fd5b805f0361397e575082900490506135fe565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f80805f19858709858702925082811083820303915050805f03613a1d575f8411613a12575f80fd5b5082900490506135fe565b808411613a28575f80fd5b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f825f03613a9e575083612a44565b600160601b600160e01b03606085901b168215613b38576001600160a01b03861684810290858281613ad257613ad261456e565b0403613b0257818101828110613b0057613af683896001600160a01b031683613d83565b9350505050612a44565b505b50613b308185613b1b6001600160a01b038a1683614ed1565b613b25919061463e565b808204910615150190565b915050612a44565b6001600160a01b038616848102908582041481831116613b5f5763f5c787f15f526004601cfd5b808203613af6613b79846001600160a01b038b1684613d83565b613db3565b5f8115613be1575f6001600160a01b03841115613bb257613bad84600160601b876001600160801b031661394d565b613bc9565b613bc96001600160801b038616606086901b614ed1565b9050613b30613b79826001600160a01b03891661463e565b5f6001600160a01b03841115613c0e57613c0984600160601b876001600160801b0316613d83565b613c2b565b613c2b606085901b6001600160801b038716808204910615150190565b9050806001600160a01b03871611613c4a57634323a5555f526004601cfd5b6001600160a01b038616039050612a44565b5f825f190484118302158202613c70575f80fd5b50910281810615159190040190565b5f6001600160a01b038481169086160360ff81901d90810118600160601b6001600160801b038516613cb281848461394d565b9350845f83858409111684019350505050949350505050565b5f836001600160a01b0316856001600160a01b03161115613cea579293925b6001600160a01b038516613d045762bfc9215f526004601cfd5b600160601b600160e01b03606084901b166001600160a01b038686031683613d5757866001600160a01b0316613d448383896001600160a01b031661394d565b81613d5157613d5161456e565b04613732565b613732613d6e8383896001600160a01b0316613d83565b886001600160a01b0316808204910615150190565b5f613d8f84848461394d565b90508180613d9f57613d9f61456e565b838509156135fe57600101806135fe575f80fd5b806001600160a01b038116811461361a5761361a6393dafdf160e01b805f5260045ffd5b604080516101a0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081019190915290565b634e487b7160e01b5f52604160045260245ffd5b6040516101a081016001600160401b0381118282101715613e7957613e79613e42565b60405290565b604051608081016001600160401b0381118282101715613e7957613e79613e42565b604051606081016001600160401b0381118282101715613e7957613e79613e42565b604051601f8201601f191681016001600160401b0381118282101715613eeb57613eeb613e42565b604052919050565b6001600160a01b0381168114613f07575f80fd5b50565b803561361a81613ef3565b62ffffff81168114613f07575f80fd5b803561361a81613f15565b8060020b8114613f07575f80fd5b803561361a81613f30565b6001600160801b0381168114613f07575f80fd5b803561361a81613f49565b5f6101a08284031215613f79575f80fd5b613f81613e56565b613f8a83613f0a565b8152613f9860208401613f0a565b6020820152613fa960408401613f0a565b6040820152613fba60608401613f25565b6060820152613fcb60808401613f3e565b6080820152613fdc60a08401613f3e565b60a0820152613fed60c08401613f3e565b60c0820152613ffe60e08401613f5d565b60e0820152610100614011818501613f0a565b90820152610120614023848201613f0a565b9082015261014083810135908201526101608084013590820152610180928301359281019290925250919050565b5f8083601f840112614061575f80fd5b5081356001600160401b03811115614077575f80fd5b60208301915083602082850101111561408e575f80fd5b9250929050565b5f805f805f805f60c0888a0312156140ab575f80fd5b87356140b681613ef3565b965060208801356140c681613ef3565b95506040880135945060608801356140dd81613f30565b935060808801356140ed81613f30565b925060a08801356001600160401b03811115614107575f80fd5b6141138a828b01614051565b989b979a50959850939692959293505050565b5f805f805f6080868803121561413a575f80fd5b853561414581613ef3565b9450602086013561415581613ef3565b93506040860135925060608601356001600160401b03811115614176575f80fd5b61418288828901614051565b969995985093965092949392505050565b5f602082840312156141a3575f80fd5b81356135fe81613ef3565b5f805f805f60a086880312156141c2575f80fd5b85356141cd81613ef3565b94506020860135935060408601356141e481613f30565b925060608601356141f481613f30565b9150608086013561420481613ef3565b809150509295509295909350565b81516001600160a01b031681526101a08101602083015161423e60208401826001600160a01b03169052565b50604083015161425960408401826001600160a01b03169052565b506060830151614270606084018262ffffff169052565b506080830151614285608084018260020b9052565b5060a083015161429a60a084018260020b9052565b5060c08301516142af60c084018260020b9052565b5060e08301516142ca60e08401826001600160801b03169052565b50610100838101516001600160a01b038116848301525050610120838101516001600160a01b0381168483015250506101408381015190830152610160808401519083015261018092830151929091019190915290565b5f805f60608486031215614333575f80fd5b505081359360208301359350604090920135919050565b5f805f6060848603121561435c575f80fd5b833561436781613ef3565b9250602084013561437781613ef3565b9150604084013561438781613ef3565b809150509250925092565b5f80602083850312156143a3575f80fd5b82356001600160401b038111156143b8575f80fd5b6143c485828601614051565b90969095509350505050565b5f815180845260208085019450602084015f5b838110156143ff578151875295820195908201906001016143e3565b509495945050505050565b8051608080845281519084018190525f916020919082019060a0860190845b8181101561444e5783516001600160a01b031683529284019291840191600101614429565b505060208501519250858103602087015261446981846143d0565b925050506040830151848203604086015261448482826143d0565b9150506060830151848203606086015261053c82826143d0565b602081525f6135fe602083018461440a565b5f805f80606085870312156144c3575f80fd5b843593506020850135925060408501356001600160401b038111156144e6575f80fd5b6144f287828801614051565b95989497509550505050565b5f5b83811015614518578181015183820152602001614500565b50505f910152565b5f81518084526145378160208601602086016144fe565b601f01601f19169290920160200192915050565b6001600160a01b03831681526040602082018190525f90612a4490830184614520565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f8160020b8360020b806145ac576145ac61456e565b627fffff1982145f19821416156145c5576145c5614582565b90059392505050565b5f8260020b8260020b028060020b91508082146145ed576145ed614582565b5092915050565b600282810b9082900b03627fffff198112627fffff8213171561042c5761042c614582565b600281810b9083900b01627fffff8113627fffff198212171561042c5761042c614582565b8082018082111561042c5761042c614582565b808202811582820484141761042c5761042c614582565b8181038181111561042c5761042c614582565b8051801515811461361a575f80fd5b5f6020828403121561469a575f80fd5b6135fe8261467b565b5f602082840312156146b3575f80fd5b81516135fe81613ef3565b5f6001600160401b038211156146d6576146d6613e42565b5060051b60200190565b5f82601f8301126146ef575f80fd5b813560206147046146ff836146be565b613ec3565b8083825260208201915060208460051b870101935086841115614725575f80fd5b602086015b8481101561474a57803561473d81613ef3565b835291830191830161472a565b509695505050505050565b5f82601f830112614764575f80fd5b813560206147746146ff836146be565b8083825260208201915060208460051b870101935086841115614795575f80fd5b602086015b8481101561474a578035835291830191830161479a565b5f6001600160401b038211156147c9576147c9613e42565b50601f01601f191660200190565b5f82601f8301126147e6575f80fd5b81356147f46146ff826147b1565b818152846020838601011115614808575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215614838575f80fd5b85356001600160401b038082111561484e575f80fd5b908701906080828a031215614861575f80fd5b614869613e7f565b823582811115614877575f80fd5b6148838b8286016146e0565b825250602083013582811115614897575f80fd5b6148a38b828601614755565b6020830152506040830135828111156148ba575f80fd5b6148c68b828601614755565b6040830152506060830135828111156148dd575f80fd5b6148e98b828601614755565b60608301525096506148fd60208901613f0a565b955061490b60408901613f3e565b945061491960608901613f3e565b9350608088013591508082111561492e575f80fd5b5061493b888289016147d7565b9150509295509295909350565b634e487b7160e01b5f52603260045260245ffd5b5f6001820161496d5761496d614582565b5060010190565b5f805f8060808587031215614987575f80fd5b843561499281613ef3565b935060208501356149a281613ef3565b925060408501356149b281613ef3565b915060608501356149c281613f15565b939692955090935050565b60a081525f6149df60a083018961440a565b60018060a01b03881660208401528660020b60408401528560020b60608401528281036080840152838152838560208301375f602085830101526020601f19601f860116820101915050979650505050505050565b60a081525f614a4660a083018861440a565b602083820381850152614a59828961440a565b9150604084830360408601526060830188516060855281815180845260808701915085830193505f92505b80831015614ab657835180516001600160a01b0316835286015186830152928501926001929092019190840190614a84565b50848b01518587015260408b015160408701528781036060890152614adb818b614520565b955050505050508281036080840152614af48185614520565b98975050505050505050565b80516bffffffffffffffffffffffff8116811461361a575f80fd5b805161361a81613f49565b5f805f805f805f805f805f806101808d8f031215614b42575f80fd5b614b4b8d614b00565b9b5060208d0151614b5b81613ef3565b60408e0151909b50614b6c81613ef3565b60608e0151909a50614b7d81613ef3565b60808e0151909950614b8e81613f30565b60a08e0151909850614b9f81613f30565b60c08e0151909750614bb081613f30565b9550614bbe60e08e01614b1b565b94506101008d015193506101208d01519250614bdd6101408e01614b1b565b9150614bec6101608e01614b1b565b90509295989b509295989b509295989b565b805161ffff8116811461361a575f80fd5b5f805f805f8060c08789031215614c24575f80fd5b8651614c2f81613ef3565b6020880151909650614c4081613f30565b9450614c4e60408801614bfe565b9350614c5c60608801614bfe565b9250614c6a60808801614bfe565b9150614c7860a0880161467b565b90509295509295509295565b5f60208284031215614c94575f80fd5b81516135fe81613f15565b5f805f805f805f805f805f806101808d8f031215614cbb575f80fd5b614cc48d614b00565b9b5060208d0151614cd481613ef3565b60408e0151909b50614ce581613ef3565b60608e0151909a50614cf681613ef3565b60808e0151909950614b8e81613f15565b5f805f805f805f60e0888a031215614d1d575f80fd5b8751614d2881613ef3565b6020890151909750614d3981613f30565b9550614d4760408901614bfe565b9450614d5560608901614bfe565b9350614d6360808901614bfe565b925060a088015160ff81168114614d78575f80fd5b9150614d8660c0890161467b565b905092959891949750929550565b5f60208284031215614da4575f80fd5b81516135fe81613f30565b6001600160a01b0385811682526080602080840182905286519184018290525f928782019290919060a0860190855b81811015614dfc578551851683529483019491830191600101614dde565b50508581036040870152614e1081896143d0565b9350505050828103606084015261373281856143d0565b5f6020808385031215614e38575f80fd5b82516001600160401b03811115614e4d575f80fd5b8301601f81018513614e5d575f80fd5b8051614e6b6146ff826146be565b81815260609182028301840191848201919088841115614e89575f80fd5b938501935b83851015612a175780858a031215614ea4575f80fd5b614eac613ea1565b8551815286860151878201526040808701519082015283529384019391850191614e8e565b5f82614edf57614edf61456e565b500490565b5f60208284031215614ef4575f80fd5b5051919050565b5f8060408385031215614f0c575f80fd5b505080516020909101519092909150565b5f60208284031215614f2d575f80fd5b81516135fe81613f49565b81516001600160a01b0316815261018081016020830151614f6460208401826001600160a01b03169052565b506040830151614f79604084018260020b9052565b506060830151614f8e606084018260020b9052565b506080830151614fa3608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151614fe9828501826001600160a01b03169052565b50506101408381015190830152610160928301516001600160a01b0316929091019190915290565b5f805f8060808587031215615024575f80fd5b84519350602085015161503681613f49565b6040860151606090960151949790965092505050565b81516001600160a01b031681526101608101602083015161507860208401826001600160a01b03169052565b50604083015161508f604084018262ffffff169052565b5060608301516150a4606084018260020b9052565b5060808301516150b9608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e0830152610100808401518184015250610120808401516150ff828501826001600160a01b03169052565b505061014092830151919092015290565b5f600160ff1b820161512457615124614582565b505f0390565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a0608082018190525f9061373290830184614520565b5f805f60608486031215615176575f80fd5b835161518181613ef3565b6020850151604086015191945092506001600160401b038111156151a3575f80fd5b8401601f810186136151b3575f80fd5b80516151c16146ff826147b1565b8181528760208385010111156151d5575f80fd5b6151e68260208301602086016144fe565b8093505050509250925092565b5f82516152048184602087016144fe565b9190910192915050565b602081525f6135fe6020830184614520565b600181815b8085111561525a57815f190482111561524057615240614582565b8085161561524d57918102915b93841c9390800290615225565b509250929050565b5f826152705750600161042c565b8161527c57505f61042c565b8160018114615292576002811461529c576152b8565b600191505061042c565b60ff8411156152ad576152ad614582565b50506001821b61042c565b5060208310610133831016604e8410600b84101617156152db575081810a61042c565b6152e58383615220565b805f19048211156152f8576152f8614582565b029392505050565b5f6135fe60ff84168361526256fea2646970667358221220549ef7330b3e48b0ff1b1119522cf9057d3de96f1ef4648de183fc49baeb6d0464736f6c63430008160033000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000002c68af0bb1400000000000000000000000000000000000000000000000000000d99a8cec7e20000