/* Generated By:JJTree&JavaCC: Do not edit this line. DDLParserTokenManager.java */
/*******************************************************************************
 * Copyright (c) 2011 Oracle. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
 * which accompanies this distribution.
 * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 *     Mike Norman - June 10 2011, created DDL parser package
 ******************************************************************************/
package org.eclipse.persistence.tools.oracleddl.parser;
//javase imports
import java.io.InputStream;
import java.util.List;
//metadata imports
import org.eclipse.persistence.tools.oracleddl.metadata.BlobType;
import org.eclipse.persistence.tools.oracleddl.metadata.CharType;
import org.eclipse.persistence.tools.oracleddl.metadata.ClobType;
import org.eclipse.persistence.tools.oracleddl.metadata.CompositeDatabaseType;
import org.eclipse.persistence.tools.oracleddl.metadata.DatabaseType;
import org.eclipse.persistence.tools.oracleddl.metadata.DecimalType;
import org.eclipse.persistence.tools.oracleddl.metadata.DoubleType;
import org.eclipse.persistence.tools.oracleddl.metadata.FieldType;
import org.eclipse.persistence.tools.oracleddl.metadata.FloatType;
import org.eclipse.persistence.tools.oracleddl.metadata.FunctionType;
import org.eclipse.persistence.tools.oracleddl.metadata.IntervalDayToSecond;
import org.eclipse.persistence.tools.oracleddl.metadata.IntervalYearToMonth;
import org.eclipse.persistence.tools.oracleddl.metadata.LongType;
import org.eclipse.persistence.tools.oracleddl.metadata.LongRawType;
import org.eclipse.persistence.tools.oracleddl.metadata.NCharType;
import org.eclipse.persistence.tools.oracleddl.metadata.NClobType;
import org.eclipse.persistence.tools.oracleddl.metadata.NestedTableType;
import org.eclipse.persistence.tools.oracleddl.metadata.NumericType;
import org.eclipse.persistence.tools.oracleddl.metadata.NVarChar2Type;
import org.eclipse.persistence.tools.oracleddl.metadata.ObjectType;
import org.eclipse.persistence.tools.oracleddl.metadata.PLSQLPackageType;
import org.eclipse.persistence.tools.oracleddl.metadata.PLSQLType;
import org.eclipse.persistence.tools.oracleddl.metadata.ProcedureType;
import org.eclipse.persistence.tools.oracleddl.metadata.RawType;
import org.eclipse.persistence.tools.oracleddl.metadata.RealType;
import org.eclipse.persistence.tools.oracleddl.metadata.TableType;
import org.eclipse.persistence.tools.oracleddl.metadata.URowIdType;
import org.eclipse.persistence.tools.oracleddl.metadata.UnresolvedSizedType;
import org.eclipse.persistence.tools.oracleddl.metadata.UnresolvedType;
import org.eclipse.persistence.tools.oracleddl.metadata.VarCharType;
import org.eclipse.persistence.tools.oracleddl.metadata.VarChar2Type;
import org.eclipse.persistence.tools.oracleddl.metadata.VArrayType;
import org.eclipse.persistence.tools.oracleddl.util.DatabaseTypesRepository;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.BFILE_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.BINARY_INTEGER_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.BINARY_FLOAT_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.BINARY_DOUBLE_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.BOOLEAN_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.DATE_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.INTEGER_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.MLSLABEL_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.NATURAL_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.PLS_INTEGER_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.POSITIVE_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.ROWID_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.SIMPLE_INTEGER_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.SMALLINT_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.TIME_TYPE;
import static org.eclipse.persistence.tools.oracleddl.metadata.ScalarDatabaseTypeEnum.TIMESTAMP_TYPE;

/** Token Manager. */
@SuppressWarnings("all")
public class DDLParserTokenManager implements DDLParserConstants
{

