0 txs
79.4k calls
constructor
constructor()
functions
apr
viewfunction apr() view returns (uint256 lendApr_, uint256 borrowApr_)
getRealReserves
viewfunction getRealReserves() view returns (uint256 ftReserve, uint256 xtReserve)
getVersion
purefunction getVersion() pure returns (string)
maker
viewfunction maker() view returns (address)
market
viewfunction market() view returns (address)
orderConfig
viewfunction orderConfig() view returns (tuple orderConfig_)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingOwner
viewfunction pendingOwner() view returns (address)
pool
viewfunction pool() view returns (address)
tokenReserves
viewfunction tokenReserves() view returns (uint256 ftReserve, uint256 xtReserve)
virtualXtReserve
viewfunction virtualXtReserve() view returns (uint256)
acceptOwnership
nonpayablefunction acceptOwnership()
addLiquidity
nonpayablefunction addLiquidity(address asset, uint256 amount)
borrowToken
nonpayablefunction borrowToken(address recipient, uint256 amount)
initialize
nonpayablefunction initialize(tuple params)
initialize
nonpayablefunction initialize(address, address[3], address, uint256, address, tuple, tuple)
pause
nonpayablefunction pause()
redeemAll
nonpayablefunction redeemAll(address recipient) returns (uint256 badDebt, bytes deliveryData)
removeLiquidity
nonpayablefunction removeLiquidity(address asset, uint256 amount, address recipient)
renounceOwnership
nonpayablefunction renounceOwnership()
setCurveAndPrice
nonpayablefunction setCurveAndPrice(uint256 originalVirtualXtReserve, uint256 virtualXtReserve_, uint256 maxXtReserve_, tuple newCurveCuts)
setGeneralConfig
nonpayablefunction setGeneralConfig(uint256 gtId, address swapTrigger)
setPool
nonpayablefunction setPool(address newPool)
swapExactTokenToToken
nonpayablefunction swapExactTokenToToken(address tokenIn, address tokenOut, address recipient, uint128 tokenAmtIn, uint128 minTokenOut, uint256 deadline) returns (uint256 netTokenOut)
swapTokenToExactToken
nonpayablefunction swapTokenToExactToken(address tokenIn, address tokenOut, address recipient, uint128 tokenAmtOut, uint128 maxTokenIn, uint256 deadline) returns (uint256 netTokenIn)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
updateFeeConfig
nonpayablefunction updateFeeConfig(tuple newFeeConfig)
updateOrder
nonpayablefunction updateOrder(tuple newOrderConfig, int256 ftChangeAmt, int256 xtChangeAmt)
withdrawAllAssetsBeforeMaturity
nonpayablefunction withdrawAllAssetsBeforeMaturity(address recipient) returns (uint256 debtTokenAmount, uint256 ftAmount, uint256 xtAmount)
withdrawAssets
nonpayablefunction withdrawAssets(address token, address recipient, uint256 amount)
events
Borrowed
event Borrowed(address indexed recipient, uint256 amount)
CurveAndPriceUpdated
event CurveAndPriceUpdated(uint256 virtualXtReserve, uint256 maxXtReserve, ((uint256 xtReserve, uint256 liqSquare, int256 offset)[] lendCurveCuts, (uint256 xtReserve, uint256 liqSquare, int256 offset)[] borrowCurveCuts) curveCuts)
GeneralConfigUpdated
event GeneralConfigUpdated(uint256 gtId, address swapTrigger)
Initialized
event Initialized(uint64 version)
MakerOwnershipTransferred
event MakerOwnershipTransferred(address oldMaker, address newMaker)
OrderInitialized
event OrderInitialized(address indexed maker, address indexed market)
OrderInitialized
event OrderInitialized(address indexed market, address indexed maker, uint256 maxXtReserve, address swapTrigger, ((uint256 xtReserve, uint256 liqSquare, int256 offset)[] lendCurveCuts, (uint256 xtReserve, uint256 liqSquare, int256 offset)[] borrowCurveCuts) curveCuts)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
PoolUpdated
event PoolUpdated(address indexed pool)
Redeemed
event Redeemed(address indexed recipient, uint256 debtTokenAmount, uint256 badDebt, bytes deliveryData)
RedeemedAllBeforeMaturity
event RedeemedAllBeforeMaturity(address indexed recipient, uint256 debtTokenAmount, uint256 ftAmount, uint256 xtAmount)
SwapExactTokenToToken
event SwapExactTokenToToken(address indexed tokenIn, address indexed tokenOut, address caller, address recipient, uint128 tokenAmtIn, uint128 netTokenOut, uint128 feeAmt)
SwapTokenToExactToken
event SwapTokenToExactToken(address indexed tokenIn, address indexed tokenOut, address caller, address recipient, uint128 tokenAmtOut, uint128 netTokenIn, uint128 feeAmt)
Unpaused
event Unpaused(address account)
UpdateFeeConfig
event UpdateFeeConfig((uint32 lendTakerFeeRatio, uint32 lendMakerFeeRatio, uint32 borrowTakerFeeRatio, uint32 borrowMakerFeeRatio, uint32 mintGtFeeRatio, uint32 mintGtFeeRef) feeConfig)
UpdateOrder
event UpdateOrder(((uint256 xtReserve, uint256 liqSquare, int256 offset)[] lendCurveCuts, (uint256 xtReserve, uint256 liqSquare, int256 offset)[] borrowCurveCuts) curveCuts, int256 ftChangeAmt, int256 xtChangeAmt, uint256 gtId, uint256 maxXtReserve, address swapTrigger)
WithdrawAssets
event WithdrawAssets(address indexed token, address indexed caller, address indexed recipient, uint256 amount)
errors
BorrowIsNotAllowed
error BorrowIsNotAllowed()
CanNotRedeemBeforeFinalLiquidationDeadline
error CanNotRedeemBeforeFinalLiquidationDeadline(uint256 liquidationDeadline)
CanNotTransferUintMax
error CanNotTransferUintMax()
CantNotIssueFtWithoutGt
error CantNotIssueFtWithoutGt()
CantNotSwapToken
error CantNotSwapToken(address tokenIn, address tokenOut)
CantSwapSameToken
error CantSwapSameToken()
DeadlineExpired
error DeadlineExpired()
EnforcedPause
error EnforcedPause()
EvacuationIsActived
error EvacuationIsActived()
EvacuationIsNotActived
error EvacuationIsNotActived()
ExpectedPause
error ExpectedPause()
FeeConfigCanNotBeUpdated
error FeeConfigCanNotBeUpdated()
GtNotApproved
error GtNotApproved(uint256 gtId)
InsufficientLiquidity
error InsufficientLiquidity()
InvalidCurveCuts
error InvalidCurveCuts()
InvalidInitialization
error InvalidInitialization()
LendIsNotAllowed
error LendIsNotAllowed()
NotEnoughFtOrXtToWithdraw
error NotEnoughFtOrXtToWithdraw()
NotInitializing
error NotInitializing()
OnlyMarket
error OnlyMarket()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PriceChangedBeforeSet
error PriceChangedBeforeSet()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedIntToUint
error SafeCastOverflowedIntToUint(int256 value)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeCastOverflowedUintToInt
error SafeCastOverflowedUintToInt(uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
TermIsNotOpen
error TermIsNotOpen()
UnexpectedAmount
error UnexpectedAmount(uint256 expectedAmt, uint256 actualAmt)
UpdateOrderFunctionDisabled
error UpdateOrderFunctionDisabled()
UseOrderInitializationFunctionV2
error UseOrderInitializationFunctionV2()
XtReserveTooHigh
error XtReserveTooHigh()
creation bytecode
0x6080806040523460aa575f516020615fa85f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b604051615ef990816100af8239f35b6001600160401b0319166001600160401b039081175f516020615fa85f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f905f3560e01c90816307e470f314612d98575080630d8e6e2c14612d5157806316f0115b14612d295780633f4ba83a14612cab5780634437152a14612c8057806347fdbc8e146128615780634aba348f146124b05780634bad9510146123b257806350655d8c14611542578063556eb40f1461236a578063566887001461209757806357ded9c914611dd057806359fbf526146119b95780635a91b39c146117b45780635c975abb14611785578063604df3f314611758578063715018a6146116d957806379ba50971461168c5780637bd58ea91461161157806380f55605146115ea5780638456cb59146115775780638da5cb5b14611542578063ab0a2c36146114dd578063b53f9bff14611495578063be399be51461106a578063be4319b914610ef0578063d5501b0b14610cf5578063e30c397814610cc0578063f119bef31461092c578063f13de92414610733578063f2fde38b146106ad5763f4c6787e1461017e575f80fd5b346104995761018c3661316d565b949391956101986138e4565b6101a0613f7f565b6001600160401b03600b541642101561069e578095421161068f576001600160a01b03858116908416146106805780916001600160801b03881615158061066e575b61028a575b5050947f48054139172b057097b1c514c1e58472e50cc4e9f779f0447d95c62b30403df89161026e60209761022461021e89614660565b91614660565b604080513381526001600160a01b0398891660208201526001600160801b0396871691810191909152918516606083015290931660808401529084169490931692819060a0820190565b0390a360015f516020615e645f395f51905f5255604051908152f35b6003546001546002549398506001600160a01b03918216945092811692166102b0613353565b88546040516379502c5560e01b81529193919061010090829060049082906001600160a01b03165afa90811561066357906040918b91610634575b5001516080840152826001600160a01b03891686148080610622575b1561052c57506001600160801b0361032992166001600160801b038c166141ec565b9692969591949094969a5b60608201516001600160a01b0316806103c4575b5050938b8760209d98958a8f8f90978f976001600160801b037f48054139172b057097b1c514c1e58472e50cc4e9f779f0447d95c62b30403df89f9d999a61026e9d61039b866103a59e30903390614213565b01519716946142ac565b6103b96001600160801b03851687856145f9565b9297508193506101e7565b6001546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa80156105215783906104ee575b6002546040516370a0823160e01b81523060048201529250602090839060249082906001600160a01b03165afa9182156104e35784926104ab575b50823b156104a757604051636d1f912560e11b81526004810191909152602481019190915260448101889052606481018990529082908290608490829084905af1801561049c57156103485761048f828092612e96565b6104995780610348565b80fd5b6040513d84823e3d90fd5b8380fd5b9091506020813d6020116104db575b816104c760209383612e96565b810103126104d75751905f610438565b5f80fd5b3d91506104ba565b6040513d86823e3d90fd5b506020813d602011610519575b8161050860209383612e96565b810103126104d757602490516103fd565b3d91506104fb565b6040513d85823e3d90fd5b80610610575b15610562576001600160801b0361055392166001600160801b038c166141c8565b9692969591949094969a610334565b6001600160a01b0389168314806105fe575b15610595576001600160801b0361055392166001600160801b038c166141a4565b506001600160a01b0388168414806105ec575b156105ca57826001600160801b0361055392166001600160801b038c1661414b565b63db5f019960e01b89526001600160a01b038089166004528616602452604489fd5b506001600160a01b03861685146105a8565b506001600160a01b0387168614610574565b506001600160a01b0387168514610532565b506001600160a01b0388168414610307565b61065691506101003d811161065c575b61064e8183612e96565b81019061340e565b5f6102eb565b503d610644565b6040513d8c823e3d90fd5b506001600160801b03811615156101e2565b63062bc18360e51b8152600490fd5b631ab7da6b60e01b8152600490fd5b630cf6cf4760e01b8152600490fd5b5034610499576020366003190112610499576106c7612dd6565b6106cf6134f4565b5f516020615ea45f395f51905f5280546001600160a01b0319166001600160a01b039283169081179091555f516020615de45f395f51905f52549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b5034610499576102003660031901126104995761074e612dd6565b5036604312156104995760405161076481612e7b565b36608411610910576024905b608482106109145782610781612eb7565b5061078a612fce565b5060e4356001600160401b038111610910576107aa903690600401612f6f565b506101003661010319011261049957604051906107c682612e7b565b610104356001600160a01b0381168103610910578252610124356001600160401b038116810361091057602083015260c0366101431901126104995760405161080e81612e60565b6101443563ffffffff8116810361090c5781526101643563ffffffff8116810361090c5760208201526101843563ffffffff8116810361090c5760408201526101a43563ffffffff8116810361090c5760608201526101c43563ffffffff8116810361090c5760808201526101e43563ffffffff8116810361090c5760049360409160a084015201525f516020615e845f395f51905f52546001600160401b038116801591826108fc575b5060011490816108f2575b1590816108e9575b506108dd576338acf2a160e11b8152fd5b63f92ee8a960e01b8152fd5b905015836108cc565b303b1591506108c4565b60401c60ff1615915060016108b9565b8280fd5b5080fd5b6020809161092184612dec565b815201910190610770565b503461049957602036600319011261049957610946612dd6565b61094e6138e4565b6109566134f4565b600d546001546002546001600160a01b0391821693859391831692909184911680610bc6575b50506040516370a0823160e01b815230600482015291602083602481885afa928315610bbb578693610b87575b5082946040516370a0823160e01b8152306004820152602081602481865afa908115610b7c578891610b4a575b5080948181105f14610b435780985b89610aa6575b5050508580975083610a809697610a95575b905084809250610a84575b505060408051868152602081018890529081018490526001600160a01b0392909216917fb5bc2699e393dc5e7873095d3f997a8c077efdb0897378be06169578bde282989150606090a260015f516020615e645f395f51905f5255604051938493846040919493926060820195825260208201520152565b0390f35b610a8d926145f9565b5f8282610a08565b610a9e926145f9565b5f86836109fd565b80549298509296955091906001600160a01b0316803b1561091057604051632770a7eb60e21b81526001600160a01b0386166004820152602481018a90529082908290604490829084905af1801561049c57610b2e575b505086610b1c81610b16610a8098999a610b22956134da565b996134da565b946134e7565b935085945f80806109eb565b610b39828092612e96565b6104995780610afd565b81986109e5565b90506020813d602011610b74575b81610b6560209383612e96565b810103126104d757515f6109d6565b3d9150610b58565b6040513d8a823e3d90fd5b9092506020813d602011610bb3575b81610ba360209383612e96565b810103126104d75751915f6109a9565b3d9150610b96565b6040513d88823e3d90fd5b6040516370a0823160e01b8152306004820152602081602481855afa908115610521578391610c8b575b5080610bfd575b5061097c565b604051635d043b2960e11b815260048101919091526001600160a01b0384166024820152306044820152929450602091839160649183915af1908115610c80578591610c4e575b5091845f80610bf7565b90506020813d602011610c78575b81610c6960209383612e96565b810103126104d757515f610c44565b3d9150610c5c565b6040513d87823e3d90fd5b9250506020823d602011610cb8575b81610ca760209383612e96565b810103126104d7578691515f610bf0565b3d9150610c9a565b50346104995780600319360112610499575f516020615ea45f395f51905f52546040516001600160a01b039091168152602090f35b5034610499578060031936011261049957600d5481906001600160a01b031680610e2a575b506001546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa801561049c5783908390610df4575b610d6092506134e7565b6002546040516370a0823160e01b815230600482015291929190602090829060249082906001600160a01b03165afa918215610de85791610db5575b50604092610da9916134e7565b82519182526020820152f35b90506020813d602011610de0575b81610dd060209383612e96565b810103126104d757516040610d9c565b3d9150610dc3565b604051903d90823e3d90fd5b50506020813d602011610e22575b81610e0f60209383612e96565b810103126104d75782610d609151610d56565b3d9150610e02565b6040516370a0823160e01b815230600482015291925090602081602481855afa8015610521578390610ebd575b602091506024604051809481936303d1689d60e11b835260048301525afa90811561049c578291610e8b575b50905f610d1a565b90506020813d602011610eb5575b81610ea660209383612e96565b810103126104d757515f610e83565b3d9150610e99565b506020813d602011610ee8575b81610ed760209383612e96565b810103126104d75760209051610e57565b3d9150610eca565b5034610499578060031936011261049957604051610f0d81612e45565b604051610f1981612e16565b60608152606060208201528152816020820152816040820152816060820152608060405191610f4783612e60565b83835283602084015283604084015283606084015283828401528360a08401520152610f71613353565b81546040516379502c5560e01b81529061010090829060049082906001600160a01b03165afa908115610521579060409160a0949161104b575b500151906080810191825263ffffffff60405193849360208552610fdd8451610140602088015261016087019061322e565b9360208101516040870152604081015160608701526060600180851b039101511660808601525182815116828601528260208201511660c08601528260408201511660e086015282606082015116610100860152826080820151166101208601520151166101408301520390f35b61106491506101003d811161065c5761064e8183612e96565b5f610fab565b503461049957602036600319011261049957611084612dd6565b9061108d6138e4565b6110956134f4565b600d546001546040516370a0823160e01b8152306004820152606094926001600160a01b039081169260209183916024918391165afa9081156104e3578491611463575b508390849281611362575b80611263575b50818082111561125b576110fd916134da565b935b6005548160055580611211575b5060065481600655806111b3575b509161115891837f2f1ead687f88051b385d58986748ace72880f298dec383297d6d895d00a2deb69450806007558060085580600955600a556134e7565b916040519283528360208401526060604084015260018060a01b031691806111836060820187612db2565b0390a260015f516020615e645f395f51905f5255610a806040519283928352604060208401526040830190612db2565b806003029060038204036111fd57600682525f516020615e245f395f51905f52908101905b8181106111e5575061111a565b600390838155836001820155836002820155016111d8565b634e487b7160e01b82526011600452602482fd5b806003029060038204036111fd57600582525f516020615dc45f395f51905f52908101905b818110611243575061110c565b60039083815583600182015583600282015501611236565b5050836110ff565b6040516370a0823160e01b8152306004820152602081602481855afa90811561135757908792918391611322575b508061129f575b50506110ea565b604051635d043b2960e11b815260048101919091526001600160a01b0387166024820152306044820152929450602091839160649183915af1908115610c805785916112f0575b5091845f80611298565b90506020813d60201161131a575b8161130b60209383612e96565b810103126104d757515f6112e6565b3d91506112fe565b9250506020823d60201161134f575b8161133e60209383612e96565b810103126104d7578691515f611291565b3d9150611331565b6040513d89823e3d90fd5b8554604051633def417960e11b8152600481018490526001600160a01b0387811660248301529098509193508691889160449183918591165af18015610c8057859686916113b3575b5095916110e4565b9650503d8086883e6113c58188612e96565b86019560408188031261145f578051906020810151906001600160401b038211611443570187601f8201121561145b578051906001600160401b038211611447576040519861141e601f8401601f19166020018b612e96565b828a5260208383010111611443578188926020809301838c015e89010152955f6113ab565b8780fd5b634e487b7160e01b88526041600452602488fd5b8680fd5b8580fd5b90506020813d60201161148d575b8161147e60209383612e96565b810103126104d757515f6110d9565b3d9150611471565b50346104995760c0366003190112610499576004906114b336612ff5565b5080546001600160a01b031633036114d15763964ccc6760e01b8152fd5b639e0125a960e01b8152fd5b5034610499576080366003190112610499576064356001600160401b0381116109105761150e903690600401612f6f565b6115166134f4565b600c546004350361153357611530906044356024356139b2565b80f35b63049195d160e41b8252600482fd5b50346104995780600319360112610499575f516020615de45f395f51905f52546040516001600160a01b039091168152602090f35b50346104995780600319360112610499576115906134f4565b611598613f7f565b600160ff195f516020615e445f395f51905f525416175f516020615e445f395f51905f52557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b5034610499578060031936011261049957546040516001600160a01b039091168152602090f35b50346104995760603660031901126104995761162b612dd6565b611633612e00565b90604435916116406134f4565b61164b8382846145f9565b6040519283526001600160a01b03908116923392909116907f9bdcd4ac2980b31e1432dec749a61e528e22be62f85d228386ce6a3fb4c3ed7290602090a480f35b50346104995780600319360112610499575f516020615ea45f395f51905f5254336001600160a01b03909116036116c657611530336147c4565b63118cdaa760e01b815233600452602490fd5b50346104995780600319360112610499576116f26134f4565b5f516020615ea45f395f51905f5280546001600160a01b03199081169091555f516020615de45f395f51905f528054918216905581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b503461049957604036600319011261049957611530611775612e00565b61177d6134f4565b600435613e2a565b5034610499578060031936011261049957602060ff5f516020615e445f395f51905f5254166040519015158152f35b5034610499576040366003190112610499576117ce612dd6565b602435906117da6138e4565b6117e26134f4565b6001546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa9081156104e3578491611987575b506002546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa908115610c80578591611955575b50808411611946578082101561193f57505b828110611923575b50825483906001600160a01b0316803b1561091057604051632770a7eb60e21b81526001600160a01b0384166004820152602481018590529082908290604490829084905af1801561049c5761190e575b50506040519182526001600160a01b0316907fac59582e5396aca512fa873a2047e7f4c80f8f55d4a06cb34a78a0187f62719f90602090a260015f516020615e645f395f51905f525580f35b8161191891612e96565b61090c57825f6118c2565b61193061193991846134da565b60075490614691565b5f611871565b9050611869565b633c88ec4160e11b8552600485fd5b90506020813d60201161197f575b8161197060209383612e96565b810103126104d757515f611857565b3d9150611963565b90506020813d6020116119b1575b816119a260209383612e96565b810103126104d757515f61181c565b3d9150611995565b5034610499576119c83661316d565b949391956119d46138e4565b6119dc613f7f565b6001600160401b03600b541642101561069e578095421161068f576001600160a01b03858116908416146106805780916001600160801b038816611a52575b5050947fafc472950ba0847ac0541a7d71ad9977d695e4dba0cc223dba88d5fa8609732a9161026e60209761022461021e89614660565b6003546001546002549398506001600160a01b0391821694509281169216611a78613353565b88546040516379502c5560e01b81529193919061010090829060049082906001600160a01b03165afa90811561066357906040918b91611db1575b5001516080840152826001600160a01b038916831480611d9f575b15611cc8576001600160801b03611aef92166001600160801b038c16614127565b9692969591949094969a5b6001546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa90811561049c578291611c96575b506002546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa908115610521578391611c64575b5060608401516001600160a01b03169182611bfd575b50505050938b878c8a60209f9a976020978f976001600160801b037fafc472950ba0847ac0541a7d71ad9977d695e4dba0cc223dba88d5fa8609732a9f9d999a61026e9d611bdd611be79d848c169030903390614213565b01519716926142ac565b611bf28887856145f9565b929750819350611a1b565b823b156104a757604051636d1f912560e11b81526004810191909152602481019190915260448101889052606481018990529082908290608490829084905af1801561049c57611c4f575b8080611b85565b611c5a828092612e96565b6104995780611c48565b90506020813d602011611c8e575b81611c7f60209383612e96565b810103126104d757515f611b6f565b3d9150611c72565b90506020813d602011611cc0575b81611cb160209383612e96565b810103126104d757515f611b34565b3d9150611ca4565b6001600160a01b038916851480611d8d575b15611d0a576001600160801b03611cfb92166001600160801b038c166140ce565b9692969591949094969a611afa565b6001600160a01b03891686148080611d7b575b15611d3f57506001600160801b03611cfb92166001600160801b038c16614095565b905080611d69575b156105ca57826001600160801b03611cfb92166001600160801b038c16613fb6565b506001600160a01b0386168414611d47565b506001600160a01b0388168414611d1d565b506001600160a01b0387168614611cda565b506001600160a01b0387168614611ace565b611dca91506101003d811161065c5761064e8183612e96565b5f611ab3565b50346104995780600319360112610499576024611deb613e81565b6002546040516370a0823160e01b81523060048201529260209184919082906001600160a01b03165afa918215610521578392612063575b5060405191611e3183612e16565b600554611e3d81612ecd565b90611e4b6040519283612e96565b80825260058652855f516020615dc45f395f51905f52602084015b83831061202c5750505050835260065492611e8084612ecd565b93611e8e6040519586612e96565b80855260068652855f516020615e245f395f51905f52602087015b838310611ff55750505050602081019384528181518051155f14611f6f5750505083925b80518051611eeb575050604080519384525f19602085015293505050f35b8291611efd611f0b94611f0493613ec6565b90516132fa565b5183613f02565b949091506305f5e1008502948086046305f5e10014811517156111fd5764087f91cd00029480860461016d1490151715611f5b575092611f50611f569260409561330e565b90613335565b610da9565b634e487b7160e01b81526011600452602490fd5b611f8792611efd83611f8093613ec6565b5184613f02565b91506305f5e1008202918083046305f5e1001481151715611fe15764087f91cd00029180830461016d1490151715611fcd5790611f5084611fc79361330e565b92611ecd565b634e487b7160e01b86526011600452602486fd5b634e487b7160e01b87526011600452602487fd5b6003602060019260405161200881612e7b565b85548152848601548382015260028601546040820152815201920192019190611ea9565b6003602060019260405161203f81612e7b565b85548152848601548382015260028601546040820152815201920192019190611e66565b9091506020813d60201161208f575b8161207f60209383612e96565b810103126104d75751905f611e23565b3d9150612072565b503461049957604036600319011261049957806120b2612dd6565b602435906120be6138e4565b6120c66134f4565b6120d282303384614213565b600d5483546003546001600160a01b0391821693908216928216918116831461210b575b8560015f516020615e645f395f51905f525580f35b8161217e575050828261211d9261482f565b803b1561217a576040516340c10f1960e01b8152306004820152602481019290925282908290604490829084905af1801561049c57612165575b50505b805f808080806120f6565b8161216f91612e96565b61049957805f612157565b5050fd5b929150926024602060018060a01b0360015416604051928380926370a0823160e01b82523060048301525afa908115610bbb578691612333575b506002546040516370a0823160e01b81523060048201529190602090839060249082906001600160a01b03165afa9182156113575787926122fc575b50818111156122f45750915b82612292575b509261222461224e9361221c83946020976134e7565b92839161482f565b604051636e553f6560e01b8152600481019190915230602482015293849283919082906044820190565b03925af1801561049c57612263575b5061215a565b6122849060203d60201161228b575b61227c8183612e96565b81019061325b565b505f61225d565b503d612272565b803b1561145f57604051632770a7eb60e21b8152306004820152602481018490529086908290604490829084905af1908115610bbb5786916122d5575b50612206565b816122e291969496612e96565b6122f057845f9492946122cf565b8480fd5b905091612200565b965090506020863d60201161232b575b8161231960209383612e96565b810103126104d757869551905f6121f4565b3d915061230c565b9550506020853d602011612362575b8161234f60209383612e96565b810103126104d7576024869551906121b8565b3d9150612342565b5034610499576060366003190112610499576004356001600160401b038111610910579061239d6004923690840161308c565b506123a66134f4565b6344ae5b8160e11b8152fd5b50346104995780600319360112610499576001546040516370a0823160e01b81523060048201529190602090839060249082906001600160a01b03165afa908115610de857809161247b575b6002546040516370a0823160e01b81523060048201529350602090849060249082906001600160a01b03165afa908115610de85790612448575b6040809350519182526020820152f35b506020823d602011612473575b8161246260209383612e96565b810103126104d75760409151612438565b3d9150612455565b90506020823d6020116124a8575b8161249660209383612e96565b810103126104d75760249151906123fe565b3d9150612489565b5034610499576020366003190112610499576004356001600160401b0381116109105761012060031982360301126109105760405161012081018181106001600160401b0382111761284d5760405261250b82600401612dec565b815261251960248301612dec565b6020820190815261252c60448401612dec565b6040830190815261253f60648501612dec565b906060840191825261255360848601612dec565b6080850190815260a085019260a4870135845261257260c48801612dec565b9260c0870193845260e4880135976001600160401b03891689036128495760e08801988952610104810135906001600160401b0382116128455760046125bb923692010161308c565b9561010088019687525f516020615e845f395f51905f52549860ff8a60401c1615996001600160401b0381168015908161283d575b6001149081612833575b15908161282a575b5061281b5767ffffffffffffffff1981166001175f516020615e845f395f51905f52558a6127ef575b5088516001600160a01b031661263f61498f565b80156127db5792612748989795926001600160401b0361271d96938e61266861272d9b986147c4565b61267061498f565b60015f516020615e645f395f51905f525561268961498f565b5f516020615e445f395f51905f52805460ff1916905580546001600160a01b031990811633179091559051600b805467ffffffffffffffff1916939091169290921790915590516001805483166001600160a01b0392831617905591516002805483169184169190911790559151600380548416918316919091179055915160048054909216908316179055905116613527565b51825160408101519051916139b2565b5160208101516060909101516001600160a01b031690613e2a565b51604051919033906001600160a01b03167f5d5233c9f661df85e3b99502226cee2a749189baf89e7eefbe7745ffca7d4a768580a3612785575080f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29168ff0000000000000000195f516020615e845f395f51905f5254165f516020615e845f395f51905f525560018152a180f35b631e4fbdf760e01b8c5260048c905260248cfd5b68ffffffffffffffffff191668010000000000000001175f516020615e845f395f51905f52555f61262b565b63f92ee8a960e01b8c5260048cfd5b9050155f612602565b303b1591506125fa565b8c91506125f0565b8a80fd5b8980fd5b634e487b7160e01b84526041600452602484fd5b50346104d75760603660031901126104d75761287b612dd6565b906024356044356001600160a01b03811681036104d75761289a6138e4565b6128a26134f4565b600d545f546003546001600160a01b0390811696918116949216908161293b575050839450823b1561293657604051632770a7eb60e21b81526001600160a01b0392909216600483015260248201529082908290604490829084905af1801561049c57612921575b50505b60015f516020615e645f395f51905f525580f35b8161292b91612e96565b61049957805f61290a565b505050fd5b6001546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa8015612c03575f90612c4d575b6002546040516370a0823160e01b81523060048201529250602090839060249082906001600160a01b03165afa908115612c035789925f92612c16575b5081811115612c0e5750915b6001600160a01b031603612b20579495508594828110612a39575050823b1561293657604051632770a7eb60e21b81526001600160a01b0392909216600483015260248201529082908290604490829084905af1801561049c57612a24575b50505b61290d565b81612a2e91612e96565b61049957805f612a1c565b9194909293803b1561091057604051632770a7eb60e21b81526001600160a01b0386166004820152602481018490529082908290604490829084905af1801561049c57612b05575b505090612a9460209392612ad1956134da565b604051632d182be560e21b815260048101919091526001600160a01b03909216602483015230604483015290928391908290869082906064820190565b03925af1801561049c57612ae6575b5061290d565b612afe9060203d60201161228b5761227c8183612e96565b505f612ae0565b81612b139195949395612e96565b6122f0579091845f612a81565b90919381612b36575b5050612a1f9394506145f9565b803b156104d757604051632770a7eb60e21b815230600482015260248101839052905f908290604490829084905af18015612c0357612be6575b5080612b8360209284612baa989961482f565b604051636e553f6560e01b8152600481019190915230602482015294859081906044820190565b038188855af1938415610c8057612a1f94612bc7575b8594612b29565b612bdf9060203d60201161228b5761227c8183612e96565b505f612bc0565b612baa955090612bf85f602093612e96565b5f9550905080612b70565b6040513d5f823e3d90fd5b9050916129bd565b925090506020823d602011612c45575b81612c3360209383612e96565b810103126104d757889151905f6129b1565b3d9150612c26565b506020813d602011612c78575b81612c6760209383612e96565b810103126104d75760249051612974565b3d9150612c5a565b346104d75760203660031901126104d757612ca9612c9c612dd6565b612ca46134f4565b613527565b005b346104d7575f3660031901126104d757612cc36134f4565b5f516020615e445f395f51905f525460ff811615612d1a5760ff19165f516020615e445f395f51905f52557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b638dfc202b60e01b5f5260045ffd5b346104d7575f3660031901126104d757600d546040516001600160a01b039091168152602090f35b346104d7575f3660031901126104d757610a80604051612d72604082612e96565b60058152640322e302e360dc1b6020820152604051918291602083526020830190612db2565b346104d7575f3660031901126104d757602090600c548152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036104d757565b35906001600160a01b03821682036104d757565b602435906001600160a01b03821682036104d757565b604081019081106001600160401b03821117612e3157604052565b634e487b7160e01b5f52604160045260245ffd5b60a081019081106001600160401b03821117612e3157604052565b60c081019081106001600160401b03821117612e3157604052565b606081019081106001600160401b03821117612e3157604052565b90601f801991011681019081106001600160401b03821117612e3157604052565b608435906001600160a01b03821682036104d757565b6001600160401b038111612e315760051b60200190565b81601f820112156104d757803590612efb82612ecd565b92612f096040519485612e96565b828452602060608186019402830101918183116104d757602001925b828410612f33575050505090565b6060848303126104d7576020606091604051612f4e81612e7b565b86358152828701358382015260408701356040820152815201930192612f25565b91906040838203126104d75760405190612f8882612e16565b819380356001600160401b0381116104d75782612fa6918301612ee4565b83526020810135916001600160401b0383116104d757602092612fc99201612ee4565b910152565b60c435906001600160a01b03821682036104d757565b359063ffffffff821682036104d757565b60c09060031901126104d7576040519061300e82612e60565b8160043563ffffffff811681036104d757815260243563ffffffff811681036104d757602082015260443563ffffffff811681036104d757604082015260643563ffffffff811681036104d757606082015260843563ffffffff811681036104d757608082015260a4359063ffffffff821682036104d75760a00152565b808203929161014084126104d757604051906130a782612e45565b819483356001600160401b0381116104d75760c0926130c7918601612f6f565b835260208401356020840152604084013560408401526130e960608501612dec565b6060840152607f1901126104d7576080906131646101206040519461310d86612e60565b613118858201612fe4565b865261312660a08201612fe4565b602087015261313760c08201612fe4565b604087015261314860e08201612fe4565b606087015261315a6101008201612fe4565b8587015201612fe4565b60a08401520152565b60c09060031901126104d7576004356001600160a01b03811681036104d757906024356001600160a01b03811681036104d757906044356001600160a01b03811681036104d757906064356001600160801b03811681036104d757906084356001600160801b03811681036104d7579060a43590565b90602080835192838152019201905f5b8181106132005750505090565b90919260206060600192604087518051835284810151858401520151604082015201940191019190916131f3565b61325891602061324783516040845260408401906131e3565b9201519060208184039101526131e3565b90565b908160209103126104d7575190565b90815461327681612ecd565b926132846040519485612e96565b81845260208401905f5260205f205f915b8383106132a25750505050565b600360206001926040516132b581612e7b565b85548152848601548382015260028601546040820152815201920192019190613295565b8051156132e65760200190565b634e487b7160e01b5f52603260045260245ffd5b80518210156132e65760209160051b010190565b8181029291811591840414171561332157565b634e487b7160e01b5f52601160045260245ffd5b811561333f570490565b634e487b7160e01b5f52601260045260245ffd5b6040519061336082612e45565b8160405161336d81612e16565b613377600561326a565b8152613383600661326a565b602082015281526007546020820152600854604082015260018060a01b036009541660608201526080604051916133b983612e60565b63ffffffff600a548181168552818160201c166020860152818160401c166040860152818160601c1660608601528181851c168486015260a01c1660a08401520152565b519063ffffffff821682036104d757565b8091039061010082126104d7576040519161342883612e7b565b81516001600160a01b03811681036104d75783526020820151906001600160401b03821682036104d75760c0916020850152603f1901126104d7576134cd60e06040519261347584612e60565b613481604082016133fd565b845261348f606082016133fd565b60208501526134a0608082016133fd565b60408501526134b160a082016133fd565b60608501526134c260c082016133fd565b6080850152016133fd565b60a0820152604082015290565b9190820391821161332157565b9190820180921161332157565b5f516020615de45f395f51905f52546001600160a01b0316330361351457565b63118cdaa760e01b5f523360045260245ffd5b600d545f9182916001600160a01b0316806137ff575b506001600160a01b031691821561376b576001546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa8015610521578390613738575b6002546040516370a0823160e01b81523060048201529250602090839060249082906001600160a01b03165afa9182156104e3578492613704575b50818111156136fd57505b8061368b575b5080613601575b505f516020615e045f395f51905f52905b600d80546001600160a01b0319168417905580a2565b60208161361c613643938660018060a01b036003541661482f565b604051636e553f6560e01b8152600481019190915230602482015291829081906044820190565b038185875af1801561049c57905f516020615e045f395f51905f52929161366c575b50906135da565b6136849060203d60201161228b5761227c8183612e96565b505f613665565b82549091906001600160a01b0316803b156104a757604051632770a7eb60e21b8152306004820152602481018490529084908290604490829084905af180156104e3579084916136e8575b5050906136e2916134e7565b5f6135d3565b816136f291612e96565b61090c57825f6136d6565b90506135cd565b9091506020813d602011613730575b8161372060209383612e96565b810103126104d75751905f6135c2565b3d9150613713565b506020813d602011613763575b8161375260209383612e96565b810103126104d75760249051613587565b3d9150613745565b9081613787575b5f516020615e045f395f51905f5291506135eb565b5f546003546001600160a01b03918216916137a691859184911661482f565b803b156104d7576040516340c10f1960e01b815230600482015260248101939093525f908390604490829084905af18015612c03571561377257505f6137eb91612e96565b5f516020615e045f395f51905f525f613772565b6040516370a0823160e01b8152306004820152602081602481855afa908115612c03575f916138b2575b5080613836575b5061353d565b604051635d043b2960e11b8152600481019190915230602482018190526044820152919350602090829060649082905f905af1908115612c03575f91613880575b50915f80613830565b90506020813d6020116138aa575b8161389b60209383612e96565b810103126104d757515f613877565b3d915061388e565b90506020813d6020116138dc575b816138cd60209383612e96565b810103126104d757515f613829565b3d91506138c0565b60025f516020615e645f395f51905f52541461390d5760025f516020615e645f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b5f9080156139ac5780806001146139a45760021461399d5760016101338210166001600b8310161761398f579060019060025b600181116139675750825f19048211611f5b57500290565b92805f190481116111fd5760018416613986575b80029260011c61394f565b8092029161397b565b6002900a919080611f5b5750565b5050600490565b505050600190565b50505f90565b9082518051613df6575b5060015b83518051821015613ad8576139d7826020926132fa565b510151158015613aab575b613a9c5760206139f38286516132fa565b51015184515f1983019083821161332157613a10826020926132fa565b510151613a41613a3c613a24868a516132fa565b51516040613a33888c516132fa565b510151906149ba565b61391c565b906305f5e1008202918083046305f5e100149015171561332157613a88613a8e92611f50613a3c8b6040613a336305f5e10099613a7f8d85516132fa565b515193516132fa565b9061330e565b0403613a9c576001016139c0565b632fb66ac560e11b5f5260045ffd5b50613ab78185516132fa565b515184515f19830183811161332157613acf916132fa565b515110156139e2565b50509291602081019283518051613dc2575b5060015b84518051821015613bda57613b05826020926132fa565b510151158015613bad575b613a9c576020613b218287516132fa565b51015185515f1983019083821161332157613b3e826020926132fa565b510151613b61613a3c613b52868b516132fa565b51516040613a33888d516132fa565b906305f5e1008202918083046305f5e100149015171561332157613a88613b9f92611f50613a3c8c6040613a336305f5e10099613a7f8d85516132fa565b0403613a9c57600101613aee565b50613bb98186516132fa565b515185515f19830183811161332157613bd1916132fa565b51511015613b10565b505092939190938451805190600160401b8211612e315760055482600555808310613d69575b5060200160055f525f516020615dc45f395f51905f525f915b838310613d3f57505050505193845194600160401b8611612e315760065486600655808710613ce6575b5060065f9081525f516020615e245f395f51905f5296916020015b828210613cbb575050507f2a268faf6bdc295a3f8adb7fba521a047fc1704f78898644971113cd1fd50326939450613cb6908360085582600c556040519384938452602084015260606040840152606083019061322e565b0390a1565b600360208260406001945180518d558c8685830151910155015160028c015501980191019096613c5e565b8060030290600382040361332157866003026003810488036133215760065f525f516020615e245f395f51905f5291820191015b818110613d275750613c43565b6003905f81555f60018201555f600282015501613d1a565b60036020826040600194518051875583810151868801550151600286015501920192019190613c19565b8060030290600382040361332157826003026003810484036133215760055f525f516020615dc45f395f51905f5291820191015b818110613daa5750613c00565b6003905f81555f60018201555f600282015501613d9d565b613dcd6020916132d9565b510151158015613de2575b613a9c575f613aea565b50613ded84516132d9565b51511515613dd8565b613e016020916132d9565b510151158015613e16575b613a9c575f6139bc565b50613e2183516132d9565b51511515613e0c565b6040907fbca957d0af8e295b0b6ee76dbe39b0267cb82ab33483e89d5c6254fa27e15847928160075560018060a01b0316806bffffffffffffffffffffffff60a01b600954161760095582519182526020820152a1565b613e976001600160401b03600b541642906134da565b62015180810190818111613321576201517f019081116133215762015180900490565b8015613321575f190190565b9190825192835b613ed5575050565b9092613ee090613eba565b9283613eec81846132fa565b5151821015613efd57919091613ecd565b505050565b613f1390939193602085015161330e565b6305f5e1009081810291818304149015171561332157613f4464087f91cd00613258920493604085960151906149ba565b8093613335565b64087f91cd00613f71613f4492613f6c6132589598969860208a015161330e565b61330e565b0493604085960151906149ba565b60ff5f516020615e445f395f51905f525416613f9757565b63d93c066560e01b5f5260045ffd5b600160ff1b8114613321575f0390565b9192835151511561408657613feb92613fdd8582613fd2613e81565b600c54906012615778565b9398929897919490976134e7565b9480861061406f575090859291600c54915f1461403157506140259161401761402a9461401f936134da565b600c556149dd565b946149dd565b613fa6565b9193929190565b9261403e906040926134e7565b92015182116140605761402561405a9161402a93600c556149dd565b936149dd565b6361c22b7f60e01b5f5260045ffd5b8590639690657760e01b5f5260045260245260445ffd5b63c480e6d160e01b5f5260045ffd5b919260208451015151156140bf57613feb92613fdd85826140b4613e81565b600c54906011615778565b63970cabd560e01b5f5260045ffd5b91909160208251015151156140bf57816140f5916140ea613e81565b600c54906016615778565b9192969394909580861061406f575090859291600c54915f1461403157506140259161401761402a9461401f936134da565b919091815151511561408657816140f591614140613e81565b600c54906015615778565b91909160208251015151156140bf578161417291614167613e81565b600c54906018615778565b9192969394909580861161406f575090859291600c54915f1461403157506140259161401761402a9461401f936134da565b91909181515151156140865781614172916141bd613e81565b600c54906017615778565b91909181515151156140865781614172916141e1613e81565b600c54906014615778565b91909160208251015151156140bf578161417291614208613e81565b600c54906013615778565b9092915f198314614282576001600160a01b03908116931691828414801561427a575b6142745761427293604051936323b872dd60e01b60208601526024850152604484015260648301526064825261426d608483612e96565b614a00565b565b50505050565b508015614236565b630d550c3b60e11b5f5260045ffd5b9190915f838201938412911290801582169115161761332157565b6040516370a0823160e01b81523060048201525f9b9a9799919894979596939592949290916020836024816001600160a01b038e165afa928315612c03575f936145c3575b506143086020916143036024956149dd565b614291565b6040516370a0823160e01b815230600482015290969093849182906001600160a01b03165afa918215612c03575f9261458d575b50614303614349926149dd565b5f93908482121561456a57508115614557579061436861436d92613fa6565b614691565b816144d6575b5f80546001600160a01b039081169691958b9291908116908616036144c95750828211156144b85750906143a6916134da565b833b156104d757604051632770a7eb60e21b815230600482015260248101919091525f8160448183885af18015612c03576144a1575b509086915b81614445575b505050610100600491604051928380926379502c5560e01b82525afa908115610c8057614272949591614426575b50516001600160a01b0316906145f9565b61443f91506101003d811161065c5761064e8183612e96565b5f614415565b81846144509261482f565b823b15610910576040516340c10f1960e01b81523060048201526024810191909152818160448183875af1801561049c5761448c575b806143e7565b8161449691612e96565b6122f057845f614486565b6144af919297505f90612e96565b5f95905f6143dc565b93506144c3916134da565b906143e1565b915093506144c3916134e7565b600d546001600160a01b0316801561454857604051632d182be560e21b8152600481018490523060248201819052604482015290602090829060649082905f905af18015612c0357614529575b50614373565b6145419060203d60201161228b5761227c8183612e96565b505f614523565b63bb55fd2760e01b5f5260045ffd5b9050614564919250613fa6565b9061436d565b9150505f811261457b575b5061436d565b614586919250613fa6565b905f614575565b91506020823d6020116145bb575b816145a860209383612e96565b810103126104d75790519061430361433c565b3d915061459b565b92506020833d6020116145f1575b816145de60209383612e96565b810103126104d7579151916143086142f1565b3d91506145d1565b9091905f198214614282576001600160a01b03831630148015614658575b613efd5760405163a9059cbb60e01b60208201526001600160a01b03939093166024840152604480840192909252908252614272919061426d606483612e96565b508115614617565b6001600160801b03811161467a576001600160801b031690565b6306dfcc6560e41b5f52608060045260245260445ffd5b81156147b5576305f5e1008102908082046305f5e1001490151715613321575f54604051633f5ffaf560e01b81526001600160a01b039091169190602081600481865afa908115612c03575f91614783575b506305f5e100036305f5e1008111613321576020925f6147156147106064946001600160801b0396613335565b614660565b9160405196879586946339a380ed60e01b865230600487015216602485015260448401525af18015612c03576147485750565b6020813d60201161477b575b8161476160209383612e96565b810103126104d757516001600160801b038116036104d757565b3d9150614754565b90506020813d6020116147ad575b8161479e60209383612e96565b810103126104d757515f6146e3565b3d9150614791565b630444e4fd60e51b5f5260045ffd5b5f516020615ea45f395f51905f5280546001600160a01b03199081169091555f516020615de45f395f51905f5280549182166001600160a01b0393841690811790915591167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b8215801561497d575b613efd57604051636eb1769f60e11b81523060048201526001600160a01b03838116602483018190529490831691602081604481865afa908115612c03575f91614949575b506148c5946148d36148926020945f946134e7565b60405163095ea7b360e01b8682019081526001600160a01b03909416602482015260448101919091529687906064820190565b03601f198101885287612e96565b85519082865af1903d5f51908361492a575b505050156148f257505050565b61426d614272936040519063095ea7b360e01b602083015260248201525f604482015260448152614924606482612e96565b82614a00565b9192509061493f57503b15155b5f80806148e5565b6001915014614937565b90506020813d602011614975575b8161496460209383612e96565b810103126104d757516148c561487d565b3d9150614957565b506001600160a01b0382163014614838565b60ff5f516020615e845f395f51905f525460401c16156149ab57565b631afcd79f60e31b5f5260045ffd5b5f82126149cb5790613258916134e7565b6149d761325892613fa6565b906134da565b6001600160ff1b0381116149ee5790565b63123baf0360e11b5f5260045260245ffd5b905f602091828151910182855af115612c03575f513d614a4f57506001600160a01b0381163b155b614a2f5750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b60011415614a28565b9293909491945f935f96614a6c8782613ec6565b600181018091116133215797885b614a8d5763bb55fd2760e01b5f5260045ffd5b5f19890196898811613321578789614aa583826134da565b614b07614abe82614ab6868a6132fa565b518b8b613f4b565b9691959094614aff8d614ad0896149dd565b908b614adb8a6149dd565b614ae48d6149dd565b90614af761401f61401f6140258c6149dd565b946001615b3c565b9490936149dd565b8312918215614bb5575b8215614b95575b505015614b83575050614b2b8b876132fa565b5151614b37908d6134da565b9a614b4290876132fa565b5151614b4d916134da565b614b56916134da565b614b5f91613335565b90614b69916134da565b614b72916134e7565b97614b7c90613eba565b9788614a7a565b9d509b50989950505050505050505050565b614bad919250614ba5908b6132fa565b5151836134e7565b118e8e614b18565b9150614bc0896149dd565b841291614b11565b9293909491945f935f96614bdc8782613ec6565b600181018091116133215797885b614bfd5763bb55fd2760e01b5f5260045ffd5b5f19890196898811613321578789614c1583826134da565b614c67614c2682614ab6868a6132fa565b9691959094614aff8d614c38896149dd565b908b614c438a6149dd565b614c4c8d6149dd565b90614c5f61401f61401f6140258c6149dd565b946004615b3c565b8312918215614cfb575b8215614ce3575b505015614b83575050614c8b8b876132fa565b5151614c97908d6134da565b9a614ca290876132fa565b5151614cad916134da565b614cb6916134da565b614cbf91613335565b90614cc9916134da565b614cd2916134e7565b97614cdc90613eba565b9788614bea565b614cf3919250614ba5908b6132fa565b118e8e614c78565b9150614d06896149dd565b841291614c71565b9293909491945f935f96614d228782613ec6565b600181018091116133215797885b614d435763bb55fd2760e01b5f5260045ffd5b5f19890196898811613321578789614d5b83826134da565b614dad614d6c82614ab6868a6132fa565b9691959094614aff8d614d7e896149dd565b908b614d898a6149dd565b614d928d6149dd565b90614da561401f61401f6140258c6149dd565b946007615b3c565b8312918215614e41575b8215614e29575b505015614b83575050614dd18b876132fa565b5151614ddd908d6134da565b9a614de890876132fa565b5151614df3916134da565b614dfc916134da565b614e0591613335565b90614e0f916134da565b614e18916134e7565b97614e2290613eba565b9788614d30565b614e39919250614ba5908b6132fa565b118e8e614dbe565b9150614e4c896149dd565b841291614db7565b9293909491945f935f96614e688782613ec6565b600181018091116133215797885b614e895763bb55fd2760e01b5f5260045ffd5b5f19890196898811613321578789614ea183826134da565b614ef3614eb282614ab6868a6132fa565b9691959094614aff8d614ec4896149dd565b908b614ecf8a6149dd565b614ed88d6149dd565b90614eeb61401f61401f6140258c6149dd565b946005615b3c565b8312918215614f87575b8215614f6f575b505015614b83575050614f178b876132fa565b5151614f23908d6134da565b9a614f2e90876132fa565b5151614f39916134da565b614f42916134da565b614f4b91613335565b90614f55916134da565b614f5e916134e7565b97614f6890613eba565b9788614e76565b614f7f919250614ba5908b6132fa565b118e8e614f04565b9150614f92896149dd565b841291614efd565b90919293945f945f93614fad8287613ec6565b945b865186101561454857614fc288846134e7565b97614fd989614fd1898b6132fa565b518589613f4b565b9261501b8d614fe7856149dd565b90614ff1856149dd565b614ffa886149dd565b615003866149dd565b9161501361401f6140258d6149dd565b946002615b3c565b918c515f198101908111613321578c1461510357615038906149dd565b811280156150f2575b80156150ca575b156150b9575050600189019a8b8a1161332157866150668d8d6132fa565b515190615072916134da565b9b61507d908c6132fa565b515190615089916134da565b615092916134e7565b61509b91613335565b6150a4916134da565b6150ad916134e7565b946001905b0194614faf565b9c509a509598505050505050505050565b506150d581896134e7565b60018c01808d11613321576150ea908e6132fa565b515110615048565b506150fc866149dd565b8212615041565b9c5092509250506151168a9893986149dd565b8112158061513b575b61512d5750506001906150b2565b995097509295505050505050565b50615145886149dd565b82121561511f565b90919293945f945f936151608287613ec6565b945b86518610156145485761517588846134e7565b9761518489614fd1898b6132fa565b926151c68d615192856149dd565b9061519c856149dd565b6151a5886149dd565b6151ae866149dd565b916151be61401f6140258d6149dd565b946003615b3c565b918c515f198101908111613321578c1461529d576151e3906149dd565b8112801561528c575b8015615264575b156150b9575050600189019a8b8a1161332157866152118d8d6132fa565b51519061521d916134da565b9b615228908c6132fa565b515190615234916134da565b61523d916134e7565b61524691613335565b61524f916134da565b615258916134e7565b946001905b0194615162565b5061526f81896134e7565b60018c01808d1161332157615284908e6132fa565b5151106151f3565b50615296866149dd565b82126151ec565b9c5092509250506152b08a9893986149dd565b811215806152c7575b61512d57505060019061525d565b506152d1886149dd565b8212156152b9565b90919293945f945f936152ec8287613ec6565b945b86518610156145485761530188846134e7565b9761531089614fd1898b6132fa565b926153528d61531e856149dd565b90615328856149dd565b615331886149dd565b61533a866149dd565b9161534a61401f6140258d6149dd565b946008615b3c565b918c515f198101908111613321578c146154295761536f906149dd565b81128015615418575b80156153f0575b156150b9575050600189019a8b8a11613321578661539d8d8d6132fa565b5151906153a9916134da565b9b6153b4908c6132fa565b5151906153c0916134da565b6153c9916134e7565b6153d291613335565b6153db916134da565b6153e4916134e7565b946001905b01946152ee565b506153fb81896134e7565b60018c01808d1161332157615410908e6132fa565b51511061537f565b50615422866149dd565b8212615378565b9c50925092505061543c8a9893986149dd565b81121580615453575b61512d5750506001906153e9565b5061545d886149dd565b821215615445565b90919293945f945f936154788287613ec6565b945b86518610156145485761548d88846134e7565b9761549c89614fd1898b6132fa565b926154de8d6154aa856149dd565b906154b4856149dd565b6154bd886149dd565b6154c6866149dd565b916154d661401f6140258d6149dd565b946006615b3c565b918c515f198101908111613321578c146155b5576154fb906149dd565b811280156155a4575b801561557c575b156150b9575050600189019a8b8a1161332157866155298d8d6132fa565b515190615535916134da565b9b615540908c6132fa565b51519061554c916134da565b615555916134e7565b61555e91613335565b615567916134da565b615570916134e7565b946001905b019461547a565b5061558781896134e7565b60018c01808d116133215761559c908e6132fa565b51511061550b565b506155ae866149dd565b8212615504565b9c5092509250506155c88a9893986149dd565b811215806155df575b61512d575050600190615575565b506155e9886149dd565b8212156155d1565b81810392915f13801582851316918412161761332157565b811561333f57600160ff1b81145f19831416613321570590565b908160021b91600483050361332157565b81810292915f8212600160ff1b82141661332157818405149015171561332157565b600181111561325857806001600160801b821015615767575b600482600160401b61571994101561575a575b64010000000081101561574d575b62010000811015615740575b610100811015615734575b6010811015615728575b1015615720575b60030260011c6156c88184613335565b0160011c6156d68184613335565b0160011c6156e48184613335565b0160011c6156f28184613335565b0160011c6157008184613335565b0160011c61570e8184613335565b0160011c8092613335565b8111900390565b60011b6156b8565b811c9160021b916156b1565b60081c91811b916156a7565b60101c9160081b9161569c565b60201c9160101b91615690565b60401c9160201b91615682565b5050608081901c600160401b61566f565b949392919480601214615b025780601114615ac55780601614615a5357806015146159d6578060181461595157806017146158cf578060141461584f576013146157d057634e487b7160e01b5f52605160045260245ffd5b60206080840151935101519063ffffffff8451166305f5e10003926305f5e10084116133215760609663ffffffff936158099386615465565b9590930151166305f5e10001806305f5e10011613321578461583a6158469361583561583f948461330e565b613335565b6134da565b80946134e7565b90929183905f90565b5060808395949501519251519063ffffffff6040850151166305f5e1000192836305f5e100116133215760209563ffffffff9361588c9386614e54565b9490930151166305f5e100036305f5e1008111613321576158ba916158356158b4928661330e565b836134da565b926158c584846134da565b9293929190600190565b509360808394929301519351519463ffffffff6040860151166305f5e1000191826305f5e10011613321576159118560209261591a9963ffffffff9587614d0e565b979095886134e7565b950151166305f5e10003906305f5e10082116133215761594461594a916158356158c5948961330e565b866134da565b80956134da565b509360206080849593940151945101519463ffffffff8551166305f5e10003916305f5e1008311613321576159938560609261599c9963ffffffff95876152d9565b979095866134e7565b950151166305f5e10001806305f5e10011613321578561583a6159cd936158356159c6948461330e565b80956134e7565b92939291905f90565b5060808301519251519063ffffffff6040850151166305f5e1000192836305f5e100116133215760209663ffffffff93615a109386614bc8565b9590930151166305f5e10003906305f5e100821161332157615a3c615a4291615835615a49948861330e565b856134da565b80946134da565b9092918390600190565b5060206080849695960151935101519063ffffffff8451166305f5e10003926305f5e10084116133215760609563ffffffff93615a90938661514d565b9490930151166305f5e1000190816305f5e100116133215761583a8491615835615aba948461330e565b926159cd84846134e7565b5060206080849695960151935101519063ffffffff8451166305f5e10003926305f5e10084116133215760609563ffffffff93615a909386614f9a565b5060808301519251519063ffffffff6040850151166305f5e1000192836305f5e100116133215760209663ffffffff93615a109386614a58565b969593969081600114615da35781600214615d835781600314615d3c5781600414615cee5781600814615cc75781600714615c8f575080600514615c3e57600614615b9557634e487b7160e01b5f52605160045260245ffd5b615bcd615be691615bc7615bbd615bae61430397613fa6565b615bb88b8a6155f1565b6155f1565b8096819387614291565b93615634565b615be0615bda8480615634565b91615623565b906155f1565b5f8112615c2c5792615bb8615c2693615bb8615c206002615c1861402597615bb8615c136132589c615656565b6149dd565b058095614291565b98613fa6565b92613fa6565b635467221960e11b5f5260045260245ffd5b5090615bcd615c5c91615bc7615bbd615bae614303979a989a613fa6565b5f8112615c2c5792615bb8615c2693615bb8615c206002615c18615c8997615bb8615c136132589c615656565b93613fa6565b615be09150615cc161325896615cbb615c8996614303615c89615cb4615c269b613fa6565b9d8e6155f1565b94614291565b90615609565b615be09150615cc16132589698615cbb6140259695614303615c89615cb4615c269b613fa6565b5050615bcd615d0b91615bc7615bbd61430396615bb88b8a6155f1565b5f8112615c2c5791615bb8615d326002615c18615bb895615bb8615c13615d389a99615656565b96613fa6565b9190565b505090615bcd615d5c91615bc7615bbd61430396615bb8898c9a9c6155f1565b5f8112615c2c5791615bb8615d326002615c18615bb895615bb8615c136132589a99615656565b919396615cc1915094615cbb615be094614303615c89613258998c6155f1565b91615cc1915096615cbb8598614303615c89615d3899615be098996155f156fe036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db09016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300380cec482764ddef4f75351b5398e3e2bea99ba23e53a00d5521f569fb668e1ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00a26469706673582212207c432c0304cc0b06a9939d3110bbf81d899b745cf1e5a8f0eddc50c53c3292e264736f6c634300081d0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00