docs: public static ImageArchiveManifest readManifest(InputStream inputStream) throws IOException, JsonParseException {
          Map<String, JsonParseException> parseExceptions = new LinkedHashMap<>();
          Map<String, JsonElement> parsedEntries = new LinkedHashMap<>();
  
          try (TarArchiveInputStream tarStream = new TarArchiveInputStream(createUncompressedStream(inputStream))) {
              TarArchiveEntry tarEntry;
              Gson gson = new Gson();
  
              while((tarEntry = tarStream.getNextTarEntry()) != null) {
                  if(tarEntry.isFile() && tarEntry.getName().endsWith(".json")) {
                      try {
                          JsonElement element = gson.fromJson(new InputStreamReader(tarStream, StandardCharsets.UTF_8), JsonElement.class);
                          parsedEntries.put(tarEntry.getName(), element);
                      } catch(JsonParseException exception) {
                          parseExceptions.put(tarEntry.getName(), exception);
                      }
                  }
              }
          }
  
          JsonElement manifestJson = parsedEntries.get(MANIFEST_JSON);
          if(manifestJson == null) {
              JsonParseException parseException = parseExceptions.get(MANIFEST_JSON);
              if(parseException != null) {
                  throw parseException;
              }
  
              return null;
          }
  
          ImageArchiveManifestAdapter manifest = new ImageArchiveManifestAdapter(manifestJson);
  
          for(ImageArchiveManifestEntry entry : manifest.getEntries()) {
              JsonElement entryConfigJson = parsedEntries.get(entry.getConfig());
              if(entryConfigJson != null && entryConfigJson.isJsonObject()) {
                  manifest.putConfig(entry.getConfig(), entryConfigJson.getAsJsonObject());
              }
          }
  
          return manifest;
      }