0 txs
0 calls
constructor
constructor(address _poolManager, address _token0, address _token1, address _owner, string name, string symbol)
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
basePositions
viewfunction basePositions(uint256) view returns (tuple poolKey, int24 lowerTick, int24 upperTick)
basePositionsLength
viewfunction basePositionsLength() view returns (uint256)
currentTick
viewfunction currentTick(tuple poolKey) view returns (int24 tick)
currentTicks
viewfunction currentTicks() view returns (int24[] ticks)
decimals
viewfunction decimals() view returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
fee
viewfunction fee() view returns (uint16)
feeRecipient
viewfunction feeRecipient() view returns (address)
getPositions
viewfunction getPositions() view returns (tuple[], tuple[])
getTotalAmounts
viewfunction getTotalAmounts() view returns (uint256 total0, uint256 total1, uint256 totalFee0, uint256 totalFee1)
limitPositions
viewfunction limitPositions(uint256) view returns (tuple poolKey, int24 lowerTick, int24 upperTick)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
poolManager
viewfunction poolManager() view returns (address)
symbol
viewfunction symbol() view returns (string)
token0
viewfunction token0() view returns (address)
token1
viewfunction token1() view returns (address)
totalSupply
viewfunction totalSupply() view returns (uint256)
whitelistedAddress
viewfunction whitelistedAddress() view returns (address)
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
claimFee
nonpayablefunction claimFee()
compound
nonpayablefunction compound(uint128[] liquidities, uint256[2][] inMin, int24 aimTick, uint24 tickOffset)
deposit
payablefunction deposit(uint256 deposit0Desired, uint256 deposit1Desired, address to, address from) payable returns (uint256 shares, uint256 deposit0, uint256 deposit1)
pause
nonpayablefunction pause()
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
pullLiquidity
nonpayablefunction pullLiquidity(tuple _poolKey, int24 tickLower, int24 tickUpper, uint256[2] outMin)
rebalance
nonpayablefunction rebalance(tuple[] baseRanges, uint128[] liquidities, int24 limitWidth, uint256[2][] inMin, uint256[2][] outMin, int24 aimTick, uint24 tickOffset)
renounceOwnership
nonpayablefunction renounceOwnership()
setFee
nonpayablefunction setFee(uint16 newFee)
setFeeRecipient
nonpayablefunction setFeeRecipient(address _feeRecipient)
setWhitelist
nonpayablefunction setWhitelist(address _whitelistedAddress)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unlockCallback
nonpayablefunction unlockCallback(bytes data) returns (bytes)
unpause
nonpayablefunction unpause()
withdraw
nonpayablefunction withdraw(uint256 shares, address to, uint256[2][] outMin) returns (uint256 amount0, uint256 amount1)
zeroBurnAll
nonpayablefunction zeroBurnAll()
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
Deposit
event Deposit(address indexed from, address indexed to, uint256 shares, uint256 deposit0, uint256 deposit1)
EIP712DomainChanged
event EIP712DomainChanged()
FeeChanged
event FeeChanged(uint16 newFee)
LogTotalAmounts
event LogTotalAmounts(uint256 totalAmount0, uint256 totalAmount1)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
Rebalance
event Rebalance(((address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) poolKey, int24 lowerTick, int24 upperTick)[])
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Unpaused
event Unpaused(address account)
Withdraw
event Withdraw(address indexed sender, address indexed to, uint256 shares, uint256 amount0, uint256 amount1)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
CurrencyDeltaError
error CurrencyDeltaError()
DuplicatedPosition
error DuplicatedPosition(((address currency0, address currency1, uint24 fee, int24 tickSpacing, address hooks) poolKey, int24 lowerTick, int24 upperTick) position)
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
EnforcedPause
error EnforcedPause()
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
ERC2612ExpiredSignature
error ERC2612ExpiredSignature(uint256 deadline)
ERC2612InvalidSigner
error ERC2612InvalidSigner(address signer, address owner)
ExpectedPause
error ExpectedPause()
FailedInnerCall
error FailedInnerCall()
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidAction
error InvalidAction()
InvalidDepositAmount
error InvalidDepositAmount(uint256 amount)
InvalidFee
error InvalidFee()
InvalidPoolKeyTokens
error InvalidPoolKeyTokens()
InvalidRebalanceParams
error InvalidRebalanceParams()
InvalidShortString
error InvalidShortString()
InvalidTickRange
error InvalidTickRange()
NotANativeTokenPair
error NotANativeTokenPair()
NotPoolManager
error NotPoolManager()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
StringTooLong
error StringTooLong(string str)
TickOffsetExceeded
error TickOffsetExceeded()
WhitelistedAddress
error WhitelistedAddress()
ZeroAddress
error ZeroAddress()
ZeroValue
error ZeroValue()
creation bytecode
0x610180604052348015610010575f80fd5b5060405161633538038061633583398101604081905261002f91610368565b8580848480604051806040016040528060018152602001603160f81b8152508787816003908161005f919061049c565b50600461006c828261049c565b5061007c915083905060056101f4565b6101205261008b8160066101f4565b61014052815160208084019190912060e052815190820120610100524660a05261011760e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60805250503060c0525060016008556001600160a01b03811661015457604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61015d81610226565b506001600160a01b03908116610160526009805460ff60a01b191690558416905061019b5760405163d92e233d60e01b815260040160405180910390fd5b5050600a80546001600160a01b039485166001600160a01b031991821617909155600b80549385169382169390931790925560168054919093169116179055506017805461ffff60a01b1916600160a01b1790556105ae565b5f60208351101561020f5761020883610277565b9050610220565b8161021a848261049c565b5060ff90505b92915050565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f80829050601f815111156102a1578260405163305a27a960e01b815260040161014b9190610556565b80516102ac8261058b565b179392505050565b6001600160a01b03811681146102c8575f80fd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126102ee575f80fd5b81516001600160401b03811115610307576103076102cb565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610335576103356102cb565b60405281815283820160200185101561034c575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f805f805f8060c0878903121561037d575f80fd5b8651610388816102b4565b6020880151909650610399816102b4565b60408801519095506103aa816102b4565b60608801519094506103bb816102b4565b60808801519093506001600160401b038111156103d6575f80fd5b6103e289828a016102df565b60a089015190935090506001600160401b038111156103ff575f80fd5b61040b89828a016102df565b9150509295509295509295565b600181811c9082168061042c57607f821691505b60208210810361044a57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561049757805f5260205f20601f840160051c810160208510156104755750805b601f840160051c820191505b81811015610494575f8155600101610481565b50505b505050565b81516001600160401b038111156104b5576104b56102cb565b6104c9816104c38454610418565b84610450565b6020601f8211600181146104fb575f83156104e45750848201515b5f19600385901b1c1916600184901b178455610494565b5f84815260208120601f198516915b8281101561052a578785015182556020948501946001909201910161050a565b508482101561054757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561044a575f1960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051615c926106a35f395f818161084901528181610a2201528181610b7601528181610d4e0152818161117c0152818161135f015281816117c5015281816118e0015281816119cd01528181611a36015281816121200152818161298701528181612a7201528181612b470152818161364001528181613752015281816137e301528181613aba01528181613b780152818161404e015281816140aa0152818161416a015261424001525f6127bd01525f61279001525f6120a401525f61207c01525f611fd701525f61200101525f61202b0152615c925ff3fe6080604052600436106102cf575f3560e01c806384715b111161017b57806399d32fc4116100d1578063d505accf11610087578063ddca3f4311610062578063ddca3f43146108af578063e74b981b146108e3578063f2fde38b14610902575f80fd5b8063d505accf14610819578063dc4c90d314610838578063dd62ed3e1461086b575f80fd5b8063b079f163116100b7578063b079f163146107a7578063c4a7761e146107c8578063d21220a7146107fc575f80fd5b806399d32fc414610774578063a9059cbb14610788575f80fd5b80638c4be77a1161013157806390d082e91161010c57806390d082e9146106a957806391dd73461461074157806395d89b4114610760575f80fd5b80638c4be77a1461063b5780638da5cb5b1461066d5780638e0055531461068a575f80fd5b8063854cff2f11610161578063854cff2f146105de57806386a29081146105fd5780638bd9ddb81461061c575f80fd5b806384715b111461058957806384b0196e146105b7575f80fd5b80633f4ba83a1161023057806370a08231116101e65780637ecebe00116101c15780637ecebe001461053457806380275860146105535780638456cb5914610575575f80fd5b806370a08231146104b8578063715018a6146104ec578063759f237214610500575f80fd5b80635c975abb116102165780635c975abb1461044d5780635d0885851461046b578063689b5f4f1461048a575f80fd5b80633f4ba83a1461041a578063469048401461042e575f80fd5b806323b872dd11610285578063313ce5671161026b578063313ce567146103d75780633644e515146103f2578063376c548714610406575f80fd5b806323b872dd1461039757806326f622ec146103b6575f80fd5b8063095ea7b3116102b5578063095ea7b3146103235780630dfe16811461035257806318160ddd14610383575f80fd5b806303e78281146102da57806306fdde0314610302575f80fd5b366102d657005b5f80fd5b3480156102e5575f80fd5b506102ef600c5481565b6040519081526020015b60405180910390f35b34801561030d575f80fd5b50610316610921565b6040516102f99190614605565b34801561032e575f80fd5b5061034261033d36600461462b565b6109b1565b60405190151581526020016102f9565b34801561035d575f80fd5b50600a546001600160a01b03165b6040516001600160a01b0390911681526020016102f9565b34801561038e575f80fd5b506002546102ef565b3480156103a2575f80fd5b506103426103b1366004614655565b6109ca565b3480156103c1575f80fd5b506103d56103d0366004614820565b6109ef565b005b3480156103e2575f80fd5b50604051601281526020016102f9565b3480156103fd575f80fd5b506102ef610ad8565b348015610411575f80fd5b506103d5610ae6565b348015610425575f80fd5b506103d5610b2d565b348015610439575f80fd5b5060165461036b906001600160a01b031681565b348015610458575f80fd5b50600954600160a01b900460ff16610342565b348015610476575f80fd5b506103d5610485366004614987565b610b3d565b348015610495575f80fd5b506104a96104a4366004614a10565b610c34565b6040516102f993929190614a27565b3480156104c3575f80fd5b506102ef6104d2366004614a9d565b6001600160a01b03165f9081526020819052604090205490565b3480156104f7575f80fd5b506103d5610cbc565b34801561050b575f80fd5b5061051f61051a366004614ab8565b610ccd565b604080519283526020830191909152016102f9565b34801561053f575f80fd5b506102ef61054e366004614a9d565b610f62565b34801561055e575f80fd5b50610567610f7f565b6040516102f9929190614bc9565b348015610580575f80fd5b506103d5611476565b61059c610597366004614c3a565b611486565b604080519384526020840192909252908201526060016102f9565b3480156105c2575f80fd5b506105cb611604565b6040516102f99796959493929190614c76565b3480156105e9575f80fd5b506103d56105f8366004614a9d565b611646565b348015610608575f80fd5b5060175461036b906001600160a01b031681565b348015610627575f80fd5b506103d5610636366004614db0565b611670565b348015610646575f80fd5b5061065a610655366004614e99565b6118c7565b60405160029190910b81526020016102f9565b348015610678575f80fd5b506009546001600160a01b031661036b565b348015610695575f80fd5b506103d56106a4366004614eb3565b611910565b3480156106b4575f80fd5b506104a96106c3366004614a10565b600d60209081525f918252604091829020825160a08101845281546001600160a01b03908116825260018301548082169483019490945262ffffff600160a01b85041694820194909452600160b81b909204600290810b606084015280820154909316608083015260030154909181810b9163010000009004900b83565b34801561074c575f80fd5b5061031661075b366004614ed4565b6119c0565b34801561076b575f80fd5b50610316611a15565b34801561077f575f80fd5b506103d5611a24565b348015610793575f80fd5b506103426107a236600461462b565b611ae5565b3480156107b2575f80fd5b506107bb611af2565b6040516102f99190614f42565b3480156107d3575f80fd5b506107dc611ce9565b6040805194855260208501939093529183015260608201526080016102f9565b348015610807575f80fd5b50600b546001600160a01b031661036b565b348015610824575f80fd5b506103d5610833366004614f7c565b611d03565b348015610843575f80fd5b5061036b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610876575f80fd5b506102ef610885366004614fed565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156108ba575f80fd5b506017546108d090600160a01b900461ffff1681565b60405161ffff90911681526020016102f9565b3480156108ee575f80fd5b506103d56108fd366004614a9d565b611e3e565b34801561090d575f80fd5b506103d561091c366004614a9d565b611e7a565b60606003805461093090615024565b80601f016020809104026020016040519081016040528092919081815260200182805461095c90615024565b80156109a75780601f1061097e576101008083540402835291602001916109a7565b820191905f5260205f20905b81548152906001019060200180831161098a57829003601f168201915b5050505050905090565b5f336109be818585611eb4565b60019150505b92915050565b5f336109d7858285611ec6565b6109e2858585611f41565b60019150505b9392505050565b6109f7611f9e565b5f84848484604051602001610a0f949392919061507e565b60405160208183030381529060405290507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c89491600483604051602001610a6392919061512e565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401610a8e9190614605565b5f604051808303815f875af1158015610aa9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ad0919081019061517c565b505050505050565b5f610ae1611fcb565b905090565b610aee6120f4565b6017546001600160a01b03163314610b19576040516361a2001160e11b815260040160405180910390fd5b610b2161211e565b610b2b6001600855565b565b610b35611f9e565b610b2b61215f565b610b45611f9e565b610b4f82826121b4565b5f8484604051602001610b63929190615265565b60405160208183030381529060405290507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c89491600283604051602001610bb792919061512e565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401610be29190614605565b5f604051808303815f875af1158015610bfd573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c24919081019061517c565b50610c2d61227c565b5050505050565b600e8160028110610c43575f80fd5b6040805160a0810182526004929092029290920180546001600160a01b0390811683526001820154808216602085015262ffffff600160a01b82041694840194909452600160b81b909304600290810b60608401528082015490931660808301526003015490925080820b916301000000909104900b83565b610cc4611f9e565b610b2b5f6122cb565b5f80610cd76120f4565b610cdf61231c565b845f03610cff57604051637c946ed760e01b815260040160405180910390fd5b6001600160a01b038416610d265760405163d92e233d60e01b815260040160405180910390fd5b5f8584604051602001610d3a929190615289565b60405160208183030381529060405290505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894915f84604051602001610d8e92919061512e565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401610db99190614605565b5f604051808303815f875af1158015610dd4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dfb919081019061517c565b905080806020019051810190610e1191906152a1565b600a549195509350610e2d906001600160a01b03168786612347565b600b54610e44906001600160a01b03168785612347565b600a545f90610e6e90610e5f906001600160a01b03166123e6565b89610e6960025490565b612467565b600b549091505f90610e9690610e8c906001600160a01b03166123e6565b8a610e6960025490565b90508115610ec257610ea882876152d7565b600a54909650610ec2906001600160a01b03168984612347565b8015610eec57610ed281866152d7565b600b54909550610eec906001600160a01b03168983612347565b610ef6338a612503565b604080518a8152602081018890529081018690526001600160a01b0389169033907febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f9060600160405180910390a3610f4c61227c565b50505050610f5a6001600855565b935093915050565b6001600160a01b0381165f908152600760205260408120546109c4565b6060805f600c546002610f9291906152d7565b67ffffffffffffffff811115610faa57610faa614693565b60405190808252806020026020018201604052801561101657816020015b60408051610100810182525f606082018181526080830182905260a0830182905260c0830182905260e08301829052825260208083018290529282015282525f19909201910181610fc85790505b5090505f600c54600261102991906152d7565b67ffffffffffffffff81111561104157611041614693565b60405190808252806020026020018201604052801561109c57816020015b61108960405180606001604052805f6001600160801b031681526020015f81526020015f81525090565b81526020019060019003908161105f5790505b5090505f8080805b600c548160ff16101561126c5760ff81165f818152600d602090815260409182902082516101008101845281546001600160a01b03908116606083019081526001840154808316608085015262ffffff600160a01b82041660a0850152600160b81b9004600290810b60c08501528085015490921660e0840152825260039092015480830b938201939093526301000000909204900b918101919091528751909188918110611155576111556152ea565b6020026020010181905250739b617736cd4033611b905e2d1c736eb9d1f153ac638363b4e87f0000000000000000000000000000000000000000000000000000000000000000888460ff16815181106111b0576111b06152ea565b60200260200101516040518363ffffffff1660e01b81526004016111d59291906152fe565b60a060405180830381865af41580156111f0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611214919061531c565b5050604080516060810182526001600160801b0385168152602081018490529081018290528851939750919550935090869060ff8416908110611259576112596152ea565b60209081029190910101526001016110a4565b505f5b60028160ff16101561146857600e8160ff1660028110611291576112916152ea565b60408051610100810182526004929092029290920180546001600160a01b03908116606084019081526001830154808316608086015262ffffff600160a01b82041660a0860152600160b81b9004600290810b60c08601528084015490921660e0850152835260039091015480820b602084015263010000009004900b91810191909152600c5487906113289060ff8516906152d7565b81518110611338576113386152ea565b6020026020010181905250739b617736cd4033611b905e2d1c736eb9d1f153ac638363b4e87f0000000000000000000000000000000000000000000000000000000000000000888460ff16600c5461139091906152d7565b815181106113a0576113a06152ea565b60200260200101516040518363ffffffff1660e01b81526004016113c59291906152fe565b60a060405180830381865af41580156113e0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611404919061531c565b5050604080516060810182526001600160801b038516815260208101849052908101829052600c5493975091955093509086906114459060ff8516906152d7565b81518110611455576114556152ea565b602090810291909101015260010161126f565b509396929550919350505050565b61147e611f9e565b610b2b61253b565b5f805f6114916120f4565b61149961231c565b6001600160a01b03851615806114b757506001600160a01b03851630145b156114d55760405163d92e233d60e01b815260040160405180910390fd5b6017546001600160a01b03163314611500576040516361a2001160e11b815260040160405180910390fd5b600a546001600160a01b03161515801561151957505f34115b1561153757604051631ab026e960e31b815260040160405180910390fd5b61153f61211e565b611549878761257e565b919450925090508261155d5761155d615361565b600a546115759085906001600160a01b0316846126c7565b600b5461158d9085906001600160a01b0316836126c7565b6115978584612755565b60408051848152602081018490529081018290526001600160a01b0380871691908616907f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f69060600160405180910390a36115f061227c565b6115fa6001600855565b9450945094915050565b5f6060805f805f6060611615612789565b61161d6127b6565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b61164e611f9e565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6116786120f4565b611680611f9e565b5f5b87518160ff16101561174d57600a546001600160a01b03166116cb898360ff16815181106116b2576116b26152ea565b602090810291909101015151516001600160a01b031690565b14158061171e5750600b546001600160a01b031661171b898360ff16815181106116f7576116f76152ea565b60200260200101515f0151602001516001600160a01b03166001600160a01b031690565b14155b1561173b5760405162de216b60e01b815260040160405180910390fd5b8061174581615375565b915050611682565b506117598783836127e3565b8651845114158061176c57508651865114155b8061177a5750600c54835114155b156117985760405163483cb4ab60e11b815260040160405180910390fd5b5f87878787876040516020016117b2959493929190615393565b60405160208183030381529060405290507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c8949160018360405160200161180692919061512e565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016118319190614605565b5f604051808303815f875af115801561184c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611873919081019061517c565b507fda82109922c7702ec52698db387bdfa93c21de784b25f20b35bd750b7b510d95886040516118a391906153f4565b60405180910390a16118b361227c565b506118be6001600855565b50505050505050565b5f6119066118d68360a0902090565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169061284a565b5090949350505050565b611918611f9e565b6017546001600160a01b90910461ffff161015611948576040516358d620b360e01b815260040160405180910390fd5b61195061211e565b601780547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff16600160a01b61ffff8416908102919091179091556040519081527f931a978d852c1b6fa9dd97300fd89c773ff625b91f697b0911e943ba15f9e2439060200160405180910390a150565b6060336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611a0b5760405163570c108560e11b815260040160405180910390fd5b6109e883836128fc565b60606004805461093090615024565b611a2c611f9e565b611a3461211e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894916005604051602001611a759190615406565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401611aa09190614605565b5f604051808303815f875af1158015611abb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611ae2919081019061517c565b50565b5f336109be818585611f41565b6060600c545f03611b0f5750604080515f81526020810190915290565b600c54611b1d9060026152d7565b67ffffffffffffffff811115611b3557611b35614693565b604051908082528060200260200182016040528015611b5e578160200160208202803683370190505b5090505f5b600c548160ff161015611c135760ff81165f908152600d6020908152604091829020825160a08101845281546001600160a01b03908116825260018301548082169483019490945262ffffff600160a01b85041694820194909452600160b81b909204600290810b606084015201549091166080820152611be3906118c7565b828260ff1681518110611bf857611bf86152ea565b60029290920b60209283029190910190910152600101611b63565b50611c7f600e5f5b6040805160a0810182526004929092029290920180546001600160a01b0390811683526001820154808216602085015262ffffff600160a01b82041694840194909452600160b81b909304600290810b6060840152015490911660808201526118c7565b81600c5481518110611c9357611c936152ea565b60029290920b60209283029190910190910152611cb2600e6001611c1b565b81600c546001611cc291906152d7565b81518110611cd257611cd26152ea565b602002602001019060020b908160020b8152505090565b5f805f80611cf561292e565b935093509350935090919293565b83421115611d2c5760405163313c898160e11b8152600481018590526024015b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888611d778c6001600160a01b03165f90815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f611dd182612c9d565b90505f611de082878787612cc9565b9050896001600160a01b0316816001600160a01b031614611e27576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401611d23565b611e328a8a8a611eb4565b50505050505050505050565b611e46611f9e565b6001600160a01b038116611e58575f80fd5b601680546001600160a01b0319166001600160a01b0392909216919091179055565b611e82611f9e565b6001600160a01b038116611eab57604051631e4fbdf760e01b81525f6004820152602401611d23565b611ae2816122cb565b611ec18383836001612cf5565b505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114611f3b5781811015611f2d57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401611d23565b611f3b84848484035f612cf5565b50505050565b6001600160a01b038316611f6a57604051634b637e8f60e11b81525f6004820152602401611d23565b6001600160a01b038216611f935760405163ec442f0560e01b81525f6004820152602401611d23565b611ec1838383612dc7565b6009546001600160a01b03163314610b2b5760405163118cdaa760e01b8152336004820152602401611d23565b5f306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561202357507f000000000000000000000000000000000000000000000000000000000000000046145b1561204d57507f000000000000000000000000000000000000000000000000000000000000000090565b610ae1604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a08201525f9060c00160405160208183030381529060405280519060200120905090565b60026008540361211757604051633ee5aeb560e01b815260040160405180910390fd5b6002600855565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894916003604051602001611a759190615406565b612167612eed565b6009805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b5f5b600c548160ff161015611ec15760ff81165f908152600d6020908152604091829020825160a08101845281546001600160a01b03908116825260018301548082169483019490945262ffffff600160a01b8504811695830195909552600160b81b909304600290810b606083015290910154909116608082015290831690612255908590612243906118c7565b61224d9190615426565b60020b612f17565b111561227457604051631550f74560e01b815260040160405180910390fd5b6001016121b6565b5f8061228661292e565b505060408051838152602081018390529294509092507ff81653b8c545b1deb0107759b7cfc7146514dd306db7fc1ae72d2984dec08adf910160405180910390a15050565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b600954600160a01b900460ff1615610b2b5760405163d93c066560e01b815260040160405180910390fd5b5f6001600160a01b03841661237c575f805f8085875af190508061237757612377835f633d2cec6f60e21b612f2c565b611f3b565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f60408201525080611f3b57611f3b8463a9059cbb60e01b633c9fd93960e21b612f2c565b5f6001600160a01b0382166123fc575047919050565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa15801561243e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c4919061544b565b919050565b5f838302815f1985870982811083820303915050808411612486575f80fd5b805f03612498575082900490506109e8565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6001600160a01b03821661252c57604051634b637e8f60e11b81525f6004820152602401611d23565b612537825f83612dc7565b5050565b61254361231c565b6009805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586121973390565b5f805f8061258b60025490565b90505f8061259761292e565b5050600a5491935091506001600160a01b03166125bb576125b83483615462565b91505b8215806125c757505f82115b806125d157505f81115b6125dd576125dd615361565b825f036125fb578794508693506125f48585612fa4565b95506126bd565b815f03612610578693506125f4848483612467565b805f03612625578794506125f4858484612467565b5f612642612633838b615475565b61263d858b615475565b612fb9565b9050805f0361266457604051637c946ed760e01b815260040160405180910390fd5b81612670600183615462565b61267a91906154a0565b6126859060016152d7565b955082612693600183615462565b61269d91906154a0565b6126a89060016152d7565b94506126b98185610e698587615475565b9650505b5050509250925092565b805f036126d357505050565b6001600160a01b038216612740578034101561270557604051632097692160e11b815260048101829052602401611d23565b80341115611ec157336108fc61271b8334615462565b6040518115909202915f818181858888f19350505050158015611f3b573d5f803e3d5ffd5b611ec16001600160a01b038316843084612fc7565b6001600160a01b03821661277e5760405163ec442f0560e01b81525f6004820152602401611d23565b6125375f8383612dc7565b6060610ae17f00000000000000000000000000000000000000000000000000000000000000006005613036565b6060610ae17f00000000000000000000000000000000000000000000000000000000000000006006613036565b5f5b83518160ff161015611f3b578162ffffff1661282384612243878560ff1681518110612813576128136152ea565b60200260200101515f01516118c7565b111561284257604051631550f74560e01b815260040160405180910390fd5b6001016127e5565b5f805f805f612858866130df565b604051631e2eaeaf60e01b8152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa1580156128a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128c4919061544b565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b60605f8061290c848601866154b3565b915091505f61291b838361311b565b9050612925613738565b95945050505050565b5f805f805f5b600c548160ff161015612a3a5760ff81165f908152600d6020526040808220905163106c769d60e31b8152829182918291739b617736cd4033611b905e2d1c736eb9d1f153ac91638363b4e8916129b0917f000000000000000000000000000000000000000000000000000000000000000091906004016155ba565b60a060405180830381865af41580156129cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129ef919061531c565b9450945094509450508389612a0491906152d7565b9850612a1083896152d7565b9750612a1c82886152d7565b9650612a2881876152d7565b95505060019093019250612934915050565b5060405163106c769d60e31b81525f90819081908190739b617736cd4033611b905e2d1c736eb9d1f153ac90638363b4e890612a9d907f000000000000000000000000000000000000000000000000000000000000000090600e906004016155ba565b60a060405180830381865af4158015612ab8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612adc919061531c565b9450945094509450508388612af191906152d7565b9750612afd83886152d7565b9650612b0982876152d7565b9550612b1581866152d7565b60405163106c769d60e31b8152909550739b617736cd4033611b905e2d1c736eb9d1f153ac90638363b4e890612b72907f0000000000000000000000000000000000000000000000000000000000000000906012906004016155ba565b60a060405180830381865af4158015612b8d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bb1919061531c565b92975090955093509150612bc7905084896152d7565b9750612bd383886152d7565b9650612bdf82876152d7565b9550612beb81866152d7565b601754909550612c0690600160a01b900461ffff16876154a0565b612c109087615462565b601754909650612c2b90600160a01b900461ffff16866154a0565b612c359086615462565b9450612c4186896152d7565b9750612c4d85886152d7565b600a54909750612c65906001600160a01b03166123e6565b612c6f90896152d7565b600b54909850612c87906001600160a01b03166123e6565b612c9190886152d7565b96505050505090919293565b5f6109c4612ca9611fcb565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f80612cd98888888861385a565b925092509250612ce9828261391e565b50909695505050505050565b6001600160a01b038416612d1e5760405163e602df0560e01b81525f6004820152602401611d23565b6001600160a01b038316612d4757604051634a1406b160e11b81525f6004820152602401611d23565b6001600160a01b038085165f9081526001602090815260408083209387168352929052208290558015611f3b57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051612db991815260200190565b60405180910390a350505050565b6001600160a01b038316612df1578060025f828254612de691906152d7565b90915550612e619050565b6001600160a01b0383165f9081526020819052604090205481811015612e435760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401611d23565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216612e7d57600280548290039055612e9b565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ee091815260200190565b60405180910390a3505050565b600954600160a01b900460ff16610b2b57604051638dfc202b60e01b815260040160405180910390fd5b5f80821215612f2857815f036109c4565b5090565b6040516390bfb86560e01b8082526001600160a01b03851660048301526001600160e01b031984166024830152608060448301526020601f3d018190040260a0810160648401523d608484015290913d5f60a483013e60048260a4018201526001600160e01b031984168260c4018201528160e40181fd5b5f818311612fb257816109e8565b5090919050565b5f818310612fb257816109e8565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b179052611f3b9085906139d6565b606060ff83146130505761304983613a37565b90506109c4565b81805461305c90615024565b80601f016020809104026020016040519081016040528092919081815260200182805461308890615024565b80156130d35780601f106130aa576101008083540402835291602001916130d3565b820191905f5260205f20905b8154815290600101906020018083116130b657829003601f168201915b505050505090506109c4565b6040515f906130fe908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b60605f836005811115613130576131306150fa565b036131945761313d613a74565b50505f80838060200190518101906131559190615681565b915091505f806131658484613b49565b604080516020810193909352828101919091528051808303820181526060909201905294506109c49350505050565b60038360058111156131a8576131a86150fa565b036131bc576131b5613a74565b50506109c4565b60018360058111156131d0576131d06150fa565b03613576576131dd613a74565b50505f805f805f868060200190518101906131f891906157a3565b9450945094509450945061321461320e60025490565b82613b49565b50505f8551600261322591906152d7565b67ffffffffffffffff81111561323d5761323d614693565b6040519080825280602002602001820160405280156132a957816020015b60408051610100810182525f606082018181526080830182905260a0830182905260c0830182905260e08301829052825260208083018290529282015282525f1990920191018161325b5790505b508651600c5590505f5b86518160ff1610156133f857868160ff16815181106132d4576132d46152ea565b60209081029190910181015160ff83165f818152600d84526040908190208351805182546001600160a01b039182166001600160a01b03199182161784558288015160018501805485880151606087015162ffffff908116600160b81b0262ffffff60b81b19928216600160a01b0276ffffffffffffffffffffffffffffffffffffffffffffff1990941695881695909517929092171692909217905560809093015160028501805491909316911617905594840151600390910180549290940151851663010000000265ffffffffffff19909216941693909317929092179055875188919081106133c8576133c86152ea565b6020026020010151828260ff16815181106133e5576133e56152ea565b60209081029190910101526001016132b3565b5061341f865f8151811061340e5761340e6152ea565b60200260200101515f015185613c12565b6040805161010081018252600e546001600160a01b0390811660608301908152600f548083166080850152600160a01b810462ffffff1660a0850152600160b81b9004600290810b60c085015260105490921660e0840152825260115480820b602084015263010000009004900b918101919091528651825183919081106134a9576134a96152ea565b60209081029190910181019190915260408051610100810182526012546001600160a01b03908116606083019081526013548083166080850152600160a01b810462ffffff1660a0850152600160b81b9004600290810b60c085015260145490921660e0840152825260155480820b94830194909452630100000090930490920b908201528651829061353d9060016152d7565b8151811061354d5761354d6152ea565b602002602001018190525061356181613ea7565b61356b8584614013565b5050505050506109c4565b600283600581111561358a5761358a6150fa565b036135bd57613597613a74565b50505f80838060200190518101906135af919061590f565b915091506131b58282614013565b60048360058111156135d1576135d16150fa565b036136d7575f805f80858060200190518101906135ee919061595e565b93509350935093506135fe613a74565b50505f60405180606001604052808681526020018560020b81526020018460020b8152509050739b617736cd4033611b905e2d1c736eb9d1f153ac63391d68e27f00000000000000000000000000000000000000000000000000000000000000008361366960025490565b600254876040518663ffffffff1660e01b815260040161368d9594939291906159ac565b6040805180830381865af41580156136a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136cb91906152a1565b505050505050506109c4565b60058360058111156136eb576136eb6150fa565b0361371f57600a54613705906001600160a01b03166140a7565b600b5461371a906001600160a01b03166140a7565b6109c4565b604051634a7f394f60e01b815260040160405180910390fd5b600b54604051637c0045dd60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529091166024820152739b617736cd4033611b905e2d1c736eb9d1f153ac90637c0045dd906044015f6040518083038186803b1580156137b5575f80fd5b505af41580156137c7573d5f803e3d5ffd5b5050600a54604051637c0045dd60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529091166024820152739b617736cd4033611b905e2d1c736eb9d1f153ac9250637c0045dd91506044015f6040518083038186803b158015613848575f80fd5b505af4158015611f3b573d5f803e3d5ffd5b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561389357505f915060039050826115fa565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156138e4573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661390f57505f9250600191508290506115fa565b975f9750879650945050505050565b5f826003811115613931576139316150fa565b0361393a575050565b600182600381111561394e5761394e6150fa565b0361396c5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115613980576139806150fa565b036139a15760405163fce698f760e01b815260048101829052602401611d23565b60038260038111156139b5576139b56150fa565b03612537576040516335e2f38360e21b815260048101829052602401611d23565b5f6139ea6001600160a01b03841683614297565b905080515f14158015613a0e575080806020019051810190613a0c91906159e6565b155b15611ec157604051635274afe760e01b81526001600160a01b0384166004820152602401611d23565b60605f613a43836142a4565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f805f613a7f6142cb565b600a54600b5460175460405163be43e57b60e01b8152939450739b617736cd4033611b905e2d1c736eb9d1f153ac9363be43e57b93613b01937f0000000000000000000000000000000000000000000000000000000000000000938893600e936001600160a01b03908116931691600160a01b900461ffff1690600401615a31565b6040805180830381865af4158015613b1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b3f91906152a1565b9094909350915050565b5f808315613c0b575f613b5a6142cb565b9050739b617736cd4033611b905e2d1c736eb9d1f153ac639d83a1237f000000000000000000000000000000000000000000000000000000000000000083600e89613ba460025490565b8a6040518763ffffffff1660e01b8152600401613bc696959493929190615a99565b6040805180830381865af4158015613be0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c0491906152a1565b9093509150505b9250929050565b8060020b5f03613c9d57600e80546001600160a01b0319908116909155600f80547fffffffffffff000000000000000000000000000000000000000000000000000090811690915560108054831690556011805465ffffffffffff19908116909155601280548416905560138054909216909155601480549092169091556015805490911690555050565b8151600e80546001600160a01b039283166001600160a01b031991821681179092556020850151600f80546040880151606089015162ffffff808216600160b81b0262ffffff60b81b1991909316600160a01b0276ffffffffffffffffffffffffffffffffffffffffffffff19948516968a1696871781178216841790955560808b01516010805491909a169088168117909955601280548816909817909755601380549093169094179092179094161790925560148054909116909217909155613d688183615af7565b60020b15613d935780613d7b8184615b18565b613d86906001615b50565b613d909190615b75565b91505b5f613d9d846118c7565b90505f613daa8383615af7565b60020b5f03613dba575080613e0e565b5f613dc58484615af7565b60020b1315613dea5782613dd98184615b18565b613de39190615b75565b9050613e0e565b826001613df78285615b18565b613e019190615426565b613e0b9190615b75565b90505b613e22613e1b8583615426565b828561441d565b6011805465ffffffffffff1916630100000062ffffff9384160262ffffff19161792909116919091179055613e75613e5a8483615b50565b85613e658685615b50565b613e6f9190615b50565b8561441d565b6015805465ffffffffffff1916630100000062ffffff9384160262ffffff191617929091169190911790555050505050565b5f5b81518160ff161015612537575f828260ff1681518110613ecb57613ecb6152ea565b6020026020010151604051602001613ee39190615b9b565b6040516020818303038152906040528051906020012090505f826001613f099190615ba9565b90505b83518160ff161015613ffe57838160ff1681518110613f2d57613f2d6152ea565b60200260200101516040015160020b848260ff1681518110613f5157613f516152ea565b60200260200101516020015160020b0315613fec575f848260ff1681518110613f7c57613f7c6152ea565b6020026020010151604051602001613f949190615b9b565b604051602081830303815290604052805190602001209050808303613fea57848260ff1681518110613fc857613fc86152ea565b6020026020010151604051630bd27b1160e01b8152600401611d239190615b9b565b505b80613ff681615375565b915050613f0c565b5050808061400b90615375565b915050613ea9565b5f61401c6142cb565b60405163d5230e7160e01b8152909150739b617736cd4033611b905e2d1c736eb9d1f153ac9063d5230e719061407f907f0000000000000000000000000000000000000000000000000000000000000000908590600e9089908990600401615bc2565b5f6040518083038186803b158015614095575f80fd5b505af41580156118be573d5f803e3d5ffd5b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031662fdd58e306140f0856001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa158015614137573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061415b919061544b565b9050805f03614168575050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f5298aca306141b1856001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018490526064015f604051808303815f87803b1580156141fb575f80fd5b505af115801561420d573d5f803e3d5ffd5b5050601654604051630b0d9c0960e01b81526001600160a01b0386811660048301529182166024820152604481018590527f00000000000000000000000000000000000000000000000000000000000000009091169250630b0d9c0991506064015f604051808303815f87803b158015614285575f80fd5b505af1158015610ad0573d5f803e3d5ffd5b60606109e883835f614480565b5f60ff8216601f8111156109c457604051632cd44ac360e21b815260040160405180910390fd5b6060600c5467ffffffffffffffff8111156142e8576142e8614693565b60405190808252806020026020018201604052801561435457816020015b60408051610100810182525f606082018181526080830182905260a0830182905260c0830182905260e08301829052825260208083018290529282015282525f199092019101816143065790505b5090505f5b600c548160ff161015612f285760ff81165f818152600d602090815260409182902082516101008101845281546001600160a01b03908116606083019081526001840154808316608085015262ffffff600160a01b82041660a0850152600160b81b9004600290810b60c08501528085015490921660e0840152825260039092015480830b938201939093526301000000909204900b91810191909152835190918491811061440a5761440a6152ea565b6020908102919091010152600101614359565b5f805f61442984614519565b90505f6144358561453a565b90508160020b8760020b1215614449578196505b8060020b8660020b131561445b578095505b8560020b8760020b12614475575f80935093505050610f5a565b509495939450505050565b6060814710156144a55760405163cd78605960e01b8152306004820152602401611d23565b5f80856001600160a01b031684866040516144c09190615c46565b5f6040518083038185875af1925050503d805f81146144fa576040519150601f19603f3d011682016040523d82523d5f602084013e6144ff565b606091505b509150915061450f868383614552565b9695505050505050565b5f81600281900b620d89e719816145325761453261548c565b050292915050565b5f81600281900b620d89e8816145325761453261548c565b60608261456757614562826145ae565b6109e8565b815115801561457e57506001600160a01b0384163b155b156145a757604051639996b31560e01b81526001600160a01b0385166004820152602401611d23565b50806109e8565b8051156145be5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6109e860208301846145d7565b6001600160a01b0381168114611ae2575f80fd5b5f806040838503121561463c575f80fd5b823561464781614617565b946020939093013593505050565b5f805f60608486031215614667575f80fd5b833561467281614617565b9250602084013561468281614617565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b60405160a0810167ffffffffffffffff811182821017156146ca576146ca614693565b60405290565b6040516060810167ffffffffffffffff811182821017156146ca576146ca614693565b604051601f8201601f1916810167ffffffffffffffff8111828210171561471c5761471c614693565b604052919050565b62ffffff81168114611ae2575f80fd5b803561246281614724565b8060020b8114611ae2575f80fd5b80356124628161473f565b5f60a08284031215614768575f80fd5b6147706146a7565b9050813561477d81614617565b8152602082013561478d81614617565b602082015260408201356147a081614724565b604082015260608201356147b38161473f565b606082015260808201356147c681614617565b608082015292915050565b5f82601f8301126147e0575f80fd5b6147ea60406146f3565b8060408401858111156147fb575f80fd5b845b818110156148155780358452602093840193016147fd565b509095945050505050565b5f805f806101208587031215614834575f80fd5b61483e8686614758565b935060a085013561484e8161473f565b925060c085013561485e8161473f565b915061486d8660e087016147d1565b905092959194509250565b5f67ffffffffffffffff82111561489157614891614693565b5060051b60200190565b6001600160801b0381168114611ae2575f80fd5b5f82601f8301126148be575f80fd5b81356148d16148cc82614878565b6146f3565b8082825260208201915060208360051b8601019250858311156148f2575f80fd5b602085015b8381101561491857803561490a8161489b565b8352602092830192016148f7565b5095945050505050565b5f82601f830112614931575f80fd5b813561493f6148cc82614878565b8082825260208201915060208360061b860101925085831115614960575f80fd5b602085015b838110156149185761497787826147d1565b8352602090920191604001614965565b5f805f806080858703121561499a575f80fd5b843567ffffffffffffffff8111156149b0575f80fd5b6149bc878288016148af565b945050602085013567ffffffffffffffff8111156149d8575f80fd5b6149e487828801614922565b93505060408501356149f58161473f565b91506060850135614a0581614724565b939692955090935050565b5f60208284031215614a20575f80fd5b5035919050565b60e08101614a8382866001600160a01b0381511682526001600160a01b03602082015116602083015262ffffff6040820151166040830152606081015160020b60608301526001600160a01b0360808201511660808301525050565b8360020b60a08301528260020b60c0830152949350505050565b5f60208284031215614aad575f80fd5b81356109e881614617565b5f805f60608486031215614aca575f80fd5b833592506020840135614adc81614617565b9150604084013567ffffffffffffffff811115614af7575f80fd5b614b0386828701614922565b9150509250925092565b614b668282516001600160a01b0381511682526001600160a01b03602082015116602083015262ffffff6040820151166040830152606081015160020b60608301526001600160a01b0360808201511660808301525050565b602081015160020b60a0830152604081015160020b60c08301525050565b5f8151808452602084019350602083015f5b82811015614bbf57614ba9868351614b0d565b60e0959095019460209190910190600101614b96565b5093949350505050565b604081525f614bdb6040830185614b84565b82810360208401528084518083526020830191506020860192505f5b81811015612ce95783516001600160801b038151168452602081015160208501526040810151604085015250606083019250602084019350600181019050614bf7565b5f805f8060808587031215614c4d575f80fd5b84359350602085013592506040850135614c6681614617565b91506060850135614a0581614617565b60ff60f81b8816815260e060208201525f614c9460e08301896145d7565b8281036040840152614ca681896145d7565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015614cfb578351835260209384019390920191600101614cdd565b50909b9a5050505050505050505050565b5f82601f830112614d1b575f80fd5b8135614d296148cc82614878565b80828252602082019150602060e08402860101925085831115614d4a575f80fd5b602085015b838110156149185760e08188031215614d66575f80fd5b614d6e6146d0565b614d788883614758565b815260a0820135614d888161473f565b602082015260c0820135614d9b8161473f565b6040820152835260209092019160e001614d4f565b5f805f805f805f60e0888a031215614dc6575f80fd5b873567ffffffffffffffff811115614ddc575f80fd5b614de88a828b01614d0c565b975050602088013567ffffffffffffffff811115614e04575f80fd5b614e108a828b016148af565b965050614e1f6040890161474d565b9450606088013567ffffffffffffffff811115614e3a575f80fd5b614e468a828b01614922565b945050608088013567ffffffffffffffff811115614e62575f80fd5b614e6e8a828b01614922565b935050614e7d60a0890161474d565b9150614e8b60c08901614734565b905092959891949750929550565b5f60a08284031215614ea9575f80fd5b6109e88383614758565b5f60208284031215614ec3575f80fd5b813561ffff811681146109e8575f80fd5b5f8060208385031215614ee5575f80fd5b823567ffffffffffffffff811115614efb575f80fd5b8301601f81018513614f0b575f80fd5b803567ffffffffffffffff811115614f21575f80fd5b856020828401011115614f32575f80fd5b6020919091019590945092505050565b602080825282518282018190525f918401906040840190835b8181101561481557835160020b835260209384019390920191600101614f5b565b5f805f805f805f60e0888a031215614f92575f80fd5b8735614f9d81614617565b96506020880135614fad81614617565b95506040880135945060608801359350608088013560ff81168114614fd0575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f8060408385031215614ffe575f80fd5b823561500981614617565b9150602083013561501981614617565b809150509250929050565b600181811c9082168061503857607f821691505b60208210810361505657634e487b7160e01b5f52602260045260245ffd5b50919050565b805f5b6002811015611f3b57815184526020938401939091019060010161505f565b61012081016150db82876001600160a01b0381511682526001600160a01b03602082015116602083015262ffffff6040820151166040830152606081015160020b60608301526001600160a01b0360808201511660808301525050565b8460020b60a08301528360020b60c083015261292560e083018461505c565b634e487b7160e01b5f52602160045260245ffd5b6006811061512a57634e487b7160e01b5f52602160045260245ffd5b9052565b615138818461510e565b604060208201525f61514d60408301846145d7565b949350505050565b5f67ffffffffffffffff82111561516e5761516e614693565b50601f01601f191660200190565b5f6020828403121561518c575f80fd5b815167ffffffffffffffff8111156151a2575f80fd5b8201601f810184136151b2575f80fd5b80516151c06148cc82615155565b8181528560208385010111156151d4575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f8151808452602084019350602083015f5b82811015614bbf5781516001600160801b0316865260209586019590910190600101615203565b5f8151808452602084019350602083015f5b82811015614bbf5761524f86835161505c565b604095909501946020919091019060010161523c565b604081525f61527760408301856151f1565b8281036020840152612925818561522a565b828152604060208201525f61514d604083018461522a565b5f80604083850312156152b2575f80fd5b505080516020909101519092909150565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109c4576109c46152c3565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b038316815261010081016109e86020830184614b0d565b5f805f805f60a08688031215615330575f80fd5b855161533b8161489b565b602087015160408801516060890151608090990151929a91995097965090945092505050565b634e487b7160e01b5f52600160045260245ffd5b5f60ff821660ff810361538a5761538a6152c3565b60010192915050565b60a081525f6153a560a0830188614b84565b82810360208401526153b781886151f1565b90508560020b604084015282810360608401526153d4818661522a565b905082810360808401526153e8818561522a565b98975050505050505050565b602081525f6109e86020830184614b84565b615410818361510e565b6040602082018190525f90820152606001919050565b600282810b9082900b03627fffff198112627fffff821317156109c4576109c46152c3565b5f6020828403121561545b575f80fd5b5051919050565b818103818111156109c4576109c46152c3565b80820281158282048414176109c4576109c46152c3565b634e487b7160e01b5f52601260045260245ffd5b5f826154ae576154ae61548c565b500490565b5f80604083850312156154c4575f80fd5b8235600681106154d2575f80fd5b9150602083013567ffffffffffffffff8111156154ed575f80fd5b8301601f810185136154fd575f80fd5b803561550b6148cc82615155565b81815286602083850101111561551f575f80fd5b816020840160208301375f602083830101528093505050509250929050565b6001600160a01b03815416825260018101546001600160a01b038116602084015262ffffff8160a01c1660408401528060b81c60020b60608401525061558e60028201546001600160a01b031690565b6001600160a01b0316608083015260030154600281810b60a084015260189190911c900b60c090910152565b6001600160a01b038316815261010081016109e8602083018461553e565b5f82601f8301126155e7575f80fd5b6155f160406146f3565b806040840185811115615602575f80fd5b845b81811015614815578051845260209384019301615604565b5f82601f83011261562b575f80fd5b81516156396148cc82614878565b8082825260208201915060208360061b86010192508583111561565a575f80fd5b602085015b838110156149185761567187826155d8565b835260209092019160400161565f565b5f8060408385031215615692575f80fd5b8251602084015190925067ffffffffffffffff8111156156b0575f80fd5b6156bc8582860161561c565b9150509250929050565b80516124628161473f565b5f60a082840312156156e1575f80fd5b6156e96146a7565b905081516156f681614617565b8152602082015161570681614617565b6020820152604082015161571981614724565b6040820152606082015161572c8161473f565b606082015260808201516147c681614617565b5f82601f83011261574e575f80fd5b815161575c6148cc82614878565b8082825260208201915060208360051b86010192508583111561577d575f80fd5b602085015b838110156149185780516157958161489b565b835260209283019201615782565b5f805f805f60a086880312156157b7575f80fd5b855167ffffffffffffffff8111156157cd575f80fd5b8601601f810188136157dd575f80fd5b80516157eb6148cc82614878565b80828252602082019150602060e0840285010192508a83111561580c575f80fd5b6020840193505b828410156158785760e0848c03121561582a575f80fd5b6158326146d0565b61583c8c866156d1565b815260a085015161584c8161473f565b602082015260c085015161585f8161473f565b6040820152825260e09390930192602090910190615813565b80985050505050602086015167ffffffffffffffff811115615898575f80fd5b6158a48882890161573f565b9450506158b3604087016156c6565b9250606086015167ffffffffffffffff8111156158ce575f80fd5b6158da8882890161561c565b925050608086015167ffffffffffffffff8111156158f6575f80fd5b6159028882890161561c565b9150509295509295909350565b5f8060408385031215615920575f80fd5b825167ffffffffffffffff811115615936575f80fd5b6159428582860161573f565b925050602083015167ffffffffffffffff8111156156b0575f80fd5b5f805f806101208587031215615972575f80fd5b61597c86866156d1565b935060a085015161598c8161473f565b60c086015190935061599d8161473f565b915061486d8660e087016155d8565b6001600160a01b038616815261018081016159ca6020830187614b0d565b846101008301528361012083015261450f61014083018461505c565b5f602082840312156159f6575f80fd5b815180151581146109e8575f80fd5b805f5b6002811015611f3b57615a1b848361553e565b60e0939093019260049190910190600101615a08565b6001600160a01b038716815261026060208201525f615a54610260830188614b84565b9050615a636040830187615a05565b6001600160a01b0385166102008301526001600160a01b03841661022083015261ffff8316610240830152979650505050505050565b6001600160a01b038716815261026060208201525f615abc610260830188614b84565b615ac96040840188615a05565b8561020084015284610220840152828103610240840152615aea818561522a565b9998505050505050505050565b5f8260020b80615b0957615b0961548c565b808360020b0791505092915050565b5f8160020b8360020b80615b2e57615b2e61548c565b627fffff1982145f1982141615615b4757615b476152c3565b90059392505050565b600281810b9083900b01627fffff8113627fffff19821217156109c4576109c46152c3565b5f8260020b8260020b028060020b9150808214615b9457615b946152c3565b5092915050565b60e081016109c48284614b0d565b60ff81811683821601908111156109c4576109c46152c3565b6001600160a01b038616815261024060208201525f615be5610240830187614b84565b615bf26040840187615a05565b828103610200840152845180825260208087019201905f5b81811015615c315783516001600160801b0316835260209384019390920191600101615c0a565b5050838103610220850152615aea818661522a565b5f82518060208501845e5f92019182525091905056fea2646970667358221220e28ab45d1d4713973ec2440c9d87c8784ae074302d987b13565c809f67b5bf6064736f6c634300081a0033000000000000000000000000498581ff718922c3f8e6a244956af099b2652b2b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102d758f688a4c1c5a80b116bd945d445546028200000000000000000000000071e7d05be74ff748c45402c06a941c822d756dc500000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000c784554482d555344543030350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c784554482d555344543030350000000000000000000000000000000000000000