code: public final Iterable<ItemT> search(
        final RequestT request,
        final GenomicsRequestInitializer<? super RequestSubT> initializer,
        final RetryPolicy retryPolicy) {
      final ApiT api = getApi(genomics);
      return FluentIterable
          .from(
              new Iterable<Pair>() {
                @Override public Iterator<Pair> iterator() {
                  try {
                    return new AbstractSequentialIterator<Pair>(
                            new Pair(createSearch(api, request, Optional.<String>absent()), null)) {
                          @Override protected Pair computeNext(Pair pair) {
                            return Optional.fromNullable(pair.request)
                                .transform(
                                    new Function<RequestSubT, Pair>() {
                                      @Override public Pair apply(RequestSubT search) {
                                        try {
                                          initializer.initialize(search);
                                          ResponseT response = retryPolicy.execute(search);
                                          Optional<String> pageToken =
                                              Optional.fromNullable(Strings.emptyToNull(getNextPageToken(response)));
                                          return new Pair(
                                              pageToken.isPresent()
                                                  ? createSearch(api, request, pageToken)
                                                  : null,
                                              response);
                                        } catch (IOException e) {
                                          throw new SearchException(e);
                                        }
                                      }
                                    })
                                .orNull();
                          }
                        };
                  } catch (IOException e) {
                    throw new SearchException(e);
                  }
                }
              })
          .skip(1)
          .transform(
              new Function<Pair, ResponseT>() {
                @Override public ResponseT apply(Pair pair) {
                  return pair.response;
                }
              })
          .transformAndConcat(
              new Function<ResponseT, Iterable<ItemT>>() {
                @Override public Iterable<ItemT> apply(ResponseT response) {
                  return Optional.fromNullable(getResponses(response)).or(Collections.<ItemT>emptyList());
                }
              });
    }
docs: Search for objects. Warning: the returned {@link Iterable} may throw {@link SearchException}
  during iteration; users are encouraged to call
  {@link #search(Object, GenomicsRequestInitializer, Callback, RetryPolicy)} instead.
  
  @param request The search request.
  @param initializer The {@link GenomicsRequestInitializer} to initialize requests with.
  @param retryPolicy A retry policy specifying behavior when a request fails
  (usually due to SocketTimeoutExceptions)
  @return A lazy stream of search results.