1 tx
430 calls
constructor
constructor(address registry_, address positionManager)
functions
ASSET_TYPE
viewfunction ASSET_TYPE() view returns (uint256)
DEFAULT_UNISWAP_V4_AM
viewfunction DEFAULT_UNISWAP_V4_AM() view returns (address)
getAssetModule
viewfunction getAssetModule(uint256 assetId) view returns (address assetModule)
getRiskFactors
viewfunction getRiskFactors(address creditor, address asset, uint256 assetId) view returns (uint16 collateralFactor, uint16 liquidationFactor)
getRiskFactors
viewfunction getRiskFactors(address creditor, address[] assetAddresses, uint256[] assetIds) view returns (uint16[] collateralFactors, uint16[] liquidationFactors)
getValue
viewfunction getValue(address creditor, address asset, uint256 assetId, uint256 assetAmount) view returns (uint256, uint256, uint256)
getValuesInUsdRecursive
viewfunction getValuesInUsdRecursive(address creditor, address[] assets, uint256[] assetIds, uint256[] assetAmounts) view returns (tuple[] valuesAndRiskFactors)
hooksToAssetModule
viewfunction hooksToAssetModule(address hooks) view returns (address assetModule)
inAssetModule
viewfunction inAssetModule(address) view returns (bool)
inRegistry
viewfunction inRegistry(address hooks) view returns (bool)
isAllowed
viewfunction isAllowed(address asset, uint256 assetId) view returns (bool)
isAssetModule
viewfunction isAssetModule(address) view returns (bool)
owner
viewfunction owner() view returns (address)
REGISTRY
viewfunction REGISTRY() view returns (address)
addAssetModule
nonpayablefunction addAssetModule(address assetModule)
addHooks
nonpayablefunction addHooks(uint96 assetType, address hooks)
getUsdValueExposureToUnderlyingAssetAfterDeposit
nonpayablefunction getUsdValueExposureToUnderlyingAssetAfterDeposit(address creditor, address underlyingAsset, uint256 underlyingAssetId, uint256 exposureAssetToUnderlyingAsset, int256 deltaExposureAssetToUnderlyingAsset) returns (uint256 recursiveCalls, uint256 usdExposureAssetToUnderlyingAsset)
getUsdValueExposureToUnderlyingAssetAfterWithdrawal
nonpayablefunction getUsdValueExposureToUnderlyingAssetAfterWithdrawal(address creditor, address underlyingAsset, uint256 underlyingAssetId, uint256 exposureAssetToUnderlyingAsset, int256 deltaExposureAssetToUnderlyingAsset) returns (uint256 usdExposureAssetToUnderlyingAsset)
processDirectDeposit
nonpayablefunction processDirectDeposit(address creditor, address asset, uint256 assetId, uint256 amount) returns (uint256 recursiveCalls)
processDirectWithdrawal
nonpayablefunction processDirectWithdrawal(address creditor, address asset, uint256 assetId, uint256 amount)
processIndirectDeposit
nonpayablefunction processIndirectDeposit(address creditor, address asset, uint256 assetId, uint256 exposureUpperAssetToAsset, int256 deltaExposureUpperAssetToAsset) returns (uint256 recursiveCalls, uint256 usdExposureUpperAssetToAsset)
processIndirectWithdrawal
nonpayablefunction processIndirectWithdrawal(address creditor, address asset, uint256 assetId, uint256 exposureUpperAssetToAsset, int256 deltaExposureUpperAssetToAsset) returns (uint256 usdExposureUpperAssetToAsset)
setProtocol
nonpayablefunction setProtocol()
setRiskParametersOfDerivedAM
nonpayablefunction setRiskParametersOfDerivedAM(address creditor, address assetModule, uint112 maxUsdExposureProtocol, uint16 riskFactor)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
AssetModuleAdded
event AssetModuleAdded(address assetModule)
HooksAdded
event HooksAdded(address indexed hooks, address indexed assetModule)
OwnershipTransferred
event OwnershipTransferred(address indexed user, address indexed newOwner)
errors
AssetAlreadyInRegistry
error AssetAlreadyInRegistry()
AssetModNotUnique
error AssetModNotUnique()
ExposureNotInLimits
error ExposureNotInLimits()
InvalidAssetType
error InvalidAssetType()
OnlyAssetModule
error OnlyAssetModule()
OnlyRegistry
error OnlyRegistry()
Overflow
error Overflow()
Unauthorized
error Unauthorized()
creation bytecode
0x610100604052348015610010575f5ffd5b5060405161555338038061555383398101604081905261002f916101aa565b5f80546001600160a01b0319163390811782556040518492600292918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b0391821660a052608052811660c0526040513090829061009a90610182565b6001600160a01b03928316815291166020820152604001604051809103905ff0801580156100ca573d5f5f3e3d5ffd5b506001600160a01b031660e081905260405163f2fde38b60e01b815233600482015263f2fde38b906024015f604051808303815f87803b15801561010c575f5ffd5b505af115801561011e573d5f5f3e3d5ffd5b505060e0516001600160a01b03165f81815260036020908152604091829020805460ff1916600117905590519182527f6dabb2fac6035a24c5efc14e4414d25baebeda8aac8e5974ea1cfca97bfcaace935001905060405180910390a150506101db565b61378f80611dc483390190565b80516001600160a01b03811681146101a5575f5ffd5b919050565b5f5f604083850312156101bb575f5ffd5b6101c48361018f565b91506101d26020840161018f565b90509250929050565b60805160a05160c05160e051611b5b6102695f395f818161032c015261080001525f81816107340152610f3501525f81816101b50152818161046101528181610512015281816105bf0152818161086e015281816108b801528181610b1701528181610c6701528181610d4201528181610fb601526110bb01525f81816103880152610f7f0152611b5b5ff3fe608060405234801561000f575f5ffd5b506004361061016d575f3560e01c806357ff3146116100d9578063ba9270ff11610093578063e4ec552b1161006e578063e4ec552b14610415578063f079399714610428578063f2fde38b14610430578063f8350ed014610443575f5ffd5b8063ba9270ff146103cf578063cbdcbc3b146103e2578063d0e5c98e14610402575f5ffd5b806357ff3146146103275780636a6674a71461034e5780636c24afd8146103615780638815eb39146103835780638da5cb5b146103aa5780639f88574a146103bc575f5ffd5b80631cae3ada1161012a5780631cae3ada146102705780631e3b0662146102835780632341eb861461029657806337bc28c8146102be57806349bccc5d146102d1578063517c028d146102ff575f5ffd5b8063024874c7146101715780630344bc4e1461018657806306433b1b146101b057806315ed93bc146101ef57806317235093146102215780631ba0408c14610242575b5f5ffd5b61018461017f3660046111de565b610456565b005b610199610194366004611268565b61050d565b6040516101a7929190611326565b60405180910390f35b6101d77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101a7565b6102116101fd36600461134a565b60016020525f908152604090205460ff1681565b60405190151581526020016101a7565b61023461022f36600461136c565b6105b3565b6040519081526020016101a7565b6102556102503660046113b9565b610683565b6040805161ffff9384168152929091166020830152016101a7565b6101d761027e3660046113f7565b610712565b61023461029136600461136c565b610828565b6102a96102a436600461136c565b6108ab565b604080519283526020830191909152016101a7565b6101846102cc36600461134a565b61097f565b6102e46102df3660046111de565b610a43565b604080519384526020840192909252908201526060016101a7565b6101d761030d36600461134a565b60046020525f90815260409020546001600160a01b031681565b6101d77f000000000000000000000000000000000000000000000000000000000000000081565b6102a961035c36600461136c565b610acf565b61021161036f36600461134a565b60036020525f908152604090205460ff1681565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b5f546101d7906001600160a01b031681565b6101846103ca36600461141d565b610b54565b6102346103dd3660046111de565b610c5b565b6103f56103f0366004611481565b610d28565b6040516101a7919061152f565b61018461041036600461158d565b610dd0565b61021161042336600461134a565b610ebc565b610184610f02565b61018461043e36600461134a565b61100b565b6102116104513660046115cf565b61107e565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461049f576040516310f5403960e31b815260040160405180910390fd5b6104a882610712565b6001600160a01b031663024874c7858585856040518563ffffffff1660e01b81526004016104d994939291906115f9565b5f604051808303815f87803b1580156104f0575f5ffd5b505af1158015610502573d5f5f3e3d5ffd5b505050505b50505050565b6060807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630344bc4e88888888886040518663ffffffff1660e01b8152600401610564959493929190611690565b5f60405180830381865afa15801561057e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105a591908101906117ea565b909890975095505050505050565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105fd576040516310f5403960e31b815260040160405180910390fd5b61060684610712565b6001600160a01b0316631723509387878787876040518663ffffffff1660e01b815260040161063995949392919061184d565b6020604051808303815f875af1158015610655573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610679919061187e565b9695505050505050565b5f5f61068e83610712565b6040516306e8102360e21b81526001600160a01b0387811660048301528681166024830152604482018690529190911690631ba0408c906064016040805180830381865afa1580156106e2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107069190611895565b91509150935093915050565b604051637ba03aad60e01b8152600481018290525f9081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637ba03aad9060240160c060405180830381865afa158015610779573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061079d91906118cd565b509050806060015160020b5f036107b657505f92915050565b6080810151610200161515806107d3575060808101516101001615155b156107fe5760808101516001600160a01b039081165f90815260046020526040902054169150610822565b7f000000000000000000000000000000000000000000000000000000000000000091505b50919050565b335f9081526003602052604081205460ff166108575760405163d044180160e01b815260040160405180910390fd5b604051630f1d833160e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631e3b066290610639908990899089908990899060040161184d565b5f80336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108f6576040516310f5403960e31b815260040160405180910390fd5b6108ff85610712565b6001600160a01b0316632341eb8688888888886040518663ffffffff1660e01b815260040161093295949392919061184d565b60408051808303815f875af115801561094d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109719190611969565b915091509550959350505050565b5f546001600160a01b031633146109b15760405162461bcd60e51b81526004016109a89061198b565b60405180910390fd5b6001600160a01b0381165f9081526003602052604090205460ff16156109ea5760405163a5d1dbc560e01b815260040160405180910390fd5b6001600160a01b0381165f81815260036020908152604091829020805460ff1916600117905590519182527f6dabb2fac6035a24c5efc14e4414d25baebeda8aac8e5974ea1cfca97bfcaace910160405180910390a150565b5f5f5f610a4f85610712565b6001600160a01b03166349bccc5d888888886040518563ffffffff1660e01b8152600401610a8094939291906115f9565b606060405180830381865afa158015610a9b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610abf91906119b1565b9250925092509450945094915050565b335f90815260036020526040812054819060ff16610b005760405163d044180160e01b815260040160405180910390fd5b604051636a6674a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636a6674a790610932908a908a908a908a908a9060040161184d565b83806001600160a01b031663478426636040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b91573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bb591906119dc565b6001600160a01b0316336001600160a01b031614610be5576040516282b42960e81b815260040160405180910390fd5b604051630e75d97360e31b81526001600160a01b0386811660048301526001600160701b038516602483015261ffff841660448301528516906373aecb98906064015f604051808303815f87803b158015610c3e575f5ffd5b505af1158015610c50573d5f5f3e3d5ffd5b505050505050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ca5576040516310f5403960e31b815260040160405180910390fd5b610cae83610712565b6001600160a01b031663ba9270ff868686866040518563ffffffff1660e01b8152600401610cdf94939291906115f9565b6020604051808303815f875af1158015610cfb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1f919061187e565b95945050505050565b60405163cbdcbc3b60e01b81526060906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cbdcbc3b90610d83908b908b908b908b908b908b908b906004016119f7565b5f60405180830381865afa158015610d9d573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dc49190810190611a51565b98975050505050505050565b335f9081526003602052604090205460ff16610dff5760405163d044180160e01b815260040160405180910390fd5b816001600160601b0316600214610e29576040516311b2a5ab60e11b815260040160405180910390fd5b610e3281610ebc565b15610e5057604051639c6fcfa560e01b815260040160405180910390fd5b6001600160a01b0381165f818152600260209081526040808320805460ff19166001179055600490915280822080546001600160a01b0319163390811790915590519092917f9e0a5f625554cc27e7e3cea6ebdd10ad1ddf5c7a6b2cb2a84405c68d099eeb9491a35050565b5f6102008216151580610ed25750610100821615155b15610ef557506001600160a01b03165f9081526002602052604090205460ff1690565b506001919050565b919050565b5f546001600160a01b03163314610f2b5760405162461bcd60e51b81526004016109a89061198b565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081165f81815260016020819052604091829020805460ff191690911790555163f1751c7b60e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160601b0316600482015260248101919091527f00000000000000000000000000000000000000000000000000000000000000009091169063f1751c7b906044015f604051808303815f87803b158015610ff9575f5ffd5b505af1158015610507573d5f5f3e3d5ffd5b5f546001600160a01b031633146110345760405162461bcd60e51b81526004016109a89061198b565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b335f9081526003602052604081205460ff161561112b57604051630f8350ed60e41b81526001600160a01b038481166004830152602482018490527f0000000000000000000000000000000000000000000000000000000000000000169063f8350ed090604401602060405180830381865afa158015611100573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111249190611b06565b90506111c1565b5f61113583610712565b90506001600160a01b03811661114e575f9150506111c1565b604051630f8350ed60e41b81526001600160a01b0385811660048301526024820185905282169063f8350ed090604401602060405180830381865afa158015611199573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111bd9190611b06565b9150505b92915050565b6001600160a01b03811681146111db575f5ffd5b50565b5f5f5f5f608085870312156111f1575f5ffd5b84356111fc816111c7565b9350602085013561120c816111c7565b93969395505050506040820135916060013590565b5f5f83601f840112611231575f5ffd5b5081356001600160401b03811115611247575f5ffd5b6020830191508360208260051b8501011115611261575f5ffd5b9250929050565b5f5f5f5f5f6060868803121561127c575f5ffd5b8535611287816111c7565b945060208601356001600160401b038111156112a1575f5ffd5b6112ad88828901611221565b90955093505060408601356001600160401b038111156112cb575f5ffd5b6112d788828901611221565b969995985093965092949392505050565b5f8151808452602084019350602083015f5b8281101561131c57815161ffff168652602095860195909101906001016112fa565b5093949350505050565b604081525f61133860408301856112e8565b8281036020840152610d1f81856112e8565b5f6020828403121561135a575f5ffd5b8135611365816111c7565b9392505050565b5f5f5f5f5f60a08688031215611380575f5ffd5b853561138b816111c7565b9450602086013561139b816111c7565b94979496505050506040830135926060810135926080909101359150565b5f5f5f606084860312156113cb575f5ffd5b83356113d6816111c7565b925060208401356113e6816111c7565b929592945050506040919091013590565b5f60208284031215611407575f5ffd5b5035919050565b61ffff811681146111db575f5ffd5b5f5f5f5f60808587031215611430575f5ffd5b843561143b816111c7565b9350602085013561144b816111c7565b925060408501356001600160701b0381168114611466575f5ffd5b915060608501356114768161140e565b939692955090935050565b5f5f5f5f5f5f5f6080888a031215611497575f5ffd5b87356114a2816111c7565b965060208801356001600160401b038111156114bc575f5ffd5b6114c88a828b01611221565b90975095505060408801356001600160401b038111156114e6575f5ffd5b6114f28a828b01611221565b90955093505060608801356001600160401b03811115611510575f5ffd5b61151c8a828b01611221565b989b979a50959850939692959293505050565b602080825282518282018190525f918401906040840190835b8181101561158257835180518452602081015160208501526040810151604085015250606083019250602084019350600181019050611548565b509095945050505050565b5f5f6040838503121561159e575f5ffd5b82356001600160601b03811681146115b4575f5ffd5b915060208301356115c4816111c7565b809150509250929050565b5f5f604083850312156115e0575f5ffd5b82356115eb816111c7565b946020939093013593505050565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b8183526020830192505f815f5b8481101561131c578135611642816111c7565b6001600160a01b03168652602095860195919091019060010161162f565b8183525f6001600160fb1b03831115611677575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160a01b03861681526060602082018190525f906116b49083018688611622565b8281036040840152610dc4818587611660565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b03811182821017156116fd576116fd6116c7565b60405290565b604051606081016001600160401b03811182821017156116fd576116fd6116c7565b604051601f8201601f191681016001600160401b038111828210171561174d5761174d6116c7565b604052919050565b5f6001600160401b0382111561176d5761176d6116c7565b5060051b60200190565b5f82601f830112611786575f5ffd5b815161179961179482611755565b611725565b8082825260208201915060208360051b8601019250858311156117ba575f5ffd5b602085015b838110156117e05780516117d28161140e565b8352602092830192016117bf565b5095945050505050565b5f5f604083850312156117fb575f5ffd5b82516001600160401b03811115611810575f5ffd5b61181c85828601611777565b92505060208301516001600160401b03811115611837575f5ffd5b61184385828601611777565b9150509250929050565b6001600160a01b03958616815293909416602084015260408301919091526060820152608081019190915260a00190565b5f6020828403121561188e575f5ffd5b5051919050565b5f5f604083850312156118a6575f5ffd5b82516118b18161140e565b60208401519092506115c48161140e565b8051610efd816111c7565b5f5f82840360c08112156118df575f5ffd5b60a08112156118ec575f5ffd5b506118f56116db565b8351611900816111c7565b81526020840151611910816111c7565b6020820152604084015162ffffff8116811461192a575f5ffd5b60408201526060840151600281900b8114611943575f5ffd5b6060820152611954608085016118c2565b608082015260a0939093015192949293505050565b5f5f6040838503121561197a575f5ffd5b505080516020909101519092909150565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b5f5f5f606084860312156119c3575f5ffd5b5050815160208301516040909301519094929350919050565b5f602082840312156119ec575f5ffd5b8151611365816111c7565b6001600160a01b03881681526080602082018190525f90611a1b908301888a611622565b8281036040840152611a2e818789611660565b90508281036060840152611a43818587611660565b9a9950505050505050505050565b5f60208284031215611a61575f5ffd5b81516001600160401b03811115611a76575f5ffd5b8201601f81018413611a86575f5ffd5b8051611a9461179482611755565b80828252602082019150602060608402850101925086831115611ab5575f5ffd5b6020840193505b828410156106795760608488031215611ad3575f5ffd5b611adb611703565b8451815260208086015181830152604080870151908301529083526060909401939190910190611abc565b5f60208284031215611b16575f5ffd5b81518015158114611365575f5ffdfea26469706673582212207c1d90a37bb96115f271c6b58e6eedc10ca0e5532ed5e56358c9a35719dbe6a664736f6c634300081b0033610100604052348015610010575f5ffd5b5060405161378f38038061378f83398101604081905261002f9161011e565b5f80546001600160a01b03191633908117825560405184926002928492849282917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b0391821660a052608052831660e08190526040805163dc4c90d360e01b8152905191935063dc4c90d392506004808201926020929091908290030181865afa1580156100cb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ef919061014f565b6001600160a01b031660c0525061016f9050565b80516001600160a01b0381168114610119575f5ffd5b919050565b5f5f6040838503121561012f575f5ffd5b61013883610103565b915061014660208401610103565b90509250929050565b5f6020828403121561015f575f5ffd5b61016882610103565b9392505050565b60805160a05160c05160e05161354c6102435f395f8181610a8001528181610ad401528181610b4d015281816112040152818161132e0152818161139e01528181611470015281816116210152818161170e015261223401525f8181610d3c0152818161141b0152818161220501526122aa01525f8181610124015281816103d6015281816104590152818161063c015281816108f801528181610c1501528181610cb101528181610fa20152818161152c01528181611ada01528181611d620152611f9e01525f61035e015261354c5ff3fe608060405234801561000f575f5ffd5b5060043610610106575f3560e01c806349bccc5d1161009e5780638815eb391161006e5780638815eb39146103595780638da5cb5b14610380578063ba9270ff14610392578063f2fde38b146103a5578063f8350ed0146103b8575f5ffd5b806349bccc5d1461024f57806353b85a501461027d57806373aecb98146102e857806382d6b166146102fb575f5ffd5b80631ba0408c116100d95780631ba0408c146101b65780632341eb86146101e45780633a8fe5e71461020c5780633c0ac4f61461023c575f5ffd5b8063024874c71461010a57806306433b1b1461011f57806315ed93bc146101635780631723509314610195575b5f5ffd5b61011d610118366004612d98565b6103cb565b005b6101467f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b610185610171366004612ddb565b60016020525f908152604090205460ff1681565b604051901515815260200161015a565b6101a86101a3366004612df6565b61044d565b60405190815260200161015a565b6101c96101c4366004612e43565b6104f4565b6040805161ffff93841681529290911660208301520161015a565b6101f76101f2366004612df6565b61080c565b6040805192835260208301919091520161015a565b6101a861021a366004612e81565b600460209081525f938452604080852082529284528284209052825290205481565b6101a861024a366004612eb3565b61085e565b61026261025d366004612d98565b610889565b6040805193845260208401929092529082015260600161015a565b6102be61028b366004612ddb565b60026020525f90815260409020546001600160701b0380821691600160701b810490911690600160e01b900461ffff1683565b604080516001600160701b03948516815293909216602084015261ffff169082015260600161015a565b61011d6102f6366004612ee2565b6108ed565b610339610309366004612f35565b600360209081525f92835260408084209091529082529020546001600160701b0380821691600160701b90041682565b604080516001600160701b0393841681529290911660208301520161015a565b6101a87f000000000000000000000000000000000000000000000000000000000000000081565b5f54610146906001600160a01b031681565b6101a86103a0366004612d98565b6109c0565b61011d6103b3366004612ddb565b6109e7565b6101856103c6366004612f35565b610a7d565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610414576040516310f5403960e31b815260040160405180910390fd5b5f610421848460a01b1790565b90505f610437868361043286612f73565b610d7a565b9050610444868383610e6b565b50505050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610497576040516310f5403960e31b815260040160405180910390fd5b5f6104a4868660a01b1790565b90505f6104b2888386610d7a565b90505f6104c0898484610e6b565b90508115806104cd575080155b156104da575f93506104e8565b6104e5818784611153565b93505b50505095945050505050565b5f5f5f61050b610506868660a01b1790565b61116e565b6040805160028082526060820183529293505f92909160208301908036833750506040805160028082526060820183529394505f9390925090602083019080368337019050509050610584835f8151811061056857610568612fa1565b60200260200101516001600160a01b0381169160a09190911c90565b835f8151811061059657610596612fa1565b60200260200101835f815181106105af576105af612fa1565b6020026020010182815250826001600160a01b03166001600160a01b031681525050506105e88360018151811061056857610568612fa1565b836001815181106105fb576105fb612fa1565b602002602001018360018151811061061557610615612fa1565b6020026020010182815250826001600160a01b03166001600160a01b031681525050505f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630344bc4e8b86866040518463ffffffff1660e01b815260040161068a93929190613028565b5f60405180830381865afa1580156106a4573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106cb919081019061317a565b6001600160a01b038c165f908152600260205260409020548251929450909250600160e01b900461ffff16908390600190811061070a5761070a612fa1565b602002602001015161ffff16835f8151811061072857610728612fa1565b602002602001015161ffff16106107735761076e8360018151811061074f5761074f612fa1565b602002602001015161ffff16612710836111539092919063ffffffff16565b610788565b610788835f8151811061074f5761074f612fa1565b97508160018151811061079d5761079d612fa1565b602002602001015161ffff16825f815181106107bb576107bb612fa1565b602002602001015161ffff16106107e7576107e28260018151811061074f5761074f612fa1565b6107fc565b6107fc825f8151811061074f5761074f612fa1565b9650505050505050935093915050565b5f5f826001036108245761081f856112df565b610843565b82156108435760405163162908e360e11b815260040160405180910390fd5b610850878787878761151f565b909890975095505050505050565b6005602052815f5260405f208181548110610877575f80fd5b905f5260205f20015f91509150505481565b5f5f5f5f610899878760a01b1790565b90505f6108a58261116e565b90505f5f6108b58b858a866115d2565b9150915080515f036108ce576108cb8b84611950565b90505b6108d98b8383611b61565b919d909c50909a5098505050505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610936576040516310f5403960e31b815260040160405180910390fd5b6127108161ffff16111561095d57604051630b1c8e2560e01b815260040160405180910390fd5b6001600160a01b039092165f908152600260205260409020805461ffff909316600160e01b0261ffff60e01b196001600160701b03909316600160701b02929092166fffffffffffffffffffffffffffffffff60701b1990931692909217179055565b5f816001036109d2576109d2836112df565b6109de85858585611d56565b95945050505050565b5f546001600160a01b03163314610a335760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015260640160405180910390fd5b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614610abe57505f610d74565b604051637ba03aad60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637ba03aad9060240160c060405180830381865afa925050508015610b3f575060408051601f3d908101601f19168201909252610b3c918101906131ea565b60015b610b4a57505f610d74565b5f7f0000000000000000000000000000000000000000000000000000000000000000610b798360081c60020b90565b610b868460201c60020b90565b604051610b9a939291908990602001613286565b604051602081830303815290604052805190602001209050610bcc8360800151610200166001600160a01b0316151590565b80610bde575060808301516101001615155b15610bee575f9350505050610d74565b8251604051630f8350ed60e41b81526001600160a01b0391821660048201525f60248201527f00000000000000000000000000000000000000000000000000000000000000009091169063f8350ed090604401602060405180830381865afa158015610c5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c8091906132b9565b8015610d1c57506020830151604051630f8350ed60e41b81526001600160a01b0391821660048201525f60248201527f00000000000000000000000000000000000000000000000000000000000000009091169063f8350ed090604401602060405180830381865afa158015610cf8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1c91906132b9565b8015610d6e57505f610d63610d328560a0902090565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169084611dd9565b6001600160801b0316115b93505050505b92915050565b5f5f821315610dc1576001600160a01b0384165f908152600360209081526040808320868452909152902054610dba9083906001600160701b03166132d8565b9050610e19565b6001600160a01b0384165f9081526003602090815260408083208684529091529020546001600160701b0316610df683612f73565b8111610e02575f610e15565b610e0b83612f73565b610e1590826132eb565b9150505b610e2281611e4f565b6001600160a01b03949094165f9081526003602090815260408083209583529490529290922080546001600160701b0319166001600160701b0390941693909317909255919050565b5f5f610e768461116e565b90505f610e85868686856115d2565b5090505f5f5f5f5b8551811015611084576001600160a01b038a165f9081526004602090815260408083208c845290915281208751909190889084908110610ecf57610ecf612fa1565b602002602001015181526020019081526020015f2054858281518110610ef757610ef7612fa1565b6020026020010151610f0991906132fe565b9350848181518110610f1d57610f1d612fa1565b602002602001015160045f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f8b81526020019081526020015f205f888481518110610f6a57610f6a612fa1565b602002602001015181526020019081526020015f2081905550610f9886828151811061056857610568612fa1565b80935081945050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631e3b06628b8585898681518110610fe457610fe4612fa1565b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152604483015260648201526084810187905260a4016020604051808303815f875af115801561104c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110709190613324565b61107a90886132d8565b9650600101610e8d565b506001600160a01b0389165f8181526003602090815260408083208c8452825280832080546001600160701b038c8116600160701b908102600160701b600160e01b0319841617909355958552600290935290832054910483169216908289106110f357508188038101611104565b888303821115611104575087820381035b61110d81611e4f565b6001600160a01b039c909c165f90815260026020526040902080546001600160701b0319166001600160701b03909d169c909c17909b5550959998505050505050505050565b5f825f190484118302158202611167575f5ffd5b5091020490565b5f818152600560209081526040918290208054835181840281018401909452808452606093928301828280156111c157602002820191905f5260205f20905b8154815260200190600101908083116111ad575b5050505050905080515f036112da575f6001600160a01b03831660a084901c604051637ba03aad60e01b8152600481018290529092505f91506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637ba03aad9060240160c060405180830381865afa158015611249573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126d91906131ea565b506040805160028082526060820183529293509190602083019080368337019050508151909350835f815181106112a6576112a6612fa1565b602090810291909101810191909152810151836001815181106112cb576112cb612fa1565b60200260200101818152505050505b919050565b6bffffffffffffffffffffffff81111561130c57604051631bf4348160e31b815260040160405180910390fd5b604051637ba03aad60e01b8152600481018290525f9081906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637ba03aad9060240160c060405180830381865afa158015611373573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139791906131ea565b915091505f7f00000000000000000000000000000000000000000000000000000000000000006113ca8360081c60020b90565b6113d78460201c60020b90565b6040516113eb939291908890602001613286565b6040516020818303038152906040528051906020012090506114426114118460a0902090565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169083611dd9565b6001600160801b03165f0361146a57604051630200e8a960e31b815260040160405180910390fd5b5f6114977f00000000000000000000000000000000000000000000000000000000000000008660a01b1790565b6040805160028082526060820183529293505f929091602083019080368337019050508551909150815f815181106114d1576114d1612fa1565b602090810291909101810191909152850151816001815181106114f6576114f6612fa1565b6020908102919091018101919091525f8381526005825260409020825161044492840190612d2d565b5f80336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461156a576040516310f5403960e31b815260040160405180910390fd5b5f611577878760a01b1790565b90505f611585898387610d7a565b90505f5f611594838c86611e63565b91509150825f14806115a4575080155b156115b1575f94506115bf565b6115bc818985611153565b94505b5060010199929850919650505050505050565b606080835f03611601576040805160028082526060820183529091602083019080368337019050509150611947565b604051637ba03aad60e01b815260a086901c60048201819052905f9081907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637ba03aad9060240160c060405180830381865afa15801561166e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169291906131ea565b6040805160028082526060820183529395509193505f9290602083019080368337019050508351909150815f815181106116ce576116ce612fa1565b602090810291909101810191909152830151816001815181106116f3576116f3612fa1565b6020026020010181815250506117098a82611950565b94505f7f000000000000000000000000000000000000000000000000000000000000000061173a8460081c60020b90565b6117478560201c60020b90565b60405161175b939291908990602001613286565b6040516020818303038152906040528051906020012090505f611782610d328660a0902090565b90505f5f6117cb86848b5f8151811061179d5761179d612fa1565b60200260200101515f01518c6001815181106117bb576117bb612fa1565b60200260200101515f015161219b565b915091505f5f6117e78a6117e08b60a0902090565b8a886121d9565b915091506118398b60018151811061180157611801612fa1565b60200260200101515f01518c5f8151811061181e5761181e612fa1565b60200260200101515f0151856111539092919063ffffffff16565b8401821061185e576118578b60018151811061180157611801612fa1565b8401611860565b815b9150826118b18c5f8151811061187857611878612fa1565b60200260200101515f01518d60018151811061189657611896612fa1565b60200260200101515f0151876111539092919063ffffffff16565b0181106118d457826118ce8c5f8151811061187857611878612fa1565b016118d6565b805b6040805160028082526060820183529293509190602083019080368337019050509b508184018c5f8151811061190e5761190e612fa1565b6020026020010181815250508083018c60018151811061193057611930612fa1565b602002602001018181525050505050505050505050505b94509492505050565b80516060905f8167ffffffffffffffff81111561196f5761196f612f8d565b604051908082528060200260200182016040528015611998578160200160208202803683370190505b5090505f8267ffffffffffffffff8111156119b5576119b5612f8d565b6040519080825280602002602001820160405280156119de578160200160208202803683370190505b5090505f8367ffffffffffffffff8111156119fb576119fb612f8d565b604051908082528060200260200182016040528015611a24578160200160208202803683370190505b5090505f5b84811015611ac257611a4687828151811061056857610568612fa1565b858381518110611a5857611a58612fa1565b60200260200101858481518110611a7157611a71612fa1565b6020026020010182815250826001600160a01b03166001600160a01b03168152505050670de0b6b3a7640000828281518110611aaf57611aaf612fa1565b6020908102919091010152600101611a29565b5060405163cbdcbc3b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cbdcbc3b90611b15908a9087908790879060040161333b565b5f60405180830381865afa158015611b2f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b569190810190613384565b979650505050505050565b5f5f5f611bb884600181518110611b7a57611b7a612fa1565b60200260200101515f0151670de0b6b3a764000087600181518110611ba157611ba1612fa1565b60200260200101516111539092919063ffffffff16565b611bf3855f81518110611bcd57611bcd612fa1565b60200260200101515f0151670de0b6b3a7640000885f81518110611ba157611ba1612fa1565b611bfd91906132d8565b6001600160a01b0387165f908152600260205260409020548551919450600160e01b900461ffff169085906001908110611c3957611c39612fa1565b602002602001015160200151855f81518110611c5757611c57612fa1565b60200260200101516020015110611ca257611c9d85600181518110611c7e57611c7e612fa1565b602002602001015160200151612710836111539092919063ffffffff16565b611cb7565b611cb7855f81518110611c7e57611c7e612fa1565b925084600181518110611ccc57611ccc612fa1565b602002602001015160400151855f81518110611cea57611cea612fa1565b60200260200101516040015110611d3557611d3085600181518110611d1157611d11612fa1565b602002602001015160400151612710836111539092919063ffffffff16565b611d4a565b611d4a855f81518110611d1157611d11612fa1565b91505093509350939050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611da0576040516310f5403960e31b815260040160405180910390fd5b5f611dad858560a01b1790565b90505f611dbb878386610d7a565b90505f611dc9828985611e63565b5060010198975050505050505050565b5f5f611de5848461231c565b604051631e2eaeaf60e01b8152600481018290529091506001600160a01b03861690631e2eaeaf90602401602060405180830381865afa158015611e2b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109de9190613324565b5f600160701b8210611e5f575f5ffd5b5090565b5f5f5f5f611e708561116e565b90505f611e7f87878a856115d2565b5090505f5f5f5f5f5f5b8751811015612088576001600160a01b038d165f9081526004602090815260408083208f8452909152812089519091908a9084908110611ecb57611ecb612fa1565b602002602001015181526020019081526020015f2054878281518110611ef357611ef3612fa1565b6020026020010151611f0591906132fe565b9550868181518110611f1957611f19612fa1565b602002602001015160045f8f6001600160a01b03166001600160a01b031681526020019081526020015f205f8e81526020019081526020015f205f8a8481518110611f6657611f66612fa1565b602002602001015181526020019081526020015f2081905550611f9488828151811061056857610568612fa1565b80955081965050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636a6674a78e87878b8681518110611fe057611fe0612fa1565b60209081029190910101516040516001600160e01b031960e087901b1681526001600160a01b039485166004820152939092166024840152604483015260648201526084810189905260a40160408051808303815f875af1158015612047573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061206b919061343a565b909350915061207a828b6132d8565b9a83019a9950600101611e89565b506001600160a01b038c165f8181526003602090815260408083208f8452825280832080546001600160701b038f8116600160701b908102600160701b600160e01b0319841617909355958552600290935292205491900482169116818b106120f757818b0381019950612109565b8a8203811115612109578a8203810399505b6001600160a01b038e165f90815260026020526040902054600160701b90046001600160701b03168a10612150576040516366b09a5960e01b815260040160405180910390fd5b5050506001600160a01b03909a165f90815260026020526040902080546001600160701b039097166001600160701b0319909716969096179095555094989397509295505050505050565b5f5f5f6121a8858561236d565b9050610850816121c36121be8a60081c60020b90565b6123ca565b6121d36121be8b60201c60020b90565b89612682565b5f5f5f5f61222d876121ee8860081c60020b90565b6121fb8960201c60020b90565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692919061271c565b915091505f7f00000000000000000000000000000000000000000000000000000000000000006122608860081c60020b90565b61226d8960201c60020b90565b604051612281939291908d90602001613286565b60408051601f19818403018152919052805160209091012090505f806122d16001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168b856127b8565b92509250506122f0828603896001600160801b0316600160801b61285b565b965061230c818503896001600160801b0316600160801b61285b565b9550505050505094509492505050565b5f5f612327846128f8565b90505f6123356006836132d8565b60408051602081018790529081018290529091506060015b604051602081830303815290604052805190602001209250505092915050565b5f815f03612390575073fffd8963efd1fc6a506488495d951d5263988d26610d74565b5f6123a8846b204fce5e3e2502611000000085611153565b90505f6123b482612934565b90506109de655af3107a4000606083901b613470565b60020b5f60ff82901d80830118620d89e88111156123f3576123f36345c3193d60e11b846129d8565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b18600282161561242f576ffff97272373d413259a46990580e213a0260801c5b600482161561244e576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561246d576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561248c576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156124ab576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156124ca576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156124e9576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612509576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612529576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612549576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612569576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612589576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156125a9576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156125c9576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156125e9576f31be135f97d08fd981231505542fcfa60260801c5b6201000082161561260a576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561262a576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612649576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612666576b048a170391f7dc42444e8fa20260801c5b5f841315612672575f19045b63ffffffff0160201c9392505050565b5f5f836001600160a01b0316856001600160a01b031611156126a2579293925b846001600160a01b0316866001600160a01b0316116126cd576126c68585856129e7565b9150611947565b836001600160a01b0316866001600160a01b03161015612706576126f28685856129e7565b91506126ff858785612a55565b9050611947565b612711858585612a55565b905094509492505050565b5f5f5f5f61272a8888612a9f565b915091505f5f61273b8a8a8a612b48565b915091505f5f61274c8c8c8b612b48565b915091505f61275b8d8d612b9d565b50509150508a60020b8160020b121561277d57828503985081840397506127a8565b8960020b8160020b1261279957848303985083820397506127a8565b82858803039850818487030397505b5050505050505094509492505050565b5f5f5f5f6127c6868661231c565b604051631afeb18d60e11b815260048101829052600360248201529091505f906001600160a01b038916906335fd631a906044015f60405180830381865afa158015612814573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261283b919081019061348f565b60208101516040820151606090920151909a919950975095505050505050565b5f838302815f198587098281108382030391505080841161287a575f5ffd5b805f0361288c575082900490506128f1565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b6040515f90612917908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b60b581600160881b811061294d5760409190911b9060801c5b690100000000000000000081106129695760209190911b9060401c5b6501000000000081106129815760109190911b9060201c5b630100000081106129975760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c908190048111900390565b815f528060020b60045260245ffd5b5f826001600160a01b0316846001600160a01b03161115612a06579192915b836001600160a01b0316612a3f606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b0316612c4f565b81612a4c57612a4c61345c565b04949350505050565b5f826001600160a01b0316846001600160a01b03161115612a74579192915b612a97826001600160801b03168585036001600160a01b0316600160601b612c4f565b949350505050565b5f5f5f612aab846128f8565b90505f612ab96001836132d8565b604051631afeb18d60e11b815260048101829052600260248201529091505f906001600160a01b038816906335fd631a906044015b5f60405180830381865afa158015612b08573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612b2f919081019061348f565b6020810151604090910151909890975095505050505050565b5f5f5f612b558585612cf5565b90505f6001600160a01b0387166335fd631a612b728460016132d8565b60405160e083901b6001600160e01b0319168152600481019190915260026024820152604401612aee565b5f5f5f5f5f612bab866128f8565b604051631e2eaeaf60e01b8152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa158015612bf3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c179190613324565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b5f80805f19858709858702925082811083820303915050805f03612c83575f8411612c78575f5ffd5b5082900490506128f1565b808411612c8e575f5ffd5b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f5f612d00846128f8565b90505f612d0e6004836132d8565b60408051600287900b602082015290810182905290915060600161234d565b828054828255905f5260205f20908101928215612d66579160200282015b82811115612d66578251825591602001919060010190612d4b565b50611e5f9291505b80821115611e5f575f8155600101612d6e565b6001600160a01b0381168114612d95575f5ffd5b50565b5f5f5f5f60808587031215612dab575f5ffd5b8435612db681612d81565b93506020850135612dc681612d81565b93969395505050506040820135916060013590565b5f60208284031215612deb575f5ffd5b81356128f181612d81565b5f5f5f5f5f60a08688031215612e0a575f5ffd5b8535612e1581612d81565b94506020860135612e2581612d81565b94979496505050506040830135926060810135926080909101359150565b5f5f5f60608486031215612e55575f5ffd5b8335612e6081612d81565b92506020840135612e7081612d81565b929592945050506040919091013590565b5f5f5f60608486031215612e93575f5ffd5b8335612e9e81612d81565b95602085013595506040909401359392505050565b5f5f60408385031215612ec4575f5ffd5b50508035926020909101359150565b61ffff81168114612d95575f5ffd5b5f5f5f60608486031215612ef4575f5ffd5b8335612eff81612d81565b925060208401356001600160701b0381168114612f1a575f5ffd5b91506040840135612f2a81612ed3565b809150509250925092565b5f5f60408385031215612f46575f5ffd5b8235612f5181612d81565b946020939093013593505050565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b8201612f8757612f87612f5f565b505f0390565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b82811015612fee5781516001600160a01b0316865260209586019590910190600101612fc7565b5093949350505050565b5f8151808452602084019350602083015f5b82811015612fee57815186526020958601959091019060010161300a565b6001600160a01b03841681526060602082018190525f9061304b90830185612fb5565b828103604084015261305d8185612ff8565b9695505050505050565b60405160a0810167ffffffffffffffff8111828210171561308a5761308a612f8d565b60405290565b6040516060810167ffffffffffffffff8111828210171561308a5761308a612f8d565b604051601f8201601f1916810167ffffffffffffffff811182821017156130dc576130dc612f8d565b604052919050565b5f67ffffffffffffffff8211156130fd576130fd612f8d565b5060051b60200190565b5f82601f830112613116575f5ffd5b8151613129613124826130e4565b6130b3565b8082825260208201915060208360051b86010192508583111561314a575f5ffd5b602085015b8381101561317057805161316281612ed3565b83526020928301920161314f565b5095945050505050565b5f5f6040838503121561318b575f5ffd5b825167ffffffffffffffff8111156131a1575f5ffd5b6131ad85828601613107565b925050602083015167ffffffffffffffff8111156131c9575f5ffd5b6131d585828601613107565b9150509250929050565b80516112da81612d81565b5f5f82840360c08112156131fc575f5ffd5b60a0811215613209575f5ffd5b50613212613067565b835161321d81612d81565b8152602084015161322d81612d81565b6020820152604084015162ffffff81168114613247575f5ffd5b60408201526060840151600281900b8114613260575f5ffd5b6060820152613271608085016131df565b608082015260a0939093015192949293505050565b60609490941b6bffffffffffffffffffffffff1916845260e892831b6014850152911b6017830152601a820152603a0190565b5f602082840312156132c9575f5ffd5b815180151581146128f1575f5ffd5b80820180821115610d7457610d74612f5f565b81810381811115610d7457610d74612f5f565b8181035f83128015838313168383128216171561331d5761331d612f5f565b5092915050565b5f60208284031215613334575f5ffd5b5051919050565b6001600160a01b03851681526080602082018190525f9061335e90830186612fb5565b82810360408401526133708186612ff8565b90508281036060840152611b568185612ff8565b5f60208284031215613394575f5ffd5b815167ffffffffffffffff8111156133aa575f5ffd5b8201601f810184136133ba575f5ffd5b80516133c8613124826130e4565b808282526020820191506020606084028501019250868311156133e9575f5ffd5b6020840193505b8284101561305d5760608488031215613407575f5ffd5b61340f613090565b84518152602080860151818301526040808701519083015290835260609094019391909101906133f0565b5f5f6040838503121561344b575f5ffd5b505080516020909101519092909150565b634e487b7160e01b5f52601260045260245ffd5b5f8261348a57634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561349f575f5ffd5b815167ffffffffffffffff8111156134b5575f5ffd5b8201601f810184136134c5575f5ffd5b80516134d3613124826130e4565b8082825260208201915060208360051b8501019250868311156134f4575f5ffd5b6020840193505b8284101561305d5783518252602093840193909101906134fb56fea26469706673582212203f02e26f89e96d84132fe9f0b392b48e8aad665fcfc38d071992f18814f5251f64736f6c634300081b0033000000000000000000000000d0690557600eb8be8391d1d97346e2aab5300d5f0000000000000000000000007c5f5a4bbd8fd63184577525326123b519429bdc