0 txs
903 calls
constructor
constructor()
functions
closeFeePerc
viewfunction closeFeePerc() view returns (uint16)
feeProcessor
viewfunction feeProcessor() view returns (address)
feeReceiver
viewfunction feeReceiver() view returns (address)
flashSource
viewfunction flashSource(address) view returns (address)
indexUtils
viewfunction indexUtils() view returns (address)
lendingPairs
viewfunction lendingPairs(address) view returns (address)
leverageFactory
viewfunction leverageFactory() view returns (address)
openFeePerc
viewfunction openFeePerc() view returns (uint16)
owner
viewfunction owner() view returns (address)
positionNFT
viewfunction positionNFT() view returns (address)
positionProps
viewfunction positionProps(uint256) view returns (address pod, address lendingPair, address custodian, bool isSelfLending, bool hasSelfLendingPairPod)
addLeverage
nonpayablefunction addLeverage(uint256 _positionId, address _pod, uint256 _pTknAmt, uint256 _pairedLpDesired, uint256 _userProvidedDebtAmt, bool _hasSelfLendingPairPod, bytes _config)
addLeverageFromTkn
nonpayablefunction addLeverageFromTkn(uint256 _positionId, address _pod, uint256 _tknAmt, uint256 _amtPtknMintMin, uint256 _pairedLpDesired, uint256 _userProvidedDebtAmt, bool _hasSelfLendingPairPod, bytes _config)
borrowAssets
nonpayablefunction borrowAssets(uint256 _positionId, uint256 _borrowAmt, uint256 _collateralAmt, address _recipient)
callback
nonpayablefunction callback(bytes _userData)
initialize
nonpayablefunction initialize()
initialize
nonpayablefunction initialize(address _positionNFT, address _idxUtils, address _feeReceiver)
initializePosition
nonpayablefunction initializePosition(address _pod, address _recipient, bool _hasSelfLendingPairPod) returns (uint256 _positionId)
removeLeverage
nonpayablefunction removeLeverage(uint256 _positionId, uint256 _borrowSharesAmt, bytes _remLevConfig)
renounceOwnership
nonpayablefunction renounceOwnership()
rescueTokens
nonpayablefunction rescueTokens(address _token)
setCloseFeePerc
nonpayablefunction setCloseFeePerc(uint16 _newFee)
setFeeProcessor
nonpayablefunction setFeeProcessor(address _processor)
setFeeReceiver
nonpayablefunction setFeeReceiver(address _receiver)
setFlashSource
nonpayablefunction setFlashSource(address _borrowAsset, address _flashSource)
setIndexUtils
nonpayablefunction setIndexUtils(address _utils)
setLendingPair
nonpayablefunction setLendingPair(address _pod, address _pair)
setLeverageFactory
nonpayablefunction setLeverageFactory(address _factory)
setOpenFeePerc
nonpayablefunction setOpenFeePerc(uint16 _newFee)
setPositionNFT
nonpayablefunction setPositionNFT(address _posNFT)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawAssets
nonpayablefunction withdrawAssets(uint256 _positionId, address _token, address _recipient, uint256 _amount)
events
AddLeverage
event AddLeverage(uint256 indexed positionId, address indexed user, uint256 pTknAmtUsed, uint256 collateralAmt, uint256 borrowAmt)
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RemoveLeverage
event RemoveLeverage(uint256 indexed positionId, address indexed user, uint256 collateralAmt)
SetBorrowAssetFlashSource
event SetBorrowAssetFlashSource(address _borrowAsset, address _flashSource)
SetCloseFeePerc
event SetCloseFeePerc(uint16 oldFee, uint16 newFee)
SetFeeProcessor
event SetFeeProcessor(address oldProcessor, address newProcessor)
SetFeeReceiver
event SetFeeReceiver(address oldReceiver, address newReceiver)
SetIndexUtils
event SetIndexUtils(address oldIdxUtils, address newIdxUtils)
SetLeverageFactory
event SetLeverageFactory(address _factory)
SetOpenFeePerc
event SetOpenFeePerc(uint16 oldFee, uint16 newFee)
SetPodLendingPair
event SetPodLendingPair(address _pod, address _lendingPair)
SetPositionsNFT
event SetPositionsNFT(address oldPosNFT, address newPosNFT)
errors
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableLeverageFactoryUnauthorizedAccount
error OwnableLeverageFactoryUnauthorizedAccount(address _sender)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x6080604052348015600e575f5ffd5b506015601f565b601b601f565b60cf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615606e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460cc5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b615d30806100dc5f395ff3fe608060405234801561000f575f5ffd5b50600436106101e6575f3560e01c80638bf0f8f811610109578063c359770d1161009e578063ed3cb8f01161006e578063ed3cb8f0146104c7578063efdcd974146104da578063f2fde38b146104ed578063f7ee228d14610500575f5ffd5b8063c359770d14610402578063da04d01c14610415578063e98a565414610428578063e9b2b3a31461043b575f5ffd5b8063b0eb469d116100d9578063b0eb469d146103b6578063b3f00674146103c9578063b9cc423e146103dc578063c0c53b8b146103ef575f5ffd5b80638bf0f8f8146103705780638da5cb5b1461038357806394f0d0bf1461038b578063a49f0c95146103a3575f5ffd5b80635ba034ba1161017f5780636cabc12f1161014f5780636cabc12f1461033a578063713f6a0a1461034d578063715018a6146103605780638129fc1c14610368575f5ffd5b80635ba034ba146102d95780635db48b97146103015780636a2faf08146103145780636af4eaa114610327575f5ffd5b806332aeb0a5116101ba57806332aeb0a514610255578063454279c01461027d57806347efda2a1461029e5780635645e39c146102c6575f5ffd5b8062ae3bf8146101ea5780631656118b146101ff5780631f4e84fa1461021257806323228ecb14610225575b5f5ffd5b6101fd6101f836600461487c565b610515565b005b6101fd61020d366004614897565b61059b565b6101fd6102203660046148ce565b61070c565b600354610238906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60045461026a90600160b01b900461ffff1681565b60405161ffff909116815260200161024c565b61029061028b366004614920565b610837565b60405190815260200161024c565b6102386102ac36600461487c565b5f602081905290815260409020546001600160a01b031681565b6101fd6102d4366004614897565b61084b565b6102386102e736600461487c565b60016020525f90815260409020546001600160a01b031681565b600254610238906001600160a01b031681565b6101fd610322366004614968565b610968565b6101fd610335366004614aac565b610c05565b6101fd610348366004614b2e565b610d3a565b6101fd61035b36600461487c565b610dda565b6101fd610e3f565b6101fd610e52565b6101fd61037e366004614b4f565b610f47565b610238611031565b6006546102389061010090046001600160a01b031681565b6101fd6103b1366004614b2e565b61105f565b6101fd6103c436600461487c565b6110ff565b600454610238906001600160a01b031681565b6101fd6103ea36600461487c565b61115a565b6101fd6103fd366004614bdb565b6111b6565b6101fd610410366004614c18565b6112eb565b6101fd61042336600461487c565b6117bc565b6101fd610436366004614c63565b611817565b61048c610449366004614c94565b60056020525f90815260409020805460018201546002909201546001600160a01b039182169282169181169060ff600160a01b8204811691600160a81b90041685565b604080516001600160a01b0396871681529486166020860152929094169183019190915215156060820152901515608082015260a00161024c565b600754610238906001600160a01b031681565b6101fd6104e836600461487c565b6118aa565b6101fd6104fb36600461487c565b611905565b60045461026a90600160a01b900461ffff1681565b61051d61193f565b610598336040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610563573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105879190614cab565b6001600160a01b0384169190611971565b50565b336105a4611031565b6001600160a01b0316141580156105c657506007546001600160a01b03163314155b156105eb5760405163f0d952a160e01b81523360048201526024015b60405180910390fd5b6001600160a01b038116156106a0575f6001600160a01b0316816001600160a01b031663c6e1c7c96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610640573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106649190614cd2565b6001600160a01b0316036106a05760405162461bcd60e51b81526020600482015260036024820152624c505360e81b60448201526064016105e2565b6001600160a01b038281165f908152602081905260409081902080546001600160a01b03191692841692909217909155517f96d39ca7eed6c76afc52c05f7c51fb2ef86f7173ad16cc9ebdd533023b8255ab906107009084908490614ced565b60405180910390a15050565b83336003546040516331a9108f60e11b8152600481018490526001600160a01b039283169290911690636352211e90602401602060405180830381865afa158015610759573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077d9190614cd2565b6001600160a01b0316146107b85760405162461bcd60e51b8152602060048201526002602482015261041360f41b60448201526064016105e2565b5f8581526005602052604090819020600201549051636ce5768960e11b81526001600160a01b0386811660048301528581166024830152604482018590529091169063d9caed12906064015f604051808303815f87803b15801561081a575f5ffd5b505af115801561082c573d5f5f3e3d5ffd5b505050505050505050565b5f6108438484846119d0565b949350505050565b61085361193f565b6001600160a01b03811615610908575f6001600160a01b0316816001600160a01b03166367e828bf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108cc9190614cd2565b6001600160a01b0316036109085760405162461bcd60e51b815260206004820152600360248201526241465360e81b60448201526064016105e2565b6001600160a01b038281165f908152600160205260409081902080546001600160a01b03191692841692909217909155517f843434cf8dbd5c5a48bd9c61abdda97f96615e466554ec0bf2afa4471faa96ef906107009084908490614ced565b83336003546040516331a9108f60e11b8152600481018490526001600160a01b039283169290911690636352211e90602401602060405180830381865afa1580156109b5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d99190614cd2565b6001600160a01b031614610a145760405162461bcd60e51b8152602060048201526002602482015261041360f41b60448201526064016105e2565b8215610a5357610a53335f878152600560205260409020600201546001600160a01b031685610a4289611bae565b6001600160a01b0316929190611c2a565b5f85815260056020526040902060028101546001909101546004546001600160a01b039283169263cb69e27092169087908790600160a01b900461ffff16610a9b5786610a9d565b305b60405160e086901b6001600160e01b03191681526001600160a01b0394851660048201526024810193909352604483019190915290911660648201526084015f604051808303815f87803b158015610af3575f5ffd5b505af1158015610b05573d5f5f3e3d5ffd5b5050600454600160a01b900461ffff16159150610bfe9050575f8581526005602090815260408083206001015481516338d52e0f60e01b815291516001600160a01b03909116926338d52e0f92600480820193918290030181865afa158015610b70573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b949190614cd2565b6004549091505f9061271090610bb590600160a01b900461ffff1688614d1b565b610bbf9190614d32565b600454909150610bdc906001600160a01b03848116911683611971565b610bfb84610bea8389614d51565b6001600160a01b0385169190611971565b50505b5050505050565b600160065460ff1615610c2a5760405162461bcd60e51b81526004016105e290614d64565b6006805460ff191660011790556040516370a0823160e01b81523060048201525f906001600160a01b038916906370a0823190602401602060405180830381865afa158015610c7b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9f9190614cab565b9050610cb66001600160a01b03891633308a611c2a565b61082c336040516370a0823160e01b81523060048201528b908b9085906001600160a01b038316906370a08231906024015b602060405180830381865afa158015610d03573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d279190614cab565b610d319190614d51565b8a8a8a8a611c69565b610d4261193f565b6109c48161ffff161115610d7c5760405162461bcd60e51b81526020600482015260016024820152604d60f81b60448201526064016105e2565b6004805461ffff838116600160a01b81810261ffff60a01b1985161790945560408051949093049091168084526020840191909152917fe5642aead6d7b355abd4181df302c285915b513dd4f8b1c57199f3f0edfa61a09101610700565b610de261193f565b600680546001600160a01b03838116610100908102610100600160a81b03198416179093556040519290910416907f7e4749f6bd1dd644f75a80c4f70296c754aa42cefe6ebca9c3c06fce38ba2a33906107009083908590614ced565b610e4761193f565b610e505f611f53565b565b5f610e5b611fc3565b805490915060ff600160401b82041615906001600160401b03165f81158015610e815750825b90505f826001600160401b03166001148015610e9c5750303b155b905081158015610eaa575080155b15610ec85760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ef257845460ff60401b1916600160401b1785555b610efb33611feb565b8315610bfe57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050565b600160065460ff1615610f6c5760405162461bcd60e51b81526004016105e290614d64565b6006805460ff191660011790556040516370a0823160e01b81523060048201525f906001600160a01b038a16906370a0823190602401602060405180830381865afa158015610fbd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe19190614cab565b9050610fef338a8a8a611ffc565b611025336040516370a0823160e01b81523060048201528c908c9085906001600160a01b038316906370a0823190602401610ce8565b50505050505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b61106761193f565b6109c48161ffff1611156110a15760405162461bcd60e51b81526020600482015260016024820152604d60f81b60448201526064016105e2565b6004805461ffff838116600160b01b81810261ffff60b01b1985161790945560408051949093049091168084526020840191909152917f5def20dfceec8a818b2a4431838c7e9165d77cc6970868067379f7c77faaf7459101610700565b61110761193f565b600380546001600160a01b038381166001600160a01b03198316179092556040519116907ff20ed5350ef7d392328a901ca190ac63721bec1597e15aba82c7473b86b532b8906107009083908590614ced565b61116261193f565b600780546001600160a01b0319166001600160a01b0383169081179091556040519081527fef102108a9c857a7f47ecf638476a3215955a867031057ec7314ce4338dae7bc9060200160405180910390a150565b5f6111bf611fc3565b805490915060ff600160401b82041615906001600160401b03165f811580156111e55750825b90505f826001600160401b031660011480156112005750303b155b90508115801561120e575080155b1561122c5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561125657845460ff60401b1916600160401b1785555b61125e610e52565b600380546001600160a01b03808b166001600160a01b031992831617909255600280548a8416908316179055600480549289169290911691909117905583156112e157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b600160065460ff16156113105760405162461bcd60e51b81526004016105e290614d64565b6006805460ff191660011790555f336003546040516331a9108f60e11b8152600481018890529192505f916001600160a01b0390911690636352211e90602401602060405180830381865afa15801561136b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061138f9190614cd2565b9050816001600160a01b0316816001600160a01b03161480611424575060035460405163020604bf60e21b8152600481018890526001600160a01b0384811692169063081812fc90602401602060405180830381865afa1580156113f5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114199190614cd2565b6001600160a01b0316145b8061149b575060035460405163e985e9c560e01b81526001600160a01b039091169063e985e9c59061145c9084908690600401614ced565b602060405180830381865afa158015611477573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061149b9190614d80565b6114cc5760405162461bcd60e51b8152602060048201526002602482015261413160f01b60448201526064016105e2565b5f86815260056020526040808220600101549051631c6c959760e01b815260048101929092526001600160a01b0316908190631c6c959790602401610180604051808303815f875af1158015611524573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115489190614e35565b5050505050505f6115bb876001846001600160a01b0316638285ef406040518163ffffffff1660e01b81526004016040805180830381865afa158015611590573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115b49190614ef7565b9190612346565b90505f5f6115c983896123de565b915091506115d78a87612459565b5f6115e18b612566565b90506115f76001600160a01b03821686866125b8565b6116446040805160e08101909152805f81526020015f81526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f81526020015f8152602001606081525090565b6001815260208082018d90526001600160a01b03888116604080850191909152908a166060840152515f9161167d918e91879101614f53565b60405160208183030381529060405290508486111561172c5761169f8d61263d565b6001600160a01b0316637a05edcd846116b8888a614d51565b3086866040516020016116cc929190614ffb565b6040516020818303038152906040526040518563ffffffff1660e01b81526004016116fa9493929190615028565b5f604051808303815f87803b158015611711575f5ffd5b505af1158015611723573d5f5f3e3d5ffd5b505050506117ad565b6117ad6040518060a00160405280306001600160a01b03168152602001856001600160a01b031681526020015f81526020018484604051602001611771929190614ffb565b60405160208183030381529060405281526020015f815250604051602001611799919061505a565b60405160208183030381529060405261266c565b50505050505050505050505050565b6117c461193f565b600280546001600160a01b038381166001600160a01b03198316179092556040519116907ff85662baab9b80fdcb7acea65a7d500f0d9b98b1757fb88e3b3c7dd0aebe4116906107009083908590614ced565b5f8180602001905181019061182c9190615106565b90505f816060015180602001905181019061184791906151ba565b509050336001600160a01b0316611861826020015161263d565b6001600160a01b03161461189c5760405162461bcd60e51b8152602060048201526002602482015261209960f11b60448201526064016105e2565b6118a58361266c565b505050565b6118b261193f565b600480546001600160a01b038381166001600160a01b03198316179092556040519116907f1b092cca381ac00a07e1226c164f47c475d212f5e55699475a7f411811f77dd4906107009083908590614ced565b61190d61193f565b6001600160a01b03811661193657604051631e4fbdf760e01b81525f60048201526024016105e2565b61059881611f53565b33611948611031565b6001600160a01b031614610e505760405163118cdaa760e01b81523360048201526024016105e2565b6040516001600160a01b038381166024830152604482018390526118a591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506128ad565b6003546040516335313c2160e11b81526001600160a01b0384811660048301525f921690636a627842906024016020604051808303815f875af1158015611a19573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a3d9190614cab565b90505f604051611a4c9061485b565b604051809103905ff080158015611a65573d5f5f3e3d5ffd5b506040805160a0810182526001600160a01b038089168083525f8181526020818152858220548416818601819052938716858701528282529081528451634f4ce61d60e01b815294519596509294606086019492939192634f4ce61d9260048083019391928290030181865afa158015611ae1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b059190614cd2565b6001600160a01b039081169190911482529415156020918201525f84815260058252604090819020835181549088166001600160a01b03199182161782559284015160018201805491891691909416179092558201516002909101805460608401516080909401511515600160a81b0260ff60a81b19941515600160a01b026001600160a81b031990921693909716929092179190911791909116939093179092559392505050565b5f81815260056020908152604080832060010154815163c6e1c7c960e01b815291516001600160a01b039091169263c6e1c7c992600480820193918290030181865afa158015611c00573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c249190614cd2565b92915050565b6040516001600160a01b038481166024830152838116604483015260648201839052611c639186918216906323b872dd9060840161199e565b50505050565b865f03611c8257611c7b8689846119d0565b9650611e45565b6003546040516331a9108f60e11b8152600481018990525f916001600160a01b031690636352211e90602401602060405180830381865afa158015611cc9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ced9190614cd2565b9050886001600160a01b0316816001600160a01b03161480611d82575060035460405163020604bf60e21b8152600481018a90526001600160a01b038b811692169063081812fc90602401602060405180830381865afa158015611d53573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d779190614cd2565b6001600160a01b0316145b80611df9575060035460405163e985e9c560e01b81526001600160a01b039091169063e985e9c590611dba9084908d90600401614ced565b602060405180830381865afa158015611dd5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df99190614d80565b611e2a5760405162461bcd60e51b8152602060048201526002602482015261413360f01b60448201526064016105e2565b505f878152600560205260409020546001600160a01b031695505b8215611e5a57611e5a883085610a428b612566565b611e648789612459565b82841115611ef557611e758761263d565b6001600160a01b0316637a05edcd611e8c89612566565b611e968688614d51565b30611ea48c8e8c8c8a612919565b6040518563ffffffff1660e01b8152600401611ec39493929190615028565b5f604051808303815f87803b158015611eda575f5ffd5b505af1158015611eec573d5f5f3e3d5ffd5b505050506112e1565b6112e16040518060a00160405280306001600160a01b03168152602001611f1b8a612566565b6001600160a01b031681526020015f8152602001611f3c8a8c8a8a88612919565b81525f60209182015260405161179992910161505a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00611c24565b611ff36129f2565b61059881612a17565b5f836001600160a01b0316632acada4d6040518163ffffffff1660e01b81526004015f60405180830381865afa158015612038573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261205f91908101906152a1565b90505f815f8151811061207457612074615396565b6020908102919091010151516040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa1580156120c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120eb9190614cab565b90506121026001600160a01b038316883088611c2a565b6040516370a0823160e01b81523060048201525f906001600160a01b038816906370a0823190602401602060405180830381865afa158015612146573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061216a9190614cab565b6040516370a0823160e01b81523060048201529091506121f690889084906001600160a01b038716906370a0823190602401602060405180830381865afa1580156121b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121db9190614cab565b6121e59190614d51565b6001600160a01b03861691906125b8565b6040516370a0823160e01b81523060048201526001600160a01b038089169163b08d033391869186918316906370a0823190602401602060405180830381865afa158015612246573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061226a9190614cab565b6122749190614d51565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018890526064015f604051808303815f87803b1580156122be575f5ffd5b505af11580156122d0573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201528392506001600160a01b038a1691506370a0823190602401602060405180830381865afa158015612318573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061233c9190614cab565b61082c9190614d51565b5f83602001516001600160801b03165f036123625750816123d7565b602084015184516001600160801b0391821691612380911685614d1b565b61238a9190614d32565b90508180156123c7575082845f01516001600160801b031685602001516001600160801b0316836123bb9190614d1b565b6123c59190614d32565b105b156123d7576108438160016153aa565b9392505050565b5f60605f5f5f5f5f878060200190518101906123fa91906153bd565b9450945094509450945080965088811115612413578896505b6040805160208101879052908101859052606081018490526080810183905260a0810188905260c001604051602081830303815290604052955050505050509250929050565b5f6124638361263d565b90505f8190505f816001600160a01b031663c35905c66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124ca9190614cab565b90508015610bfe575f826001600160a01b0316633013ce296040518163ffffffff1660e01b8152600401602060405180830381865afa15801561250f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125339190614cd2565b905061254a6001600160a01b038216863085611c2a565b61255e6001600160a01b03821685846125b8565b505050505050565b5f8181526005602090815260408083206001015481516338d52e0f60e01b815291516001600160a01b03909116926338d52e0f92600480820193918290030181865afa158015611c00573d5f5f3e3d5ffd5b604051636eb1769f60e11b81525f906001600160a01b0385169063dd62ed3e906125e89030908790600401614ced565b602060405180830381865afa158015612603573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126279190614cab565b9050611c63848461263885856153aa565b612a1f565b5f60015f61264a84612566565b6001600160a01b03908116825260208201929092526040015f20541692915050565b5f60065460ff166126a45760405162461bcd60e51b8152602060048201526002602482015261573160f01b60448201526064016105e2565b6006805460ff191690555f828060200190518101906126c39190615106565b90505f81606001518060200190518101906126de91906151ba565b506020818101515f9081526005909152604081205482519293506001600160a01b031691600181111561271357612713614f11565b0361274a575f61272286612aae565b90508015612744576040830151612744906001600160a01b0384169083611971565b50610bfe565b60018251600181111561275f5761275f614f11565b03612880575f5f61276f87612f06565b909250905081156127ed57600454600160b01b900461ffff16156127d3576004545f90612710906127ab90600160b01b900461ffff1685614d1b565b6127b59190614d32565b90506127c38485835f6133f5565b90506127cf8184614d51565b9250505b60408401516127ed906001600160a01b0385169084611971565b8015612879575f6128018560200151612566565b600454909150600160b01b900461ffff161561285d576004545f906127109061283590600160b01b900461ffff1685614d1b565b61283f9190614d32565b905061284d8583835f6133f5565b90506128598184614d51565b9250505b6040850151612877906001600160a01b0383169084611971565b505b5050610bfe565b60405162461bcd60e51b81526020600482015260026024820152614e4960f01b60448201526064016105e2565b5f5f60205f8451602086015f885af1806128cc576040513d5f823e3d81fd5b50505f513d915081156128e35780600114156128f0565b6001600160a01b0384163b155b15611c6357604051635274afe760e01b81526001600160a01b03851660048201526024016105e2565b6040805160e0810182525f81526020810187905260035482516331a9108f60e11b8152600481018990526060938301916001600160a01b031690636352211e90602401602060405180830381865afa158015612977573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061299b9190614cd2565b6001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001838152506040516020016129d891906153f9565b604051602081830303815290604052905095945050505050565b6129fa6134c4565b610e5057604051631afcd79f60e31b815260040160405180910390fd5b61190d6129f2565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052612a7084826134dd565b611c63576040516001600160a01b0384811660248301525f6044830152612aa491869182169063095ea7b39060640161199e565b611c6384826128ad565b5f5f82806020019051810190612ac49190615106565b90505f8160600151806020019051810190612adf91906151ba565b5090505f8160c00151806020019051810190612afb9190615421565b50506020838101515f9081526005909152604090205460a08401516004549293506001600160a01b0390911691600160a01b900461ffff1615612b83576004545f9061271090612b5690600160a01b900461ffff1684614d1b565b612b609190614d32565b9050612b738387602001518360016133f5565b9050612b7f8183614d51565b9150505b5f5f612b9487602001518488613526565b9250509150818660800151612ba99190614d51565b97505f612c16856001600160a01b03166394cc699e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612beb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c0f9190614cd2565b8389613882565b90505f88608001518960400151612c2d91906153aa565b90505f818811612c3d5781612c3f565b875b90505f612c4f8a60200151611bae565b6020808c01515f90815260059091526040902060020154909150612c80906001600160a01b03808416911686611971565b60208a810180515f90815260059092526040808320600201549151835291829020600101549151630cb69e2760e41b81526001600160a01b039283166004820152602481018590526044810187905230606482015291169063cb69e270906084015f604051808303815f87803b158015612cf8575f5ffd5b505af1158015612d0a573d5f5f3e3d5ffd5b505050505f831115612d9a57612d9a612d268b6020015161263d565b6001600160a01b03166367e828bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d859190614cd2565b60208d01516001600160a01b03169085611971565b60208b01516040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015612de2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e069190614cab565b90508015612e965760035460208c01516040516331a9108f60e11b81526004810191909152612e96916001600160a01b031690636352211e90602401602060405180830381865afa158015612e5d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e819190614cd2565b60208e01516001600160a01b03169083611971565b8a604001516001600160a01b03168b602001517fca43cc4f42a597401985d567370a3b0120f590a4aa4a4e34cbad1f3a06239a66898887604051612eed939291909283526020830191909152604082015260600190565b60405180910390a3505050505050505050505050919050565b5f5f5f83806020019051810190612f1d9190615106565b90505f5f8260600151806020019051810190612f3991906151ba565b915091505f5f82806020019051810190612f53919061544c565b915091505f5f82806020019051810190612f6d91906153bd565b945050505091505f811115612f9357612f9386606001513083610a428a60200151612566565b6020868101515f90815260058252604090819020815160a08101835281546001600160a01b0390811682526001830154811694820185905260029092015491821681840181905260ff600160a01b8404811615156060840152600160a81b909304909216151560808201529151633d417d2d60e01b8152600481018890526024810191909152909190633d417d2d906044016020604051808303815f875af1158015613041573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130659190614cab565b5060408082015160208301519151633879b0c560e01b81526001600160a01b03928316600482015260248101869052306044820152911690633879b0c5906064015f604051808303815f87803b1580156130bd575f5ffd5b505af11580156130cf573d5f5f3e3d5ffd5b505050505f5f6130e88960200151845f01518789613bcf565b60208b8101515f90815260059091526040902060020154919d508d93509150600160a01b900460ff161561327a5782608001511561318f5761318c835f01516001600160a01b0316634f4ce61d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613162573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131869190614cd2565b82613f96565b90505b6020830151604051635d043b2960e11b815260048101839052306024820181905260448201526001600160a01b039091169063ba087652906064016020604051808303815f875af11580156131e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061320a9190614cab565b5060208a01516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613253573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132779190614cab565b90505b5f8a608001518b6040015161328f91906153aa565b9050818111156132cd575f6132ba8b865f01518e6020015186866132b39190614d51565b888d614197565b909e5090506132c981846153aa565b9250505b808210156133035760405162461bcd60e51b81526020600482015260036024820152622120a960e91b60448201526064016105e2565b801561338d5761338d6133198b6020015161263d565b6001600160a01b03166367e828bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613354573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133789190614cd2565b60208d01516001600160a01b03169083611971565b6133978183614d51565b9b5089604001516001600160a01b03168a602001517f6f840f37dfd9cfb60428f847c7673096e908f32aae6692556d0c4ad04f0f9566886040516133dd91815260200190565b60405180910390a35050505050505050505050915091565b5f5f83118015613414575060065461010090046001600160a01b031615155b1561084357600654613438906001600160a01b038681169161010090041685611971565b600654600480546040516321c72b6760e11b81526001600160a01b038981169382019390935287831660248201526044810187905290821660648201528415156084820152610100909204169063438e56ce9060a4015f604051808303815f87803b1580156134a5575f5ffd5b505af11580156134b7573d5f5f3e3d5ffd5b5094979650505050505050565b5f6134cd611fc3565b54600160401b900460ff16919050565b5f5f5f5f60205f8651602088015f8a5af192503d91505f51905082801561351c5750811561350e578060011461351c565b5f866001600160a01b03163b115b9695505050505050565b5f5f5f5f5f8560c001518060200190518101906135439190615421565b6020898101515f818152600590925260408220600201549396509194509250829161357c91908c908c90600160a81b900460ff1661438e565b60208a8101515f908152600590915260408082205490516370a0823160e01b8152306004820152939550919350916001600160a01b03909116906370a0823190602401602060405180830381865afa1580156135da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135fe9190614cab565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038516906370a0823190602401602060405180830381865afa158015613645573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136699190614cab565b60025460808c01516020808e01515f9081526005909152604090205492935061369f926001600160a01b039081169216906125b8565b6002546136b9906001600160a01b038681169116856125b8565b60025460208b8101515f908152600590915260408082205460808e01519151634230a70d60e11b81526001600160a01b0391821660048201526024810192909252878116604483015260648201879052608482019290925260a4810189905260c481018890529116906384614e1a9060e4016020604051808303815f875af1158015613747573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061376b9190614cab565b5060208a8101515f90815260059091526040908190205490516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156137c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137e89190614cab565b6137f29083614d51565b6040516370a0823160e01b81523060048201529099506001600160a01b038516906370a0823190602401602060405180830381865afa158015613837573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061385b9190614cab565b6138659082614d51565b97506138718882614d51565b965050505050505093509350939050565b5f5f6138918360200151611bae565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156138d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138fc9190614cab565b90506139126001600160a01b03871683836125b8565b604051636e553f6560e01b8152600481018290523060248201526001600160a01b03831690636e553f65906044016020604051808303815f875af115801561395c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139809190614cab565b6020858101515f90815260059091526040902060020154909350600160a01b900460ff1680156139af57505f85115b15613bc6576020848101515f90815260059091526040902060020154600160a81b900460ff1615613b36576020808501515f90815260058252604090819020548151634f4ce61d60e01b8152915160609384936001600160a01b0390931692634f4ce61d92600480830193928290030181865afa158015613a32573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a569190614cd2565b6001600160a01b031663ee9c79da8884846040518463ffffffff1660e01b8152600401613a859392919061547a565b5f604051808303815f87803b158015613a9c575f5ffd5b505af1158015613aae573d5f5f3e3d5ffd5b505050506020868101515f90815260059091526040908190206001015490516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015613b0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b319190614cab565b965050505b6020848101515f9081526005909152604090819020600101549051635d043b2960e11b815260048101879052306024820181905260448201526001600160a01b039091169063ba087652906064016020604051808303815f875af1158015613ba0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bc49190614cab565b505b50509392505050565b5f5f5f5f84806020019051810190613be791906153bd565b505092509250505f876001600160a01b03166394cc699e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c2b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c4f9190614cd2565b90505f886001600160a01b0316634f4ce61d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c8e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cb29190614cd2565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038b16906370a0823190602401602060405180830381865afa158015613cf9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d1d9190614cab565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038416906370a0823190602401602060405180830381865afa158015613d64573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d889190614cab565b90505f613d948d611bae565b604051635d043b2960e11b8152600481018d9052306024820181905260448201526001600160a01b03919091169063ba087652906064016020604051808303815f875af1158015613de7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e0b9190614cab565b600254909150613e28906001600160a01b038781169116836125b8565b600254604051631fd8ecd960e01b81526001600160a01b038e8116600483015260248201849052604482018a90526064820189905242608483015290911690631fd8ecd99060a4015f604051808303815f87803b158015613e87575f5ffd5b505af1158015613e99573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201528592506001600160a01b038f1691506370a0823190602401602060405180830381865afa158015613ee1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f059190614cab565b613f0f9190614d51565b6040516370a0823160e01b815230600482015290995082906001600160a01b038616906370a0823190602401602060405180830381865afa158015613f56573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7a9190614cab565b613f849190614d51565b97505050505050505094509492505050565b5f5f836001600160a01b0316632acada4d6040518163ffffffff1660e01b81526004015f60405180830381865afa158015613fd3573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613ffa91908101906152a1565b6040805160018082528183019092529192505f91906020808301908036833750506040805160018082528183019092529293505f92915060208083019080368337019050509050825f8151811061405357614053615396565b60200260200101515f0151825f8151811061407057614070615396565b60200260200101906001600160a01b031690816001600160a01b0316815250506064815f815181106140a4576140a4615396565b60ff9092166020928302919091019091015260405163774e3ced60e11b81526001600160a01b0387169063ee9c79da906140e69088908690869060040161547a565b5f604051808303815f87803b1580156140fd575f5ffd5b505af115801561410f573d5f5f3e3d5ffd5b50505050815f8151811061412557614125615396565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015614173573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061351c9190614cab565b805182905f90859082906141b490860160209081019087016153bd565b5093505050505f8211156143815760208a8101515f90815260059091526040812060020154600160a01b900460ff16156143605760208b8101515f90815260059091526040908190206001015490516363737ac960e11b8152600481018590526001600160a01b039091169061427a908c9083908b90829063c6e6f59290602401602060405180830381865afa158015614250573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142749190614cab565b876145b3565b506040516370a0823160e01b81523060048201529096506001600160a01b0382169063ba0876529082906370a0823190602401602060405180830381865afa1580156142c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142ec9190614cab565b6040516001600160e01b031960e084901b1681526004810191909152306024820181905260448201526064016020604051808303815f875af1158015614334573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143589190614cab565b915050614373565b61436d8a8a8986866145b3565b90955090505b61437d81856153aa565b9350505b5050965096945050505050565b5f8481526005602052604090206001810154600290910154849184916001600160a01b0390911690600160a01b900460ff16156145a9579150816143dc6001600160a01b03871682846125b8565b604051636e553f6560e01b8152600481018390523060248201526001600160a01b03821690636e553f65906044016020604051808303815f875af1158015614426573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061444a9190614cab565b915083156145a9575f87815260056020908152604091829020548251634f4ce61d60e01b815292516001600160a01b0390911692634f4ce61d9260048083019391928290030181865afa1580156144a3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144c79190614cd2565b92506144dd6001600160a01b03821684846125b8565b60405163b08d033360e01b81526001600160a01b038281166004830152602482018490525f604483015284169063b08d0333906064015f604051808303815f87803b15801561452a575f5ffd5b505af115801561453c573d5f5f3e3d5ffd5b50506040516370a0823160e01b81523060048201526001600160a01b03861692506370a082319150602401602060405180830381865afa158015614582573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145a69190614cab565b91505b5094509492505050565b5f5f5f876001600160a01b031663822631d86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156145f2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146169190614cd2565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038a16906370a0823190602401602060405180830381865afa15801561465d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146819190614cab565b9050868515614736575f896001600160a01b03168b6001600160a01b0316106146aa578a6146ac565b895b90505f816001600160a01b03168b6001600160a01b0316146146ea57670de0b6b3a76400006146db898b614d1b565b6146e59190614d32565b614707565b876146fd8a670de0b6b3a7640000614d1b565b6147079190614d32565b90506064614716826069614d1b565b6147209190614d32565b925089831161472f5782614731565b895b925050505b61474a6001600160a01b038b1684836125b8565b6040516383e4b89f60e01b81526001600160a01b038b811660048301528a8116602483015260448201839052606482018990523060848301528416906383e4b89f9060a4016020604051808303815f875af11580156147ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147cf9190614cab565b6040516370a0823160e01b81523060048201529094506001600160a01b038b16906370a0823190602401602060405180830381865afa158015614814573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148389190614cab565b6148429083614d51565b61484c9089614d51565b94505050509550959350505050565b6107ec8061550f83390190565b6001600160a01b0381168114610598575f5ffd5b5f6020828403121561488c575f5ffd5b81356123d781614868565b5f5f604083850312156148a8575f5ffd5b82356148b381614868565b915060208301356148c381614868565b809150509250929050565b5f5f5f5f608085870312156148e1575f5ffd5b8435935060208501356148f381614868565b9250604085013561490381614868565b9396929550929360600135925050565b8015158114610598575f5ffd5b5f5f5f60608486031215614932575f5ffd5b833561493d81614868565b9250602084013561494d81614868565b9150604084013561495d81614913565b809150509250925092565b5f5f5f5f6080858703121561497b575f5ffd5b843593506020850135925060408501359150606085013561499b81614868565b939692955090935050565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b03811182821017156149dc576149dc6149a6565b60405290565b60405160e081016001600160401b03811182821017156149dc576149dc6149a6565b604051601f8201601f191681016001600160401b0381118282101715614a2c57614a2c6149a6565b604052919050565b5f6001600160401b03821115614a4c57614a4c6149a6565b50601f01601f191660200190565b5f82601f830112614a69575f5ffd5b8135614a7c614a7782614a34565b614a04565b818152846020838601011115614a90575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f5f5f60e0888a031215614ac2575f5ffd5b873596506020880135614ad481614868565b955060408801359450606088013593506080880135925060a0880135614af981614913565b915060c08801356001600160401b03811115614b13575f5ffd5b614b1f8a828b01614a5a565b91505092959891949750929550565b5f60208284031215614b3e575f5ffd5b813561ffff811681146123d7575f5ffd5b5f5f5f5f5f5f5f5f610100898b031215614b67575f5ffd5b883597506020890135614b7981614868565b965060408901359550606089013594506080890135935060a0890135925060c0890135614ba581614913565b915060e08901356001600160401b03811115614bbf575f5ffd5b614bcb8b828c01614a5a565b9150509295985092959890939650565b5f5f5f60608486031215614bed575f5ffd5b8335614bf881614868565b92506020840135614c0881614868565b9150604084013561495d81614868565b5f5f5f60608486031215614c2a575f5ffd5b833592506020840135915060408401356001600160401b03811115614c4d575f5ffd5b614c5986828701614a5a565b9150509250925092565b5f60208284031215614c73575f5ffd5b81356001600160401b03811115614c88575f5ffd5b61084384828501614a5a565b5f60208284031215614ca4575f5ffd5b5035919050565b5f60208284031215614cbb575f5ffd5b5051919050565b8051614ccd81614868565b919050565b5f60208284031215614ce2575f5ffd5b81516123d781614868565b6001600160a01b0392831681529116602082015260400190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417611c2457611c24614d07565b5f82614d4c57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115611c2457611c24614d07565b602080825260029082015261057360f41b604082015260600190565b5f60208284031215614d90575f5ffd5b81516123d781614913565b805163ffffffff81168114614ccd575f5ffd5b80516001600160401b0381168114614ccd575f5ffd5b80516001600160801b0381168114614ccd575f5ffd5b5f60408284031215614dea575f5ffd5b604080519081016001600160401b0381118282101715614e0c57614e0c6149a6565b604052905080614e1b83614dc4565b8152614e2960208401614dc4565b60208201525092915050565b5f5f5f5f5f5f868803610180811215614e4c575f5ffd5b8751602089015160408a01519198509650945060a0605f1982011215614e70575f5ffd5b50614e796149ba565b614e8560608901614d9b565b8152614e9360808901614d9b565b6020820152614ea460a08901614dae565b6040820152614eb560c08901614dae565b6060820152614ec660e08901614dae565b60808201529250614edb886101008901614dda565b9150614eeb886101408901614dda565b90509295509295509295565b5f60408284031215614f07575f5ffd5b6123d78383614dda565b634e487b7160e01b5f52602160045260245ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b828152604060208201525f6108436040830184614f25565b5f815160028110614f8a57634e487b7160e01b5f52602160045260245ffd5b80845250602082015160208401526040820151614fb260408501826001600160a01b03169052565b506060820151614fcd60608501826001600160a01b03169052565b506080820151608084015260a082015160a084015260c082015160e060c085015261084360e0850182614f25565b604081525f61500d6040830185614f6b565b828103602084015261501f8185614f25565b95945050505050565b6001600160a01b03858116825260208201859052831660408201526080606082018190525f9061351c90830184614f25565b6020815260018060a01b03825116602082015260018060a01b036020830151166040820152604082015160608201525f606083015160a060808401526150a360c0840182614f25565b9050608084015160a08401528091505092915050565b5f82601f8301126150c8575f5ffd5b81516150d6614a7782614a34565b8181528460208386010111156150ea575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f60208284031215615116575f5ffd5b81516001600160401b0381111561512b575f5ffd5b820160a0818503121561513c575f5ffd5b6151446149ba565b815161514f81614868565b8152602082015161515f81614868565b60208201526040828101519082015260608201516001600160401b03811115615186575f5ffd5b615192868285016150b9565b606083015250608091820151918101919091529392505050565b805160028110614ccd575f5ffd5b5f5f604083850312156151cb575f5ffd5b82516001600160401b038111156151e0575f5ffd5b830160e081860312156151f1575f5ffd5b6151f96149e2565b615202826151ac565b81526020828101519082015261521a60408301614cc2565b604082015261522b60608301614cc2565b60608201526080828101519082015260a0808301519082015260c08201516001600160401b0381111561525c575f5ffd5b615268878285016150b9565b60c083015250809350505060208301516001600160401b0381111561528b575f5ffd5b615297858286016150b9565b9150509250929050565b5f602082840312156152b1575f5ffd5b81516001600160401b038111156152c6575f5ffd5b8201601f810184136152d6575f5ffd5b80516001600160401b038111156152ef576152ef6149a6565b6152fe60208260051b01614a04565b80828252602082019150602060a0840285010192508683111561531f575f5ffd5b6020840193505b8284101561351c5760a0848803121561533d575f5ffd5b6153456149ba565b845161535081614868565b81526020858101519082015260408086015190820152606085015161537481614868565b606082015260808581015190820152825260a090930192602090910190615326565b634e487b7160e01b5f52603260045260245ffd5b80820180821115611c2457611c24614d07565b5f5f5f5f5f60a086880312156153d1575f5ffd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b604081525f61540b6040830184614f6b565b8281036020938401525f81529190910192915050565b5f5f5f60608486031215615433575f5ffd5b5050815160208301516040909301519094929350919050565b5f5f6040838503121561545d575f5ffd5b825160208401519092506001600160401b0381111561528b575f5ffd5b5f60608201858352606060208401528085518083526080850191506020870192505f5b818110156154c45783516001600160a01b031683526020938401939092019160010161549d565b50508381036040850152845180825260209182019250908501905f5b8181101561550157825160ff168452602093840193909201916001016154e0565b509197965050505050505056fe6080604052348015600e575f5ffd5b503380603357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b603a81603f565b50608e565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107518061009b5f395ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c80633879b0c514610064578063715018a6146100795780638da5cb5b14610081578063cb69e2701461009f578063d9caed12146100b2578063f2fde38b146100c5575b5f5ffd5b6100776100723660046105e4565b6100d8565b005b610077610142565b5f54604080516001600160a01b039092168252519081900360200190f35b6100776100ad366004610623565b610155565b6100776100c036600461066a565b610250565b6100776100d33660046106a8565b6102e5565b6100e0610327565b604051636a0eee4b60e11b8152600481018390526001600160a01b03828116602483015284169063d41ddc96906044015f604051808303815f87803b158015610127575f5ffd5b505af1158015610139573d5f5f3e3d5ffd5b50505050505050565b61014a610327565b6101535f610353565b565b61015d610327565b6101d28483866001600160a01b031663c6e1c7c96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561019e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101c291906106ca565b6001600160a01b031691906103a2565b6040516372f89d8b60e11b815260048101849052602481018390526001600160a01b03828116604483015285169063e5f13b16906064016020604051808303815f875af1158015610225573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061024991906106e5565b5050505050565b610258610327565b801561026457806102ca565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156102a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ca91906106e5565b90506102e06001600160a01b038416838361042f565b505050565b6102ed610327565b6001600160a01b03811661031b57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61032481610353565b50565b5f546001600160a01b031633146101535760405163118cdaa760e01b8152336004820152602401610312565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa1580156103ef573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061041391906106e5565b9050610429848461042485856106fc565b61048e565b50505050565b6040516001600160a01b038381166024830152604482018390526102e091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050610519565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526104df8482610585565b610429576040516001600160a01b0384811660248301525f604483015261051391869182169063095ea7b39060640161045c565b61042984825b5f5f60205f8451602086015f885af180610538576040513d5f823e3d81fd5b50505f513d9150811561054f57806001141561055c565b6001600160a01b0384163b155b1561042957604051635274afe760e01b81526001600160a01b0385166004820152602401610312565b5f5f5f5f60205f8651602088015f8a5af192503d91505f5190508280156105c4575081156105b657806001146105c4565b5f866001600160a01b03163b115b93505050505b92915050565b6001600160a01b0381168114610324575f5ffd5b5f5f5f606084860312156105f6575f5ffd5b8335610601816105d0565b9250602084013591506040840135610618816105d0565b809150509250925092565b5f5f5f5f60808587031215610636575f5ffd5b8435610641816105d0565b93506020850135925060408501359150606085013561065f816105d0565b939692955090935050565b5f5f5f6060848603121561067c575f5ffd5b8335610687816105d0565b92506020840135610697816105d0565b929592945050506040919091013590565b5f602082840312156106b8575f5ffd5b81356106c3816105d0565b9392505050565b5f602082840312156106da575f5ffd5b81516106c3816105d0565b5f602082840312156106f5575f5ffd5b5051919050565b808201808211156105ca57634e487b7160e01b5f52601160045260245ffdfea2646970667358221220d3f06c840010f1b4330932f04888a2c5cb2ec352e6b57005fb4e462ee219090c64736f6c634300081c0033a264697066735822122081ff3e245264d7ffa7d7599459da7ab4a21d6751c242a691f260803337130e3164736f6c634300081c0033