protected Set<ComputedValue> getValues(final FunctionExecutionContext executionContext, final FunctionInputs inputs,
final ComputationTarget target, final Set<ValueRequirement> desiredValues, final InstrumentDerivative derivative,
final FXMatrix fxMatrix) {
final Set<ComputedValue> result = new HashSet<>();
final BlackSwaptionFlatProvider blackData = getSwaptionBlackSurface(executionContext, inputs, target, fxMatrix);
final CurveBuildingBlockBundle blocks = getMergedCurveBuildingBlocks(inputs);
final MultipleCurrencyParameterSensitivity sensitivities = CALCULATOR.fromInstrument(derivative, blackData, blocks);
for (final ValueRequirement desiredValue : desiredValues) {
final ValueSpecification spec = new ValueSpecification(BLOCK_CURVE_SENSITIVITIES, target.toSpecification(), desiredValue.getConstraints().copy().get());
result.add(new ComputedValue(spec, sensitivities));
}