code: ResolvedFeatureSearchResult findResolvedDependency(FeatureResource featureResource) {
          ProvisioningFeatureDefinition feature = resolvedFeatures.get(featureResource.getSymbolicName());
          if (feature != null) {
              return new ResolvedFeatureSearchResult(ResultCategory.FOUND, feature.getSymbolicName());
          }
  
          if (requirementsFoundForOtherProducts.contains(featureResource.getSymbolicName())) {
              return new ResolvedFeatureSearchResult(ResultCategory.FOUND_WRONG_PRODUCT, featureResource.getSymbolicName());
          }
  
          String baseName = getFeatureBaseName(featureResource.getSymbolicName());
          for (String toleratedVersion : featureResource.getTolerates()) {
              String featureName = baseName + toleratedVersion;
  
              feature = resolvedFeatures.get(featureName);
              if (feature != null) {
                  return new ResolvedFeatureSearchResult(ResultCategory.FOUND, feature.getSymbolicName());
              }
  
              if (requirementsFoundForOtherProducts.contains(featureName)) {
                  return new ResolvedFeatureSearchResult(ResultCategory.FOUND_WRONG_PRODUCT, featureName);
              }
          }
  
          return new ResolvedFeatureSearchResult(ResultCategory.MISSING, null);
      }
docs: Find the actual resolved feature from a dependency with tolerates
  <p>
  Tries each of the tolerated versions in order until it finds one that exists in the set of resolved features.
  <p>
  Three types of results are possible:
  <ul>
  <li><b>FOUND</b>: We found the required feature</li>
  <li><b>FOUND_WRONG_PRODUCT</b>: We found the required feature, but it was for the wrong product</li>
  <li><b>MISSING</b>: We did not find the required feature. The {@code symbolicName} field of the result will be {@code null}</li>
  </ul>
  
  @param featureResource the dependency definition to resolve
  @return the result of the search