{
    "Function": "completeQueuedWithdrawal",
    "File": "src/contracts/core/StrategyManager.sol",
    "Parent Contracts": [
        "src/contracts/core/StrategyManagerStorage.sol",
        "src/contracts/interfaces/IStrategyManager.sol",
        "src/contracts/permissions/Pausable.sol",
        "src/contracts/interfaces/IPausable.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/security/ReentrancyGuardUpgradeable.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol",
        "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol"
    ],
    "High-Level Calls": [],
    "Internal Calls": [
        "_completeQueuedWithdrawal",
        "onlyWhenNotPaused",
        "nonReentrant"
    ],
    "Library Calls": [],
    "Low-Level Calls": [],
    "Code": "function completeQueuedWithdrawal(QueuedWithdrawal calldata queuedWithdrawal, IERC20[] calldata tokens, uint256 middlewareTimesIndex, bool receiveAsTokens)\n        external\n        onlyWhenNotPaused(PAUSED_WITHDRAWALS)\n        // check that the address that the staker *was delegated to* \u2013 at the time that they queued the withdrawal \u2013 is not frozen\n        nonReentrant\n    {\n        _completeQueuedWithdrawal(queuedWithdrawal, tokens, middlewareTimesIndex, receiveAsTokens);\n    }"
}