/* Generated By:JavaCC: Do not edit this line. FilterParserTokenManager.java */
package org.apache.sling.resource.filter.impl.script;
import java.util.ArrayList;
import java.util.List;
import org.apache.sling.resource.filter.impl.node.*;

/** Token Manager. */
public class FilterParserTokenManager implements FilterParserConstants
{

  /** 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)
{
   switch (pos)
   {
      case 0:
         if ((active0 & 0x200000000L) != 0L)
         {
            jjmatchedKind = 32;
            return -1;
         }
         if ((active0 & 0xf000000000L) != 0L)
         {
            jjmatchedKind = 43;
            return 60;
         }
         if ((active0 & 0x4L) != 0L)
            return 60;
         if ((active0 & 0x80000000L) != 0L)
         {
            jjmatchedKind = 30;
            return -1;
         }
         if ((active0 & 0x20000800000L) != 0L)
         {
            jjmatchedKind = 43;
            return 58;
         }
         return -1;
      case 1:
         if ((active0 & 0x200000000L) != 0L)
         {
            if (jjmatchedPos == 0)
            {
               jjmatchedKind = 32;
               jjmatchedPos = 0;
            }
            return -1;
         }
         if ((active0 & 0x20000000000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 1;
            return 57;
         }
         if ((active0 & 0x80000000L) != 0L)
         {
            if (jjmatchedPos == 0)
            {
               jjmatchedKind = 30;
               jjmatchedPos = 0;
            }
            return -1;
         }
         if ((active0 & 0xf000800000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 1;
            return 60;
         }
         return -1;
      case 2:
         if ((active0 & 0x20000000000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 2;
            return 56;
         }
         if ((active0 & 0xf000800000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 2;
            return 60;
         }
         return -1;
      case 3:
         if ((active0 & 0xf000000000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 3;
            return 60;
         }
         if ((active0 & 0x800000L) != 0L)
            return 60;
         if ((active0 & 0x20000000000L) != 0L)
         {
            if (jjmatchedPos < 2)
            {
               jjmatchedKind = 43;
               jjmatchedPos = 2;
            }
            return 55;
         }
         return -1;
      case 4:
         if ((active0 & 0xf000000000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 4;
            return 60;
         }
         if ((active0 & 0x20000000000L) != 0L)
         {
            if (jjmatchedPos < 2)
            {
               jjmatchedKind = 43;
               jjmatchedPos = 2;
            }
            return -1;
         }
         return -1;
      case 5:
         if ((active0 & 0x20000000000L) != 0L)
         {
            if (jjmatchedPos < 2)
            {
               jjmatchedKind = 43;
               jjmatchedPos = 2;
            }
            return -1;
         }
         if ((active0 & 0xf000000000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 5;
            return 60;
         }
         return -1;
      case 6:
         if ((active0 & 0xf000000000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 6;
            return 60;
         }
         return -1;
      case 7:
         if ((active0 & 0xf000000000L) != 0L)
            return 60;
         return -1;
      default :
         return -1;
   }
}
private final int jjStartNfa_0(int pos, long active0)
{
   return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
}
private int jjStopAtPos(int pos, int kind)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   return pos + 1;
}
private int jjMoveStringLiteralDfa0_0()
{
   switch(curChar)
   {
      case 9:
         return jjStartNfaWithStates_0(0, 2, 60);
      case 36:
         return jjStopAtPos(0, 42);
      case 40:
         return jjStopAtPos(0, 24);
      case 41:
         return jjStopAtPos(0, 25);
      case 44:
         return jjStopAtPos(0, 26);
      case 60:
         return jjMoveStringLiteralDfa1_0(0x200000000L);
      case 62:
         return jjMoveStringLiteralDfa1_0(0x80000000L);
      case 99:
         return jjMoveStringLiteralDfa1_0(0xf000000000L);
      case 110:
         return jjMoveStringLiteralDfa1_0(0x20000800000L);
      default :
         return jjMoveNfa_0(0, 0);
   }
}
private int jjMoveStringLiteralDfa1_0(long active0)
{
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(0, active0);
      return 1;
   }
   switch(curChar)
   {
      case 61:
         if ((active0 & 0x80000000L) != 0L)
            return jjStopAtPos(1, 31);
         else if ((active0 & 0x200000000L) != 0L)
            return jjStopAtPos(1, 33);
         break;
      case 111:
         return jjMoveStringLiteralDfa2_0(active0, 0x2f000000000L);
      case 117:
         return jjMoveStringLiteralDfa2_0(active0, 0x800000L);
      default :
         break;
   }
   return jjStartNfa_0(0, active0);
}
private int jjMoveStringLiteralDfa2_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(0, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(1, active0);
      return 2;
   }
   switch(curChar)
   {
      case 108:
         return jjMoveStringLiteralDfa3_0(active0, 0x800000L);
      case 110:
         return jjMoveStringLiteralDfa3_0(active0, 0xf000000000L);
      case 116:
         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L);
      default :
         break;
   }
   return jjStartNfa_0(1, active0);
}
private int jjMoveStringLiteralDfa3_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(1, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(2, active0);
      return 3;
   }
   switch(curChar)
   {
      case 32:
         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000L);
      case 108:
         if ((active0 & 0x800000L) != 0L)
            return jjStartNfaWithStates_0(3, 23, 60);
         break;
      case 116:
         return jjMoveStringLiteralDfa4_0(active0, 0xf000000000L);
      default :
         break;
   }
   return jjStartNfa_0(2, active0);
}
private int jjMoveStringLiteralDfa4_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(2, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(3, active0);
      return 4;
   }
   switch(curChar)
   {
      case 97:
         return jjMoveStringLiteralDfa5_0(active0, 0xf000000000L);
      case 105:
         return jjMoveStringLiteralDfa5_0(active0, 0x20000000000L);
      default :
         break;
   }
   return jjStartNfa_0(3, active0);
}
private int jjMoveStringLiteralDfa5_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(3, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(4, active0);
      return 5;
   }
   switch(curChar)
   {
      case 105:
         return jjMoveStringLiteralDfa6_0(active0, 0xf000000000L);
      case 110:
         if ((active0 & 0x20000000000L) != 0L)
            return jjStopAtPos(5, 41);
         break;
      default :
         break;
   }
   return jjStartNfa_0(4, active0);
}
private int jjMoveStringLiteralDfa6_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(4, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(5, active0);
      return 6;
   }
   switch(curChar)
   {
      case 110:
         return jjMoveStringLiteralDfa7_0(active0, 0xf000000000L);
      default :
         break;
   }
   return jjStartNfa_0(5, active0);
}
private int jjMoveStringLiteralDfa7_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(5, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(6, active0);
      return 7;
   }
   switch(curChar)
   {
      case 115:
         if ((active0 & 0x1000000000L) != 0L)
         {
            jjmatchedKind = 36;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0xe000000000L);
      default :
         break;
   }
   return jjStartNfa_0(6, active0);
}
private int jjMoveStringLiteralDfa8_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(6, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(7, active0);
      return 8;
   }
   switch(curChar)
   {
      case 32:
         return jjMoveStringLiteralDfa9_0(active0, 0xe000000000L);
      default :
         break;
   }
   return jjStartNfa_0(7, active0);
}
private int jjMoveStringLiteralDfa9_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(7, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(8, active0);
      return 9;
   }
   switch(curChar)
   {
      case 97:
         return jjMoveStringLiteralDfa10_0(active0, 0x4000000000L);
      case 110:
         return jjMoveStringLiteralDfa10_0(active0, 0xa000000000L);
      default :
         break;
   }
   return jjStartNfa_0(8, active0);
}
private int jjMoveStringLiteralDfa10_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(8, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(9, active0);
      return 10;
   }
   switch(curChar)
   {
      case 110:
         return jjMoveStringLiteralDfa11_0(active0, 0x4000000000L);
      case 111:
         return jjMoveStringLiteralDfa11_0(active0, 0xa000000000L);
      default :
         break;
   }
   return jjStartNfa_0(9, active0);
}
private int jjMoveStringLiteralDfa11_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(9, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(10, active0);
      return 11;
   }
   switch(curChar)
   {
      case 116:
         if ((active0 & 0x2000000000L) != 0L)
         {
            jjmatchedKind = 37;
            jjmatchedPos = 11;
         }
         return jjMoveStringLiteralDfa12_0(active0, 0x8000000000L);
      case 121:
         if ((active0 & 0x4000000000L) != 0L)
            return jjStopAtPos(11, 38);
         break;
      default :
         break;
   }
   return jjStartNfa_0(10, active0);
}
private int jjMoveStringLiteralDfa12_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(10, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(11, active0);
      return 12;
   }
   switch(curChar)
   {
      case 32:
         return jjMoveStringLiteralDfa13_0(active0, 0x8000000000L);
      default :
         break;
   }
   return jjStartNfa_0(11, active0);
}
private int jjMoveStringLiteralDfa13_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(11, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(12, active0);
      return 13;
   }
   switch(curChar)
   {
      case 97:
         return jjMoveStringLiteralDfa14_0(active0, 0x8000000000L);
      default :
         break;
   }
   return jjStartNfa_0(12, active0);
}
private int jjMoveStringLiteralDfa14_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(12, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(13, active0);
      return 14;
   }
   switch(curChar)
   {
      case 110:
         return jjMoveStringLiteralDfa15_0(active0, 0x8000000000L);
      default :
         break;
   }
   return jjStartNfa_0(13, active0);
}
private int jjMoveStringLiteralDfa15_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(13, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(14, active0);
      return 15;
   }
   switch(curChar)
   {
      case 121:
         if ((active0 & 0x8000000000L) != 0L)
            return jjStopAtPos(15, 39);
         break;
      default :
         break;
   }
   return jjStartNfa_0(14, active0);
}
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 = 202;
   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 57:
               case 60:
                  if ((0x8c00846affffffffL & l) == 0L)
                     break;
                  if (kind > 43)
                     kind = 43;
                  jjCheckNAdd(60);
                  break;
               case 56:
                  if ((0x8c00846affffffffL & l) != 0L)
                  {
                     if (kind > 43)
                        kind = 43;
                     jjCheckNAdd(60);
                  }
                  else if (curChar == 32)
                     jjstateSet[jjnewStateCnt++] = 55;
                  break;
               case 58:
                  if ((0x8c00846affffffffL & l) == 0L)
                     break;
                  if (kind > 43)
                     kind = 43;
                  jjCheckNAdd(60);
                  break;
               case 0:
                  if ((0x8c00846affffffffL & l) != 0L)
                  {
                     if (kind > 43)
                        kind = 43;
                     jjCheckNAdd(60);
                  }
                  else if ((0x3ff000000000000L & l) != 0L)
                  {
                     if (kind > 13)
                        kind = 13;
                     jjCheckNAddStates(0, 14);
                  }
                  else if (curChar == 45)
                     jjCheckNAddStates(15, 22);
                  else if (curChar == 60)
                  {
                     if (kind > 32)
                        kind = 32;
                  }
                  else if (curChar == 62)
                  {
                     if (kind > 30)
                        kind = 30;
                  }
                  else if (curChar == 61)
                     jjstateSet[jjnewStateCnt++] = 32;
                  else if (curChar == 34)
                     jjCheckNAddStates(23, 25);
                  else if (curChar == 39)
                     jjCheckNAddStates(26, 28);
                  else if (curChar == 46)
                     jjCheckNAdd(1);
                  if (curChar == 33)
                     jjstateSet[jjnewStateCnt++] = 34;
                  else if (curChar == 38)
                     jjstateSet[jjnewStateCnt++] = 15;
                  break;
               case 1:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 15)
                     kind = 15;
                  jjCheckNAdd(1);
                  break;
               case 3:
                  if ((0x280000000000L & l) != 0L)
                     jjCheckNAdd(4);
                  break;
               case 4:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 16)
                     kind = 16;
                  jjCheckNAdd(4);
                  break;
               case 5:
                  if (curChar == 39)
                     jjCheckNAddStates(26, 28);
                  break;
               case 7:
                  jjCheckNAddStates(26, 28);
                  break;
               case 8:
                  if ((0xffffff7fffffffffL & l) != 0L)
                     jjCheckNAddStates(26, 28);
                  break;
               case 9:
                  if (curChar == 39 && kind > 18)
                     kind = 18;
                  break;
               case 10:
                  if (curChar == 34)
                     jjCheckNAddStates(23, 25);
                  break;
               case 12:
                  jjCheckNAddStates(23, 25);
                  break;
               case 13:
                  if ((0xfffffffbffffffffL & l) != 0L)
                     jjCheckNAddStates(23, 25);
                  break;
               case 14:
                  if (curChar == 34 && kind > 18)
                     kind = 18;
                  break;
               case 15:
                  if (curChar == 38 && kind > 21)
                     kind = 21;
                  break;
               case 16:
                  if (curChar == 38)
                     jjstateSet[jjnewStateCnt++] = 15;
                  break;
               case 32:
                  if (curChar == 61 && kind > 28)
                     kind = 28;
                  break;
               case 33:
                  if (curChar == 61)
                     jjstateSet[jjnewStateCnt++] = 32;
                  break;
               case 34:
                  if (curChar == 61 && kind > 29)
                     kind = 29;
                  break;
               case 35:
                  if (curChar == 33)
                     jjstateSet[jjnewStateCnt++] = 34;
                  break;
               case 36:
                  if (curChar == 62 && kind > 30)
                     kind = 30;
                  break;
               case 41:
                  if (curChar == 32)
                     jjstateSet[jjnewStateCnt++] = 40;
                  break;
               case 49:
                  if (curChar == 60 && kind > 32)
                     kind = 32;
                  break;
               case 50:
                  if (curChar == 61 && kind > 34)
                     kind = 34;
                  break;
               case 63:
               case 64:
                  jjCheckNAddStates(29, 31);
                  break;
               case 66:
                  if (curChar == 45)
                     jjCheckNAddStates(15, 22);
                  break;
               case 67:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(68, 102);
                  break;
               case 68:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 69;
                  break;
               case 69:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(70, 101);
                  break;
               case 70:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 71;
                  break;
               case 71:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(72, 100);
                  break;
               case 72:
                  if (curChar == 45)
                     jjCheckNAdd(73);
                  break;
               case 73:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(73, 74);
                  break;
               case 74:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 75;
                  break;
               case 75:
                  if ((0x3000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(76, 77);
                  break;
               case 76:
                  if (curChar == 45)
                     jjCheckNAdd(77);
                  break;
               case 77:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(77, 78);
                  break;
               case 78:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 79;
                  break;
               case 79:
                  if ((0xf000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 80;
                  break;
               case 80:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 81;
                  break;
               case 82:
                  if ((0x7000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 83;
                  break;
               case 83:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 84;
                  break;
               case 84:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 85;
                  break;
               case 85:
                  if ((0x3f000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 86;
                  break;
               case 86:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(87, 94);
                  break;
               case 87:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 88;
                  break;
               case 88:
                  if ((0x3f000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 89;
                  break;
               case 89:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(90, 94);
                  break;
               case 90:
                  if (curChar == 46)
                     jjstateSet[jjnewStateCnt++] = 91;
                  break;
               case 91:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 92;
                  break;
               case 92:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 93;
                  break;
               case 93:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAdd(94);
                  break;
               case 94:
                  if ((0x280000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 95;
                  break;
               case 95:
                  if ((0x7000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 96;
                  break;
               case 96:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 97;
                  break;
               case 97:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 98;
                  break;
               case 98:
                  if ((0x3f000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 99;
                  break;
               case 99:
                  if ((0x3ff000000000000L & l) != 0L && kind > 10)
                     kind = 10;
                  break;
               case 100:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(32, 35);
                  break;
               case 101:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(36, 39);
                  break;
               case 102:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(40, 43);
                  break;
               case 103:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(104, 132);
                  break;
               case 104:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 105;
                  break;
               case 105:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(106, 131);
                  break;
               case 106:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 107;
                  break;
               case 107:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(108, 130);
                  break;
               case 108:
                  if (curChar == 45)
                     jjCheckNAdd(109);
                  break;
               case 109:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(109, 110);
                  break;
               case 110:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 111;
                  break;
               case 111:
                  if ((0x3000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(112, 113);
                  break;
               case 112:
                  if (curChar == 45)
                     jjCheckNAdd(113);
                  break;
               case 113:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(113, 114);
                  break;
               case 114:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 115;
                  break;
               case 115:
                  if ((0xf000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 116;
                  break;
               case 116:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 117;
                  break;
               case 118:
                  if ((0x7000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 119;
                  break;
               case 119:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 120;
                  break;
               case 120:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 121;
                  break;
               case 121:
                  if ((0x3f000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 122;
                  break;
               case 122:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 11)
                     kind = 11;
                  jjstateSet[jjnewStateCnt++] = 123;
                  break;
               case 123:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 124;
                  break;
               case 124:
                  if ((0x3f000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 125;
                  break;
               case 125:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 11)
                     kind = 11;
                  jjstateSet[jjnewStateCnt++] = 126;
                  break;
               case 126:
                  if (curChar == 46)
                     jjstateSet[jjnewStateCnt++] = 127;
                  break;
               case 127:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 128;
                  break;
               case 128:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 129;
                  break;
               case 129:
                  if ((0x3ff000000000000L & l) != 0L && kind > 11)
                     kind = 11;
                  break;
               case 130:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(44, 47);
                  break;
               case 131:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(48, 51);
                  break;
               case 132:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(52, 55);
                  break;
               case 133:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(134, 149);
                  break;
               case 134:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 135;
                  break;
               case 135:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(136, 148);
                  break;
               case 136:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 137;
                  break;
               case 137:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(138, 147);
                  break;
               case 138:
                  if (curChar == 45)
                     jjCheckNAdd(139);
                  break;
               case 139:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(139, 140);
                  break;
               case 140:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 141;
                  break;
               case 141:
                  if ((0x3000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(142, 143);
                  break;
               case 142:
                  if (curChar == 45)
                     jjCheckNAdd(143);
                  break;
               case 143:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(143, 144);
                  break;
               case 144:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 145;
                  break;
               case 145:
                  if ((0xf000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 146;
                  break;
               case 146:
                  if ((0x3ff000000000000L & l) != 0L && kind > 12)
                     kind = 12;
                  break;
               case 147:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(56, 59);
                  break;
               case 148:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(60, 63);
                  break;
               case 149:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(64, 67);
                  break;
               case 150:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 13)
                     kind = 13;
                  jjCheckNAdd(150);
                  break;
               case 151:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(151, 152);
                  break;
               case 152:
                  if (curChar == 46)
                     jjCheckNAdd(153);
                  break;
               case 153:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 13)
                     kind = 13;
                  jjCheckNAdd(153);
                  break;
               case 154:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(154, 155);
                  break;
               case 156:
                  if ((0x280000000000L & l) != 0L)
                     jjCheckNAdd(157);
                  break;
               case 157:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 13)
                     kind = 13;
                  jjCheckNAdd(157);
                  break;
               case 158:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(158, 159);
                  break;
               case 159:
                  if (curChar == 46)
                     jjCheckNAdd(160);
                  break;
               case 160:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(160, 161);
                  break;
               case 162:
                  if ((0x280000000000L & l) != 0L)
                     jjCheckNAdd(163);
                  break;
               case 163:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 13)
                     kind = 13;
                  jjCheckNAdd(163);
                  break;
               case 164:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 14)
                     kind = 14;
                  jjCheckNAdd(164);
                  break;
               case 165:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 13)
                     kind = 13;
                  jjCheckNAddStates(0, 14);
                  break;
               case 166:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 17)
                     kind = 17;
                  jjCheckNAdd(166);
                  break;
               case 172:
                  if (curChar == 32)
                     jjstateSet[jjnewStateCnt++] = 171;
                  break;
               case 178:
                  if (curChar == 32)
                     jjstateSet[jjnewStateCnt++] = 177;
                  break;
               case 189:
                  if (curChar == 32)
                     jjstateSet[jjnewStateCnt++] = 188;
                  break;
               case 198:
                  if (curChar == 32)
                     jjstateSet[jjnewStateCnt++] = 197;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         do
         {
            switch(jjstateSet[--i])
            {
               case 57:
                  if ((0xffffffffd7ffffffL & l) != 0L)
                  {
                     if (kind > 43)
                        kind = 43;
                     jjCheckNAdd(60);
                  }
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 56;
                  break;
               case 56:
               case 60:
                  if ((0xffffffffd7ffffffL & l) == 0L)
                     break;
                  if (kind > 43)
                     kind = 43;
                  jjCheckNAdd(60);
                  break;
               case 58:
                  if ((0xffffffffd7ffffffL & l) != 0L)
                  {
                     if (kind > 43)
                        kind = 43;
                     jjCheckNAdd(60);
                  }
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 57;
                  break;
               case 0:
                  if ((0xffffffffd7ffffffL & l) != 0L)
                  {
                     if (kind > 43)
                        kind = 43;
                     jjCheckNAdd(60);
                  }
                  else if (curChar == 91)
                     jjCheckNAddStates(29, 31);
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(68, 69);
                  else if (curChar == 108)
                     jjAddStates(70, 72);
                  else if (curChar == 105)
                     jjCheckNAddStates(73, 77);
                  else if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 58;
                  else if (curChar == 126)
                     jjstateSet[jjnewStateCnt++] = 50;
                  else if (curChar == 103)
                     jjstateSet[jjnewStateCnt++] = 47;
                  else if (curChar == 102)
                     jjstateSet[jjnewStateCnt++] = 30;
                  else if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 26;
                  else if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 22;
                  else if (curChar == 124)
                     jjstateSet[jjnewStateCnt++] = 20;
                  else if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 18;
                  break;
               case 2:
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(68, 69);
                  break;
               case 6:
                  if (curChar == 92)
                     jjstateSet[jjnewStateCnt++] = 7;
                  break;
               case 7:
                  jjCheckNAddStates(26, 28);
                  break;
               case 8:
                  if ((0xffffffffefffffffL & l) != 0L)
                     jjCheckNAddStates(26, 28);
                  break;
               case 11:
                  if (curChar == 92)
                     jjstateSet[jjnewStateCnt++] = 12;
                  break;
               case 12:
                  jjCheckNAddStates(23, 25);
                  break;
               case 13:
                  if ((0xffffffffefffffffL & l) != 0L)
                     jjCheckNAddStates(23, 25);
                  break;
               case 17:
                  if (curChar == 100 && kind > 21)
                     kind = 21;
                  break;
               case 18:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 17;
                  break;
               case 19:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 18;
                  break;
               case 20:
                  if (curChar == 124 && kind > 22)
                     kind = 22;
                  break;
               case 21:
                  if (curChar == 124)
                     jjstateSet[jjnewStateCnt++] = 20;
                  break;
               case 22:
                  if (curChar == 114 && kind > 22)
                     kind = 22;
                  break;
               case 23:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 22;
                  break;
               case 24:
                  if (curChar == 101 && kind > 27)
                     kind = 27;
                  break;
               case 25:
                  if (curChar == 117)
                     jjCheckNAdd(24);
                  break;
               case 26:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 25;
                  break;
               case 27:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 26;
                  break;
               case 28:
                  if (curChar == 115)
                     jjCheckNAdd(24);
                  break;
               case 29:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 28;
                  break;
               case 30:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 29;
                  break;
               case 31:
                  if (curChar == 102)
                     jjstateSet[jjnewStateCnt++] = 30;
                  break;
               case 37:
                  if (curChar == 110 && kind > 30)
                     kind = 30;
                  break;
               case 38:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 37;
                  break;
               case 39:
                  if (curChar == 104)
                     jjstateSet[jjnewStateCnt++] = 38;
                  break;
               case 40:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 39;
                  break;
               case 42:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 41;
                  break;
               case 43:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 42;
                  break;
               case 44:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 43;
                  break;
               case 45:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 44;
                  break;
               case 46:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 45;
                  break;
               case 47:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 46;
                  break;
               case 48:
                  if (curChar == 103)
                     jjstateSet[jjnewStateCnt++] = 47;
                  break;
               case 51:
                  if (curChar == 126)
                     jjstateSet[jjnewStateCnt++] = 50;
                  break;
               case 52:
                  if (curChar == 101 && kind > 35)
                     kind = 35;
                  break;
               case 53:
                  if (curChar == 107)
                     jjstateSet[jjnewStateCnt++] = 52;
                  break;
               case 54:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 53;
                  break;
               case 55:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 54;
                  break;
               case 59:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 58;
                  break;
               case 61:
                  if (curChar == 91)
                     jjCheckNAddStates(29, 31);
                  break;
               case 62:
                  if (curChar == 92)
                     jjstateSet[jjnewStateCnt++] = 63;
                  break;
               case 63:
                  jjCheckNAddStates(29, 31);
                  break;
               case 64:
                  if ((0xffffffffcfffffffL & l) != 0L)
                     jjCheckNAddStates(29, 31);
                  break;
               case 65:
                  if (curChar == 93 && kind > 44)
                     kind = 44;
                  break;
               case 81:
                  if (curChar == 84)
                     jjstateSet[jjnewStateCnt++] = 82;
                  break;
               case 117:
                  if (curChar == 84)
                     jjstateSet[jjnewStateCnt++] = 118;
                  break;
               case 155:
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(78, 79);
                  break;
               case 161:
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(80, 81);
                  break;
               case 167:
                  if (curChar == 105)
                     jjCheckNAddStates(73, 77);
                  break;
               case 168:
                  if (curChar == 115 && kind > 28)
                     kind = 28;
                  break;
               case 169:
                  if (curChar == 116 && kind > 29)
                     kind = 29;
                  break;
               case 170:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 169;
                  break;
               case 171:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 170;
                  break;
               case 173:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 172;
                  break;
               case 174:
                  if (curChar == 101 && kind > 34)
                     kind = 34;
                  break;
               case 175:
               case 193:
                  if (curChar == 107)
                     jjCheckNAdd(174);
                  break;
               case 176:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 175;
                  break;
               case 177:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 176;
                  break;
               case 179:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 178;
                  break;
               case 180:
                  if (curChar == 110 && kind > 40)
                     kind = 40;
                  break;
               case 181:
                  if (curChar == 105)
                     jjCheckNAdd(180);
                  break;
               case 182:
                  if (curChar == 95)
                     jjstateSet[jjnewStateCnt++] = 181;
                  break;
               case 183:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 182;
                  break;
               case 184:
                  if (curChar == 108)
                     jjAddStates(70, 72);
                  break;
               case 185:
                  if (curChar == 110 && kind > 32)
                     kind = 32;
                  break;
               case 186:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 185;
                  break;
               case 187:
                  if (curChar == 104)
                     jjstateSet[jjnewStateCnt++] = 186;
                  break;
               case 188:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 187;
                  break;
               case 190:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 189;
                  break;
               case 191:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 190;
                  break;
               case 192:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 191;
                  break;
               case 194:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 193;
                  break;
               case 195:
                  if (curChar == 116 && kind > 35)
                     kind = 35;
                  break;
               case 196:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 195;
                  break;
               case 197:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 196;
                  break;
               case 199:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 198;
                  break;
               case 200:
                  if (curChar == 107)
                     jjstateSet[jjnewStateCnt++] = 199;
                  break;
               case 201:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 200;
                  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 57:
               case 60:
                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
                     break;
                  if (kind > 43)
                     kind = 43;
                  jjCheckNAdd(60);
                  break;
               case 56:
                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
                     break;
                  if (kind > 43)
                     kind = 43;
                  jjCheckNAdd(60);
                  break;
               case 58:
                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
                     break;
                  if (kind > 43)
                     kind = 43;
                  jjCheckNAdd(60);
                  break;
               case 0:
                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
                     break;
                  if (kind > 43)
                     kind = 43;
                  jjCheckNAdd(60);
                  break;
               case 7:
               case 8:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddStates(26, 28);
                  break;
               case 12:
               case 13:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddStates(23, 25);
                  break;
               case 63:
               case 64:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddStates(29, 31);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 202 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
static final int[] jjnextStates = {
   68, 104, 134, 150, 151, 152, 154, 155, 158, 159, 164, 166, 149, 132, 102, 67, 
   103, 133, 150, 151, 154, 158, 164, 11, 13, 14, 6, 8, 9, 62, 64, 65, 
   72, 73, 74, 100, 70, 72, 100, 101, 68, 70, 101, 102, 108, 109, 110, 130, 
   106, 108, 130, 131, 104, 106, 131, 132, 138, 139, 140, 147, 136, 138, 147, 148, 
   134, 136, 148, 149, 3, 4, 192, 194, 201, 168, 173, 179, 183, 180, 156, 157, 
   162, 163, 
};
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, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, "\156\165\154\154", 
"\50", "\51", "\54", null, null, null, null, "\76\75", null, "\74\75", null, null, 
"\143\157\156\164\141\151\156\163", "\143\157\156\164\141\151\156\163\40\156\157\164", 
"\143\157\156\164\141\151\156\163\40\141\156\171", "\143\157\156\164\141\151\156\163\40\156\157\164\40\141\156\171", null, 
"\156\157\164\40\151\156", "\44", null, null, null, };

/** Lexer state names. */
public static final String[] lexStateNames = {
   "DEFAULT",
};
static final long[] jjtoToken = {
   0x3fffffe7fc01L, 
};
static final long[] jjtoSkip = {
   0x6L, 
};
protected SimpleCharStream input_stream;
private final int[] jjrounds = new int[202];
private final int[] jjstateSet = new int[404];
private final StringBuilder jjimage = new StringBuilder();
private StringBuilder image = jjimage;
private int jjimageLen;
private int lengthOfMatch;
protected char curChar;
/** Constructor. */
public FilterParserTokenManager(SimpleCharStream stream){
   if (SimpleCharStream.staticFlag)
      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
   input_stream = stream;
}

/** Constructor. */
public FilterParserTokenManager(SimpleCharStream stream, int lexState){
   this(stream);
   SwitchTo(lexState);
}

/** Reinitialise parser. */
public void ReInit(SimpleCharStream stream)
{
   jjmatchedPos = jjnewStateCnt = 0;
   curLexState = defaultLexState;
   input_stream = stream;
   ReInitRounds();
}
private void ReInitRounds()
{
   int i;
   jjround = 0x80000001;
   for (i = 202; i-- > 0;)
      jjrounds[i] = 0x80000000;
}

/** Reinitialise parser. */
public void ReInit(SimpleCharStream 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;
   }
   image = jjimage;
   image.setLength(0);
   jjimageLen = 0;

   try { input_stream.backup(0);
      while (curChar <= 32 && (0x100000000L & (1L << curChar)) != 0L)
         curChar = input_stream.BeginToken();
   }
   catch (java.io.IOException e1) { continue EOFLoop; }
   jjmatchedKind = 0x7fffffff;
   jjmatchedPos = 0;
   curPos = jjMoveStringLiteralDfa0_0();
   if (jjmatchedPos == 0 && jjmatchedKind > 45)
   {
      jjmatchedKind = 45;
   }
   if (jjmatchedKind != 0x7fffffff)
   {
      if (jjmatchedPos + 1 < curPos)
         input_stream.backup(curPos - jjmatchedPos - 1);
      if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
      {
         matchedToken = jjFillToken();
         TokenLexicalActions(matchedToken);
         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);
  }
}

void TokenLexicalActions(Token matchedToken)
{
   switch(jjmatchedKind)
   {
      case 18 :
        image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
                                       matchedToken.image = image.substring(1, lengthOfMatch - 1);
         break;
      case 44 :
        image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
                                                        matchedToken.image = image.substring(1, lengthOfMatch - 1);
         break;
      default :
         break;
   }
}
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);
}

}
