26 txs
74 calls
constructor
constructor(address admin_, address core_, address strategyModule_, address lpWrapperImplementation_)
functions
ADMIN_DELEGATE_ROLE
viewfunction ADMIN_DELEGATE_ROLE() view returns (bytes32)
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
configureNameAndSymbol
viewfunction configureNameAndSymbol(address pool) view returns (string name, string symbol)
core
viewfunction core() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
factoryName
viewfunction factoryName() view returns (string)
factorySymbol
viewfunction factorySymbol() view returns (string)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isAdmin
viewfunction isAdmin(address sender) view returns (bool)
isOperator
viewfunction isOperator(address sender) view returns (bool)
lpWrapperAdmin
viewfunction lpWrapperAdmin() view returns (address)
lpWrapperImplementation
viewfunction lpWrapperImplementation() view returns (address)
lpWrapperManager
viewfunction lpWrapperManager() view returns (address)
MIN_OBSERVATION_CARDINALITY
viewfunction MIN_OBSERVATION_CARDINALITY() view returns (uint16)
minInitialTotalSupply
viewfunction minInitialTotalSupply() view returns (uint256)
OPERATOR
viewfunction OPERATOR() view returns (bytes32)
poolToWrapper
viewfunction poolToWrapper(address) view returns (address)
positionManager
viewfunction positionManager() view returns (address)
Q96
viewfunction Q96() view returns (uint256)
strategyModule
viewfunction strategyModule() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
claim
nonpayablefunction claim(address token)
createStrategy
nonpayablefunction createStrategy(tuple params) returns (address lpWrapper)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
removeWrapperForPool
nonpayablefunction removeWrapperForPool(address pool)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setLpWrapperAdmin
nonpayablefunction setLpWrapperAdmin(address lpWrapperAdmin_)
setLpWrapperManager
nonpayablefunction setLpWrapperManager(address lpWrapperManager_)
setMinInitialTotalSupply
nonpayablefunction setMinInitialTotalSupply(uint256 minInitialTotalSupply_)
events
Initialized
event Initialized(uint64 version)
LpWrapperAdminSet
event LpWrapperAdminSet(address indexed lpWrapperAdmin, address indexed sender)
LpWrapperManagerSet
event LpWrapperManagerSet(address indexed lpWrapperManager, address indexed sender)
MinInitialTotalSupplySet
event MinInitialTotalSupplySet(uint256 indexed minInitialTotalSupply, address indexed sender)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
StrategyCreated
event StrategyCreated((address pool, (address token0, address token1, uint24 property, int24 tickLower, int24 tickUpper, uint128 liquidity)[] ammPosition, (uint8 strategyType, int24 tickNeighborhood, int24 tickSpacing, int24 width, uint256 maxLiquidityRatioDeviationX96) strategyParams, address lpWrapper, address caller) params)
WrapperRemoved
event WrapperRemoved(address indexed pool, address indexed sender)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressZero
error AddressZero()
FailedCall
error FailedCall()
FailedDeployment
error FailedDeployment()
Forbidden
error Forbidden()
ForbiddenPool
error ForbiddenPool()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InvalidInitialization
error InvalidInitialization()
InvalidParams
error InvalidParams()
NotInitializing
error NotInitializing()
R
error R()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
T
error T()
creation bytecode
0x610100604052348015610010575f80fd5b50604051614bf7380380614bf783398101604081905261002f9161056d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff1615906001600160401b03165f811580156100785750825b90505f826001600160401b031660011480156100935750303b155b9050811580156100a1575080155b156100bf5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b031916600117855583156100ed57845460ff60401b1916680100000000000000001785555b6100f68961022f565b6001600160a01b0380891660a081905290881660c052604080516354c8e36560e01b815290516354c8e365916004808201926020929091908290030181865afa158015610145573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061016991906105c9565b6001600160a01b031663791b98bc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101c891906105c9565b6001600160a01b0390811660e0528616608052831561022157845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050506105e4565b610237610316565b6001600160a01b03811661025e57604051639fabe1c160e01b815260040160405180910390fd5b6102755f80516020614bb783398151915282610366565b5061028d5f80516020614b9783398151915282610366565b506102a55f80516020614b97833981519152806103be565b6102dc7fc171260023d22a25a00a2789664c9334017843b831138c8ef03cc8897e5873d75f80516020614b978339815191526103be565b6103135f80516020614bb78339815191527fc171260023d22a25a00a2789664c9334017843b831138c8ef03cc8897e5873d76103be565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661036457604051631afcd79f60e31b815260040160405180910390fd5b565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816103938585610439565b905080156103b4575f8581526020839052604090206103b290856104f2565b505b9150505b92915050565b5f80516020614bd78339815191525f6103f1845f9081525f80516020614bd7833981519152602052604090206001015490565b5f85815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b5f8281525f80516020614bd7833981519152602081815260408084206001600160a01b038616855290915282205460ff166104e9575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561049f3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506103b8565b5f9150506103b8565b5f610506836001600160a01b03841661050d565b9392505050565b5f81815260018301602052604081205461055257508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556103b8565b505f6103b8565b6001600160a01b0381168114610313575f80fd5b5f805f8060808587031215610580575f80fd5b845161058b81610559565b602086015190945061059c81610559565b60408601519093506105ad81610559565b60608601519092506105be81610559565b939692955090935050565b5f602082840312156105d9575f80fd5b815161050681610559565b60805160a05160c05160e05161451e6106795f395f818161049201528181610cf801528181611ad60152818161295201526129d801525f81816104f901528181612318015261253f01525f818161071d015281816108eb01528181610d2701528181610de7015281816116b1015281816117b801528181611ca10152611dd601525f81816106220152610aa0015261451e5ff3fe6080604052600436106101f4575f3560e01c8063881afec811610108578063adbf87f01161009d578063ca15c8731161006d578063ca15c87314610690578063d4419876146106af578063d547741f146106ce578063e3bcd82b146106ed578063f2f4eb261461070c575f80fd5b8063adbf87f0146105f2578063c0774edc14610611578063c699850e14610644578063c8669c4914610671575f80fd5b8063983d2737116100d8578063983d273714610559578063a217fddf1461058c578063a3246ad31461059f578063aaeb763d146105cb575f80fd5b8063881afec8146104b45780638aec2834146104e85780639010d07c1461051b57806391d148541461053a575f80fd5b8063407924651161018957806366c1f3aa1161015957806366c1f3aa146103f15780636d70f7ae146104105780636f12deda1461042f57806375b238fc1461044e578063791b98bc14610481575f80fd5b8063407924651461032657806346b6683c1461033d57806349ebda8f146103745780634ef4e387146103af575f80fd5b8063248a9ca3116101c4578063248a9ca3146102aa57806324d7806c146102c95780632f2ff15d146102e857806336568abe14610307575f80fd5b806301f91b54146101ff57806301ffc9a7146102275780630952ff54146102565780631e83409a14610289575f80fd5b366101fb57005b5f80fd5b34801561020a575f80fd5b5061021460035481565b6040519081526020015b60405180910390f35b348015610232575f80fd5b5061024661024136600461362d565b61073f565b604051901515815260200161021e565b348015610261575f80fd5b506102147fc171260023d22a25a00a2789664c9334017843b831138c8ef03cc8897e5873d781565b348015610294575f80fd5b506102a86102a3366004613668565b610769565b005b3480156102b5575f80fd5b506102146102c4366004613683565b61080b565b3480156102d4575f80fd5b506102466102e3366004613668565b61082b565b3480156102f3575f80fd5b506102a861030236600461369a565b610886565b348015610312575f80fd5b506102a861032136600461369a565b6108a8565b348015610331575f80fd5b50610214600160601b81565b348015610348575f80fd5b5061035c6103573660046136c8565b6108e0565b6040516001600160a01b03909116815260200161021e565b34801561037f575f80fd5b506103a2604051806040016040528060038152602001624d565360e81b81525081565b60405161021e919061372c565b3480156103ba575f80fd5b506103a2604051806040016040528060178152602001764d656c6c6f7756656c6f64726f6d65537472617465677960481b81525081565b3480156103fc575f80fd5b506102a861040b366004613668565b610f74565b34801561041b575f80fd5b5061024661042a366004613668565b610fcc565b34801561043a575f80fd5b5060015461035c906001600160a01b031681565b348015610459575f80fd5b506102147ff23ec0bb4210edd5cba85afd05127efcd2fc6a781bfed49188da1081670b22d881565b34801561048c575f80fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104bf575f80fd5b5061035c6104ce366004613668565b5f602081905290815260409020546001600160a01b031681565b3480156104f3575f80fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b348015610526575f80fd5b5061035c61053536600461373e565b610ff7565b348015610545575f80fd5b5061024661055436600461369a565b611024565b348015610564575f80fd5b506102147f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62281565b348015610597575f80fd5b506102145f81565b3480156105aa575f80fd5b506105be6105b9366004613683565b61105a565b60405161021e919061375e565b3480156105d6575f80fd5b506105df606481565b60405161ffff909116815260200161021e565b3480156105fd575f80fd5b506102a861060c366004613683565b61108a565b34801561061c575f80fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064f575f80fd5b5061066361065e366004613668565b6110f8565b60405161021e9291906137aa565b34801561067c575f80fd5b506102a861068b366004613668565b611396565b34801561069b575f80fd5b506102146106aa366004613683565b6113ea565b3480156106ba575f80fd5b506102a86106c9366004613668565b61140e565b3480156106d9575f80fd5b506102a86106e836600461369a565b611489565b3480156106f8575f80fd5b5060025461035c906001600160a01b031681565b348015610717575f80fd5b5061035c7f000000000000000000000000000000000000000000000000000000000000000081565b5f6001600160e01b03198216635a05180f60e01b14806107635750610763826114a5565b92915050565b6107716114d9565b336001600160a01b03821661078e5761078a8147611515565b5050565b6040516370a0823160e01b815230600482015261078a9082906001600160a01b038516906370a0823190602401602060405180830381865afa1580156107d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107fa91906137d7565b6001600160a01b03851691906115b4565b5f9081525f805160206144c9833981519152602052604090206001015490565b5f6108567ff23ec0bb4210edd5cba85afd05127efcd2fc6a781bfed49188da1081670b22d883611024565b8061076357506107637fc171260023d22a25a00a2789664c9334017843b831138c8ef03cc8897e5873d783611024565b61088f8261080b565b61089881611613565b6108a28383611620565b50505050565b6001600160a01b03811633146108d15760405163334bd91960e11b815260040160405180910390fd5b6108db8282611662565b505050565b5f6108e96114d9565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638aec28346040518163ffffffff1660e01b8152600401602060405180830381865afa158015610945573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061096991906137ee565b6001600160a01b0316637b845a348360200160405160200161098b919061385e565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016109b6919061372c565b5f6040518083038186803b1580156109cc575f80fd5b505afa1580156109de573d5f803e3d5ffd5b506109f39250505060808301606084016138c8565b60020b610a0861014084016101208501613668565b6001600160a01b031663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6791906138e3565b60020b141580610a7d5750816101800135600354115b15610a9b57604051635435b28960e11b815260040160405180910390fd5b610ac47f000000000000000000000000000000000000000000000000000000000000000061169b565b9050610b0c6040518060c001604052805f63ffffffff1681526020015f6001600160a01b03168152602001606081526020016060815260200160608152602001606081525090565b610b97336040518060a0016040528086610120016020810190610b2f9190613668565b6001600160a01b0316815260200186602001803603810190610b51919061398d565b8152602001866101400135815260200186610160013581526020018660c001604051602001610b809190613a1c565b6040516020818303038152906040528152506116a6565b6040820152610ba96020840184613a68565b63ffffffff1681526001600160a01b0382166020808301829052604080518082019091529182528101610be461014086016101208701613668565b6001600160a01b031663a6f19c846040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c1f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4391906137ee565b6001600160a01b03169052604051610c7c919060200181516001600160a01b039081168252602092830151169181019190915260400190565b604051602081830303815290604052816060018190525082602001604051602001610ca7919061385e565b60405160208183030381529060405281608001819052508260c001604051602001610cd29190613a1c565b60408051601f1981840301815291905260a08201525f5b816040015151811015610dce577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b37f000000000000000000000000000000000000000000000000000000000000000084604001518481518110610d5c57610d5c613a8e565b60200260200101516040518363ffffffff1660e01b8152600401610d959291906001600160a01b03929092168252602082015260400190565b5f604051808303815f87803b158015610dac575f80fd5b505af1158015610dbe573d5f803e3d5ffd5b505060019092019150610ce99050565b50604051622e909160e41b81525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906302e9091090610e1c908590600401613aa2565b6020604051808303815f875af1158015610e38573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5c91906137d7565b90505f80610e7561065e61014088016101208901613668565b600154600254604051635a3f27a760e01b81529395509193506001600160a01b0380891693635a3f27a793610ec89389936101808e0135936101a08f01359392821692909116908a908a90600401613b65565b5f604051808303815f87803b158015610edf575f80fd5b505af1158015610ef1573d5f803e3d5ffd5b50505050845f8088610120016020810190610f0c9190613668565b6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550610f6b8387602001803603810190610f66919061398d565b611c89565b50505050919050565b610f7c611f44565b6001600160a01b0381165f8181526020819052604080822080546001600160a01b0319169055513392917f2d9df8a2f70fd0c98a51ffa174e99d646a7dff781869d74e9bbdbb9d7f35cd6c91a350565b5f6107637f46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62283611024565b5f8281525f805160206144a983398151915260208190526040822061101c9084611f6a565b949350505050565b5f9182525f805160206144c9833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f8181525f805160206144a9833981519152602081905260409091206060919061108390611f75565b9392505050565b611092611f44565b8015806110a65750670de0b6b3a764000081115b156110c457604051635435b28960e11b815260040160405180910390fd5b6003819055604051339082907f24cd7b07f21eb3eec5ff46d829b1e35748ea546eec81002fc7961f9a1f76eefa905f90a350565b6060805f836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611138573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115c91906137ee565b6001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015611196573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526111bd9190810190613c10565b846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111f9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061121d91906137ee565b6001600160a01b03166395d89b416040518163ffffffff1660e01b81526004015f60405180830381865afa158015611257573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261127e9190810190613c10565b6112e9866001600160a01b031663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e191906138e3565b60020b611f81565b6040516020016112fb93929190613c54565b60408051601f19818403018152828201825260178352764d656c6c6f7756656c6f64726f6d65537472617465677960481b60208481019190915291519093506113479291849101613cba565b60408051601f19818403018152828201825260038352624d565360e81b602084810191909152915190955061137f9291849101613cba565b604051602081830303815290604052915050915091565b61139e611f44565b600280546001600160a01b0319166001600160a01b0383169081179091556040513391907f9a604c3226d3af4906c51528ae8d56690c543c4e8bb19318d89574293e85592c905f90a350565b5f8181525f805160206144a983398151915260208190526040822061108390612010565b611416611f44565b6001600160a01b03811661143d57604051639fabe1c160e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040513391907f1b2282672dae972df15fc639a072690d1bb965cc8516552e55323a8fb5dccf40905f90a350565b6114928261080b565b61149b81611613565b6108a28383611662565b5f6001600160e01b03198216637965db0b60e01b148061076357506301ffc9a760e01b6001600160e01b0319831614610763565b6114e23361082b565b1580156114f557506114f333610fcc565b155b1561151357604051631dd2188d60e31b815260040160405180910390fd5b565b804710156115445760405163cf47918160e01b8152476004820152602481018290526044015b60405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461158d576040519150601f19603f3d011682016040523d82523d5f602084013e611592565b606091505b50509050806108db5760405163d6bda27560e01b815260040160405180910390fd5b6040516001600160a01b038381166024830152604482018390526108db91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612019565b61161d8133612085565b50565b5f5f805160206144a98339815191528161163a85856120be565b9050801561101c575f858152602083905260409020611659908561215f565b50949350505050565b5f5f805160206144a98339815191528161167c8585612173565b9050801561101c575f85815260208390526040902061165990856121ec565b5f610763825f612200565b60605f825f015190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166354c8e3656040518163ffffffff1660e01b8152600401602060405180830381865afa15801561170b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172f91906137ee565b604051635b16ebb760e01b81526001600160a01b0383811660048301529190911690635b16ebb790602401602060405180830381865afa158015611775573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117999190613cf7565b6117b6576040516341ac959360e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611812573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183691906137ee565b6001600160a01b031663c128572e8285608001516040518363ffffffff1660e01b8152600401611867929190613d10565b5f6040518083038186803b15801561187d575f80fd5b505afa15801561188f573d5f803e3d5ffd5b50506040516332148f6760e01b8152606460048201526001600160a01b03841692506332148f6791506024015f604051808303815f87803b1580156118d2575f80fd5b505af11580156118e4573d5f803e3d5ffd5b505f9250600491506118f39050565b602085015151600481111561190a5761190a61381c565b1490508061191957600161191c565b60025b60ff166001600160401b03811115611936576119366138fe565b60405190808252806020026020018201604052801561195f578160200160208202803683370190505b5092505f611980858361197457612294611978565b6124bb5b63ffffffff16565b90505f836001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119e391906137ee565b90505f846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4691906137ee565b90505f856001600160a01b031663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aa991906138e3565b9050611aba89848a6040015161289d565b611ac989838a6060015161289d565b5f5b8451811015611c7c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663b5007d1f604051806101800160405280876001600160a01b03168152602001866001600160a01b031681526020018560020b8152602001888581518110611b4857611b48613a8e565b60200260200101516040015160020b8152602001888581518110611b6e57611b6e613a8e565b60200260200101516060015160020b8152602001888581518110611b9457611b94613a8e565b60200260200101515f01518152602001888581518110611bb657611bb6613a8e565b60200260200101516020015181526020015f81526020015f8152602001306001600160a01b031681526020015f1981526020015f6001600160a01b03168152506040518263ffffffff1660e01b8152600401611c129190613d33565b6080604051808303815f875af1158015611c2e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c529190613e22565b505089518a915083908110611c6957611c69613a8e565b6020908102919091010152600101611acb565b5050505050505092915050565b604051630ce00c9560e21b8152600481018390525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906333803254906024015f60405180830381865afa158015611ced573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d149190810190613f24565b90505f6040518060a0016040528083606001516001600160a01b031681526020018360800151516001600160401b03811115611d5257611d526138fe565b604051908082528060200260200182016040528015611d8b57816020015b611d786135f9565b815260200190600190039081611d705790505b50815260208082018690526060808601516001600160a01b039081165f9081529283905260408084205490911690840152339201919091529091505b826080015151811015611f06577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166354c8e3656040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e5491906137ee565b6001600160a01b031663f71f056284608001518381518110611e7857611e78613a8e565b60200260200101516040518263ffffffff1660e01b8152600401611e9e91815260200190565b60c060405180830381865afa158015611eb9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611edd9190614039565b82602001518281518110611ef357611ef3613a8e565b6020908102919091010152600101611dc7565b507fdfaaf4ccd03542e6d5554116772e411067bb50be0c46a38bba3151f97716fc4581604051611f3691906141b0565b60405180910390a150505050565b611f4d3361082b565b61151357604051631dd2188d60e31b815260040160405180910390fd5b5f6110838383612a05565b60605f61108383612a2b565b60605f611f8d83612a84565b60010190505f816001600160401b03811115611fab57611fab6138fe565b6040519080825280601f01601f191660200182016040528015611fd5576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611fdf57509392505050565b5f610763825490565b5f8060205f8451602086015f885af180612038576040513d5f823e3d81fd5b50505f513d9150811561204f57806001141561205c565b6001600160a01b0384163b155b156108a257604051635274afe760e01b81526001600160a01b038516600482015260240161153b565b61208f8282611024565b61078a5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161153b565b5f5f805160206144c98339815191526120d78484611024565b612156575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561210c3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610763565b5f915050610763565b5f611083836001600160a01b038416612b5b565b5f5f805160206144c983398151915261218c8484611024565b15612156575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610763565b5f611083836001600160a01b038416612ba7565b5f8147101561222b5760405163cf47918160e01b81524760048201526024810183905260440161153b565b763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c175f526e5af43d82803e903d91602b57fd5bf38360781b176020526037600983f090506001600160a01b0381166107635760405163b06ebf3d60e01b815260040160405180910390fd5b60605f825f01516001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160c060405180830381865afa1580156122d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122fa919061422d565b505050505090505f61230b82612c81565b90505f6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663b95443b884848460405190808252806020026020018201604052801561237957816020015b6123666135f9565b81526020019060019003908161235e5790505b5089602001516040518563ffffffff1660e01b815260040161239e94939291906142ab565b5f60405180830381865afa1580156123b8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123df919081019061434e565b604080516001808252818301909252919350909150816020015b604080516080810182525f8082526020808301829052928201819052606082015282525f199092019101816123f95790505093506040518060800160405280866040015181526020018660600151815260200182602001515f8151811061246257612462613a8e565b602002602001015160020b815260200182604001515f8151811061248857612488613a8e565b602002602001015160020b815250845f815181106124a8576124a8613a8e565b6020026020010181905250505050919050565b60605f825f01516001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160c060405180830381865afa1580156124fd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612521919061422d565b505050505090505f61253282612c81565b90505f6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663623468be8484846040519080825280602002602001820160405280156125a057816020015b61258d6135f9565b8152602001906001900390816125855790505b5089602001516040518563ffffffff1660e01b81526004016125c594939291906142ab565b5f60405180830381865afa1580156125df573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612606919081019061434e565b9150505f806126718561263585602001515f8151811061262857612628613a8e565b6020026020010151612f85565b61264e86604001515f8151811061262857612628613a8e565b86606001515f8151811061266457612664613a8e565b60200260200101516132a0565b915091505f806126e187612695876020015160018151811061262857612628613a8e565b6126af886040015160018151811061262857612628613a8e565b88606001515f815181106126c5576126c5613a8e565b6020026020010151600160601b6126dc919061444f565b6132a0565b90925090505f61271d6127016126f78588614462565b8c6040015161333b565b61271861270e8588614462565b8d6060015161333b565b61336e565b60408051600280825260608201909252919250816020015b604080516080810182525f8082526020808301829052928201819052606082015282525f19909201910181612735579050509850604051806080016040528082876127809190614475565b815260200161278f8387614475565b815260200187602001515f815181106127aa576127aa613a8e565b602002602001015160020b815260200187604001515f815181106127d0576127d0613a8e565b602002602001015160020b815250895f815181106127f0576127f0613a8e565b6020026020010181905250604051806080016040528082856128129190614475565b81526020016128218385614475565b8152602001876020015160018151811061283d5761283d613a8e565b602002602001015160020b8152602001876040015160018151811061286457612864613a8e565b602002602001015160020b8152508960018151811061288557612885613a8e565b60200260200101819052505050505050505050919050565b6040516370a0823160e01b81523060048201819052905f906001600160a01b038516906370a0823190602401602060405180830381865afa1580156128e4573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061290891906137d7565b905082811015612933576129338583612921848761444f565b6001600160a01b03881692919061337d565b604051636eb1769f60e11b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000008116602483015285169063dd62ed3e90604401602060405180830381865afa15801561299f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129c391906137d7565b5f036129fe576129fe6001600160a01b0385167f00000000000000000000000000000000000000000000000000000000000000005f196133b6565b5050505050565b5f825f018281548110612a1a57612a1a613a8e565b905f5260205f200154905092915050565b6060815f01805480602002602001604051908101604052809291908181526020018280548015612a7857602002820191905f5260205f20905b815481526020019060010190808311612a64575b50505050509050919050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612ac25772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612aee576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612b0c57662386f26fc10000830492506010015b6305f5e1008310612b24576305f5e100830492506008015b6127108310612b3857612710830492506004015b60648310612b4a576064830492506002015b600a83106107635760010192915050565b5f818152600183016020526040812054612ba057508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610763565b505f610763565b5f8181526001830160205260408120548015612156575f612bc960018361444f565b85549091505f90612bdc9060019061444f565b9050808214612c3b575f865f018281548110612bfa57612bfa613a8e565b905f5260205f200154905080875f018481548110612c1a57612c1a613a8e565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612c4c57612c4c614494565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610763565b5f6401000276a36001600160a01b03831610801590612cbc575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b612cd9576040516324c070df60e11b815260040160405180910390fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c6001600160401b03811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110612d6c57607f810383901c9150612d76565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14612f7657886001600160a01b0316612f5b82612f85565b6001600160a01b03161115612f705781612f78565b80612f78565b815b9998505050505050505050565b5f805f8360020b12612f9a578260020b612fa1565b8260020b5f035b9050620d89e8811115612fc7576040516315e4079d60e11b815260040160405180910390fd5b5f816001165f03612fdc57600160801b612fee565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615613022576ffff97272373d413259a46990580e213a0260801c5b6004821615613041576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613060576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561307f576fffcb9843d60f6159c9db58835c9266440260801c5b602082161561309e576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156130bd576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156130dc576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156130fc576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561311c576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561313c576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561315c576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561317c576fd097f3bdfd2022b8845ad8f792aa58250260801c5b61200082161561319c576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156131bc576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156131dc576f31be135f97d08fd981231505542fcfa60260801c5b620100008216156131fd576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561321d576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561323c576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613259576b048a170391f7dc42444e8fa20260801c5b5f8460020b131561327857805f198161327457613274614219565b0490505b64010000000081061561328c57600161328e565b5f5b60ff16602082901c0192505050919050565b5f80836001600160a01b0316856001600160a01b031611156132c0579293925b846001600160a01b0316866001600160a01b0316116132eb576132e4858585613445565b9150613332565b836001600160a01b0316866001600160a01b0316101561332457613310868585613445565b915061331d8587856134b3565b9050613332565b61332f8585856134b3565b90505b94509492505050565b5f815f0361334d5761334d60126134f5565b81600184038161335f5761335f614219565b04600101831515029392505050565b5f828218828411028218611083565b6040516001600160a01b0384811660248301528381166044830152606482018390526108a29186918216906323b872dd906084016115e1565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526134078482613506565b6108a2576040516001600160a01b0384811660248301525f604483015261343b91869182169063095ea7b3906064016115e1565b6108a28482612019565b5f826001600160a01b0316846001600160a01b03161115613464579192915b836001600160a01b031661349d606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b031661354f565b816134aa576134aa614219565b04949350505050565b5f826001600160a01b0316846001600160a01b031611156134d2579192915b61101c826001600160801b03168585036001600160a01b0316600160601b61354f565b634e487b715f52806020526024601cfd5b5f805f8060205f8651602088015f8a5af192503d91505f519050828015613545575081156135375780600114613545565b5f866001600160a01b03163b115b9695505050505050565b5f80805f19858709858702925082811083820303915050805f03613583575f8411613578575f80fd5b508290049050611083565b80841161358e575f80fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a081019190915290565b5f6020828403121561363d575f80fd5b81356001600160e01b031981168114611083575f80fd5b6001600160a01b038116811461161d575f80fd5b5f60208284031215613678575f80fd5b813561108381613654565b5f60208284031215613693575f80fd5b5035919050565b5f80604083850312156136ab575f80fd5b8235915060208301356136bd81613654565b809150509250929050565b5f6101c082840312156136d9575f80fd5b50919050565b5f5b838110156136f95781810151838201526020016136e1565b50505f910152565b5f81518084526137188160208601602086016136df565b601f01601f19169290920160200192915050565b602081525f6110836020830184613701565b5f806040838503121561374f575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b8181101561379e5783516001600160a01b031683529284019291840191600101613779565b50909695505050505050565b604081525f6137bc6040830185613701565b82810360208401526137ce8185613701565b95945050505050565b5f602082840312156137e7575f80fd5b5051919050565b5f602082840312156137fe575f80fd5b815161108381613654565b803560058110613817575f80fd5b919050565b634e487b7160e01b5f52602160045260245ffd5b6005811061384c57634e487b7160e01b5f52602160045260245ffd5b9052565b8060020b811461161d575f80fd5b60a081016138748261386f85613809565b613830565b602083013561388281613850565b60020b6020830152604083013561389881613850565b60020b604083015260608301356138ae81613850565b8060020b6060840152506080830135608083015292915050565b5f602082840312156138d8575f80fd5b813561108381613850565b5f602082840312156138f3575f80fd5b815161108381613850565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b0381118282101715613934576139346138fe565b60405290565b60405161010081016001600160401b0381118282101715613934576139346138fe565b604051601f8201601f191681016001600160401b0381118282101715613985576139856138fe565b604052919050565b5f60a0828403121561399d575f80fd5b6139a5613912565b6139ae83613809565b815260208301356139be81613850565b602082015260408301356139d181613850565b604082015260608301356139e481613850565b60608201526080928301359281019290925250919050565b61ffff8116811461161d575f80fd5b63ffffffff8116811461161d575f80fd5b606081018235613a2b816139fc565b61ffff1682526020830135613a3f81613a0b565b63ffffffff1660208301526040830135613a5881613850565b8060020b60408401525092915050565b5f60208284031215613a78575f80fd5b813561108381613a0b565b805161381781613654565b634e487b7160e01b5f52603260045260245ffd5b6020808252825163ffffffff1682820152828101516001600160a01b031660408084019190915283015160c06060840152805160e084018190525f929182019083906101008601905b80831015613b0b5783518252928401926001929092019190840190613aeb565b5060608701519350601f19925082868203016080870152613b2c8185613701565b935050506080850151818584030160a0860152613b498382613701565b92505060a0850151818584030160c08601526135458382613701565b87815260208101879052604081018690526001600160a01b0385811660608301528416608082015260e060a082018190525f90613ba490830185613701565b82810360c0840152613bb68185613701565b9a9950505050505050505050565b5f6001600160401b03831115613bdc57613bdc6138fe565b613bef601f8401601f191660200161395d565b9050828152838383011115613c02575f80fd5b6110838360208301846136df565b5f60208284031215613c20575f80fd5b81516001600160401b03811115613c35575f80fd5b8201601f81018413613c45575f80fd5b61101c84825160208401613bc4565b601d60f91b81525f8451613c6f8160018501602089016136df565b8083019050602d60f81b8060018301528551613c92816002850160208a016136df565b60029201918201528351613cad8160038401602088016136df565b0160030195945050505050565b5f8351613ccb8184602088016136df565b835190830190613cdf8183602088016136df565b01949350505050565b80518015158114613817575f80fd5b5f60208284031215613d07575f80fd5b61108382613ce8565b6001600160a01b03831681526040602082018190525f9061101c90830184613701565b81516001600160a01b0316815261018081016020830151613d5f60208401826001600160a01b03169052565b506040830151613d74604084018260020b9052565b506060830151613d89606084018260020b9052565b506080830151613d9e608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151613de4828501826001600160a01b03169052565b50506101408381015190830152610160928301516001600160a01b0316929091019190915290565b80516001600160801b0381168114613817575f80fd5b5f805f8060808587031215613e35575f80fd5b84519350613e4560208601613e0c565b6040860151606090960151949790965092505050565b805161381781613a0b565b805162ffffff81168114613817575f80fd5b5f6001600160401b03821115613e9057613e906138fe565b5060051b60200190565b5f82601f830112613ea9575f80fd5b81516020613ebe613eb983613e78565b61395d565b8083825260208201915060208460051b870101935086841115613edf575f80fd5b602086015b84811015613efb5780518352918301918301613ee4565b509695505050505050565b5f82601f830112613f15575f80fd5b61108383835160208501613bc4565b5f60208284031215613f34575f80fd5b81516001600160401b0380821115613f4a575f80fd5b908301906101008286031215613f5e575f80fd5b613f6661393a565b613f6f83613e5b565b8152613f7d60208401613e66565b6020820152613f8e60408401613a83565b6040820152613f9f60608401613a83565b6060820152608083015182811115613fb5575f80fd5b613fc187828601613e9a565b60808301525060a083015182811115613fd8575f80fd5b613fe487828601613f06565b60a08301525060c083015182811115613ffb575f80fd5b61400787828601613f06565b60c08301525060e08301518281111561401e575f80fd5b61402a87828601613f06565b60e08301525095945050505050565b5f60c08284031215614049575f80fd5b60405160c081018181106001600160401b038211171561406b5761406b6138fe565b604052825161407981613654565b8152602083015161408981613654565b602082015261409a60408401613e66565b604082015260608301516140ad81613850565b606082015260808301516140c081613850565b60808201526140d160a08401613e0c565b60a08201529392505050565b5f815180845260208085019450602084015f5b8381101561416557815180516001600160a01b03908116895284820151168489015260408082015162ffffff1690890152606080820151600290810b918a019190915260808083015190910b9089015260a0908101516001600160801b03169088015260c090960195908201906001016140f0565b509495945050505050565b61417b828251613830565b602081015160020b6020830152604081015160020b6040830152606081015160020b6060830152608081015160808301525050565b602081525f60018060a01b0380845116602084015260208401516101208060408601526141e16101408601836140dd565b915060408601516141f56060870182614170565b50606086015183166101008601526080909501519091169390920192909252919050565b634e487b7160e01b5f52601260045260245ffd5b5f805f805f8060c08789031215614242575f80fd5b865161424d81613654565b602088015190965061425e81613850565b604088015190955061426f816139fc565b6060880151909450614280816139fc565b6080880151909350614291816139fc565b915061429f60a08801613ce8565b90509295509295509295565b6001600160a01b0385168152600284900b6020820152610100604082018190525f906142d9838201866140dd565b9150506137ce6060830184614170565b5f82601f8301126142f8575f80fd5b81516020614308613eb983613e78565b8083825260208201915060208460051b870101935086841115614329575f80fd5b602086015b84811015613efb57805161434181613850565b835291830191830161432e565b5f806040838503121561435f575f80fd5b61436883613ce8565b915060208301516001600160401b0380821115614383575f80fd5b9084019060a08287031215614396575f80fd5b61439e613912565b825181526020830151828111156143b3575f80fd5b6143bf888286016142e9565b6020830152506040830151828111156143d6575f80fd5b6143e2888286016142e9565b6040830152506060830151828111156143f9575f80fd5b61440588828601613e9a565b60608301525060808301518281111561441c575f80fd5b61442888828601613e9a565b6080830152508093505050509250929050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156107635761076361443b565b808201808211156107635761076361443b565b5f8261448f57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603160045260245ffdfec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e8237170593200002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a264697066735822122025cdee8167efe1249c1a2e745e95eb3974730be75e0b94545f2197f7ab806c1a64736f6c63430008190033f23ec0bb4210edd5cba85afd05127efcd2fc6a781bfed49188da1081670b22d846a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f62202dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800000000000000000000000000be440aee8c8d54ac7bb7d93506460492df5812ea0000000000000000000000000000000ce42d4981513060ab7e50b9e5e2d19af1000000000000000000000000debea4af183d323132ad5ab7c0b7cd2091094eee000000000000000000000000fd61e98a352ed8ca2c364dcd5b6c21dc126959f5