/*
 *  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you under the Apache License, Version 2.0 (the
 *  "License"); you may not use this file except in compliance
 *  with the License.  You may obtain a copy of the License at
 * 
 *  http://www.apache.org/licenses/LICENSE-2.0
 * 
 *  Unless required by applicable law or agreed to in writing,
 *  software distributed under the License is distributed on an
 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *  KIND, either express or implied.  See the License for the
 *  specific language governing permissions and limitations
 *  under the License.
 */
/* Generated By:JJTree&JavaCC: Do not edit this line. JSParser20TokenManager.java */
package org.apache.myfaces.buildtools.maven2.plugin.javascript.javascript20parser;
import java.io.IOException;

public class JSParser20TokenManager implements JSParser20Constants
{
    private boolean isRegValid = true;
    public void setRegInvalid()
    {
        isRegValid = false;
    }
    public void setRegValid()
    {
        isRegValid = true;
    }
  public  java.io.PrintStream debugStream = System.out;
  public  void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
private final int jjStopStringLiteralDfa_0(int pos, long active0, long active1, long active2)
{
   switch (pos)
   {
      case 0:
         if ((active0 & 0x18L) != 0L || (active1 & 0x400800000000000L) != 0L)
            return 10;
         if ((active0 & 0xffffffffffffff00L) != 0L || (active1 & 0x1L) != 0L)
         {
            jjmatchedKind = 78;
            return 30;
         }
         if ((active1 & 0xa000000L) != 0L)
            return 5;
         return -1;
      case 1:
         if ((active0 & 0x20000007c020100L) != 0L)
            return 30;
         if ((active0 & 0xfdffffff83fdfe00L) != 0L || (active1 & 0x1L) != 0L)
         {
            if (jjmatchedPos != 1)
            {
               jjmatchedKind = 78;
               jjmatchedPos = 1;
            }
            return 30;
         }
         return -1;
      case 2:
         if ((active0 & 0xffff2fbeb1bdfe00L) != 0L || (active1 & 0x1L) != 0L)
         {
            if (jjmatchedPos != 2)
            {
               jjmatchedKind = 78;
               jjmatchedPos = 2;
            }
            return 30;
         }
         if ((active0 & 0xd04102400000L) != 0L)
            return 30;
         return -1;
      case 3:
         if ((active0 & 0xff5a25bcb1b9fa00L) != 0L || (active1 & 0x1L) != 0L)
         {
            jjmatchedKind = 78;
            jjmatchedPos = 3;
            return 30;
         }
         if ((active0 & 0xa50a0200040400L) != 0L)
            return 30;
         return -1;
      case 4:
         if ((active0 & 0xdf58213cb1a9c000L) != 0L || (active1 & 0x1L) != 0L)
         {
            if (jjmatchedPos != 4)
            {
               jjmatchedKind = 78;
               jjmatchedPos = 4;
            }
            return 30;
         }
         if ((active0 & 0x2002048000103a00L) != 0L)
            return 30;
         return -1;
      case 5:
         if ((active0 & 0xdb18000cb1a8c000L) != 0L)
         {
            jjmatchedKind = 78;
            jjmatchedPos = 5;
            return 30;
         }
         if ((active0 & 0x2440213000010000L) != 0L || (active1 & 0x1L) != 0L)
            return 30;
         return -1;
      case 6:
         if ((active0 & 0xdb180000a1804000L) != 0L)
         {
            jjmatchedKind = 78;
            jjmatchedPos = 6;
            return 30;
         }
         if ((active0 & 0xc10288000L) != 0L)
            return 30;
         return -1;
      case 7:
         if ((active0 & 0x5b000000a0000000L) != 0L)
         {
            jjmatchedKind = 78;
            jjmatchedPos = 7;
            return 30;
         }
         if ((active0 & 0x8018000001804000L) != 0L)
            return 30;
         return -1;
      case 8:
         if ((active0 & 0x1100000020000000L) != 0L)
         {
            jjmatchedKind = 78;
            jjmatchedPos = 8;
            return 30;
         }
         if ((active0 & 0x4a00000080000000L) != 0L)
            return 30;
         return -1;
      case 9:
         if ((active0 & 0x1000000000000000L) != 0L)
         {
            jjmatchedKind = 78;
            jjmatchedPos = 9;
            return 30;
         }
         if ((active0 & 0x100000020000000L) != 0L)
            return 30;
         return -1;
      case 10:
         if ((active0 & 0x1000000000000000L) != 0L)
         {
            jjmatchedKind = 78;
            jjmatchedPos = 10;
            return 30;
         }
         return -1;
      default :
         return -1;
   }
}
private final int jjStartNfa_0(int pos, long active0, long active1, long active2)
{
   return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0, active1, active2), pos + 1);
}
private final int jjStopAtPos(int pos, int kind)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   return pos + 1;
}
private final 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);
}
private final int jjMoveStringLiteralDfa0_0()
{
   switch(curChar)
   {
      case 33:
         jjmatchedKind = 95;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x4000000000L, 0x40L);
      case 37:
         jjmatchedKind = 115;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x4000000000000000L, 0x0L);
      case 38:
         jjmatchedKind = 112;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x800010000000000L, 0x8L);
      case 40:
         return jjStopAtPos(0, 81);
      case 41:
         return jjStopAtPos(0, 82);
      case 42:
         jjmatchedKind = 110;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x200000000000000L, 0x0L);
      case 43:
         jjmatchedKind = 108;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x80040000000000L, 0x0L);
      case 44:
         return jjStopAtPos(0, 88);
      case 45:
         jjmatchedKind = 109;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x100080000000000L, 0x0L);
      case 46:
         jjmatchedKind = 89;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x8000000L, 0x0L);
      case 47:
         jjmatchedKind = 111;
         return jjMoveStringLiteralDfa1_0(0x18L, 0x400000000000000L, 0x0L);
      case 58:
         jjmatchedKind = 98;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x4000000L, 0x0L);
      case 59:
         return jjStopAtPos(0, 87);
      case 60:
         jjmatchedKind = 94;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x8010001000000000L, 0x0L);
      case 61:
         jjmatchedKind = 92;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x800000000L, 0x20L);
      case 62:
         jjmatchedKind = 93;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x60002000000000L, 0x3L);
      case 63:
         return jjStopAtPos(0, 97);
      case 70:
         return jjMoveStringLiteralDfa1_0(0x1000000L, 0x0L, 0x0L);
      case 91:
         return jjStopAtPos(0, 85);
      case 93:
         return jjStopAtPos(0, 86);
      case 94:
         jjmatchedKind = 114;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x2000020000000000L, 0x10L);
      case 97:
         return jjMoveStringLiteralDfa1_0(0x8000000000100L, 0x0L, 0x0L);
      case 98:
         return jjMoveStringLiteralDfa1_0(0x200L, 0x0L, 0x0L);
      case 99:
         return jjMoveStringLiteralDfa1_0(0x7c00L, 0x0L, 0x0L);
      case 100:
         return jjMoveStringLiteralDfa1_0(0x10000000038000L, 0x0L, 0x0L);
      case 101:
         return jjMoveStringLiteralDfa1_0(0x600000000c0000L, 0x0L, 0x0L);
      case 102:
         return jjMoveStringLiteralDfa1_0(0xf00000L, 0x0L, 0x0L);
      case 103:
         return jjMoveStringLiteralDfa1_0(0x80000002000000L, 0x0L, 0x0L);
      case 105:
         return jjMoveStringLiteralDfa1_0(0x30000007c000000L, 0x1L, 0x0L);
      case 110:
         return jjMoveStringLiteralDfa1_0(0x400000380000000L, 0x0L, 0x0L);
      case 112:
         return jjMoveStringLiteralDfa1_0(0x800001c00000000L, 0x0L, 0x0L);
      case 114:
         return jjMoveStringLiteralDfa1_0(0x2000000000L, 0x0L, 0x0L);
      case 115:
         return jjMoveStringLiteralDfa1_0(0x100001c000000000L, 0x0L, 0x0L);
      case 116:
         return jjMoveStringLiteralDfa1_0(0x60003e0000000000L, 0x0L, 0x0L);
      case 117:
         return jjMoveStringLiteralDfa1_0(0x400000000000L, 0x0L, 0x0L);
      case 118:
         return jjMoveStringLiteralDfa1_0(0x8001800000000000L, 0x0L, 0x0L);
      case 119:
         return jjMoveStringLiteralDfa1_0(0x6000000000000L, 0x0L, 0x0L);
      case 123:
         return jjStopAtPos(0, 83);
      case 124:
         jjmatchedKind = 113;
         return jjMoveStringLiteralDfa1_0(0x0L, 0x1000008000000000L, 0x4L);
      case 125:
         return jjStopAtPos(0, 84);
      case 126:
         return jjStopAtPos(0, 96);
      default :
         return jjMoveNfa_0(2, 0);
   }
}
private final int jjMoveStringLiteralDfa1_0(long active0, long active1, long active2)
{
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(0, active0, active1, active2);
      return 1;
   }
   switch(curChar)
   {
      case 38:
         if ((active1 & 0x10000000000L) != 0L)
         {
            jjmatchedKind = 104;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x8L);
      case 42:
         if ((active0 & 0x10L) != 0L)
            return jjStopAtPos(1, 4);
         break;
      case 43:
         if ((active1 & 0x40000000000L) != 0L)
            return jjStopAtPos(1, 106);
         break;
      case 45:
         if ((active1 & 0x80000000000L) != 0L)
            return jjStopAtPos(1, 107);
         break;
      case 46:
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x8000000L, active2, 0L);
      case 47:
         if ((active0 & 0x8L) != 0L)
            return jjStopAtPos(1, 3);
         break;
      case 58:
         if ((active1 & 0x4000000L) != 0L)
            return jjStopAtPos(1, 90);
         break;
      case 60:
         if ((active1 & 0x10000000000000L) != 0L)
         {
            jjmatchedKind = 116;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x8000000000000000L, active2, 0L);
      case 61:
         if ((active1 & 0x800000000L) != 0L)
         {
            jjmatchedKind = 99;
            jjmatchedPos = 1;
         }
         else if ((active1 & 0x1000000000L) != 0L)
            return jjStopAtPos(1, 100);
         else if ((active1 & 0x2000000000L) != 0L)
            return jjStopAtPos(1, 101);
         else if ((active1 & 0x4000000000L) != 0L)
         {
            jjmatchedKind = 102;
            jjmatchedPos = 1;
         }
         else if ((active1 & 0x80000000000000L) != 0L)
            return jjStopAtPos(1, 119);
         else if ((active1 & 0x100000000000000L) != 0L)
            return jjStopAtPos(1, 120);
         else if ((active1 & 0x200000000000000L) != 0L)
            return jjStopAtPos(1, 121);
         else if ((active1 & 0x400000000000000L) != 0L)
            return jjStopAtPos(1, 122);
         else if ((active1 & 0x800000000000000L) != 0L)
            return jjStopAtPos(1, 123);
         else if ((active1 & 0x1000000000000000L) != 0L)
            return jjStopAtPos(1, 124);
         else if ((active1 & 0x2000000000000000L) != 0L)
            return jjStopAtPos(1, 125);
         else if ((active1 & 0x4000000000000000L) != 0L)
            return jjStopAtPos(1, 126);
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x60L);
      case 62:
         if ((active1 & 0x20000000000000L) != 0L)
         {
            jjmatchedKind = 117;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0x40000000000000L, active2, 0x3L);
      case 94:
         if ((active1 & 0x20000000000L) != 0L)
         {
            jjmatchedKind = 105;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x10L);
      case 97:
         return jjMoveStringLiteralDfa2_0(active0, 0x400800480100c00L, active1, 0L, active2, 0L);
      case 98:
         return jjMoveStringLiteralDfa2_0(active0, 0x8000000000000L, active1, 0L, active2, 0L);
      case 101:
         return jjMoveStringLiteralDfa2_0(active0, 0x10006102018000L, active1, 0L, active2, 0L);
      case 102:
         if ((active0 & 0x4000000L) != 0L)
            return jjStartNfaWithStates_0(1, 26, 30);
         break;
      case 104:
         return jjMoveStringLiteralDfa2_0(active0, 0x2002060000000000L, active1, 0L, active2, 0L);
      case 105:
         return jjMoveStringLiteralDfa2_0(active0, 0x4000000200000L, active1, 0L, active2, 0L);
      case 108:
         return jjMoveStringLiteralDfa2_0(active0, 0x41000L, active1, 0L, active2, 0L);
      case 109:
         return jjMoveStringLiteralDfa2_0(active0, 0x100000000000000L, active1, 0x1L, active2, 0L);
      case 110:
         if ((active0 & 0x8000000L) != 0L)
         {
            jjmatchedKind = 27;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0x220000030000000L, active1, 0L, active2, 0L);
      case 111:
         if ((active0 & 0x20000L) != 0L)
            return jjStartNfaWithStates_0(1, 17, 30);
         return jjMoveStringLiteralDfa2_0(active0, 0x8081000000406000L, active1, 0L, active2, 0L);
      case 114:
         return jjMoveStringLiteralDfa2_0(active0, 0x4800180800000200L, active1, 0L, active2, 0L);
      case 115:
         if ((active0 & 0x100L) != 0L)
            return jjStartNfaWithStates_0(1, 8, 30);
         else if ((active0 & 0x40000000L) != 0L)
            return jjStartNfaWithStates_0(1, 30, 30);
         return jjMoveStringLiteralDfa2_0(active0, 0x400000000000L, active1, 0L, active2, 0L);
      case 117:
         return jjMoveStringLiteralDfa2_0(active0, 0x9201800000L, active1, 0L, active2, 0L);
      case 119:
         return jjMoveStringLiteralDfa2_0(active0, 0x10000000000L, active1, 0L, active2, 0L);
      case 120:
         return jjMoveStringLiteralDfa2_0(active0, 0x40000000080000L, active1, 0L, active2, 0L);
      case 121:
         return jjMoveStringLiteralDfa2_0(active0, 0x1000200000000000L, active1, 0L, active2, 0L);
      case 124:
         if ((active1 & 0x8000000000L) != 0L)
         {
            jjmatchedKind = 103;
            jjmatchedPos = 1;
         }
         return jjMoveStringLiteralDfa2_0(active0, 0L, active1, 0L, active2, 0x4L);
      default :
         break;
   }
   return jjStartNfa_0(0, active0, active1, active2);
}
private final int jjMoveStringLiteralDfa2_0(long old0, long active0, long old1, long active1, long old2, long active2)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2)) == 0L)
      return jjStartNfa_0(0, old0, old1, old2); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(1, active0, active1, active2);
      return 2;
   }
   switch(curChar)
   {
      case 46:
         if ((active1 & 0x8000000L) != 0L)
            return jjStopAtPos(2, 91);
         break;
      case 61:
         if ((active1 & 0x8000000000000000L) != 0L)
            return jjStopAtPos(2, 127);
         else if ((active2 & 0x1L) != 0L)
            return jjStopAtPos(2, 128);
         else if ((active2 & 0x4L) != 0L)
            return jjStopAtPos(2, 130);
         else if ((active2 & 0x8L) != 0L)
            return jjStopAtPos(2, 131);
         else if ((active2 & 0x10L) != 0L)
            return jjStopAtPos(2, 132);
         else if ((active2 & 0x20L) != 0L)
            return jjStopAtPos(2, 133);
         else if ((active2 & 0x40L) != 0L)
            return jjStopAtPos(2, 134);
         break;
      case 62:
         if ((active1 & 0x40000000000000L) != 0L)
         {
            jjmatchedKind = 118;
            jjmatchedPos = 2;
         }
         return jjMoveStringLiteralDfa3_0(active0, 0L, active1, 0L, active2, 0x2L);
      case 97:
         return jjMoveStringLiteralDfa3_0(active0, 0x4000000000001000L, active1, 0L, active2, 0L);
      case 98:
         return jjMoveStringLiteralDfa3_0(active0, 0x10001000000000L, active1, 0L, active2, 0L);
      case 99:
         return jjMoveStringLiteralDfa3_0(active0, 0x410000000L, active1, 0L, active2, 0L);
      case 101:
         if ((active0 & 0x400000000000L) != 0L)
            return jjStartNfaWithStates_0(2, 46, 30);
         return jjMoveStringLiteralDfa3_0(active0, 0x200L, active1, 0L, active2, 0L);
      case 102:
         return jjMoveStringLiteralDfa3_0(active0, 0x8000L, active1, 0L, active2, 0L);
      case 105:
         return jjMoveStringLiteralDfa3_0(active0, 0x3030800000000L, active1, 0L, active2, 0L);
      case 108:
         return jjMoveStringLiteralDfa3_0(active0, 0x8000000200110000L, active1, 0L, active2, 0L);
      case 109:
         return jjMoveStringLiteralDfa3_0(active0, 0x80000000L, active1, 0L, active2, 0L);
      case 110:
         return jjMoveStringLiteralDfa3_0(active0, 0x1000000001a06000L, active1, 0L, active2, 0L);
      case 111:
         return jjMoveStringLiteralDfa3_0(active0, 0x800000000000000L, active1, 0L, active2, 0L);
      case 112:
         return jjMoveStringLiteralDfa3_0(active0, 0x140208000000000L, active1, 0x1L, active2, 0L);
      case 114:
         if ((active0 & 0x400000L) != 0L)
            return jjStartNfaWithStates_0(2, 22, 30);
         else if ((active0 & 0x800000000000L) != 0L)
            return jjStartNfaWithStates_0(2, 47, 30);
         return jjMoveStringLiteralDfa3_0(active0, 0x2000040000000000L, active1, 0L, active2, 0L);
      case 115:
         return jjMoveStringLiteralDfa3_0(active0, 0x8000020040400L, active1, 0L, active2, 0L);
      case 116:
         if ((active0 & 0x2000000L) != 0L)
            return jjStartNfaWithStates_0(2, 25, 30);
         else if ((active0 & 0x4000000000L) != 0L)
            return jjStartNfaWithStates_0(2, 38, 30);
         return jjMoveStringLiteralDfa3_0(active0, 0x684002000080800L, active1, 0L, active2, 0L);
      case 117:
         return jjMoveStringLiteralDfa3_0(active0, 0x20080000000000L, active1, 0L, active2, 0L);
      case 119:
         if ((active0 & 0x100000000L) != 0L)
            return jjStartNfaWithStates_0(2, 32, 30);
         break;
      case 121:
         if ((active0 & 0x100000000000L) != 0L)
            return jjStartNfaWithStates_0(2, 44, 30);
         break;
      default :
         break;
   }
   return jjStartNfa_0(1, active0, active1, active2);
}
private final int jjMoveStringLiteralDfa3_0(long old0, long active0, long old1, long active1, long old2, long active2)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2)) == 0L)
      return jjStartNfa_0(1, old0, old1, old2); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(2, active0, active1, active2);
      return 3;
   }
   switch(curChar)
   {
      case 61:
         if ((active2 & 0x2L) != 0L)
            return jjStopAtPos(3, 129);
         break;
      case 97:
         return jjMoveStringLiteralDfa4_0(active0, 0x8000000000208200L, active1, 0L, active2, 0L);
      case 99:
         return jjMoveStringLiteralDfa4_0(active0, 0x1000000001800800L, active1, 0L, active2, 0L);
      case 100:
         if ((active0 & 0x1000000000000L) != 0L)
            return jjStartNfaWithStates_0(3, 48, 30);
         break;
      case 101:
         if ((active0 & 0x400L) != 0L)
            return jjStartNfaWithStates_0(3, 10, 30);
         else if ((active0 & 0x40000L) != 0L)
            return jjStartNfaWithStates_0(3, 18, 30);
         else if ((active0 & 0x80000000000L) != 0L)
            return jjStartNfaWithStates_0(3, 43, 30);
         return jjMoveStringLiteralDfa4_0(active0, 0x200208080090000L, active1, 0L, active2, 0L);
      case 104:
         if ((active0 & 0x4000000000000L) != 0L)
            return jjStartNfaWithStates_0(3, 50, 30);
         break;
      case 105:
         return jjMoveStringLiteralDfa4_0(active0, 0x400000000000000L, active1, 0L, active2, 0L);
      case 107:
         return jjMoveStringLiteralDfa4_0(active0, 0x400000000L, active1, 0L, active2, 0L);
      case 108:
         if ((active0 & 0x200000000L) != 0L)
            return jjStartNfaWithStates_0(3, 33, 30);
         return jjMoveStringLiteralDfa4_0(active0, 0x102001010000000L, active1, 0L, active2, 0L);
      case 109:
         if ((active0 & 0x20000000000000L) != 0L)
            return jjStartNfaWithStates_0(3, 53, 30);
         break;
      case 110:
         return jjMoveStringLiteralDfa4_0(active0, 0x4000000000000000L, active1, 0L, active2, 0L);
      case 111:
         if ((active0 & 0x80000000000000L) != 0L)
            return jjStartNfaWithStates_0(3, 55, 30);
         return jjMoveStringLiteralDfa4_0(active0, 0x2040040000000000L, active1, 0x1L, active2, 0L);
      case 115:
         if ((active0 & 0x20000000000L) != 0L)
            return jjStartNfaWithStates_0(3, 41, 30);
         return jjMoveStringLiteralDfa4_0(active0, 0x103000L, active1, 0L, active2, 0L);
      case 116:
         return jjMoveStringLiteralDfa4_0(active0, 0x808010020004000L, active1, 0L, active2, 0L);
      case 117:
         return jjMoveStringLiteralDfa4_0(active0, 0x10002000000000L, active1, 0L, active2, 0L);
      case 118:
         return jjMoveStringLiteralDfa4_0(active0, 0x800000000L, active1, 0L, active2, 0L);
      default :
         break;
   }
   return jjStartNfa_0(2, active0, active1, active2);
}
private final int jjMoveStringLiteralDfa4_0(long old0, long active0, long old1, long active1, long old2, long active2)
{
   if (((active0 &= old0) | (active1 &= old1) | (active2 &= old2)) == 0L)
      return jjStartNfa_0(2, old0, old1, old2); 
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(3, active0, active1, 0L);
      return 4;
   }
   switch(curChar)
   {
      case 97:
         return jjMoveStringLiteralDfa5_0(active0, 0xc20000000L, active1, 0L);
      case 99:
         return jjMoveStringLiteralDfa5_0(active0, 0x10000000000L, active1, 0L);
      case 101:
         if ((active0 & 0x100000L) != 0L)
            return jjStartNfaWithStates_0(4, 20, 30);
         else if ((active0 & 0x2000000000000L) != 0L)
            return jjStartNfaWithStates_0(4, 49, 30);
         return jjMoveStringLiteralDfa5_0(active0, 0x900000000000000L, active1, 0L);
      case 103:
         return jjMoveStringLiteralDfa5_0(active0, 0x10000000000000L, active1, 0L);
      case 104:
         if ((active0 & 0x800L) != 0L)
            return jjStartNfaWithStates_0(4, 11, 30);
         return jjMoveStringLiteralDfa5_0(active0, 0x1000000000000000L, active1, 0L);
      case 105:
         return jjMoveStringLiteralDfa5_0(active0, 0x1000004000L, active1, 0L);
      case 107:
         if ((active0 & 0x200L) != 0L)
            return jjStartNfaWithStates_0(4, 9, 30);
         break;
      case 108:
         return jjMoveStringLiteralDfa5_0(active0, 0x200000L, active1, 0L);
      case 110:
         return jjMoveStringLiteralDfa5_0(active0, 0x80000L, active1, 0L);
      case 111:
         return jjMoveStringLiteralDfa5_0(active0, 0x200000000000L, active1, 0L);
      case 114:
         if ((active0 & 0x8000000000L) != 0L)
            return jjStartNfaWithStates_0(4, 39, 30);
         return jjMoveStringLiteralDfa5_0(active0, 0x248002000000000L, active1, 0x1L);
      case 115:
         if ((active0 & 0x1000L) != 0L)
            return jjStartNfaWithStates_0(4, 12, 30);
         return jjMoveStringLiteralDfa5_0(active0, 0x4000000080000000L, active1, 0L);
      case 116:
         if ((active0 & 0x2000L) != 0L)
            return jjStartNfaWithStates_0(4, 13, 30);
         return jjMoveStringLiteralDfa5_0(active0, 0x8000000001810000L, active1, 0L);
      case 117:
         return jjMoveStringLiteralDfa5_0(active0, 0x10008000L, active1, 0L);
      case 118:
         return jjMoveStringLiteralDfa5_0(active0, 0x400000000000000L, active1, 0L);
      case 119:
         if ((active0 & 0x40000000000L) != 0L)
         {
            jjmatchedKind = 42;
            jjmatchedPos = 4;
         }
         return jjMoveStringLiteralDfa5_0(active0, 0x2000000000000000L, active1, 0L);
      default :
         break;
   }
   return jjStartNfa_0(3, active0, active1, 0L);
}
private final int jjMoveStringLiteralDfa5_0(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_0(3, old0, old1, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(4, active0, active1, 0L);
      return 5;
   }
   switch(curChar)
   {
      case 97:
         return jjMoveStringLiteralDfa6_0(active0, 0x8000000000000L, active1, 0L);
      case 99:
         if ((active0 & 0x1000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 36, 30);
         return jjMoveStringLiteralDfa6_0(active0, 0x800000000000000L, active1, 0L);
      case 100:
         return jjMoveStringLiteralDfa6_0(active0, 0x10080000L, active1, 0L);
      case 101:
         if ((active0 & 0x10000L) != 0L)
            return jjStartNfaWithStates_0(5, 16, 30);
         else if ((active0 & 0x400000000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 58, 30);
         break;
      case 102:
         if ((active0 & 0x200000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 45, 30);
         return jjMoveStringLiteralDfa6_0(active0, 0x200000000000000L, active1, 0L);
      case 103:
         return jjMoveStringLiteralDfa6_0(active0, 0x10000400000000L, active1, 0L);
      case 104:
         if ((active0 & 0x10000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 40, 30);
         break;
      case 105:
         return jjMoveStringLiteralDfa6_0(active0, 0xc000000001800000L, active1, 0L);
      case 108:
         return jjMoveStringLiteralDfa6_0(active0, 0x208000L, active1, 0L);
      case 109:
         return jjMoveStringLiteralDfa6_0(active0, 0x100000000000000L, active1, 0L);
      case 110:
         if ((active0 & 0x2000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 37, 30);
         return jjMoveStringLiteralDfa6_0(active0, 0x20004000L, active1, 0L);
      case 112:
         return jjMoveStringLiteralDfa6_0(active0, 0x80000000L, active1, 0L);
      case 114:
         return jjMoveStringLiteralDfa6_0(active0, 0x1000000000000000L, active1, 0L);
      case 115:
         if ((active0 & 0x2000000000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 61, 30);
         break;
      case 116:
         if ((active0 & 0x40000000000000L) != 0L)
            return jjStartNfaWithStates_0(5, 54, 30);
         else if ((active1 & 0x1L) != 0L)
            return jjStartNfaWithStates_0(5, 64, 30);
         return jjMoveStringLiteralDfa6_0(active0, 0x800000000L, active1, 0L);
      default :
         break;
   }
   return jjStartNfa_0(4, active0, active1, 0L);
}
private final int jjMoveStringLiteralDfa6_0(long old0, long active0, long old1, long active1)
{
   if (((active0 &= old0) | (active1 &= old1)) == 0L)
      return jjStartNfa_0(4, old0, old1, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(5, active0, 0L, 0L);
      return 6;
   }
   switch(curChar)
   {
      case 97:
         return jjMoveStringLiteralDfa7_0(active0, 0x200000080000000L);
      case 99:
         return jjMoveStringLiteralDfa7_0(active0, 0x8000020000000L);
      case 101:
         if ((active0 & 0x10000000L) != 0L)
            return jjStartNfaWithStates_0(6, 28, 30);
         else if ((active0 & 0x400000000L) != 0L)
            return jjStartNfaWithStates_0(6, 34, 30);
         else if ((active0 & 0x800000000L) != 0L)
            return jjStartNfaWithStates_0(6, 35, 30);
         return jjMoveStringLiteralDfa7_0(active0, 0x4110000000000000L);
      case 108:
         return jjMoveStringLiteralDfa7_0(active0, 0x8000000000000000L);
      case 111:
         return jjMoveStringLiteralDfa7_0(active0, 0x1000000001800000L);
      case 115:
         if ((active0 & 0x80000L) != 0L)
            return jjStartNfaWithStates_0(6, 19, 30);
         break;
      case 116:
         if ((active0 & 0x8000L) != 0L)
            return jjStartNfaWithStates_0(6, 15, 30);
         return jjMoveStringLiteralDfa7_0(active0, 0x800000000000000L);
      case 117:
         return jjMoveStringLiteralDfa7_0(active0, 0x4000L);
      case 121:
         if ((active0 & 0x200000L) != 0L)
            return jjStartNfaWithStates_0(6, 21, 30);
         break;
      default :
         break;
   }
   return jjStartNfa_0(5, active0, 0L, 0L);
}
private final int jjMoveStringLiteralDfa7_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(5, old0, 0L, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(6, active0, 0L, 0L);
      return 7;
   }
   switch(curChar)
   {
      case 99:
         return jjMoveStringLiteralDfa8_0(active0, 0x200000080000000L);
      case 101:
         if ((active0 & 0x4000L) != 0L)
            return jjStartNfaWithStates_0(7, 14, 30);
         else if ((active0 & 0x8000000000000000L) != 0L)
            return jjStartNfaWithStates_0(7, 63, 30);
         return jjMoveStringLiteralDfa8_0(active0, 0x800000020000000L);
      case 110:
         if ((active0 & 0x800000L) != 0L)
            return jjStartNfaWithStates_0(7, 23, 30);
         else if ((active0 & 0x1000000L) != 0L)
            return jjStartNfaWithStates_0(7, 24, 30);
         return jjMoveStringLiteralDfa8_0(active0, 0x5100000000000000L);
      case 114:
         if ((active0 & 0x10000000000000L) != 0L)
            return jjStartNfaWithStates_0(7, 52, 30);
         break;
      case 116:
         if ((active0 & 0x8000000000000L) != 0L)
            return jjStartNfaWithStates_0(7, 51, 30);
         break;
      default :
         break;
   }
   return jjStartNfa_0(6, active0, 0L, 0L);
}
private final int jjMoveStringLiteralDfa8_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(6, old0, 0L, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(7, active0, 0L, 0L);
      return 8;
   }
   switch(curChar)
   {
      case 100:
         if ((active0 & 0x800000000000000L) != 0L)
            return jjStartNfaWithStates_0(8, 59, 30);
         break;
      case 101:
         if ((active0 & 0x80000000L) != 0L)
            return jjStartNfaWithStates_0(8, 31, 30);
         else if ((active0 & 0x200000000000000L) != 0L)
            return jjStartNfaWithStates_0(8, 57, 30);
         break;
      case 105:
         return jjMoveStringLiteralDfa9_0(active0, 0x1000000000000000L);
      case 111:
         return jjMoveStringLiteralDfa9_0(active0, 0x20000000L);
      case 116:
         if ((active0 & 0x4000000000000000L) != 0L)
            return jjStartNfaWithStates_0(8, 62, 30);
         return jjMoveStringLiteralDfa9_0(active0, 0x100000000000000L);
      default :
         break;
   }
   return jjStartNfa_0(7, active0, 0L, 0L);
}
private final int jjMoveStringLiteralDfa9_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(7, old0, 0L, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(8, active0, 0L, 0L);
      return 9;
   }
   switch(curChar)
   {
      case 102:
         if ((active0 & 0x20000000L) != 0L)
            return jjStartNfaWithStates_0(9, 29, 30);
         break;
      case 115:
         if ((active0 & 0x100000000000000L) != 0L)
            return jjStartNfaWithStates_0(9, 56, 30);
         break;
      case 122:
         return jjMoveStringLiteralDfa10_0(active0, 0x1000000000000000L);
      default :
         break;
   }
   return jjStartNfa_0(8, active0, 0L, 0L);
}
private final int jjMoveStringLiteralDfa10_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(8, old0, 0L, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(9, active0, 0L, 0L);
      return 10;
   }
   switch(curChar)
   {
      case 101:
         return jjMoveStringLiteralDfa11_0(active0, 0x1000000000000000L);
      default :
         break;
   }
   return jjStartNfa_0(9, active0, 0L, 0L);
}
private final int jjMoveStringLiteralDfa11_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(9, old0, 0L, 0L);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(10, active0, 0L, 0L);
      return 11;
   }
   switch(curChar)
   {
      case 100:
         if ((active0 & 0x1000000000000000L) != 0L)
            return jjStartNfaWithStates_0(11, 60, 30);
         break;
      default :
         break;
   }
   return jjStartNfa_0(10, active0, 0L, 0L);
}
private final void jjCheckNAdd(int state)
{
   if (jjrounds[state] != jjround)
   {
      jjstateSet[jjnewStateCnt++] = state;
      jjrounds[state] = jjround;
   }
}
private final void jjAddStates(int start, int end)
{
   do {
      jjstateSet[jjnewStateCnt++] = jjnextStates[start];
   } while (start++ != end);
}
private final void jjCheckNAddTwoStates(int state1, int state2)
{
   jjCheckNAdd(state1);
   jjCheckNAdd(state2);
}
private final void jjCheckNAddStates(int start, int end)
{
   do {
      jjCheckNAdd(jjnextStates[start]);
   } while (start++ != end);
}
private final void jjCheckNAddStates(int start)
{
   jjCheckNAdd(jjnextStates[start]);
   jjCheckNAdd(jjnextStates[start + 1]);
}
static final long[] jjbitVec0 = {
   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
};
private final int jjMoveNfa_0(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 124;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 2:
                  if ((0x3ff000000000000L & l) != 0L)
                  {
                     if (kind > 68)
                        kind = 68;
                     jjCheckNAddStates(0, 3);
                  }
                  else if ((0x100000200L & l) != 0L)
                  {
                     if (kind > 2)
                        kind = 2;
                     jjCheckNAdd(1);
                  }
                  else if ((0x2400L & l) != 0L)
                  {
                     if (kind > 1)
                        kind = 1;
                     jjCheckNAdd(0);
                  }
                  else if (curChar == 34)
                  {
                     if (kind > 72)
                        kind = 72;
                     jjCheckNAddStates(4, 12);
                  }
                  else if (curChar == 39)
                  {
                     if (kind > 72)
                        kind = 72;
                     jjCheckNAddStates(13, 18);
                  }
                  else if (curChar == 36)
                  {
                     if (kind > 78)
                        kind = 78;
                     jjCheckNAdd(30);
                  }
                  else if (curChar == 47)
                     jjAddStates(19, 20);
                  else if (curChar == 46)
                     jjCheckNAdd(5);
                  if ((0x3fe000000000000L & l) != 0L)
                  {
                     if (kind > 65)
                        kind = 65;
                     jjCheckNAdd(3);
                  }
                  else if (curChar == 48)
                  {
                     if (kind > 67)
                        kind = 67;
                     jjCheckNAddTwoStates(43, 45);
                  }
                  break;
               case 10:
                  if ((0xdfff7bffffffdbffL & l) != 0L)
                     jjCheckNAddStates(21, 23);
                  break;
               case 0:
                  if ((0x2400L & l) == 0L)
                     break;
                  if (kind > 1)
                     kind = 1;
                  jjCheckNAdd(0);
                  break;
               case 1:
                  if ((0x100000200L & l) == 0L)
                     break;
                  if (kind > 2)
                     kind = 2;
                  jjCheckNAdd(1);
                  break;
               case 3:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 65)
                     kind = 65;
                  jjCheckNAdd(3);
                  break;
               case 4:
                  if (curChar == 46)
                     jjCheckNAdd(5);
                  break;
               case 5:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 68)
                     kind = 68;
                  jjCheckNAddTwoStates(5, 6);
                  break;
               case 7:
                  if ((0x280000000000L & l) != 0L)
                     jjCheckNAdd(8);
                  break;
               case 8:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 68)
                     kind = 68;
                  jjCheckNAdd(8);
                  break;
               case 9:
                  if (curChar == 47)
                     jjAddStates(19, 20);
                  break;
               case 11:
                  if ((0xffff7fffffffdbffL & l) != 0L)
                     jjCheckNAddStates(21, 23);
                  break;
               case 12:
                  if (curChar == 47)
                     jjCheckNAddStates(21, 23);
                  break;
               case 14:
                  if (curChar != 47)
                     break;
                  if (kind > 77)
                     kind = 77;
                  jjAddStates(24, 27);
                  break;
               case 29:
                  if (curChar != 36)
                     break;
                  if (kind > 78)
                     kind = 78;
                  jjCheckNAdd(30);
                  break;
               case 30:
                  if ((0x3ff001000000000L & l) == 0L)
                     break;
                  if (kind > 78)
                     kind = 78;
                  jjCheckNAdd(30);
                  break;
               case 31:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 68)
                     kind = 68;
                  jjCheckNAddStates(0, 3);
                  break;
               case 32:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(32, 33);
                  break;
               case 33:
                  if (curChar != 46)
                     break;
                  if (kind > 68)
                     kind = 68;
                  jjCheckNAddTwoStates(34, 35);
                  break;
               case 34:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 68)
                     kind = 68;
                  jjCheckNAddTwoStates(34, 35);
                  break;
               case 36:
                  if ((0x280000000000L & l) != 0L)
                     jjCheckNAdd(37);
                  break;
               case 37:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 68)
                     kind = 68;
                  jjCheckNAdd(37);
                  break;
               case 38:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 68)
                     kind = 68;
                  jjCheckNAddTwoStates(38, 39);
                  break;
               case 40:
                  if ((0x280000000000L & l) != 0L)
                     jjCheckNAdd(41);
                  break;
               case 41:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 68)
                     kind = 68;
                  jjCheckNAdd(41);
                  break;
               case 42:
                  if (curChar != 48)
                     break;
                  if (kind > 67)
                     kind = 67;
                  jjCheckNAddTwoStates(43, 45);
                  break;
               case 44:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 66)
                     kind = 66;
                  jjstateSet[jjnewStateCnt++] = 44;
                  break;
               case 45:
                  if ((0xff000000000000L & l) == 0L)
                     break;
                  if (kind > 67)
                     kind = 67;
                  jjCheckNAdd(45);
                  break;
               case 46:
                  if (curChar != 39)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(13, 18);
                  break;
               case 47:
                  if ((0xffffff7fffffdbffL & l) != 0L)
                     jjCheckNAddStates(28, 30);
                  break;
               case 49:
                  if ((0x8400000000L & l) != 0L)
                     jjCheckNAddStates(28, 30);
                  break;
               case 50:
                  if (curChar == 39 && kind > 70)
                     kind = 70;
                  break;
               case 51:
                  if ((0xff000000000000L & l) != 0L)
                     jjCheckNAddStates(31, 34);
                  break;
               case 52:
                  if ((0xff000000000000L & l) != 0L)
                     jjCheckNAddStates(28, 30);
                  break;
               case 53:
                  if ((0xf000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 54;
                  break;
               case 54:
                  if ((0xff000000000000L & l) != 0L)
                     jjCheckNAdd(52);
                  break;
               case 56:
               case 61:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAdd(57);
                  break;
               case 57:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(28, 30);
                  break;
               case 59:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 60;
                  break;
               case 60:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 61;
                  break;
               case 62:
                  if ((0xffffff7fffffdbffL & l) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(35, 37);
                  break;
               case 64:
                  if ((0x8400000000L & l) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(35, 37);
                  break;
               case 65:
                  if ((0x2400L & l) != 0L && kind > 72)
                     kind = 72;
                  break;
               case 66:
                  if ((0xff000000000000L & l) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(38, 41);
                  break;
               case 67:
                  if ((0xff000000000000L & l) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(35, 37);
                  break;
               case 68:
                  if ((0xf000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 69;
                  break;
               case 69:
                  if ((0xff000000000000L & l) != 0L)
                     jjCheckNAdd(67);
                  break;
               case 71:
               case 76:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAdd(72);
                  break;
               case 72:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(35, 37);
                  break;
               case 74:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 75;
                  break;
               case 75:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 76;
                  break;
               case 77:
                  if (curChar != 34)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(4, 12);
                  break;
               case 78:
                  if ((0xfffffffbffffdbffL & l) != 0L)
                     jjCheckNAddStates(42, 44);
                  break;
               case 80:
                  if ((0x8400000000L & l) != 0L)
                     jjCheckNAddStates(42, 44);
                  break;
               case 81:
                  if (curChar == 34 && kind > 70)
                     kind = 70;
                  break;
               case 82:
                  if ((0xff000000000000L & l) != 0L)
                     jjCheckNAddStates(45, 48);
                  break;
               case 83:
                  if ((0xff000000000000L & l) != 0L)
                     jjCheckNAddStates(42, 44);
                  break;
               case 84:
                  if ((0xf000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 85;
                  break;
               case 85:
                  if ((0xff000000000000L & l) != 0L)
                     jjCheckNAdd(83);
                  break;
               case 87:
               case 92:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAdd(88);
                  break;
               case 88:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(42, 44);
                  break;
               case 90:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 91;
                  break;
               case 91:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 92;
                  break;
               case 93:
                  if ((0xfffffffbffffffffL & l) != 0L)
                     jjCheckNAddStates(49, 51);
                  break;
               case 95:
                  if ((0x2400L & l) != 0L)
                     jjCheckNAddStates(49, 51);
                  break;
               case 96:
                  if (curChar == 10)
                     jjCheckNAddStates(49, 51);
                  break;
               case 97:
                  if (curChar == 13)
                     jjstateSet[jjnewStateCnt++] = 96;
                  break;
               case 98:
                  if ((0x8400000000L & l) != 0L)
                     jjCheckNAddStates(49, 51);
                  break;
               case 99:
                  if ((0xff000000000000L & l) != 0L)
                     jjCheckNAddStates(52, 55);
                  break;
               case 100:
                  if ((0xff000000000000L & l) != 0L)
                     jjCheckNAddStates(49, 51);
                  break;
               case 101:
                  if ((0xf000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 102;
                  break;
               case 102:
                  if ((0xff000000000000L & l) != 0L)
                     jjCheckNAdd(100);
                  break;
               case 104:
               case 109:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAdd(105);
                  break;
               case 105:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(49, 51);
                  break;
               case 107:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 108;
                  break;
               case 108:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 109;
                  break;
               case 110:
                  if ((0xfffffffbffffdbffL & l) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(56, 58);
                  break;
               case 112:
                  if ((0x8400000000L & l) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(56, 58);
                  break;
               case 113:
                  if ((0xff000000000000L & l) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(59, 62);
                  break;
               case 114:
                  if ((0xff000000000000L & l) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(56, 58);
                  break;
               case 115:
                  if ((0xf000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 116;
                  break;
               case 116:
                  if ((0xff000000000000L & l) != 0L)
                     jjCheckNAdd(114);
                  break;
               case 118:
               case 123:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAdd(119);
                  break;
               case 119:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(56, 58);
                  break;
               case 121:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 122;
                  break;
               case 122:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 123;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 2:
               case 30:
                  if ((0x7fffffe87fffffeL & l) == 0L)
                     break;
                  if (kind > 78)
                     kind = 78;
                  jjCheckNAdd(30);
                  break;
               case 10:
                  jjCheckNAddStates(21, 23);
                  if (curChar == 92)
                     jjCheckNAdd(12);
                  break;
               case 6:
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(63, 64);
                  break;
               case 11:
                  jjCheckNAddStates(21, 23);
                  break;
               case 13:
                  if (curChar == 92)
                     jjCheckNAdd(12);
                  break;
               case 15:
                  if ((0x228000000000L & l) != 0L && kind > 77)
                     kind = 77;
                  break;
               case 16:
                  if (curChar == 105)
                     jjCheckNAddStates(65, 68);
                  break;
               case 17:
                  if (curChar == 103 && kind > 77)
                     kind = 77;
                  break;
               case 18:
                  if (curChar == 109 && kind > 77)
                     kind = 77;
                  break;
               case 19:
                  if (curChar == 103)
                     jjCheckNAdd(18);
                  break;
               case 20:
                  if (curChar == 109)
                     jjCheckNAdd(17);
                  break;
               case 21:
                  if (curChar == 103)
                     jjCheckNAddStates(69, 72);
                  break;
               case 22:
                  if (curChar == 105 && kind > 77)
                     kind = 77;
                  break;
               case 23:
                  if (curChar == 109)
                     jjCheckNAdd(22);
                  break;
               case 24:
                  if (curChar == 105)
                     jjCheckNAdd(18);
                  break;
               case 25:
                  if (curChar == 109)
                     jjCheckNAddStates(73, 76);
                  break;
               case 26:
                  if (curChar == 105)
                     jjCheckNAdd(17);
                  break;
               case 27:
                  if (curChar == 103)
                     jjCheckNAdd(22);
                  break;
               case 28:
                  if (curChar == 92)
                     jjCheckNAdd(12);
                  break;
               case 35:
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(77, 78);
                  break;
               case 39:
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(79, 80);
                  break;
               case 43:
                  if ((0x100000001000000L & l) != 0L)
                     jjCheckNAdd(44);
                  break;
               case 44:
                  if ((0x7e0000007eL & l) == 0L)
                     break;
                  if (kind > 66)
                     kind = 66;
                  jjCheckNAdd(44);
                  break;
               case 47:
                  if ((0xffffffffefffffffL & l) != 0L)
                     jjCheckNAddStates(28, 30);
                  break;
               case 48:
                  if (curChar == 92)
                     jjAddStates(81, 85);
                  break;
               case 49:
                  if ((0x14404438000000L & l) != 0L)
                     jjCheckNAddStates(28, 30);
                  break;
               case 55:
                  if (curChar == 120)
                     jjstateSet[jjnewStateCnt++] = 56;
                  break;
               case 56:
               case 61:
                  if ((0x7e0000007eL & l) != 0L)
                     jjCheckNAdd(57);
                  break;
               case 57:
                  if ((0x7e0000007eL & l) != 0L)
                     jjCheckNAddStates(28, 30);
                  break;
               case 58:
                  if (curChar == 117)
                     jjstateSet[jjnewStateCnt++] = 59;
                  break;
               case 59:
                  if ((0x7e0000007eL & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 60;
                  break;
               case 60:
                  if ((0x7e0000007eL & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 61;
                  break;
               case 62:
                  if ((0xffffffffefffffffL & l) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(35, 37);
                  break;
               case 63:
                  if (curChar == 92)
                     jjAddStates(86, 90);
                  break;
               case 64:
                  if ((0x14404438000000L & l) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(35, 37);
                  break;
               case 70:
                  if (curChar == 120)
                     jjstateSet[jjnewStateCnt++] = 71;
                  break;
               case 71:
               case 76:
                  if ((0x7e0000007eL & l) != 0L)
                     jjCheckNAdd(72);
                  break;
               case 72:
                  if ((0x7e0000007eL & l) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(35, 37);
                  break;
               case 73:
                  if (curChar == 117)
                     jjstateSet[jjnewStateCnt++] = 74;
                  break;
               case 74:
                  if ((0x7e0000007eL & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 75;
                  break;
               case 75:
                  if ((0x7e0000007eL & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 76;
                  break;
               case 78:
                  if ((0xffffffffefffffffL & l) != 0L)
                     jjCheckNAddStates(42, 44);
                  break;
               case 79:
                  if (curChar == 92)
                     jjAddStates(91, 95);
                  break;
               case 80:
                  if ((0x14404438000000L & l) != 0L)
                     jjCheckNAddStates(42, 44);
                  break;
               case 86:
                  if (curChar == 120)
                     jjstateSet[jjnewStateCnt++] = 87;
                  break;
               case 87:
               case 92:
                  if ((0x7e0000007eL & l) != 0L)
                     jjCheckNAdd(88);
                  break;
               case 88:
                  if ((0x7e0000007eL & l) != 0L)
                     jjCheckNAddStates(42, 44);
                  break;
               case 89:
                  if (curChar == 117)
                     jjstateSet[jjnewStateCnt++] = 90;
                  break;
               case 90:
                  if ((0x7e0000007eL & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 91;
                  break;
               case 91:
                  if ((0x7e0000007eL & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 92;
                  break;
               case 93:
                  if ((0xffffffffefffffffL & l) != 0L)
                     jjCheckNAddStates(49, 51);
                  break;
               case 94:
                  if (curChar == 92)
                     jjAddStates(96, 102);
                  break;
               case 98:
                  if ((0x14404438000000L & l) != 0L)
                     jjCheckNAddStates(49, 51);
                  break;
               case 103:
                  if (curChar == 120)
                     jjstateSet[jjnewStateCnt++] = 104;
                  break;
               case 104:
               case 109:
                  if ((0x7e0000007eL & l) != 0L)
                     jjCheckNAdd(105);
                  break;
               case 105:
                  if ((0x7e0000007eL & l) != 0L)
                     jjCheckNAddStates(49, 51);
                  break;
               case 106:
                  if (curChar == 117)
                     jjstateSet[jjnewStateCnt++] = 107;
                  break;
               case 107:
                  if ((0x7e0000007eL & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 108;
                  break;
               case 108:
                  if ((0x7e0000007eL & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 109;
                  break;
               case 110:
                  if ((0xffffffffefffffffL & l) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(56, 58);
                  break;
               case 111:
                  if (curChar == 92)
                     jjAddStates(103, 107);
                  break;
               case 112:
                  if ((0x14404438000000L & l) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(56, 58);
                  break;
               case 117:
                  if (curChar == 120)
                     jjstateSet[jjnewStateCnt++] = 118;
                  break;
               case 118:
               case 123:
                  if ((0x7e0000007eL & l) != 0L)
                     jjCheckNAdd(119);
                  break;
               case 119:
                  if ((0x7e0000007eL & l) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(56, 58);
                  break;
               case 120:
                  if (curChar == 117)
                     jjstateSet[jjnewStateCnt++] = 121;
                  break;
               case 121:
                  if ((0x7e0000007eL & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 122;
                  break;
               case 122:
                  if ((0x7e0000007eL & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 123;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 10:
               case 11:
                  if ((jjbitVec0[i2] & l2) != 0L)
                     jjCheckNAddStates(21, 23);
                  break;
               case 47:
                  if ((jjbitVec0[i2] & l2) != 0L)
                     jjAddStates(28, 30);
                  break;
               case 62:
                  if ((jjbitVec0[i2] & l2) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(35, 37);
                  break;
               case 78:
                  if ((jjbitVec0[i2] & l2) != 0L)
                     jjCheckNAddStates(42, 44);
                  break;
               case 93:
                  if ((jjbitVec0[i2] & l2) != 0L)
                     jjCheckNAddStates(49, 51);
                  break;
               case 110:
                  if ((jjbitVec0[i2] & l2) == 0L)
                     break;
                  if (kind > 72)
                     kind = 72;
                  jjCheckNAddStates(56, 58);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 124 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
private final int jjMoveStringLiteralDfa0_2()
{
   switch(curChar)
   {
      case 42:
         return jjMoveStringLiteralDfa1_2(0x40L);
      default :
         return 1;
   }
}
private final int jjMoveStringLiteralDfa1_2(long active0)
{
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      return 1;
   }
   switch(curChar)
   {
      case 47:
         if ((active0 & 0x40L) != 0L)
            return jjStopAtPos(1, 6);
         break;
      default :
         return 2;
   }
   return 2;
}
private final int jjMoveStringLiteralDfa0_1()
{
   return jjMoveNfa_1(4, 0);
}
private final int jjMoveNfa_1(int startState, int curPos)
{
   int[] nextStates;
   int startsAt = 0;
   jjnewStateCnt = 4;
   int i = 1;
   jjstateSet[0] = startState;
   int j, kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 4:
                  if ((0xffffffffffffdbffL & l) != 0L)
                  {
                     if (kind > 5)
                        kind = 5;
                     jjCheckNAddStates(108, 110);
                  }
                  else if ((0x2400L & l) != 0L)
                  {
                     if (kind > 5)
                        kind = 5;
                  }
                  if (curChar == 13)
                     jjstateSet[jjnewStateCnt++] = 2;
                  break;
               case 0:
                  if ((0xffffffffffffdbffL & l) == 0L)
                     break;
                  kind = 5;
                  jjCheckNAddStates(108, 110);
                  break;
               case 1:
                  if ((0x2400L & l) != 0L && kind > 5)
                     kind = 5;
                  break;
               case 2:
                  if (curChar == 10 && kind > 5)
                     kind = 5;
                  break;
               case 3:
                  if (curChar == 13)
                     jjstateSet[jjnewStateCnt++] = 2;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 4:
               case 0:
                  kind = 5;
                  jjCheckNAddStates(108, 110);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         MatchLoop: do
         {
            switch(jjstateSet[--i])
            {
               case 4:
               case 0:
                  if ((jjbitVec0[i2] & l2) == 0L)
                     break;
                  if (kind > 5)
                     kind = 5;
                  jjCheckNAddStates(108, 110);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 4 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
static final int[] jjnextStates = {
   32, 33, 38, 39, 78, 79, 81, 93, 81, 110, 111, 65, 94, 47, 48, 50, 
   62, 63, 65, 10, 28, 11, 13, 14, 15, 16, 21, 25, 47, 48, 50, 47, 
   48, 52, 50, 62, 63, 65, 62, 63, 67, 65, 78, 79, 81, 78, 79, 83, 
   81, 93, 81, 94, 93, 100, 81, 94, 110, 111, 65, 110, 111, 114, 65, 7, 
   8, 17, 18, 19, 20, 22, 18, 23, 24, 22, 17, 26, 27, 36, 37, 40, 
   41, 49, 51, 53, 55, 58, 64, 66, 68, 70, 73, 80, 82, 84, 86, 89, 
   95, 97, 98, 99, 101, 103, 106, 112, 113, 115, 117, 120, 0, 1, 3, 
};
public static final String[] jjstrLiteralImages = {
"", null, null, null, null, null, null, null, "\141\163", 
"\142\162\145\141\153", "\143\141\163\145", "\143\141\164\143\150", "\143\154\141\163\163", 
"\143\157\156\163\164", "\143\157\156\164\151\156\165\145", "\144\145\146\141\165\154\164", 
"\144\145\154\145\164\145", "\144\157", "\145\154\163\145", "\145\170\164\145\156\144\163", 
"\146\141\154\163\145", "\146\151\156\141\154\154\171", "\146\157\162", 
"\146\165\156\143\164\151\157\156", "\106\165\156\143\164\151\157\156", "\147\145\164", "\151\146", "\151\156", 
"\151\156\143\154\165\144\145", "\151\156\163\164\141\156\143\145\157\146", "\151\163", 
"\156\141\155\145\163\160\141\143\145", "\156\145\167", "\156\165\154\154", "\160\141\143\153\141\147\145", 
"\160\162\151\166\141\164\145", "\160\165\142\154\151\143", "\162\145\164\165\162\156", "\163\145\164", 
"\163\165\160\145\162", "\163\167\151\164\143\150", "\164\150\151\163", "\164\150\162\157\167", 
"\164\162\165\145", "\164\162\171", "\164\171\160\145\157\146", "\165\163\145", "\166\141\162", 
"\166\157\151\144", "\167\150\151\154\145", "\167\151\164\150", 
"\141\142\163\164\162\141\143\164", "\144\145\142\165\147\147\145\162", "\145\156\165\155", 
"\145\170\160\157\162\164", "\147\157\164\157", "\151\155\160\154\145\155\145\156\164\163", 
"\151\156\164\145\162\146\141\143\145", "\156\141\164\151\166\145", "\160\162\157\164\145\143\164\145\144", 
"\163\171\156\143\150\162\157\156\151\172\145\144", "\164\150\162\157\167\163", "\164\162\141\156\163\151\145\156\164", 
"\166\157\154\141\164\151\154\145", "\151\155\160\157\162\164", null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, "\50", "\51", "\173", "\175", 
"\133", "\135", "\73", "\54", "\56", "\72\72", "\56\56\56", "\75", "\76", "\74", 
"\41", "\176", "\77", "\72", "\75\75", "\74\75", "\76\75", "\41\75", "\174\174", 
"\46\46", "\136\136", "\53\53", "\55\55", "\53", "\55", "\52", "\57", "\46", "\174", 
"\136", "\45", "\74\74", "\76\76", "\76\76\76", "\53\75", "\55\75", "\52\75", 
"\57\75", "\46\75", "\174\75", "\136\75", "\45\75", "\74\74\75", "\76\76\75", 
"\76\76\76\75", "\174\174\75", "\46\46\75", "\136\136\75", "\75\75\75", "\41\75\75", };
public static final String[] lexStateNames = {
   "DEFAULT", 
   "IN_SINGLE_LINE_COMMENT", 
   "IN_MULTI_LINE_COMMENT", 
};
public static final int[] jjnewLexState = {
   -1, -1, -1, 1, 2, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
};
static final long[] jjtoToken = {
   0xffffffffffffff01L, 0xfffffffffffe615fL, 0x7fL, 
};
static final long[] jjtoSkip = {
   0x66L, 0x0L, 0x0L, 
};
static final long[] jjtoSpecial = {
   0x66L, 0x0L, 0x0L, 
};
static final long[] jjtoMore = {
   0x98L, 0x0L, 0x0L, 
};
protected SimpleCharStream input_stream;
private final int[] jjrounds = new int[124];
private final int[] jjstateSet = new int[248];
StringBuffer image;
int jjimageLen;
int lengthOfMatch;
protected char curChar;
public JSParser20TokenManager(SimpleCharStream stream){
   if (SimpleCharStream.staticFlag)
      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
   input_stream = stream;
}
public JSParser20TokenManager(SimpleCharStream stream, int lexState){
   this(stream);
   SwitchTo(lexState);
}
public void ReInit(SimpleCharStream stream)
{
   jjmatchedPos = jjnewStateCnt = 0;
   curLexState = defaultLexState;
   input_stream = stream;
   ReInitRounds();
}
private final void ReInitRounds()
{
   int i;
   jjround = 0x80000001;
   for (i = 124; i-- > 0;)
      jjrounds[i] = 0x80000000;
}
public void ReInit(SimpleCharStream stream, int lexState)
{
   ReInit(stream);
   SwitchTo(lexState);
}
public void SwitchTo(int lexState)
{
   if (lexState >= 3 || lexState < 0)
      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
   else
      curLexState = lexState;
}

protected Token jjFillToken()
{
   Token t = Token.newToken(jjmatchedKind);
   t.kind = jjmatchedKind;
   if (jjmatchedPos < 0)
   {
      if (image == null)
         t.image = "";
      else
         t.image = image.toString();
      t.beginLine = t.endLine = input_stream.getBeginLine();
      t.beginColumn = t.endColumn = input_stream.getBeginColumn();
   }
   else
   {
      String im = jjstrLiteralImages[jjmatchedKind];
      t.image = (im == null) ? input_stream.GetImage() : im;
      t.beginLine = input_stream.getBeginLine();
      t.beginColumn = input_stream.getBeginColumn();
      t.endLine = input_stream.getEndLine();
      t.endColumn = input_stream.getEndColumn();
   }
   return t;
}

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

public Token getNextToken() 
{
  int kind;
  Token specialToken = null;
  Token matchedToken;
  int curPos = 0;

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

   for (;;)
   {
     switch(curLexState)
     {
       case 0:
         jjmatchedKind = 0x7fffffff;
         jjmatchedPos = 0;
         curPos = jjMoveStringLiteralDfa0_0();
         break;
       case 1:
         jjmatchedKind = 5;
         jjmatchedPos = -1;
         curPos = 0;
         curPos = jjMoveStringLiteralDfa0_1();
         if (jjmatchedPos < 0 || (jjmatchedPos == 0 && jjmatchedKind > 7))
         {
            jjmatchedKind = 7;
            jjmatchedPos = 0;
         }
         break;
       case 2:
         jjmatchedKind = 0x7fffffff;
         jjmatchedPos = 0;
         curPos = jjMoveStringLiteralDfa0_2();
         if (jjmatchedPos == 0 && jjmatchedKind > 7)
         {
            jjmatchedKind = 7;
         }
         break;
     }
     if (jjmatchedKind != 0x7fffffff)
     {
        if (jjmatchedPos + 1 < curPos)
           input_stream.backup(curPos - jjmatchedPos - 1);
        if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
        {
           matchedToken = jjFillToken();
           matchedToken.specialToken = specialToken;
           TokenLexicalActions(matchedToken);
       if (jjnewLexState[jjmatchedKind] != -1)
         curLexState = jjnewLexState[jjmatchedKind];
           return matchedToken;
        }
        else if ((jjtoSkip[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
        {
           if ((jjtoSpecial[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
           {
              matchedToken = jjFillToken();
              if (specialToken == null)
                 specialToken = matchedToken;
              else
              {
                 matchedToken.specialToken = specialToken;
                 specialToken = (specialToken.next = matchedToken);
              }
              SkipLexicalActions(matchedToken);
           }
           else 
              SkipLexicalActions(null);
         if (jjnewLexState[jjmatchedKind] != -1)
           curLexState = jjnewLexState[jjmatchedKind];
           continue EOFLoop;
        }
        jjimageLen += jjmatchedPos + 1;
      if (jjnewLexState[jjmatchedKind] != -1)
        curLexState = jjnewLexState[jjmatchedKind];
        curPos = 0;
        jjmatchedKind = 0x7fffffff;
        try {
           curChar = input_stream.readChar();
           continue;
        }
        catch (java.io.IOException e1) { }
     }
     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);
   }
  }
}

void SkipLexicalActions(Token matchedToken)
{
   switch(jjmatchedKind)
   {
      default :
         break;
   }
}
void TokenLexicalActions(Token matchedToken)
{
   switch(jjmatchedKind)
   {
      case 77 :
        if (image == null)
            image = new StringBuffer();
            image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
           try {
                // Peek at the next character.
                char nextCh = input_stream.readChar();
                input_stream.backup(1);
                if (isRegValid == false || nextCh == '/' || nextCh == '*') {
                    //
                    // Lexecal analyser thinks it is a RE
                    // operator such as /...../
                    // Put the everything to the first "/" back on the input stream
                    //
                    input_stream.backup(lengthOfMatch-1);
                    //
                    // And remove it from the token
                    //
                    matchedToken.image = matchedToken.image.substring(0, 1);
                    image.delete(0, image.length() - 1);
                    image.append('/');
                    matchedToken.kind=SLASH;
                }
               } catch (IOException e) {
                    throw new Error(e.toString());
               }
         break;
      default : 
         break;
   }
}
}