class ElementsShouldSatisfy extends BasicErrorMessageFactory {

  public static ErrorMessageFactory elementsShouldSatisfyAny(Object actual,
                                                             List<UnsatisfiedRequirement> elementsNotSatisfyingRequirements,
                                                             AssertionInfo info) {
    return new ElementsShouldSatisfy("%n" +
                                     "Expecting any element of:%n" +
                                     "  %s%n" +
                                     "to satisfy the given assertions requirements but none did:%n%n",
                                     actual, elementsNotSatisfyingRequirements, info);
  }

  public static ErrorMessageFactory elementsShouldSatisfy(Object actual,
                                                          List<UnsatisfiedRequirement> elementsNotSatisfyingRestrictions,
                                                          AssertionInfo info) {<FILL_FUNCTION_BODY>}

  public static ErrorMessageFactory elementsShouldSatisfyExactly(Object actual,
                                                                 Map<Integer, UnsatisfiedRequirement> unsatisfiedRequirements,
                                                                 AssertionInfo info) {
    return new ElementsShouldSatisfy("%n" +
                                     "Expecting each element of:%n" +
                                     "  %s%n" +
                                     "to satisfy the requirements at its index, but these elements did not:%n%n",
                                     actual, unsatisfiedRequirements, info);
  }

  private ElementsShouldSatisfy(String message, Object actual, List<UnsatisfiedRequirement> elementsNotSatisfyingRequirements,
                                AssertionInfo info) {
    super(message + describeErrors(elementsNotSatisfyingRequirements, info), actual);
  }

  private ElementsShouldSatisfy(String message, Object actual, Map<Integer, UnsatisfiedRequirement> unsatisfiedRequirements,
                                AssertionInfo info) {
    super(message + describeErrors(unsatisfiedRequirements, info), actual);
  }

  private static String describeErrors(Map<Integer, UnsatisfiedRequirement> unsatisfiedRequirements, AssertionInfo info) {
    return escapePercent(unsatisfiedRequirements.entrySet().stream()
                                                .map(requirementAtIndex -> describe(requirementAtIndex, info))
                                                .collect(joining(format("%n%n"))));
  }

  private static String describe(Entry<Integer, UnsatisfiedRequirement> requirementsAtIndex, AssertionInfo info) {
    int index = requirementsAtIndex.getKey();
    UnsatisfiedRequirement unsatisfiedRequirement = requirementsAtIndex.getValue();
    return unsatisfiedRequirement.describe(index, info);
  }

  private static String describeErrors(List<UnsatisfiedRequirement> elementsNotSatisfyingRequirements, AssertionInfo info) {
    return escapePercent(elementsNotSatisfyingRequirements.stream()
                                                          .map(unsatisfiedRequirement -> unsatisfiedRequirement.describe(info))
                                                          .collect(joining(format("%n%n"))));
  }

  public static UnsatisfiedRequirement unsatisfiedRequirement(Object elementNotSatisfyingRequirements, String errorMessage) {
    return new UnsatisfiedRequirement(elementNotSatisfyingRequirements, errorMessage);
  }

}

    return new ElementsShouldSatisfy("%n" +
                                     "Expecting all elements of:%n" +
                                     "  %s%n" +
                                     "to satisfy given requirements, but these elements did not:%n%n",
                                     actual, elementsNotSatisfyingRestrictions, info);
  
<methods>public transient void <init>(java.lang.String, java.lang.Object[]) ,public java.lang.String create(org.assertj.core.description.Description, org.assertj.core.presentation.Representation) ,public java.lang.String create(org.assertj.core.description.Description) ,public java.lang.String create() ,public boolean equals(java.lang.Object) ,public int hashCode() ,public java.lang.String toString() <variables>protected final non-sealed java.lang.Object[] arguments,protected final non-sealed java.lang.String format,org.assertj.core.error.MessageFormatter formatter