```\n        address[] memory targets = new address[](UNDERLYING_IS_ETH ? 2 : 1);\n        bytes[] memory callData = new bytes[](UNDERLYING_IS_ETH ? 2 : 1);\n        targets[0] = LENDING_POOL;\n        callData[0] = abi.encodeWithSelector(\n            ILendingPool.withdraw.selector, underlyingToken, withdrawAmount, address(NOTIONAL)\n        );\n\n        if (UNDERLYING_IS_ETH) {\n            // Aave V3 returns WETH instead of native ETH so we have to unwrap it here\n            targets[1] = address(Deployments.WETH);\n            callData[1] = abi.encodeWithSelector(WETH9.withdraw.selector, withdrawAmount);\n        }\n\n        data = new RedeemData[](1);\n        // Tokens with less than or equal to 8 decimals sometimes have off by 1 issues when depositing\n        // into Aave V3. Aave returns one unit less than has been deposited. This adjustment is applied\n        // to ensure that this unit of token is credited back to prime cash holders appropriately.\n        uint8 rebasingTokenBalanceAdjustment = UNDERLYING_DECIMALS <= 8 ? 1 : 0;\n        data[0] = RedeemData(\n            targets, callData, withdrawAmount, ASSET_TOKEN, rebasingTokenBalanceAdjustment\n        );\n```\n