0 txs
9 calls
constructor
No constructor.
functions
baseCollateralCoeff
viewfunction baseCollateralCoeff() view returns (uint256 inner)
baseDebtCoeff
viewfunction baseDebtCoeff() view returns (uint256 inner)
baseDelevCoeff
viewfunction baseDelevCoeff() view returns (uint256 inner)
baseToken
viewfunction baseToken() view returns (address)
defaultSwapCallData
viewfunction defaultSwapCallData() view returns (uint32)
discountedBaseCollateral
viewfunction discountedBaseCollateral() view returns (uint256)
discountedBaseDebt
viewfunction discountedBaseDebt() view returns (uint256)
discountedQuoteCollateral
viewfunction discountedQuoteCollateral() view returns (uint256)
discountedQuoteDebt
viewfunction discountedQuoteDebt() view returns (uint256)
emergencyWithdrawCoeff
viewfunction emergencyWithdrawCoeff() view returns (uint256 inner)
factory
viewfunction factory() view returns (address)
getBasePrice
viewfunction getBasePrice() view returns (tuple)
getHeapPosition
viewfunction getHeapPosition(uint32 index, bool _short) view returns (bool success, tuple node)
getLiquidationPrice
viewfunction getLiquidationPrice() view returns (tuple)
lastReinitTimestampSeconds
viewfunction lastReinitTimestampSeconds() view returns (uint256)
longLeverageX96
viewfunction longLeverageX96() view returns (uint256)
mode
viewfunction mode() view returns (uint8)
params
viewfunction params() view returns (uint8 maxLeverage, uint24 interestRate, uint24 fee, uint24 swapFee, uint24 mcSlippage, uint184 positionMinAmount, uint184 quoteLimit)
positions
viewfunction positions(address) view returns (uint8 _type, uint32 heapPosition, uint256 discountedBaseAmount, uint256 discountedQuoteAmount)
priceOracle
viewfunction priceOracle() view returns (address)
quoteCollateralCoeff
viewfunction quoteCollateralCoeff() view returns (uint256 inner)
quoteDebtCoeff
viewfunction quoteDebtCoeff() view returns (uint256 inner)
quoteDelevCoeff
viewfunction quoteDelevCoeff() view returns (uint256 inner)
quoteToken
viewfunction quoteToken() view returns (address)
shortLeverageX96
viewfunction shortLeverageX96() view returns (uint256)
shutDownPrice
viewfunction shutDownPrice() view returns (uint256 inner)
execute
payablefunction execute(uint8 call, uint256 amount1, int256 amount2, uint256 limitPriceX96, bool flag, address positionAddress, uint256 swapCalldata) payable
initialize
nonpayablefunction initialize(address _quoteToken, address _baseToken, address _priceOracle, uint32 _defaultSwapCallData, tuple _params)
setParameters
nonpayablefunction setParameters(tuple _params)
shutDown
nonpayablefunction shutDown(uint256 swapCalldata)
sweepETH
nonpayablefunction sweepETH()
events
BalanceSync
event BalanceSync()
BaseDebtRepaid
event BaseDebtRepaid(address indexed user, uint256 realBaseDebtDelta, uint256 discountedBaseDebtDelta)
ClosePosition
event ClosePosition(address indexed user, address indexed token, uint256 collateralDelta, uint256 swapPriceX96, uint256 collateralDiscountedDelta)
Deleverage
event Deleverage(uint8 positionType, uint256 totalCollateralReduced, uint256 totalDebtReduced)
DepositBase
event DepositBase(address indexed user, uint256 amount, uint8 newPositionType, uint256 baseDiscountedAmount)
DepositQuote
event DepositQuote(address indexed user, uint256 amount, uint8 newPositionType, uint256 quoteDiscountedAmount)
Emergency
event Emergency(uint8 mode)
EmergencyWithdraw
event EmergencyWithdraw(address indexed who, address indexed token, uint256 amount)
EnactMarginCall
event EnactMarginCall(address indexed user, uint256 swapPriceX96, int256 collateralSurplus, uint8 _type)
Long
event Long(address indexed user, uint256 amount, bool amountInQuote, uint256 swapPriceX96, uint256 quoteDiscountedDelta, uint256 baseDiscountedDelta)
ParametersChanged
event ParametersChanged()
QuoteDebtRepaid
event QuoteDebtRepaid(address indexed user, uint256 realQuoteDebtDelta, uint256 discountedQuoteDebtDelta)
ReceivePosition
event ReceivePosition(address indexed liquidator, address indexed position, uint8 newPositionType, uint256 newPositionQuoteDiscounted, uint256 newPositionBaseDiscounted)
Reinit
event Reinit(uint256 reinitTimestamp, uint256 baseDebtDistributed, uint256 quoteDebtDistributed)
SellBaseForQuote
event SellBaseForQuote(address indexed user, uint256 baseDelta, uint256 quoteDelta, uint256 discountedBaseCollateralDelta, uint256 discountedQuoteCollateralDelta)
SellQuoteForBase
event SellQuoteForBase(address indexed user, uint256 quoteDelta, uint256 baseDelta, uint256 discountedQuoteCollateralDelta, uint256 discountedBaseCollateralDelta)
Short
event Short(address indexed user, uint256 amount, bool amountInQuote, uint256 swapPriceX96, uint256 quoteDiscountedDelta, uint256 baseDiscountedDelta)
WithdrawBase
event WithdrawBase(address indexed user, uint256 amount, uint256 baseDiscountedDelta)
WithdrawQuote
event WithdrawQuote(address indexed user, uint256 amount, uint256 quoteDiscountedDelta)
errors
AccessDenied
error AccessDenied()
BadLeverage
error BadLeverage()
EmergencyMode
error EmergencyMode()
ExceedsLimit
error ExceedsLimit()
FailedCall
error FailedCall()
Forbidden
error Forbidden()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
LessThanMinimalAmount
error LessThanMinimalAmount()
Locked
error Locked()
LongEmergency
error LongEmergency()
NotEmergency
error NotEmergency()
NotLiquidatable
error NotLiquidatable()
NotWETH9
error NotWETH9()
PositionInitialized
error PositionInitialized()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
ShortEmergency
error ShortEmergency()
ShortUnavailable
error ShortUnavailable()
SlippageLimit
error SlippageLimit()
UninitializedPosition
error UninitializedPosition()
WrongIndex
error WrongIndex()
WrongPositionType
error WrongPositionType()
WrongValue
error WrongValue()
ZeroAmount
error ZeroAmount()
creation bytecode
0x60803460625760208101906001600160401b03821181831017604e576c0100000000000000000000000091604052526c01000000000000000000000000601655604051614c0a90816100678239f35b634e487b7160e01b5f52604160045260245ffd5b5f80fdfe6080806040526004361015610042575b50361561001a575f80fd5b6001600160a01b0361002a613767565b16330361003357005b63178e51ad60e11b5f5260045ffd5b5f3560e01c90816307cc193514610bfd575080630f9c381614610be05780631471d68b146109bd5780631cb5d340146109a0578063217a4b701461097857806323578f2e1461094c5780632630c12f1461092457806328e6583914610907578063295a5212146108db5780632c1830c4146108b65780633d9c02ed146108995780633f056b231461087c57806340e27c901461081757806341164124146107fa57806346558d1b146107e057806355f57510146107765780635b87ac0c1461075957806375e92408146103e5578063911e1370146103c857806394ad0c48146103ab578063af734b391461038e578063afcbea8414610371578063b49f4afd1461034e578063c336714d14610331578063c45a01551461030a578063c55dae63146102e2578063cff0ab9614610272578063d47f687714610247578063d7f5cadf1461022a578063ec511d0b146101c45763ff9374fd146101a3575f61000f565b346101c0575f3660031901126101c0576020601954604051908152f35b5f80fd5b346101c05760403660031901126101c05760043563ffffffff811681036101c0576024359081151582036101c0576060916101fe916127e1565b60405191151582526001600160601b038151166020830152602060018060a01b03910151166040820152f35b346101c0575f3660031901126101c0576020600154604051908152f35b346101c0575f3660031901126101c05761025f61288b565b4761026657005b61027047336136cf565b005b346101c0575f3660031901126101c05760e060055460018060b81b036006541660018060b81b03600754169062ffffff6040519360ff81168552818160081c166020860152818160201c166040860152818160381c16606086015260501c16608084015260a083015260c0820152f35b346101c0575f3660031901126101c0576003546040516001600160a01b039091168152602090f35b346101c0575f3660031901126101c0575f546040516001600160a01b039091168152602090f35b346101c0575f3660031901126101c0576020600954604051908152f35b346101c0575f3660031901126101c057602061036861278f565b60405190518152f35b346101c0575f3660031901126101c0576020601354604051908152f35b346101c0575f3660031901126101c0576020601554604051908152f35b346101c0575f3660031901126101c0576020600c54604051908152f35b346101c0575f3660031901126101c0576020601054604051908152f35b346101c0576101603660031901126101c0576103ff610c3e565b6024356001600160a01b038116908190036101c0576044356001600160a01b038116908190036101c0576064359163ffffffff831683036101c05760e03660831901126101c0575f54936001600160a01b03851661074a576001600160a01b0316801561068e57811561068e57821561068e57600280546001600160a01b031990811692909217905560038054821692909217909155600480549091169190911790556001600160c01b03199091163363ffffffff60a01b19161760a09190911b63ffffffff60a01b16175f55426001556040516104dc81612693565b600160601b90819052600a556040516104f481612693565b600160601b90819052600c5560a43562ffffff81168082036101c057620f424010801561072d575b8015610710575b80156106f2575b80156106d9575b80156106bb575b801561069d575b61068e5760843560ff8116908181036101c057506005549160c4359062ffffff821682036101c05760e4359262ffffff841684036101c057610104359162ffffff831683036101c05763ffffff008366ffffff00000000945062ffffff60501b9060501b169662ffffff60501b199362ffffff60381b199166ffffffffffffff191617169160081b1617169160201b16179062ffffff60381b9060381b1617176005556101243560018060b81b03811681036101c057600680546001600160b81b0319166001600160b81b039283161790556101443590811681036101c057600780546001600160b81b0319166001600160b81b039092169190911790557ffd3af382071f4cb787d4d245bfe51266e40f514a545168e3063d1cf1226b9e4f5f80a16106696138b1565b805460ff1916600117905560405161068081612693565b600160601b90819052600f55005b632635240760e21b5f5260045ffd5b50610124356001600160b81b038116908181036101c057501561053f565b50610144356001600160b81b038116908181036101c0575015610538565b5060843560ff81168082036101c0576001915010610531565b506101043562ffffff81168082036101c057620f424091501161052a565b5060e43562ffffff81168082036101c057620f4240915011610523565b5060c43562ffffff81168082036101c057620f424091501161051c565b631dd2188d60e31b5f5260045ffd5b346101c0575f3660031901126101c0576020600a54604051908152f35b346101c05760203660031901126101c0576001600160a01b03610797610c3e565b165f526008602052608060405f20805460ff81169163ffffffff6002600183015492015492604051946107c981610c54565b855260081c16602084015260408301526060820152f35b346101c0575f3660031901126101c05760206103686126ed565b346101c0575f3660031901126101c0576020601454604051908152f35b60e03660031901126101c057600435600b8110156101c0576084359081151582036101c05760a4356001600160a01b03811681036101c0576108709261085b61290e565b60c43592606435906044359060243590611027565b6017805460ff19169055005b346101c0575f3660031901126101c0576020601854604051908152f35b346101c0575f3660031901126101c0576020600e54604051908152f35b346101c0575f3660031901126101c057602063ffffffff5f5460a01c16604051908152f35b346101c0575f3660031901126101c05761090360ff60045460a01c1660405191829182610c17565b0390f35b346101c0575f3660031901126101c0576020601654604051908152f35b346101c0575f3660031901126101c0576004546040516001600160a01b039091168152602090f35b346101c05760203660031901126101c05761096561288b565b61096d61290e565b610870600435610c5e565b346101c0575f3660031901126101c0576002546040516001600160a01b039091168152602090f35b346101c0575f3660031901126101c0576020600d54604051908152f35b346101c05760e03660031901126101c0576109d661288b565b60243562ffffff81168082036101c057620f4240108015610bc3575b8015610ba6575b8015610b89575b8015610b70575b8015610b53575b8015610b36575b61068e5760043560ff8116908181036101c05750600554916044359062ffffff821682036101c0576064359262ffffff841684036101c0576084359162ffffff831683036101c05763ffffff008366ffffff00000000945062ffffff60501b9060501b169662ffffff60501b199362ffffff60381b199166ffffffffffffff191617169160081b1617169160201b16179062ffffff60381b9060381b16171760055560a43560018060b81b03811681036101c057600680546001600160b81b0319166001600160b81b0392831617905560c43590811681036101c057600780546001600160b81b0319166001600160b81b039092169190911790557ffd3af382071f4cb787d4d245bfe51266e40f514a545168e3063d1cf1226b9e4f5f80a1005b5060a4356001600160b81b038116908181036101c0575015610a15565b5060c4356001600160b81b038116908181036101c0575015610a0e565b5060043560ff81168082036101c0576001915010610a07565b5060843562ffffff81168082036101c057620f4240915011610a00565b5060643562ffffff81168082036101c057620f42409150116109f9565b5060443562ffffff81168082036101c057620f42409150116109f2565b346101c0575f3660031901126101c0576020600b54604051908152f35b346101c0575f3660031901126101c057602090600f548152f35b919060208301926003821015610c2a5752565b634e487b7160e01b5f52602160045260245ffd5b600435906001600160a01b03821682036101c057565b60041115610c2a57565b6004549060ff5f9260a01c166003811015610c2a57610ff457610c7f612941565b50610c8861278f565b610ca4600d54604051610c9a81612693565b600f5481526143b8565b600354909290610cbc906001600160a01b0316612b98565b90600254610cd2906001600160a01b0316612b98565b91610cdd8584612c01565b9283106101c05782610cef855161391d565b11610e8457610cff81855161396b565b8511610d14576303ca9f4d60e11b8652600486fd5b6004805460ff60a01b1916600160a11b17905583516019558594808410610e7d57610d3f9084612934565b838111610e79575b809282610e37575b50505060ff60045460a01c166003811015610e2357600103610de65790610d7a610d8192845161396b565b925161396b565b91610d8c8184612934565b928311610de3575090610dad9160405193610da685612693565b84526139ca565b8152516018555b604051600281527f53254125669410c9787ebe35314b4811ebcd804ad696379b0eb6c64a340032fa90602090a1565b80fd5b91610df884610dfe929593955161396b565b84612934565b928311610de3575090610e189160405193610da685612693565b815251601855610db4565b634e487b7160e01b85526021600452602485fd5b919550915085610e6557610e50610e56915f965f613c97565b82612c01565b9081106101c0575f8080610d4f565b634e487b7160e01b86526011600452602486fd5b8680fd5b5085610d47565b91929450610e90613be4565b856001600160a01b038216610fd9575b50506004805460ff60a01b1916600160a01b17905584516019555f928291858211610fa6575b505060ff60045460a01c166003811015610f9257600103610f5857610f0191610ef3610efa92875161396b565b955161396b565b9283612934565b918211610de35750610f229060405192610f1a84612693565b5f84526139ca565b8152516018555b604051600181527f53254125669410c9787ebe35314b4811ebcd804ad696379b0eb6c64a340032fa90602090a1565b93610f6e9193610f68915161396b565b83612934565b918211610de35750610f879060405192610f1a84612693565b815251601855610f29565b634e487b7160e01b84526021600452602484fd5b91509250610fb48484612934565b9283116101c057610e50610fcb915f946001613c97565b8181106101c0575f80610ec6565b610fe291612c0e565b610fed575f85610ea0565b5050505050565b63185079b960e01b5f5260045ffd5b600160ff1b8114611013575f0390565b634e487b7160e01b5f52601160045260245ffd5b9290959193600b841015610c2a576008840361138357505050505f811261068e5760ff60045460a01c166003811015610c2a57610ff457335f52600860205260405f209160ff83541661107981610c54565b61137457611085612941565b506001600160a01b03165f8181526008602052604090209093906110a761278f565b6110b18183612cb8565b1561136557600360ff8354166110c681610c54565b0361135b576110e66040516110da81612693565b600a54809152856139ca565b6009546110f38282612c01565b9081106101c05760095561110c60018401549182612c01565b9081106101c05760018601908155600261112f63ffffffff855460081c16613e4d565b9301926111438454604051610c9a81612693565b938486106112e15754936111686040519161115d83612693565b600c54835287612934565b8681116101c05761117a9151906139ca565b9081600289015561118e600b549283612c01565b9182106101c0576111ac91600b55600160ff19895416178855614660565b600d54926111ba8185612934565b9384116101c0576112036112199161124e95600d556111fb604051916111df83612693565b600a5483526040516111f081612693565b600e5480915261396b565b9051906139ca565b61120f81600954612934565b6009558254612934565b90555b611225856134fd565b61122e81613f62565b855f5260086020525f600260408220828155826001820155015584612cb8565b6112d2576003546112809261126d9133906001600160a01b0316613eb1565b60025433906001600160a01b0316613eb1565b60ff8154169060016002820154910154906040519261129e81610c54565b8352602083015260408201527f5640888abc8e397bce303a7cd7c161b313688acc5bc6b72248e052eac57468bf60603392a3565b63522007a560e01b5f5260045ffd5b875460ff1916600317885593506113006112fa82613e65565b88613e95565b61131b60405161130f81612693565b600f54809152866139ca565b9354906113288583612934565b9182116101c057611356916002890155611351339163ffffffff165f52601160205260405f2090565b61436d565b6111ac565b61124e915061121c565b636ef5bcdd60e11b5f5260045ffd5b63293510e360e11b5f5260045ffd5b9091935f9693959693600987146124525760ff60045460a01c166003811015610c2a57610ff4576113b2612c45565b9890612441576001600160a01b0381168061241a575050335f52600860205260405f209633955b6113e38a8a612cb8565b61240357610c2a578061158c5750801561157d57865460ff811661140681610c54565b1561156e575b50600260ff88541661141d81610c54565b036114315763dbf2ec8560e01b5f5260045ffd5b61144461143d82614351565b895161396b565b6007546001600160b81b03161061155f5761147060405161146481612693565b600a54809152826139ca565b600188018054906114818383612c01565b9182106101c057556114966009549182612c01565b9081106101c0576009556003546114b990829033906001600160a01b0316613eb1565b7fa6038bcb866df255f5b5fe46dabc103bbdda6484349402a7f69b502240f139e560ff8854166001890154906114fe60405192839260018060a01b038b1696846134de565b0390a25f81131561152c5792858761152094611525979461152a9a9997613126565b6134fd565b613f62565b565b93505050505f811261154657509061152561152a926134fd565b61154f90611003565b5063dbf2ec8560e01b5f5260045ffd5b632795088960e11b5f5260045ffd5b60ff191660011787555f61140c565b631f2a200560e01b5f5260045ffd5b939796929592949193600181036118595750801561157d57845460ff81166115b381610c54565b1561184a575b50600360ff8654166115ca81610c54565b036117e0576040516115db81612693565b600f5480825260028701916115f28354809361396b565b908185106117bc57506116058185612934565b908482116101c0578403611792575b61164b9061163361162e63ffffffff8b5460081c16613e4d565b614660565b6040519061164082612693565b600c548092526139ca565b809192600160ff198a541617895555611667600b549182612c01565b9081106101c057600b555b61169660405161168181612693565b600a5481526111fb836040516111f081612693565b90600187018054906116a88483612934565b9182116101c057556116bd600d549182612934565b9081116101c057600d556116d46009549182612934565b9081116101c0576009555b6002546116f890829033906001600160a01b0316613eb1565b7f674eb50a563a8d71e963ec32b215164a31e83cb53940ef8198fcf8f2e3a0e0be60ff86541660028701549061173d60405192839260018060a01b03881696846134de565b0390a25f8313156117575763dbf2ec8560e01b5f5260045ffd5b838661152a98611525975f8712611775575b505050505050506134fd565b61178161178697611003565b613126565b5f808083868280611769565b61179b81614387565b6007546001600160b81b0316101561161457632795088960e11b5f5260045ffd5b6117c8915051846139ca565b916117d38383612934565b9182116101c05755611672565b6117e981614387565b6007546001600160b81b03161061155f5761181560405161180981612693565b600c54809152826139ca565b600286018054906118268383612c01565b9182106101c0575561183b600b549182612c01565b9081106101c057600b556116df565b60ff191660011785555f6115b9565b909791929350600281145f14611a455750505050831561157d5760ff8154169361188285610c54565b8415611a365761189185610c54565b60028514611a2757600182018054906118a987610c54565b60018703611a1c575f925b6118be84846145ec565b908181106119f757508093600384996002880154156119d8575b6118e181610c54565b14611974575b50506118f38783612934565b9182116101c057556009546119088682612934565b9081116101c05760095561191c8483612cb8565b6112d25761152a9461193e826115259560018060a01b03600354163391613dba565b60405191825260208201527f84fc81d1b98b7740216df0055337b83537c88efc18207fa4631bce54b4e07f8460403392a26134fd565b61198761198f91604051610c9a81612693565b8851906139ca565b6006546119a5906001600160b81b031682612c01565b9081106101c0576119b68583612934565b9182116101c057116119c9575f806118e7565b634edec39960e01b5f5260045ffd5b335f5260086020525f60026040822082815582600182015501556118d8565b936003611a168660405190611a0b82612693565b600a548092526139ca565b996118d8565b6002840154926118b4565b631a04c6d360e31b5f5260045ffd5b6322192de760e21b5f5260045ffd5b60038103611be25750505050831561157d5760ff81541693611a6685610c54565b8415611a3657611a7585610c54565b60038514611a275760028201805490611a8d87610c54565b60018703611bdd575b60405192611aa384612693565b600c54809452611ab3838561396b565b93848210611bba5750508260028398600187015415611b9c575b611ad681610c54565b14611b68575b50611ae78783612934565b9182116101c05755600b54611afc8682612934565b9081116101c057600b55611b108483612cb8565b6112d25761152a94611b32826115259560018060a01b03600254163391613dba565b60405191825260208201527f487ff9253eff8d6ffd939875dc7caf988054404b5f75882a7ce9dc690b6a97bd60403392a26134fd565b6006548751611b80916001600160b81b03169061396b565b611b8a8583612934565b9182116101c057116119c9575f611adc565b335f5260086020525f82604082208281558260018201550155611acd565b611bd76002918396939681604051611bd181612693565b526139ca565b98611acd565b611a96565b93969294919390929060048103611c025763dbf2ec8560e01b5f5260045ffd5b60058103611c21575092868661152094611525979461152a9a97613126565b91949291905060068103612029575090915060ff855416611c4181610c54565b60038103612009575060028501908154916001870190611c628483546145ec565b94611c7385604051610c9a81612693565b90611c888262ffffff60055460381c16613a6e565b94611c938684612c01565b9283106101c057611ca490836139ca565b90611cad614440565b6003546002546001600160a01b039081169a92939116916020918391611cf5908890611cda81898761452d565b604051635ef0652360e11b81529e8f95869560048701613c67565b03815f6001600160a01b0387165af1988915611ffe575f99611fc6575b5090611d1d91614476565b8611611fb757611d3086611d3692613ae3565b936147b4565b604051611d4281612693565b600a548152611d6d611d67604051611d5981612693565b600e5480915284549061396b565b87612c01565b8681106101c057611d7f9151906139ca565b93600954611d8d8682612934565b9081116101c057600955611da4600d549182612934565b9081116101c057600d558154611dba8582612934565b9081116101c0575f925555611de561162e63ffffffff600160ff198a541617808a5560081c16613e4d565b600354604080519485526020850192909252908301919091526001600160a01b03169033907f13a9b207a6235519f908e828190fa2f938b5e52c7888b90b98b87125caebde6e90606090a3611e41575b61152561152a926134fd565b60ff82541691611e5083610c54565b8215611a3657611e5f83610c54565b60028314611a27576001810190815491611e7885610c54565b60018503611fad575f5b6003611e8e82866145ec565b96600285015415611f8e575b611ea381610c54565b14611f39575b50611eb48380612934565b908382116101c05755600954611eca8382612934565b9081116101c057600955611ede8382612cb8565b6112d2578361152592611f0061152a963360018060a01b03600354165f613dba565b60405191825260208201527f84fc81d1b98b7740216df0055337b83537c88efc18207fa4631bce54b4e07f8460403392a2925050611e35565b611f4c611f5491604051610c9a81612693565b8551906139ca565b600654611f6a906001600160b81b031682612c01565b9081106101c057611f7b8680612934565b908682116101c057116119c9575f611ea9565b335f5260086020525f6002604082208281558260018201550155611e9a565b6002820154611e82565b63f7b7f0b960e01b5f5260045ffd5b919098506020823d602011611ff6575b81611fe3602093836126cb565b810103126101c057905197611d1d611d12565b3d9150611fd6565b6040513d5f823e3d90fd5b60029061201581610c54565b03611a275763dbf2ec8560e01b5f5260045ffd5b600a81036121ed575060ff86541661204081610c54565b600381036121cd57506120539286614164565b6120635761152561152a926134fd565b60ff8254169161207283610c54565b8215611a365761208183610c54565b60038314611a2757600281019081549161209a85610c54565b600185036121c8575b60026120c0846040516120b581612693565b600c5480915261396b565b956001840154156121aa575b6120d581610c54565b1461216b575b6120e58380612934565b908382116101c05755600b546120fb8382612934565b9081116101c057600b5561210f8382612cb8565b6112d257836115259261213261152a9660018060a01b036002541633905f613dba565b60405191825260208201527f487ff9253eff8d6ffd939875dc7caf988054404b5f75882a7ce9dc690b6a97bd60403392a2925050611e35565b6006548451612183916001600160b81b03169061396b565b61218d8680612934565b908682116101c05711156120db57634edec39960e01b5f5260045ffd5b335f5260086020525f826040822082815582600182015501556120cc565b6120a3565b6002906121d981610c54565b03611a27576121e89286614016565b612053565b915050600791501490816123fb575b5061220d5761152561152a926134fd565b600354612222906001600160a01b0316612b98565b612231600954600d54906145ec565b9061223a6138b1565b90828111156123b35761225e6040519361225385612693565b600a54855282612934565b9081116101c05761227660019161228d9451906139ca565b9101612283828254612c01565b9055600954612c01565b6009555b6002546122a6906001600160a01b0316612b98565b6122c26122bb600d54604051610c9a81612693565b9182612c01565b9081106101c0576122d1613ff8565b926122da6138b1565b9380831115612364576122fe604051916122f383612693565b600c54835284612934565b9283116101c05761152a94600261231d611525956123349451906139ca565b910161232a828254612c01565b9055600b54612c01565b600b555b7f84aada178f1632c750f9338e543f9e4d47b7b3f9f5977a056a71e16c16e109015f80a1925050611e35565b91612375604051916122f383612693565b9283116101c05761152a946002612394611525956123ab9451906139ca565b91016123a1828254612934565b9055600b54612934565b600b55612338565b916123c46040519361225385612693565b9081116101c0576123dc6001916123f39451906139ca565b91016123e9828254612934565b9055600954612934565b600955612291565b90505f6121fc565b5050505050505050906115258161152a9333612d56565b5f98919852600860205260405f209760ff89541661243781610c54565b61074a57956113d9565b505050505050505061152a90613f62565b505094505050505060ff60045460a01c166003811015610c2a57801561268457335f52600860205260405f206040516080810181811067ffffffffffffffff8211176126705760405281549263ffffffff60ff8516946124b186610c54565b85845260081c166020830152600260018401549360408401948552015493606083019485526124df81610c54565b6124e881610c54565b15611a36576001036125ea576002905161250181610c54565b61250a81610c54565b146125db5761254561252261254b92518451906145ec565b926111fb6040519161253383612693565b601954835251604051610c9a81612693565b82612934565b9081116101c05761256d9060405161256281612693565b60185480915261396b565b906125a18260018060a01b0360035416925b335f5260086020525f6002604082208281558260018201550155833391613dba565b6040519182526001600160a01b03169033907ff24ef89f38eadc1bde50701ad6e4d6d11a2dc24f7cf834a486991f388332850490602090a3565b637bf6baff60e01b5f5260045ffd5b60039150516125f881610c54565b61260181610c54565b146126615761261790516040516120b581612693565b61263461254560405161262981612693565b60195480915261391d565b9081116101c05761264b9060405161256281612693565b906125a18260018060a01b03600254169261257f565b6309772f7760e41b5f5260045ffd5b634e487b7160e01b5f52604160045260245ffd5b6303ca9f4d60e11b5f5260045ffd5b6020810190811067ffffffffffffffff82111761267057604052565b6040810190811067ffffffffffffffff82111761267057604052565b90601f8019910116810190811067ffffffffffffffff82111761267057604052565b5f6040516126fa81612693565b5260048054600254600354604051634e83991f60e11b81526001600160a01b0392831694810194909452811660248401526020918391168180604481015b03915afa908115611ffe575f9161275d575b506040519061275882612693565b815290565b90506020813d602011612787575b81612778602093836126cb565b810103126101c057515f61274a565b3d915061276b565b5f60405161279c81612693565b5260048054600254600354604051600162248f4560e11b031981526001600160a01b039283169481019490945281166024840152602091839116818060448101612738565b9190916040516127f0816126af565b5f8082526020820152921561280557505f9190565b91505f604051612814816126af565b5f81525f60208201529263ffffffff8060125416911690811061283657509190565b9250506001915f52601160205260405f2060405190612854826126af565b546001600160601b038116825260601c602082015290565b908160209103126101c057516001600160a01b03811681036101c05790565b5f54604051638da5cb5b60e01b815290602090829060049082906001600160a01b03165afa908115611ffe575f916128df575b506001600160a01b031633036128d057565b634ca8886760e01b5f5260045ffd5b612901915060203d602011612907575b6128f981836126cb565b81019061286c565b5f6128be565b503d6128ef565b60175460ff81166129255760ff1916600117601755565b6303cb96db60e21b5f5260045ffd5b9190820391821161101357565b61294d60015442612934565b8015612b9357426001556040519061296482612693565b620f0c3f60651b8252600554916129ec826129e76129ce846040519761298989612693565b5f89526129a1620f424062ffffff8360081c166139ca565b89526129c7620f424062ffffff604051936129bb85612693565b5f855260201c166139ca565b81526137b9565b604051906129db82612693565b600160601b82526137dd565b613824565b5f935f93600d549384612a84575b505050505080612a45575b5060607ff46736b0ecc6aefe498f4af0f08f81c02b4d7432500a40970b1275125621783691600154906040519182525f60208301526040820152a1600190565b612a4d6138b1565b600201805490612a5d8383612c01565b9182106101c05755600b5490612a739082612c01565b9081106101c057600b556060612a05565b83949650612b89955092612adb612ad4612ae0936129e76129ce6111fb98612acf612ab66040519e8f610c9a81612693565b996010549060405191612ac883612693565b82526143d7565b6137b9565b80986143d7565b6143d7565b51600f55612b07612b0d82612b07604051612afa81612693565b600160601b8152896143f7565b5161396b565b95612b55612b50604051612b2081612693565b600160601b8152612b2f613ff8565b90612b4960405192612b4084612693565b5f84528c6139ca565b82526137dd565b614420565b612b8360405195612b6587612693565b600c54875260405190612b7782612693565b600160601b82526143f7565b906143d7565b5f808080806129fa565b505f90565b6040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa908115611ffe575f91612bd2575090565b90506020813d602011612bf9575b81612bed602093836126cb565b810103126101c0575190565b3d9150612be0565b9190820180921161101357565b6001600160a01b0381165f9081526008602052604090209291612c318185612cb8565b9384612c3c57505050565b61152a92612d56565b5f905f604051612c5481612693565b52612c5d61278f565b90612c66612941565b15612cb357612c73613be4565b6001600160a01b0381169081612c87575050565b83612c9491959395612c0e565b908215612ca057505091565b90915081612cac575091565b9050331491565b5f9250565b9060ff825416612cc781610c54565b60028103612d08575090612cf2612ceb6002612d049301546040516120b581612693565b925161391d565b60055460601b60ff60601b1692613fd6565b1190565b600390612d1481610c54565b03612d5057612d4b612d3e612d0492612d376002600187015496015480966145ec565b905161396b565b92604051610c9a81612693565b612cf2565b50505f90565b9160ff825416612d6581610c54565b60038103613105575060018201908154906002840191612d87835480926145ec565b91612d97600954600d54906145ec565b808411613015575b5050505050505b60ff81541690612db582610c54565b60038203612fe7575f60018201928354916002840194612de7612dda875480966145ec565b94604051610c9a81612693565b935f9080612f71575b50604051612dfd81612693565b5f9052848110612f1857604051612e1381612693565b600160601b8152612e248683612934565b908282116101c057612e5b91612e5491612b49612e3f613ff8565b60405193612e4c85612693565b5f85526139ca565b9582612934565b9081116101c057612e6c9094614420565b612e7a600954915482612934565b9081116101c057600955612e92600d54955486612934565b9485116101c057612ed661162e63ffffffff6060967fd8d44b2756547fb2e12b18afb148cc4e0fcde6dda3f5223d268d5ff11e87a9d498600d555460081c16613e4d565b91945b60018060a01b031694855f5260086020525f60026040822082815582600182015501556040519283526020830152612f1081610c54565b6040820152a2565b93604051612f2581612693565b600160601b8152612f368683612934565b908282116101c057612f5891612e5491612f51612e3f613ff8565b82526143f7565b9081116101c057612f6b612e6c91611003565b94614420565b92505062ffffff60055460501c16620f42400362ffffff811161101357612fd9612fc7612fe092612fb9620f424062ffffff60405193612fb085612693565b5f8552166139ca565b8152612d3786612b076126ed565b63ffffffff5f5460a01c169085613d31565b9283613ae3565b915f612df0565b5060607fd8d44b2756547fb2e12b18afb148cc4e0fcde6dda3f5223d268d5ff11e87a9d4915f905f94612ed9565b61301f9084612934565b9283116101c05761303483613065925161396b565b61304483604051610c9a81612693565b8082116130fd575b506040519061305a82612693565b600f548092526139ca565b926130708483612934565b9182116101c05755600d546130858382612934565b9081116101c057600d556130b3610e50604051936130a285612693565b600a5485526040516111f081612693565b9081106101c0576130c59151906139ca565b908054906130d38383612934565b9182116101c057556130e86009549182612934565b9081116101c0576009555f8080808080612d9f565b90505f61304c565b6002915061311281610c54565b14612da657631a04c6d360e31b5f5260045ffd5b95919492909361313883878684614016565b600281019182549660018301948554916131528a846145ec565b6006546001600160b81b0316116119c9578a89156133dc5761317e929161317891613ae3565b8b613d84565b613188818b613ae3565b9861319d8b62ffffff60055460381c16613a6e565b6131a7818d612c01565b8c81106101c0576131b890916147b4565b6131cb6131c484614351565b865161396b565b6007546001600160b81b03161061155f576040516131ec9161305a82612693565b956131f78783612c01565b9182106101c05755600d5461320c8682612c01565b9081106101c057600d556040519061322382612693565b600a54825261323b610e50876040516111f081612693565b9081106101c05761324d9151906139ca565b946132588683612c01565b9182106101c0575560095461326d8582612c01565b9081106101c0576009558154600160ff821661328881610c54565b146132e8575b5061329891612cb8565b6112d2577f166145680ce03b17ab755410028a4e5ee2dac69389af1bce09c8601a155f012a9460a09460405197885215156020880152604087015260608601526080850152600180831b031692a2565b60081c63ffffffff166133cd57613298916133bb604051613308816126af565b5f81526133996020820160018060a01b038a16815261337363ffffffff60125416936001600160601b038061334b8763ffffffff165f52601160205260405f2090565b925183546001600160601b03191691169190911617815582516001600160a01b03169061436d565b61337c83613e65565b90516001600160a01b03165f908152600860205260409020613e95565b63ffffffff6133a782613e65565b1663ffffffff196012541617601255614822565b50805460ff191660031781559161328e565b632230814560e11b5f5260045ffd5b919990826133e99161396b565b998b8b6133f4614440565b60025460035491946001600160a01b0391821694919092169261341890868661452d565b604051635ef0652360e11b81529e8f9361343793869060048701613c67565b6001600160a01b038416918e9103815a6020945f91f19b8c15611ffe575f9c6134a6575b509061346691614476565b6134708b8b613ae3565b996134858162ffffff60055460381c16613a6e565b906134908282612c01565b9081106101c0576134a190916147b4565b6131b8565b91909b506020823d6020116134d6575b816134c3602093836126cb565b810103126101c05790519a61346661345b565b3d91506134b6565b604091949392606082019582526134f481610c54565b60208201520152565b80549060ff821661350d81610c54565b600381036136c3575063ffffffff613532826002600161353c95015491015490614b91565b9260081c16613e4d565b9063ffffffff6012541663ffffffff831610156133cd5761356b8263ffffffff165f52601160205260405f2090565b906001600160601b038254166001600160601b038216115f146135ae5781546001600160601b0319166001600160601b039091161790556135ab90614822565b50565b6001600160601b03166001600160601b03198254161790559063ffffffff60125416915b8063ffffffff811663fffffffe8260011b166135f66135f082613e65565b91613e7d565b9063ffffffff8116878110613684575b505063ffffffff811686811061363f575b505063ffffffff83161461363857816136339160086011614a59565b6135d2565b9192505050565b5f5260116020526001600160601b0360405f20541663ffffffff85165f5260116020526001600160601b0360405f2054161061367c575b80613617565b92505f613676565b5f5260116020526001600160601b0360405f205416835f5260116020526001600160601b0360405f205416106136bb575b80613606565b93505f6136b5565b905061152a9150610c54565b814710613750575f918291829182916001600160a01b03165af13d15613748573d9067ffffffffffffffff82116126705760405191613718601f8201601f1916602001846126cb565b82523d5f602084013e5b1561372a5750565b80511561373957805190602001fd5b63d6bda27560e01b5f5260045ffd5b606090613722565b504763cf47918160e01b5f5260045260245260445ffd5b5f546040516312a9293f60e21b815290602090829060049082906001600160a01b03165afa908115611ffe575f9161379d575090565b6137b6915060203d602011612907576128f981836126cb565b90565b91906137d9604051916137cb83612693565b5f8352829451905190613ae3565b9052565b91906040516137eb81612693565b5f81526137fc819451925183612c01565b9182106101c05752565b8115613810570490565b634e487b7160e01b5f52601260045260245ffd5b5f60405161383181612693565b52516001600160601b0319810190811161101357600160601b81101561068e57600160601b91829060038110156138a8578091925b5f935b8385036138825750505050506040519061275882612693565b6001906138988287989697018489870302613806565b0260601c80940195019392613869565b60039192613866565b5f5460405163ecc456fd60e01b815290602090829060049082906001600160a01b03165afa908115611ffe575f916138fe575b506001600160a01b03165f90815260086020526040902090565b613917915060203d602011612907576128f981836126cb565b5f6138e4565b5f905f1982820990811561396457600160601b82101561395257600160601b9083900990811515900360a01b910360601c1790565b634e487b71835260116020526024601cfd5b5050505f90565b5f91905f1982820991808202938480851094039380850394146139c057600160601b8410156139ae5750600160601b910990828211900360a01b910360601c1790565b634e487b71905260116020526024601cfd5b5050505060601c90565b5f1981600160601b09918160601b91828085109403938085039414613a625783821115613a4a578190600160601b09815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b50634e487b715f52156003026011186020526024601cfd5b50906137b69250613806565b9091905f905f198482099084810292838084109303928084039314613ad55782620f424011156139ae57507fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c261399394620f4240910990828211900360fa1b910360061c170290565b505050620f42409192500490565b5f19600160601b8209918160601b91828085109403938085039414613a625783821115613a4a578190600160601b9009815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b5f1981600160301b09918160301b91828085109403938085039414613a625783821115613a4a578190600160301b09815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b604051613bf0816126af565b5f81525f602082015263ffffffff60125416613c17575b602001516001600160a01b031690565b505f805260116020526040517f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b7613c4d826126af565b546001600160601b038116825260601c6020820152613c07565b9081526001600160a01b039182166020820152911660408201526060810191909152608081019190915260a00190565b9160209192613ca4614440565b9015613d15576002546003546001600160a01b03908116939116905f905b613cd687856001600160a01b03861661452d565b613cf782604051988997889687956365a8c7a960e11b875260048701613c67565b03926001600160a01b03165af1908115611ffe575f91612bd2575090565b6003546002546001600160a01b03908116939116905f90613cc2565b9190602091613d3e614440565b6003546002546001600160a01b039081169492939116915f9190613cf790613d6789878761452d565b6040516365a8c7a960e11b81529889978896879560048701613c67565b9190602091613d91614440565b6002546003546001600160a01b039081169492939116915f9190613cf790613d6789878761452d565b92919092613dd5575b61152a926001600160a01b0316614624565b613ddd613767565b6001600160a01b038085169491168414613df8579250613dc3565b50823b156101c0575f8093602460405180968193632e1a7d4d60e01b83528760048401525af1928315611ffe5761152a93613e3d575b506001600160a01b03166136cf565b5f613e47916126cb565b5f613e2e565b63ffffffff5f199116019063ffffffff821161101357565b63ffffffff60019116019063ffffffff821161101357565b63ffffffff60029116019063ffffffff821161101357565b9064ffffffff0082549160081b169064ffffffff001916179055565b82341015613f09575b6040516323b872dd60e01b60208201526001600160a01b03909216602483015230604483015260648083019390935291815261152a91613efb6084836126cb565b6001600160a01b031661490a565b613f11613767565b6001600160a01b0382811691168114613f2a5750613eba565b915050803b156101c0575f90600460405180948193630d0e30db60e41b83525af18015611ffe57613f585750565b5f61152a916126cb565b600d54908115613fca57612545612d3e613f8292612d37856009546145ec565b8181116101c0576001600160801b0391613f9c91906139ca565b60055491169060601b60ff60601b1680821015613fc357505b6001600160801b0316601055565b9050613fb5565b5050600160601b601055565b81811115613ff157613feb6137b69282612934565b906139ca565b50505f1990565b6137b660405161400781612693565b600c54809152600b549061396b565b919060ff8354169261402784610c54565b8315611a365761403684610c54565b60038414610fed5761404784610c54565b600281016002815495145f1461415f575b614068856040516120b581612693565b958615614156576140838762ffffff60055460381c16613a6e565b9461408e8689612934565b9788116101c0576140b2916140a66140ac928a6139ca565b89613d84565b946147b4565b604051946140bf86612693565b600a5486526001614151935f6140f77fe665269e8373d815787a9e98b1f91f51d05d3b4fdd40870d42f4049989bfcac39951896139ca565b9461410485600b54612934565b600b555561411484600954612c01565b60095501614123838254612c01565b905560405194859460018060a01b031697859094939260609260808301968352602083015260408201520152565b0390a2565b50505050505050565b614058565b919060ff83541661417481610c54565b8015611a365761418381610c54565b60028114610fed5760039061419781610c54565b1492600181018054855f1461434a576002830154945b6141b786836145ec565b97881561433f576141cb896141d19361396b565b89613d31565b946141f86141e98762ffffff60055460381c16613a6e565b6141f2816147b4565b87612934565b9586116101c05761420f81604051610c9a81612693565b906040519461421d86612693565b600c54865261422c8389612934565b98888a116101c0575f6142657f2c66db90b5e6703c0411060ed36b935dc40eefbbec5cb21f8bd28709f83030009b6141519951906139ca565b9661427287600954612934565b6009555561428286600b54612c01565b600b55156143265761162e63ffffffff6142c0926142a285600d54612934565b600d55876002820155600160ff198254161780915560081c16613e4d565b60405191825260208201527ff844f661d542f3ab6eddd747fe90ae1a456fdef7e6cec663615c585c198e4f57604060018060a01b03871692a25b60405194859460018060a01b031697859094939260609260808301968352602083015260408201520152565b90506002915001614338838254612c01565b90556142fa565b505050505050505050565b5f946141ad565b6143636122bb600954600d54906145ec565b9081106101c05790565b906001600160601b0382549181199060601b169116179055565b6143926122bb613ff8565b9081106101c0576143ae612545600d54604051610c9a81612693565b9081116101c05790565b516143c3828261396b565b906137b692600160601b9109151590612c01565b91906137d9604051916143e983612693565b5f835282945190519061396b565b919060405161440581612693565b5f8152614416819451925183612934565b9182116101c05752565b61443a9060405161443081612693565b600c5481526143d7565b51600c55565b5f5460405163c31c9c0760e01b815290602090829060049082906001600160a01b03165afa908115611ffe575f9161379d575090565b6040519060205f8184019463095ea7b360e01b865260018060a01b031694856024860152816044860152604485526144af6064866126cb565b84519082855af15f513d82614508575b5050156144cb57505050565b61450361152a936040519063095ea7b360e01b602083015260248201525f6044820152604481526144fd6064826126cb565b8261490a565b61490a565b90915061452557506001600160a01b0381163b15155b5f806144bf565b60011461451e565b60405163095ea7b360e01b60208083019182526001600160a01b0385166024840152604480840196909652948252929390925f9061456c6064866126cb565b84519082855af15f513d826145c7575b50501561458857505050565b60405163095ea7b360e01b60208201526001600160a01b0390931660248401525f604480850191909152835261152a92614503906144fd6064826126cb565b9091506145e457506001600160a01b0381163b15155b5f8061457c565b6001146145dd565b61254561460d6143ae9260405161460281612693565b600a5480915261396b565b9260405161461a81612693565b600e5481526143b8565b60405163a9059cbb60e01b60208201526001600160a01b0392909216602483015260448083019390935291815261152a916145036064836126cb565b63ffffffff601254169063ffffffff811691808310156133cd5761468863ffffffff91613e4d565b16918263ffffffff196012541617601255805f52601160205260405f205460601c5f52600860205260405f2064ffffffff001981541690558083036146d9575b50505f5260116020525f6040812055565b805f5260116020526001600160601b0360405f20541690835f52601160205260405f20815f52601160205260405f20818103614783575b505061473e61471e84613e65565b825f52601160205260405f205460601c5f52600860205260405f20613e95565b5f5260116020526001600160601b0360405f205416115f1461477057614767906008601161488d565b505b5f806146c8565b61477d9060086011614962565b50614769565b816001600160601b03806147ad945416166001600160601b03198354161782555460601c9061436d565b5f80614710565b806147bc5750565b6002545f5460405163331af97960e21b815292916001600160a01b039081169160209185916004918391165afa908115611ffe5761152a935f92614801575b50614624565b61481b91925060203d602011612907576128f981836126cb565b905f6147fb565b63ffffffff811690811561488857637fffffff61483e82613e4d565b60011c1691825f5260116020526001600160601b0360405f205416905f5260116020526001600160601b0360405f205416111561488857816148839160086011614a59565b614822565b905090565b905b63ffffffff831661489f57505090565b9091637fffffff6148af82613e4d565b60011c169063ffffffff82165f52836020526001600160601b0360405f20541663ffffffff82165f52846020526001600160601b0360405f205416111561490357816148fc918486614a59565b919061488f565b9250505090565b905f602091828151910182855af115611ffe575f513d61495957506001600160a01b0381163b155b6149395750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b60011415614932565b600181015463ffffffff1693925b8063fffffffe8160011b166149876135f082613e65565b908763ffffffff821610614a15575b508663ffffffff8216106149d1575b5063ffffffff811663ffffffff8316146149ca57816149c5918585614a59565b614970565b9450505050565b63ffffffff81165f52836020526001600160601b0360405f20541663ffffffff84165f52846020526001600160601b0360405f20541610156149a55791505f6149a5565b63ffffffff81165f52846020526001600160601b0360405f20541663ffffffff84165f52856020526001600160601b0360405f20541610156149965792505f614996565b63ffffffff61152a948185165f5282602052614b5b60405f209560405196614a80886126af565b54956001600160601b0387168852602088019660601c87528484165f52856020528460405f2092614b2060405194614ab7866126af565b54936001600160601b0385168652602086019460601c8552614af8614adb89613e65565b8c516001600160a01b03165f908152602084905260409020613e95565b614b0183613e65565b85516001600160a01b03165f9081526020929092526040909120613e95565b165f908152602087905260409020915182546001600160601b0319166001600160601b0391909116178255516001600160a01b03169061436d565b165f526020526001600160601b038060405f20935116166001600160601b031983541617825560018060a01b039051169061436d565b8015614bc757614ba091613b64565b6001600160601b03811115614bbb57506001600160601b0390565b6001600160601b031690565b50506001600160601b039056fea26469706673582212206916b808b43e1bc1c78e5cc1047a7b2fb3b7c75d44650c0c2f8c46e6f4db594264736f6c634300081c0033