private static @NotNull <T> Set<T> remove(@NotNull Set<? extends T> original, Set<T> @NotNull ... toRemove) {
    Set<T> result = new HashSet<>(original);
    for (Set<T> set : toRemove) {
      result.removeAll(set);
    }
    return result;
  }
private static @NotNull <T> Set<T> remove(@NotNull Set<? extends T> original, Set<T> @NotNull ... toRemove)