  /** Debug output. */
  public  java.io.PrintStream debugStream = System.out;
  /** Set debug output. */
  public  void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
private final int jjStopStringLiteralDfa_0(int pos, long active0, long active1, long active2, long active3)
{
   switch (pos)
   {
      case 0:
         if ((active3 & 0x800000000L) != 0L)
            return 0;
         if ((active3 & 0x6000000L) != 0L)
            return 71;
         if ((active0 & 0xffffffffbfff0000L) != 0L || (active1 & 0xffffbfffffffffffL) != 0L || (active2 & 0x7fffffdfffffffffL) != 0L || (active3 & 0x2ffffL) != 0L)
         {
            jjmatchedKind = 241;
            return 72;
         }
         if ((active3 & 0x80000000000L) != 0L)
            return 6;
         if ((active3 & 0x840000L) != 0L)
            return 21;
         if ((active1 & 0x400000000000L) != 0L || (active3 & 0x10000L) != 0L)
            return 73;
         if ((active0 & 0xff00L) != 0L)
            return 72;
         return -1;
      case 1:
         if ((active1 & 0x400000000000L) != 0L || (active3 & 0x10000L) != 0L)
            return 73;
         if ((active0 & 0xc001000L) != 0L || (active1 & 0xdc000000001ffc00L) != 0L || (active2 & 0x400000000000000L) != 0L)
            return 72;
         if ((active0 & 0xffffffffb3ffee00L) != 0L || (active1 & 0x23ffbfffffe003ffL) != 0L || (active2 & 0x7bffffdfffffffffL) != 0L || (active3 & 0x2ffffL) != 0L)
         {
            if (jjmatchedPos != 1)
            {
               jjmatchedKind = 241;
               jjmatchedPos = 1;
            }
            return 72;
         }
         return -1;
      case 2:
         if ((active0 & 0xf7fc5fffbbffec00L) != 0L || (active1 & 0xb3fbbb7fff60fbffL) != 0L || (active2 & 0x7b7fe7dfff9dfffcL) != 0L || (active3 & 0x2ffffL) != 0L)
         {
            if (jjmatchedPos != 2)
            {
               jjmatchedKind = 241;
               jjmatchedPos = 2;
            }
            return 72;
         }
         if ((active1 & 0x400000000000L) != 0L || (active3 & 0x10000L) != 0L)
            return 73;
         if ((active0 & 0x803a00000000200L) != 0L || (active1 & 0x40480008f0000L) != 0L || (active2 & 0x80180000620003L) != 0L)
            return 72;
         return -1;
      case 3:
         if ((active0 & 0xf7ff4eff019fec00L) != 0L || (active1 & 0x83e39b7c782efbdeL) != 0L || (active2 & 0x287de7ce7fd1ff7eL) != 0L || (active3 & 0xbffL) != 0L)
         {
            if (jjmatchedPos != 3)
            {
               jjmatchedKind = 241;
               jjmatchedPos = 3;
            }
            return 72;
         }
         if ((active1 & 0x400000000000L) != 0L)
            return 45;
         if ((active1 & 0x200000000000L) != 0L || (active2 & 0x80L) != 0L)
         {
            if (jjmatchedPos != 3)
            {
               jjmatchedKind = 241;
               jjmatchedPos = 3;
            }
            return 14;
         }
         if ((active3 & 0x10000L) != 0L)
            return 73;
         if ((active0 & 0x1100ba600000L) != 0L || (active1 & 0x3018000387400021L) != 0L || (active2 & 0x53021011800c0000L) != 0L || (active3 & 0x2f400L) != 0L)
            return 72;
         return -1;
      case 4:
         if ((active1 & 0x18000000L) != 0L)
            return 14;
         if ((active3 & 0x10000L) != 0L)
            return 45;
         if ((active1 & 0x200000000000L) != 0L || (active2 & 0x80L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 4;
            return 14;
         }
         if ((active0 & 0xf4ff4e5e219ce000L) != 0L || (active1 & 0x83e3831c002e6bc4L) != 0L || (active2 & 0xa5de7863fd07f7cL) != 0L || (active3 & 0x3ddL) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 4;
            return 72;
         }
         if ((active0 & 0x30000a100030c00L) != 0L || (active1 & 0x1018606000901aL) != 0L || (active2 & 0x2020004840018002L) != 0L || (active3 & 0x822L) != 0L)
            return 72;
         return -1;
      case 5:
         if ((active1 & 0x200000000000L) != 0L || (active2 & 0x80L) != 0L || (active3 & 0x1L) != 0L)
         {
            if (jjmatchedPos != 5)
            {
               jjmatchedKind = 241;
               jjmatchedPos = 5;
            }
            return 14;
         }
         if ((active0 & 0xd06f461a219cc000L) != 0L || (active1 & 0x81c28314002e2944L) != 0L || (active2 & 0xa59a70227c07d7cL) != 0L || (active3 & 0x2c4L) != 0L)
         {
            if (jjmatchedPos != 5)
            {
               jjmatchedKind = 241;
               jjmatchedPos = 5;
            }
            return 72;
         }
         if ((active0 & 0x2490084400002000L) != 0L || (active1 & 0x221000800004280L) != 0L || (active2 & 0x4408418100200L) != 0L || (active3 & 0x118L) != 0L)
            return 72;
         return -1;
      case 6:
         if ((active0 & 0xc06246182000c000L) != 0L || (active1 & 0x81808114000c2944L) != 0L || (active2 & 0xa49270212405574L) != 0L)
         {
            if (jjmatchedPos != 6)
            {
               jjmatchedKind = 241;
               jjmatchedPos = 6;
            }
            return 72;
         }
         if ((active0 & 0x10000000001c0000L) != 0L || (active1 & 0x200000000000L) != 0L || (active2 & 0x800004800080L) != 0L || (active3 & 0x1L) != 0L)
         {
            if (jjmatchedPos != 6)
            {
               jjmatchedKind = 241;
               jjmatchedPos = 6;
            }
            return 14;
         }
         if ((active0 & 0xd000201800000L) != 0L || (active1 & 0x42020000220000L) != 0L || (active2 & 0x10000021002808L) != 0L || (active3 & 0x2c4L) != 0L)
            return 72;
         return -1;
      case 7:
         if ((active3 & 0x40L) != 0L)
            return 14;
         if ((active0 & 0x10000600001c0000L) != 0L || (active1 & 0x200000000000L) != 0L || (active2 & 0x800004800080L) != 0L || (active3 & 0x1L) != 0L)
         {
            if (jjmatchedPos != 7)
            {
               jjmatchedKind = 241;
               jjmatchedPos = 7;
            }
            return 14;
         }
         if ((active0 & 0x800000000L) != 0L || (active1 & 0x180011400082144L) != 0L || (active2 & 0x1200200001104L) != 0L)
            return 72;
         if ((active0 & 0xc06240102000c000L) != 0L || (active1 & 0x8000800000040800L) != 0L || (active2 & 0xa48070012404470L) != 0L)
         {
            if (jjmatchedPos != 7)
            {
               jjmatchedKind = 241;
               jjmatchedPos = 7;
            }
            return 72;
         }
         return -1;
      case 8:
         if ((active1 & 0x80200000000000L) != 0L)
            return 14;
         if ((active0 & 0x20401000008000L) != 0L || (active1 & 0x8000800000000000L) != 0L || (active2 & 0x808050000000000L) != 0L)
         {
            if (jjmatchedPos != 8)
            {
               jjmatchedKind = 241;
               jjmatchedPos = 8;
            }
            return 72;
         }
         if ((active0 & 0xc042000020004000L) != 0L || (active1 & 0x40800L) != 0L || (active2 & 0x240000010404460L) != 0L)
            return 72;
         if ((active0 & 0x10000600001c0000L) != 0L || (active2 & 0x820006800090L) != 0L || (active3 & 0x1L) != 0L)
         {
            if (jjmatchedPos != 8)
            {
               jjmatchedKind = 241;
               jjmatchedPos = 8;
            }
            return 14;
         }
         return -1;
      case 9:
         if ((active0 & 0x20000000000L) != 0L || (active3 & 0x1L) != 0L)
            return 14;
         if ((active0 & 0x20000000008000L) != 0L || (active1 & 0x8000000000000000L) != 0L || (active2 & 0x808040000000000L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 9;
            return 72;
         }
         if ((active0 & 0x90000400001c0000L) != 0L || (active2 & 0x820006800090L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 9;
            return 14;
         }
         if ((active0 & 0x401000000000L) != 0L || (active1 & 0x800000000000L) != 0L || (active2 & 0x10000000000L) != 0L)
            return 72;
         return -1;
      case 10:
         if ((active0 & 0x20000000000000L) != 0L || (active1 & 0x8000000000000000L) != 0L || (active2 & 0x8040000000000L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 10;
            return 72;
         }
         if ((active0 & 0x1000000000000000L) != 0L || (active2 & 0x800080L) != 0L)
            return 14;
         if ((active0 & 0x80000400001c8000L) != 0L || (active2 & 0x820006000010L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 10;
            return 14;
         }
         if ((active2 & 0x800000000000000L) != 0L)
            return 72;
         return -1;
      case 11:
         if ((active0 & 0x40000080000L) != 0L || (active2 & 0x4000000L) != 0L)
            return 14;
         if ((active1 & 0x8000000000000000L) != 0L)
            return 72;
         if ((active0 & 0x20000000000000L) != 0L || (active2 & 0x8040000000000L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 11;
            return 72;
         }
         if ((active0 & 0x8000000000148000L) != 0L || (active2 & 0x820002000010L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 11;
            return 14;
         }
         return -1;
      case 12:
         if ((active0 & 0x8000000000108000L) != 0L || (active2 & 0x820002000010L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 12;
            return 14;
         }
         if ((active0 & 0x40000L) != 0L)
            return 14;
         if ((active2 & 0x40000000000L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 12;
            return 72;
         }
         if ((active0 & 0x20000000000000L) != 0L || (active2 & 0x8000000000000L) != 0L)
            return 72;
         return -1;
      case 13:
         if ((active2 & 0x40000000000L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 13;
            return 72;
         }
         if ((active0 & 0x8000000000100000L) != 0L || (active2 & 0x800000000000L) != 0L)
            return 14;
         if ((active0 & 0x8000L) != 0L || (active2 & 0x20002000010L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 13;
            return 14;
         }
         return -1;
      case 14:
         if ((active2 & 0x10L) != 0L)
            return 14;
         if ((active2 & 0x40000000000L) != 0L)
            return 72;
         if ((active0 & 0x8000L) != 0L || (active2 & 0x20002000000L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 14;
            return 14;
         }
         return -1;
      case 15:
         if ((active0 & 0x8000L) != 0L || (active2 & 0x20002000000L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 15;
            return 14;
         }
         return -1;
      case 16:
         if ((active2 & 0x20000000000L) != 0L)
            return 14;
         if ((active0 & 0x8000L) != 0L || (active2 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 16;
            return 14;
         }
         return -1;
      case 17:
         if ((active0 & 0x8000L) != 0L || (active2 & 0x2000000L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 17;
            return 14;
         }
         return -1;
      case 18:
         if ((active2 & 0x2000000L) != 0L)
            return 14;
         if ((active0 & 0x8000L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 18;
            return 14;
         }
         return -1;
      case 19:
         if ((active0 & 0x8000L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 19;
            return 14;
         }
         return -1;
      case 20:
         if ((active0 & 0x8000L) != 0L)
         {
            jjmatchedKind = 241;
            jjmatchedPos = 20;
            return 14;
         }
         return -1;
      default :
         return -1;
   }
}
private final int jjStartNfa_0(int pos, long active0, long active1, long active2, long active3)
{
   return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0, active1, active2, active3), pos + 1);
}
private int jjStopAtPos(int pos, int kind)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   return pos + 1;
}
private int jjMoveStringLiteralDfa0_0()
{
   switch(curChar)
   {
      case 33:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x2000000000L);
      case 35:
         return jjStopAtPos(0, 232);
      case 36:
         return jjStopAtPos(0, 219);
      case 37:
         jjmatchedKind = 220;
         return jjMoveStringLiteralDfa1_0(0x40000000L, 0x0L, 0x8000002000000000L, 0x0L);
      case 39:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x400000000000L, 0x0L, 0x10000L);
      case 40:
         jjmatchedKind = 230;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x100000000L);
      case 41:
         return jjStopAtPos(0, 213);
      case 42:
         return jjStopAtPos(0, 211);
      case 43:
         return jjStopAtPos(0, 231);
      case 44:
         return jjStopAtPos(0, 216);
      case 45:
         return jjStartNfaWithStates_0(0, 227, 0);
      case 46:
         jjmatchedKind = 217;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x4000000L);
      case 47:
         return jjStartNfaWithStates_0(0, 235, 6);
      case 58:
         jjmatchedKind = 215;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x40000L);
      case 59:
         return jjStopAtPos(0, 234);
      case 60:
         jjmatchedKind = 225;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x1400000000L);
      case 61:
         return jjStopAtPos(0, 221);
      case 62:
         jjmatchedKind = 222;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x80000000L);
      case 63:
         return jjStopAtPos(0, 233);
      case 64:
         return jjStopAtPos(0, 212);
      case 65:
         jjmatchedKind = 8;
         return jjMoveStringLiteralDfa1_0(0xfe00L, 0x0L, 0x0L, 0x0L);
      case 66:
         return jjMoveStringLiteralDfa1_0(0xfff0000L, 0x0L, 0x0L, 0x0L);
      case 67:
         return jjMoveStringLiteralDfa1_0(0xfffb0000000L, 0x0L, 0x0L, 0x0L);
      case 68:
         return jjMoveStringLiteralDfa1_0(0xfff00000000000L, 0x0L, 0x0L, 0x0L);
      case 69:
         return jjMoveStringLiteralDfa1_0(0xff00000000000000L, 0x1L, 0x0L, 0x0L);
      case 70:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x7eL, 0x0L, 0x0L);
      case 71:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x180L, 0x0L, 0x0L);
      case 73:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x3ffe00L, 0x0L, 0x0L);
      case 74:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x400000L, 0x0L, 0x0L);
      case 75:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x1800000L, 0x0L, 0x0L);
      case 76:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x1fe000000L, 0x0L, 0x0L);
      case 77:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x7e00000000L, 0x0L, 0x0L);
      case 78:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x1ffbf8000000000L, 0x0L, 0x0L);
      case 79:
         return jjMoveStringLiteralDfa1_0(0x0L, 0xfe00000000000000L, 0x7L, 0x0L);
      case 80:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x7ff8L, 0x0L);
      case 82:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x5fffff8000L, 0x0L);
      case 83:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x1fff8000000000L, 0x0L);
      case 84:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x7fe0000000000000L, 0x0L);
      case 85:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x3fL);
      case 86:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x3c0L);
      case 87:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x7c00L);
      case 89:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x8000L);
      case 90:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x20000L);
      case 124:
         return jjMoveStringLiteralDfa1_0(0x0L, 0x0L, 0x0L, 0x400000L);
      case 126:
         return jjStopAtPos(0, 236);
      default :
         return jjMoveNfa_0(5, 0);
   }
}
private int jjMoveStringLiteralDfa1_0(long active0, long active1, long active2, long active3)
{
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(0, active0, active1, active2, active3);
      return 1;
   }
   switch(curChar)
   {
      case 43:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x100000000L);
      case 46:
         if ((active3 & 0x4000000L) != 0L)
            return jjStopAtPos(1, 218);
         break;
      case 61:
         if ((active3 & 0x40000L) != 0L)
            return jjStopAtPos(1, 210);
         else if ((active3 & 0x80000000L) != 0L)
            return jjStopAtPos(1, 223);
         else if ((active3 & 0x400000000L) != 0L)
            return jjStopAtPos(1, 226);
         else if ((active3 & 0x2000000000L) != 0L)
            return jjStopAtPos(1, 229);
         break;
      case 62:
         if ((active3 & 0x1000000000L) != 0L)
            return jjStopAtPos(1, 228);
         break;
      case 65:
         return jjMoveStringLiteralDfa2_0(active0, 0x300000000000L, active1, 0x78202000002L, active2, 0x20000000038038L, active3, 0x3c0L);
      case 66:
         return jjMoveStringLiteralDfa2_0(active0, 0x400000000000L, active1, 0x200000000000000L, active2, 0L, active3, 0L);
      case 67:
         return jjMoveStringLiteralDfa2_0(active0, 0x40000000L, active1, 0x180000000000L, active2, 0L, active3, 0L);
      case 68:
         return jjMoveStringLiteralDfa2_0(active0, 0x200L, active1, 0L, active2, 0L, active3, 0L);
      case 69:
         return jjMoveStringLiteralDfa2_0(active0, 0x3f800000010000L, active1, 0x200c05800000L, active2, 0x401f803ffc0000L, active3, 0x8000L);
      case 70:
         if ((active1 & 0x400000000000000L) != 0L)
            return jjStartNfaWithStates_0(1, 122, 72);
         return jjMoveStringLiteralDfa2_0(active0, 0x20000L, active1, 0L, active2, 0L, active3, 0L);
      case 71:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x200L, active2, 0L, active3, 0L);
      case 72:
         return jjMoveStringLiteralDfa2_0(active0, 0x30000000L, active1, 0L, active2, 0x80000000000000L, active3, 0x800L);
      case 73:
         return jjMoveStringLiteralDfa2_0(active0, 0x400000001c0000L, active1, 0x3800000cL, active2, 0x300e00040000040L, active3, 0x400L);
      case 76:
         return jjMoveStringLiteralDfa2_0(active0, 0x100000180200400L, active1, 0x1000000090L, active2, 0x80L, active3, 0L);
      case 77:
         return jjMoveStringLiteralDfa2_0(active0, 0x200000000000000L, active1, 0L, active2, 0x1000000000000L, active3, 0L);
      case 78:
         if ((active1 & 0x400L) != 0L)
         {
            jjmatchedKind = 74;
            jjmatchedPos = 1;
         }
         else if ((active1 & 0x800000000000000L) != 0L)
         {
            jjmatchedKind = 123;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0xc00000000000000L, active1, 0x10004000000ff800L, active2, 0x180000000L, active3, 0x3003L);
      case 79:
         if ((active2 & 0x400000000000000L) != 0L)
            return jjStartNfaWithStates_0(1, 186, 72);
         return jjMoveStringLiteralDfa2_0(active0, 0x80003e00c00000L, active1, 0x78061c0400000L, active2, 0x2001e00000100L, active3, 0x24000L);
      case 80:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x2000000000000000L, active2, 0L, active3, 0xcL);
      case 81:
         return jjMoveStringLiteralDfa2_0(active0, 0x1000000000000000L, active1, 0L, active2, 0L, active3, 0L);
      case 82:
         if ((active1 & 0x4000000000000000L) != 0L)
         {
            jjmatchedKind = 126;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0xc000000800L, active1, 0x8000000000000100L, active2, 0x3800002000007e00L, active3, 0x10L);
      case 83:
         if ((active0 & 0x1000L) != 0L)
            return jjStartNfaWithStates_0(1, 12, 72);
         else if ((active1 & 0x100000L) != 0L)
            return jjStartNfaWithStates_0(1, 84, 72);
         return jjMoveStringLiteralDfa2_0(active0, 0x2000000000000000L, active1, 0L, active2, 0L, active3, 0x20L);
      case 84:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x200000L, active2, 0x8004000000000000L, active3, 0L);
      case 85:
         return jjMoveStringLiteralDfa2_0(active0, 0xf000300e000L, active1, 0x78000000000060L, active2, 0x18004000000003L, active3, 0L);
      case 86:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x180000000000000L, active2, 0x4L, active3, 0L);
      case 88:
         return jjMoveStringLiteralDfa2_0(active0, 0xc000000000000000L, active1, 0x1L, active2, 0L, active3, 0L);
      case 89:
         if ((active0 & 0x4000000L) != 0L)
         {
            jjmatchedKind = 26;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x8000000L, active1, 0L, active2, 0x4000000000000000L, active3, 0x10000L);
      case 124:
         if ((active3 & 0x400000L) != 0L)
            return jjStopAtPos(1, 214);
         break;
      default :
         break;
   }
   return jjStartNfa_0(0, active0, active1, active2, active3);
}
private int jjMoveStringLiteralDfa2_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjStartNfa_0(0, old0, old1, old2, old3);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(1, active0, active1, active2, active3);
      return 2;
   }
   switch(curChar)
   {
      case 41:
         if ((active3 & 0x100000000L) != 0L)
            return jjStopAtPos(2, 224);
         break;
      case 65:
         return jjMoveStringLiteralDfa3_0(active0, 0x400000030000000L, active1, 0x180000400000000L, active2, 0x8010000000c0200L, active3, 0x8000L);
      case 66:
         return jjMoveStringLiteralDfa3_0(active0, 0x10000000000L, active1, 0L, active2, 0x38200000000000L, active3, 0L);
      case 67:
         if ((active0 & 0x800000000000L) != 0L)
         {
            jjmatchedKind = 47;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0xe003000000000000L, active1, 0x3800040000800L, active2, 0x8000100008L, active3, 0L);
      case 68:
         if ((active0 & 0x200L) != 0L)
            return jjStartNfaWithStates_0(2, 9, 72);
         else if ((active0 & 0x800000000000000L) != 0L)
            return jjStartNfaWithStates_0(2, 59, 72);
         return jjMoveStringLiteralDfa3_0(active0, 0x400000L, active1, 0x2000001000L, active2, 0x80000000L, active3, 0x1005L);
      case 69:
         if ((active2 & 0x80000000000000L) != 0L)
            return jjStartNfaWithStates_0(2, 183, 72);
         return jjMoveStringLiteralDfa3_0(active0, 0x4000000000L, active1, 0x2000000001200000L, active2, 0x1c04L, active3, 0x10000L);
      case 70:
         if ((active2 & 0x200000L) != 0L)
         {
            jjmatchedKind = 149;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0xc000000000000L, active1, 0x4002000L, active2, 0x400000L, active3, 0L);
      case 71:
         return jjMoveStringLiteralDfa3_0(active0, 0x10000L, active1, 0x8000000000000000L, active2, 0x40800000L, active3, 0L);
      case 72:
         return jjMoveStringLiteralDfa3_0(active0, 0x40000000L, active1, 0x80000000000L, active2, 0L, active3, 0L);
      case 73:
         return jjMoveStringLiteralDfa3_0(active0, 0x1020000L, active1, 0x200400001L, active2, 0xa000L, active3, 0x820L);
      case 74:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x200000000000000L, active2, 0L, active3, 0L);
      case 75:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x38000000L, active2, 0L, active3, 0L);
      case 76:
         return jjMoveStringLiteralDfa3_0(active0, 0x10000202000000L, active1, 0x1018100000004022L, active2, 0x4600000000L, active3, 0L);
      case 77:
         return jjMoveStringLiteralDfa3_0(active0, 0x40000400000000L, active1, 0x60000800000000L, active2, 0x342800000000000L, active3, 0L);
      case 78:
         if ((active1 & 0x8000000000L) != 0L)
            return jjStartNfaWithStates_0(2, 103, 72);
         return jjMoveStringLiteralDfa3_0(active0, 0x18001c0000L, active1, 0x4080008240L, active2, 0x400000010000L, active3, 0x20000L);
      case 79:
         return jjMoveStringLiteralDfa3_0(active0, 0x8180a00000L, active1, 0x400100000190L, active2, 0x2000004000L, active3, 0x10L);
      case 80:
         return jjMoveStringLiteralDfa3_0(active0, 0x200000000000000L, active1, 0x4L, active2, 0x4000000101000040L, active3, 0x2000L);
      case 81:
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0L, active2, 0x10000000000L, active3, 0L);
      case 82:
         return jjMoveStringLiteralDfa3_0(active0, 0xe0000000800L, active1, 0x8L, active2, 0x4020000000030L, active3, 0x43c0L);
      case 83:
         return jjMoveStringLiteralDfa3_0(active0, 0x100000000000000L, active1, 0x1002000000L, active2, 0x40006000180L, active3, 0x8L);
      case 84:
         if ((active1 & 0x10000L) != 0L)
         {
            jjmatchedKind = 80;
            jjmatchedPos = 2;
         }
         else if ((active1 & 0x4000000000000L) != 0L)
            return jjStartNfaWithStates_0(2, 114, 72);
         else if ((active2 & 0x1L) != 0L)
         {
            jjmatchedKind = 128;
            jjmatchedPos = 2;
         }
         else if ((active2 & 0x80000000000L) != 0L)
         {
            jjmatchedKind = 171;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0x2050000800e400L, active1, 0x300000e0000L, active2, 0x100018000002L, active3, 0x402L);
      case 85:
         return jjMoveStringLiteralDfa3_0(active0, 0x1080002000000000L, active1, 0L, active2, 0x3000000000000000L, active3, 0L);
      case 86:
         if ((active1 & 0x40000000000L) != 0L)
            return jjStartNfaWithStates_0(2, 106, 72);
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0L, active2, 0x20000000L, active3, 0L);
      case 87:
         if ((active2 & 0x20000L) != 0L)
            return jjStartNfaWithStates_0(2, 145, 72);
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0x200000000000L, active2, 0x1800000000L, active3, 0L);
      case 89:
         if ((active0 & 0x200000000000L) != 0L)
            return jjStartNfaWithStates_0(2, 45, 72);
         else if ((active1 & 0x800000L) != 0L)
            return jjStartNfaWithStates_0(2, 87, 72);
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0L, active2, 0x8000000000000000L, active3, 0L);
      default :
         break;
   }
   return jjStartNfa_0(1, active0, active1, active2, active3);
}
private int jjMoveStringLiteralDfa3_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjStartNfa_0(1, old0, old1, old2, old3);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(2, active0, active1, active2, active3);
      return 3;
   }
   switch(curChar)
   {
      case 39:
         if ((active1 & 0x400000000000L) != 0L)
            return jjStartNfaWithStates_0(3, 110, 45);
         break;
      case 65:
         return jjMoveStringLiteralDfa4_0(active0, 0x30040040401c0800L, active1, 0x8000080040000010L, active2, 0x10L, active3, 0x4L);
      case 66:
         if ((active0 & 0x200000L) != 0L)
            return jjStartNfaWithStates_0(3, 21, 72);
         else if ((active0 & 0x80000000L) != 0L)
            return jjStartNfaWithStates_0(3, 31, 72);
         return jjMoveStringLiteralDfa4_0(active0, 0x480000000000000L, active1, 0x20000800000080L, active2, 0L, active3, 0L);
      case 67:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x40L, active2, 0x4400L, active3, 0xc0L);
      case 68:
         if ((active2 & 0x40000L) != 0L)
            return jjStartNfaWithStates_0(3, 146, 72);
         break;
      case 69:
         if ((active0 & 0x8000000L) != 0L)
            return jjStartNfaWithStates_0(3, 27, 72);
         else if ((active0 & 0x10000000000L) != 0L)
            return jjStartNfaWithStates_0(3, 40, 72);
         else if ((active0 & 0x100000000000L) != 0L)
            return jjStartNfaWithStates_0(3, 44, 72);
         else if ((active2 & 0x2000000000000L) != 0L)
            return jjStartNfaWithStates_0(3, 177, 72);
         else if ((active2 & 0x100000000000000L) != 0L)
         {
            jjmatchedKind = 184;
            jjmatchedPos = 3;
         }
         else if ((active2 & 0x1000000000000000L) != 0L)
            return jjStartNfaWithStates_0(3, 188, 72);
         else if ((active2 & 0x4000000000000000L) != 0L)
            return jjStartNfaWithStates_0(3, 190, 72);
         else if ((active3 & 0x20000L) != 0L)
            return jjStartNfaWithStates_0(3, 209, 72);
         return jjMoveStringLiteralDfa4_0(active0, 0xc070000000000400L, active1, 0x2400020380e9000L, active2, 0x200004020c00042L, active3, 0x9L);
      case 71:
         if ((active1 & 0x80000000L) != 0L)
            return jjStartNfaWithStates_0(3, 95, 72);
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x400000010200L, active3, 0L);
      case 72:
         if ((active3 & 0x400L) != 0L)
            return jjStartNfaWithStates_0(3, 202, 72);
         return jjMoveStringLiteralDfa4_0(active0, 0x2000L, active1, 0L, active2, 0x40000000L, active3, 0L);
      case 73:
         return jjMoveStringLiteralDfa4_0(active0, 0x109400000010000L, active1, 0x10000006000L, active2, 0x4020800000100L, active3, 0x2L);
      case 75:
         if ((active0 & 0x2000000L) != 0L)
            return jjStartNfaWithStates_0(3, 25, 72);
         else if ((active3 & 0x4000L) != 0L)
            return jjStartNfaWithStates_0(3, 206, 72);
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x8L, active3, 0L);
      case 76:
         if ((active1 & 0x20L) != 0L)
            return jjStartNfaWithStates_0(3, 69, 72);
         else if ((active1 & 0x8000000000000L) != 0L)
         {
            jjmatchedKind = 115;
            jjmatchedPos = 3;
         }
         else if ((active2 & 0x80000L) != 0L)
            return jjStartNfaWithStates_0(3, 147, 72);
         return jjMoveStringLiteralDfa4_0(active0, 0x201820000L, active1, 0x10001000000000L, active2, 0x21200601000000L, active3, 0x800L);
      case 77:
         return jjMoveStringLiteralDfa4_0(active0, 0x400000000L, active1, 0L, active2, 0x8000000002000L, active3, 0L);
      case 78:
         if ((active1 & 0x400000L) != 0L)
            return jjStartNfaWithStates_0(3, 86, 72);
         else if ((active1 & 0x200000000L) != 0L)
            return jjStartNfaWithStates_0(3, 97, 72);
         else if ((active1 & 0x2000000000000000L) != 0L)
            return jjStartNfaWithStates_0(3, 125, 72);
         return jjMoveStringLiteralDfa4_0(active0, 0x2000000000L, active1, 0L, active2, 0x800000000000000L, active3, 0x20L);
      case 79:
         return jjMoveStringLiteralDfa4_0(active0, 0xc000L, active1, 0x1900000000200L, active2, 0x8000100000L, active3, 0L);
      case 80:
         if ((active1 & 0x1000000L) != 0L)
            return jjStartNfaWithStates_0(3, 88, 72);
         else if ((active1 & 0x100000000L) != 0L)
            return jjStartNfaWithStates_0(3, 96, 72);
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x8040800000000000L, active3, 0L);
      case 82:
         if ((active0 & 0x10000000L) != 0L)
         {
            jjmatchedKind = 28;
            jjmatchedPos = 3;
         }
         else if ((active3 & 0x8000L) != 0L)
            return jjStartNfaWithStates_0(3, 207, 72);
         return jjMoveStringLiteralDfa4_0(active0, 0x2060020000000L, active1, 0x180000000200800L, active2, 0x4L, active3, 0x100L);
      case 83:
         if ((active2 & 0x80000000L) != 0L)
            return jjStartNfaWithStates_0(3, 159, 72);
         else if ((active2 & 0x100000000L) != 0L)
            return jjStartNfaWithStates_0(3, 160, 72);
         else if ((active2 & 0x1000000000L) != 0L)
            return jjStartNfaWithStates_0(3, 164, 72);
         else if ((active2 & 0x100000000000L) != 0L)
            return jjStartNfaWithStates_0(3, 172, 72);
         else if ((active3 & 0x1000L) != 0L)
            return jjStartNfaWithStates_0(3, 204, 72);
         else if ((active3 & 0x2000L) != 0L)
            return jjStartNfaWithStates_0(3, 205, 72);
         return jjMoveStringLiteralDfa4_0(active0, 0x89900000000L, active1, 0x40000000eL, active2, 0x2000040000009800L, active3, 0x10000L);
      case 84:
         if ((active1 & 0x1L) != 0L)
            return jjStartNfaWithStates_0(3, 64, 72);
         else if ((active1 & 0x2000000L) != 0L)
            return jjStartNfaWithStates_0(3, 89, 72);
         else if ((active1 & 0x4000000L) != 0L)
            return jjStartNfaWithStates_0(3, 90, 72);
         return jjMoveStringLiteralDfa4_0(active0, 0x200000000000000L, active1, 0x4000000000L, active2, 0x10000002000020L, active3, 0L);
      case 85:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x20000000100L, active2, 0x1001c000000L, active3, 0L);
      case 87:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0L, active2, 0x2000000000L, active3, 0x10L);
      case 89:
         if ((active0 & 0x400000L) != 0L)
            return jjStartNfaWithStates_0(3, 22, 72);
         else if ((active1 & 0x1000000000000000L) != 0L)
            return jjStartNfaWithStates_0(3, 124, 72);
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x2000000000000L, active2, 0L, active3, 0x200L);
      case 95:
         return jjMoveStringLiteralDfa4_0(active0, 0L, active1, 0x200000000000L, active2, 0x80L, active3, 0L);
      default :
         break;
   }
   return jjStartNfa_0(2, active0, active1, active2, active3);
}
private int jjMoveStringLiteralDfa4_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjStartNfa_0(2, old0, old1, old2, old3);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(3, active0, active1, active2, active3);
      return 4;
   }
   switch(curChar)
   {
      case 39:
         if ((active3 & 0x10000L) != 0L)
            return jjStartNfaWithStates_0(4, 208, 45);
         break;
      case 50:
         if ((active1 & 0x8000000L) != 0L)
            return jjStartNfaWithStates_0(4, 91, 14);
         break;
      case 52:
         if ((active1 & 0x10000000L) != 0L)
            return jjStartNfaWithStates_0(4, 92, 14);
         break;
      case 65:
         return jjMoveStringLiteralDfa5_0(active0, 0x20000000L, active1, 0x1000200080L, active2, 0x20001002008L, active3, 0x100L);
      case 66:
         if ((active1 & 0x100000000000L) != 0L)
            return jjStartNfaWithStates_0(4, 108, 72);
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x200000000L, active3, 0L);
      case 67:
         if ((active1 & 0x20000000L) != 0L)
            return jjStartNfaWithStates_0(4, 93, 72);
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x382000000000000L, active2, 0L, active3, 0L);
      case 68:
         if ((active2 & 0x800000000L) != 0L)
            return jjStartNfaWithStates_0(4, 163, 72);
         break;
      case 69:
         if ((active0 & 0x20000L) != 0L)
            return jjStartNfaWithStates_0(4, 17, 72);
         else if ((active0 & 0x100000000L) != 0L)
            return jjStartNfaWithStates_0(4, 32, 72);
         else if ((active1 & 0x2L) != 0L)
            return jjStartNfaWithStates_0(4, 65, 72);
         else if ((active2 & 0x8000L) != 0L)
            return jjStartNfaWithStates_0(4, 143, 72);
         else if ((active2 & 0x10000L) != 0L)
            return jjStartNfaWithStates_0(4, 144, 72);
         else if ((active2 & 0x20000000000000L) != 0L)
            return jjStartNfaWithStates_0(4, 181, 72);
         else if ((active2 & 0x8000000000000000L) != 0L)
            return jjStopAtPos(4, 191);
         else if ((active3 & 0x800L) != 0L)
            return jjStartNfaWithStates_0(4, 203, 72);
         return jjMoveStringLiteralDfa5_0(active0, 0x2060200800000L, active1, 0x20000800000800L, active2, 0x10000005800L, active3, 0L);
      case 70:
         if ((active0 & 0x100000000000000L) != 0L)
            return jjStartNfaWithStates_0(4, 56, 72);
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x4L, active2, 0x4L, active3, 0L);
      case 71:
         if ((active3 & 0x20L) != 0L)
            return jjStartNfaWithStates_0(4, 197, 72);
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0x20000L, active2, 0L, active3, 0L);
      case 72:
         if ((active1 & 0x4000000000L) != 0L)
            return jjStartNfaWithStates_0(4, 102, 72);
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0L, active3, 0xc0L);
      case 73:
         return jjMoveStringLiteralDfa5_0(active0, 0x400002000L, active1, 0L, active2, 0x2400000004a0L, active3, 0x210L);
      case 76:
         if ((active1 & 0x40000000L) != 0L)
            return jjStartNfaWithStates_0(4, 94, 72);
         else if ((active1 & 0x2000000000L) != 0L)
            return jjStartNfaWithStates_0(4, 101, 72);
         else if ((active3 & 0x2L) != 0L)
            return jjStartNfaWithStates_0(4, 193, 72);
         return jjMoveStringLiteralDfa5_0(active0, 0x1480000000000000L, active1, 0L, active2, 0x1c00004000050L, active3, 0L);
      case 77:
         return jjMoveStringLiteralDfa5_0(active0, 0x1400000004000L, active1, 0x800000000000L, active2, 0x200L, active3, 0L);
      case 78:
         if ((active0 & 0x10000L) != 0L)
            return jjStartNfaWithStates_0(4, 16, 72);
         return jjMoveStringLiteralDfa5_0(active0, 0x48000000008000L, active1, 0x8000200000006000L, active2, 0x4008000000000L, active3, 0L);
      case 79:
         return jjMoveStringLiteralDfa5_0(active0, 0x80000000000L, active1, 0x10000000000L, active2, 0x40000000000000L, active3, 0L);
      case 80:
         return jjMoveStringLiteralDfa5_0(active0, 0xe000000000000000L, active1, 0x1000000000100L, active2, 0L, active3, 0L);
      case 82:
         if ((active0 & 0x400L) != 0L)
            return jjStartNfaWithStates_0(4, 10, 72);
         else if ((active1 & 0x8000L) != 0L)
            return jjStartNfaWithStates_0(4, 79, 72);
         else if ((active1 & 0x80000000000L) != 0L)
            return jjStartNfaWithStates_0(4, 107, 72);
         else if ((active2 & 0x2L) != 0L)
            return jjStartNfaWithStates_0(4, 129, 72);
         return jjMoveStringLiteralDfa5_0(active0, 0x200000401c0000L, active1, 0x400200000c0200L, active2, 0x3a500000L, active3, 0x9L);
      case 83:
         if ((active0 & 0x8000000000L) != 0L)
            return jjStartNfaWithStates_0(4, 39, 72);
         else if ((active1 & 0x10000000000000L) != 0L)
            return jjStartNfaWithStates_0(4, 116, 72);
         else if ((active2 & 0x4000000000L) != 0L)
            return jjStartNfaWithStates_0(4, 166, 72);
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0xa00000000000000L, active3, 0L);
      case 84:
         if ((active0 & 0x2000000000L) != 0L)
            return jjStartNfaWithStates_0(4, 37, 72);
         else if ((active1 & 0x8L) != 0L)
            return jjStartNfaWithStates_0(4, 67, 72);
         else if ((active1 & 0x10L) != 0L)
            return jjStartNfaWithStates_0(4, 68, 72);
         else if ((active2 & 0x40000000L) != 0L)
            return jjStartNfaWithStates_0(4, 158, 72);
         else if ((active2 & 0x2000000000000000L) != 0L)
            return jjStartNfaWithStates_0(4, 189, 72);
         return jjMoveStringLiteralDfa5_0(active0, 0x10005801000000L, active1, 0x40L, active2, 0x2000000100L, active3, 0x4L);
      case 85:
         return jjMoveStringLiteralDfa5_0(active0, 0x4000000000000L, active1, 0x400000000L, active2, 0x8000400000000L, active3, 0L);
      case 88:
         if ((active1 & 0x1000L) != 0L)
            return jjStartNfaWithStates_0(4, 76, 72);
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x800000L, active3, 0L);
      case 89:
         if ((active0 & 0x800L) != 0L)
            return jjStartNfaWithStates_0(4, 11, 72);
         else if ((active0 & 0x200000000000000L) != 0L)
            return jjStartNfaWithStates_0(4, 57, 72);
         return jjMoveStringLiteralDfa5_0(active0, 0L, active1, 0L, active2, 0x10000000000000L, active3, 0L);
      default :
         break;
   }
   return jjStartNfa_0(3, active0, active1, active2, active3);
}
private int jjMoveStringLiteralDfa5_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjStartNfa_0(3, old0, old1, old2, old3);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(4, active0, active1, active2, active3);
      return 5;
   }
   switch(curChar)
   {
      case 65:
         if ((active2 & 0x200L) != 0L)
            return jjStartNfaWithStates_0(5, 137, 72);
         return jjMoveStringLiteralDfa6_0(active0, 0x1000800804000L, active1, 0x220000000000L, active2, 0x800000200000000L, active3, 0xc0L);
      case 66:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x1000000000L, active2, 0L, active3, 0L);
      case 67:
         return jjMoveStringLiteralDfa6_0(active0, 0x220000000L, active1, 0L, active2, 0x1000000L, active3, 0L);
      case 68:
         if ((active0 & 0x2000L) != 0L)
            return jjStartNfaWithStates_0(5, 13, 72);
         else if ((active2 & 0x100000L) != 0L)
            return jjStartNfaWithStates_0(5, 148, 72);
         else if ((active2 & 0x8000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 167, 72);
         else if ((active3 & 0x10L) != 0L)
            return jjStartNfaWithStates_0(5, 196, 72);
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x4000L, active3, 0L);
      case 69:
         if ((active0 & 0x4000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 38, 72);
         else if ((active0 & 0x10000000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 52, 72);
         else if ((active0 & 0x80000000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 55, 72);
         else if ((active0 & 0x400000000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 58, 72);
         else if ((active0 & 0x2000000000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 61, 72);
         else if ((active1 & 0x200L) != 0L)
            return jjStartNfaWithStates_0(5, 73, 72);
         else if ((active1 & 0x4000L) != 0L)
            return jjStartNfaWithStates_0(5, 78, 72);
         else if ((active2 & 0x400000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 174, 72);
         return jjMoveStringLiteralDfa6_0(active0, 0x8400000000000L, active1, 0x20000L, active2, 0x800000400000L, active3, 0x4L);
      case 70:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x40000L, active2, 0L, active3, 0L);
      case 71:
         if ((active2 & 0x4000000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 178, 72);
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x8L, active3, 0L);
      case 72:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x180000000000000L, active2, 0L, active3, 0L);
      case 73:
         return jjMoveStringLiteralDfa6_0(active0, 0x1000000L, active1, 0x8040000000002140L, active2, 0x1000002000140L, active3, 0L);
      case 76:
         if ((active1 & 0x80L) != 0L)
            return jjStartNfaWithStates_0(5, 71, 72);
         return jjMoveStringLiteralDfa6_0(active0, 0x4000000000000L, active1, 0x2000000000004L, active2, 0x20000000014L, active3, 0L);
      case 77:
         return jjMoveStringLiteralDfa6_0(active0, 0x22000000000000L, active1, 0x800L, active2, 0L, active3, 0L);
      case 78:
         if ((active2 & 0x8000000L) != 0L)
         {
            jjmatchedKind = 155;
            jjmatchedPos = 5;
         }
         return jjMoveStringLiteralDfa6_0(active0, 0x60000000000L, active1, 0x10000000000L, active2, 0x210010000880L, active3, 0x200L);
      case 79:
         return jjMoveStringLiteralDfa6_0(active0, 0x8000L, active1, 0L, active2, 0x40000000000L, active3, 0L);
      case 80:
         if ((active2 & 0x400000000L) != 0L)
            return jjStartNfaWithStates_0(5, 162, 72);
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x800000000000L, active2, 0x10000000800000L, active3, 0L);
      case 82:
         if ((active0 & 0x80000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 43, 72);
         else if ((active1 & 0x800000000L) != 0L)
            return jjStartNfaWithStates_0(5, 99, 72);
         else if ((active1 & 0x20000000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 117, 72);
         return jjMoveStringLiteralDfa6_0(active0, 0x1000000000L, active1, 0x400000000L, active2, 0x40000000003000L, active3, 0L);
      case 83:
         return jjMoveStringLiteralDfa6_0(active0, 0x1040000040000000L, active1, 0L, active2, 0x20000400L, active3, 0L);
      case 84:
         if ((active0 & 0x400000000L) != 0L)
            return jjStartNfaWithStates_0(5, 34, 72);
         else if ((active1 & 0x200000000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 121, 72);
         else if ((active3 & 0x8L) != 0L)
            return jjStartNfaWithStates_0(5, 195, 72);
         return jjMoveStringLiteralDfa6_0(active0, 0xc000000000000000L, active1, 0x200000L, active2, 0x200000004000020L, active3, 0L);
      case 86:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0x80000L, active2, 0L, active3, 0L);
      case 89:
         if ((active1 & 0x1000000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 112, 72);
         else if ((active3 & 0x100L) != 0L)
            return jjStartNfaWithStates_0(5, 200, 72);
         return jjMoveStringLiteralDfa6_0(active0, 0x1c0000L, active1, 0L, active2, 0x2000000000L, active3, 0L);
      case 95:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0L, active3, 0x1L);
      case 108:
         return jjMoveStringLiteralDfa6_0(active0, 0L, active1, 0L, active2, 0x8000000000000L, active3, 0L);
      default :
         break;
   }
   return jjStartNfa_0(4, active0, active1, active2, active3);
}
private int jjMoveStringLiteralDfa6_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjStartNfa_0(4, old0, old1, old2, old3);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(5, active0, active1, active2, active3);
      return 6;
   }
   switch(curChar)
   {
      case 65:
         return jjMoveStringLiteralDfa7_0(active0, 0x1000000000L, active1, 0x1800100000c0004L, active2, 0x240000000000000L, active3, 0L);
      case 67:
         if ((active1 & 0x40000000000000L) != 0L)
            return jjStartNfaWithStates_0(6, 118, 72);
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x800000202000000L, active3, 0L);
      case 68:
         if ((active3 & 0x4L) != 0L)
            return jjStartNfaWithStates_0(6, 194, 72);
         break;
      case 69:
         if ((active1 & 0x200000L) != 0L)
            return jjStartNfaWithStates_0(6, 85, 72);
         else if ((active1 & 0x2000000000000L) != 0L)
            return jjStartNfaWithStates_0(6, 113, 72);
         else if ((active2 & 0x8L) != 0L)
            return jjStartNfaWithStates_0(6, 131, 72);
         else if ((active2 & 0x1000000L) != 0L)
            return jjStartNfaWithStates_0(6, 152, 72);
         else if ((active2 & 0x20000000L) != 0L)
            return jjStartNfaWithStates_0(6, 157, 72);
         else if ((active2 & 0x10000000000000L) != 0L)
            return jjStartNfaWithStates_0(6, 180, 72);
         return jjMoveStringLiteralDfa7_0(active0, 0x2000040000000L, active1, 0x1400000800L, active2, 0x10L, active3, 0L);
      case 71:
         if ((active3 & 0x200L) != 0L)
            return jjStartNfaWithStates_0(6, 201, 72);
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x200000000000L, active3, 0L);
      case 73:
         return jjMoveStringLiteralDfa7_0(active0, 0xc060000000000000L, active1, 0L, active2, 0x10000420L, active3, 0L);
      case 76:
         if ((active0 & 0x1000000000000L) != 0L)
            return jjStartNfaWithStates_0(6, 48, 72);
         else if ((active1 & 0x20000000000L) != 0L)
            return jjStartNfaWithStates_0(6, 105, 72);
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x20000000000L, active3, 0L);
      case 77:
         return jjMoveStringLiteralDfa7_0(active0, 0x8000L, active1, 0x200000000000L, active2, 0L, active3, 0L);
      case 78:
         if ((active0 & 0x800000L) != 0L)
            return jjStartNfaWithStates_0(6, 23, 72);
         else if ((active0 & 0x1000000L) != 0L)
            return jjStartNfaWithStates_0(6, 24, 72);
         return jjMoveStringLiteralDfa7_0(active0, 0x800000000L, active1, 0x100L, active2, 0x1040000400040L, active3, 0L);
      case 79:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x40L, active2, 0x4L, active3, 0L);
      case 80:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x2000000000L, active3, 0x1L);
      case 82:
         if ((active0 & 0x8000000000000L) != 0L)
            return jjStartNfaWithStates_0(6, 51, 72);
         else if ((active1 & 0x20000L) != 0L)
            return jjStartNfaWithStates_0(6, 81, 72);
         else if ((active3 & 0x80L) != 0L)
         {
            jjmatchedKind = 199;
            jjmatchedPos = 6;
         }
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0x800000000000L, active2, 0L, active3, 0x40L);
      case 84:
         if ((active0 & 0x200000000L) != 0L)
            return jjStartNfaWithStates_0(6, 33, 72);
         else if ((active0 & 0x4000000000000L) != 0L)
            return jjStartNfaWithStates_0(6, 50, 72);
         else if ((active2 & 0x800L) != 0L)
            return jjStartNfaWithStates_0(6, 139, 72);
         return jjMoveStringLiteralDfa7_0(active0, 0x60020004000L, active1, 0x2000L, active2, 0x10000000080L, active3, 0L);
      case 85:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x4000L, active3, 0L);
      case 86:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x1100L, active3, 0L);
      case 89:
         if ((active2 & 0x2000L) != 0L)
            return jjStartNfaWithStates_0(6, 141, 72);
         break;
      case 90:
         return jjMoveStringLiteralDfa7_0(active0, 0x400000000000L, active1, 0x8000000000000000L, active2, 0L, active3, 0L);
      case 95:
         return jjMoveStringLiteralDfa7_0(active0, 0x10000000001c0000L, active1, 0L, active2, 0x800004800000L, active3, 0L);
      case 111:
         return jjMoveStringLiteralDfa7_0(active0, 0L, active1, 0L, active2, 0x8000000000000L, active3, 0L);
      default :
         break;
   }
   return jjStartNfa_0(5, active0, active1, active2, active3);
}
private int jjMoveStringLiteralDfa7_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjStartNfa_0(5, old0, old1, old2, old3);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(6, active0, active1, active2, active3);
      return 7;
   }
   switch(curChar)
   {
      case 50:
         if ((active3 & 0x40L) != 0L)
            return jjStartNfaWithStates_0(7, 198, 14);
         break;
      case 65:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x8000000000000000L, active2, 0L, active3, 0x1L);
      case 67:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x40000L, active2, 0x4400000L, active3, 0L);
      case 68:
         return jjMoveStringLiteralDfa8_0(active0, 0x40000L, active1, 0L, active2, 0L, active3, 0L);
      case 69:
         if ((active1 & 0x2000L) != 0L)
            return jjStartNfaWithStates_0(7, 77, 72);
         else if ((active2 & 0x100L) != 0L)
            return jjStartNfaWithStates_0(7, 136, 72);
         else if ((active2 & 0x1000L) != 0L)
            return jjStartNfaWithStates_0(7, 140, 72);
         else if ((active2 & 0x2000000000L) != 0L)
            return jjStopAtPos(7, 165);
         return jjMoveStringLiteralDfa8_0(active0, 0x20000000L, active1, 0xa00000000000L, active2, 0xc0L, active3, 0L);
      case 70:
         return jjMoveStringLiteralDfa8_0(active0, 0x80000L, active1, 0L, active2, 0L, active3, 0L);
      case 71:
         if ((active1 & 0x4L) != 0L)
            return jjStartNfaWithStates_0(7, 66, 72);
         else if ((active1 & 0x100L) != 0L)
            return jjStartNfaWithStates_0(7, 72, 72);
         break;
      case 73:
         return jjMoveStringLiteralDfa8_0(active0, 0x1000104000L, active1, 0L, active2, 0x810000000000L, active3, 0L);
      case 75:
         if ((active2 & 0x200000000L) != 0L)
            return jjStartNfaWithStates_0(7, 161, 72);
         break;
      case 76:
         if ((active1 & 0x80000L) != 0L)
            return jjStartNfaWithStates_0(7, 83, 72);
         else if ((active1 & 0x1000000000L) != 0L)
            return jjStartNfaWithStates_0(7, 100, 72);
         else if ((active1 & 0x10000000000L) != 0L)
            return jjStartNfaWithStates_0(7, 104, 72);
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x800010L, active3, 0L);
      case 77:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x200000000000000L, active3, 0L);
      case 78:
         if ((active1 & 0x40L) != 0L)
            return jjStartNfaWithStates_0(7, 70, 72);
         return jjMoveStringLiteralDfa8_0(active0, 0x22000000000000L, active1, 0x800L, active2, 0x10000000L, active3, 0L);
      case 79:
         return jjMoveStringLiteralDfa8_0(active0, 0xc040400000008000L, active1, 0L, active2, 0x420L, active3, 0L);
      case 80:
         return jjMoveStringLiteralDfa8_0(active0, 0x1000000000000000L, active1, 0L, active2, 0L, active3, 0L);
      case 82:
         if ((active1 & 0x100000000000000L) != 0L)
         {
            jjmatchedKind = 120;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0x80000000000000L, active2, 0x40000000004000L, active3, 0L);
      case 83:
         if ((active1 & 0x400000000L) != 0L)
            return jjStartNfaWithStates_0(7, 98, 72);
         else if ((active2 & 0x200000000000L) != 0L)
            return jjStartNfaWithStates_0(7, 173, 72);
         break;
      case 84:
         if ((active0 & 0x40000000L) != 0L)
            return jjStopAtPos(7, 30);
         else if ((active0 & 0x800000000L) != 0L)
            return jjStartNfaWithStates_0(7, 35, 72);
         else if ((active2 & 0x1000000000000L) != 0L)
            return jjStartNfaWithStates_0(7, 176, 72);
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x800040002000000L, active3, 0L);
      case 87:
         if ((active2 & 0x4L) != 0L)
            return jjStartNfaWithStates_0(7, 130, 72);
         break;
      case 89:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x20000000000L, active3, 0L);
      case 95:
         return jjMoveStringLiteralDfa8_0(active0, 0x60000000000L, active1, 0L, active2, 0L, active3, 0L);
      case 111:
         return jjMoveStringLiteralDfa8_0(active0, 0L, active1, 0L, active2, 0x8000000000000L, active3, 0L);
      default :
         break;
   }
   return jjStartNfa_0(6, active0, active1, active2, active3);
}
private int jjMoveStringLiteralDfa8_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjStartNfa_0(6, old0, old1, old2, old3);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(7, active0, active1, active2, active3);
      return 8;
   }
   switch(curChar)
   {
      case 50:
         if ((active1 & 0x80000000000000L) != 0L)
            return jjStartNfaWithStates_0(8, 119, 14);
         break;
      case 65:
         return jjMoveStringLiteralDfa9_0(active0, 0x1000000000000000L, active1, 0L, active2, 0x10004000000L, active3, 0L);
      case 67:
         if ((active0 & 0x4000L) != 0L)
            return jjStartNfaWithStates_0(8, 14, 72);
         break;
      case 68:
         if ((active2 & 0x40L) != 0L)
            return jjStartNfaWithStates_0(8, 134, 72);
         break;
      case 69:
         if ((active1 & 0x40000L) != 0L)
            return jjStartNfaWithStates_0(8, 82, 72);
         else if ((active2 & 0x4000L) != 0L)
            return jjStartNfaWithStates_0(8, 142, 72);
         else if ((active2 & 0x400000L) != 0L)
            return jjStartNfaWithStates_0(8, 150, 72);
         break;
      case 71:
         if ((active2 & 0x10000000L) != 0L)
            return jjStartNfaWithStates_0(8, 156, 72);
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x80L, active3, 0L);
      case 73:
         return jjMoveStringLiteralDfa9_0(active0, 0x20000000000000L, active1, 0L, active2, 0x800040000800000L, active3, 0L);
      case 76:
         return jjMoveStringLiteralDfa9_0(active0, 0x80000L, active1, 0L, active2, 0L, active3, 0L);
      case 78:
         if ((active0 & 0x40000000000000L) != 0L)
            return jjStartNfaWithStates_0(8, 54, 72);
         else if ((active0 & 0x4000000000000000L) != 0L)
         {
            jjmatchedKind = 62;
            jjmatchedPos = 8;
         }
         else if ((active2 & 0x20L) != 0L)
            return jjStartNfaWithStates_0(8, 133, 72);
         else if ((active2 & 0x400L) != 0L)
            return jjStartNfaWithStates_0(8, 138, 72);
         return jjMoveStringLiteralDfa9_0(active0, 0x8000401000100000L, active1, 0L, active2, 0x800000000000L, active3, 0L);
      case 79:
         return jjMoveStringLiteralDfa9_0(active0, 0x20000040000L, active1, 0L, active2, 0L, active3, 0L);
      case 80:
         if ((active2 & 0x200000000000000L) != 0L)
            return jjStartNfaWithStates_0(8, 185, 72);
         break;
      case 82:
         if ((active0 & 0x20000000L) != 0L)
            return jjStartNfaWithStates_0(8, 29, 72);
         break;
      case 83:
         if ((active1 & 0x200000000000L) != 0L)
            return jjStartNfaWithStates_0(8, 109, 14);
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x800000000000L, active2, 0L, active3, 0L);
      case 84:
         if ((active0 & 0x2000000000000L) != 0L)
            return jjStartNfaWithStates_0(8, 49, 72);
         else if ((active1 & 0x800L) != 0L)
            return jjStartNfaWithStates_0(8, 75, 72);
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0x8000000000000000L, active2, 0L, active3, 0x1L);
      case 85:
         return jjMoveStringLiteralDfa9_0(active0, 0x40000008000L, active1, 0L, active2, 0L, active3, 0L);
      case 89:
         if ((active2 & 0x40000000000000L) != 0L)
            return jjStartNfaWithStates_0(8, 182, 72);
         break;
      case 95:
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x20002000010L, active3, 0L);
      case 107:
         return jjMoveStringLiteralDfa9_0(active0, 0L, active1, 0L, active2, 0x8000000000000L, active3, 0L);
      default :
         break;
   }
   return jjStartNfa_0(7, active0, active1, active2, active3);
}
private int jjMoveStringLiteralDfa9_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjStartNfa_0(7, old0, old1, old2, old3);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(8, active0, active1, active2, active3);
      return 9;
   }
   switch(curChar)
   {
      case 67:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x4000000L, active3, 0L);
      case 69:
         if ((active0 & 0x400000000000L) != 0L)
            return jjStartNfaWithStates_0(9, 46, 72);
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x90L, active3, 0L);
      case 70:
         if ((active0 & 0x20000000000L) != 0L)
            return jjStartNfaWithStates_0(9, 41, 14);
         break;
      case 72:
         if ((active3 & 0x1L) != 0L)
            return jjStartNfaWithStates_0(9, 192, 14);
         break;
      case 73:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0x8000000000000000L, active2, 0x8000000000000L, active3, 0L);
      case 75:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x800000L, active3, 0L);
      case 76:
         if ((active2 & 0x10000000000L) != 0L)
            return jjStartNfaWithStates_0(9, 168, 72);
         break;
      case 77:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x40000000000L, active3, 0L);
      case 79:
         return jjMoveStringLiteralDfa10_0(active0, 0x80000L, active1, 0L, active2, 0x800000000000000L, active3, 0L);
      case 82:
         return jjMoveStringLiteralDfa10_0(active0, 0L, active1, 0L, active2, 0x20002000000L, active3, 0L);
      case 83:
         if ((active1 & 0x800000000000L) != 0L)
            return jjStartNfaWithStates_0(9, 111, 72);
         return jjMoveStringLiteralDfa10_0(active0, 0x20040000008000L, active1, 0L, active2, 0L, active3, 0L);
      case 84:
         if ((active0 & 0x1000000000L) != 0L)
            return jjStartNfaWithStates_0(9, 36, 72);
         return jjMoveStringLiteralDfa10_0(active0, 0x1000000000100000L, active1, 0L, active2, 0x800000000000L, active3, 0L);
      case 85:
         return jjMoveStringLiteralDfa10_0(active0, 0x40000L, active1, 0L, active2, 0L, active3, 0L);
      case 95:
         return jjMoveStringLiteralDfa10_0(active0, 0x8000000000000000L, active1, 0L, active2, 0L, active3, 0L);
      default :
         break;
   }
   return jjStartNfa_0(8, active0, active1, active2, active3);
}
private int jjMoveStringLiteralDfa10_0(long old0, long active0, long old1, long active1, long old2, long active2, long old3, long active3)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2) | (active3 &= old3)) == 0L)
      return jjStartNfa_0(8, old0, old1, old2, old3);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(9, active0, active1, active2, 0L);
      return 10;
   }
   switch(curChar)
   {
      case 65:
         return jjMoveStringLiteralDfa11_0(active0, 0x80000L, active1, 0L, active2, 0L);
      case 66:
         return jjMoveStringLiteralDfa11_0(active0, 0x40000L, active1, 0L, active2, 0L);
      case 69:
         if ((active2 & 0x800000L) != 0L)
            return jjStartNfaWithStates_0(10, 151, 14);
         return jjMoveStringLiteralDfa11_0(active0, 0x40000100000L, active1, 0L, active2, 0x860002000000L);
      case 72:
         if ((active0 & 0x1000000000000000L) != 0L)
            return jjStartNfaWithStates_0(10, 60, 14);
         return jjMoveStringLiteralDfa11_0(active0, 0L, active1, 0L, active2, 0x4000000L);
      case 73:
         return jjMoveStringLiteralDfa11_0(active0, 0x8000000000000000L, active1, 0L, active2, 0L);
      case 78:
         if ((active2 & 0x800000000000000L) != 0L)
            return jjStartNfaWithStates_0(10, 187, 72);
         return jjMoveStringLiteralDfa11_0(active0, 0L, active1, 0L, active2, 0x10L);
      case 79:
         return jjMoveStringLiteralDfa11_0(active0, 0L, active1, 0x8000000000000000L, active2, 0L);
      case 82:
         if ((active2 & 0x80L) != 0L)
            return jjStartNfaWithStates_0(10, 135, 14);
         break;
      case 83:
         return jjMoveStringLiteralDfa11_0(active0, 0L, active1, 0L, active2, 0x8000000000000L);
      case 84:
         return jjMoveStringLiteralDfa11_0(active0, 0x20000000000000L, active1, 0L, active2, 0L);
      case 95:
         return jjMoveStringLiteralDfa11_0(active0, 0x8000L, active1, 0L, active2, 0L);
      default :
         break;
   }
   return jjStartNfa_0(9, active0, active1, active2, 0L);
}
private int jjMoveStringLiteralDfa11_0(long old0, long active0, long old1, long active1, long old2, long active2)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2)) == 0L)
      return jjStartNfa_0(9, old0, old1, old2, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(10, active0, active1, active2, 0L);
      return 11;
   }
   switch(curChar)
   {
      case 65:
         return jjMoveStringLiteralDfa12_0(active0, 0L, active1, 0L, active2, 0x10L);
      case 69:
         if ((active2 & 0x4000000L) != 0L)
            return jjStartNfaWithStates_0(11, 154, 14);
         return jjMoveStringLiteralDfa12_0(active0, 0L, active1, 0L, active2, 0x8000000000000L);
      case 70:
         return jjMoveStringLiteralDfa12_0(active0, 0L, active1, 0L, active2, 0x2000000L);
      case 71:
         return jjMoveStringLiteralDfa12_0(active0, 0x100000L, active1, 0L, active2, 0x800000000000L);
      case 73:
         return jjMoveStringLiteralDfa12_0(active0, 0x20000000000000L, active1, 0L, active2, 0L);
      case 76:
         return jjMoveStringLiteralDfa12_0(active0, 0x40000L, active1, 0L, active2, 0L);
      case 78:
         if ((active1 & 0x8000000000000000L) != 0L)
            return jjStartNfaWithStates_0(11, 127, 72);
         return jjMoveStringLiteralDfa12_0(active0, 0x8000000000000000L, active1, 0L, active2, 0L);
      case 82:
         if ((active0 & 0x40000000000L) != 0L)
            return jjStartNfaWithStates_0(11, 42, 14);
         break;
      case 84:
         if ((active0 & 0x80000L) != 0L)
            return jjStartNfaWithStates_0(11, 19, 14);
         return jjMoveStringLiteralDfa12_0(active0, 0x8000L, active1, 0L, active2, 0L);
      case 85:
         return jjMoveStringLiteralDfa12_0(active0, 0L, active1, 0L, active2, 0x20000000000L);
      case 90:
         return jjMoveStringLiteralDfa12_0(active0, 0L, active1, 0L, active2, 0x40000000000L);
      default :
         break;
   }
   return jjStartNfa_0(10, active0, active1, active2, 0L);
}
private int jjMoveStringLiteralDfa12_0(long old0, long active0, long old1, long active1, long old2, long active2)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2)) == 0L)
      return jjStartNfa_0(10, old0, old1, old2, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(11, active0, 0L, active2, 0L);
      return 12;
   }
   switch(curChar)
   {
      case 66:
         return jjMoveStringLiteralDfa13_0(active0, 0L, active2, 0x10L);
      case 67:
         if ((active0 & 0x20000000000000L) != 0L)
            return jjStartNfaWithStates_0(12, 53, 72);
         break;
      case 69:
         if ((active0 & 0x40000L) != 0L)
            return jjStartNfaWithStates_0(12, 18, 14);
         return jjMoveStringLiteralDfa13_0(active0, 0x100000L, active2, 0x800002000000L);
      case 73:
         return jjMoveStringLiteralDfa13_0(active0, 0x8000000000000000L, active2, 0L);
      case 79:
         return jjMoveStringLiteralDfa13_0(active0, 0L, active2, 0x40000000000L);
      case 82:
         return jjMoveStringLiteralDfa13_0(active0, 0x8000L, active2, 0L);
      case 83:
         return jjMoveStringLiteralDfa13_0(active0, 0L, active2, 0x20000000000L);
      case 84:
         if ((active2 & 0x8000000000000L) != 0L)
            return jjStartNfaWithStates_0(12, 179, 72);
         break;
      default :
         break;
   }
   return jjStartNfa_0(11, active0, 0L, active2, 0L);
}
private int jjMoveStringLiteralDfa13_0(long old0, long active0, long old2, long active2)
{
   if (((active0 &= old0) | (active2 &= old2)) == 0L)
      return jjStartNfa_0(11, old0, 0L, old2, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(12, active0, 0L, active2, 0L);
      return 13;
   }
   switch(curChar)
   {
      case 65:
         return jjMoveStringLiteralDfa14_0(active0, 0x8000L, active2, 0x20000000000L);
      case 76:
         return jjMoveStringLiteralDfa14_0(active0, 0L, active2, 0x10L);
      case 78:
         return jjMoveStringLiteralDfa14_0(active0, 0L, active2, 0x40000000000L);
      case 82:
         if ((active0 & 0x100000L) != 0L)
            return jjStartNfaWithStates_0(13, 20, 14);
         else if ((active2 & 0x800000000000L) != 0L)
            return jjStartNfaWithStates_0(13, 175, 14);
         return jjMoveStringLiteralDfa14_0(active0, 0L, active2, 0x2000000L);
      case 84:
         if ((active0 & 0x8000000000000000L) != 0L)
            return jjStartNfaWithStates_0(13, 63, 14);
         break;
      default :
         break;
   }
   return jjStartNfa_0(12, active0, 0L, active2, 0L);
}
private int jjMoveStringLiteralDfa14_0(long old0, long active0, long old2, long active2)
{
   if (((active0 &= old0) | (active2 &= old2)) == 0L)
      return jjStartNfa_0(12, old0, 0L, old2, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(13, active0, 0L, active2, 0L);
      return 14;
   }
   switch(curChar)
   {
      case 66:
         return jjMoveStringLiteralDfa15_0(active0, 0L, active2, 0x20000000000L);
      case 69:
         if ((active2 & 0x10L) != 0L)
            return jjStartNfaWithStates_0(14, 132, 14);
         else if ((active2 & 0x40000000000L) != 0L)
            return jjStartNfaWithStates_0(14, 170, 72);
         return jjMoveStringLiteralDfa15_0(active0, 0L, active2, 0x2000000L);
      case 78:
         return jjMoveStringLiteralDfa15_0(active0, 0x8000L, active2, 0L);
      default :
         break;
   }
   return jjStartNfa_0(13, active0, 0L, active2, 0L);
}
private int jjMoveStringLiteralDfa15_0(long old0, long active0, long old2, long active2)
{
   if (((active0 &= old0) | (active2 &= old2)) == 0L)
      return jjStartNfa_0(13, old0, 0L, old2, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(14, active0, 0L, active2, 0L);
      return 15;
   }
   switch(curChar)
   {
      case 76:
         return jjMoveStringLiteralDfa16_0(active0, 0L, active2, 0x20000000000L);
      case 78:
         return jjMoveStringLiteralDfa16_0(active0, 0L, active2, 0x2000000L);
      case 83:
         return jjMoveStringLiteralDfa16_0(active0, 0x8000L, active2, 0L);
      default :
         break;
   }
   return jjStartNfa_0(14, active0, 0L, active2, 0L);
}
private int jjMoveStringLiteralDfa16_0(long old0, long active0, long old2, long active2)
{
   if (((active0 &= old0) | (active2 &= old2)) == 0L)
      return jjStartNfa_0(14, old0, 0L, old2, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(15, active0, 0L, active2, 0L);
      return 16;
   }
   switch(curChar)
   {
      case 65:
         return jjMoveStringLiteralDfa17_0(active0, 0x8000L, active2, 0L);
      case 67:
         return jjMoveStringLiteralDfa17_0(active0, 0L, active2, 0x2000000L);
      case 69:
         if ((active2 & 0x20000000000L) != 0L)
            return jjStartNfaWithStates_0(16, 169, 14);
         break;
      default :
         break;
   }
   return jjStartNfa_0(15, active0, 0L, active2, 0L);
}
private int jjMoveStringLiteralDfa17_0(long old0, long active0, long old2, long active2)
{
   if (((active0 &= old0) | (active2 &= old2)) == 0L)
      return jjStartNfa_0(15, old0, 0L, old2, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(16, active0, 0L, active2, 0L);
      return 17;
   }
   switch(curChar)
   {
      case 67:
         return jjMoveStringLiteralDfa18_0(active0, 0x8000L, active2, 0L);
      case 69:
         return jjMoveStringLiteralDfa18_0(active0, 0L, active2, 0x2000000L);
      default :
         break;
   }
   return jjStartNfa_0(16, active0, 0L, active2, 0L);
}
private int jjMoveStringLiteralDfa18_0(long old0, long active0, long old2, long active2)
{
   if (((active0 &= old0) | (active2 &= old2)) == 0L)
      return jjStartNfa_0(16, old0, 0L, old2, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(17, active0, 0L, active2, 0L);
      return 18;
   }
   switch(curChar)
   {
      case 83:
         if ((active2 & 0x2000000L) != 0L)
            return jjStartNfaWithStates_0(18, 153, 14);
         break;
      case 84:
         return jjMoveStringLiteralDfa19_0(active0, 0x8000L, active2, 0L);
      default :
         break;
   }
   return jjStartNfa_0(17, active0, 0L, active2, 0L);
}
private int jjMoveStringLiteralDfa19_0(long old0, long active0, long old2, long active2)
{
   if (((active0 &= old0) | (active2 &= old2)) == 0L)
      return jjStartNfa_0(17, old0, 0L, old2, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(18, active0, 0L, 0L, 0L);
      return 19;
   }
   switch(curChar)
   {
      case 73:
         return jjMoveStringLiteralDfa20_0(active0, 0x8000L);
      default :
         break;
   }
   return jjStartNfa_0(18, active0, 0L, 0L, 0L);
}
private int jjMoveStringLiteralDfa20_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(18, old0, 0L, 0L, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(19, active0, 0L, 0L, 0L);
      return 20;
   }
   switch(curChar)
   {
      case 79:
         return jjMoveStringLiteralDfa21_0(active0, 0x8000L);
      default :
         break;
   }
   return jjStartNfa_0(19, active0, 0L, 0L, 0L);
}
private int jjMoveStringLiteralDfa21_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(19, old0, 0L, 0L, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(20, active0, 0L, 0L, 0L);
      return 21;
   }
   switch(curChar)
   {
      case 78:
         if ((active0 & 0x8000L) != 0L)
            return jjStartNfaWithStates_0(21, 15, 14);
         break;
      default :
         break;
   }
   return jjStartNfa_0(20, active0, 0L, 0L, 0L);
}
private int jjStartNfaWithStates_0(int pos, int kind, int state)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) { return pos + 1; }
   return jjMoveNfa_0(state, pos + 1);
}
static final long[] jjbitVec0 = {
   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
};
static final long[] jjbitVec2 = {
   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
};
private int jjMoveNfa_0(int startState, int curPos)
{
   int startsAt = 0;
   jjnewStateCnt = 71;
   int i = 1;
   jjstateSet[0] = startState;
   int kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         do
         {
            switch(jjstateSet[--i])
            {
               case 73:
                  if ((0xffffff7fffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(43, 44);
                  else if (curChar == 39)
                  {
                     if (kind > 245)
                        kind = 245;
                     jjstateSet[jjnewStateCnt++] = 45;
                  }
                  break;
               case 72:
               case 14:
                  if ((0x3ff001800000000L & l) == 0L)
                     break;
                  if (kind > 241)
                     kind = 241;
                  jjCheckNAdd(14);
                  break;
               case 21:
                  if ((0x3ff000000000000L & l) != 0L)
                  {
                     if (kind > 244)
                        kind = 244;
                     jjCheckNAddStates(0, 6);
                  }
                  else if (curChar == 46)
                     jjCheckNAddTwoStates(40, 41);
                  break;
               case 5:
                  if ((0x3ff000000000000L & l) != 0L)
                  {
                     if (kind > 237)
                        kind = 237;
                     jjCheckNAddStates(7, 13);
                  }
                  else if (curChar == 46)
                     jjCheckNAddTwoStates(51, 61);
                  else if (curChar == 34)
                     jjCheckNAddTwoStates(48, 49);
                  else if (curChar == 39)
                     jjCheckNAddTwoStates(43, 44);
                  else if (curChar == 58)
                     jjAddStates(14, 16);
                  else if (curChar == 47)
                     jjstateSet[jjnewStateCnt++] = 6;
                  else if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 0;
                  break;
               case 71:
                  if ((0x3ff000000000000L & l) != 0L)
                  {
                     if (kind > 237)
                        kind = 237;
                     jjCheckNAdd(61);
                  }
                  if ((0x3ff000000000000L & l) != 0L)
                  {
                     if (kind > 237)
                        kind = 237;
                     jjCheckNAddTwoStates(51, 52);
                  }
                  break;
               case 0:
                  if (curChar == 45)
                     jjCheckNAddStates(17, 19);
                  break;
               case 1:
                  if ((0xffffffffffffdbffL & l) != 0L)
                     jjCheckNAddStates(17, 19);
                  break;
               case 2:
                  if ((0x2400L & l) != 0L && kind > 6)
                     kind = 6;
                  break;
               case 3:
                  if (curChar == 10 && kind > 6)
                     kind = 6;
                  break;
               case 4:
                  if (curChar == 13)
                     jjstateSet[jjnewStateCnt++] = 3;
                  break;
               case 6:
                  if (curChar == 42)
                     jjCheckNAddTwoStates(7, 8);
                  break;
               case 7:
                  if ((0xfffffbffffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(7, 8);
                  break;
               case 8:
                  if (curChar == 42)
                     jjCheckNAddStates(20, 22);
                  break;
               case 9:
                  if ((0xffff7bffffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(10, 8);
                  break;
               case 10:
                  if ((0xfffffbffffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(10, 8);
                  break;
               case 11:
                  if (curChar == 47 && kind > 7)
                     kind = 7;
                  break;
               case 12:
                  if (curChar == 47)
                     jjstateSet[jjnewStateCnt++] = 6;
                  break;
               case 15:
                  if (curChar == 58)
                     jjAddStates(14, 16);
                  break;
               case 17:
                  if ((0x3ff001800000000L & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjAddStates(23, 24);
                  break;
               case 18:
                  if (curChar == 46)
                     jjstateSet[jjnewStateCnt++] = 19;
                  break;
               case 20:
                  if ((0x3ff001800000000L & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjstateSet[jjnewStateCnt++] = 20;
                  break;
               case 22:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjCheckNAdd(22);
                  break;
               case 23:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjCheckNAddTwoStates(23, 24);
                  break;
               case 24:
                  if (curChar == 46)
                     jjCheckNAdd(25);
                  break;
               case 25:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjCheckNAdd(25);
                  break;
               case 26:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjCheckNAddTwoStates(26, 27);
                  break;
               case 28:
                  if ((0x280000000000L & l) != 0L)
                     jjAddStates(25, 26);
                  break;
               case 29:
                  if (curChar == 46)
                     jjCheckNAdd(30);
                  break;
               case 30:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjCheckNAdd(30);
                  break;
               case 31:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjCheckNAddStates(27, 29);
                  break;
               case 32:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjCheckNAdd(32);
                  break;
               case 33:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjCheckNAddTwoStates(33, 34);
                  break;
               case 34:
                  if (curChar == 46)
                     jjCheckNAdd(35);
                  break;
               case 35:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjCheckNAdd(35);
                  break;
               case 36:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjCheckNAddStates(30, 32);
                  break;
               case 37:
                  if (curChar == 46)
                     jjCheckNAdd(38);
                  break;
               case 38:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjCheckNAddTwoStates(38, 27);
                  break;
               case 39:
                  if (curChar == 46)
                     jjCheckNAddTwoStates(40, 41);
                  break;
               case 40:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjCheckNAdd(40);
                  break;
               case 41:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjCheckNAddTwoStates(41, 27);
                  break;
               case 42:
                  if (curChar == 39)
                     jjCheckNAddTwoStates(43, 44);
                  break;
               case 43:
                  if ((0xffffff7fffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(43, 44);
                  break;
               case 44:
                  if (curChar != 39)
                     break;
                  if (kind > 245)
                     kind = 245;
                  jjstateSet[jjnewStateCnt++] = 45;
                  break;
               case 45:
                  if (curChar == 39)
                     jjCheckNAddTwoStates(46, 44);
                  break;
               case 46:
                  if ((0xffffff7fffffffffL & l) != 0L)
                     jjCheckNAddTwoStates(46, 44);
                  break;
               case 47:
                  if (curChar == 34)
                     jjCheckNAddTwoStates(48, 49);
                  break;
               case 48:
                  if ((0xfffffffbffffdbffL & l) != 0L)
                     jjCheckNAddTwoStates(48, 49);
                  break;
               case 49:
                  if (curChar == 34 && kind > 246)
                     kind = 246;
                  break;
               case 50:
                  if (curChar == 46)
                     jjCheckNAddTwoStates(51, 61);
                  break;
               case 51:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 237)
                     kind = 237;
                  jjCheckNAddTwoStates(51, 52);
                  break;
               case 53:
                  if ((0x280000000000L & l) != 0L)
                     jjAddStates(33, 34);
                  break;
               case 54:
                  if (curChar == 46)
                     jjCheckNAdd(55);
                  break;
               case 55:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 237)
                     kind = 237;
                  jjCheckNAdd(55);
                  break;
               case 56:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 237)
                     kind = 237;
                  jjCheckNAddStates(35, 37);
                  break;
               case 57:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 237)
                     kind = 237;
                  jjCheckNAdd(57);
                  break;
               case 58:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 237)
                     kind = 237;
                  jjCheckNAddTwoStates(58, 59);
                  break;
               case 59:
                  if (curChar == 46)
                     jjCheckNAdd(60);
                  break;
               case 60:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 237)
                     kind = 237;
                  jjCheckNAdd(60);
                  break;
               case 61:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 237)
                     kind = 237;
                  jjCheckNAdd(61);
                  break;
               case 62:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 237)
                     kind = 237;
                  jjCheckNAddStates(7, 13);
                  break;
               case 63:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 237)
                     kind = 237;
                  jjCheckNAddTwoStates(63, 52);
                  break;
               case 64:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 237)
                     kind = 237;
                  jjCheckNAddStates(38, 40);
                  break;
               case 65:
                  if (curChar == 46)
                     jjCheckNAdd(66);
                  break;
               case 66:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 237)
                     kind = 237;
                  jjCheckNAddTwoStates(66, 52);
                  break;
               case 67:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 237)
                     kind = 237;
                  jjCheckNAddTwoStates(67, 68);
                  break;
               case 68:
                  if (curChar == 46)
                     jjCheckNAdd(69);
                  break;
               case 69:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 237)
                     kind = 237;
                  jjCheckNAdd(69);
                  break;
               case 70:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 237)
                     kind = 237;
                  jjCheckNAdd(70);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         do
         {
            switch(jjstateSet[--i])
            {
               case 73:
               case 43:
                  jjCheckNAddTwoStates(43, 44);
                  break;
               case 72:
                  if ((0x7fffffe87ffffffL & l) != 0L)
                  {
                     if (kind > 241)
                        kind = 241;
                     jjCheckNAdd(14);
                  }
                  if ((0x7fffffe07fffffeL & l) != 0L)
                  {
                     if (kind > 241)
                        kind = 241;
                     jjCheckNAddTwoStates(13, 14);
                  }
                  break;
               case 21:
               case 16:
                  if ((0x7fffffe07fffffeL & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjCheckNAddStates(41, 43);
                  break;
               case 5:
               case 13:
                  if ((0x7fffffe07fffffeL & l) == 0L)
                     break;
                  if (kind > 241)
                     kind = 241;
                  jjCheckNAddTwoStates(13, 14);
                  break;
               case 1:
                  jjAddStates(17, 19);
                  break;
               case 7:
                  jjCheckNAddTwoStates(7, 8);
                  break;
               case 9:
               case 10:
                  jjCheckNAddTwoStates(10, 8);
                  break;
               case 14:
                  if ((0x7fffffe87ffffffL & l) == 0L)
                     break;
                  if (kind > 241)
                     kind = 241;
                  jjCheckNAdd(14);
                  break;
               case 17:
                  if ((0x7fffffe87ffffffL & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjCheckNAddTwoStates(17, 18);
                  break;
               case 19:
                  if ((0x7fffffe07fffffeL & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjCheckNAddTwoStates(19, 20);
                  break;
               case 20:
                  if ((0x7fffffe87ffffffL & l) == 0L)
                     break;
                  if (kind > 244)
                     kind = 244;
                  jjCheckNAdd(20);
                  break;
               case 27:
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(44, 46);
                  break;
               case 46:
                  jjCheckNAddTwoStates(46, 44);
                  break;
               case 48:
                  jjAddStates(47, 48);
                  break;
               case 52:
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(49, 51);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int hiByte = (int)(curChar >> 8);
         int i1 = hiByte >> 6;
         long l1 = 1L << (hiByte & 077);
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         do
         {
            switch(jjstateSet[--i])
            {
               case 73:
               case 43:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddTwoStates(43, 44);
                  break;
               case 1:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjAddStates(17, 19);
                  break;
               case 7:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddTwoStates(7, 8);
                  break;
               case 9:
               case 10:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddTwoStates(10, 8);
                  break;
               case 46:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddTwoStates(46, 44);
                  break;
               case 48:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjAddStates(47, 48);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 71 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
static final int[] jjnextStates = {
   22, 23, 24, 26, 36, 37, 27, 63, 64, 65, 52, 67, 68, 70, 16, 21, 
   39, 1, 2, 4, 8, 9, 11, 17, 18, 29, 31, 32, 33, 34, 36, 37, 
   27, 54, 56, 57, 58, 59, 64, 65, 52, 16, 17, 18, 28, 29, 31, 48, 
   49, 53, 54, 56, 
};
private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
{
   switch(hiByte)
   {
      case 0:
         return ((jjbitVec2[i2] & l2) != 0L);
      default :
         if ((jjbitVec0[i1] & l1) != 0L)
            return true;
         return false;
   }
}

/** Token literal values. */
public static final String[] jjstrLiteralImages = {
"", null, null, null, null, null, null, null, "\101", "\101\104\104", 
"\101\114\124\105\122", "\101\122\122\101\131", "\101\123", "\101\125\124\110\111\104", 
"\101\125\124\117\115\101\124\111\103", 
"\101\125\124\117\116\117\115\117\125\123\137\124\122\101\116\123\101\103\124\111\117\116", "\102\105\107\111\116", "\102\106\111\114\105", 
"\102\111\116\101\122\131\137\104\117\125\102\114\105", "\102\111\116\101\122\131\137\106\114\117\101\124", 
"\102\111\116\101\122\131\137\111\116\124\105\107\105\122", "\102\114\117\102", "\102\117\104\131", "\102\117\117\114\105\101\116", 
"\102\125\111\114\124\111\116", "\102\125\114\113", "\102\131", "\102\131\124\105", "\103\110\101\122", 
"\103\110\101\122\101\103\124\105\122", "\45\103\110\101\122\123\105\124", "\103\114\117\102", "\103\114\117\123\105", 
"\103\117\114\114\105\103\124", "\103\117\115\115\111\124", "\103\117\116\123\124\101\116\124", 
"\103\117\116\123\124\122\101\111\116\124", "\103\117\125\116\124", "\103\122\105\101\124\105", "\103\122\117\123\123", 
"\103\125\102\105", "\103\125\122\122\105\116\124\137\117\106", 
"\103\125\122\122\105\116\124\137\125\123\105\122", "\103\125\122\123\117\122", "\104\101\124\105", "\104\101\131", 
"\104\102\124\111\115\105\132\117\116\105", "\104\105\103", "\104\105\103\111\115\101\114", 
"\104\105\103\122\105\115\105\116\124", "\104\105\106\101\125\114\124", "\104\105\106\111\116\105\122", 
"\104\105\114\105\124\105", "\104\105\124\105\122\115\111\116\111\123\124\111\103", 
"\104\111\115\105\116\123\111\117\116", "\104\117\125\102\114\105", "\105\114\123\111\106", "\105\115\120\124\131", 
"\105\116\101\102\114\105", "\105\116\104", "\105\121\125\101\114\123\137\120\101\124\110", 
"\105\123\103\101\120\105", "\105\130\103\105\120\124\111\117\116", 
"\105\130\103\105\120\124\111\117\116\137\111\116\111\124", "\105\130\111\124", "\106\101\114\123\105", 
"\106\111\120\123\106\114\101\107", "\106\111\122\123\124", "\106\114\117\101\124", "\106\125\114\114", 
"\106\125\116\103\124\111\117\116", "\107\114\117\102\101\114", "\107\122\117\125\120\111\116\107", 
"\111\107\116\117\122\105", "\111\116", "\111\116\103\122\105\115\105\116\124", "\111\116\104\105\130", 
"\111\116\106\111\116\111\124\105", "\111\116\114\111\116\105", "\111\116\116\105\122", "\111\116\124", 
"\111\116\124\105\107\105\122", "\111\116\124\105\122\106\101\103\105", "\111\116\124\105\122\126\101\114", 
"\111\123", "\111\124\105\122\101\124\105", "\112\117\111\116", "\113\105\131", 
"\113\105\105\120", "\114\101\123\124", "\114\105\106\124", "\114\111\113\105\62", 
"\114\111\113\105\64", "\114\111\113\105\103", "\114\117\103\101\114", "\114\117\116\107", 
"\114\117\117\120", "\115\101\111\116", "\115\105\101\123\125\122\105\123", 
"\115\105\115\102\105\122", "\115\114\123\114\101\102\105\114", "\115\117\104\105\114", 
"\115\117\116\124\110", "\116\101\116", "\116\101\124\111\117\116\101\114", 
"\116\101\124\125\122\101\114", "\116\101\126", "\116\103\110\101\122", "\116\103\114\117\102", 
"\116\105\127\137\116\101\115\105\123", "\47\116\117\47", "\116\117\103\117\115\120\122\105\123\123", 
"\116\117\103\117\120\131", "\116\117\103\131\103\114\105", "\116\117\124", "\116\125\114\114", 
"\116\125\114\114\123", "\116\125\115\102\105\122", "\116\125\115\105\122\111\103", 
"\116\126\101\122\103\110\101\122\62", "\116\126\101\122\103\110\101\122", "\117\102\112\105\103\124", "\117\106", 
"\117\116", "\117\116\114\131", "\117\120\105\116", "\117\122", 
"\117\122\107\101\116\111\132\101\124\111\117\116", "\117\125\124", "\117\125\124\105\122", "\117\126\105\122\106\114\117\127", 
"\120\101\103\113\101\107\105", "\120\101\122\101\114\114\105\114\137\105\116\101\102\114\105", 
"\120\101\122\124\111\124\111\117\116", "\120\111\120\105\114\111\116\105\104", 
"\120\114\123\137\111\116\124\105\107\105\122", "\120\117\123\111\124\111\126\105", "\120\122\101\107\115\101", 
"\120\122\105\103\111\123\111\117\116", "\120\122\105\123\105\116\124", "\120\122\105\123\105\122\126\105", 
"\120\122\111\115\101\122\131", "\120\122\117\103\105\104\125\122\105", "\122\101\111\123\105", 
"\122\101\116\107\105", "\122\101\127", "\122\105\101\104", "\122\105\101\114", 
"\122\105\103\117\122\104", "\122\105\106", "\122\105\106\105\122\105\116\103\105", 
"\122\105\107\105\130\120\137\114\111\113\105", "\122\105\120\114\101\103\105", 
"\122\105\123\124\122\111\103\124\137\122\105\106\105\122\105\116\103\105\123", "\122\105\123\125\114\124\137\103\101\103\110\105", 
"\122\105\124\125\122\116", "\122\105\124\125\122\116\111\116\107", "\122\105\126\105\122\123\105", 
"\122\111\107\110\124", "\122\116\104\123", "\122\116\120\123", "\122\117\114\114\102\101\103\113", 
"\122\117\114\114\125\120", "\122\117\127\111\104", "\122\117\127\123", "\45\122\117\127\124\131\120\105", 
"\122\125\114\105\123", "\123\105\103\117\116\104", "\123\105\121\125\105\116\124\111\101\114", 
"\123\105\122\111\101\114\114\131\137\122\105\125\123\101\102\114\105", "\123\105\123\123\111\117\116\124\111\115\105\132\117\116\105", 
"\123\105\124", "\123\105\124\123", "\123\111\102\114\111\116\107\123", 
"\123\111\116\107\114\105", "\123\111\115\120\114\105\137\111\116\124\105\107\105\122", 
"\123\115\101\114\114\111\116\124", "\123\117\115\105", "\123\124\122\111\116\107", 
"\123\125\102\115\125\154\157\157\153\111\123\105\124", "\123\125\102\124\131\120\105", "\124\101\102\114\105", 
"\124\105\115\120\117\122\101\122\131", "\124\110\105", "\124\111\115\105", "\124\111\115\105\123\124\101\115\120", 
"\124\117", "\124\122\101\116\123\101\103\124\111\117\116", "\124\122\125\105", 
"\124\122\125\123\124", "\124\131\120\105", "\45\124\131\120\105", 
"\125\116\104\105\122\137\120\101\124\110", "\125\116\124\111\114", "\125\120\104\101\124\105\104", 
"\125\120\123\105\122\124", "\125\122\117\127\111\104", "\125\123\111\116\107", 
"\126\101\122\103\110\101\122\62", "\126\101\122\103\110\101\122", "\126\101\122\122\101\131", 
"\126\101\122\131\111\116\107", "\127\111\124\110", "\127\110\111\114\105", "\127\116\104\123", 
"\127\116\120\123", "\127\117\122\113", "\131\105\101\122", "\47\131\105\123\47", 
"\132\117\116\105", "\72\75", "\52", "\100", "\51", "\174\174", "\72", "\54", "\56", "\56\56", 
"\44", "\45", "\75", "\76", "\76\75", "\50\53\51", "\74", "\74\75", "\55", "\74\76", 
"\41\75", "\50", "\53", "\43", "\77", "\73", "\57", "\176", null, null, null, null, null, 
null, null, null, null, null, };

/** Lexer state names. */
public static final String[] lexStateNames = {
   "DEFAULT",
};
static final long[] jjtoToken = {
   0xffffffffffffff01L, 0xffffffffffffffffL, 0xffffffffffffffffL, 0x723fffffffffffL, 
};
static final long[] jjtoSkip = {
   0xfeL, 0x0L, 0x0L, 0x0L, 
};
protected JavaCharStream input_stream;
private final int[] jjrounds = new int[71];
private final int[] jjstateSet = new int[142];
protected char curChar;
/** Constructor. */
public DDLParserTokenManager(JavaCharStream stream){
   if (JavaCharStream.staticFlag)
      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
   input_stream = stream;
}

/** Constructor. */
public DDLParserTokenManager(JavaCharStream stream, int lexState){
   this(stream);
   SwitchTo(lexState);
}

/** Reinitialise parser. */
public void ReInit(JavaCharStream stream)
{
   jjmatchedPos = jjnewStateCnt = 0;
   curLexState = defaultLexState;
   input_stream = stream;
   ReInitRounds();
}
private void ReInitRounds()
{
   int i;
   jjround = 0x80000001;
   for (i = 71; i-- > 0;)
      jjrounds[i] = 0x80000000;
}

/** Reinitialise parser. */
public void ReInit(JavaCharStream stream, int lexState)
{
   ReInit(stream);
   SwitchTo(lexState);
}

/** Switch to specified lex state. */
public void SwitchTo(int lexState)
{
   if (lexState >= 1 || lexState < 0)
      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
   else
      curLexState = lexState;
}

protected Token jjFillToken()
{
   final Token t;
   final String curTokenImage;
   final int beginLine;
   final int endLine;
   final int beginColumn;
   final int endColumn;
   String im = jjstrLiteralImages[jjmatchedKind];
   curTokenImage = (im == null) ? input_stream.GetImage() : im;
   beginLine = input_stream.getBeginLine();
   beginColumn = input_stream.getBeginColumn();
   endLine = input_stream.getEndLine();
   endColumn = input_stream.getEndColumn();
   t = Token.newToken(jjmatchedKind, curTokenImage);

   t.beginLine = beginLine;
   t.endLine = endLine;
   t.beginColumn = beginColumn;
   t.endColumn = endColumn;

   return t;
}

int curLexState = 0;
int defaultLexState = 0;
int jjnewStateCnt;
int jjround;
int jjmatchedPos;
int jjmatchedKind;

/** Get the next Token. */
public Token getNextToken() 
{
  Token matchedToken;
  int curPos = 0;

  EOFLoop :
  for (;;)
  {
   try
   {
      curChar = input_stream.BeginToken();
   }
   catch(java.io.IOException e)
   {
      jjmatchedKind = 0;
      matchedToken = jjFillToken();
      return matchedToken;
   }

   try { input_stream.backup(0);
      while (curChar <= 32 && (0x100003600L & (1L << curChar)) != 0L)
         curChar = input_stream.BeginToken();
   }
   catch (java.io.IOException e1) { continue EOFLoop; }
   jjmatchedKind = 0x7fffffff;
   jjmatchedPos = 0;
   curPos = jjMoveStringLiteralDfa0_0();
   if (jjmatchedKind != 0x7fffffff)
   {
      if (jjmatchedPos + 1 < curPos)
         input_stream.backup(curPos - jjmatchedPos - 1);
      if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
      {
         matchedToken = jjFillToken();
         return matchedToken;
      }
      else
      {
         continue EOFLoop;
      }
   }
   int error_line = input_stream.getEndLine();
   int error_column = input_stream.getEndColumn();
   String error_after = null;
   boolean EOFSeen = false;
   try { input_stream.readChar(); input_stream.backup(1); }
   catch (java.io.IOException e1) {
      EOFSeen = true;
      error_after = curPos <= 1 ? "" : input_stream.GetImage();
      if (curChar == '\n' || curChar == '\r') {
         error_line++;
         error_column = 0;
      }
      else
         error_column++;
   }
   if (!EOFSeen) {
      input_stream.backup(1);
      error_after = curPos <= 1 ? "" : input_stream.GetImage();
   }
   throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
  }
}

private void jjCheckNAdd(int state)
{
   if (jjrounds[state] != jjround)
   {
      jjstateSet[jjnewStateCnt++] = state;
      jjrounds[state] = jjround;
   }
}
private void jjAddStates(int start, int end)
{
   do {
      jjstateSet[jjnewStateCnt++] = jjnextStates[start];
   } while (start++ != end);
}
private void jjCheckNAddTwoStates(int state1, int state2)
{
   jjCheckNAdd(state1);
   jjCheckNAdd(state2);
}

private void jjCheckNAddStates(int start, int end)
{
   do {
      jjCheckNAdd(jjnextStates[start]);
   } while (start++ != end);
}

}
