1 tx
6 calls
constructor
constructor(address initOwner, address _escrowImpl)
functions
escrowImpl
viewfunction escrowImpl() view returns (address)
feeHandler
viewfunction feeHandler() view returns (address)
getEscrows
viewfunction getEscrows(uint256 from, uint256 numElements) view returns (address[] _escrowArray)
getExerciseFee
viewfunction getExerciseFee() view returns (uint96 exerciseFee)
getMatchFees
viewfunction getMatchFees(address distPartner, uint128 optionPremium, tuple optionInfo) view returns (uint128 matchFeeProtocol, uint128 matchFeeDistPartner)
getMintFees
viewfunction getMintFees(address distPartner, uint128 notional) view returns (uint256 mintFeeProtocol, uint256 mintFeeDistPartner)
isEscrow
viewfunction isEscrow(address) view returns (bool)
isQuoteUsed
viewfunction isQuoteUsed(bytes32) view returns (bool)
isSwapQuoteUsed
viewfunction isSwapQuoteUsed(bytes32) view returns (bool)
numEscrows
viewfunction numEscrows() view returns (uint256)
owner
viewfunction owner() view returns (address)
previewTakeQuote
viewfunction previewTakeQuote(tuple rfqInitialization, address distPartner) view returns (tuple)
quotesPaused
viewfunction quotesPaused(address) view returns (bool)
bidOnAuction
nonpayablefunction bidOnAuction(address escrow, address optionReceiver, uint256 relBid, uint256 _refSpot, bytes[] _oracleData) returns (tuple preview, address distPartner)
borrow
nonpayablefunction borrow(address escrow, address underlyingReceiver, uint128 borrowUnderlyingAmount)
createAuction
nonpayablefunction createAuction(address escrowOwner, tuple auctionInitialization, address distPartner)
emitTransferEvent
nonpayablefunction emitTransferEvent(address from, address to, uint256 value)
emitTransferOwnershipEvent
nonpayablefunction emitTransferOwnershipEvent(address oldOwner, address newOwner)
exercise
nonpayablefunction exercise(address escrow, address underlyingReceiver, uint256 underlyingAmount, bool payInSettlementToken, bytes[] oracleData)
mintOption
nonpayablefunction mintOption(address optionReceiver, address escrowOwner, tuple optionInfo, tuple optionNaming, address distPartner)
renounceOwnership
nonpayablefunction renounceOwnership()
repay
nonpayablefunction repay(address escrow, address collateralReceiver, uint128 repayUnderlyingAmount)
setFeeHandler
nonpayablefunction setFeeHandler(address newFeeHandler)
takeQuote
nonpayablefunction takeQuote(address escrowOwner, tuple rfqInitialization, address distPartner)
takeSwapQuote
nonpayablefunction takeSwapQuote(address to, tuple swapQuote)
togglePauseQuotes
nonpayablefunction togglePauseQuotes()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdraw
nonpayablefunction withdraw(address escrow, address to, address token, uint256 amount)
withdrawFromEscrowAndCreateAuction
nonpayablefunction withdrawFromEscrowAndCreateAuction(address oldEscrow, address escrowOwner, tuple auctionInitialization, address distPartner)
events
BidOnAuction
event BidOnAuction(address indexed sender, address indexed escrow, address optionReceiver, (uint8 status, address settlementToken, address underlyingToken, uint128 strike, uint48 expiry, uint48 earliestExercise, uint128 premium, address premiumToken, uint256 oracleSpotPrice, uint64 currAsk, uint128 matchFeeProtocol, uint128 matchFeeDistPartner) bidPreview, address indexed distPartner)
Borrow
event Borrow(address indexed sender, address indexed escrow, address underlyingReceiver, uint128 underlyingAmount, uint256 collateralAmount, uint256 collateralFeeAmount)
CreateAuction
event CreateAuction(address indexed escrowOwner, address indexed escrow, (address underlyingToken, address settlementToken, uint128 notional, (uint128 relStrike, uint48 tenor, uint48 earliestExerciseTenor, uint32 decayStartTime, uint32 decayDuration, uint64 relPremiumStart, uint64 relPremiumFloor, uint128 minSpot, uint128 maxSpot) auctionParams, (uint64 borrowCap, address oracle, bool premiumTokenIsUnderlying, bool votingDelegationAllowed, address allowedDelegateRegistry) advancedSettings) auctionInitialization, uint96 exerciseFee, address distPartner)
Exercise
event Exercise(address indexed sender, address indexed escrow, address underlyingReceiver, uint256 underlyingAmount, uint256 exerciseFeeAmount)
MintOption
event MintOption(address indexed sender, address indexed optionReceiver, address escrowOwner, (address underlyingToken, uint48 expiry, address settlementToken, uint48 earliestExercise, uint128 notional, uint128 strike, (uint64 borrowCap, address oracle, bool premiumTokenIsUnderlying, bool votingDelegationAllowed, address allowedDelegateRegistry) advancedSettings) optionInfo, uint256 mintFeeProtocol, uint256 mintFeeDistPartner, address indexed distPartner)
NewFeeHandler
event NewFeeHandler(address oldFeeHandler, address newFeeHandler)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PauseQuotes
event PauseQuotes(address indexed quoter, bool isPaused)
Repay
event Repay(address indexed sender, address indexed escrow, address collateralReceiver, uint128 repayUnderlyingAmount, uint256 unlockedCollateralAmount)
TakeQuote
event TakeQuote(address indexed sender, address escrowOwner, address indexed escrow, ((address underlyingToken, uint48 expiry, address settlementToken, uint48 earliestExercise, uint128 notional, uint128 strike, (uint64 borrowCap, address oracle, bool premiumTokenIsUnderlying, bool votingDelegationAllowed, address allowedDelegateRegistry) advancedSettings) optionInfo, (uint128 premium, uint256 validUntil, bytes signature, address eip1271Maker) rfqQuote) rfqInitialization, (uint8 status, bytes32 msgHash, address quoter, uint128 premium, address premiumToken, uint128 matchFeeProtocol, uint128 matchFeeDistPartner) takeQuotePreview, uint96 exerciseFee, address indexed distPartner)
TakeSwapQuote
event TakeSwapQuote(address indexed sender, address indexed to, address indexed maker, (address takerGiveToken, uint256 takerGiveAmount, address makerGiveToken, uint256 makerGiveAmount, uint256 validUntil, bytes signature, address eip1271Maker) swapQuote)
Transfer
event Transfer(address indexed token, address indexed from, address indexed to, uint256 value)
TransferOwnership
event TransferOwnership(address indexed escrow, address indexed oldOwner, address indexed newOwner)
Withdraw
event Withdraw(address indexed sender, address indexed escrow, address to, address indexed token, uint256 amount)
WithdrawFromEscrowAndCreateAuction
event WithdrawFromEscrowAndCreateAuction(address indexed escrowOwner, address indexed oldEscrow, address indexed newEscrow, (address underlyingToken, address settlementToken, uint128 notional, (uint128 relStrike, uint48 tenor, uint48 earliestExerciseTenor, uint32 decayStartTime, uint32 decayDuration, uint64 relPremiumStart, uint64 relPremiumFloor, uint128 minSpot, uint128 maxSpot) auctionParams, (uint64 borrowCap, address oracle, bool premiumTokenIsUnderlying, bool votingDelegationAllowed, address allowedDelegateRegistry) advancedSettings) auctionInitialization)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
ERC1167FailedCreateClone
error ERC1167FailedCreateClone()
FailedInnerCall
error FailedInnerCall()
FeeHandlerAlreadySet
error FeeHandlerAlreadySet()
InvalidAddress
error InvalidAddress()
InvalidBorrowCap
error InvalidBorrowCap()
InvalidEarliestExercise
error InvalidEarliestExercise()
InvalidEIP1271Signature
error InvalidEIP1271Signature()
InvalidExpiry
error InvalidExpiry()
InvalidGetEscrowsQuery
error InvalidGetEscrowsQuery()
InvalidNotional
error InvalidNotional()
InvalidSender
error InvalidSender()
InvalidTakeQuote
error InvalidTakeQuote()
InvalidTokenPair
error InvalidTokenPair()
NotAnEscrow
error NotAnEscrow()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SwapQuoteAlreadyUsed
error SwapQuoteAlreadyUsed()
SwapQuoteExpired
error SwapQuoteExpired()
SwapQuotePaused
error SwapQuotePaused()
creation bytecode
0x60a06040523480156200001157600080fd5b506040516200493c3803806200493c833981016040819052620000349162000118565b816001600160a01b0381166200006457604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6200006f81620000ab565b506001600160a01b038116620000985760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b03166080525062000150565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200011357600080fd5b919050565b600080604083850312156200012c57600080fd5b6200013783620000fb565b91506200014760208401620000fb565b90509250929050565b6080516147c962000173600039600081816104b70152612b6a01526147c96000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806377c05dec11610104578063b166a09f116100a2578063ca41363e11610071578063ca41363e14610479578063f2fde38b1461048c578063f9361aef1461049f578063fda25df4146104b257600080fd5b8063b166a09f146103fd578063b35c845e14610420578063b4df001e14610441578063c18abe0d1461046657600080fd5b80638da5cb5b116100de5780638da5cb5b146103a357806393594d7f146103b4578063a597ec1f146103d7578063a6d49dca146103ea57600080fd5b806377c05dec146103455780637d431c7c146103685780638c35dc4d1461037b57600080fd5b806347e5dc20116101715780635920d5771161014b5780635920d577146102f75780635a696cb81461030a578063715018a61461032a578063733140771461033257600080fd5b806347e5dc20146102915780634dcfbba4146102b15780635468fe95146102c457600080fd5b8063369bd2fe116101ad578063369bd2fe146102185780633849153b146102205780633c93adee146102535780633df8f62e1461027e57600080fd5b8063065d4a6d146101d45780630b620b81146101e957806318e2a560146101fc575b600080fd5b6101e76101e2366004613217565b6104d9565b005b6101e76101f736600461326e565b610805565b61020560025481565b6040519081526020015b60405180910390f35b6101e761099d565b61023361022e3660046132fd565b6109f8565b604080516001600160801b0393841681529290911660208301520161020f565b600154610266906001600160a01b031681565b6040516001600160a01b03909116815260200161020f565b6101e761028c366004613359565b610b45565b6102a461029f3660046133bd565b610e5b565b60405161020f91906133df565b6101e76102bf36600461343f565b610f71565b6102e76102d236600461349c565b60056020526000908152604090205460ff1681565b604051901515815260200161020f565b6101e76103053660046134b5565b6112e5565b61031d6103183660046134f6565b611407565b60405161020f91906135e1565b6101e7611826565b6101e76103403660046135ef565b61183a565b6102e76103533660046135ef565b60066020526000908152604090205460ff1681565b6101e761037636600461360c565b6118f7565b61038e61038936600461364c565b611af6565b6040805192835260208301919091520161020f565b6000546001600160a01b0316610266565b6102e76103c236600461349c565b60046020526000908152604090205460ff1681565b6101e76103e536600461360c565b611c42565b6101e76103f836600461367a565b611d9c565b6102e761040b3660046135ef565b60036020526000908152604090205460ff1681565b61043361042e366004613822565b611e1b565b60405161020f9291906139bf565b61044961215d565b6040516bffffffffffffffffffffffff909116815260200161020f565b6101e76104743660046139e5565b61220e565b6101e7610487366004613a21565b61228d565b6101e761049a3660046135ef565b6124c1565b6101e76104ad366004613a87565b61251d565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b8060800135421115610517576040517f5c32099600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60004661052760208401846135ef565b602084013561053c60608601604087016135ef565b6040805160208101959095526001600160a01b03938416908501526060808501929092529091166080808401919091529084013560a083015283013560c082015260e00160408051601f19818403018152919052805160209091012090506000806105ad60e0850160c086016135ef565b6001600160a01b03160361063c577f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c839052603c9020610635906105fb60a0860186613b18565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061292192505050565b90506106b1565b600061066461065160e0860160c087016135ef565b8461065f60a0880188613b18565b61294b565b90508061069d576040517f5d52cbe300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106ad60e0850160c086016135ef565b9150505b6001600160a01b03811660009081526006602052604090205460ff1615610704576040517f6cff8dd500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602052604090205460ff161561074d576040517f9b1475af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600560209081526040909120805460ff191660011790556107919033908390860180359061078090886135ef565b6001600160a01b0316929190612a7e565b6107aa81856060860180359061078090604089016135ef565b806001600160a01b0316846001600160a01b0316336001600160a01b03167fc09ea7f7280174a395e9010b2e05ab1888cd36f5ad99b4429478af303ce78c3d866040516107f79190613bd5565b60405180910390a450505050565b6001600160a01b03841660009081526003602052604090205460ff1661083e576040516340d8c4db60e11b815260040160405180910390fd5b836001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561087c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a09190613c7e565b6001600160a01b0316336001600160a01b0316146108d157604051636edaef2f60e11b815260040160405180910390fd5b6040517fd0e8dcff0000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015283811660248301526044820183905285169063d0e8dcff90606401600060405180830381600087803b15801561093c57600080fd5b505af1158015610950573d6000803e3d6000fd5b5050604080516001600160a01b0387811682526020820186905280871694508816925033917fe826ecb5c03d4897f8ab426ee94064e06179dff39cd9fdd0776904cd935c95d891016107f7565b33600081815260066020908152604091829020805460ff8116801560ff199092168217909255925192835292917fdcbed411faf93d1cef89c9e1923cd8e047c29e2d465b976b24b0b22c054b340e910160405180910390a250565b60015460009081906001600160a01b03168015610b3c57600080826001600160a01b031663dd07ab1c8989896040518463ffffffff1660e01b8152600401610a4293929190613e04565b6040805180830381865afa158015610a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a829190613e31565b909250905060006702c68af0bb1400008311610a9e5782610aa8565b6702c68af0bb1400005b90506000670de0b6b3a76400008311610ac15782610acb565b670de0b6b3a76400005b90506000670de0b6b3a7640000610aeb846001600160801b038d16613e6b565b610af59190613e82565b9050610b1c670de0b6b3a7640000610b0d8484613e6b565b610b179190613e82565b612b00565b9650610b34610b176001600160801b03891683613ea4565b975050505050505b50935093915050565b6000610b518383611407565b9050600481516005811115610b6857610b6861353d565b14610b9f576040517fe30578ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808201516000908152600490915260408120805460ff1916600117905580610bc7612b51565b915091506000610bd561215d565b60408086015190517f537952080000000000000000000000000000000000000000000000000000000081529192506001600160a01b03851691635379520891610c2a9130918c9187908d908a90600401613f60565b600060405180830381600087803b158015610c4457600080fd5b505af1158015610c58573d6000803e3d6000fd5b50610c8a9250339150859050610c7460a08a0160808b01613fbb565b6001600160801b031661078060208b018b6135ef565b610cef8460400151338660a001518760c001518a806101600190610cae9190613fd8565b610cbc906020810190613fbb565b610cc69190613ff8565b610cd09190613ff8565b60808801516001600160a01b03169291906001600160801b0316612a7e565b60c08401516001600160801b031615610d3757610d378460400151868660c001516001600160801b031687608001516001600160a01b0316612a7e909392919063ffffffff16565b60a08401516001600160801b031615610df757600154604085015160a086015160808701516001600160a01b0393841693610d7f9391169184906001600160801b0316612a7e565b608085015160a08601516040516358c0528f60e01b81526001600160a01b0392831660048201526001600160801b039091166024820152908216906358c0528f90604401600060405180830381600087803b158015610ddd57600080fd5b505af1158015610df1573d6000803e3d6000fd5b50505050505b846001600160a01b0316836001600160a01b0316336001600160a01b03167f2603b553dc2ab4d1a644bb67a527695755c7c1adc290f4718813e649cc6c71888a8a8987604051610e4a949392919061401f565b60405180910390a450505050505050565b600754606090821580610e76575080610e748486614070565b115b15610ead576040517f6269996b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8267ffffffffffffffff811115610ec657610ec66136bb565b604051908082528060200260200182016040528015610eef578160200160208202803683370190505b50915060005b83811015610f69576007610f098287614070565b81548110610f1957610f19614083565b9060005260206000200160009054906101000a90046001600160a01b0316838281518110610f4957610f49614083565b6001600160a01b0390921660209283029190910190910152600101610ef5565b505092915050565b6001600160a01b03841660009081526003602052604090205460ff16610faa576040516340d8c4db60e11b815260040160405180910390fd5b836001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fe8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100c9190613c7e565b6001600160a01b0316336001600160a01b03161461103d57604051636edaef2f60e11b815260040160405180910390fd5b600080611048612b51565b91509150816001600160a01b03166323c8affa308761106561215d565b8886896040518763ffffffff1660e01b8152600401611089969594939291906141ec565b600060405180830381600087803b1580156110a357600080fd5b505af11580156110b7573d6000803e3d6000fd5b50600092506110cc91505060208601866135ef565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015291909116906370a0823190602401602060405180830381865afa15801561112d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111519190614244565b90506000816111666060880160408901613fbb565b6001600160801b0316101561117b573361117d565b835b90506000826111926060890160408a01613fbb565b6001600160801b031610156111bf576111b16060880160408901613fbb565b6001600160801b03166111e3565b826111d06060890160408a01613fbb565b6001600160801b03166111e39190613ea4565b90506001600160a01b03891663d0e8dcff8361120260208b018b6135ef565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260448101869052606401600060405180830381600087803b15801561125157600080fd5b505af1158015611265573d6000803e3d6000fd5b5050505060008111156112855761128533868361078060208c018c6135ef565b846001600160a01b0316896001600160a01b0316896001600160a01b03167f957cced42c73d5e844e49787802497a4b4e27b8a7f239e76e7c35133f4a1ada08a6040516112d2919061425d565b60405180910390a4505050505050505050565b6000806112f0612b51565b9150915060006112fe61215d565b6040517f23c8affa0000000000000000000000000000000000000000000000000000000081529091506001600160a01b038416906323c8affa906113509030908a9086908b9089908c906004016141ec565b600060405180830381600087803b15801561136a57600080fd5b505af115801561137e573d6000803e3d6000fd5b505050506113b0338487604001602081019061139a9190613fbb565b6001600160801b031661078060208a018a6135ef565b826001600160a01b0316866001600160a01b03167f081c9ad95e93f5f9d217a45f3b87fd8f86ab622929ac7342f8eafacbd2c4ad3e8784886040516113f79392919061426c565b60405180910390a3505050505050565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101829052904684611450610160820182613fd8565b61145e906020810190613fbb565b61146c610160880188613fd8565b6020013560405160200161148394939291906142a8565b60408051601f19818403018152919052805160209091012090506000806114ae610160870187613fd8565b6114bf9060808101906060016135ef565b6001600160a01b031603611523577f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c839052603c902061151c9061150e610160880188613fd8565b6105fb906040810190613b18565b90506115a4565b6000611564611536610160880188613fd8565b6115479060808101906060016135ef565b846115566101608a018a613fd8565b61065f906040810190613b18565b9050806115815761157760058484612c34565b9350505050611820565b61158f610160870187613fd8565b6115a09060808101906060016135ef565b9150505b6115b460608601604087016135ef565b6001600160a01b03166115ca60208701876135ef565b6001600160a01b031614806115f557506115ea60a0860160808701613fbb565b6001600160801b0316155b80611616575061160b60c0860160a08701613fbb565b6001600160801b0316155b8061165b575061162c60808601606087016142da565b61163990620151806142f7565b65ffffffffffff1661165160408701602088016142da565b65ffffffffffff16105b806116865750670de0b6b3a764000061167a60e0870160c08801614316565b67ffffffffffffffff16115b156116a05761169760018383612c34565b92505050611820565b6116ae610160860186613fd8565b602001354211806116d557506116ca60408601602087016142da565b65ffffffffffff1642115b156116e65761169760008383612c34565b60008281526004602052604090205460ff16156117095761169760028383612c34565b6001600160a01b03811660009081526006602052604090205460ff16156117365761169760038383612c34565b60008061175f8661174b6101608a018a613fd8565b611759906020810190613fbb565b896109f8565b6040805160e0810190915291935091508060048152602081018690526001600160a01b038516604082015260600161179b6101608a018a613fd8565b6117a9906020810190613fbb565b6001600160801b031681526020016117c96101208a016101008b01614333565b6117e2576117dd60608a0160408b016135ef565b6117ef565b6117ef60208a018a6135ef565b6001600160a01b03168152602001836001600160801b03168152602001826001600160801b03168152509450505050505b92915050565b61182e612cc9565b6118386000612d0f565b565b611842612cc9565b6001546001600160a01b03908116908216810361188b576040517fc927103e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384811691821790925560408051928416835260208301919091527f9223780305f6b8602877f20db7cc3a6770c99586cb92db707a89375807e12337910160405180910390a15050565b6001600160a01b03831660009081526003602052604090205460ff16611930576040516340d8c4db60e11b815260040160405180910390fd5b6040517f67ff93a60000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0383811660248301526001600160801b038316604483015260009182918291908716906367ff93a6906064016060604051808303816000875af11580156119ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119d29190614350565b919450925090506119ee6001600160a01b038416338885612a7e565b6001546001600160a01b03168015801590611a095750600082115b15611a8d57600154611a2a906001600160a01b038681169133911685612a7e565b6040516358c0528f60e01b81526001600160a01b038581166004830152602482018490528216906358c0528f90604401600060405180830381600087803b158015611a7457600080fd5b505af1158015611a88573d6000803e3d6000fd5b505050505b604080516001600160a01b0388811682526001600160801b0388166020830152918101859052606081018490529088169033907f0f6b57650350b4f610474b25b5969726ade85bd32d17cf9de29015bd617cc9fd9060800160405180910390a350505050505050565b60015460009081906001600160a01b03168015611c3a576040517f7eda99570000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526000918291841690637eda9957906024016040805180830381865afa158015611b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b949190613e31565b909250905060006702c68af0bb1400008311611bb05782611bba565b6702c68af0bb1400005b90506000670de0b6b3a76400008311611bd35782611bdd565b670de0b6b3a76400005b90506000670de0b6b3a7640000611bfd846001600160801b038c16613e6b565b611c079190613e82565b9050670de0b6b3a7640000611c1c8383613e6b565b611c269190613e82565b9650611c328782613ea4565b975050505050505b509250929050565b6001600160a01b03831660009081526003602052604090205460ff16611c7b576040516340d8c4db60e11b815260040160405180910390fd5b6040517f9076e9040000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0383811660248301526001600160801b03831660448301526000918291861690639076e9049060640160408051808303816000875af1158015611cf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d199190614387565b9092509050611d3c6001600160a01b03831633876001600160801b038716612a7e565b604080516001600160a01b0386811682526001600160801b03861660208301529181018390529086169081907ff6c7cbea93a9318a02e83b81b74aa67de77eaf4585af0f3118f30108f513849a9060600160405180910390a35050505050565b3360008181526003602052604090205460ff16611dcc576040516340d8c4db60e11b815260040160405180910390fd5b826001600160a01b0316846001600160a01b0316826001600160a01b03167fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f856040516107f791815260200190565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081018290526101608101919091526001600160a01b03861660009081526003602052604081205460ff16611eb5576040516340d8c4db60e11b815260040160405180910390fd5b6040517fa3620ec40000000000000000000000000000000000000000000000000000000081526001600160a01b0388169063a3620ec490611f009088908a9089908990600401614449565b6101a0604051808303816000875af1158015611f20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4491906144a7565b8092508193505050611ff633886001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb29190613c7e565b8461014001518561016001518660c00151611fcd9190613ff8565b611fd79190613ff8565b60e08601516001600160a01b03169291906001600160801b0316612a7e565b6101608201516001600160801b03161561203c5761203c33828461016001516001600160801b03168560e001516001600160a01b0316612a7e909392919063ffffffff16565b6101408201516001600160801b0316156120fc5760015461014083015160e08401516001600160a01b039283169261208392911690339084906001600160801b0316612a7e565b60e08301516101408401516040516358c0528f60e01b81526001600160a01b0392831660048201526001600160801b039091166024820152908216906358c0528f90604401600060405180830381600087803b1580156120e257600080fd5b505af11580156120f6573d6000803e3d6000fd5b50505050505b806001600160a01b0316876001600160a01b0316336001600160a01b03167f7ebea06143b46f005fced4223cf841b88854a21cb67516c71838990a9f56f8e8898660405161214b9291906145b3565b60405180910390a49550959350505050565b6001546000906001600160a01b03168061217957600091505090565b806001600160a01b031663d1c699aa6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121db91906145d1565b91506611c37937e080006bffffffffffffffffffffffff8316116121ff5781612208565b6611c37937e080005b91505090565b3360008181526003602052604090205460ff1661223e576040516340d8c4db60e11b815260040160405180910390fd5b816001600160a01b0316836001600160a01b0316826001600160a01b03167f6954f1cdad46901994f29d9b1f78744c873c527bad04d294b4954cc8caf367da60405160405180910390a4505050565b6001600160a01b03851660009081526003602052604090205460ff166122c6576040516340d8c4db60e11b815260040160405180910390fd5b6000806000876001600160a01b03166331cd4e6233898989896040518663ffffffff1660e01b81526004016122ff9594939291906145ff565b6060604051808303816000875af115801561231e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123429190614350565b92509250925084156123c6576123c633896001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612390573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b49190613c7e565b6001600160a01b038616919085612a7e565b6001546001600160a01b031680158015906123e15750600082115b1561246557600154612402906001600160a01b038681169133911685612a7e565b6040516358c0528f60e01b81526001600160a01b038581166004830152602482018490528216906358c0528f90604401600060405180830381600087803b15801561244c57600080fd5b505af1158015612460573d6000803e3d6000fd5b505050505b604080516001600160a01b038a81168252602082018a9052918101849052908a169033907f5ee515779e0ca72dbfbc93b30480bbecf67910142933d89d3d89be8e28a9c8509060600160405180910390a3505050505050505050565b6124c9612cc9565b6001600160a01b038116612511576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b61251a81612d0f565b50565b61252d60608401604085016135ef565b6001600160a01b031661254360208501856135ef565b6001600160a01b031603612583576040517f8686656d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61259360a0840160808501613fbb565b6001600160801b03166000036125d5576040517f950466ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6125e560408401602085016142da565b65ffffffffffff16421115612626576040517fd36c850000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61263660808401606085016142da565b61264390620151806142f7565b65ffffffffffff1661265b60408501602086016142da565b65ffffffffffff16101561269b576040517f1e617b1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b670de0b6b3a76400006126b460e0850160c08601614316565b67ffffffffffffffff1611156126f6576040517fa7e9b5b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612700612b51565b50905060008061271a8461038960a0890160808a01613fbb565b9150915060008083118061272e5750600082115b612738578861273a565b305b9050836001600160a01b031663d951124d308a8461275661215d565b8c8c6040518763ffffffff1660e01b815260040161277996959493929190614644565b600060405180830381600087803b15801561279357600080fd5b505af11580156127a7573d6000803e3d6000fd5b505050506127d933858960800160208101906127c39190613fbb565b6001600160801b031661078060208c018c6135ef565b306001600160a01b038216036128ce5761282d8983856127ff60a08c0160808d01613fbb565b6001600160801b03166128129190613ea4565b61281c9190613ea4565b6001600160a01b0387169190612d6c565b8115612847576128476001600160a01b0385168684612d6c565b82156128ce57600154612867906001600160a01b03868116911685612d6c565b6001546040516358c0528f60e01b81526001600160a01b03868116600483015260248201869052909116906358c0528f90604401600060405180830381600087803b1580156128b557600080fd5b505af11580156128c9573d6000803e3d6000fd5b505050505b846001600160a01b0316896001600160a01b0316336001600160a01b03167f2e8d3d935843ef13282538bbbb45c3c49faa9797fe651d3fcb327f436a91116f8b8b88886040516112d294939291906146e5565b6000806000806129318686612da2565b9250925092506129418282612def565b5090949350505050565b6000806000866001600160a01b0316631626ba7e60e01b87878760405160240161297793929190614717565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b03199094169390931790925290516129ca919061473a565b600060405180830381855afa9150503d8060008114612a05576040519150601f19603f3d011682016040523d82523d6000602084013e612a0a565b606091505b5091509150818015612a1d575080516020145b15612a6f57600081806020019051810190612a38919061474c565b6001600160e01b0319167f1626ba7e00000000000000000000000000000000000000000000000000000000149350612a7692505050565b6000925050505b949350505050565b6040516001600160a01b038481166024830152838116604483015260648201839052612afa9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612ef7565b50505050565b60006001600160801b03821115612b4d576040517f6dfcc6500000000000000000000000000000000000000000000000000000000081526080600482015260248101839052604401612508565b5090565b6000806002546001612b639190614070565b9050612bb77f000000000000000000000000000000000000000000000000000000000000000082604051602001612b9c91815260200190565b60405160208183030381529060405280519060200120612f73565b60028290556001600160a01b0381166000818152600360205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801805473ffffffffffffffffffffffffffffffffffffffff1916909117905592909150565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091526040518060e00160405280856005811115612c8a57612c8a61353d565b8152602081018590526001600160a01b03841660408201526000606082018190526080820181905260a0820181905260c09091015290505b9392505050565b6000546001600160a01b03163314611838576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401612508565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040516001600160a01b03838116602483015260448201839052612d9d91859182169063a9059cbb90606401612ab3565b505050565b60008060008351604103612ddc5760208401516040850151606086015160001a612dce88828585612ffa565b955095509550505050612de8565b50508151600091506002905b9250925092565b6000826003811115612e0357612e0361353d565b03612e0c575050565b6001826003811115612e2057612e2061353d565b03612e57576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115612e6b57612e6b61353d565b03612ea5576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401612508565b6003826003811115612eb957612eb961353d565b03612ef3576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401612508565b5050565b6000612f0c6001600160a01b038416836130c9565b90508051600014158015612f31575080806020019051810190612f2f9190614776565b155b15612d9d576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401612508565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b038116611820576040517fc2f868f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561303557506000915060039050826130bf565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613089573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166130b5575060009250600191508290506130bf565b9250600091508190505b9450945094915050565b6060612cc28383600084600080856001600160a01b031684866040516130ef919061473a565b60006040518083038185875af1925050503d806000811461312c576040519150601f19603f3d011682016040523d82523d6000602084013e613131565b606091505b509150915061314186838361314b565b9695505050505050565b6060826131605761315b826131c0565b612cc2565b815115801561317757506001600160a01b0384163b155b156131b9576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401612508565b5080612cc2565b8051156131d05780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116811461251a57600080fd5b6000806040838503121561322a57600080fd5b823561323581613202565b9150602083013567ffffffffffffffff81111561325157600080fd5b830160e0818603121561326357600080fd5b809150509250929050565b6000806000806080858703121561328457600080fd5b843561328f81613202565b9350602085013561329f81613202565b925060408501356132af81613202565b9396929550929360600135925050565b6001600160801b038116811461251a57600080fd5b80356132df816132bf565b919050565b600061016082840312156132f757600080fd5b50919050565b60008060006101a0848603121561331357600080fd5b833561331e81613202565b9250602084013561332e816132bf565b915061333d85604086016132e4565b90509250925092565b600061018082840312156132f757600080fd5b60008060006060848603121561336e57600080fd5b833561337981613202565b9250602084013567ffffffffffffffff81111561339557600080fd5b6133a186828701613346565b92505060408401356133b281613202565b809150509250925092565b600080604083850312156133d057600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b818110156134205783516001600160a01b0316835292840192918401916001016133fb565b50909695505050505050565b600061022082840312156132f757600080fd5b600080600080610280858703121561345657600080fd5b843561346181613202565b9350602085013561347181613202565b9250613480866040870161342c565b915061026085013561349181613202565b939692955090935050565b6000602082840312156134ae57600080fd5b5035919050565b600080600061026084860312156134cb57600080fd5b83356134d681613202565b92506134e5856020860161342c565b91506102408401356133b281613202565b6000806040838503121561350957600080fd5b823567ffffffffffffffff81111561352057600080fd5b61352c85828601613346565b925050602083013561326381613202565b634e487b7160e01b600052602160045260246000fd5b6006811061251a57634e487b7160e01b600052602160045260246000fd5b805161357c81613553565b808352506020810151602083015260408101516001600160a01b038082166040850152606083015191506001600160801b0380831660608601528160808501511660808601528060a08501511660a08601528060c08501511660c08601525050505050565b60e081016118208284613571565b60006020828403121561360157600080fd5b8135612cc281613202565b60008060006060848603121561362157600080fd5b833561362c81613202565b9250602084013561363c81613202565b915060408401356133b2816132bf565b6000806040838503121561365f57600080fd5b823561366a81613202565b91506020830135613263816132bf565b60008060006060848603121561368f57600080fd5b833561369a81613202565b925060208401356136aa81613202565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051610180810167ffffffffffffffff811182821017156136f5576136f56136bb565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715613724576137246136bb565b604052919050565b6000601f83601f84011261373f57600080fd5b8235602067ffffffffffffffff8083111561375c5761375c6136bb565b8260051b61376b8382016136fb565b938452868101830193838101908986111561378557600080fd5b84890192505b85831015613815578235848111156137a35760008081fd5b8901603f81018b136137b55760008081fd5b858101356040868211156137cb576137cb6136bb565b6137dc828b01601f191689016136fb565b8281528d828486010111156137f15760008081fd5b828285018a830137600092810189019290925250835250918401919084019061378b565b9998505050505050505050565b600080600080600060a0868803121561383a57600080fd5b853561384581613202565b9450602086013561385581613202565b93506040860135925060608601359150608086013567ffffffffffffffff81111561387f57600080fd5b61388b8882890161372c565b9150509295509295909350565b6138a181613553565b9052565b6138b0828251613898565b60208101516138ca60208401826001600160a01b03169052565b5060408101516138e560408401826001600160a01b03169052565b50606081015161390060608401826001600160801b03169052565b50608081015161391a608084018265ffffffffffff169052565b5060a081015161393460a084018265ffffffffffff169052565b5060c081015161394f60c08401826001600160801b03169052565b5060e081015161396a60e08401826001600160a01b03169052565b5061010081810151908301526101208082015167ffffffffffffffff8116828501525050610140818101516001600160801b038116848301525050610160818101516001600160801b03811684830152612afa565b6101a081016139ce82856138a5565b6001600160a01b0383166101808301529392505050565b600080604083850312156139f857600080fd5b8235613a0381613202565b9150602083013561326381613202565b801515811461251a57600080fd5b600080600080600060a08688031215613a3957600080fd5b8535613a4481613202565b94506020860135613a5481613202565b9350604086013592506060860135613a6b81613a13565b9150608086013567ffffffffffffffff81111561387f57600080fd5b60008060008060006101e08688031215613aa057600080fd5b8535613aab81613202565b94506020860135613abb81613202565b9350613aca87604088016132e4565b92506101a086013567ffffffffffffffff811115613ae757600080fd5b860160408189031215613af957600080fd5b91506101c0860135613b0a81613202565b809150509295509295909350565b6000808335601e19843603018112613b2f57600080fd5b83018035915067ffffffffffffffff821115613b4a57600080fd5b602001915036819003821315613b5f57600080fd5b9250929050565b6000808335601e19843603018112613b7d57600080fd5b830160208101925035905067ffffffffffffffff811115613b9d57600080fd5b803603821315613b5f57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260008235613be681613202565b6001600160a01b0380821660208501526020850135604085015260408501359150613c1082613202565b808216606085015260608501356080850152608085013560a0850152613c3960a0860186613b66565b925060e060c0860152613c5161010086018483613bac565b92505060c0850135613c6281613202565b1660e0939093019290925250919050565b80516132df81613202565b600060208284031215613c9057600080fd5b8151612cc281613202565b65ffffffffffff8116811461251a57600080fd5b80356132df81613c9b565b67ffffffffffffffff8116811461251a57600080fd5b80356132df81613cba565b8035613ce681613cba565b67ffffffffffffffff1682526020810135613d0081613202565b6001600160a01b039081166020840152604082013590613d1f82613a13565b9015156040840152606082013590613d3682613a13565b9015156060840152608082013590613d4d82613202565b808216608085015250505050565b8035613d6681613202565b6001600160a01b039081168352602082013590613d8282613c9b565b65ffffffffffff9182166020850152604083013591613da083613202565b9181166040850152606083013591613db783613c9b565b919091166060840152506080810135613dcf816132bf565b6001600160801b03908116608084015260a082013590613dee826132bf565b1660a0830152612ef360c0808401908301613cdb565b6001600160a01b03841681526001600160801b03831660208201526101a08101612a766040830184613d5b565b60008060408385031215613e4457600080fd5b505080516020909101519092909150565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761182057611820613e55565b600082613e9f57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561182057611820613e55565b6000610180613ec68484613d5b565b61016080840135607e19853603018112613edf57600080fd5b9085018290528301803590613ef3826132bf565b6001600160801b0382168387015260208101356101a0870152613f196040820182613b66565b9350915060806101c0870152613f3461020087018484613bac565b9250606001359050613f4581613202565b6001600160a01b0381166101e0860152508091505092915050565b60006001600160a01b03808916835280881660208401528087166040840152506bffffffffffffffffffffffff8516606083015260c06080830152613fa860c0830185613eb7565b90508260a0830152979650505050505050565b600060208284031215613fcd57600080fd5b8135612cc2816132bf565b60008235607e19833603018112613fee57600080fd5b9190910192915050565b6001600160801b0382811682821603908082111561401857614018613e55565b5092915050565b60006101406001600160a01b038716835280602084015261404281840187613eb7565b9150506140526040830185613571565b6bffffffffffffffffffffffff831661012083015295945050505050565b8082018082111561182057611820613e55565b634e487b7160e01b600052603260045260246000fd5b803563ffffffff811681146132df57600080fd5b80356140b881613202565b6001600160a01b0390811683526020820135906140d482613202565b16602083015260408101356140e8816132bf565b6001600160801b039081166040840152606082013590614107826132bf565b16606083015261411960808201613caf565b65ffffffffffff16608083015261413260a08201613caf565b65ffffffffffff1660a083015261414b60c08201614099565b63ffffffff1660c083015261416260e08201614099565b63ffffffff1660e083015261010061417b828201613cd0565b67ffffffffffffffff1690830152610120614197828201613cd0565b67ffffffffffffffff16908301526101406141b38282016132d4565b6001600160801b0316908301526101606141ce8282016132d4565b6001600160801b031690830152610180612d9d818401838301613cdb565b6001600160a01b03878116825286811660208301526bffffffffffffffffffffffff861660408301526102c082019061422860608401876140ad565b846102808401528084166102a084015250979650505050505050565b60006020828403121561425657600080fd5b5051919050565b610220810161182082846140ad565b610260810161427b82866140ad565b6bffffffffffffffffffffffff84166102208301526001600160a01b038316610240830152949350505050565b8481526101c081016142bd6020830186613d5b565b6001600160801b03939093166101808201526101a0015292915050565b6000602082840312156142ec57600080fd5b8135612cc281613c9b565b65ffffffffffff81811683821601908082111561401857614018613e55565b60006020828403121561432857600080fd5b8135612cc281613cba565b60006020828403121561434557600080fd5b8135612cc281613a13565b60008060006060848603121561436557600080fd5b835161437081613202565b602085015160409095015190969495509392505050565b6000806040838503121561439a57600080fd5b82516143a581613202565b6020939093015192949293505050565b60005b838110156143d05781810151838201526020016143b8565b50506000910152565b600082825180855260208086019550808260051b84010181860160005b8481101561443c57601f1980878503018a528251805180865261441e818888018985016143b5565b9a86019a601f019091169390930184019250908301906001016143f6565b5090979650505050505050565b8481526001600160a01b038416602082015282604082015260806060820152600061314160808301846143d9565b8051600681106132df57600080fd5b80516132df816132bf565b80516132df81613c9b565b80516132df81613cba565b6000808284036101a08112156144bc57600080fd5b610180808212156144cc57600080fd5b6144d46136d1565b91506144df85614477565b82526144ed60208601613c73565b60208301526144fe60408601613c73565b604083015261450f60608601614486565b606083015261452060808601614491565b608083015261453160a08601614491565b60a083015261454260c08601614486565b60c083015261455360e08601613c73565b60e0830152610100858101519083015261012061457181870161449c565b90830152610140614583868201614486565b90830152610160614595868201614486565b81840152508193506145a8818601613c73565b925050509250929050565b6001600160a01b03831681526101a08101612cc260208301846138a5565b6000602082840312156145e357600080fd5b81516bffffffffffffffffffffffff81168114612cc257600080fd5b60006001600160a01b038088168352808716602084015250846040830152831515606083015260a0608083015261463960a08301846143d9565b979650505050505050565b6001600160a01b0387811682528681166020830152851660408201526bffffffffffffffffffffffff8416606082015260006102006146866080840186613d5b565b806101e08401526146978485613b66565b6040838601526146ac61024086018284613bac565b925050506146bd6020850185613b66565b8483036101ff19016102208601526146d6838284613bac565b9b9a5050505050505050505050565b6001600160a01b03851681526101c081016147036020830186613d5b565b6101808201939093526101a0015292915050565b838152604060208201526000614731604083018486613bac565b95945050505050565b60008251613fee8184602087016143b5565b60006020828403121561475e57600080fd5b81516001600160e01b031981168114612cc257600080fd5b60006020828403121561478857600080fd5b8151612cc281613a1356fea2646970667358221220f6e245ecce5ab5f48ad0f43e2292f95a39682fe0e92baa1ff4185ef2a7f1a9e664736f6c63430008180033000000000000000000000000c47e7bd855efaee7fb938ac593b9c74fd144728d0000000000000000000000008abf5358a88ca2586635d646aaaff172572fb0ed