/**
  * Method that will construct a parser (possibly a sequence) that contains all given sub-parsers.
  * All parsers given are checked to see if they are sequences: and if so, they will be
  * "flattened", that is, contained parsers are directly added in a new sequence instead of adding
  * sequences within sequences. This is done to minimize delegation depth, ideally only having just
  * a single level of delegation.
  */
 public static JsonParserSequence createFlattened(
     boolean checkForExistingToken, JsonParser first, JsonParser second) {
   if (!(first instanceof JsonParserSequence || second instanceof JsonParserSequence)) {
     return new JsonParserSequence(checkForExistingToken, new JsonParser[] {first, second});
   }
   ArrayList<JsonParser> p = new ArrayList<JsonParser>();
   if (first instanceof JsonParserSequence) {
     ((JsonParserSequence) first).addFlattenedActiveParsers(p);
   } else {
     p.add(first);
   }
   if (second instanceof JsonParserSequence) {
     ((JsonParserSequence) second).addFlattenedActiveParsers(p);
   } else {
     p.add(second);
   }
   return new JsonParserSequence(checkForExistingToken, p.toArray(new JsonParser[p.size()]));
 }
 protected void addFlattenedActiveParsers(List<JsonParser> result) {
   for (int i = _nextParser - 1, len = _parsers.length; i < len; ++i) {
     JsonParser p = _parsers[i];
     if (p instanceof JsonParserSequence) {
       ((JsonParserSequence) p).addFlattenedActiveParsers(result);
     } else {
       result.add(p);
     }
   }
 }
 @SuppressWarnings("resource")
 protected void addFlattenedActiveParsers(List<JsonParser> listToAddIn) {
   for (int i = _nextParserIndex - 1, len = _parsers.length; i < len; ++i) {
     JsonParser p = _parsers[i];
     if (p instanceof JsonParserSequence) {
       ((JsonParserSequence) p).addFlattenedActiveParsers(listToAddIn);
     } else {
       listToAddIn.add(p);
     }
   }
 }
 private final Object _deserialize(
     JsonParser paramJsonParser, DeserializationContext paramDeserializationContext)
     throws IOException {
   Object localObject1;
   if (paramJsonParser.canReadTypeId()) {
     localObject1 = paramJsonParser.getTypeId();
     if (localObject1 != null) {
       paramJsonParser =
           _deserializeWithNativeTypeId(
               paramJsonParser, paramDeserializationContext, localObject1);
     }
   }
   do {
     boolean bool;
     Object localObject2;
     do {
       return paramJsonParser;
       bool = paramJsonParser.isExpectedStartArrayToken();
       String str = _locateTypeId(paramJsonParser, paramDeserializationContext);
       localObject2 = _findDeserializer(paramDeserializationContext, str);
       localObject1 = paramJsonParser;
       if (this._typeIdVisible) {
         localObject1 = paramJsonParser;
         if (paramJsonParser.getCurrentToken() == JsonToken.START_OBJECT) {
           localObject1 = new TokenBuffer(null, false);
           ((TokenBuffer) localObject1).writeStartObject();
           ((TokenBuffer) localObject1).writeFieldName(this._typePropertyName);
           ((TokenBuffer) localObject1).writeString(str);
           localObject1 =
               JsonParserSequence.createFlattened(
                   ((TokenBuffer) localObject1).asParser(paramJsonParser), paramJsonParser);
           ((JsonParser) localObject1).nextToken();
         }
       }
       localObject2 =
           ((JsonDeserializer) localObject2)
               .deserialize((JsonParser) localObject1, paramDeserializationContext);
       paramJsonParser = (JsonParser) localObject2;
     } while (!bool);
     paramJsonParser = (JsonParser) localObject2;
   } while (((JsonParser) localObject1).nextToken() == JsonToken.END_ARRAY);
   throw paramDeserializationContext.wrongTokenException(
       (JsonParser) localObject1,
       JsonToken.END_ARRAY,
       "expected closing END_ARRAY after type information and deserialized value");
 }