code: @SuppressWarnings("SameParameterValue")
      public synchronized List<Message> renderMenuItems(Message.MenuIdentifier targetMenu, CdjStatus.TrackSourceSlot slot,
                                                        CdjStatus.TrackType trackType, Message availableResponse)
              throws IOException {
          final long count = availableResponse.getMenuResultsCount();
          if (count == Message.NO_MENU_RESULTS_AVAILABLE || count == 0) {
              return Collections.emptyList();
          }
          return renderMenuItems(targetMenu, slot, trackType, 0, (int) count);
      }
docs: Gather up all the responses that are available for a menu request. Will involve multiple requests if
  the number of responses available is larger than our maximum batch size (see {@link #getMenuBatchSize()}.
  
  @param targetMenu the destination for the response to this query
  @param slot the media library of interest for this query
  @param trackType the type of track about which information is being requested
  @param availableResponse the response to the initial menu setup request, reporting how many responses are
  available, as well as the target menu we are working with
  
  @return all the response items, using as many queries as necessary to gather them safely, and omitting all
  the header and footer items
  
  @throws IOException if there is a problem reading the menu items
  @throws IllegalStateException if {@link #tryLockingForMenuOperations(long, TimeUnit)} was not called successfully
  before attempting this call