```\nfunction _executeUserOp(uint256 opIndex, UserOperation calldata userOp, UserOpInfo memory opInfo) private returns (uint256 collected) {\n    uint256 preGas = gasleft();\n    bytes memory context = getMemoryBytesFromOffset(opInfo.contextOffset);\n\n    try this.innerHandleOp(userOp.callData, opInfo, context) returns (uint256 _actualGasCost) {\n        collected = _actualGasCost;\n    } catch {\n        bytes32 innerRevertCode;\n        assembly {\n            returndatacopy(0, 0, 32)\n            innerRevertCode := mload(0)\n        }\n        // handleOps was called with gas limit too low. abort entire bundle.\n        if (innerRevertCode == INNER_OUT_OF_GAS) {\n            //report paymaster, since if it is not deliberately caused by the bundler,\n            // it must be a revert caused by paymaster.\n            revert FailedOp(opIndex, "AA95 out of gas");\n        }\n\n        uint256 actualGas = preGas - gasleft() + opInfo.preOpGas;\n        collected = _handlePostOp(opIndex, IPaymaster.PostOpMode.postOpReverted, opInfo, context, actualGas);\n    }\n}\n```\n