0 txs
0 calls
constructor
constructor(address _routerV2, address _factoryV1, address _wNative, address _usdc)
functions
getFactoryV1
viewfunction getFactoryV1() view returns (address factoryV1)
getNativeDataFeeds
viewfunction getNativeDataFeeds(address _token) view returns (tuple[] dataFeeds)
getRouterV2
viewfunction getRouterV2() view returns (address routerV2)
getTokenPriceNative
viewfunction getTokenPriceNative(address _token) view returns (uint256 price)
getTokenPriceUSD
viewfunction getTokenPriceUSD(address _token) view returns (uint256 price)
getTokensPricesNative
viewfunction getTokensPricesNative(address[] _tokens) view returns (uint256[] prices)
getTokensPricesUSD
viewfunction getTokensPricesUSD(address[] _tokens) view returns (uint256[] prices)
getUSDDataFeeds
viewfunction getUSDDataFeeds(address _token) view returns (tuple[] dataFeeds)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
addNativeDataFeed
nonpayablefunction addNativeDataFeed(address _token, tuple _dataFeed)
addNativeDataFeeds
nonpayablefunction addNativeDataFeeds(address[] _tokens, tuple[] _dataFeeds)
addUSDDataFeed
nonpayablefunction addUSDDataFeed(address _token, tuple _dataFeed)
addUSDDataFeeds
nonpayablefunction addUSDDataFeeds(address[] _tokens, tuple[] _dataFeeds)
becomeOwner
nonpayablefunction becomeOwner()
removeNativeDataFeed
nonpayablefunction removeNativeDataFeed(address _token, address _dfAddress)
removeNativeDataFeeds
nonpayablefunction removeNativeDataFeeds(address[] _tokens, address[] _dfAddresses)
removeUSDDataFeed
nonpayablefunction removeUSDDataFeed(address _token, address _dfAddress)
removeUSDDataFeeds
nonpayablefunction removeUSDDataFeeds(address[] _tokens, address[] _dfAddresses)
renounceOwnership
nonpayablefunction renounceOwnership()
revokePendingOwner
nonpayablefunction revokePendingOwner()
setNativeDataFeedsWeights
nonpayablefunction setNativeDataFeedsWeights(address[] _tokens, address[] _dfAddresses, uint88[] _newWeights)
setNativeDataFeedWeight
nonpayablefunction setNativeDataFeedWeight(address _token, address _dfAddress, uint88 _newWeight)
setPendingOwner
nonpayablefunction setPendingOwner(address pendingOwner_)
setUSDDataFeedsWeights
nonpayablefunction setUSDDataFeedsWeights(address[] _tokens, address[] _dfAddresses, uint88[] _newWeights)
setUSDDataFeedWeight
nonpayablefunction setUSDDataFeedWeight(address _token, address _dfAddress, uint88 _newWeight)
events
DataFeedAdded
event DataFeedAdded(address collateral, address token, (address dfAddress, uint88 dfWeight, uint8 dfType) dataFeed)
DataFeedRemoved
event DataFeedRemoved(address collateral, address token, address dfAddress)
DataFeedsWeightSet
event DataFeedsWeightSet(address collateral, address token, address dfAddress, uint256 weight)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PendingOwnerSet
event PendingOwnerSet(address indexed pendingOwner)
errors
JoeDexLens__CollateralNotInPair
error JoeDexLens__CollateralNotInPair(address pair, address collateral)
JoeDexLens__DataFeedAlreadyAdded
error JoeDexLens__DataFeedAlreadyAdded(address colateral, address token, address dataFeed)
JoeDexLens__DataFeedNotInSet
error JoeDexLens__DataFeedNotInSet(address colateral, address token, address dataFeed)
JoeDexLens__InvalidChainLinkPrice
error JoeDexLens__InvalidChainLinkPrice()
JoeDexLens__LengthsMismatch
error JoeDexLens__LengthsMismatch()
JoeDexLens__NotEnoughLiquidity
error JoeDexLens__NotEnoughLiquidity()
JoeDexLens__NullWeight
error JoeDexLens__NullWeight()
JoeDexLens__PairsNotCreated
error JoeDexLens__PairsNotCreated()
JoeDexLens__SameTokens
error JoeDexLens__SameTokens()
JoeDexLens__TokenNotInPair
error JoeDexLens__TokenNotInPair(address pair, address token)
JoeDexLens__UnknownDataFeedType
error JoeDexLens__UnknownDataFeedType()
JoeDexLens__WrongPair
error JoeDexLens__WrongPair()
Math512Bits__MulShiftOverflow
error Math512Bits__MulShiftOverflow(uint256 prod1, uint256 offset)
Math512Bits__OffsetOverflows
error Math512Bits__OffsetOverflows(uint256 offset)
PendingOwnable__AddressZero
error PendingOwnable__AddressZero()
PendingOwnable__NoPendingOwner
error PendingOwnable__NoPendingOwner()
PendingOwnable__NotOwner
error PendingOwnable__NotOwner()
PendingOwnable__NotPendingOwner
error PendingOwnable__NotPendingOwner()
PendingOwnable__PendingOwnerAlreadySet
error PendingOwnable__PendingOwnerAlreadySet()
creation bytecode
0x6101006040523480156200001257600080fd5b5060405162003405380380620034058339810160408190526200003591620000d6565b620000403362000063565b6001600160a01b0393841660805291831660a052821660c0521660e0526200013e565b600080546001600160a01b038381166001600160a01b031980841682178555600180549091169055604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000d357600080fd5b50565b60008060008060808587031215620000ed57600080fd5b8451620000fa81620000bd565b60208601519094506200010d81620000bd565b60408601519093506200012081620000bd565b60608601519092506200013381620000bd565b939692955090935050565b60805160a05160c05160e0516131d062000235600039600081816103d00152818161042f015281816104be015281816104ef0152818161066d015281816107810152818161083f0152818161092a01528181610b9101528181611809015281816118ff015281816119490152611b040152600081816104680152818161054401528181610574015281816108d001528181610980015281816109ae01528181610a0301528181610ae301528181610b3901528181611752015281816118d1015281816119780152611ac90152600081816101d30152818161177f01526118370152600081816102540152611f9f01526131d06000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c8063715018a6116100de578063b34d8fba11610097578063d095d73511610071578063d095d7351461038a578063d8ee7aa41461039d578063e30c3978146103b0578063f9dca989146103c157600080fd5b8063b34d8fba14610351578063c42069ec14610364578063cc0603f31461037757600080fd5b8063715018a6146102ec5780637587a01d146102f45780637cc9ceea146103075780637f31fd501461031a5780638da5cb5b1461032d578063ad8dc7571461033e57600080fd5b806333141d3e1161014b57806345d4052e1161012557806345d4052e146102ab5780636205497c146102be57806367ab8a4e146102d157806369075ec3146102d957600080fd5b806333141d3e146102525780634136e6d114610278578063429f93651461028b57600080fd5b80630280561b14610193578063051f17b6146101bc57806307da8f57146101d1578063197d74571461020b5780631a5305781461021e5780632a2cef0a14610231575b600080fd5b6101a66101a136600461293f565b6103c9565b6040516101b39190612981565b60405180910390f35b6101cf6101ca3660046129c5565b6103ff565b005b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016101b3565b6101a661021936600461293f565b610461565b6101cf61022c366004612a74565b61048e565b61024461023f366004612aad565b6104e8565b6040519081526020016101b3565b7f00000000000000000000000000000000000000000000000000000000000000006101f3565b6101cf610286366004612a74565b610514565b61029e610299366004612aad565b61056a565b6040516101b39190612b02565b61029e6102b9366004612aad565b610663565b6101cf6102cc366004612b77565b610751565b6101cf6107af565b6101cf6102e7366004612c26565b61080f565b6101cf61086b565b6101cf6103023660046129c5565b6108a0565b6101cf610315366004612c71565b6108fa565b6101cf610328366004612c26565b610950565b6000546001600160a01b03166101f3565b61024461034c366004612aad565b6109a7565b6101cf61035f366004612b77565b6109d3565b6101cf610372366004612aad565b610a2b565b6101cf610385366004612c71565b610ab3565b6101cf610398366004612cb2565b610b09565b6101cf6103ab366004612cb2565b610b61565b6001546001600160a01b03166101f3565b6101cf610bb9565b60606103f67f00000000000000000000000000000000000000000000000000000000000000008484610bf8565b90505b92915050565b6000546001600160a01b0316331461042a57604051639f216c1360e01b815260040160405180910390fd5b6104597f0000000000000000000000000000000000000000000000000000000000000000878787878787610ca7565b505050505050565b60606103f67f00000000000000000000000000000000000000000000000000000000000000008484610bf8565b6000546001600160a01b031633146104b957604051639f216c1360e01b815260040160405180910390fd5b6104e47f00000000000000000000000000000000000000000000000000000000000000008383610d8a565b5050565b60006103f97f000000000000000000000000000000000000000000000000000000000000000083610e01565b6000546001600160a01b0316331461053f57604051639f216c1360e01b815260040160405180910390fd5b6104e47f00000000000000000000000000000000000000000000000000000000000000008383610d8a565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660009081526002602090815260408083209385168352928152828220805484518184028101840190955280855260609493919290919084015b828210156106585760008481526020908190206040805160608101825291850180546001600160a01b0381168452600160a01b81046001600160581b031694840194909452919290830190600160f81b900460ff16600281111561063457610634612aca565b600281111561064557610645612aca565b81525050815260200190600101906105ce565b505050509050919050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660009081526002602090815260408083209385168352928152828220805484518184028101840190955280855260609493919290919084015b828210156106585760008481526020908190206040805160608101825291850180546001600160a01b0381168452600160a01b81046001600160581b031694840194909452919290830190600160f81b900460ff16600281111561072d5761072d612aca565b600281111561073e5761073e612aca565b81525050815260200190600101906106c7565b6000546001600160a01b0316331461077c57604051639f216c1360e01b815260040160405180910390fd5b6107a97f00000000000000000000000000000000000000000000000000000000000000008585858561104b565b50505050565b6000546001600160a01b031633146107da57604051639f216c1360e01b815260040160405180910390fd5b6001546001600160a01b03166108035760405163ecfad6bf60e01b815260040160405180910390fd5b61080d60006110d2565b565b6000546001600160a01b0316331461083a57604051639f216c1360e01b815260040160405180910390fd5b6108667f000000000000000000000000000000000000000000000000000000000000000084848461111c565b505050565b6000546001600160a01b0316331461089657604051639f216c1360e01b815260040160405180910390fd5b61080d600061124e565b6000546001600160a01b031633146108cb57604051639f216c1360e01b815260040160405180910390fd5b6104597f0000000000000000000000000000000000000000000000000000000000000000878787878787610ca7565b6000546001600160a01b0316331461092557604051639f216c1360e01b815260040160405180910390fd5b6104e47f000000000000000000000000000000000000000000000000000000000000000083836112a8565b6000546001600160a01b0316331461097b57604051639f216c1360e01b815260040160405180910390fd5b6108667f000000000000000000000000000000000000000000000000000000000000000084848461111c565b60006103f97f000000000000000000000000000000000000000000000000000000000000000083610e01565b6000546001600160a01b031633146109fe57604051639f216c1360e01b815260040160405180910390fd5b6107a97f00000000000000000000000000000000000000000000000000000000000000008585858561104b565b6000546001600160a01b03163314610a5657604051639f216c1360e01b815260040160405180910390fd5b6001600160a01b038116610a7d576040516391f3851560e01b815260040160405180910390fd5b6001546001600160a01b031615610aa75760405163716b1fbf60e01b815260040160405180910390fd5b610ab0816110d2565b50565b6000546001600160a01b03163314610ade57604051639f216c1360e01b815260040160405180910390fd5b6104e47f000000000000000000000000000000000000000000000000000000000000000083836112a8565b6000546001600160a01b03163314610b3457604051639f216c1360e01b815260040160405180910390fd5b6107a97f0000000000000000000000000000000000000000000000000000000000000000858585856114a3565b6000546001600160a01b03163314610b8c57604051639f216c1360e01b815260040160405180910390fd5b6107a97f0000000000000000000000000000000000000000000000000000000000000000858585856114a3565b6001546001600160a01b031633141580610bd1575033155b15610bef57604051633982680960e11b815260040160405180910390fd5b61080d3361124e565b60608167ffffffffffffffff811115610c1357610c13612d1e565b604051908082528060200260200182016040528015610c3c578160200160208202803683370190505b50905060005b82811015610c9f57610c7a85858584818110610c6057610c60612d34565b9050602002016020810190610c759190612aad565b610e01565b828281518110610c8c57610c8c612d34565b6020908102919091010152600101610c42565b509392505050565b8483808214610cc957604051631e5ffe1560e01b815260040160405180910390fd5b8683808214610ceb57604051631e5ffe1560e01b815260040160405180910390fd5b60005b89811015610d7c57610d748c8c8c84818110610d0c57610d0c612d34565b9050602002016020810190610d219190612aad565b8b8b85818110610d3357610d33612d34565b9050602002016020810190610d489190612aad565b8a8a86818110610d5a57610d5a612d34565b9050602002016020810190610d6f9190612d4a565b61111c565b600101610cee565b505050505050505050505050565b610d9583838361152f565b610dc157828282604051630be8e07560e41b8152600401610db893929190612d67565b60405180910390fd5b7fe6edf5e189eb3820a5b27c73eadb76c09ad28c06ca410c8853e49c3bc70c8997838383604051610df493929190612d67565b60405180910390a1505050565b600080836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e669190612d8a565b60ff169050826001600160a01b0316846001600160a01b03161415610e9857610e9081600a612ea7565b9150506103f9565b6001600160a01b0384811660009081526002602090815260408083209387168352929052205480610ed657610ecd8585611733565b925050506103f9565b60008060005b83811015610fd8576000610ef1898984611b42565b9050600081604001516002811115610f0b57610f0b612aca565b1415610f24578051610f1d9089611c15565b9350610f90565b600181604001516002811115610f3c57610f3c612aca565b1415610f4e578051610f1d9089611f04565b600281604001516002811115610f6657610f66612aca565b1415610f77578051610f1d90612247565b604051631066e60560e01b815260040160405180910390fd5b6020810151610fa8906001600160581b031685612eb3565b610fb29088612ed2565b965080602001516001600160581b031683610fcd9190612ed2565b925050600101610edc565b50610fe38186612eea565b9450601284101561101557610ff9846012612f0c565b61100490600a612ea7565b61100e9086612eea565b9450611041565b601284111561104157611029601285612f0c565b61103490600a612ea7565b61103e9086612eb3565b94505b5050505092915050565b828180821461106d57604051631e5ffe1560e01b815260040160405180910390fd5b60005b858110156110c8576110c08888888481811061108e5761108e612d34565b90506020020160208101906110a39190612aad565b8787858181106110b5576110b5612d34565b9050606002016112a8565b600101611070565b5050505050505050565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f68f49b346b94582a8b5f9d10e3fe3365318fe8f191ff8dce7c59c6cad06b02f590600090a250565b806001600160581b03811661114457604051631b13f49360e21b815260040160405180910390fd5b6001600160a01b038086166000908152600260209081526040808320888516845282528083209387168352600184019091529020548061119d57868686604051630be8e07560e41b8152600401610db893929190612d67565b83826111aa600184612f0c565b815481106111ba576111ba612d34565b60009182526020918290200180546affffffffffffffffffffff60a01b1916600160a01b6001600160581b0394851602179055604080516001600160a01b038b811682528a8116938201939093529188169082015290851660608201527fa885f217c9aca533ab86af1a1b2272f9301e89ac3f72d6b436f00e0e09ea080a906080015b60405180910390a150505050505050565b600080546001600160a01b038381166001600160a01b031980841682178555600180549091169055604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828282816001600160a01b0316836001600160a01b031614156112de57604051631ca52e4560e31b815260040160405180910390fd5b60026112f06060830160408401612f30565b600281111561130157611301612aca565b146113ff57600080611312836123a8565b91509150846001600160a01b0316826001600160a01b03161415801561134a5750846001600160a01b0316816001600160a01b031614155b156113895761135c6020840184612aad565b6040516355857c4360e01b81526001600160a01b0391821660048201529086166024820152604401610db8565b836001600160a01b0316826001600160a01b0316141580156113bd5750836001600160a01b0316816001600160a01b031614155b156113fc576113cf6020840184612aad565b6040516355b4206760e11b81526001600160a01b0391821660048201529085166024820152604401610db8565b50505b61140f6040850160208601612d4a565b6001600160581b03811661143657604051631b13f49360e21b815260040160405180910390fd5b61144187878761258e565b6114705786866114546020880188612aad565b6040516333c0b16b60e01b8152600401610db893929190612d67565b7f32a6dfb90cb913c2af9bb87245790dc2d2f574d27ab85fa70ff78f6493fe612e87878760405161123d93929190612f4d565b82818082146114c557604051631e5ffe1560e01b815260040160405180910390fd5b60005b858110156110c857611527888888848181106114e6576114e6612d34565b90506020020160208101906114fb9190612aad565b87878581811061150d5761150d612d34565b90506020020160208101906115229190612aad565b610d8a565b6001016114c8565b6001600160a01b03808416600090815260026020908152604080832086851684528252808320938516835260018401909152812054909190801561171e57600061157a600183612f0c565b835490915060009061158e90600190612f0c565b90508082146116ce5760008460000182815481106115ae576115ae612d34565b6000918252602091829020604080516060810182529290910180546001600160a01b0381168452600160a01b81046001600160581b031694840194909452919290830190600160f81b900460ff16600281111561160d5761160d612aca565b600281111561161e5761161e612aca565b8152505090508085600001848154811061163a5761163a612d34565b6000918252602091829020835191018054928401516001600160581b0316600160a01b026001600160f81b03199093166001600160a01b03909216919091179190911780825560408301519082906001600160f81b0316600160f81b8360028111156116a8576116a8612aca565b02179055505090516001600160a01b031660009081526001860160205260409020849055505b83548490806116df576116df612fb8565b6000828152602080822083016000199081018390559092019092556001600160a01b03881682526001958601905260408120555091925061172c915050565b60009250505061172c565b50505b9392505050565b60405163e6a4390560e01b81526001600160a01b0382811660048301527f00000000000000000000000000000000000000000000000000000000000000008116602483015260009182917f0000000000000000000000000000000000000000000000000000000000000000169063e6a4390590604401602060405180830381865afa1580156117c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ea9190612fce565b60405163e6a4390560e01b81526001600160a01b0385811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063e6a4390590604401602060405180830381865afa15801561187e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a29190612fce565b90506001600160a01b038216158015906118c457506001600160a01b03811615155b15611ab35760006118f5867f0000000000000000000000000000000000000000000000000000000000000000610e01565b90506000611923877f0000000000000000000000000000000000000000000000000000000000000000610e01565b905060006119318488611c15565b9050600061193f8689611c15565b9050600061196e867f00000000000000000000000000000000000000000000000000000000000000008b61266b565b9050600061199d887f00000000000000000000000000000000000000000000000000000000000000008c61266b565b905060006119ad6012600a612ea7565b6119b78785612eb3565b6119c19190612eea565b905060006119d16012600a612ea7565b6119db8985612eb3565b6119e59190612eea565b90506000806119f66012600a612ea7565b84611a018b8b612eb3565b611a0b9190612eb3565b611a159190612eea565b90508015611a2a57611a278483612ed2565b91505b6000611a386012600a612ea7565b84611a438d8b612eb3565b611a4d9190612eb3565b611a579190612eea565b90508015611a6c57611a698484612ed2565b92505b82611a8a576040516355adf6cf60e11b815260040160405180910390fd5b82611a958284612ed2565b611a9f9190612eea565b9d50505050505050505050505050506103f9565b6001600160a01b03821615611aee57610ecd85837f000000000000000000000000000000000000000000000000000000000000000087612800565b6001600160a01b03811615611b2957610ecd85827f000000000000000000000000000000000000000000000000000000000000000087612800565b60405163314509ab60e21b815260040160405180910390fd5b611b6360408051606081018252600080825260208201819052909182015290565b6001600160a01b038085166000908152600260209081526040808320938716835292905220805483908110611b9a57611b9a612d34565b6000918252602091829020604080516060810182529290910180546001600160a01b0381168452600160a01b81046001600160581b031694840194909452919290830190600160f81b900460ff166002811115611bf957611bf9612aca565b6002811115611c0a57611c0a612aca565b905250949350505050565b6000808390506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7f9190612fce565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce59190612fce565b90506000826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4b9190612d8a565b60ff1690506000826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db49190612d8a565b60ff169050600080866001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611dfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1e9190613007565b506001600160701b031691506001600160701b03169150856001600160a01b0316896001600160a01b03161415611e9c57611e5a83600a612ea7565b611e649083612eb3565b611e6f601286612ed2565b611e7a90600a612ea7565b611e849083612eb3565b611e8e9190612eea565b9750505050505050506103f9565b846001600160a01b0316896001600160a01b03161415611eeb57611ec184600a612ea7565b611ecb9082612eb3565b611ed6601285612ed2565b611ee190600a612ea7565b611e849084612eb3565b60405163510995ef60e11b815260040160405180910390fd5b6000808390506000816001600160a01b0316631b05b83e6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611f4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6e919061304c565b604051636871c07960e11b81526001600160a01b03868116600483015262ffffff83166024830152919450600093507f0000000000000000000000000000000000000000000000000000000000000000909116915063d0e380f290604401602060405180830381865afa158015611fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200d919061307a565b90506000836001600160a01b03166316dc165b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561204f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120739190612fce565b90506000846001600160a01b031663b7d19fc46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d99190612fce565b90506000826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561211b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213f9190612d8a565b60ff1690506000826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612184573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a89190612d8a565b60ff169050836001600160a01b0316896001600160a01b031614156121f457611e8e816121d6846012612ed2565b6121e09190612f0c565b6121eb90600a612ea7565b86906080612848565b826001600160a01b0316896001600160a01b03161415611eeb57611e8e8261221d836012612ed2565b6122279190612f0c565b61223290600a612ea7565b608061224088600019612eea565b9190612848565b6000808290506000816001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561228d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b191906130ad565b505050915050600081136122d8576040516356b03d5360e01b815260040160405180910390fd5b8092506000826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561231b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233f9190612d8a565b60ff169050601281101561237457612358816012612f0c565b61236390600a612ea7565b61236d9085612eb3565b93506123a0565b60128111156123a057612388601282612f0c565b61239390600a612ea7565b61239d9085612eea565b93505b505050919050565b600080806123bc6060850160408601612f30565b60028111156123cd576123cd612aca565b14156124b25760006123e26020850185612aad565b9050806001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612422573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124469190612fce565b9250806001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612486573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124aa9190612fce565b915050915091565b60016124c46060850160408601612f30565b60028111156124d5576124d5612aca565b1415610f775760006124ea6020850185612aad565b9050806001600160a01b03166316dc165b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561252a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254e9190612fce565b9250806001600160a01b031663b7d19fc46040518163ffffffff1660e01b8152600401602060405180830381865afa158015612486573d6000803e3d6000fd5b60006125df84846125a26020860186612aad565b6001600160a01b03808416600090815260026020908152604080832086851684528252808320938516835260019093019052205415159392505050565b612663576001600160a01b0380851660009081526002602090815260408083209387168352928152918120805460018101825581835292909120909184910161262882826130fd565b5050805460018201600061263f6020870187612aad565b6001600160a01b03168152602081019190915260400160002055506001905061172c565b50600061172c565b600080849050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156126b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d69190613007565b506001600160701b031691506001600160701b031691506000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561272d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127519190612d8a565b9050856001600160a01b0316876001600160a01b0316101561277f57612778836002612eb3565b945061278d565b61278a826002612eb3565b94505b60128160ff1610156127c3576127a760ff82166012612f0c565b6127b290600a612ea7565b6127bc9086612eb3565b94506127f5565b60128160ff1611156127f5576127dd601260ff8316612f0c565b6127e890600a612ea7565b6127f29086612eea565b94505b505050509392505050565b60008061280d8584611c15565b9050600061281b8786610e01565b90506128296012600a612ea7565b6128338284612eb3565b61283d9190612eea565b979650505050505050565b600060ff82111561286f57604051630b72ecf560e41b815260048101839052602401610db8565b60008061287c86866128d4565b915091508160001461288e5781841c92505b8015611729576001841b81106128c157604051633d90990f60e01b81526004810182905260248101859052604401610db8565b610100939093039290921b019392505050565b6000806000198385098385029250828110838203039150509250929050565b60008083601f84011261290557600080fd5b50813567ffffffffffffffff81111561291d57600080fd5b6020830191508360208260051b850101111561293857600080fd5b9250929050565b6000806020838503121561295257600080fd5b823567ffffffffffffffff81111561296957600080fd5b612975858286016128f3565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b818110156129b95783518352928401929184019160010161299d565b50909695505050505050565b600080600080600080606087890312156129de57600080fd5b863567ffffffffffffffff808211156129f657600080fd5b612a028a838b016128f3565b90985096506020890135915080821115612a1b57600080fd5b612a278a838b016128f3565b90965094506040890135915080821115612a4057600080fd5b50612a4d89828a016128f3565b979a9699509497509295939492505050565b6001600160a01b0381168114610ab057600080fd5b60008060408385031215612a8757600080fd5b8235612a9281612a5f565b91506020830135612aa281612a5f565b809150509250929050565b600060208284031215612abf57600080fd5b813561172c81612a5f565b634e487b7160e01b600052602160045260246000fd5b60038110612afe57634e487b7160e01b600052602160045260246000fd5b9052565b602080825282518282018190526000919060409081850190868401855b82811015612b6a57815180516001600160a01b03168552868101516001600160581b031687860152850151612b5686860182612ae0565b506060939093019290850190600101612b1f565b5091979650505050505050565b60008060008060408587031215612b8d57600080fd5b843567ffffffffffffffff80821115612ba557600080fd5b612bb1888389016128f3565b90965094506020870135915080821115612bca57600080fd5b818701915087601f830112612bde57600080fd5b813581811115612bed57600080fd5b886020606083028501011115612c0257600080fd5b95989497505060200194505050565b6001600160581b0381168114610ab057600080fd5b600080600060608486031215612c3b57600080fd5b8335612c4681612a5f565b92506020840135612c5681612a5f565b91506040840135612c6681612c11565b809150509250925092565b6000808284036080811215612c8557600080fd5b8335612c9081612a5f565b92506060601f1982011215612ca457600080fd5b506020830190509250929050565b60008060008060408587031215612cc857600080fd5b843567ffffffffffffffff80821115612ce057600080fd5b612cec888389016128f3565b90965094506020870135915080821115612d0557600080fd5b50612d12878288016128f3565b95989497509550505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215612d5c57600080fd5b813561172c81612c11565b6001600160a01b0393841681529183166020830152909116604082015260600190565b600060208284031215612d9c57600080fd5b815160ff8116811461172c57600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612dfe578160001904821115612de457612de4612dad565b80851615612df157918102915b93841c9390800290612dc8565b509250929050565b600082612e15575060016103f9565b81612e22575060006103f9565b8160018114612e385760028114612e4257612e5e565b60019150506103f9565b60ff841115612e5357612e53612dad565b50506001821b6103f9565b5060208310610133831016604e8410600b8410161715612e81575081810a6103f9565b612e8b8383612dc3565b8060001904821115612e9f57612e9f612dad565b029392505050565b60006103f68383612e06565b6000816000190483118215151615612ecd57612ecd612dad565b500290565b60008219821115612ee557612ee5612dad565b500190565b600082612f0757634e487b7160e01b600052601260045260246000fd5b500490565b600082821015612f1e57612f1e612dad565b500390565b60038110610ab057600080fd5b600060208284031215612f4257600080fd5b813561172c81612f23565b6001600160a01b038481168252838116602083015260a08201908335612f7281612a5f565b1660408301526020830135612f8681612c11565b6001600160581b031660608301526040830135612fa281612f23565b612faf6080840182612ae0565b50949350505050565b634e487b7160e01b600052603160045260246000fd5b600060208284031215612fe057600080fd5b815161172c81612a5f565b80516001600160701b038116811461300257600080fd5b919050565b60008060006060848603121561301c57600080fd5b61302584612feb565b925061303360208501612feb565b9150604084015163ffffffff81168114612c6657600080fd5b60008060006060848603121561306157600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561308c57600080fd5b5051919050565b805169ffffffffffffffffffff8116811461300257600080fd5b600080600080600060a086880312156130c557600080fd5b6130ce86613093565b94506020860151935060408601519250606086015191506130f160808701613093565b90509295509295909350565b813561310881612a5f565b81546001600160a01b031981166001600160a01b03929092169182178355602084013561313481612c11565b6affffffffffffffffffffff60a01b60a09190911b166001600160f81b031991821683178117845560408501359161316b83612f23565b6003831061318957634e487b7160e01b600052602160045260246000fd5b921760f89190911b9091161790555056fea26469706673582212202646041174108183202db5f1be9d27ef1e697075b3860f1a5364834d9a805a9764736f6c634300080a00330000000000000000000000007bfd7192e76d950832c77bb412aae841049d8d9b000000000000000000000000ae4ec9901c3076d0ddbe76a520f9e90a6227acb700000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000ff970a61a04b1ca14834a43f5de4533ebddb5cc8