{"abi":[{"type":"constructor","inputs":[{"name":"_poolManager","type":"address","internalType":"contract IPoolManager"},{"name":"_num","type":"uint256","internalType":"uint256"},{"name":"_flags","type":"uint16","internalType":"uint16"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterAddLiquidity","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"delta","type":"int256","internalType":"BalanceDelta"},{"name":"feesAccrued","type":"int256","internalType":"BalanceDelta"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterDonate","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"amount0","type":"uint256","internalType":"uint256"},{"name":"amount1","type":"uint256","internalType":"uint256"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterInitialize","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"},{"name":"tick","type":"int24","internalType":"int24"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterRemoveLiquidity","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"delta","type":"int256","internalType":"BalanceDelta"},{"name":"feesAccrued","type":"int256","internalType":"BalanceDelta"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterSwap","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"params","type":"tuple","internalType":"struct SwapParams","components":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}]},{"name":"delta","type":"int256","internalType":"BalanceDelta"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int128","internalType":"int128"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeAddLiquidity","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeDonate","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"amount0","type":"uint256","internalType":"uint256"},{"name":"amount1","type":"uint256","internalType":"uint256"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeInitialize","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeRemoveLiquidity","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeSwap","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"params","type":"tuple","internalType":"struct SwapParams","components":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}]},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int256","internalType":"BeforeSwapDelta"},{"name":"","type":"uint24","internalType":"uint24"}],"stateMutability":"nonpayable"},{"type":"function","name":"forceValidateAddress","inputs":[],"outputs":[],"stateMutability":"view"},{"type":"function","name":"getHookPermissions","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct Hooks.Permissions","components":[{"name":"beforeInitialize","type":"bool","internalType":"bool"},{"name":"afterInitialize","type":"bool","internalType":"bool"},{"name":"beforeAddLiquidity","type":"bool","internalType":"bool"},{"name":"afterAddLiquidity","type":"bool","internalType":"bool"},{"name":"beforeRemoveLiquidity","type":"bool","internalType":"bool"},{"name":"afterRemoveLiquidity","type":"bool","internalType":"bool"},{"name":"beforeSwap","type":"bool","internalType":"bool"},{"name":"afterSwap","type":"bool","internalType":"bool"},{"name":"beforeDonate","type":"bool","internalType":"bool"},{"name":"afterDonate","type":"bool","internalType":"bool"},{"name":"beforeSwapReturnDelta","type":"bool","internalType":"bool"},{"name":"afterSwapReturnDelta","type":"bool","internalType":"bool"},{"name":"afterAddLiquidityReturnDelta","type":"bool","internalType":"bool"},{"name":"afterRemoveLiquidityReturnDelta","type":"bool","internalType":"bool"}]}],"stateMutability":"pure"},{"type":"function","name":"num","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"poolManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IPoolManager"}],"stateMutability":"view"},{"type":"error","name":"HookNotImplemented","inputs":[]},{"type":"error","name":"NotPoolManager","inputs":[]}],"bytecode":{"object":"0x60a060405234801561000f575f80fd5b5060405161133138038061133183398101604081905261002e9161038e565b6001600160a01b038316608052815f81905550604051806101c001604052806120008361ffff16166001600160a01b03165f1415151581526020016110008361ffff16166001600160a01b03165f1415151581526020016108008361ffff16166001600160a01b03165f1415151581526020016104008361ffff16166001600160a01b03165f1415151581526020016102008361ffff16166001600160a01b03165f1415151581526020016101008361ffff16166001600160a01b03165f14151515815260200160808361ffff16166001600160a01b03165f14151515815260200160408361ffff16166001600160a01b03165f14151515815260200160208361ffff16166001600160a01b03165f14151515815260200160108361ffff16166001600160a01b03165f14151515815260200160088361ffff16166001600160a01b03165f14151515815260200160048361ffff16166001600160a01b03165f14151515815260200160028361ffff16166001600160a01b03165f14151515815260200160018361ffff16166001600160a01b03165f1415151581525060015f820151815f015f6101000a81548160ff0219169083151502179055506020820151815f0160016101000a81548160ff0219169083151502179055506040820151815f0160026101000a81548160ff0219169083151502179055506060820151815f0160036101000a81548160ff0219169083151502179055506080820151815f0160046101000a81548160ff02191690831515021790555060a0820151815f0160056101000a81548160ff02191690831515021790555060c0820151815f0160066101000a81548160ff02191690831515021790555060e0820151815f0160076101000a81548160ff021916908315150217905550610100820151815f0160086101000a81548160ff021916908315150217905550610120820151815f0160096101000a81548160ff021916908315150217905550610140820151815f01600a6101000a81548160ff021916908315150217905550610160820151815f01600b6101000a81548160ff021916908315150217905550610180820151815f01600c6101000a81548160ff0219169083151502179055506101a0820151815f01600d6101000a81548160ff0219169083151502179055509050505050506103df565b5f805f606084860312156103a0575f80fd5b83516001600160a01b03811681146103b6575f80fd5b60208501516040860151919450925061ffff811681146103d4575f80fd5b809150509250925092565b608051610f096104285f395f81816102e50152818161035801528181610514015281816105a301528181610632015281816106b80152818161074501526107ce0152610f095ff3fe608060405234801561000f575f80fd5b50600436106100e5575f3560e01c80639f063efc11610088578063c4e833ce11610063578063c4e833ce14610267578063dc4c90d3146102e0578063dc98354e1461032c578063e1b4af6914610254575f80fd5b80639f063efc146101a8578063b47b2fb114610206578063b6a8b0fa14610254575f80fd5b80634e70b1dc116100c35780634e70b1dc1461013c578063575e24b4146101525780636c2bbe7e146101a85780636fe7e6eb146101f3575f80fd5b806321d0ee70146100e957806323f84def14610132578063259982e5146100e9575b5f80fd5b6100fc6100f7366004610aee565b61033f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b61013a6103c6565b005b6101445f5481565b604051908152602001610129565b610165610160366004610b75565b6104f9565b604080517fffffffff000000000000000000000000000000000000000000000000000000009094168452602084019290925262ffffff1690820152606001610129565b6101bb6101b6366004610bcf565b610589565b604080517fffffffff000000000000000000000000000000000000000000000000000000009093168352602083019190915201610129565b6100fc610201366004610c5a565b610619565b610219610214366004610cb9565b61069e565b604080517fffffffff000000000000000000000000000000000000000000000000000000009093168352600f9190910b602083015201610129565b6100fc610262366004610d3a565b61072c565b604080516101c0810182525f80825260208201819052818301819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101408201819052610160820181905261018082018190526101a082015290516101299190610d94565b6103077f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610129565b6100fc61033a366004610eb5565b6107b5565b5f3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146103af576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103bc8686868686610838565b9695505050505050565b604080516101c08101825260015460ff8082161515835261010080830482161515602085015262010000830482161515948401949094526301000000820481161515606084015264010000000082048116151560808401526501000000000082048116151560a0840152660100000000000082048116151560c084015267010000000000000082048116151560e0840152680100000000000000008204811615159383019390935269010000000000000000008104831615156101208301526a01000000000000000000008104831615156101408301526b0100000000000000000000008104831615156101608301526c010000000000000000000000008104831615156101808301526d0100000000000000000000000000900490911615156101a08201526104f790309061086b565b565b5f80803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461056b576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61057888888888886109d4565b925092509250955095509592505050565b5f803373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146105fa576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61060989898989898989610a09565b9150915097509795505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610689576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61069585858585610838565b95945050505050565b5f803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461070f576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61071d888888888888610a09565b91509150965096945050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461079c576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107aa878787878787610838565b979650505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610825576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610830848484610838565b949350505050565b5f6040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805115156120008316151514158061088f5750602081015115156110008316151514155b806108a65750604081015115156108008316151514155b806108bd5750606081015115156104008316151514155b806108d45750608081015115156102008316151514155b806108eb575060a081015115156101008316151514155b80610901575060c0810151151560808316151514155b80610917575060e0810151151560408316151514155b8061092e5750610100810151151560208316151514155b806109455750610120810151151560108316151514155b8061095c5750610140810151151560088316151514155b806109735750610160810151151560048316151514155b8061098a5750610180810151151560028316151514155b806109a157506101a0810151151560018316151514155b156109d0576109d07fe65af6a00000000000000000000000000000000000000000000000000000000083610a3d565b5050565b5f805f6040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f5273ffffffffffffffffffffffffffffffffffffffff811660045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff81168114610a80575f80fd5b50565b5f60a08284031215610a93575f80fd5b50919050565b5f60808284031215610a93575f80fd5b5f8083601f840112610ab9575f80fd5b50813567ffffffffffffffff811115610ad0575f80fd5b602083019150836020828501011115610ae7575f80fd5b9250929050565b5f805f805f6101608688031215610b03575f80fd5b8535610b0e81610a5f565b9450610b1d8760208801610a83565b9350610b2c8760c08801610a99565b925061014086013567ffffffffffffffff811115610b48575f80fd5b610b5488828901610aa9565b969995985093965092949392505050565b5f60608284031215610a93575f80fd5b5f805f805f6101408688031215610b8a575f80fd5b8535610b9581610a5f565b9450610ba48760208801610a83565b9350610bb38760c08801610b65565b925061012086013567ffffffffffffffff811115610b48575f80fd5b5f805f805f805f6101a0888a031215610be6575f80fd5b8735610bf181610a5f565b9650610c008960208a01610a83565b9550610c0f8960c08a01610a99565b94506101408801359350610160880135925061018088013567ffffffffffffffff811115610c3b575f80fd5b610c478a828b01610aa9565b989b979a50959850939692959293505050565b5f805f806101008587031215610c6e575f80fd5b8435610c7981610a5f565b9350610c888660208701610a83565b925060c0850135610c9881610a5f565b915060e0850135600281900b8114610cae575f80fd5b939692955090935050565b5f805f805f806101608789031215610ccf575f80fd5b8635610cda81610a5f565b9550610ce98860208901610a83565b9450610cf88860c08901610b65565b9350610120870135925061014087013567ffffffffffffffff811115610d1c575f80fd5b610d2889828a01610aa9565b979a9699509497509295939492505050565b5f805f805f806101208789031215610d50575f80fd5b8635610d5b81610a5f565b9550610d6a8860208901610a83565b945060c0870135935060e0870135925061010087013567ffffffffffffffff811115610d1c575f80fd5b8151151581526101c081016020830151610db2602084018215159052565b506040830151610dc6604084018215159052565b506060830151610dda606084018215159052565b506080830151610dee608084018215159052565b5060a0830151610e0260a084018215159052565b5060c0830151610e1660c084018215159052565b5060e0830151610e2a60e084018215159052565b50610100830151610e4061010084018215159052565b50610120830151610e5661012084018215159052565b50610140830151610e6c61014084018215159052565b50610160830151610e8261016084018215159052565b50610180830151610e9861018084018215159052565b506101a0830151610eae6101a084018215159052565b5092915050565b5f805f60e08486031215610ec7575f80fd5b8335610ed281610a5f565b9250610ee18560208601610a83565b915060c0840135610ef181610a5f565b80915050925092509256fea164736f6c634300081a000a","sourceMap":"324:2043:217:-:0;;;425:1304;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;782:26:144;;;;532:4:217::1;526:3;:10;;;;561:1161;;;;;;;;1397:7:89;612:6:217;:37;;;-1:-1:-1::0;;;;;611:44:217::1;654:1;611:44;;561:1161;;;;;;1460:7:89;687:6:217;:36;;;-1:-1:-1::0;;;;;686:43:217::1;728:1;686:43;;561:1161;;;;;;1528:7:89;764:6:217;:40;;;-1:-1:-1::0;;;;;763:47:217::1;809:1;763:47;;561:1161;;;;;;1594:7:89;844:6:217;:39;;;-1:-1:-1::0;;;;;843:46:217::1;888:1;843:46;;561:1161;;;;;;1665:6:89;927::217;:43;;;-1:-1:-1::0;;;;;926:50:217::1;975:1;926:50;;561:1161;;;;;;1733:6:89;1013::217;:42;;;-1:-1:-1::0;;;;;1012:49:217::1;1060:1;1012:49;;561:1161;;;;;;1791:6:89;1088::217;:31;;;-1:-1:-1::0;;;;;1087:38:217::1;1124:1;1087:38;;561:1161;;;;;;1847:6:89;1151::217;:30;;;-1:-1:-1::0;;;;;1150:37:217::1;1186:1;1150:37;;561:1161;;;;;;1907:6:89;1216::217;:33;;;-1:-1:-1::0;;;;;1215:40:217::1;1254:1;1215:40;;561:1161;;;;;;1965:6:89;1283::217;:32;;;-1:-1:-1::0;;;;;1282:39:217::1;1320:1;1282:39;;561:1161;;;;;;2037:6:89;1359::217;:45;;;-1:-1:-1::0;;;;;1358:52:217::1;1409:1;1358:52;;561:1161;;;;;;2107:6:89;1447::217;:44;;;-1:-1:-1::0;;;;;1446:51:217::1;1496:1;1446:51;;561:1161;;;;;;2186:6:89;1542::217;:53;;;-1:-1:-1::0;;;;;1541:60:217::1;1600:1;1541:60;;561:1161;;;;;;2268:6:89;1649::217;:56;;;-1:-1:-1::0;;;;;1648:63:217::1;1710:1;1648:63;;561:1161;;;;::::0;547:11:::1;:1175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;425:1304:::0;;;324:2043;;14:534:262;123:6;131;139;192:2;180:9;171:7;167:23;163:32;160:52;;;208:1;205;198:12;160:52;234:16;;-1:-1:-1;;;;;279:31:262;;269:42;;259:70;;325:1;322;315:12;259:70;393:2;378:18;;372:25;442:2;427:18;;421:25;348:5;;-1:-1:-1;372:25:262;-1:-1:-1;490:6:262;477:20;;465:33;;455:61;;512:1;509;502:12;455:61;535:7;525:17;;;14:534;;;;;:::o;:::-;324:2043:217;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b50600436106100e5575f3560e01c80639f063efc11610088578063c4e833ce11610063578063c4e833ce14610267578063dc4c90d3146102e0578063dc98354e1461032c578063e1b4af6914610254575f80fd5b80639f063efc146101a8578063b47b2fb114610206578063b6a8b0fa14610254575f80fd5b80634e70b1dc116100c35780634e70b1dc1461013c578063575e24b4146101525780636c2bbe7e146101a85780636fe7e6eb146101f3575f80fd5b806321d0ee70146100e957806323f84def14610132578063259982e5146100e9575b5f80fd5b6100fc6100f7366004610aee565b61033f565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b61013a6103c6565b005b6101445f5481565b604051908152602001610129565b610165610160366004610b75565b6104f9565b604080517fffffffff000000000000000000000000000000000000000000000000000000009094168452602084019290925262ffffff1690820152606001610129565b6101bb6101b6366004610bcf565b610589565b604080517fffffffff000000000000000000000000000000000000000000000000000000009093168352602083019190915201610129565b6100fc610201366004610c5a565b610619565b610219610214366004610cb9565b61069e565b604080517fffffffff000000000000000000000000000000000000000000000000000000009093168352600f9190910b602083015201610129565b6100fc610262366004610d3a565b61072c565b604080516101c0810182525f80825260208201819052818301819052606082018190526080820181905260a0820181905260c0820181905260e08201819052610100820181905261012082018190526101408201819052610160820181905261018082018190526101a082015290516101299190610d94565b6103077f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610129565b6100fc61033a366004610eb5565b6107b5565b5f3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146103af576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103bc8686868686610838565b9695505050505050565b604080516101c08101825260015460ff8082161515835261010080830482161515602085015262010000830482161515948401949094526301000000820481161515606084015264010000000082048116151560808401526501000000000082048116151560a0840152660100000000000082048116151560c084015267010000000000000082048116151560e0840152680100000000000000008204811615159383019390935269010000000000000000008104831615156101208301526a01000000000000000000008104831615156101408301526b0100000000000000000000008104831615156101608301526c010000000000000000000000008104831615156101808301526d0100000000000000000000000000900490911615156101a08201526104f790309061086b565b565b5f80803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461056b576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61057888888888886109d4565b925092509250955095509592505050565b5f803373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146105fa576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61060989898989898989610a09565b9150915097509795505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610689576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61069585858585610838565b95945050505050565b5f803373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461070f576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61071d888888888888610a09565b91509150965096945050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461079c576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107aa878787878787610838565b979650505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610825576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610830848484610838565b949350505050565b5f6040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805115156120008316151514158061088f5750602081015115156110008316151514155b806108a65750604081015115156108008316151514155b806108bd5750606081015115156104008316151514155b806108d45750608081015115156102008316151514155b806108eb575060a081015115156101008316151514155b80610901575060c0810151151560808316151514155b80610917575060e0810151151560408316151514155b8061092e5750610100810151151560208316151514155b806109455750610120810151151560108316151514155b8061095c5750610140810151151560088316151514155b806109735750610160810151151560048316151514155b8061098a5750610180810151151560028316151514155b806109a157506101a0810151151560018316151514155b156109d0576109d07fe65af6a00000000000000000000000000000000000000000000000000000000083610a3d565b5050565b5f805f6040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815f5273ffffffffffffffffffffffffffffffffffffffff811660045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff81168114610a80575f80fd5b50565b5f60a08284031215610a93575f80fd5b50919050565b5f60808284031215610a93575f80fd5b5f8083601f840112610ab9575f80fd5b50813567ffffffffffffffff811115610ad0575f80fd5b602083019150836020828501011115610ae7575f80fd5b9250929050565b5f805f805f6101608688031215610b03575f80fd5b8535610b0e81610a5f565b9450610b1d8760208801610a83565b9350610b2c8760c08801610a99565b925061014086013567ffffffffffffffff811115610b48575f80fd5b610b5488828901610aa9565b969995985093965092949392505050565b5f60608284031215610a93575f80fd5b5f805f805f6101408688031215610b8a575f80fd5b8535610b9581610a5f565b9450610ba48760208801610a83565b9350610bb38760c08801610b65565b925061012086013567ffffffffffffffff811115610b48575f80fd5b5f805f805f805f6101a0888a031215610be6575f80fd5b8735610bf181610a5f565b9650610c008960208a01610a83565b9550610c0f8960c08a01610a99565b94506101408801359350610160880135925061018088013567ffffffffffffffff811115610c3b575f80fd5b610c478a828b01610aa9565b989b979a50959850939692959293505050565b5f805f806101008587031215610c6e575f80fd5b8435610c7981610a5f565b9350610c888660208701610a83565b925060c0850135610c9881610a5f565b915060e0850135600281900b8114610cae575f80fd5b939692955090935050565b5f805f805f806101608789031215610ccf575f80fd5b8635610cda81610a5f565b9550610ce98860208901610a83565b9450610cf88860c08901610b65565b9350610120870135925061014087013567ffffffffffffffff811115610d1c575f80fd5b610d2889828a01610aa9565b979a9699509497509295939492505050565b5f805f805f806101208789031215610d50575f80fd5b8635610d5b81610a5f565b9550610d6a8860208901610a83565b945060c0870135935060e0870135925061010087013567ffffffffffffffff811115610d1c575f80fd5b8151151581526101c081016020830151610db2602084018215159052565b506040830151610dc6604084018215159052565b506060830151610dda606084018215159052565b506080830151610dee608084018215159052565b5060a0830151610e0260a084018215159052565b5060c0830151610e1660c084018215159052565b5060e0830151610e2a60e084018215159052565b50610100830151610e4061010084018215159052565b50610120830151610e5661012084018215159052565b50610140830151610e6c61014084018215159052565b50610160830151610e8261016084018215159052565b50610180830151610e9861018084018215159052565b506101a0830151610eae6101a084018215159052565b5092915050565b5f805f60e08486031215610ec7575f80fd5b8335610ed281610a5f565b9250610ee18560208601610a83565b915060c0840135610ef181610a5f565b80915050925092509256fea164736f6c634300081a000a","sourceMap":"324:2043:217:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3093:290:189;;;;;;:::i;:::-;;:::i;:::-;;;1869:66:262;1857:79;;;1839:98;;1827:2;1812:18;3093:290:189;;;;;;;;2237:128:217;;;:::i;:::-;;365:18;;;;;;;;;2094:25:262;;;2082:2;2067:18;365::217;1948:177:262;5032:272:189;;;;;;:::i;:::-;;:::i;:::-;;;;3369:66:262;3357:79;;;3339:98;;3468:2;3453:18;;3446:34;;;;3528:8;3516:21;3496:18;;;3489:49;3327:2;3312:18;5032:272:189;3105:439:262;4329:384:189;;;;;;:::i;:::-;;:::i;:::-;;;;4928:66:262;4916:79;;;4898:98;;5027:2;5012:18;;5005:34;;;;4871:18;4329:384:189;4693:352:262;2134:240:189;;;;;;:::i;:::-;;:::i;5559:298::-;;;;;;:::i;:::-;;:::i;:::-;;;;6909:66:262;6897:79;;;6879:98;;7024:2;7013:22;;;;7008:2;6993:18;;6986:50;6852:18;5559:298:189;6709:333:262;6108:285:189;;;;;;:::i;:::-;;:::i;2143:88:217:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2143:88:217;;;;-1:-1:-1;2143:88:217;:::i;411:41:144:-;;;;;;;;10067:42:262;10055:55;;;10037:74;;10025:2;10010:18;411:41:144;9869:248:262;1730:224:189;;;;;;:::i;:::-;;:::i;3093:290::-;3298:6;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;3323:53:189::1;3346:6;3354:3;3359:6;3367:8;;3323:22;:53::i;:::-;3316:60:::0;3093:290;-1:-1:-1;;;;;;3093:290:189:o;2237:128:217:-;2293:65;;;;;;;;2346:11;2293:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2338:4;;2293:29;:65::i;:::-;2237:128::o;5032:272:189:-;5201:6;;;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;5255:42:189::1;5267:6;5275:3;5280:6;5288:8;;5255:11;:42::i;:::-;5248:49;;;;;;5032:272:::0;;;;;;;;;:::o;4329:384::-;4595:6;;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;4634:72:189::1;4656:6;4664:3;4669:6;4677:5;4684:11;4697:8;;4634:21;:72::i;:::-;4627:79;;;;4329:384:::0;;;;;;;;;;:::o;2134:240::-;2289:6;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;2318:49:189::1;2335:6;2343:3;2348:12;2362:4;2318:16;:49::i;:::-;2311:56:::0;2134:240;-1:-1:-1;;;;;2134:240:189:o;5559:298::-;5769:6;;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;5802:48:189::1;5813:6;5821:3;5826:6;5834:5;5841:8;;5802:10;:48::i;:::-;5795:55;;;;5559:298:::0;;;;;;;;;:::o;6108:285::-;6307:6;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;6332:54:189::1;6346:6;6354:3;6359:7;6368;6377:8;;6332:13;:54::i;:::-;6325:61:::0;6108:285;-1:-1:-1;;;;;;;6108:285:189:o;1730:224::-;1874:6;650:10:144;:34;672:11;650:34;;646:63;;693:16;;;;;;;;;;;;;;646:63;1903:44:189::1;1921:6;1929:3;1934:12;1903:17;:44::i;:::-;1896:51:::0;1730:224;-1:-1:-1;;;;1730:224:189:o;3389:213::-;3546:6;3575:20;;;;;;;;;;;;;;3610:1599:89;3729:28;;:74;;1397:7;16467:29;;:34;;3729:74;;;:166;;-1:-1:-1;3823:27:89;;;;:72;;1460:7;16467:29;;:34;;3823:72;;3729:166;:265;;;-1:-1:-1;3915:30:89;;;;:79;;1528:7;16467:29;;:34;;3915:79;;3729:265;:362;;;-1:-1:-1;4014:29:89;;;;:77;;1594:7;16467:29;;:34;;4014:77;;3729:362;:467;;;-1:-1:-1;4111:33:89;;;;:85;;1665:6;16467:29;;:34;;4111:85;;3729:467;:570;;;-1:-1:-1;4216:32:89;;;;:83;;1733:6;16467:29;;:34;;4216:83;;3729:570;:652;;;-1:-1:-1;4319:22:89;;;;:62;;1791:6;16467:29;;:34;;4319:62;;3729:652;:732;;;-1:-1:-1;4401:21:89;;;;:60;;1847:6;16467:29;;:34;;4401:60;;3729:732;:818;;;-1:-1:-1;4481:24:89;;;;:66;;1907:6;16467:29;;:34;;4481:66;;3729:818;:902;;;-1:-1:-1;4567:23:89;;;;:64;;1965:6;16467:29;;:34;;4567:64;;3729:902;:1009;;;-1:-1:-1;4651:33:89;;;;:87;;2037:6;16467:29;;:34;;4651:87;;3729:1009;:1114;;;-1:-1:-1;4758:32:89;;;;:85;;2107:6;16467:29;;:34;;4758:85;;3729:1114;:1236;;;-1:-1:-1;4863:40:89;;;;:102;;2186:6;16467:29;;:34;;4863:102;;3729:1236;:1384;;;-1:-1:-1;4985:43:89;;;;:128;;2268:6;16467:29;;:34;;4985:128;;3729:1384;3712:1491;;;5138:54;:28;5186:4;5138:39;:54::i;:::-;3610:1599;;:::o;5310:216:189:-;5445:6;5453:15;5470:6;5499:20;;;;;;;;;;;;;;4719:280;4933:6;4941:12;4972:20;;;;;;;;;;;;;;1009:257:85;1133:8;1130:1;1123:19;1178:42;1172:4;1168:53;1162:4;1155:67;1245:4;1242:1;1235:15;14:154:262;100:42;93:5;89:54;82:5;79:65;69:93;;158:1;155;148:12;69:93;14:154;:::o;173:156::-;233:5;278:3;269:6;264:3;260:16;256:26;253:46;;;295:1;292;285:12;253:46;-1:-1:-1;317:6:262;173:156;-1:-1:-1;173:156:262:o;334:170::-;408:5;453:3;444:6;439:3;435:16;431:26;428:46;;;470:1;467;460:12;509:347;560:8;570:6;624:3;617:4;609:6;605:17;601:27;591:55;;642:1;639;632:12;591:55;-1:-1:-1;665:20:262;;708:18;697:30;;694:50;;;740:1;737;730:12;694:50;777:4;769:6;765:17;753:29;;829:3;822:4;813:6;805;801:19;797:30;794:39;791:59;;;846:1;843;836:12;791:59;509:347;;;;;:::o;861:829::-;1028:6;1036;1044;1052;1060;1113:3;1101:9;1092:7;1088:23;1084:33;1081:53;;;1130:1;1127;1120:12;1081:53;1169:9;1156:23;1188:31;1213:5;1188:31;:::i;:::-;1238:5;-1:-1:-1;1262:63:262;1317:7;1312:2;1297:18;;1262:63;:::i;:::-;1252:73;;1344:78;1414:7;1408:3;1397:9;1393:19;1344:78;:::i;:::-;1334:88;;1473:3;1462:9;1458:19;1445:33;1501:18;1493:6;1490:30;1487:50;;;1533:1;1530;1523:12;1487:50;1572:58;1622:7;1613:6;1602:9;1598:22;1572:58;:::i;:::-;861:829;;;;-1:-1:-1;861:829:262;;-1:-1:-1;1649:8:262;;1546:84;861:829;-1:-1:-1;;;861:829:262:o;2130:158::-;2193:5;2238:2;2229:6;2224:3;2220:16;2216:25;2213:45;;;2254:1;2251;2244:12;2293:807;2449:6;2457;2465;2473;2481;2534:3;2522:9;2513:7;2509:23;2505:33;2502:53;;;2551:1;2548;2541:12;2502:53;2590:9;2577:23;2609:31;2634:5;2609:31;:::i;:::-;2659:5;-1:-1:-1;2683:63:262;2738:7;2733:2;2718:18;;2683:63;:::i;:::-;2673:73;;2765:67;2824:7;2818:3;2807:9;2803:19;2765:67;:::i;:::-;2755:77;;2883:3;2872:9;2868:19;2855:33;2911:18;2903:6;2900:30;2897:50;;;2943:1;2940;2933:12;3549:1139;3802:6;3810;3818;3826;3834;3842;3850;3903:3;3891:9;3882:7;3878:23;3874:33;3871:53;;;3920:1;3917;3910:12;3871:53;3959:9;3946:23;3978:31;4003:5;3978:31;:::i;:::-;4028:5;-1:-1:-1;4052:63:262;4107:7;4102:2;4087:18;;4052:63;:::i;:::-;4042:73;;4134:78;4204:7;4198:3;4187:9;4183:19;4134:78;:::i;:::-;4124:88;-1:-1:-1;4285:3:262;4270:19;;4257:33;;-1:-1:-1;4389:3:262;4374:19;;4361:33;;-1:-1:-1;4471:3:262;4456:19;;4443:33;4499:18;4488:30;;4485:50;;;4531:1;4528;4521:12;4485:50;4570:58;4620:7;4611:6;4600:9;4596:22;4570:58;:::i;:::-;3549:1139;;;;-1:-1:-1;3549:1139:262;;-1:-1:-1;3549:1139:262;;;;4544:84;;-1:-1:-1;;;3549:1139:262:o;5050:687::-;5162:6;5170;5178;5186;5239:3;5227:9;5218:7;5214:23;5210:33;5207:53;;;5256:1;5253;5246:12;5207:53;5295:9;5282:23;5314:31;5339:5;5314:31;:::i;:::-;5364:5;-1:-1:-1;5388:63:262;5443:7;5438:2;5423:18;;5388:63;:::i;:::-;5378:73;;5503:3;5492:9;5488:19;5475:33;5517;5542:7;5517:33;:::i;:::-;5569:7;-1:-1:-1;5628:3:262;5613:19;;5600:33;5675:1;5664:22;;;5652:35;;5642:63;;5701:1;5698;5691:12;5642:63;5050:687;;;;-1:-1:-1;5050:687:262;;-1:-1:-1;;5050:687:262:o;5742:962::-;5941:6;5949;5957;5965;5973;5981;6034:3;6022:9;6013:7;6009:23;6005:33;6002:53;;;6051:1;6048;6041:12;6002:53;6090:9;6077:23;6109:31;6134:5;6109:31;:::i;:::-;6159:5;-1:-1:-1;6183:63:262;6238:7;6233:2;6218:18;;6183:63;:::i;:::-;6173:73;;6265:67;6324:7;6318:3;6307:9;6303:19;6265:67;:::i;:::-;6255:77;-1:-1:-1;6405:3:262;6390:19;;6377:33;;-1:-1:-1;6487:3:262;6472:19;;6459:33;6515:18;6504:30;;6501:50;;;6547:1;6544;6537:12;6501:50;6586:58;6636:7;6627:6;6616:9;6612:22;6586:58;:::i;:::-;5742:962;;;;-1:-1:-1;5742:962:262;;-1:-1:-1;5742:962:262;;6663:8;;5742:962;-1:-1:-1;;;5742:962:262:o;7047:915::-;7181:6;7189;7197;7205;7213;7221;7274:3;7262:9;7253:7;7249:23;7245:33;7242:53;;;7291:1;7288;7281:12;7242:53;7330:9;7317:23;7349:31;7374:5;7349:31;:::i;:::-;7399:5;-1:-1:-1;7423:63:262;7478:7;7473:2;7458:18;;7423:63;:::i;:::-;7413:73;-1:-1:-1;7559:3:262;7544:19;;7531:33;;-1:-1:-1;7663:3:262;7648:19;;7635:33;;-1:-1:-1;7745:3:262;7730:19;;7717:33;7773:18;7762:30;;7759:50;;;7805:1;7802;7795:12;8063:1801;8286:13;;8037;8030:21;8018:34;;8257:3;8242:19;;8358:4;8350:6;8346:17;8340:24;8373:51;8418:4;8407:9;8403:20;8389:12;8037:13;8030:21;8018:34;;7967:91;8373:51;;8473:4;8465:6;8461:17;8455:24;8488:53;8535:4;8524:9;8520:20;8504:14;8037:13;8030:21;8018:34;;7967:91;8488:53;;8590:4;8582:6;8578:17;8572:24;8605:53;8652:4;8641:9;8637:20;8621:14;8037:13;8030:21;8018:34;;7967:91;8605:53;;8707:4;8699:6;8695:17;8689:24;8722:53;8769:4;8758:9;8754:20;8738:14;8037:13;8030:21;8018:34;;7967:91;8722:53;;8824:4;8816:6;8812:17;8806:24;8839:53;8886:4;8875:9;8871:20;8855:14;8037:13;8030:21;8018:34;;7967:91;8839:53;;8941:4;8933:6;8929:17;8923:24;8956:53;9003:4;8992:9;8988:20;8972:14;8037:13;8030:21;8018:34;;7967:91;8956:53;;9058:4;9050:6;9046:17;9040:24;9073:53;9120:4;9109:9;9105:20;9089:14;8037:13;8030:21;8018:34;;7967:91;9073:53;;9175:6;9167;9163:19;9157:26;9192:55;9239:6;9228:9;9224:22;9208:14;8037:13;8030:21;8018:34;;7967:91;9192:55;;9296:6;9288;9284:19;9278:26;9313:55;9360:6;9349:9;9345:22;9329:14;8037:13;8030:21;8018:34;;7967:91;9313:55;;9417:6;9409;9405:19;9399:26;9434:55;9481:6;9470:9;9466:22;9450:14;8037:13;8030:21;8018:34;;7967:91;9434:55;;9539:6;9531;9527:19;9521:26;9556:56;9604:6;9593:9;9589:22;9572:15;8037:13;8030:21;8018:34;;7967:91;9556:56;;9662:6;9654;9650:19;9644:26;9679:56;9727:6;9716:9;9712:22;9695:15;8037:13;8030:21;8018:34;;7967:91;9679:56;;9785:6;9777;9773:19;9767:26;9802:56;9850:6;9839:9;9835:22;9818:15;8037:13;8030:21;8018:34;;7967:91;9802:56;;8063:1801;;;;:::o;10122:517::-;10227:6;10235;10243;10296:3;10284:9;10275:7;10271:23;10267:33;10264:53;;;10313:1;10310;10303:12;10264:53;10352:9;10339:23;10371:31;10396:5;10371:31;:::i;:::-;10421:5;-1:-1:-1;10445:63:262;10500:7;10495:2;10480:18;;10445:63;:::i;:::-;10435:73;;10560:3;10549:9;10545:19;10532:33;10574;10599:7;10574:33;:::i;:::-;10626:7;10616:17;;;10122:517;;;;;:::o","linkReferences":{},"immutableReferences":{"66153":[{"start":741,"length":32},{"start":856,"length":32},{"start":1300,"length":32},{"start":1443,"length":32},{"start":1586,"length":32},{"start":1720,"length":32},{"start":1861,"length":32},{"start":1998,"length":32}]}},"methodIdentifiers":{"afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)":"9f063efc","afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)":"e1b4af69","afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)":"6fe7e6eb","afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)":"6c2bbe7e","afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)":"b47b2fb1","beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)":"259982e5","beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)":"b6a8b0fa","beforeInitialize(address,(address,address,uint24,int24,address),uint160)":"dc98354e","beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)":"21d0ee70","beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)":"575e24b4","forceValidateAddress()":"23f84def","getHookPermissions()":"c4e833ce","num()":"4e70b1dc","poolManager()":"dc4c90d3"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IPoolManager\",\"name\":\"_poolManager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_num\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"_flags\",\"type\":\"uint16\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"HookNotImplemented\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotPoolManager\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"int256\",\"name\":\"liquidityDelta\",\"type\":\"int256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"internalType\":\"struct ModifyLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"BalanceDelta\",\"name\":\"delta\",\"type\":\"int256\"},{\"internalType\":\"BalanceDelta\",\"name\":\"feesAccrued\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"afterAddLiquidity\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"},{\"internalType\":\"BalanceDelta\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"afterDonate\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"int24\",\"name\":\"tick\",\"type\":\"int24\"}],\"name\":\"afterInitialize\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"int256\",\"name\":\"liquidityDelta\",\"type\":\"int256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"internalType\":\"struct ModifyLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"BalanceDelta\",\"name\":\"delta\",\"type\":\"int256\"},{\"internalType\":\"BalanceDelta\",\"name\":\"feesAccrued\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"afterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"},{\"internalType\":\"BalanceDelta\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"zeroForOne\",\"type\":\"bool\"},{\"internalType\":\"int256\",\"name\":\"amountSpecified\",\"type\":\"int256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct SwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"BalanceDelta\",\"name\":\"delta\",\"type\":\"int256\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"afterSwap\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"},{\"internalType\":\"int128\",\"name\":\"\",\"type\":\"int128\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"int256\",\"name\":\"liquidityDelta\",\"type\":\"int256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"internalType\":\"struct ModifyLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"beforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"amount0\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount1\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"beforeDonate\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"}],\"name\":\"beforeInitialize\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"int256\",\"name\":\"liquidityDelta\",\"type\":\"int256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"internalType\":\"struct ModifyLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"beforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"key\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"zeroForOne\",\"type\":\"bool\"},{\"internalType\":\"int256\",\"name\":\"amountSpecified\",\"type\":\"int256\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceLimitX96\",\"type\":\"uint160\"}],\"internalType\":\"struct SwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"beforeSwap\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"},{\"internalType\":\"BeforeSwapDelta\",\"name\":\"\",\"type\":\"int256\"},{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forceValidateAddress\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getHookPermissions\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"beforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"afterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"beforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"afterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"beforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"afterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"beforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"afterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"beforeDonate\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"afterDonate\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"beforeSwapReturnDelta\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"afterSwapReturnDelta\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"afterAddLiquidityReturnDelta\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"afterRemoveLiquidityReturnDelta\",\"type\":\"bool\"}],\"internalType\":\"struct Hooks.Permissions\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"num\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolManager\",\"outputs\":[{\"internalType\":\"contract IPoolManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)\":{\"params\":{\"delta\":\"The caller's balance delta after adding liquidity; the sum of principal delta, fees accrued, and hook delta\",\"feesAccrued\":\"The fees accrued since the last time fees were collected from this position\",\"hookData\":\"Arbitrary data handed into the PoolManager by the liquidity provider to be passed on to the hook\",\"key\":\"The key for the pool\",\"params\":\"The parameters for adding liquidity\",\"sender\":\"The initial msg.sender for the add liquidity call\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\",\"_1\":\"BalanceDelta The hook's delta in token0 and token1. Positive: the hook is owed/took currency, negative: the hook owes/sent currency\"}},\"afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)\":{\"params\":{\"amount0\":\"The amount of token0 being donated\",\"amount1\":\"The amount of token1 being donated\",\"hookData\":\"Arbitrary data handed into the PoolManager by the donor to be be passed on to the hook\",\"key\":\"The key for the pool\",\"sender\":\"The initial msg.sender for the donate call\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\"}},\"afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\":{\"params\":{\"key\":\"The key for the pool being initialized\",\"sender\":\"The initial msg.sender for the initialize call\",\"sqrtPriceX96\":\"The sqrt(price) of the pool as a Q64.96\",\"tick\":\"The current tick after the state of a pool is initialized\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\"}},\"afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)\":{\"params\":{\"delta\":\"The caller's balance delta after removing liquidity; the sum of principal delta, fees accrued, and hook delta\",\"feesAccrued\":\"The fees accrued since the last time fees were collected from this position\",\"hookData\":\"Arbitrary data handed into the PoolManager by the liquidity provider to be be passed on to the hook\",\"key\":\"The key for the pool\",\"params\":\"The parameters for removing liquidity\",\"sender\":\"The initial msg.sender for the remove liquidity call\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\",\"_1\":\"BalanceDelta The hook's delta in token0 and token1. Positive: the hook is owed/took currency, negative: the hook owes/sent currency\"}},\"afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\":{\"params\":{\"delta\":\"The amount owed to the caller (positive) or owed to the pool (negative)\",\"hookData\":\"Arbitrary data handed into the PoolManager by the swapper to be be passed on to the hook\",\"key\":\"The key for the pool\",\"params\":\"The parameters for the swap\",\"sender\":\"The initial msg.sender for the swap call\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\",\"_1\":\"int128 The hook's delta in unspecified currency. Positive: the hook is owed/took currency, negative: the hook owes/sent currency\"}},\"beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)\":{\"params\":{\"hookData\":\"Arbitrary data handed into the PoolManager by the liquidity provider to be passed on to the hook\",\"key\":\"The key for the pool\",\"params\":\"The parameters for adding liquidity\",\"sender\":\"The initial msg.sender for the add liquidity call\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\"}},\"beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)\":{\"params\":{\"amount0\":\"The amount of token0 being donated\",\"amount1\":\"The amount of token1 being donated\",\"hookData\":\"Arbitrary data handed into the PoolManager by the donor to be be passed on to the hook\",\"key\":\"The key for the pool\",\"sender\":\"The initial msg.sender for the donate call\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\"}},\"beforeInitialize(address,(address,address,uint24,int24,address),uint160)\":{\"params\":{\"key\":\"The key for the pool being initialized\",\"sender\":\"The initial msg.sender for the initialize call\",\"sqrtPriceX96\":\"The sqrt(price) of the pool as a Q64.96\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\"}},\"beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)\":{\"params\":{\"hookData\":\"Arbitrary data handed into the PoolManager by the liquidity provider to be be passed on to the hook\",\"key\":\"The key for the pool\",\"params\":\"The parameters for removing liquidity\",\"sender\":\"The initial msg.sender for the remove liquidity call\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\"}},\"beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\":{\"params\":{\"hookData\":\"Arbitrary data handed into the PoolManager by the swapper to be be passed on to the hook\",\"key\":\"The key for the pool\",\"params\":\"The parameters for the swap\",\"sender\":\"The initial msg.sender for the swap call\"},\"returns\":{\"_0\":\"bytes4 The function selector for the hook\",\"_1\":\"BeforeSwapDelta The hook's delta in specified and unspecified currencies. Positive: the hook is owed/took currency, negative: the hook owes/sent currency\",\"_2\":\"uint24 Optionally override the lp fee, only used if three conditions are met: 1. the Pool has a dynamic fee, 2. the value's 2nd highest bit is set (23rd bit, 0x400000), and 3. the value is less than or equal to the maximum fee (1 million)\"}},\"getHookPermissions()\":{\"details\":\"cannot override getHookPermissions() since its designated pure, and we cant make it view therefore lets in-line the permissions here\"}},\"version\":1},\"userdoc\":{\"errors\":{\"NotPoolManager()\":[{\"notice\":\"Thrown when the caller is not PoolManager\"}]},\"kind\":\"user\",\"methods\":{\"afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)\":{\"notice\":\"The hook called after liquidity is added\"},\"afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)\":{\"notice\":\"The hook called after donate\"},\"afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)\":{\"notice\":\"The hook called after the state of a pool is initialized\"},\"afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)\":{\"notice\":\"The hook called after liquidity is removed\"},\"afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)\":{\"notice\":\"The hook called after a swap\"},\"beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)\":{\"notice\":\"The hook called before liquidity is added\"},\"beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)\":{\"notice\":\"The hook called before donate\"},\"beforeInitialize(address,(address,address,uint24,int24,address),uint160)\":{\"notice\":\"The hook called before the state of a pool is initialized\"},\"beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)\":{\"notice\":\"The hook called before liquidity is removed\"},\"beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)\":{\"notice\":\"The hook called before a swap\"},\"poolManager()\":{\"notice\":\"The Uniswap v4 PoolManager contract\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/mocks/MockBlankHook.sol\":\"MockBlankHook\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":44444444},\"remappings\":[\":@ensdomains/=lib/v4-core/node_modules/@ensdomains/\",\":@openzeppelin/=lib/v4-core/lib/openzeppelin-contracts/\",\":@uniswap/v4-core/=lib/v4-core/\",\":ds-test/=lib/v4-core/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-gas-snapshot/=lib/permit2/lib/forge-gas-snapshot/src/\",\":forge-std/=lib/v4-core/lib/forge-std/src/\",\":hardhat/=lib/v4-core/node_modules/hardhat/\",\":openzeppelin-contracts/=lib/v4-core/lib/openzeppelin-contracts/\",\":permit2/=lib/permit2/\",\":solmate/=lib/v4-core/lib/solmate/\",\":v4-core/=lib/v4-core/src/\"]},\"sources\":{\"lib/v4-core/src/interfaces/IExtsload.sol\":{\"keccak256\":\"0x80b53ca4907d6f0088c3b931f2b72cad1dc4615a95094d96bd0fb8dff8d5ba43\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://375c69148622aab7a3537d5fd37d373a8e9731022c8d87bdaee46233b0a99fe1\",\"dweb:/ipfs/QmXFjdoYRxsA5B1kyuxEXgNf3FBoL1zPvy26Qy8EtpdFRN\"]},\"lib/v4-core/src/interfaces/IExttload.sol\":{\"keccak256\":\"0xc6b68283ebd8d1c789df536756726eed51c589134bb20821b236a0d22a135937\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://294394f72dfc219689209f4130d85601dfd0d63c8d47578050d312db70f9b6c8\",\"dweb:/ipfs/QmTDMQ3oxCGHgEBU48a3Lp4S1rRjc8vVCxkhE5ZNej1bsY\"]},\"lib/v4-core/src/interfaces/IHooks.sol\":{\"keccak256\":\"0xc131ffa2d04c10a012fe715fe2c115811526b7ea34285cf0a04ce7ce8320da8d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3b212358897db5d99c21244d88f97b2e788527552cb430629b472a8cc6289aec\",\"dweb:/ipfs/QmQtwV4dDe2RYk2ErLpaAX7U82jWh1L6Lw2HRuKDvBi84G\"]},\"lib/v4-core/src/interfaces/IPoolManager.sol\":{\"keccak256\":\"0xbdab3544da3d32dfdf7457baa94e17d5a3012952428559e013ffac45d067038e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce95ff864468e37c76adf71df061d4f3d6f3a5ec1f9bc3aea090463bc72798f4\",\"dweb:/ipfs/QmSbWh1pLbz51yQF4HEu5NRhr8XVv9JYGEw1hq1HudAnCi\"]},\"lib/v4-core/src/interfaces/IProtocolFees.sol\":{\"keccak256\":\"0x32a666e588a2f66334430357bb1e2424fe7eebeb98a3364b1dd16eb6ccca9848\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85751d302125881f72e5f8af051c2d5d9b1f606ebaea8ca7d04fccdd27cc252d\",\"dweb:/ipfs/QmeRwomeh9NWm6A6fgNA4KZPQZHPpdKsPQyYsHSFmvud7J\"]},\"lib/v4-core/src/interfaces/external/IERC20Minimal.sol\":{\"keccak256\":\"0xeccadf1bf69ba2eb51f2fe4fa511bc7bb05bbd6b9f9a3cb8e5d83d9582613e0f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://118757369892687b99ef46ce28d6861f62c098285bd7687a4f17f7e44e5f81de\",\"dweb:/ipfs/QmUxqbYqQtcEwwFbb9e6BBMePEaSgN8C45v6RKubD4ib8d\"]},\"lib/v4-core/src/interfaces/external/IERC6909Claims.sol\":{\"keccak256\":\"0xa586f345739e52b0488a0fe40b6e375cce67fdd25758408b0efcb5133ad96a48\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8c557b7e52abdbbd82e415a1acc27921446a7fd090b7d4877e52be72619547f\",\"dweb:/ipfs/QmXE2KNPbXmGX8BQF3ei6zhzRTnhoTQg39XmqMnkhbr6QK\"]},\"lib/v4-core/src/libraries/CustomRevert.sol\":{\"keccak256\":\"0x111ed3031b6990c80a93ae35dde6b6ac0b7e6af471388fdd7461e91edda9b7de\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c9ea883c98d6ae1829160d0977bb5195761cfd5bc81692d0a941f45717f594cd\",\"dweb:/ipfs/QmZPwxzaeMNv536wzrAMrMswu7vMHuqPVpjcqL3YvCMoxt\"]},\"lib/v4-core/src/libraries/Hooks.sol\":{\"keccak256\":\"0xd679b4b2d429689bc44f136050ebc958fb2d7d0d3a3c7b3e48c08ab4fba09aaa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://287190cb72840e5eb63cc7a8a1d0b9150af17d8e4ea0323f47c7e7928f2033cb\",\"dweb:/ipfs/QmVfqWBnAQM2jUcuREDdvjcP21gNuLU35CoL3NG5CEhNcx\"]},\"lib/v4-core/src/libraries/LPFeeLibrary.sol\":{\"keccak256\":\"0xbf6914e01014e7c1044111feb7df7a3d96bb503b3da827ad8464b1955580d13b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33823c20a91882c9aacdcbb02f0558c05209f4d5954aa6dd4fa17c95664db475\",\"dweb:/ipfs/QmR7owkFgpfztpp1QUg3ut3nw9iPVQqLGP4hzgmZtRUQ2J\"]},\"lib/v4-core/src/libraries/ParseBytes.sol\":{\"keccak256\":\"0x7533b13f53ee2c2c55500100b22ffd6e37e7523c27874edc98663d53a8672b15\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://82449058634fde28a085f3c59a6a5f412550c02181590593fd84c3e8b329aa17\",\"dweb:/ipfs/Qmev4E9Au6SsE4wsArChCwfg94KhHc5gYsEsZUnjF5sRLa\"]},\"lib/v4-core/src/libraries/SafeCast.sol\":{\"keccak256\":\"0x42c4a24f996a14d358be397b71f7ec9d7daf666aaec78002c63315a6ee67aa86\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3db86e2ba3679105fc32edec656c70282e1fede6cab11217702443f6c26fa59\",\"dweb:/ipfs/QmX4yaaSPdKQzYNRsezjTvZKsubzS8JRTEGFD3fPpTTCcj\"]},\"lib/v4-core/src/types/BalanceDelta.sol\":{\"keccak256\":\"0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9\",\"dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H\"]},\"lib/v4-core/src/types/BeforeSwapDelta.sol\":{\"keccak256\":\"0x2a774312d91285313d569da1a718c909655da5432310417692097a1d4dc83a78\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2c7a0379955cff9c17ab9e61f95e42909aa5947c22740f86ce940d09856f782\",\"dweb:/ipfs/QmaAuo8UBYXsGrVuKh8iRoAAdqwtg1jDq515cW1ZRP5m9K\"]},\"lib/v4-core/src/types/Currency.sol\":{\"keccak256\":\"0x4a0b84b282577ff6f8acf13ec9f4d32dbb9348748b49611d00e68bee96609c93\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://45f9d62ab3d51b52957279e353853ba1547c3182c9a1e3d1846ada4a90263b01\",\"dweb:/ipfs/QmS8NG84ccQS1yXVD8cv3eKX7J1UKxuJhbUfHTQR2opKF5\"]},\"lib/v4-core/src/types/PoolId.sol\":{\"keccak256\":\"0x308311916ea0f5c2fd878b6a2751eb223d170a69e33f601fae56dfe3c5d392af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://669c2cd7ac17690b5d8831e0bda72822376c3a04b36afed6d31df4d75fe60918\",\"dweb:/ipfs/QmT6EpkxqU8VF3WsgrZ66F3s1cCQRffR95z1HDYZz7ph6y\"]},\"lib/v4-core/src/types/PoolKey.sol\":{\"keccak256\":\"0xf89856e0580d7a4856d3187a76858377ccee9d59702d230c338d84388221b786\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f3118fa189025695c37fdf0bdd1190f085ad097484d3c88cf4c56d1db65f639\",\"dweb:/ipfs/QmamXpgtB8GV1CaFLvqefPWSoikLDhMk1yU4heBnVzU8gi\"]},\"lib/v4-core/src/types/PoolOperation.sol\":{\"keccak256\":\"0x7a1a107fc1f2208abb2c9364c8c54e56e98dca27673e9441bed2b949b6382162\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ad2470383bc5595d5af17840c64971f457adac68895a4db41ba5c71a4478e07\",\"dweb:/ipfs/QmdwKhBHDZFuqXrR2BfDBD9r7rB2ULGQBznsajRTkTmL4c\"]},\"src/base/ImmutableState.sol\":{\"keccak256\":\"0x1867c9fa2f9b4fa73bab0fcdc9d19ccef4eeac552273d8b84a170cd1cc90350a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://af2d699b439e13b599632fddfe82718aebd41055fba7c075f186675c588d1337\",\"dweb:/ipfs/Qmc111gckSKb9aESn3wRFLeLiS4KGujaUcaYJgRnCRfwQU\"]},\"src/interfaces/IImmutableState.sol\":{\"keccak256\":\"0x36ab3100e87457ecf04887f4f540e34fd7f21d8e3b83880cb679239e60b7b06b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7f290c7ce8e4832608d637a51b13dff95abecf6549485448e647a11c8ed01341\",\"dweb:/ipfs/QmfD1R6mTp8j4EjQXmQZW3vCh11EYFjnvoaw8rXRP27mMq\"]},\"src/utils/BaseHook.sol\":{\"keccak256\":\"0x6268607345149d912996d1c2bac693b2102304cc97c19ec4fef184d6fa390e89\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6c0dddffa6c5eb3c10bc45d56d58bc3f4773778322fa10a4acf46e2292b61b3\",\"dweb:/ipfs/Qmc1Srhh6ne5Lsi2Y5BBz8pgPLmJdg8uN1UCeJzKnr6Kra\"]},\"test/mocks/MockBlankHook.sol\":{\"keccak256\":\"0xa9addd388664268c30607e25bf1e0a3adee6d6e27a4608258174f89ce2310c76\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://83a5d1faed965798421234d9e265316e9e4f5f0aa86e63665081f93185e0aeca\",\"dweb:/ipfs/QmPTMQGtgeVSNNtRGEFL4GLepFagkJpMujC4oSbULjv8qn\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"contract IPoolManager","name":"_poolManager","type":"address"},{"internalType":"uint256","name":"_num","type":"uint256"},{"internalType":"uint16","name":"_flags","type":"uint16"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"HookNotImplemented"},{"inputs":[],"type":"error","name":"NotPoolManager"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"struct ModifyLiquidityParams","name":"params","type":"tuple","components":[{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"int256","name":"liquidityDelta","type":"int256"},{"internalType":"bytes32","name":"salt","type":"bytes32"}]},{"internalType":"BalanceDelta","name":"delta","type":"int256"},{"internalType":"BalanceDelta","name":"feesAccrued","type":"int256"},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"afterAddLiquidity","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"},{"internalType":"BalanceDelta","name":"","type":"int256"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"afterDonate","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"},{"internalType":"int24","name":"tick","type":"int24"}],"stateMutability":"nonpayable","type":"function","name":"afterInitialize","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"struct ModifyLiquidityParams","name":"params","type":"tuple","components":[{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"int256","name":"liquidityDelta","type":"int256"},{"internalType":"bytes32","name":"salt","type":"bytes32"}]},{"internalType":"BalanceDelta","name":"delta","type":"int256"},{"internalType":"BalanceDelta","name":"feesAccrued","type":"int256"},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"afterRemoveLiquidity","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"},{"internalType":"BalanceDelta","name":"","type":"int256"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"struct SwapParams","name":"params","type":"tuple","components":[{"internalType":"bool","name":"zeroForOne","type":"bool"},{"internalType":"int256","name":"amountSpecified","type":"int256"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"}]},{"internalType":"BalanceDelta","name":"delta","type":"int256"},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"afterSwap","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"},{"internalType":"int128","name":"","type":"int128"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"struct ModifyLiquidityParams","name":"params","type":"tuple","components":[{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"int256","name":"liquidityDelta","type":"int256"},{"internalType":"bytes32","name":"salt","type":"bytes32"}]},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"beforeAddLiquidity","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"beforeDonate","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"}],"stateMutability":"nonpayable","type":"function","name":"beforeInitialize","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"struct ModifyLiquidityParams","name":"params","type":"tuple","components":[{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"int256","name":"liquidityDelta","type":"int256"},{"internalType":"bytes32","name":"salt","type":"bytes32"}]},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"beforeRemoveLiquidity","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}]},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"struct PoolKey","name":"key","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"struct SwapParams","name":"params","type":"tuple","components":[{"internalType":"bool","name":"zeroForOne","type":"bool"},{"internalType":"int256","name":"amountSpecified","type":"int256"},{"internalType":"uint160","name":"sqrtPriceLimitX96","type":"uint160"}]},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"beforeSwap","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"},{"internalType":"BeforeSwapDelta","name":"","type":"int256"},{"internalType":"uint24","name":"","type":"uint24"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"forceValidateAddress"},{"inputs":[],"stateMutability":"pure","type":"function","name":"getHookPermissions","outputs":[{"internalType":"struct Hooks.Permissions","name":"","type":"tuple","components":[{"internalType":"bool","name":"beforeInitialize","type":"bool"},{"internalType":"bool","name":"afterInitialize","type":"bool"},{"internalType":"bool","name":"beforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"afterAddLiquidity","type":"bool"},{"internalType":"bool","name":"beforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"afterRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"beforeSwap","type":"bool"},{"internalType":"bool","name":"afterSwap","type":"bool"},{"internalType":"bool","name":"beforeDonate","type":"bool"},{"internalType":"bool","name":"afterDonate","type":"bool"},{"internalType":"bool","name":"beforeSwapReturnDelta","type":"bool"},{"internalType":"bool","name":"afterSwapReturnDelta","type":"bool"},{"internalType":"bool","name":"afterAddLiquidityReturnDelta","type":"bool"},{"internalType":"bool","name":"afterRemoveLiquidityReturnDelta","type":"bool"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"num","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"poolManager","outputs":[{"internalType":"contract IPoolManager","name":"","type":"address"}]}],"devdoc":{"kind":"dev","methods":{"afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)":{"params":{"delta":"The caller's balance delta after adding liquidity; the sum of principal delta, fees accrued, and hook delta","feesAccrued":"The fees accrued since the last time fees were collected from this position","hookData":"Arbitrary data handed into the PoolManager by the liquidity provider to be passed on to the hook","key":"The key for the pool","params":"The parameters for adding liquidity","sender":"The initial msg.sender for the add liquidity call"},"returns":{"_0":"bytes4 The function selector for the hook","_1":"BalanceDelta The hook's delta in token0 and token1. Positive: the hook is owed/took currency, negative: the hook owes/sent currency"}},"afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)":{"params":{"amount0":"The amount of token0 being donated","amount1":"The amount of token1 being donated","hookData":"Arbitrary data handed into the PoolManager by the donor to be be passed on to the hook","key":"The key for the pool","sender":"The initial msg.sender for the donate call"},"returns":{"_0":"bytes4 The function selector for the hook"}},"afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)":{"params":{"key":"The key for the pool being initialized","sender":"The initial msg.sender for the initialize call","sqrtPriceX96":"The sqrt(price) of the pool as a Q64.96","tick":"The current tick after the state of a pool is initialized"},"returns":{"_0":"bytes4 The function selector for the hook"}},"afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)":{"params":{"delta":"The caller's balance delta after removing liquidity; the sum of principal delta, fees accrued, and hook delta","feesAccrued":"The fees accrued since the last time fees were collected from this position","hookData":"Arbitrary data handed into the PoolManager by the liquidity provider to be be passed on to the hook","key":"The key for the pool","params":"The parameters for removing liquidity","sender":"The initial msg.sender for the remove liquidity call"},"returns":{"_0":"bytes4 The function selector for the hook","_1":"BalanceDelta The hook's delta in token0 and token1. Positive: the hook is owed/took currency, negative: the hook owes/sent currency"}},"afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)":{"params":{"delta":"The amount owed to the caller (positive) or owed to the pool (negative)","hookData":"Arbitrary data handed into the PoolManager by the swapper to be be passed on to the hook","key":"The key for the pool","params":"The parameters for the swap","sender":"The initial msg.sender for the swap call"},"returns":{"_0":"bytes4 The function selector for the hook","_1":"int128 The hook's delta in unspecified currency. Positive: the hook is owed/took currency, negative: the hook owes/sent currency"}},"beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)":{"params":{"hookData":"Arbitrary data handed into the PoolManager by the liquidity provider to be passed on to the hook","key":"The key for the pool","params":"The parameters for adding liquidity","sender":"The initial msg.sender for the add liquidity call"},"returns":{"_0":"bytes4 The function selector for the hook"}},"beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)":{"params":{"amount0":"The amount of token0 being donated","amount1":"The amount of token1 being donated","hookData":"Arbitrary data handed into the PoolManager by the donor to be be passed on to the hook","key":"The key for the pool","sender":"The initial msg.sender for the donate call"},"returns":{"_0":"bytes4 The function selector for the hook"}},"beforeInitialize(address,(address,address,uint24,int24,address),uint160)":{"params":{"key":"The key for the pool being initialized","sender":"The initial msg.sender for the initialize call","sqrtPriceX96":"The sqrt(price) of the pool as a Q64.96"},"returns":{"_0":"bytes4 The function selector for the hook"}},"beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)":{"params":{"hookData":"Arbitrary data handed into the PoolManager by the liquidity provider to be be passed on to the hook","key":"The key for the pool","params":"The parameters for removing liquidity","sender":"The initial msg.sender for the remove liquidity call"},"returns":{"_0":"bytes4 The function selector for the hook"}},"beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)":{"params":{"hookData":"Arbitrary data handed into the PoolManager by the swapper to be be passed on to the hook","key":"The key for the pool","params":"The parameters for the swap","sender":"The initial msg.sender for the swap call"},"returns":{"_0":"bytes4 The function selector for the hook","_1":"BeforeSwapDelta The hook's delta in specified and unspecified currencies. Positive: the hook is owed/took currency, negative: the hook owes/sent currency","_2":"uint24 Optionally override the lp fee, only used if three conditions are met: 1. the Pool has a dynamic fee, 2. the value's 2nd highest bit is set (23rd bit, 0x400000), and 3. the value is less than or equal to the maximum fee (1 million)"}},"getHookPermissions()":{"details":"cannot override getHookPermissions() since its designated pure, and we cant make it view therefore lets in-line the permissions here"}},"version":1},"userdoc":{"kind":"user","methods":{"afterAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)":{"notice":"The hook called after liquidity is added"},"afterDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)":{"notice":"The hook called after donate"},"afterInitialize(address,(address,address,uint24,int24,address),uint160,int24)":{"notice":"The hook called after the state of a pool is initialized"},"afterRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),int256,int256,bytes)":{"notice":"The hook called after liquidity is removed"},"afterSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),int256,bytes)":{"notice":"The hook called after a swap"},"beforeAddLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)":{"notice":"The hook called before liquidity is added"},"beforeDonate(address,(address,address,uint24,int24,address),uint256,uint256,bytes)":{"notice":"The hook called before donate"},"beforeInitialize(address,(address,address,uint24,int24,address),uint160)":{"notice":"The hook called before the state of a pool is initialized"},"beforeRemoveLiquidity(address,(address,address,uint24,int24,address),(int24,int24,int256,bytes32),bytes)":{"notice":"The hook called before liquidity is removed"},"beforeSwap(address,(address,address,uint24,int24,address),(bool,int256,uint160),bytes)":{"notice":"The hook called before a swap"},"poolManager()":{"notice":"The Uniswap v4 PoolManager contract"}},"version":1}},"settings":{"remappings":["@ensdomains/=lib/v4-core/node_modules/@ensdomains/","@openzeppelin/=lib/v4-core/lib/openzeppelin-contracts/","@uniswap/v4-core/=lib/v4-core/","ds-test/=lib/v4-core/lib/forge-std/lib/ds-test/src/","erc4626-tests/=lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/","forge-gas-snapshot/=lib/permit2/lib/forge-gas-snapshot/src/","forge-std/=lib/v4-core/lib/forge-std/src/","hardhat/=lib/v4-core/node_modules/hardhat/","openzeppelin-contracts/=lib/v4-core/lib/openzeppelin-contracts/","permit2/=lib/permit2/","solmate/=lib/v4-core/lib/solmate/","v4-core/=lib/v4-core/src/"],"optimizer":{"enabled":true,"runs":44444444},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"test/mocks/MockBlankHook.sol":"MockBlankHook"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/v4-core/src/interfaces/IExtsload.sol":{"keccak256":"0x80b53ca4907d6f0088c3b931f2b72cad1dc4615a95094d96bd0fb8dff8d5ba43","urls":["bzz-raw://375c69148622aab7a3537d5fd37d373a8e9731022c8d87bdaee46233b0a99fe1","dweb:/ipfs/QmXFjdoYRxsA5B1kyuxEXgNf3FBoL1zPvy26Qy8EtpdFRN"],"license":"MIT"},"lib/v4-core/src/interfaces/IExttload.sol":{"keccak256":"0xc6b68283ebd8d1c789df536756726eed51c589134bb20821b236a0d22a135937","urls":["bzz-raw://294394f72dfc219689209f4130d85601dfd0d63c8d47578050d312db70f9b6c8","dweb:/ipfs/QmTDMQ3oxCGHgEBU48a3Lp4S1rRjc8vVCxkhE5ZNej1bsY"],"license":"MIT"},"lib/v4-core/src/interfaces/IHooks.sol":{"keccak256":"0xc131ffa2d04c10a012fe715fe2c115811526b7ea34285cf0a04ce7ce8320da8d","urls":["bzz-raw://3b212358897db5d99c21244d88f97b2e788527552cb430629b472a8cc6289aec","dweb:/ipfs/QmQtwV4dDe2RYk2ErLpaAX7U82jWh1L6Lw2HRuKDvBi84G"],"license":"MIT"},"lib/v4-core/src/interfaces/IPoolManager.sol":{"keccak256":"0xbdab3544da3d32dfdf7457baa94e17d5a3012952428559e013ffac45d067038e","urls":["bzz-raw://ce95ff864468e37c76adf71df061d4f3d6f3a5ec1f9bc3aea090463bc72798f4","dweb:/ipfs/QmSbWh1pLbz51yQF4HEu5NRhr8XVv9JYGEw1hq1HudAnCi"],"license":"MIT"},"lib/v4-core/src/interfaces/IProtocolFees.sol":{"keccak256":"0x32a666e588a2f66334430357bb1e2424fe7eebeb98a3364b1dd16eb6ccca9848","urls":["bzz-raw://85751d302125881f72e5f8af051c2d5d9b1f606ebaea8ca7d04fccdd27cc252d","dweb:/ipfs/QmeRwomeh9NWm6A6fgNA4KZPQZHPpdKsPQyYsHSFmvud7J"],"license":"MIT"},"lib/v4-core/src/interfaces/external/IERC20Minimal.sol":{"keccak256":"0xeccadf1bf69ba2eb51f2fe4fa511bc7bb05bbd6b9f9a3cb8e5d83d9582613e0f","urls":["bzz-raw://118757369892687b99ef46ce28d6861f62c098285bd7687a4f17f7e44e5f81de","dweb:/ipfs/QmUxqbYqQtcEwwFbb9e6BBMePEaSgN8C45v6RKubD4ib8d"],"license":"MIT"},"lib/v4-core/src/interfaces/external/IERC6909Claims.sol":{"keccak256":"0xa586f345739e52b0488a0fe40b6e375cce67fdd25758408b0efcb5133ad96a48","urls":["bzz-raw://e8c557b7e52abdbbd82e415a1acc27921446a7fd090b7d4877e52be72619547f","dweb:/ipfs/QmXE2KNPbXmGX8BQF3ei6zhzRTnhoTQg39XmqMnkhbr6QK"],"license":"MIT"},"lib/v4-core/src/libraries/CustomRevert.sol":{"keccak256":"0x111ed3031b6990c80a93ae35dde6b6ac0b7e6af471388fdd7461e91edda9b7de","urls":["bzz-raw://c9ea883c98d6ae1829160d0977bb5195761cfd5bc81692d0a941f45717f594cd","dweb:/ipfs/QmZPwxzaeMNv536wzrAMrMswu7vMHuqPVpjcqL3YvCMoxt"],"license":"MIT"},"lib/v4-core/src/libraries/Hooks.sol":{"keccak256":"0xd679b4b2d429689bc44f136050ebc958fb2d7d0d3a3c7b3e48c08ab4fba09aaa","urls":["bzz-raw://287190cb72840e5eb63cc7a8a1d0b9150af17d8e4ea0323f47c7e7928f2033cb","dweb:/ipfs/QmVfqWBnAQM2jUcuREDdvjcP21gNuLU35CoL3NG5CEhNcx"],"license":"MIT"},"lib/v4-core/src/libraries/LPFeeLibrary.sol":{"keccak256":"0xbf6914e01014e7c1044111feb7df7a3d96bb503b3da827ad8464b1955580d13b","urls":["bzz-raw://33823c20a91882c9aacdcbb02f0558c05209f4d5954aa6dd4fa17c95664db475","dweb:/ipfs/QmR7owkFgpfztpp1QUg3ut3nw9iPVQqLGP4hzgmZtRUQ2J"],"license":"MIT"},"lib/v4-core/src/libraries/ParseBytes.sol":{"keccak256":"0x7533b13f53ee2c2c55500100b22ffd6e37e7523c27874edc98663d53a8672b15","urls":["bzz-raw://82449058634fde28a085f3c59a6a5f412550c02181590593fd84c3e8b329aa17","dweb:/ipfs/Qmev4E9Au6SsE4wsArChCwfg94KhHc5gYsEsZUnjF5sRLa"],"license":"MIT"},"lib/v4-core/src/libraries/SafeCast.sol":{"keccak256":"0x42c4a24f996a14d358be397b71f7ec9d7daf666aaec78002c63315a6ee67aa86","urls":["bzz-raw://c3db86e2ba3679105fc32edec656c70282e1fede6cab11217702443f6c26fa59","dweb:/ipfs/QmX4yaaSPdKQzYNRsezjTvZKsubzS8JRTEGFD3fPpTTCcj"],"license":"MIT"},"lib/v4-core/src/types/BalanceDelta.sol":{"keccak256":"0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f","urls":["bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9","dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H"],"license":"MIT"},"lib/v4-core/src/types/BeforeSwapDelta.sol":{"keccak256":"0x2a774312d91285313d569da1a718c909655da5432310417692097a1d4dc83a78","urls":["bzz-raw://a2c7a0379955cff9c17ab9e61f95e42909aa5947c22740f86ce940d09856f782","dweb:/ipfs/QmaAuo8UBYXsGrVuKh8iRoAAdqwtg1jDq515cW1ZRP5m9K"],"license":"MIT"},"lib/v4-core/src/types/Currency.sol":{"keccak256":"0x4a0b84b282577ff6f8acf13ec9f4d32dbb9348748b49611d00e68bee96609c93","urls":["bzz-raw://45f9d62ab3d51b52957279e353853ba1547c3182c9a1e3d1846ada4a90263b01","dweb:/ipfs/QmS8NG84ccQS1yXVD8cv3eKX7J1UKxuJhbUfHTQR2opKF5"],"license":"MIT"},"lib/v4-core/src/types/PoolId.sol":{"keccak256":"0x308311916ea0f5c2fd878b6a2751eb223d170a69e33f601fae56dfe3c5d392af","urls":["bzz-raw://669c2cd7ac17690b5d8831e0bda72822376c3a04b36afed6d31df4d75fe60918","dweb:/ipfs/QmT6EpkxqU8VF3WsgrZ66F3s1cCQRffR95z1HDYZz7ph6y"],"license":"MIT"},"lib/v4-core/src/types/PoolKey.sol":{"keccak256":"0xf89856e0580d7a4856d3187a76858377ccee9d59702d230c338d84388221b786","urls":["bzz-raw://6f3118fa189025695c37fdf0bdd1190f085ad097484d3c88cf4c56d1db65f639","dweb:/ipfs/QmamXpgtB8GV1CaFLvqefPWSoikLDhMk1yU4heBnVzU8gi"],"license":"MIT"},"lib/v4-core/src/types/PoolOperation.sol":{"keccak256":"0x7a1a107fc1f2208abb2c9364c8c54e56e98dca27673e9441bed2b949b6382162","urls":["bzz-raw://4ad2470383bc5595d5af17840c64971f457adac68895a4db41ba5c71a4478e07","dweb:/ipfs/QmdwKhBHDZFuqXrR2BfDBD9r7rB2ULGQBznsajRTkTmL4c"],"license":"MIT"},"src/base/ImmutableState.sol":{"keccak256":"0x1867c9fa2f9b4fa73bab0fcdc9d19ccef4eeac552273d8b84a170cd1cc90350a","urls":["bzz-raw://af2d699b439e13b599632fddfe82718aebd41055fba7c075f186675c588d1337","dweb:/ipfs/Qmc111gckSKb9aESn3wRFLeLiS4KGujaUcaYJgRnCRfwQU"],"license":"MIT"},"src/interfaces/IImmutableState.sol":{"keccak256":"0x36ab3100e87457ecf04887f4f540e34fd7f21d8e3b83880cb679239e60b7b06b","urls":["bzz-raw://7f290c7ce8e4832608d637a51b13dff95abecf6549485448e647a11c8ed01341","dweb:/ipfs/QmfD1R6mTp8j4EjQXmQZW3vCh11EYFjnvoaw8rXRP27mMq"],"license":"MIT"},"src/utils/BaseHook.sol":{"keccak256":"0x6268607345149d912996d1c2bac693b2102304cc97c19ec4fef184d6fa390e89","urls":["bzz-raw://d6c0dddffa6c5eb3c10bc45d56d58bc3f4773778322fa10a4acf46e2292b61b3","dweb:/ipfs/Qmc1Srhh6ne5Lsi2Y5BBz8pgPLmJdg8uN1UCeJzKnr6Kra"],"license":"MIT"},"test/mocks/MockBlankHook.sol":{"keccak256":"0xa9addd388664268c30607e25bf1e0a3adee6d6e27a4608258174f89ce2310c76","urls":["bzz-raw://83a5d1faed965798421234d9e265316e9e4f5f0aa86e63665081f93185e0aeca","dweb:/ipfs/QmPTMQGtgeVSNNtRGEFL4GLepFagkJpMujC4oSbULjv8qn"],"license":"MIT"}},"version":1},"id":217}