[
    {
        "inputs": [
            {
                "internalType": "contract IPoolManager",
                "name": "poolManager_",
                "type": "address"
            },
            {
                "internalType": "contract WETH",
                "name": "weth_",
                "type": "address"
            },
            {
                "internalType": "contract IPermit2",
                "name": "permit2_",
                "type": "address"
            },
            {
                "internalType": "contract IBunniToken",
                "name": "bunniTokenImplementation_",
                "type": "address"
            },
            {
                "internalType": "address",
                "name": "initialOwner",
                "type": "address"
            },
            {
                "internalType": "contract IBunniHook[]",
                "name": "initialHookWhitelist",
                "type": "address[]"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "constructor"
    },
    {
        "inputs": [],
        "name": "AlreadyInitialized",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "BunniHub__BunniTokenNotInitialized",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "BunniHub__MsgValueInsufficient",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "BunniHub__NoExpiredWithdrawal",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "BunniHub__PastDeadline",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "BunniHub__Paused",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "BunniHub__Unauthorized",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "BunniHub__VaultTookMoreThanRequested",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "BunniHub__ZeroInput",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "NewOwnerIsZeroAddress",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "NoHandoverRequest",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "ReentrancyGuard__ReentrantCall",
        "type": "error"
    },
    {
        "inputs": [],
        "name": "Unauthorized",
        "type": "error"
    },
    {
        "anonymous": false,
        "inputs": [],
        "name": "BurnPauseFuse",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "sender",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "address",
                "name": "recipient",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "PoolId",
                "name": "poolId",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "amount0",
                "type": "uint256"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "amount1",
                "type": "uint256"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "shares",
                "type": "uint256"
            }
        ],
        "name": "Deposit",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "contract IBunniToken",
                "name": "bunniToken",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "PoolId",
                "name": "poolId",
                "type": "bytes32"
            }
        ],
        "name": "NewBunni",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "pendingOwner",
                "type": "address"
            }
        ],
        "name": "OwnershipHandoverCanceled",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "pendingOwner",
                "type": "address"
            }
        ],
        "name": "OwnershipHandoverRequested",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "oldOwner",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "address",
                "name": "newOwner",
                "type": "address"
            }
        ],
        "name": "OwnershipTransferred",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "sender",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "PoolId",
                "name": "poolId",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "shares",
                "type": "uint256"
            }
        ],
        "name": "QueueWithdraw",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "contract IBunniHook",
                "name": "hook",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "bool",
                "name": "whitelisted",
                "type": "bool"
            }
        ],
        "name": "SetHookWhitelist",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "uint8",
                "name": "pauseFlags",
                "type": "uint8"
            }
        ],
        "name": "SetPauseFlags",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "guy",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "bool",
                "name": "isPauser",
                "type": "bool"
            }
        ],
        "name": "SetPauser",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "internalType": "address",
                "name": "sender",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "address",
                "name": "recipient",
                "type": "address"
            },
            {
                "indexed": true,
                "internalType": "PoolId",
                "name": "poolId",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "amount0",
                "type": "uint256"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "amount1",
                "type": "uint256"
            },
            {
                "indexed": false,
                "internalType": "uint256",
                "name": "shares",
                "type": "uint256"
            }
        ],
        "name": "Withdraw",
        "type": "event"
    },
    {
        "inputs": [
            {
                "internalType": "PoolId",
                "name": "poolId",
                "type": "bytes32"
            }
        ],
        "name": "bunniTokenOfPool",
        "outputs": [
            {
                "internalType": "contract IBunniToken",
                "name": "",
                "type": "address"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "burnPauseFuse",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "cancelOwnershipHandover",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "pendingOwner",
                "type": "address"
            }
        ],
        "name": "completeOwnershipHandover",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "internalType": "Currency",
                        "name": "currency0",
                        "type": "address"
                    },
                    {
                        "internalType": "Currency",
                        "name": "currency1",
                        "type": "address"
                    },
                    {
                        "internalType": "int24",
                        "name": "tickSpacing",
                        "type": "int24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "twapSecondsAgo",
                        "type": "uint24"
                    },
                    {
                        "internalType": "contract ILiquidityDensityFunction",
                        "name": "liquidityDensityFunction",
                        "type": "address"
                    },
                    {
                        "internalType": "contract IHooklet",
                        "name": "hooklet",
                        "type": "address"
                    },
                    {
                        "internalType": "enum LDFType",
                        "name": "ldfType",
                        "type": "uint8"
                    },
                    {
                        "internalType": "bytes32",
                        "name": "ldfParams",
                        "type": "bytes32"
                    },
                    {
                        "internalType": "contract IBunniHook",
                        "name": "hooks",
                        "type": "address"
                    },
                    {
                        "internalType": "bytes",
                        "name": "hookParams",
                        "type": "bytes"
                    },
                    {
                        "internalType": "contract ERC4626",
                        "name": "vault0",
                        "type": "address"
                    },
                    {
                        "internalType": "contract ERC4626",
                        "name": "vault1",
                        "type": "address"
                    },
                    {
                        "internalType": "uint24",
                        "name": "minRawTokenRatio0",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "targetRawTokenRatio0",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "maxRawTokenRatio0",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "minRawTokenRatio1",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "targetRawTokenRatio1",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "maxRawTokenRatio1",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint160",
                        "name": "sqrtPriceX96",
                        "type": "uint160"
                    },
                    {
                        "internalType": "bytes32",
                        "name": "name",
                        "type": "bytes32"
                    },
                    {
                        "internalType": "bytes32",
                        "name": "symbol",
                        "type": "bytes32"
                    },
                    {
                        "internalType": "address",
                        "name": "owner",
                        "type": "address"
                    },
                    {
                        "internalType": "string",
                        "name": "metadataURI",
                        "type": "string"
                    },
                    {
                        "internalType": "bytes32",
                        "name": "salt",
                        "type": "bytes32"
                    }
                ],
                "internalType": "struct IBunniHub.DeployBunniTokenParams",
                "name": "params",
                "type": "tuple"
            }
        ],
        "name": "deployBunniToken",
        "outputs": [
            {
                "internalType": "contract IBunniToken",
                "name": "token",
                "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"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "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": "poolKey",
                        "type": "tuple"
                    },
                    {
                        "internalType": "address",
                        "name": "recipient",
                        "type": "address"
                    },
                    {
                        "internalType": "address",
                        "name": "refundRecipient",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount0Desired",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1Desired",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount0Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "vaultFee0",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "vaultFee1",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "deadline",
                        "type": "uint256"
                    }
                ],
                "internalType": "struct IBunniHub.DepositParams",
                "name": "params",
                "type": "tuple"
            }
        ],
        "name": "deposit",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "shares",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "amount0",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "amount1",
                "type": "uint256"
            }
        ],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "getPauseStatus",
        "outputs": [
            {
                "internalType": "uint8",
                "name": "pauseFlags",
                "type": "uint8"
            },
            {
                "internalType": "bool",
                "name": "unpauseFuse",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "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": "bool",
                "name": "isCurrency0",
                "type": "bool"
            },
            {
                "internalType": "uint256",
                "name": "amount",
                "type": "uint256"
            }
        ],
        "name": "hookGive",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "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": "bool",
                "name": "zeroForOne",
                "type": "bool"
            },
            {
                "internalType": "uint256",
                "name": "inputAmount",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "outputAmount",
                "type": "uint256"
            },
            {
                "internalType": "bool",
                "name": "shouldSurge",
                "type": "bool"
            }
        ],
        "name": "hookHandleSwap",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "contract IBunniHook",
                "name": "hook",
                "type": "address"
            }
        ],
        "name": "hookIsWhitelisted",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "PoolId",
                "name": "poolId",
                "type": "bytes32"
            }
        ],
        "name": "hookParams",
        "outputs": [
            {
                "internalType": "bytes",
                "name": "",
                "type": "bytes"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "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": "IdleBalance",
                "name": "newIdleBalance",
                "type": "bytes32"
            }
        ],
        "name": "hookSetIdleBalance",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "PoolId",
                "name": "poolId",
                "type": "bytes32"
            }
        ],
        "name": "hookletOfPool",
        "outputs": [
            {
                "internalType": "contract IHooklet",
                "name": "",
                "type": "address"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "PoolId",
                "name": "poolId",
                "type": "bytes32"
            }
        ],
        "name": "idleBalance",
        "outputs": [
            {
                "internalType": "IdleBalance",
                "name": "",
                "type": "bytes32"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "guy",
                "type": "address"
            }
        ],
        "name": "isPauser",
        "outputs": [
            {
                "internalType": "bool",
                "name": "",
                "type": "bool"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "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"
            }
        ],
        "name": "lockForRebalance",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "bytes32",
                "name": "bunniSubspace",
                "type": "bytes32"
            }
        ],
        "name": "nonce",
        "outputs": [
            {
                "internalType": "uint24",
                "name": "",
                "type": "uint24"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "owner",
        "outputs": [
            {
                "internalType": "address",
                "name": "result",
                "type": "address"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "pendingOwner",
                "type": "address"
            }
        ],
        "name": "ownershipHandoverExpiresAt",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "result",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "PoolId",
                "name": "poolId",
                "type": "bytes32"
            }
        ],
        "name": "poolBalances",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "balance0",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "balance1",
                "type": "uint256"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "contract IBunniToken",
                "name": "bunniToken",
                "type": "address"
            }
        ],
        "name": "poolIdOfBunniToken",
        "outputs": [
            {
                "internalType": "PoolId",
                "name": "",
                "type": "bytes32"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "poolInitData",
        "outputs": [
            {
                "internalType": "bytes",
                "name": "",
                "type": "bytes"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "PoolId",
                "name": "poolId",
                "type": "bytes32"
            }
        ],
        "name": "poolParams",
        "outputs": [
            {
                "components": [
                    {
                        "internalType": "contract ILiquidityDensityFunction",
                        "name": "liquidityDensityFunction",
                        "type": "address"
                    },
                    {
                        "internalType": "contract IBunniToken",
                        "name": "bunniToken",
                        "type": "address"
                    },
                    {
                        "internalType": "contract IHooklet",
                        "name": "hooklet",
                        "type": "address"
                    },
                    {
                        "internalType": "uint24",
                        "name": "twapSecondsAgo",
                        "type": "uint24"
                    },
                    {
                        "internalType": "bytes32",
                        "name": "ldfParams",
                        "type": "bytes32"
                    },
                    {
                        "internalType": "bytes",
                        "name": "hookParams",
                        "type": "bytes"
                    },
                    {
                        "internalType": "contract ERC4626",
                        "name": "vault0",
                        "type": "address"
                    },
                    {
                        "internalType": "contract ERC4626",
                        "name": "vault1",
                        "type": "address"
                    },
                    {
                        "internalType": "enum LDFType",
                        "name": "ldfType",
                        "type": "uint8"
                    },
                    {
                        "internalType": "uint24",
                        "name": "minRawTokenRatio0",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "targetRawTokenRatio0",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "maxRawTokenRatio0",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "minRawTokenRatio1",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "targetRawTokenRatio1",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "maxRawTokenRatio1",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint8",
                        "name": "currency0Decimals",
                        "type": "uint8"
                    },
                    {
                        "internalType": "uint8",
                        "name": "currency1Decimals",
                        "type": "uint8"
                    },
                    {
                        "internalType": "uint8",
                        "name": "vault0Decimals",
                        "type": "uint8"
                    },
                    {
                        "internalType": "uint8",
                        "name": "vault1Decimals",
                        "type": "uint8"
                    },
                    {
                        "internalType": "uint256",
                        "name": "rawBalance0",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "rawBalance1",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "reserve0",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "reserve1",
                        "type": "uint256"
                    },
                    {
                        "internalType": "IdleBalance",
                        "name": "idleBalance",
                        "type": "bytes32"
                    }
                ],
                "internalType": "struct PoolState",
                "name": "",
                "type": "tuple"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "PoolId",
                "name": "poolId",
                "type": "bytes32"
            }
        ],
        "name": "poolState",
        "outputs": [
            {
                "components": [
                    {
                        "internalType": "contract ILiquidityDensityFunction",
                        "name": "liquidityDensityFunction",
                        "type": "address"
                    },
                    {
                        "internalType": "contract IBunniToken",
                        "name": "bunniToken",
                        "type": "address"
                    },
                    {
                        "internalType": "contract IHooklet",
                        "name": "hooklet",
                        "type": "address"
                    },
                    {
                        "internalType": "uint24",
                        "name": "twapSecondsAgo",
                        "type": "uint24"
                    },
                    {
                        "internalType": "bytes32",
                        "name": "ldfParams",
                        "type": "bytes32"
                    },
                    {
                        "internalType": "bytes",
                        "name": "hookParams",
                        "type": "bytes"
                    },
                    {
                        "internalType": "contract ERC4626",
                        "name": "vault0",
                        "type": "address"
                    },
                    {
                        "internalType": "contract ERC4626",
                        "name": "vault1",
                        "type": "address"
                    },
                    {
                        "internalType": "enum LDFType",
                        "name": "ldfType",
                        "type": "uint8"
                    },
                    {
                        "internalType": "uint24",
                        "name": "minRawTokenRatio0",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "targetRawTokenRatio0",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "maxRawTokenRatio0",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "minRawTokenRatio1",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "targetRawTokenRatio1",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint24",
                        "name": "maxRawTokenRatio1",
                        "type": "uint24"
                    },
                    {
                        "internalType": "uint8",
                        "name": "currency0Decimals",
                        "type": "uint8"
                    },
                    {
                        "internalType": "uint8",
                        "name": "currency1Decimals",
                        "type": "uint8"
                    },
                    {
                        "internalType": "uint8",
                        "name": "vault0Decimals",
                        "type": "uint8"
                    },
                    {
                        "internalType": "uint8",
                        "name": "vault1Decimals",
                        "type": "uint8"
                    },
                    {
                        "internalType": "uint256",
                        "name": "rawBalance0",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "rawBalance1",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "reserve0",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "reserve1",
                        "type": "uint256"
                    },
                    {
                        "internalType": "IdleBalance",
                        "name": "idleBalance",
                        "type": "bytes32"
                    }
                ],
                "internalType": "struct PoolState",
                "name": "",
                "type": "tuple"
            }
        ],
        "stateMutability": "view",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "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": "poolKey",
                        "type": "tuple"
                    },
                    {
                        "internalType": "uint200",
                        "name": "shares",
                        "type": "uint200"
                    }
                ],
                "internalType": "struct IBunniHub.QueueWithdrawParams",
                "name": "params",
                "type": "tuple"
            }
        ],
        "name": "queueWithdraw",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "renounceOwnership",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [],
        "name": "requestOwnershipHandover",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "contract IBunniHook",
                "name": "hook",
                "type": "address"
            },
            {
                "internalType": "bool",
                "name": "whitelisted",
                "type": "bool"
            }
        ],
        "name": "setHookWhitelist",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "uint8",
                "name": "pauseFlags",
                "type": "uint8"
            }
        ],
        "name": "setPauseFlags",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "guy",
                "type": "address"
            },
            {
                "internalType": "bool",
                "name": "status",
                "type": "bool"
            }
        ],
        "name": "setPauser",
        "outputs": [],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "address",
                "name": "newOwner",
                "type": "address"
            }
        ],
        "name": "transferOwnership",
        "outputs": [],
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "internalType": "bytes",
                "name": "data",
                "type": "bytes"
            }
        ],
        "name": "unlockCallback",
        "outputs": [
            {
                "internalType": "bytes",
                "name": "",
                "type": "bytes"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [
            {
                "components": [
                    {
                        "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": "poolKey",
                        "type": "tuple"
                    },
                    {
                        "internalType": "address",
                        "name": "recipient",
                        "type": "address"
                    },
                    {
                        "internalType": "uint256",
                        "name": "shares",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount0Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "amount1Min",
                        "type": "uint256"
                    },
                    {
                        "internalType": "uint256",
                        "name": "deadline",
                        "type": "uint256"
                    },
                    {
                        "internalType": "bool",
                        "name": "useQueuedWithdrawal",
                        "type": "bool"
                    }
                ],
                "internalType": "struct IBunniHub.WithdrawParams",
                "name": "params",
                "type": "tuple"
            }
        ],
        "name": "withdraw",
        "outputs": [
            {
                "internalType": "uint256",
                "name": "amount0",
                "type": "uint256"
            },
            {
                "internalType": "uint256",
                "name": "amount1",
                "type": "uint256"
            }
        ],
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "stateMutability": "payable",
        "type": "receive"
    }
]
