0 txs
9 calls
constructor
No constructor.
functions
convertedPath
viewfunction convertedPath(address[] _path) view returns (bytes packedData)
convertedPathReversed
viewfunction convertedPathReversed(address[] _path) view returns (bytes packedData)
exchangeRouter
viewfunction exchangeRouter() view returns (address)
feeTier
viewfunction feeTier(address, address) view returns (uint24)
getAmountsForLiquidity
purefunction getAmountsForLiquidity(uint160 _sqrtPrice, int24 _tickLower, int24 _tickUpper, uint128 _liquidity) pure returns (uint256, uint256)
getInputAmount
purefunction getInputAmount(uint256, address, address) pure returns (bool, uint256)
getLiquidityForAmounts
purefunction getLiquidityForAmounts(uint160 _sqrtPrice, int24 _tickLower, int24 _tickUpper, uint256 _amount0Desired, uint256 _amount1Desired) pure returns (uint128)
getOutputAmount
purefunction getOutputAmount(uint256, address, address) pure returns (bool, uint256)
getSqrtPrice
viewfunction getSqrtPrice(address _token0, address _token1, uint24 _feeTier) view returns (uint160 _sqrtPrice)
getSqrtPriceAtTick
purefunction getSqrtPriceAtTick(int24 _tick) pure returns (uint160)
getSqrtPriceX96
viewfunction getSqrtPriceX96(address[] _path) view returns (uint256[] _sqrtPriceX96, address[] _firstToken)
isPathValid
viewfunction isPathValid(address[] _path) view returns (bool _result)
liquidityPoolFactory
viewfunction liquidityPoolFactory() view returns (address)
MAX_ITERS
viewfunction MAX_ITERS() view returns (uint256)
name
viewfunction name() view returns (string)
ONE_HUNDRED_PERCENT
viewfunction ONE_HUNDRED_PERCENT() view returns (uint256)
owner
viewfunction owner() view returns (address)
positionManager
viewfunction positionManager() view returns (address)
PRECISION
viewfunction PRECISION() view returns (uint256)
quoterAddress
viewfunction quoterAddress() view returns (address)
TOLERANCE
viewfunction TOLERANCE() view returns (uint256)
wrappedNativeToken
viewfunction wrappedNativeToken() view returns (address)
getExactInput
nonpayablefunction getExactInput(address[] _path, uint256 _amountIn) returns (bool, uint256)
getExactOutput
nonpayablefunction getExactOutput(address[] _path, uint256 _amountOut) returns (bool, uint256)
initialize
nonpayablefunction initialize(string _name, address _exchangeRouter, address _quoterAddress)
renounceOwnership
nonpayablefunction renounceOwnership()
setExchangeRouter
nonpayablefunction setExchangeRouter(address _exchangeRouter)
setFeeTier
nonpayablefunction setFeeTier(address _firstToken, address _secondToken, uint24 _feeTier)
setLiquidityPoolFactory
nonpayablefunction setLiquidityPoolFactory()
setMaxIters
nonpayablefunction setMaxIters(uint256 _maxIters)
setPositionManager
nonpayablefunction setPositionManager(address _positionManager)
setPrecision
nonpayablefunction setPrecision(uint256 _precision)
setQuoter
nonpayablefunction setQuoter(address _quoterAddress)
setTolerance
nonpayablefunction setTolerance(uint256 _tolerance)
setWrappedNativeToken
nonpayablefunction setWrappedNativeToken()
swap
nonpayablefunction swap(uint256 _inputAmount, uint256 _outputAmount, address[] _path, address _to, uint256 _deadline, bool _isFixedToken) returns (bool _result, uint256[] _amounts)
swapAndAddLiquidity
nonpayablefunction swapAndAddLiquidity(tuple params) returns (uint256 _tokenId, uint256 _remaining0, uint256 _remaining1)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
ExecuteSwap
event ExecuteSwap(bool _swapToken0ToToken1, uint256 _neededSwapAmount, uint256 _receivedAmount, uint256 _totalAmount0, uint256 _totalAmount1)
FindOptimalSwapAmount
event FindOptimalSwapAmount(uint256 _newUserRatio, uint256 _newTargetRatio, uint256 _targetRatio)
GetQuoteResult
event GetQuoteResult(address tokenIn, address tokenOut, uint24 fee, uint256 amountIn, uint256 amountOut)
Initialized
event Initialized(uint8 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Swap
event Swap(address[] path, uint256[] amounts, address receiver)
SwapAndAddLiquidity
event SwapAndAddLiquidity((uint256 tokenId, address token0, address token1, uint24 feeTier, int24 tickLower, int24 tickUpper, uint256 amount0Desired, uint256 amount1Desired, address user) _params, uint256 _remaining0, uint256 _remaining1, uint256 _tokenId)
SwapFailed
event SwapFailed((address tokenIn, address tokenOut, uint24 fee, address recipient, uint256 deadline, uint256 amountIn, uint256 amountOutMinimum, uint160 sqrtPriceLimitX96) _params)
TotalAmounts
event TotalAmounts(uint256 _totalAmount0, uint256 _totalAmount1)
errors
No errors.
creation bytecode
0x6080604052670de0b6b3a764000060a05534801561001c57600080fd5b50614e188061002c6000396000f3fe608060405234801561001057600080fd5b50600436106101c25760003560e01c806301e65db3146101c75780630337236a1461021057806304fe3fcb1461023b57806306fdde031461025057806311a2f0cb146102655780631580b5e514610285578063176f832e1461028d57806317fcb39b146102a05780631cb85818146102b357806326829bf9146102c65780632a279b28146102d95780633566967d146103015780633c5fd9821461032b578063463fd1af1461033e5780635760f2e3146103515780636145f87614610364578063671c6a2314610377578063715018a61461038a57806378c3168414610392578063791b98bc146103b35780638147b13b146103c6578063838b7ccb146103d95780638779e3d6146103ec578063898830741461040e5780638b1937cd146104285780638da5cb5b1461043b5780639b4bca2414610443578063aaf5eb6814610466578063b0bbcd881461047d578063b18a313f1461049e578063b23e4fc6146104b1578063b52d5b1e146104b9578063b9dc6bfa146104c2578063dd0081c7146104cb578063df71d7f31461040e578063e75d75d5146104d4578063f2fde38b146104e7578063f912c64b146104fa575b600080fd5b6101f76101d5366004613f70565b609c60209081526000928352604080842090915290825290205462ffffff1681565b60405162ffffff90911681526020015b60405180910390f35b61022361021e36600461429b565b61050d565b6040516001600160801b039091168152602001610207565b61024e610249366004613fa8565b610538565b005b61025861059b565b60405161020791906148ec565b609b54610278906001600160a01b031681565b6040516102079190614819565b61024e610629565b61024e61029b36600461438b565b6106d9565b609854610278906001600160a01b031681565b609954610278906001600160a01b031681565b61024e6102d436600461438b565b6106e6565b6102ec6102e7366004614240565b6106f3565b60408051928352602083019190915201610207565b61031461030f366004614024565b610720565b604080519215158352602083019190915201610207565b61024e61033936600461438b565b6107df565b61024e61034c36600461409e565b6107ec565b61024e61035f366004613f38565b610a6e565b610258610372366004613ff2565b610a98565b610278610385366004613fa8565b610bc2565b61024e610d39565b6103a56103a0366004613ff2565b610d43565b6040516102079291906148ac565b609d54610278906001600160a01b031681565b6102786103d4366004614082565b611157565b61024e6103e7366004613f38565b611168565b6103ff6103fa36600461414e565b611247565b60405161020793929190614b8b565b61031461041c3660046143bb565b60016000935093915050565b610314610436366004614024565b611f7b565b610278611fb3565b610456610451366004613ff2565b611fc2565b6040519015158152602001610207565b61046f60a05481565b604051908152602001610207565b61049061048b36600461454b565b6121b9565b6040516102079291906148d1565b6102586104ac366004613ff2565b61255b565b61024e612699565b61046f609f5481565b61046f609e5481565b61046f61271081565b609a54610278906001600160a01b031681565b61024e6104f5366004613f38565b612749565b61024e610508366004613f38565b6127c2565b600061052c8661051c876127ec565b610525876127ec565b8686612aa7565b90505b95945050505050565b610540612b5f565b6001600160a01b039283166000818152609c60208181526040808420969097168352948552858220805462ffffff90951662ffffff199586168117909155908552858220928252919093529290912080549091169091179055565b609780546105a890614cce565b80601f01602080910402602001604051908101604052809291908181526020018280546105d490614cce565b80156106215780601f106105f657610100808354040283529160200191610621565b820191906000526020600020905b81548152906001019060200180831161060457829003601f168201915b505050505081565b610631612b5f565b609960009054906101000a90046001600160a01b03166001600160a01b0316634aa4a4fc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561067f57600080fd5b505afa158015610693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b79190613f54565b609880546001600160a01b0319166001600160a01b0392909216919091179055565b6106e1612b5f565b60a055565b6106ee612b5f565b609e55565b60008061071286610703876127ec565b61070c876127ec565b86612bbe565b915091505b94509492505050565b60008061072c84611fc2565b61073b575060009050806107d8565b609b546000906001600160a01b0316632f80bb1d6107588761255b565b866040518363ffffffff1660e01b81526004016107769291906148ff565b600060405180830381600087803b15801561079057600080fd5b505af11580156107a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107cc91908101906143f1565b50600195509193505050505b9250929050565b6107e7612b5f565b609f55565b600054610100900460ff161580801561080c5750600054600160ff909116105b806108265750303b158015610826575060005460ff166001145b61088e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156108b1576000805461ff0019166101001790555b6108b9612c59565b6108c1612c88565b83516108d4906097906020870190613d50565b50609980546001600160a01b0319166001600160a01b0385169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b15801561092957600080fd5b505afa15801561093d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109619190613f54565b609a80546001600160a01b03199081166001600160a01b0393841617909155609b8054909116848316179055609954604080516312a9293f60e21b815290519190921691634aa4a4fc916004808301926020929190829003018186803b1580156109ca57600080fd5b505afa1580156109de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a029190613f54565b609880546001600160a01b0319166001600160a01b03929092169190911790558015610a68576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610a76612b5f565b609d80546001600160a01b0319166001600160a01b0392909216919091179055565b606081600081518110610abb57634e487b7160e01b600052603260045260246000fd5b6020026020010151604051602001610ad3919061479e565b60408051601f19818403018152919052905060015b8251811015610bbc57600083610aff600184614c74565b81518110610b1d57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000848381518110610b4957634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b038085166000908152609c84526040808220928416825291845281902054905191935062ffffff1691610b9591879184918691016147d2565b60405160208183030381529060405294505050508080610bb490614d03565b915050610ae8565b50919050565b609a54604051630b4c774160e11b815260009182916001600160a01b0390911690631698ee8290610bfb9088908890889060040161482d565b60206040518083038186803b158015610c1357600080fd5b505afa158015610c27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4b9190613f54565b60408051600481526024810182526020810180516001600160e01b0316633850c7bd60e01b179052905191925060009182916001600160a01b03851691610c9291906147b6565b600060405180830381855afa9150503d8060008114610ccd576040519150601f19603f3d011682016040523d82523d6000602084013e610cd2565b606091505b509150915081610d1a5760405162461bcd60e51b815260206004820152601360248201527204661696c656420746f2067657420736c6f743606c1b6044820152606401610885565b80806020019051810190610d2e9190613f54565b979650505050505050565b610d41612b5f565b565b60608060008060005b60018651610d5a9190614c74565b81101561114f57609a5486516001600160a01b0390911690631698ee8290889084908110610d9857634e487b7160e01b600052603260045260246000fd5b602002602001015188846001610dae9190614c1d565b81518110610dcc57634e487b7160e01b600052603260045260246000fd5b6020026020010151609c60008b8781518110610df857634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008b876001610e309190614c1d565b81518110610e4e57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900462ffffff166040518463ffffffff1660e01b8152600401610ea49392919061482d565b60206040518083038186803b158015610ebc57600080fd5b505afa158015610ed0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef49190613f54565b9250826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610f2f57600080fd5b505afa158015610f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6791906142f5565b505089516001600160a01b03909516965086948a945086935083109150610fa0905057634e487b7160e01b600052603260045260246000fd5b602002602001018181525050858181518110610fcc57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561101657600080fd5b505afa15801561102a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104e9190613f54565b6001600160a01b031614156110ca5785818151811061107d57634e487b7160e01b600052603260045260246000fd5b60200260200101518482815181106110a557634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b03168152505061113d565b856110d6826001614c1d565b815181106110f457634e487b7160e01b600052603260045260246000fd5b602002602001015184828151811061111c57634e487b7160e01b600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250505b8061114781614d03565b915050610d4c565b505050915091565b6000611162826127ec565b92915050565b806001600160a01b03811661118f5760405162461bcd60e51b815260040161088590614921565b611197612b5f565b609980546001600160a01b0319166001600160a01b0384169081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156111eb57600080fd5b505afa1580156111ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112239190613f54565b609a80546001600160a01b0319166001600160a01b03929092169190911790555050565b6000806000611254612cb7565b609a54602085015160408087015160608801519151630b4c774160e11b81526000946001600160a01b031693631698ee829361129493919260040161482d565b60206040518083038186803b1580156112ac57600080fd5b505afa1580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e49190613f54565b905084602001516001600160a01b0316816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561132d57600080fd5b505afa158015611341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113659190613f54565b6001600160a01b0316146113a35760c0850180516020870180516040890180516001600160a01b039081169093529116905260e08701805190925290525b84511561157f57609d54855160405163133f757160e31b81526004810191909152600091829182916001600160a01b0316906399fbab88906024016101806040518083038186803b1580156113f757600080fd5b505afa15801561140b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142f91906145c8565b505050505096509650965050505050876060015162ffffff168362ffffff16146114a95760405162461bcd60e51b815260206004820152602560248201527f556e69737761705633436f6e6e6563746f723a204665652074696572206d69736044820152640dac2e8c6d60db1b6064820152608401610885565b876080015160020b8260020b146115125760405162461bcd60e51b815260206004820152602760248201527f556e69737761705633436f6e6e6563746f723a205469636b206c6f776572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608401610885565b8760a0015160020b8160020b1461157b5760405162461bcd60e51b815260206004820152602760248201527f556e69737761705633436f6e6e6563746f723a205469636b207570706572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608401610885565b5050505b6115a733308760c0015188602001516001600160a01b0316612d11909392919063ffffffff16565b6115cf33308760e0015188604001516001600160a01b0316612d11909392919063ffffffff16565b602085015160995460c087015160405163095ea7b360e01b81526001600160a01b039384169363095ea7b39361160a93911691600401614855565b602060405180830381600087803b15801561162457600080fd5b505af1158015611638573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165c9190614066565b5060408086015160995460e0880151925163095ea7b360e01b81526001600160a01b039283169363095ea7b393611697931691600401614855565b602060405180830381600087803b1580156116b157600080fd5b505af11580156116c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e99190614066565b506020850151609d5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926117249291169060001990600401614855565b602060405180830381600087803b15801561173e57600080fd5b505af1158015611752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117769190614066565b50604080860151609d54915163095ea7b360e01b81526001600160a01b039182169263095ea7b3926117b19291169060001990600401614855565b602060405180830381600087803b1580156117cb57600080fd5b505af11580156117df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118039190614066565b50600061181d866020015187604001518860600151610bc2565b9050600061184e8261183289608001516127ec565b61183f8a60a001516127ec565b8a60c001518b60e00151612aa7565b9050600080611871846118648b608001516127ec565b61070c8c60a001516127ec565b9150915060008082118015611894575060a05461189090600019614c35565b8311155b156118b9578160a054846118a89190614c55565b6118b29190614c35565b90506118be565b506000195b6000808b60e001511180156118e5575060a0546118dd90600019614c35565b8b60c0015111155b15611912578a60e0015160a0548c60c001516119019190614c55565b61190b9190614c35565b9050611917565b506000195b60008282111561193a576119338860018e60c001518f87612d7c565b90506119a5565b82821080156119495750600083115b156119a5576119a28860008e60e001518f60008a118015611978575060a05461197490600019614c35565b8911155b61198457600019612d7c565b8960a0548a6119939190614c55565b61199d9190614c35565b612d7c565b90505b60018115151415611de3578b51611bdf57609d60009054906101000a90046001600160a01b03166001600160a01b031663883164566040518061016001604052808f602001516001600160a01b031681526020018f604001516001600160a01b031681526020018f6060015162ffffff1681526020018f6080015160020b81526020018f60a0015160020b81526020018f602001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611a659190614819565b60206040518083038186803b158015611a7d57600080fd5b505afa158015611a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab591906143a3565b81526020018f604001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611aea9190614819565b60206040518083038186803b158015611b0257600080fd5b505afa158015611b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3a91906143a3565b815260200160008152602001600081526020018f61010001516001600160a01b03168152602001428152506040518263ffffffff1660e01b8152600401611b819190614ad5565b608060405180830381600087803b158015611b9b57600080fd5b505af1158015611baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd391906144c9565b50919c50611de3915050565b8b600001519a50609d60009054906101000a90046001600160a01b03166001600160a01b031663219f5d176040518060c001604052808f6000015181526020018f602001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611c4f9190614819565b60206040518083038186803b158015611c6757600080fd5b505afa158015611c7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9f91906143a3565b81526020018f604001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611cd49190614819565b60206040518083038186803b158015611cec57600080fd5b505afa158015611d00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2491906143a3565b8152600060208083018290526040808401929092524260609384015281516001600160e01b031960e087901b168152845160048201529084015160248201529083015160448201529082015160648201526080820151608482015260a09091015160a482015260c401606060405180830381600087803b158015611da757600080fd5b505af1158015611dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddf919061420a565b5050505b8b602001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611e139190614819565b60206040518083038186803b158015611e2b57600080fd5b505afa158015611e3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6391906143a3565b99508b604001516001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401611e959190614819565b60206040518083038186803b158015611ead57600080fd5b505afa158015611ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee591906143a3565b98508915611f065760208c0151611f06906001600160a01b0316338c613180565b8815611f255760408c0151611f25906001600160a01b0316338b613180565b7f1f515950ae0671cc6356d5014eac559a4c7093757efea02e83e7c21398fdb5d78c8b8b8e604051611f5a94939291906149a1565b60405180910390a15050505050505050611f746001606555565b9193909250565b600080611f8784611fc2565b611f96575060009050806107d8565b609b546000906001600160a01b031663cdca175361075887610a98565b6033546001600160a01b031690565b600080600283511015611fd85750600092915050565b60005b60018451611fe99190614c74565b8110156121af57609a5484516001600160a01b0390911690631698ee829086908490811061202757634e487b7160e01b600052603260045260246000fd5b60200260200101518684600161203d9190614c1d565b8151811061205b57634e487b7160e01b600052603260045260246000fd5b6020026020010151609c600089878151811061208757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000898760016120bf9190614c1d565b815181106120dd57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a900462ffffff166040518463ffffffff1660e01b81526004016121339392919061482d565b60206040518083038186803b15801561214b57600080fd5b505afa15801561215f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121839190613f54565b91506001600160a01b03821661219d575060009392505050565b806121a781614d03565b915050611fdb565b5060019392505050565b600060606121c5612cb7565b846001600160a01b0381166121ec5760405162461bcd60e51b815260040161088590614921565b60006121fb8a8a8a89896131ab565b909450905083156125445760408051600280825260608201835260009260208301908036833701905050935061226f3330848c60008151811061224e57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316612d11909392919063ffffffff16565b8860008151811061229057634e487b7160e01b600052603260045260246000fd5b602090810291909101015160995460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926122ce929116908690600401614855565b602060405180830381600087803b1580156122e857600080fd5b505af11580156122fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123209190614066565b5060018615151415612417576099546001600160a01b031663c04b8d5961234a848d8d8d8d613267565b6040518263ffffffff1660e01b81526004016123669190614a59565b602060405180830381600087803b15801561238057600080fd5b505af1158015612394573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b891906143a3565b905081846000815181106123dc57634e487b7160e01b600052603260045260246000fd5b602002602001018181525050808460018151811061240a57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b85612507576099546001600160a01b031663f28c049861243a848d8d8d8d6132e4565b6040518263ffffffff1660e01b81526004016124569190614a59565b602060405180830381600087803b15801561247057600080fd5b505af1158015612484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a891906143a3565b905080846000815181106124cc57634e487b7160e01b600052603260045260246000fd5b60200260200101818152505089846001815181106124fa57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b7fe1010d0ab476908054981d12fbb96915efcceb8d57a09ae8ca62f4bda731837389858a60405161253a9392919061486e565b60405180910390a1505b50506125506001606555565b965096945050505050565b6060816001835161256c9190614c74565b8151811061258a57634e487b7160e01b600052603260045260246000fd5b60200260200101516040516020016125a2919061479e565b60405160208183030381529060405290506000600183516125c39190614c74565b90505b8015610bbc5760008382815181106125ee57634e487b7160e01b600052603260045260246000fd5b602002602001015190506000846001846126089190614c74565b8151811061262657634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b038085166000908152609c84526040808220928416825291845281902054905191935062ffffff169161267291879184918691016147d2565b6040516020818303038152906040529450505050808061269190614cb7565b9150506125c6565b6126a1612b5f565b609960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156126ef57600080fd5b505afa158015612703573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127279190613f54565b609a80546001600160a01b0319166001600160a01b0392909216919091179055565b612751612b5f565b6001600160a01b0381166127b65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610885565b6127bf81613362565b50565b6127ca612b5f565b609b80546001600160a01b0319166001600160a01b0392909216919091179055565b60020b600060ff82901d80830118620d89e8811115612816576128166345c3193d60e11b846133b4565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b186002821615612852576ffff97272373d413259a46990580e213a0260801c5b6004821615612871576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612890576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156128af576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156128ce576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156128ed576fff2ea16466c96a3843ec78b326b528610260801c5b608082161561290c576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161561292c576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561294c576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561296c576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561298c576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156129ac576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156129cc576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156129ec576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612a0c576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612a2d576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612a4d576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612a6c576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612a89576b048a170391f7dc42444e8fa20260801c5b6000841315612a9757600019045b63ffffffff0160201c9392505050565b6000836001600160a01b0316856001600160a01b03161115612ac7579293925b846001600160a01b0316866001600160a01b031611612af257612aeb8585856133c5565b905061052f565b836001600160a01b0316866001600160a01b03161015612b54576000612b198786866133c5565b90506000612b28878986613433565b9050806001600160801b0316826001600160801b031610612b495780612b4b565b815b9250505061052f565b61052c858584613433565b33612b68611fb3565b6001600160a01b031614610d415760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610885565b600080836001600160a01b0316856001600160a01b03161115612bdf579293925b846001600160a01b0316866001600160a01b031611612c0a57612c03858585613478565b9150610717565b836001600160a01b0316866001600160a01b03161015612c4357612c2f868585613478565b9150612c3c8587856134f5565b9050610717565b612c4e8585856134f5565b905094509492505050565b600054610100900460ff16612c805760405162461bcd60e51b815260040161088590614956565b610d41613538565b600054610100900460ff16612caf5760405162461bcd60e51b815260040161088590614956565b610d41613568565b60026065541415612d0a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610885565b6002606555565b6040516001600160a01b0380851660248301528316604482015260648101829052610a689085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261358f565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052819081906000612dd9876020015188604001518960600151610bc2565b9050600080612e7283612def8b608001516127ec565b612dfc8c60a001516127ec565b8f6001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b158015612e3557600080fd5b505afa158015612e49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6d91906141ee565b612bbe565b60408051838152602081018390529294509092507f25a9be786b227a087b40dba04d0f96006d160bafcc8fe0f13e9750b7fee09ec3910160405180910390a18a15612f3e57612ec48a8a8a8585613661565b95506040518061010001604052808a602001516001600160a01b031681526020018a604001516001600160a01b031681526020018a6060015162ffffff168152602001306001600160a01b031681526020014281526020018781526020016000815260200160006001600160a01b03168152509350613049565b6000604051806101200160405280600081526020018b604001516001600160a01b031681526020018b602001516001600160a01b031681526020018b6060015162ffffff1681526020018b6080015160020b81526020018b60a0015160020b81526020018b60e0015181526020018b60c001518152602001306001600160a01b03168152509050612fd28b828b8587613661565b96506040518061010001604052808b604001516001600160a01b031681526020018b602001516001600160a01b031681526020018b6060015162ffffff168152602001306001600160a01b031681526020014281526020018881526020016000815260200160006001600160a01b03168152509450505b85156131145760995460405163414bf38960e01b81526001600160a01b039091169063414bf3899061307f908790600401614a6c565b602060405180830381600087803b15801561309957600080fd5b505af19250505080156130c9575060408051601f3d908101601f191682019092526130c6918101906143a3565b60015b61310d577f9d59876b18f79e115be9d302366cea861bf07717ed73b2e4978566b4a8ba36d0846040516130fc9190614a6c565b60405180910390a160009650613114565b6001975094505b6001871515141561317157604080518c151581526020810188905290810186905260608101839052608081018290527f930522e019723ff432e1a8923b25ab0a8a9fe4dcc26f41b33762778f1b45bc989060a00160405180910390a15b50505050505095945050505050565b61319f8363a9059cbb60e01b8484604051602401612d45929190614855565b505050565b6001606555565b600080428410156131c15750600090508061325d565b60018315151415613215576000806131d9878a611f7b565b9092509050816131f15760008093509350505061325d565b808811156132075760008093509350505061325d565b60018993509350505061325d565b6000806132228789610720565b90925090508161323a5760008093509350505061325d565b808910156132505760008093509350505061325d565b60019350915061325d9050565b9550959350505050565b6132a26040518060a001604052806060815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b6040518060a001604052806132b686610a98565b81526001600160a01b0390941660208501526040840192909252506060820194909452608001919091525090565b61331f6040518060a001604052806060815260200160006001600160a01b031681526020016000815260200160008152602001600081525090565b6040518060a001604052806133338661255b565b8152602001846001600160a01b0316815260200183815260200186815260200187815250905095945050505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816000528060020b60045260246000fd5b6000826001600160a01b0316846001600160a01b031611156133e5579192915b6000613408856001600160a01b0316856001600160a01b0316600160601b6139d9565b905061342861342384838888036001600160a01b03166139d9565b613a78565b9150505b9392505050565b6000826001600160a01b0316846001600160a01b03161115613453579192915b61347061342383600160601b8787036001600160a01b03166139d9565b949350505050565b6000826001600160a01b0316846001600160a01b03161115613498579192915b836001600160a01b03166134d1606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b03166139d9565b816134ec57634e487b7160e01b600052601260045260246000fd5b04949350505050565b6000826001600160a01b0316846001600160a01b03161115613515579192915b613470826001600160801b03168585036001600160a01b0316600160601b6139d9565b600054610100900460ff1661355f5760405162461bcd60e51b815260040161088590614956565b610d4133613362565b600054610100900460ff166131a45760405162461bcd60e51b815260040161088590614956565b60006135e4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613a9e9092919063ffffffff16565b80519091501561319f57808060200190518101906136029190614066565b61319f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610885565b60008460c00151600014156136785750600061052f565b6000808660e0015111801561369f575060a05461369790600019614c35565b8660c0015111155b6136ab576000196136cc565b8560e0015160a0548760c001516136c29190614c55565b6136cc9190614c35565b9050848114156136e057600091505061052f565b60006000198160088a116136f5576001613700565b61370060088b614c35565b905089600080805b609e548160ff16101561399e5783613723576000915061373e565b61373b8d602001518e604001518f6060015187613aad565b91505b6000828e60e001516137509190614c1d565b11801561377a575060a05461376790600019614c35565b848e60c001516137779190614c74565b11155b613786576000196137bd565b818d60e001516137969190614c1d565b60a054858f60c001516137a99190614c74565b6137b39190614c55565b6137bd9190614c35565b975060006137cb838c614c74565b1180156137ef575060a0546137e290600019614c35565b6137ec858d614c1d565b11155b6137fb57600019613826565b613805828b614c74565b60a054613812868e614c1d565b61381c9190614c55565b6138269190614c35565b92506000808411613839576000196138d5565b83891161388d5761384e612710600019614c35565b6138588a86614c74565b1115613866576000196138d5565b836127106138748b83614c74565b61387e9190614c55565b6138889190614c35565b6138d5565b61389b612710600019614c35565b6138a5858b614c74565b11156138b3576000196138d5565b836127106138c1828c614c74565b6138cb9190614c55565b6138d59190614c35565b9050868110156138ea57809650849750613902565b6138f5600287614c35565b955085613902575061399e565b609f54811161394557600080516020614dc383398151915289858f60405161392c93929190614b8b565b60405180910390a187995050505050505050505061052f565b83891115613972576139578686614c1d565b94508d60c0015185111561396d578d60c0015194505b61398d565b85851161398057600161398a565b61398a8686614c74565b94505b5061399781614d1e565b9050613708565b50600080516020614dc383398151915287838d6040516139c093929190614b8b565b60405180910390a150939b9a5050505050505050505050565b600083830281600019858709828110838203039150508084116139fb57600080fd5b80613a0b5750829004905061342c565b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b806001600160801b0381168114613a9957613a996393dafdf160e01b613bf5565b919050565b60606134708484600085613bff565b609b546040805160a0810182526001600160a01b0387811682528681166020830190815282840186815262ffffff888116606086019081526000608087018181529751636352813560e11b81529651861660048801529351851660248701529151604486015290511660648401529251811660848301529192919091169063c6a5026a9060a401608060405180830381600087803b158015613b4e57600080fd5b505af1925050508015613b7e575060408051601f3d908101601f19168201909252613b7b91810190614506565b60015b613b8a57506000613b91565b5091925050505b604080516001600160a01b0387811682528616602082015262ffffff851681830152606081018490526080810183905290517f81b09b5692a89d67c3335a9f1bc50937627e1853e978e56ad6964b65756289ee9181900360a00190a1949350505050565b8060005260046000fd5b606082471015613c605760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610885565b843b613cae5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610885565b600080866001600160a01b03168587604051613cca91906147b6565b60006040518083038185875af1925050503d8060008114613d07576040519150601f19603f3d011682016040523d82523d6000602084013e613d0c565b606091505b5091509150610d2e82828660608315613d2657508161342c565b825115613d365782518084602001fd5b8160405162461bcd60e51b815260040161088591906148ec565b828054613d5c90614cce565b90600052602060002090601f016020900481019282613d7e5760008555613dc4565b82601f10613d9757805160ff1916838001178555613dc4565b82800160010185558215613dc4579182015b82811115613dc4578251825591602001919060010190613da9565b50613dd0929150613dd4565b5090565b5b80821115613dd05760008155600101613dd5565b8035613a9981614d6a565b8051613a9981614d6a565b600082601f830112613e0f578081fd5b81356020613e24613e1f83614bfa565b614bca565b80838252828201915082860187848660051b8901011115613e43578586fd5b855b85811015613e6a578135613e5881614d6a565b84529284019290840190600101613e45565b5090979650505050505050565b600082601f830112613e87578081fd5b81516020613e97613e1f83614bfa565b80838252828201915082860187848660051b8901011115613eb6578586fd5b855b85811015613e6a57613ec982613f24565b84529284019290840190600101613eb8565b8035613a9981614d8d565b8051613a9981614d8d565b8051613a9981614d9c565b805161ffff81168114613a9957600080fd5b8035613a9981614db1565b8051613a9981614db1565b805163ffffffff81168114613a9957600080fd5b600060208284031215613f49578081fd5b813561342c81614d6a565b600060208284031215613f65578081fd5b815161342c81614d6a565b60008060408385031215613f82578081fd5b8235613f8d81614d6a565b91506020830135613f9d81614d6a565b809150509250929050565b600080600060608486031215613fbc578081fd5b8335613fc781614d6a565b92506020840135613fd781614d6a565b91506040840135613fe781614db1565b809150509250925092565b600060208284031215614003578081fd5b81356001600160401b03811115614018578182fd5b61347084828501613dff565b60008060408385031215614036578182fd5b82356001600160401b0381111561404b578283fd5b61405785828601613dff565b95602094909401359450505050565b600060208284031215614077578081fd5b815161342c81614d7f565b600060208284031215614093578081fd5b813561342c81614d8d565b6000806000606084860312156140b2578081fd5b83356001600160401b03808211156140c8578283fd5b818601915086601f8301126140db578283fd5b81356020828211156140ef576140ef614d54565b614101601f8301601f19168201614bca565b92508183528881838601011115614116578485fd5b818185018285013784818385010152829650614133818901613de9565b95505050505061414560408501613de9565b90509250925092565b60006101208284031215614160578081fd5b614168614ba1565b8235815261417860208401613de9565b602082015261418960408401613de9565b604082015261419a60608401613f0e565b60608201526141ab60808401613edb565b60808201526141bc60a08401613edb565b60a082015260c083013560c082015260e083013560e08201526101006141e3818501613de9565b908201529392505050565b6000602082840312156141ff578081fd5b815161342c81614d9c565b60008060006060848603121561421e578081fd5b835161422981614d9c565b602085015160409095015190969495509392505050565b60008060008060808587031215614255578182fd5b843561426081614d6a565b9350602085013561427081614d8d565b9250604085013561428081614d8d565b9150606085013561429081614d9c565b939692955090935050565b600080600080600060a086880312156142b2578283fd5b85356142bd81614d6a565b945060208601356142cd81614d8d565b935060408601356142dd81614d8d565b94979396509394606081013594506080013592915050565b600080600080600080600060e0888a03121561430f578485fd5b875161431a81614d6a565b602089015190975061432b81614d8d565b955061433960408901613efc565b945061434760608901613efc565b935061435560808901613efc565b925060a088015160ff8116811461436a578283fd5b60c089015190925061437b81614d7f565b8091505092959891949750929550565b60006020828403121561439c578081fd5b5035919050565b6000602082840312156143b4578081fd5b5051919050565b6000806000606084860312156143cf578081fd5b8335925060208401356143e181614d6a565b91506040840135613fe781614d6a565b60008060008060808587031215614406578182fd5b8451602080870151919550906001600160401b0380821115614426578485fd5b818801915088601f830112614439578485fd5b8151614447613e1f82614bfa565b8082825285820191508585018c878560051b8801011115614466578889fd5b8895505b8386101561449157805161447d81614d6a565b83526001959095019491860191860161446a565b5060408b015190985094505050808311156144aa578485fd5b50506144b887828801613e77565b606096909601519497939650505050565b600080600080608085870312156144de578182fd5b8451935060208501516144f081614d9c565b6040860151606090960151949790965092505050565b6000806000806080858703121561451b578182fd5b84519350602085015161452d81614d6a565b925061453b60408601613f24565b6060959095015193969295505050565b60008060008060008060c08789031215614563578384fd5b863595506020870135945060408701356001600160401b03811115614586578485fd5b61459289828a01613dff565b94505060608701356145a381614d6a565b92506080870135915060a08701356145ba81614d7f565b809150509295509295509295565b6000806000806000806000806000806000806101808d8f0312156145ea578586fd5b8c516001600160601b0381168114614600578687fd5b9b5061460e60208e01613df4565b9a5061461c60408e01613df4565b995061462a60608e01613df4565b985061463860808e01613f19565b975061464660a08e01613ee6565b965061465460c08e01613ee6565b955061466260e08e01613ef1565b94506101008d015193506101208d015192506146816101408e01613ef1565b91506146906101608e01613ef1565b90509295989b509295989b509295989b565b6001600160a01b03169052565b6000815180845260208085019450808401835b838110156146e75781516001600160a01b0316875295820195908201906001016146c2565b509495945050505050565b6000815180845260208085019450808401835b838110156146e757815187529582019590820190600101614705565b60008151808452614739816020860160208601614c8b565b601f01601f19169290920160200192915050565b6000815160a0845261476260a0850182614721565b6020848101516001600160a01b031690860152604080850151908601526060808501519086015260809384015193909401929092525090919050565b60609190911b6001600160601b031916815260140190565b600082516147c8818460208701614c8b565b9190910192915050565b600084516147e4818460208901614c8b565b60e89490941b6001600160e81b0319169190930190815260609190911b6001600160601b031916600382015260170192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6001600160a01b03929092168252602082015260400190565b60608152600061488160608301866146af565b828103602084015261489381866146f2565b91505060018060a01b0383166040830152949350505050565b6040815260006148bf60408301856146f2565b828103602084015261342881856146af565b821515815260406020820152600061347060408301846146f2565b60208152600061342c6020830184614721565b6040815260006149126040830185614721565b90508260208301529392505050565b6020808252818101527f556e69737761705633436f6e6e6563746f723a207a65726f2061646472657373604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b845181526020808601516001600160a01b0316908201526040808601516101808301916149d0908401826146a2565b5060608601516149e7606084018262ffffff169052565b5060808601516149fc608084018260020b9052565b5060a0860151614a1160a084018260020b9052565b5060c086015160c083015260e086015160e083015261010080870151614a39828501826146a2565b505084610120830152836101408301528261016083015295945050505050565b60208152600061342c602083018461474d565b81516001600160a01b03908116825260208084015182169083015260408084015162ffffff16908301526060808401518216908301526080808401519083015260a0838101519083015260c0808401519083015260e09283015116918101919091526101000190565b600061016082019050614ae98284516146a2565b6020830151614afb60208401826146a2565b506040830151614b12604084018262ffffff169052565b506060830151614b27606084018260020b9052565b506080830151614b3c608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151614b7a828501826146a2565b505061014092830151919092015290565b9283526020830191909152604082015260600190565b60405161012081016001600160401b0381118282101715614bc457614bc4614d54565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614bf257614bf2614d54565b604052919050565b60006001600160401b03821115614c1357614c13614d54565b5060051b60200190565b60008219821115614c3057614c30614d3e565b500190565b600082614c5057634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614c6f57614c6f614d3e565b500290565b600082821015614c8657614c86614d3e565b500390565b60005b83811015614ca6578181015183820152602001614c8e565b83811115610a685750506000910152565b600081614cc657614cc6614d3e565b506000190190565b600181811c90821680614ce257607f821691505b60208210811415610bbc57634e487b7160e01b600052602260045260246000fd5b6000600019821415614d1757614d17614d3e565b5060010190565b600060ff821660ff811415614d3557614d35614d3e565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146127bf57600080fd5b80151581146127bf57600080fd5b8060020b81146127bf57600080fd5b6001600160801b03811681146127bf57600080fd5b62ffffff811681146127bf57600080fdfea7a3c462ea5cf8a25c56064b25f60dc8dc6f9c22fe713da4044e8131ac28d483a2646970667358221220169b01a7051c0ae73db443634b131c44b0a0449509e6cf82e55a161cd8cf988064736f6c63430008040033