7 txs
15 calls
constructor
constructor(address _pm, address _posManagerAdapter, address _hook)
functions
incentiveData
viewfunction incentiveData(bytes32 pid, address token) view returns (uint256 rewardRate, uint256 periodFinish, uint256 remaining)
incentiveDataBatch
viewfunction incentiveDataBatch(bytes32 pid, address[] tokens) view returns (uint256[] rewardRates, uint256[] finishes, uint256[] remainings)
incentives
viewfunction incentives(bytes32, address) view returns (uint128 rewardRate, uint64 periodFinish, uint64 lastUpdate, uint128 remaining)
isHook
viewfunction isHook(address) view returns (bool)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
pendingRewardsByTokenId
viewfunction pendingRewardsByTokenId(uint256 tokenId, address token) view returns (uint256 amount)
pendingRewardsByTokenIdBatch
viewfunction pendingRewardsByTokenIdBatch(uint256 tokenId, address[] tokens) view returns (uint256[] amounts)
pendingRewardsOwner
viewfunction pendingRewardsOwner(bytes32 pid, address owner) view returns (tuple[] list)
pendingRewardsOwnerBatch
viewfunction pendingRewardsOwnerBatch(bytes32[] pids, address owner) view returns (tuple[][] lists)
POOL_MANAGER
viewfunction POOL_MANAGER() view returns (address)
poolRewards
viewfunction poolRewards(bytes32) view returns (uint128 liquidity, int24 tick, uint64 lastUpdated)
poolTokensOf
viewfunction poolTokensOf(bytes32 pid) view returns (address[] list)
positionManagerAdapter
viewfunction positionManagerAdapter() view returns (address)
positionRewards
viewfunction positionRewards(bytes32, address) view returns (uint256 rewardsPerLiquidityLastX128, uint256 rewardsAccrued)
whitelist
viewfunction whitelist(address) view returns (bool)
acceptOwnership
nonpayablefunction acceptOwnership()
adminForceUnsubscribe
nonpayablefunction adminForceUnsubscribe(bytes32 posKey, bool claimToOwner)
claim
nonpayablefunction claim(uint256 tokenId, address token, address to) returns (uint256 amount)
claimAllForOwner
nonpayablefunction claimAllForOwner(bytes32[] pids, address owner)
createIncentive
nonpayablefunction createIncentive(tuple key, address rewardToken, uint256 amount)
initPool
nonpayablefunction initPool(tuple key, int24 initialTick)
notifyBurnWithContext
nonpayablefunction notifyBurnWithContext(bytes32 positionKey, bytes32 poolIdRaw, address ownerAddr, int24 currentTick, int24 tickLower, int24 tickUpper, uint128 liquidity)
notifyModifyLiquidityWithContext
nonpayablefunction notifyModifyLiquidityWithContext(bytes32 positionKey, bytes32 poolIdRaw, int24 currentTick, int24 tickLower, int24 tickUpper, int256 liquidityChange, uint128 liquidityAfter)
notifySubscribeWithContext
nonpayablefunction notifySubscribeWithContext(uint256 tokenId, bytes32 positionKey, bytes32 poolIdRaw, int24 currentTick, int24 tickLower, int24 tickUpper, uint128 liquidity, address owner)
notifyUnsubscribeWithContext
nonpayablefunction notifyUnsubscribeWithContext(bytes32 positionKey, bytes32 poolIdRaw, int24 tickLower, int24 tickUpper, uint128 liquidity)
pokePool
nonpayablefunction pokePool(tuple key)
renounceOwnership
nonpayablefunction renounceOwnership()
setHook
nonpayablefunction setHook(address _hook, bool _enabled)
setPositionManagerAdapter
nonpayablefunction setPositionManagerAdapter(address _adapter)
setWhitelist
nonpayablefunction setWhitelist(address _token, bool _enabled)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
Claimed
event Claimed(address indexed user, address indexed token, uint256 amount)
ForceUnsubscribed
event ForceUnsubscribed(address indexed owner, bytes32 indexed pid, bytes32 posKey)
HookAuthorised
event HookAuthorised(address hook, bool enabled)
IncentiveActivated
event IncentiveActivated(bytes32 indexed pid, address indexed token, uint256 amount, uint256 rate)
IncentiveDeactivated
event IncentiveDeactivated(bytes32 indexed pid, address indexed token)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
PositionManagerAdapterUpdated
event PositionManagerAdapterUpdated(address newAdapter)
WhitelistSet
event WhitelistSet(address indexed token, bool allowed)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
AlreadySet
error AlreadySet()
FailedInnerCall
error FailedInnerCall()
InsufficientIncentive
error InsufficientIncentive()
NotAllowed
error NotAllowed()
NotAuthorized
error NotAuthorized()
NotHook
error NotHook()
NotSubscriber
error NotSubscriber()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PoolNotInitialized
error PoolNotInitialized()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
ZeroAddress
error ZeroAddress()
ZeroAmount
error ZeroAmount()
creation bytecode
0x60a060405234801561000f575f80fd5b50604051614a1a380380614a1a83398101604081905261002e9161015b565b338061005357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005c816100dc565b506001600160a01b03838116608052600280546001600160a01b03191684831617905581165f81815260036020908152604091829020805460ff191660019081179091558251938452908301527f969bb7542263e82515f30263de146111e882f6d42fc244c9624a924b2d197790910160405180910390a15050506101a5565b600180546001600160a01b03191690556100f5816100f8565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146100f5575f80fd5b5f805f6060848603121561016d575f80fd5b835161017881610147565b602085015190935061018981610147565b604085015190925061019a81610147565b809150509250925092565b6080516148566101c45f395f81816102d0015261190c01526148565ff3fe608060405234801561000f575f80fd5b50600436106101e7575f3560e01c806385e84a1011610109578063c981328e1161009e578063e32cc1c71161006e578063e32cc1c714610610578063eb53404d14610623578063ee79cbc914610643578063f2fde38b14610656575f80fd5b8063c981328e14610552578063d2676529146105ca578063dccab591146105ec578063e30c3978146105ff575f80fd5b80639b19251a116100d95780639b19251a146103eb578063a88848d41461041d578063adcdf9891461043d578063c0e8d384146104d7575f80fd5b806385e84a10146103865780638da5cb5b146103995780639048cfea146103a957806396657955146103cb575f80fd5b806362308e851161017f57806373af1f4b1161014f57806373af1f4b1461033857806379ba5097146103585780637e9a681414610360578063833e8db114610373575f80fd5b806362308e85146102cb57806369a5d8ca1461030a5780636cef460b1461031d578063715018a614610330575f80fd5b80633130c24a116101ba5780633130c24a1461027f5780633756bca61461029257806353d6fd59146102a55780635b92a5f0146102b8575f80fd5b80632048e384146101eb57806323c9866d146102005780632ab72215146102135780632cd1b1131461025e575b5f80fd5b6101fe6101f9366004613eb3565b610669565b005b6101fe61020e366004613eda565b6106bc565b610244610221366004613f1c565b600660209081525f92835260408084209091529082529020805460019091015482565b604080519283526020830191909152015b60405180910390f35b61027161026c366004613f3f565b6108a2565b604051908152602001610255565b6101fe61028d366004613f7e565b610aae565b6101fe6102a0366004614003565b610cfb565b6101fe6102b336600461404b565b610e8a565b6101fe6102c6366004614077565b610ef0565b6102f27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610255565b610271610318366004613f1c565b610f73565b6002546102f2906001600160a01b031681565b6101fe610f7e565b61034b610346366004614092565b610f91565b60405161025591906140a9565b6101fe61105a565b6101fe61036e366004614118565b6110a0565b6101fe61038136600461404b565b61116c565b6101fe610394366004614265565b6111fd565b5f546001600160a01b03166102f2565b6103bc6103b7366004614290565b611310565b60405161025593929190614312565b6103de6103d9366004613f1c565b6114e1565b604051610255919061438f565b61040d6103f9366004614077565b600f6020525f908152604090205460ff1681565b6040519015158152602001610255565b61043061042b366004614003565b6114ed565b60405161025591906143a1565b61049861044b366004613f1c565b600460209081525f9283526040808420909152908252902080546001909101546001600160801b038083169267ffffffffffffffff600160801b8204811693600160c01b90920416911684565b60405161025594939291906001600160801b03948516815267ffffffffffffffff93841660208201529190921660408201529116606082015260800190565b6105206104e5366004614092565b60056020525f90815260409020600101546001600160801b03811690600160801b810460020b90600160981b900467ffffffffffffffff1683565b604080516001600160801b03909416845260029290920b602084015267ffffffffffffffff1690820152606001610255565b6105af610560366004613f1c565b5f9182526004602090815260408084206001600160a01b03939093168452919052902080546001909101546001600160801b0380831693600160801b90930467ffffffffffffffff1692911690565b60408051938452602084019290925290820152606001610255565b61040d6105d8366004614077565b60036020525f908152604090205460ff1681565b6101fe6105fa366004614404565b611599565b6001546001600160a01b03166102f2565b6101fe61061e366004614468565b611674565b610636610631366004614290565b61174b565b60405161025591906144ef565b6101fe610651366004614501565b6117f2565b6101fe610664366004614077565b611896565b335f9081526003602052604090205460ff16610698576040516318e59f8760e31b815260040160405180910390fd5b6106b96106b46106ad36849003840184614558565b60a0902090565b611906565b50565b6106c4611951565b5f828152600c60205260409020541561089e575f828152600c6020526040808220546002549151637ba03aad60e01b8152600481018290529092916001600160a01b031690637ba03aad9060240160c060405180830381865afa15801561072d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107519190614572565b5090505f6107608260a0902090565b905061076b81611906565b5f858152600b60209081526040808320600a9092529091205481546001600160801b03909116906107af9084908990600281810b9163010000009004900b8561197d565b6001600160801b038116156107f65781546107f6908490600281810b9163010000009004900b6107e76001600160801b038616611a11565b6107f090614617565b5f611a3d565b5f878152600860205260409020546001600160a01b03168615610820576108208489836001611b71565b6108326007600a60086009888d611bf8565b5f888152600b60209081526040808320805465ffffffffffff19169055600c825280832092909255905189815285916001600160a01b038416917ff23cbea3553dfb61d7f8cb5d115d502c3c510358866551f11fd9383b3f9e53ea910160405180910390a35050505050505b5050565b6002546040516331a9108f60e11b8152600481018590525f9182916001600160a01b0390911690636352211e90602401602060405180830381865afa1580156108ed573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109119190614644565b9050336001600160a01b03821614610955576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600254604051637ba03aad60e01b8152600481018790525f916001600160a01b031690637ba03aad9060240160c060405180830381865afa15801561099c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c09190614572565b5090505f6109cf8260a0902090565b90505f6109e588835f9182526020526040902090565b5f818152600c602052604081205491925003610a07575f945050505050610aa7565b610a1082611906565b5f818152600b6020908152604080832080548685526005909352908320909291610a4b91908b90600281810b9163010000009004900b611d18565b5f8481526006602090815260408083206001600160a01b038e1684528252808320878452600a9092529091205491925090610a919082906001600160801b031684611e54565b50610a9d848b8b611e87565b9750505050505050505b9392505050565b6001600160a01b0382165f908152600f602052604090205460ff1680610af15750610adc6020840184614077565b6001600160a01b0316826001600160a01b0316145b80610b1c5750610b076040840160208501614077565b6001600160a01b0316826001600160a01b0316145b610b52576040517f3d693ada00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f03610b8b576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610b9e6106ad36869003860186614558565b5f81815260056020526040812060010154919250600160981b90910467ffffffffffffffff169003610bfc576040517f486aa30700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c116001600160a01b038416333085611f1e565b5f818152600e602090815260408083206001600160a01b038716845290915290205460ff16610c97575f818152600e602090815260408083206001600160a01b038716808552908352818420805460ff19166001908117909155858552600d84529184208054928301815584529190922090910180546001600160a01b03191690911790555b5f610ca3828585611fa0565b604080518581526001600160801b03831660208201529192506001600160a01b0386169184917fa7d24926a85187e46071dbd8587ace433e1417bfc29b75e99027cba6d0ba2d0d910160405180910390a35050505050565b815f5b81811015610e83575f858583818110610d1957610d1961465f565b602090810292909201355f8181526007845260408082206001600160a01b038a168352909452928320805491945092039050610d56575050610e7b565b5f828152600d60205260408120549003610d71575050610e7b565b610d7a82611906565b5f5b8154811015610e77575f828281548110610d9857610d9861465f565b5f918252602080832090910154808352600c909152604082205490925090819003610dc7575050600101610d7c565b6002546040516331a9108f60e11b8152600481018390526001600160a01b0390911690636352211e90602401602060405180830381865afa925050508015610e2c575060408051601f3d908101601f19168201909252610e2991810190614644565b60015b610e3a575050600101610d7c565b886001600160a01b0316816001600160a01b031614610e6157836001019350505050610d7c565b50610e6d85838a612135565b5050600101610d7c565b5050505b600101610cfe565b5050505050565b610e92611951565b6001600160a01b0382165f818152600f6020908152604091829020805460ff191685151590811790915591519182527f0aa5ec5ffdc7f6f9c4d0dded489d7450297155cb2f71cb771e02427f7dff4f51910160405180910390a25050565b610ef8611951565b6001600160a01b038116610f1f5760405163d92e233d60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f582ec7d55fe2da1a8f783baf37c5a38008a41c8cf5eaf7b8a448ee7ed9770cbf9060200160405180910390a150565b5f610aa78383612208565b610f86611951565b610f8f5f6123d0565b565b5f818152600d602052604090208054606091908067ffffffffffffffff811115610fbd57610fbd614193565b604051908082528060200260200182016040528015610fe6578160200160208202803683370190505b5092505f5b81811015611052578281815481106110055761100561465f565b905f5260205f20015f9054906101000a90046001600160a01b03168482815181106110325761103261465f565b6001600160a01b0390921660209283029190910190910152600101610feb565b505050919050565b60015433906001600160a01b031681146110975760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6106b9816123d0565b6002546001600160a01b031633146110cb5760405163251cb70160e11b815260040160405180910390fd5b5f878152600c60205260409020541561116357856110e981866123e9565b6110f6818986868661197d565b6001600160801b0382161561111d5761111d8185856107e7866001600160801b0316611a11565b61112a8189886001611b71565b61113c6007600a60086009858d611bf8565b505f878152600b60209081526040808320805465ffffffffffff19169055600c9091528120555b50505050505050565b611174611951565b6001600160a01b03821661119b5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0382165f81815260036020908152604091829020805460ff19168515159081179091558251938452908301527f969bb7542263e82515f30263de146111e882f6d42fc244c9624a924b2d197790910160405180910390a15050565b335f9081526003602052604090205460ff1661122c576040516318e59f8760e31b815260040160405180910390fd5b60a082205f8181526005602052604090206001810154600160981b900467ffffffffffffffff161561128a576040517fa741a04500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001810180547fffffffffff0000000000000000000000ffffffffffffffffffffffffffffffff16600160801b62ffffff86160267ffffffffffffffff60981b191617600160981b4267ffffffffffffffff160217905550606092909201515f92835260106020526040909220805462ffffff191662ffffff9093169290921790915550565b60608080838067ffffffffffffffff81111561132e5761132e614193565b604051908082528060200260200182016040528015611357578160200160208202803683370190505b5093508067ffffffffffffffff81111561137357611373614193565b60405190808252806020026020018201604052801561139c578160200160208202803683370190505b5092508067ffffffffffffffff8111156113b8576113b8614193565b6040519080825280602002602001820160405280156113e1578160200160208202803683370190505b5091505f5b818110156114d6575f8881526004602052604081208189898581811061140e5761140e61465f565b90506020020160208101906114239190614077565b6001600160a01b0316815260208101919091526040015f20805487519192506001600160801b03169087908490811061145e5761145e61465f565b602090810291909101015280548551600160801b90910467ffffffffffffffff16908690849081106114925761149261465f565b6020908102919091010152600181015484516001600160801b03909116908590849081106114c2576114c261465f565b6020908102919091010152506001016113e6565b505093509350939050565b6060610aa78383612843565b6060828067ffffffffffffffff81111561150957611509614193565b60405190808252806020026020018201604052801561153c57816020015b60608152602001906001900390816115275790505b5091505f5b818110156115905761156b86868381811061155e5761155e61465f565b9050602002013585612843565b83828151811061157d5761157d61465f565b6020908102919091010152600101611541565b50509392505050565b6002546001600160a01b031633146115c45760405163251cb70160e11b815260040160405180910390fd5b5f878152600c602052604090205415611163575f878152600a6020526040902080546001600160801b0319166001600160801b0383161790558561160881876123e9565b5f611612846129a1565b90505f8082600f0b12156116385761162982614617565b6116339085614673565b611642565b6116428285614692565b9050611651838b89898561197d565b611668838888611660896129a1565b5f8a13611a3d565b50505050505050505050565b6002546001600160a01b0316331461169f5760405163251cb70160e11b815260040160405180910390fd5b856116b46007600a6008600985878e8a6129c2565b604080518082018252600287810b825286900b60208083019182525f8c8152600b825284812093518454935162ffffff90811663010000000265ffffffffffff1990951691161792909217909255600c9091522089905561171581876123e9565b61173481868661172d876001600160801b0316611a11565b6001611a3d565b61174081898787612a6a565b505050505050505050565b6060818067ffffffffffffffff81111561176757611767614193565b604051908082528060200260200182016040528015611790578160200160208202803683370190505b5091505f5b81811015611590576117cd868686848181106117b3576117b361465f565b90506020020160208101906117c89190614077565b612208565b8382815181106117df576117df61465f565b6020908102919091010152600101611795565b6002546001600160a01b0316331461181d5760405163251cb70160e11b815260040160405180910390fd5b5f858152600c602052604090205415610e8357836001600160801b03821615611858576118588185856107e7866001600160801b0316611a11565b61186a6007600a60086009858b611bf8565b5050505f9283525050600b60209081526040808320805465ffffffffffff19169055600c909152812055565b61189e611951565b600180546001600160a01b0383166001600160a01b031990911681179091556118ce5f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6119317f000000000000000000000000000000000000000000000000000000000000000083612b22565b50505090505f61194082612bed565b905061194c83826123e9565b505050565b5f546001600160a01b03163314610f8f5760405163118cdaa760e01b815233600482015260240161108e565b5f858152600d6020908152604080832060059092528220815491929091905b81811015611740575f8482815481106119b7576119b761465f565b5f9182526020808320909101548b83526006825260408084206001600160a01b0390921680855291909252908220909250906119f586848c8c611d18565b9050611a02828983611e54565b5050505080600101905061199c565b5f6f800000000000000000000000000000008210611a3957611a396393dafdf160e01b612eb2565b5090565b60608115611b0a575f868152600d6020526040902080548067ffffffffffffffff811115611a6d57611a6d614193565b604051908082528060200260200182016040528015611a96578160200160208202803683370190505b5092505f5b81811015611b0257828181548110611ab557611ab561465f565b905f5260205f20015f9054906101000a90046001600160a01b0316848281518110611ae257611ae261465f565b6001600160a01b0390921660209283029190910190910152600101611a9b565b505050611b1a565b50604080515f8152602081019091525b60408051608081018252600287810b825286810b602080840191909152600f87900b838501525f8a8152601082528481205490920b60608401528982526005905291909120611b699183612eba565b505050505050565b5f848152600d60205260408120805490915b81811015611163575f838281548110611b9e57611b9e61465f565b5f918252602090912001546001600160a01b03169050611bbf878288611e87565b508415611bef575f8781526006602090815260408083206001600160a01b03851684529091528120818155600101555b50600101611b83565b5f8181526020868152604080832080546001600160801b0319169055868252808320548584528983528184206001600160a01b039091168085529083528184208585529287905290832054909290611c52906001906146b1565b82549091505f90611c65906001906146b1565b9050808214611cc5575f838281548110611c8157611c8161465f565b905f5260205f200154905080848481548110611c9f57611c9f61465f565b5f91825260209091200155611cb58360016146c4565b5f91825260208990526040909120555b82805480611cd557611cd56146d7565b5f828152602080822083015f1990810183905590920190925595815296855250506040808620869055959092525050502080546001600160a01b03191690555050565b5f8160020b8360020b12611d2d57505f611e4c565b6001850154600284810b600160801b909204900b1215611d945750600281810b5f908152818601602081815260408084206001600160a01b03891680865260019182018452828620549689900b865293835281852093855292909201905290205403611e4c565b6001850154600283810b600160801b909204900b12611dfa5750600282810b5f908152818601602081815260408084206001600160a01b03891680865260019182018452828620549688900b865293835281852093855292909201905290205403611e4c565b50600282810b5f908152818601602081815260408084206001600160a01b03891680865260019182018452828620549688900b8652938352818520938552929092018152818320549088905291205403035b949350505050565b82545f908203611e72816001600160801b038616600160801b61306a565b60018601805482019055929094555092915050565b5f8381526006602090815260408083206001600160a01b0386168452909152812060010180549190558015610aa757611eca6001600160a01b0384168383613106565b826001600160a01b0316826001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd399268383604051611f0f91815260200190565b60405180910390a39392505050565b6040516001600160a01b038481166024830152838116604483015260648201839052611f9a9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613137565b50505050565b5f8381526004602090815260408083206001600160a01b03861684529091528120805483906001600160801b03161561207a57611fdc86611906565b8154600160801b900467ffffffffffffffff1642101561207a5781545f90612016904290600160801b900467ffffffffffffffff166146b1565b83549091505f90612030906001600160801b0316836146eb565b905080861161206b576040517fcee1c9a700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61207581846146c4565b925050505b61208f61208a62093a8083614716565b6131b1565b82546001600160801b0319166001600160801b03821617835592506120b762093a80426146c4565b82546001600160801b0316600160801b67ffffffffffffffff9283160277ffffffffffffffffffffffffffffffffffffffffffffffff1617600160c01b429290921691909102178255612109816131b1565b60019290920180546001600160801b0319166001600160801b0390931692909217909155509392505050565b5f828152600b60209081526040808320600a83528184205487855260058452828520600d909452918420805491946001600160801b0390931693929091905b81811015611740575f83828154811061218f5761218f61465f565b5f9182526020808320909101548b83526006825260408084206001600160a01b0390921680855291909252908220895491935091906121e09088908590600281810b9163010000009004900b611d18565b90506121ed828983611e54565b506121f98b848c611e87565b50836001019350505050612174565b6002546040516331a9108f60e11b8152600481018490525f916001600160a01b031690636352211e90602401602060405180830381865afa92505050801561226d575060408051601f3d908101601f1916820190925261226a91810190614644565b60015b61227857505f6123ca565b600254604051637ba03aad60e01b8152600481018690525f916001600160a01b031690637ba03aad9060240160c060405180830381865afa1580156122bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122e39190614572565b5090505f6122f28260a0902090565b90505f61230887835f9182526020526040902090565b5f8181526006602090815260408083206001600160a01b038b1684528252808320848452600a90925290912054919250906001600160801b031680156123bb575f838152600b602090815260408083208054888552600590935290832090929161238391908c90600281810b9163010000009004900b611d18565b845490915081036123a2816001600160801b038616600160801b61306a565b85600101546123b191906146c4565b99505050506123c3565b816001015496505b5050505050505b92915050565b600180546001600160a01b03191690556106b9816131d2565b5f828152600d60205260408120805490918190036124075750505050565b5f8481526005602052604081206001810154909167ffffffffffffffff600160981b909204821691429190859081111561244357612443614193565b60405190808252806020026020018201604052801561246c578160200160208202803683370190505b5090505f8567ffffffffffffffff81111561248957612489614193565b6040519080825280602002602001820160405280156124b2578160200160208202803683370190505b5090505f5b868110156125db575f8882815481106124d2576124d261465f565b905f5260205f20015f9054906101000a90046001600160a01b03169050808483815181106125025761250261465f565b6001600160a01b039283166020918202929092018101919091525f8d815260048252604080822093851682529290915290812080546001600160801b0316156125ae5780545f90600160801b900467ffffffffffffffff168810612578578154600160801b900467ffffffffffffffff1661257a565b875b9050888111156125ac575f61258f8a836146b1565b83549091506125a89082906001600160801b03166146eb565b9350505b505b818585815181106125c1576125c161465f565b6020026020010181815250508360010193505050506124b7565b505f898152601060205260409020546125fd9086908490849060020b8c613221565b5f5b86811015611668575f88828154811061261a5761261a61465f565b5f9182526020808320909101548d83526004825260408084206001600160a01b03909216808552919092529082208054919350916001600160801b0390911690036126695750506001016125ff565b80545f9061268890600160c01b900467ffffffffffffffff16886146b1565b905080156128355781545f90600160801b900467ffffffffffffffff1688116126b157876126c5565b8254600160801b900467ffffffffffffffff165b8354909150600160c01b900467ffffffffffffffff168111156127865782546126ff90600160c01b900467ffffffffffffffff16826146b1565b83549092505f90612719906001600160801b0316846146eb565b60018501549091506001600160801b0316811115612741575060018301546001600160801b03165b6001840180548291905f906127609084906001600160801b0316614692565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550505b825467ffffffffffffffff808a16600160c01b0277ffffffffffffffffffffffffffffffffffffffffffffffff90921691909117808555600160801b900416881015806127de575060018301546001600160801b0316155b15612833576001830180546001600160801b031990811690915583541683556040516001600160a01b038516908f907f3ef0ee625515d981a459bcc24e3b944e532ef12d9f9d1032625c397f66e0a8ee905f90a35b505b8360010193505050506125ff565b5f828152600d602052604090208054606091908067ffffffffffffffff81111561286f5761286f614193565b6040519080825280602002602001820160405280156128b357816020015b604080518082019091525f808252602082015281526020019060019003908161288d5790505b505f8681526007602090815260408083206001600160a01b03891684529091528120805492955091905b83811015612996575f8582815481106128f8576128f861465f565b5f9182526020822001546001600160a01b03169150805b848110156129505761293c86828154811061292c5761292c61465f565b905f5260205f200154848d613350565b61294690836146c4565b915060010161290f565b506040518060400160405280836001600160a01b03168152602001828152508884815181106129815761298161465f565b602090810291909101015250506001016128dd565b505050505092915050565b80600f81900b81146129bd576129bd6393dafdf160e01b612eb2565b919050565b5f828152602088905260408120546001600160801b03169003612a37575f848152602089815260408083206001600160a01b0387168085529083528184208054600181018255818652848620018790558685528a845282852080546001600160a01b0319169092179091555491889052909120555b5f9182526020969096526040902080546001600160801b0319166001600160801b03909616959095179094555050505050565b5f848152600d60205260408120805490915b81811015611163575f838281548110612a9757612a9761465f565b5f9182526020808320909101548983526006825260408084206001600160a01b039092168085529183528084208481556001018490558b84526005909252908220909250612ae790838989611d18565b90508015612b18575f8881526006602090815260408083206001600160a01b03861684529091528120828155600101555b5050600101612a7c565b5f805f805f612b3086613402565b6040517f1e2eaeaf000000000000000000000000000000000000000000000000000000008152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa158015612b91573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bb59190614735565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b5f73fffd8963efd1fc6a506488495d951d51639616826401000276a21983016001600160a01b03161115612c4557612c457f61487524000000000000000000000000000000000000000000000000000000008361343e565b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b16805f612c6f82613453565b60ff16905060808110612c8a57607f810383901c9150612c94565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581027ffffffffffffffffffffffffffffffffffd709b7e5480fba5a50fed5e62ffc5568101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b14612ea357886001600160a01b0316612e88826134de565b6001600160a01b03161115612e9d5781612ea5565b80612ea5565b815b9998505050505050505050565b805f5260045ffd5b604080830151835160208086015184516080810186525f8082529281018390529485018290526060850191909152919290919083600f0b5f14612f9e57612f038784865f6137af565b6001600160801b0316602083015215158152612f2287838660016137af565b6001600160801b0316606083015215156040820152805115612f69576060860151612f53906003890190859061383b565b5f84600f0b1315612f6957612f6987848761388d565b806040015115612f9e576060860151612f88906003890190849061383b565b5f84600f0b1315612f9e57612f9e87838761388d565b5f84600f0b1215612fe457805115612fc557600283810b5f90815290880160205260408120555b806040015115612fe457600282810b5f90815290880160205260408120555b60018701548651600160801b909104600290810b91900b13801590613020575060208601516001880154600291820b600160801b90910490910b125b1561116357600187015461303d906001600160801b031685613910565b6001880180546001600160801b03929092166001600160801b031990921691909117905550505050505050565b5f838302815f1985870982811083820303915050808411613089575f80fd5b805f0361309b57508290049050610aa7565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6040516001600160a01b0383811660248301526044820183905261194c91859182169063a9059cbb90606401611f53565b5f61314b6001600160a01b03841683613937565b905080515f1415801561316f57508080602001905181019061316d919061474c565b155b1561194c576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161108e565b806001600160801b03811681146129bd576129bd6393dafdf160e01b612eb2565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001850154600160981b900467ffffffffffffffff165f03613299576001850180547fffffffffff0000000000000000000000ffffffffffffffffffffffffffffffff16600160801b62ffffff84160267ffffffffffffffff60981b191617600160981b4267ffffffffffffffff1602179055610e83565b60018501805467ffffffffffffffff4216600160981b0267ffffffffffffffff60981b19821681179092556001600160801b039182169116171561332b5783515f5b8181101561332857613320878783815181106132f9576132f961465f565b60200260200101518784815181106133135761331361465f565b6020026020010151613944565b6001016132db565b50505b6001850154600282810b600160801b909204900b14610e8357610e83858383876139b2565b5f838152600a6020908152604080832054600683528184206001600160a01b038716855290925282206001600160801b039091169081830361339957600101549150610aa79050565b5f868152600b60209081526040808320805488855260059093529083209092916133d491908990600281810b9163010000009004900b611d18565b835490915081036133f3816001600160801b038716600160801b61306a565b8460010154612ea591906146c4565b6040515f90613421908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b815f526001600160a01b03811660045260245ffd5b5f80821161345f575f80fd5b507f0706060506020500060203020504000106050205030304010505030400000000601f6f8421084210842108cc6318c6db6d54be6001600160801b03841160071b84811c67ffffffffffffffff1060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c161a1790565b60020b5f60ff82901d80830118620d89e8811115613520576135207f8b86327a0000000000000000000000000000000000000000000000000000000084613afa565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b18600282161561355c576ffff97272373d413259a46990580e213a0260801c5b600482161561357b576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561359a576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b60108216156135b9576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156135d8576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156135f7576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615613616576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613636576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613656576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613676576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613696576fe7159475a2c29b7443b29c7fa6e889d90260801c5b6110008216156136b6576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156136d6576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156136f6576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615613716576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613737576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613757576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615613776576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613793576b048a170391f7dc42444e8fa20260801c5b5f84131561379f575f19045b63ffffffff0160201c9392505050565b600283810b5f9081529085016020526040812080548291906001600160801b03811690600160801b9004600f0b6137e68288613910565b6001600160801b0380821615908416151415955093505f866138115761380c8883614767565b61381b565b61381b88836147a6565b90508060801b6001600160801b0386161784555050505094509492505050565b600291820b910b808207156138685760405163d4d8f3e681528260208201528160408201526044601c8201fd5b80820591508160081d5f528260205260405f20600160ff84161b815418815550505050565b6001830154600160801b9004600290810b9083900b1361194c57600282810b5f90815290840160205260408120905b8251811015610e83575f8382815181106138d8576138d861465f565b6020908102919091018101516001600160a01b03165f90815287825260408082205460018088019094529120559190910190506138bc565b6001600160801b038216600f82900b01608081901c156123ca576393dafdf15f526004601cfd5b6060610aa783835f613b09565b805f0361395057505050565b60018301546001600160801b03165f0361396957505050565b60018301546001600160801b0316608082901b8161398957613989614702565b6001600160a01b039093165f908152602094909452604090932080549390920492909201905550565b6001840154600160801b9004600290810b905f9084900b8212801590613a46575b8260020b8560020b1215613a41575f806139f360038a01868a6001613bbb565b915091508660020b8260020b13613a0b575050613aa8565b8015613a2d575f613a1d8a8489613ca8565b9050613a2981866147a6565b9450505b613a386001836147e5565b945050506139d3565b613aa8565b8460020b8360020b1215613aa8575f80613a6560038a01868a84613bbb565b915091508660020b8260020b1315613a7e575050613aa8565b8015613aa0575f613a908a8489613ca8565b9050613a9c8186614767565b9450505b509250613a46565b60018701805462ffffff8716600160801b027fffffffffffffffffffffffffff000000ffffffffffffffffffffffffffffffff8216811790925561303d916001600160801b0390811691161783613910565b815f528060020b60045260245ffd5b606081471015613b47576040517fcd78605900000000000000000000000000000000000000000000000000000000815230600482015260240161108e565b5f80856001600160a01b03168486604051613b62919061480a565b5f6040518083038185875af1925050503d805f8114613b9c576040519150601f19603f3d011682016040523d82523d5f602084013e613ba1565b606091505b5091509150613bb1868383613d4c565b9695505050505050565b5f80600284810b9086900b8181078313919005038315613c3a57600281900b60081d600181900b5f908152602089905260409020545f1960ff808516908190039190911c918216801515955090919085613c1c57888360ff16860302613c2f565b88613c2682613453565b840360ff168603025b965050505050613c9e565b6001908101600281900b60081d80830b5f90815260208a905260409020545f1960ff841694851b011990811680151595509293919285613c8457888360ff0360ff16860102613c97565b8883613c8f83613dc1565b0360ff168601025b9650505050505b5094509492505050565b600282810b5f9081529084016020526040812080546001600160801b03168203613cd5575f915050610aa7565b5f5b8351811015613d38575f848281518110613cf357613cf361465f565b6020908102919091018101516001600160a01b03165f9081526001808601808452604080842080548d8752919094205491909452929092039055919091019050613cd7565b5054600160801b9004600f0b949350505050565b606082613d6157613d5c82613e5b565b610aa7565b8151158015613d7857506001600160a01b0384163b155b15613dba576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260240161108e565b5080610aa7565b5f808211613dcd575f80fd5b507e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b15031604055f8290039091166101e07f804040554300526644320000502061067405302602000010750620017611707760fc7fb6db6db6ddddddddd34d34d349249249210842108c6318c639ce739cffffffff840260f81c161b60f71c1690811c63d76453e004601f169190911a1790565b805115613e6b5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60a08284031215613ead575f80fd5b50919050565b5f60a08284031215613ec3575f80fd5b610aa78383613e9d565b80151581146106b9575f80fd5b5f8060408385031215613eeb575f80fd5b823591506020830135613efd81613ecd565b809150509250929050565b6001600160a01b03811681146106b9575f80fd5b5f8060408385031215613f2d575f80fd5b823591506020830135613efd81613f08565b5f805f60608486031215613f51575f80fd5b833592506020840135613f6381613f08565b91506040840135613f7381613f08565b809150509250925092565b5f805f60e08486031215613f90575f80fd5b613f9a8585613e9d565b925060a0840135613faa81613f08565b9295929450505060c0919091013590565b5f8083601f840112613fcb575f80fd5b50813567ffffffffffffffff811115613fe2575f80fd5b6020830191508360208260051b8501011115613ffc575f80fd5b9250929050565b5f805f60408486031215614015575f80fd5b833567ffffffffffffffff81111561402b575f80fd5b61403786828701613fbb565b9094509250506020840135613f7381613f08565b5f806040838503121561405c575f80fd5b823561406781613f08565b91506020830135613efd81613ecd565b5f60208284031215614087575f80fd5b8135610aa781613f08565b5f602082840312156140a2575f80fd5b5035919050565b602080825282518282018190525f918401906040840190835b818110156140e95783516001600160a01b03168352602093840193909201916001016140c2565b509095945050505050565b8060020b81146106b9575f80fd5b80356001600160801b03811681146129bd575f80fd5b5f805f805f805f60e0888a03121561412e575f80fd5b8735965060208801359550604088013561414781613f08565b94506060880135614157816140f4565b93506080880135614167816140f4565b925060a0880135614177816140f4565b915061418560c08901614102565b905092959891949750929550565b634e487b7160e01b5f52604160045260245ffd5b60405160a0810167ffffffffffffffff811182821017156141d657634e487b7160e01b5f52604160045260245ffd5b60405290565b62ffffff811681146106b9575f80fd5b5f60a082840312156141fc575f80fd5b6142046141a7565b9050813561421181613f08565b8152602082013561422181613f08565b60208201526040820135614234816141dc565b60408201526060820135614247816140f4565b6060820152608082013561425a81613f08565b608082015292915050565b5f8060c08385031215614276575f80fd5b61428084846141ec565b915060a0830135613efd816140f4565b5f805f604084860312156142a2575f80fd5b83359250602084013567ffffffffffffffff8111156142bf575f80fd5b6142cb86828701613fbb565b9497909650939450505050565b5f8151808452602084019350602083015f5b828110156143085781518652602095860195909101906001016142ea565b5093949350505050565b606081525f61432460608301866142d8565b828103602084015261433681866142d8565b90508281036040840152613bb181856142d8565b5f8151808452602084019350602083015f5b8281101561430857815180516001600160a01b03168752602090810151818801526040909601959091019060010161435c565b602081525f610aa7602083018461434a565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156143f857603f198786030184526143e385835161434a565b945060209384019391909101906001016143c7565b50929695505050505050565b5f805f805f805f60e0888a03121561441a575f80fd5b87359650602088013595506040880135614433816140f4565b94506060880135614443816140f4565b93506080880135614453816140f4565b925060a0880135915061418560c08901614102565b5f805f805f805f80610100898b031215614480575f80fd5b88359750602089013596506040890135955060608901356144a0816140f4565b945060808901356144b0816140f4565b935060a08901356144c0816140f4565b92506144ce60c08a01614102565b915060e08901356144de81613f08565b809150509295985092959890939650565b602081525f610aa760208301846142d8565b5f805f805f60a08688031215614515575f80fd5b8535945060208601359350604086013561452e816140f4565b9250606086013561453e816140f4565b915061454c60808701614102565b90509295509295909350565b5f60a08284031215614568575f80fd5b610aa783836141ec565b5f8082840360c0811215614584575f80fd5b60a0811215614591575f80fd5b5061459a6141a7565b83516145a581613f08565b815260208401516145b581613f08565b602082015260408401516145c8816141dc565b604082015260608401516145db816140f4565b606082015260808401516145ee81613f08565b608082015260a0939093015192949293505050565b634e487b7160e01b5f52601160045260245ffd5b5f81600f0b6f7fffffffffffffffffffffffffffffff19810361463c5761463c614603565b5f0392915050565b5f60208284031215614654575f80fd5b8151610aa781613f08565b634e487b7160e01b5f52603260045260245ffd5b6001600160801b0381811683821601908111156123ca576123ca614603565b6001600160801b0382811682821603908111156123ca576123ca614603565b818103818111156123ca576123ca614603565b808201808211156123ca576123ca614603565b634e487b7160e01b5f52603160045260245ffd5b80820281158282048414176123ca576123ca614603565b634e487b7160e01b5f52601260045260245ffd5b5f8261473057634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215614745575f80fd5b5051919050565b5f6020828403121561475c575f80fd5b8151610aa781613ecd565b600f81810b9083900b016f7fffffffffffffffffffffffffffffff81136f7fffffffffffffffffffffffffffffff19821217156123ca576123ca614603565b600f82810b9082900b036f7fffffffffffffffffffffffffffffff1981126f7fffffffffffffffffffffffffffffff821317156123ca576123ca614603565b600282810b9082900b03627fffff198112627fffff821317156123ca576123ca614603565b5f82518060208501845e5f92019182525091905056fea2646970667358221220fafba9a7fe3e889abbc401042eeb24e7a2f7cc201a7f3d8ef5c727cf10397f5d64736f6c634300081a0033000000000000000000000000498581ff718922c3f8e6a244956af099b2652b2b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000068baf38f56bf8104680c1e10abf1e386d5b430cc