// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.

// Generated by JFlex 1.9.1 http://jflex.de/  (tweaked for IntelliJ platform)
// source: xpath-lexer.flex

/* It's an automatically generated code. Do not modify it. */
package org.intellij.lang.xpath;

import com.intellij.lexer.FlexLexer;
import com.intellij.psi.tree.IElementType;

@SuppressWarnings({"ALL"})

abstract class _XPathLexer implements FlexLexer {

  /** This character denotes the end of file */
  public static final int YYEOF = -1;

  /** initial size of the lookahead buffer */
  private static final int ZZ_BUFFERSIZE = 16384;

  /** lexical states */
  public static final int YYINITIAL = 0;
  public static final int S1 = 2;
  public static final int VAR = 4;
  public static final int TYPE = 6;

  /**
   * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
   * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
   *                  at the beginning of a line
   * l is of the form l = 2*k, k a non negative integer
   */
  private static final int ZZ_LEXSTATE[] = {
     0,  0,  1,  1,  2,  2,  3, 3
  };

  /**
   * Top-level table for translating characters to character classes
   */
  private static final int [] ZZ_CMAP_TOP = zzUnpackcmap_top();

  private static final String ZZ_CMAP_TOP_PACKED_0 =
    "\1\0\1\u0100\1\u0200\1\u0300\1\u0400\1\u0500\1\u0600\1\u0700"+
    "\1\u0800\1\u0900\1\u0a00\1\u0b00\1\u0c00\1\u0d00\1\u0e00\1\u0f00"+
    "\1\u1000\1\u0100\1\u1100\1\u1200\1\u1300\1\u0100\1\u1400\1\u1500"+
    "\1\u1600\1\u1700\1\u1800\1\u1900\1\u1a00\1\u1b00\1\u0100\1\u1c00"+
    "\1\u1d00\1\u1e00\12\u1f00\1\u2000\1\u2100\1\u2200\1\u1f00\1\u2300"+
    "\1\u2400\2\u1f00\31\u0100\1\u2500\121\u0100\1\u2600\4\u0100\1\u2700"+
    "\1\u0100\1\u2800\1\u2900\1\u2a00\1\u2b00\1\u2c00\1\u2d00\53\u0100"+
    "\1\u2e00\41\u1f00\1\u0100\1\u2f00\1\u3000\1\u0100\1\u3100\1\u3200"+
    "\1\u3300\1\u3400\1\u1f00\1\u3500\1\u3600\1\u3700\1\u3800\1\u0100"+
    "\1\u3900\1\u3a00\1\u3b00\1\u3c00\1\u3d00\1\u3e00\1\u3f00\1\u1f00"+
    "\1\u4000\1\u4100\1\u4200\1\u4300\1\u4400\1\u4500\1\u4600\1\u4700"+
    "\1\u4800\1\u4900\1\u4a00\1\u4b00\1\u1f00\1\u4c00\1\u4d00\1\u4e00"+
    "\1\u1f00\3\u0100\1\u4f00\1\u5000\1\u5100\12\u1f00\4\u0100\1\u5200"+
    "\17\u1f00\2\u0100\1\u5300\41\u1f00\2\u0100\1\u5400\1\u5500\2\u1f00"+
    "\1\u5600\1\u5700\27\u0100\1\u5800\2\u0100\1\u5900\45\u1f00\1\u0100"+
    "\1\u5a00\1\u5b00\11\u1f00\1\u5c00\27\u1f00\1\u5d00\1\u5e00\1\u5f00"+
    "\1\u6000\11\u1f00\1\u6100\1\u6200\5\u1f00\1\u6300\1\u6400\4\u1f00"+
    "\1\u6500\21\u1f00\246\u0100\1\u6600\20\u0100\1\u6700\1\u6800\25\u0100"+
    "\1\u6900\34\u0100\1\u6a00\14\u1f00\2\u0100\1\u6b00\u0e05\u1f00";

  private static int [] zzUnpackcmap_top() {
    int [] result = new int[4352];
    int offset = 0;
    offset = zzUnpackcmap_top(ZZ_CMAP_TOP_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackcmap_top(String packed, int offset, int [] result) {
    int i = 0;       /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      do result[j++] = value; while (--count > 0);
    }
    return j;
  }


  /**
   * Second-level tables for translating characters to character classes
   */
  private static final int [] ZZ_CMAP_BLOCKS = zzUnpackcmap_blocks();

  private static final String ZZ_CMAP_BLOCKS_PACKED_0 =
    "\11\0\2\1\2\0\1\1\22\0\1\1\1\2\1\3"+
    "\1\0\1\4\1\0\1\5\1\6\1\7\1\10\1\11"+
    "\1\12\1\13\1\14\1\15\1\16\12\17\1\20\1\21"+
    "\1\22\1\23\1\24\1\25\1\26\4\27\1\30\25\27"+
    "\1\31\1\0\1\32\1\0\1\27\1\0\1\33\1\34"+
    "\1\35\1\36\1\37\1\40\1\41\1\42\1\43\2\27"+
    "\1\44\1\45\1\46\1\47\1\50\1\51\1\52\1\53"+
    "\1\54\1\55\1\56\1\57\1\60\1\61\1\27\1\62"+
    "\1\63\1\64\54\0\1\27\12\0\1\27\4\0\1\27"+
    "\5\0\27\27\1\0\37\27\1\0\u01ca\27\4\0\14\27"+
    "\16\0\5\27\7\0\1\27\1\0\1\27\201\0\5\27"+
    "\1\0\2\27\2\0\4\27\1\0\1\27\6\0\1\27"+
    "\1\0\3\27\1\0\1\27\1\0\24\27\1\0\123\27"+
    "\1\0\213\27\10\0\246\27\1\0\46\27\2\0\1\27"+
    "\6\0\51\27\107\0\33\27\4\0\4\27\55\0\53\27"+
    "\25\0\12\17\4\0\2\27\1\0\143\27\1\0\1\27"+
    "\17\0\2\27\7\0\2\27\12\17\3\27\2\0\1\27"+
    "\20\0\1\27\1\0\36\27\35\0\131\27\13\0\1\27"+
    "\16\0\12\17\41\27\11\0\2\27\4\0\1\27\5\0"+
    "\26\27\4\0\1\27\11\0\1\27\3\0\1\27\27\0"+
    "\31\27\7\0\13\27\65\0\25\27\1\0\10\27\106\0"+
    "\66\27\3\0\1\27\22\0\1\27\7\0\12\27\4\0"+
    "\12\17\1\0\20\27\4\0\10\27\2\0\2\27\2\0"+
    "\26\27\1\0\7\27\1\0\1\27\3\0\4\27\3\0"+
    "\1\27\20\0\1\27\15\0\2\27\1\0\3\27\4\0"+
    "\12\17\2\27\12\0\1\27\10\0\6\27\4\0\2\27"+
    "\2\0\26\27\1\0\7\27\1\0\2\27\1\0\2\27"+
    "\1\0\2\27\37\0\4\27\1\0\1\27\7\0\12\17"+
    "\2\0\3\27\20\0\11\27\1\0\3\27\1\0\26\27"+
    "\1\0\7\27\1\0\2\27\1\0\5\27\3\0\1\27"+
    "\22\0\1\27\17\0\2\27\4\0\12\17\11\0\1\27"+
    "\13\0\10\27\2\0\2\27\2\0\26\27\1\0\7\27"+
    "\1\0\2\27\1\0\5\27\3\0\1\27\36\0\2\27"+
    "\1\0\3\27\4\0\12\17\1\0\1\27\21\0\1\27"+
    "\1\0\6\27\3\0\3\27\1\0\4\27\3\0\2\27"+
    "\1\0\1\27\1\0\2\27\3\0\2\27\3\0\3\27"+
    "\3\0\14\27\26\0\1\27\25\0\12\17\25\0\10\27"+
    "\1\0\3\27\1\0\27\27\1\0\20\27\3\0\1\27"+
    "\32\0\3\27\5\0\2\27\4\0\12\17\20\0\1\27"+
    "\4\0\10\27\1\0\3\27\1\0\27\27\1\0\12\27"+
    "\1\0\5\27\3\0\1\27\40\0\1\27\1\0\2\27"+
    "\4\0\12\17\1\0\2\27\22\0\10\27\1\0\3\27"+
    "\1\0\51\27\2\0\1\27\20\0\1\27\5\0\3\27"+
    "\10\0\3\27\4\0\12\17\12\0\6\27\5\0\22\27"+
    "\3\0\30\27\1\0\11\27\1\0\1\27\2\0\7\27"+
    "\37\0\12\17\21\0\60\27\1\0\2\27\14\0\7\27"+
    "\11\0\12\17\47\0\2\27\1\0\1\27\1\0\5\27"+
    "\1\0\30\27\1\0\1\27\1\0\12\27\1\0\2\27"+
    "\11\0\1\27\2\0\5\27\1\0\1\27\11\0\12\17"+
    "\2\0\4\27\40\0\1\27\37\0\12\17\26\0\10\27"+
    "\1\0\44\27\33\0\5\27\163\0\53\27\24\0\1\27"+
    "\12\17\6\0\6\27\4\0\4\27\3\0\1\27\3\0"+
    "\2\27\7\0\3\27\4\0\15\27\14\0\1\27\1\0"+
    "\12\17\6\0\46\27\1\0\1\27\5\0\1\27\2\0"+
    "\53\27\1\0\115\27\1\0\4\27\2\0\7\27\1\0"+
    "\1\27\1\0\4\27\2\0\51\27\1\0\4\27\2\0"+
    "\41\27\1\0\4\27\2\0\7\27\1\0\1\27\1\0"+
    "\4\27\2\0\17\27\1\0\71\27\1\0\4\27\2\0"+
    "\103\27\45\0\20\27\20\0\126\27\2\0\6\27\3\0"+
    "\u016c\27\2\0\21\27\1\0\32\27\5\0\113\27\6\0"+
    "\10\27\7\0\15\27\1\0\4\27\16\0\22\27\16\0"+
    "\22\27\16\0\15\27\1\0\3\27\17\0\64\27\43\0"+
    "\1\27\4\0\1\27\3\0\12\17\46\0\12\17\6\0"+
    "\131\27\7\0\5\27\2\0\42\27\1\0\1\27\5\0"+
    "\106\27\12\0\37\27\47\0\12\17\36\27\2\0\5\27"+
    "\13\0\54\27\4\0\32\27\6\0\12\17\46\0\27\27"+
    "\11\0\65\27\53\0\12\17\6\0\12\17\15\0\1\27"+
    "\135\0\57\27\21\0\7\27\4\0\12\17\51\0\36\27"+
    "\15\0\2\27\12\17\54\27\32\0\44\27\34\0\12\17"+
    "\3\0\3\27\12\17\44\27\2\0\11\27\7\0\53\27"+
    "\2\0\3\27\51\0\4\27\1\0\6\27\1\0\2\27"+
    "\3\0\1\27\5\0\300\27\100\0\26\27\2\0\6\27"+
    "\2\0\46\27\2\0\6\27\2\0\10\27\1\0\1\27"+
    "\1\0\1\27\1\0\1\27\1\0\37\27\2\0\65\27"+
    "\1\0\7\27\1\0\1\27\3\0\3\27\1\0\7\27"+
    "\3\0\4\27\2\0\6\27\4\0\15\27\5\0\3\27"+
    "\1\0\7\27\164\0\1\27\15\0\1\27\20\0\15\27"+
    "\145\0\1\27\4\0\1\27\2\0\12\27\1\0\1\27"+
    "\3\0\5\27\6\0\1\27\1\0\1\27\1\0\1\27"+
    "\1\0\4\27\1\0\13\27\2\0\4\27\5\0\5\27"+
    "\4\0\1\27\64\0\2\27\u017b\0\57\27\1\0\57\27"+
    "\1\0\205\27\6\0\4\27\3\0\2\27\14\0\46\27"+
    "\1\0\1\27\5\0\1\27\2\0\70\27\7\0\1\27"+
    "\20\0\27\27\11\0\7\27\1\0\7\27\1\0\7\27"+
    "\1\0\7\27\1\0\7\27\1\0\7\27\1\0\7\27"+
    "\1\0\7\27\120\0\1\27\325\0\2\27\52\0\5\27"+
    "\5\0\2\27\4\0\126\27\6\0\3\27\1\0\132\27"+
    "\1\0\4\27\5\0\53\27\1\0\136\27\21\0\33\27"+
    "\65\0\306\27\112\0\360\27\20\0\215\27\103\0\56\27"+
    "\2\0\15\27\3\0\20\27\12\17\2\27\24\0\57\27"+
    "\20\0\37\27\2\0\106\27\61\0\11\27\2\0\147\27"+
    "\2\0\65\27\2\0\5\27\60\0\13\27\1\0\3\27"+
    "\1\0\4\27\1\0\27\27\35\0\64\27\16\0\62\27"+
    "\34\0\12\17\30\0\6\27\3\0\1\27\1\0\2\27"+
    "\1\0\12\17\34\27\12\0\27\27\31\0\35\27\7\0"+
    "\57\27\34\0\1\27\12\17\6\0\5\27\1\0\12\27"+
    "\12\17\5\27\1\0\51\27\27\0\3\27\1\0\10\27"+
    "\4\0\12\17\6\0\27\27\3\0\1\27\3\0\62\27"+
    "\1\0\1\27\3\0\2\27\2\0\5\27\2\0\1\27"+
    "\1\0\1\27\30\0\3\27\2\0\13\27\7\0\3\27"+
    "\14\0\6\27\2\0\6\27\2\0\6\27\11\0\7\27"+
    "\1\0\7\27\1\0\53\27\1\0\14\27\10\0\163\27"+
    "\15\0\12\17\6\0\244\27\14\0\27\27\4\0\61\27"+
    "\4\0\156\27\2\0\152\27\46\0\7\27\14\0\5\27"+
    "\5\0\1\27\1\0\12\27\1\0\15\27\1\0\5\27"+
    "\1\0\1\27\1\0\2\27\1\0\2\27\1\0\154\27"+
    "\41\0\153\27\22\0\100\27\2\0\66\27\50\0\14\27"+
    "\164\0\5\27\1\0\207\27\23\0\12\17\7\0\32\27"+
    "\6\0\32\27\13\0\131\27\3\0\6\27\2\0\6\27"+
    "\2\0\6\27\2\0\3\27\43\0\14\27\1\0\32\27"+
    "\1\0\23\27\1\0\2\27\1\0\17\27\2\0\16\27"+
    "\42\0\173\27\205\0\35\27\3\0\61\27\57\0\40\27"+
    "\15\0\24\27\1\0\10\27\6\0\46\27\12\0\36\27"+
    "\2\0\44\27\4\0\10\27\60\0\236\27\2\0\12\17"+
    "\6\0\44\27\4\0\44\27\4\0\50\27\10\0\64\27"+
    "\234\0\67\27\11\0\26\27\12\0\10\27\230\0\6\27"+
    "\2\0\1\27\1\0\54\27\1\0\2\27\3\0\1\27"+
    "\2\0\27\27\12\0\27\27\11\0\37\27\101\0\23\27"+
    "\1\0\2\27\12\0\26\27\12\0\32\27\106\0\70\27"+
    "\6\0\2\27\100\0\1\27\17\0\4\27\1\0\3\27"+
    "\1\0\35\27\52\0\35\27\3\0\35\27\43\0\10\27"+
    "\1\0\34\27\33\0\66\27\12\0\26\27\12\0\23\27"+
    "\15\0\22\27\156\0\111\27\67\0\63\27\15\0\63\27"+
    "\15\0\44\27\14\0\12\17\306\0\35\27\12\0\1\27"+
    "\10\0\26\27\232\0\27\27\14\0\65\27\56\0\12\17"+
    "\23\0\55\27\40\0\31\27\7\0\12\17\11\0\44\27"+
    "\17\0\12\17\4\0\1\27\13\0\43\27\3\0\1\27"+
    "\14\0\60\27\16\0\4\27\13\0\12\17\1\27\1\0"+
    "\1\27\43\0\22\27\1\0\31\27\124\0\7\27\1\0"+
    "\1\27\1\0\4\27\1\0\17\27\1\0\12\27\7\0"+
    "\57\27\21\0\12\17\13\0\10\27\2\0\2\27\2\0"+
    "\26\27\1\0\7\27\1\0\2\27\1\0\5\27\3\0"+
    "\1\27\22\0\1\27\14\0\5\27\236\0\65\27\22\0"+
    "\4\27\5\0\12\17\5\0\1\27\40\0\60\27\24\0"+
    "\2\27\1\0\1\27\10\0\12\17\246\0\57\27\51\0"+
    "\4\27\44\0\60\27\24\0\1\27\13\0\12\17\46\0"+
    "\53\27\15\0\1\27\7\0\12\17\66\0\33\27\25\0"+
    "\12\17\306\0\54\27\164\0\100\27\12\17\25\0\1\27"+
    "\240\0\10\27\2\0\47\27\20\0\1\27\1\0\1\27"+
    "\34\0\1\27\12\0\50\27\7\0\1\27\25\0\1\27"+
    "\13\0\56\27\23\0\1\27\42\0\71\27\7\0\11\27"+
    "\1\0\45\27\21\0\1\27\17\0\12\17\30\0\36\27"+
    "\160\0\7\27\1\0\2\27\1\0\46\27\25\0\1\27"+
    "\11\0\12\17\6\0\6\27\1\0\2\27\1\0\40\27"+
    "\16\0\1\27\7\0\12\17\u0136\0\23\27\15\0\232\27"+
    "\346\0\304\27\274\0\57\27\321\0\107\27\271\0\71\27"+
    "\7\0\37\27\1\0\12\17\146\0\36\27\22\0\60\27"+
    "\20\0\4\27\14\0\12\17\11\0\25\27\5\0\23\27"+
    "\260\0\100\27\200\0\113\27\5\0\1\27\102\0\15\27"+
    "\100\0\2\27\1\0\1\27\34\0\370\27\10\0\363\27"+
    "\15\0\37\27\61\0\3\27\21\0\4\27\10\0\u018c\27"+
    "\4\0\153\27\5\0\15\27\3\0\11\27\7\0\12\27"+
    "\146\0\125\27\1\0\107\27\1\0\2\27\2\0\1\27"+
    "\2\0\2\27\2\0\4\27\1\0\14\27\1\0\1\27"+
    "\1\0\7\27\1\0\101\27\1\0\4\27\2\0\10\27"+
    "\1\0\7\27\1\0\34\27\1\0\4\27\1\0\5\27"+
    "\1\0\1\27\3\0\7\27\1\0\u0154\27\2\0\31\27"+
    "\1\0\31\27\1\0\37\27\1\0\31\27\1\0\37\27"+
    "\1\0\31\27\1\0\37\27\1\0\31\27\1\0\37\27"+
    "\1\0\31\27\1\0\10\27\2\0\62\17\55\27\12\0"+
    "\7\27\2\0\12\17\4\0\1\27\u0171\0\54\27\4\0"+
    "\12\17\6\0\305\27\73\0\104\27\7\0\1\27\4\0"+
    "\12\17\246\0\4\27\1\0\33\27\1\0\2\27\1\0"+
    "\1\27\2\0\1\27\1\0\12\27\1\0\4\27\1\0"+
    "\1\27\1\0\1\27\6\0\1\27\4\0\1\27\1\0"+
    "\1\27\1\0\1\27\1\0\3\27\1\0\2\27\1\0"+
    "\1\27\2\0\1\27\1\0\1\27\1\0\1\27\1\0"+
    "\1\27\1\0\1\27\1\0\2\27\1\0\1\27\2\0"+
    "\4\27\1\0\7\27\1\0\4\27\1\0\4\27\1\0"+
    "\1\27\1\0\12\27\1\0\21\27\5\0\3\27\1\0"+
    "\5\27\1\0\21\27\104\0\327\27\51\0\65\27\13\0"+
    "\336\27\2\0\u0182\27\16\0\u0131\27\37\0\36\27\342\0";

  private static int [] zzUnpackcmap_blocks() {
    int [] result = new int[27648];
    int offset = 0;
    offset = zzUnpackcmap_blocks(ZZ_CMAP_BLOCKS_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackcmap_blocks(String packed, int offset, int [] result) {
    int i = 0;       /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      do result[j++] = value; while (--count > 0);
    }
    return j;
  }

  /**
   * Translates DFA states to action switch labels.
   */
  private static final int [] ZZ_ACTION = zzUnpackAction();

  private static final String ZZ_ACTION_PACKED_0 =
    "\6\0\1\1\1\2\1\1\1\3\1\4\1\1\1\3"+
    "\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14"+
    "\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24"+
    "\1\25\1\26\14\24\1\27\1\30\1\31\1\32\13\24"+
    "\1\33\1\34\1\35\1\36\1\37\1\40\1\41\15\42"+
    "\2\0\1\43\1\3\2\0\1\3\1\44\1\45\1\15"+
    "\1\46\1\0\1\47\1\50\1\51\1\52\1\53\1\54"+
    "\7\24\1\55\2\24\1\56\1\57\1\60\1\61\1\62"+
    "\1\63\1\24\1\64\10\24\1\65\5\24\1\66\1\24"+
    "\1\67\1\70\3\24\1\71\2\24\1\0\1\72\10\42"+
    "\1\55\2\42\1\56\1\57\1\60\1\61\1\42\1\62"+
    "\1\63\1\42\1\64\7\42\3\0\1\15\10\24\1\73"+
    "\11\24\1\74\1\24\1\75\5\24\1\76\5\24\11\42"+
    "\1\73\12\42\1\21\1\17\11\24\1\77\4\24\1\100"+
    "\1\101\1\102\1\103\1\24\1\104\4\24\1\105\2\24"+
    "\11\42\1\106\1\42\1\77\4\42\1\100\1\101\5\24"+
    "\1\107\14\24\1\110\1\111\6\42\1\107\6\42\11\24"+
    "\1\112\2\24\1\113\1\24\11\42\14\24\11\42\1\100"+
    "\7\24\1\114\1\115\2\24\1\100\10\42\3\24\1\100"+
    "\1\24\1\116\1\117\4\42\1\100\1\42\4\24\5\42"+
    "\3\24\4\42\3\24\4\42\3\24\4\42\2\24\1\120"+
    "\2\42\2\24\2\42\2\24\2\42\1\24\1\42\1\24"+
    "\1\42\1\24\1\42\1\24\1\42\1\24\1\42";

  private static int [] zzUnpackAction() {
    int [] result = new int[434];
    int offset = 0;
    offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackAction(String packed, int offset, int [] result) {
    int i = 0;       /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      do result[j++] = value; while (--count > 0);
    }
    return j;
  }


  /**
   * Translates a state to a row index in the transition table
   */
  private static final int [] ZZ_ROWMAP = zzUnpackRowMap();

  private static final String ZZ_ROWMAP_PACKED_0 =
    "\0\0\0\65\0\152\0\237\0\324\0\u0109\0\u013e\0\u0173"+
    "\0\u01a8\0\u01dd\0\u013e\0\u0212\0\u0247\0\u027c\0\u013e\0\u013e"+
    "\0\u013e\0\u013e\0\u013e\0\u02b1\0\u02e6\0\u031b\0\u0350\0\u0385"+
    "\0\u013e\0\u03ba\0\u013e\0\u013e\0\u03ef\0\u013e\0\u013e\0\u0424"+
    "\0\u0459\0\u048e\0\u04c3\0\u04f8\0\u052d\0\u0562\0\u0597\0\u05cc"+
    "\0\u0601\0\u0636\0\u066b\0\u013e\0\u013e\0\u013e\0\u013e\0\u06a0"+
    "\0\u06d5\0\u070a\0\u073f\0\u0774\0\u07a9\0\u07de\0\u0813\0\u0848"+
    "\0\u087d\0\u08b2\0\u0350\0\u08e7\0\u027c\0\u013e\0\u013e\0\u013e"+
    "\0\u013e\0\u091c\0\u0951\0\u0986\0\u09bb\0\u09f0\0\u0a25\0\u0a5a"+
    "\0\u0a8f\0\u0ac4\0\u0af9\0\u0b2e\0\u0b63\0\u0b98\0\u0bcd\0\u0c02"+
    "\0\u013e\0\u0c37\0\u0c6c\0\u0ca1\0\u0cd6\0\u013e\0\u013e\0\u0d0b"+
    "\0\u013e\0\u0d40\0\u013e\0\u013e\0\u013e\0\u013e\0\u013e\0\u013e"+
    "\0\u0d75\0\u0daa\0\u0ddf\0\u0e14\0\u0e49\0\u0e7e\0\u0eb3\0\u03ef"+
    "\0\u0ee8\0\u0f1d\0\u03ef\0\u03ef\0\u03ef\0\u03ef\0\u03ef\0\u03ef"+
    "\0\u0f52\0\u03ef\0\u0f87\0\u0fbc\0\u0ff1\0\u1026\0\u105b\0\u1090"+
    "\0\u10c5\0\u10fa\0\u03ef\0\u112f\0\u1164\0\u1199\0\u11ce\0\u1203"+
    "\0\u1238\0\u126d\0\u03ef\0\u03ef\0\u12a2\0\u12d7\0\u130c\0\u03ef"+
    "\0\u1341\0\u1376\0\u13ab\0\u013e\0\u13e0\0\u1415\0\u144a\0\u147f"+
    "\0\u14b4\0\u14e9\0\u151e\0\u1553\0\u091c\0\u1588\0\u15bd\0\u091c"+
    "\0\u091c\0\u091c\0\u091c\0\u15f2\0\u091c\0\u091c\0\u1627\0\u091c"+
    "\0\u165c\0\u1691\0\u16c6\0\u16fb\0\u1730\0\u1765\0\u179a\0\u17cf"+
    "\0\u1804\0\u1839\0\u1839\0\u186e\0\u18a3\0\u18d8\0\u190d\0\u1942"+
    "\0\u1977\0\u19ac\0\u19e1\0\u03ef\0\u1a16\0\u1a4b\0\u1a80\0\u1ab5"+
    "\0\u1aea\0\u1b1f\0\u1b54\0\u1b89\0\u1bbe\0\u03ef\0\u1bf3\0\u03ef"+
    "\0\u1c28\0\u1c5d\0\u1c92\0\u1cc7\0\u1cfc\0\u03ef\0\u1d31\0\u1d66"+
    "\0\u1d9b\0\u1dd0\0\u1e05\0\u1e3a\0\u1e6f\0\u1ea4\0\u1ed9\0\u1f0e"+
    "\0\u1f43\0\u1f78\0\u1fad\0\u1fe2\0\u091c\0\u2017\0\u204c\0\u2081"+
    "\0\u20b6\0\u20eb\0\u2120\0\u2155\0\u218a\0\u21bf\0\u21f4\0\u2229"+
    "\0\u225e\0\u2293\0\u22c8\0\u22fd\0\u2332\0\u2367\0\u239c\0\u23d1"+
    "\0\u2406\0\u243b\0\u03ef\0\u2470\0\u24a5\0\u24da\0\u250f\0\u03ef"+
    "\0\u03ef\0\u2544\0\u03ef\0\u2579\0\u03ef\0\u25ae\0\u25e3\0\u2618"+
    "\0\u264d\0\u03ef\0\u2682\0\u26b7\0\u26ec\0\u2721\0\u2756\0\u278b"+
    "\0\u27c0\0\u27f5\0\u282a\0\u285f\0\u2894\0\u091c\0\u28c9\0\u091c"+
    "\0\u28fe\0\u2933\0\u2968\0\u299d\0\u091c\0\u091c\0\u29d2\0\u2a07"+
    "\0\u2a3c\0\u2a71\0\u2aa6\0\u03ef\0\u2adb\0\u2b10\0\u2b45\0\u2b7a"+
    "\0\u2baf\0\u2be4\0\u2c19\0\u2c4e\0\u2c83\0\u2cb8\0\u2ced\0\u2d22"+
    "\0\u03ef\0\u03ef\0\u2d57\0\u2d8c\0\u2dc1\0\u2df6\0\u2e2b\0\u2e60"+
    "\0\u091c\0\u2e95\0\u2eca\0\u2eff\0\u2f34\0\u2f69\0\u2f9e\0\u2fd3"+
    "\0\u3008\0\u303d\0\u3072\0\u30a7\0\u30dc\0\u3111\0\u3146\0\u317b"+
    "\0\u03ef\0\u31b0\0\u31e5\0\u03ef\0\u321a\0\u324f\0\u3284\0\u32b9"+
    "\0\u32ee\0\u3323\0\u3358\0\u338d\0\u33c2\0\u33f7\0\u342c\0\u3461"+
    "\0\u3496\0\u34cb\0\u3500\0\u3535\0\u356a\0\u359f\0\u35d4\0\u3609"+
    "\0\u363e\0\u3673\0\u36a8\0\u36dd\0\u3712\0\u3747\0\u377c\0\u37b1"+
    "\0\u37e6\0\u381b\0\u3850\0\u3885\0\u38ba\0\u38ef\0\u3924\0\u3959"+
    "\0\u398e\0\u39c3\0\u39f8\0\u03ef\0\u03ef\0\u3a2d\0\u3a62\0\u3a97"+
    "\0\u3acc\0\u3b01\0\u3b36\0\u3b6b\0\u3ba0\0\u3bd5\0\u3c0a\0\u3c3f"+
    "\0\u3c74\0\u3ca9\0\u3cde\0\u3d13\0\u3d48\0\u03ef\0\u03ef\0\u3d7d"+
    "\0\u3db2\0\u3de7\0\u3e1c\0\u3e51\0\u3e86\0\u3ebb\0\u3ef0\0\u3f25"+
    "\0\u3f5a\0\u3f8f\0\u3fc4\0\u3ff9\0\u402e\0\u4063\0\u4098\0\u40cd"+
    "\0\u4102\0\u4137\0\u416c\0\u41a1\0\u41d6\0\u420b\0\u4240\0\u4275"+
    "\0\u42aa\0\u42df\0\u4314\0\u4349\0\u437e\0\u43b3\0\u43e8\0\u441d"+
    "\0\u4452\0\u4487\0\u44bc\0\u44f1\0\u4526\0\u091c\0\u455b\0\u4590"+
    "\0\u45c5\0\u45fa\0\u462f\0\u4664\0\u4699\0\u46ce\0\u4703\0\u4738"+
    "\0\u476d\0\u47a2\0\u47d7\0\u480c\0\u4841\0\u4876\0\u48ab\0\u48e0"+
    "\0\u4915\0\u494a";

  private static int [] zzUnpackRowMap() {
    int [] result = new int[434];
    int offset = 0;
    offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackRowMap(String packed, int offset, int [] result) {
    int i = 0;  /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length() - 1;
    while (i < l) {
      int high = packed.charAt(i++) << 16;
      result[j++] = high | packed.charAt(i++);
    }
    return j;
  }

  /**
   * The transition table of the DFA
   */
  private static final int [] ZZ_TRANS = zzUnpacktrans();

  private static final String ZZ_TRANS_PACKED_0 =
    "\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16"+
    "\1\17\1\20\1\21\1\22\1\23\1\24\1\25\1\26"+
    "\1\27\1\7\1\30\1\31\1\32\1\33\1\34\2\35"+
    "\1\36\1\37\1\40\1\35\1\41\1\42\1\43\1\44"+
    "\1\45\1\35\1\46\1\47\1\35\1\50\1\35\1\51"+
    "\2\35\1\52\1\53\5\35\1\54\1\55\1\56\1\7"+
    "\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17"+
    "\1\57\1\21\1\22\1\23\1\24\1\25\1\26\1\27"+
    "\1\7\1\30\1\31\1\32\1\33\1\34\2\35\1\36"+
    "\1\37\1\60\1\35\1\61\1\62\1\63\1\44\1\45"+
    "\1\35\1\64\1\47\1\65\1\50\1\66\1\51\1\35"+
    "\1\67\1\70\1\71\1\72\4\35\1\54\1\55\1\56"+
    "\1\7\1\10\1\11\1\12\1\13\1\14\1\15\1\16"+
    "\1\17\1\7\1\21\1\22\1\23\1\24\1\25\1\26"+
    "\1\73\1\7\1\30\1\31\1\32\1\33\1\34\2\74"+
    "\1\36\1\37\27\74\1\54\1\55\1\56\1\7\1\10"+
    "\1\11\1\12\1\13\1\14\1\15\1\75\1\76\1\77"+
    "\1\100\1\22\1\23\1\24\1\25\1\26\1\73\1\7"+
    "\1\30\1\31\1\32\1\101\1\34\2\102\1\36\1\37"+
    "\1\103\1\102\1\104\1\105\1\106\1\107\1\110\1\102"+
    "\1\111\1\112\1\102\1\113\1\102\1\114\2\102\1\115"+
    "\1\116\5\102\1\54\1\55\1\56\27\0\2\117\2\0"+
    "\27\117\23\0\1\120\132\0\1\10\106\0\1\121\41\0"+
    "\3\12\1\122\61\12\41\0\1\123\2\0\1\124\20\0"+
    "\6\15\1\125\56\15\20\0\1\126\61\0\1\127\1\0"+
    "\1\130\63\0\1\131\63\0\1\130\1\0\1\26\10\0"+
    "\1\132\6\0\1\132\35\0\1\133\7\0\1\134\66\0"+
    "\1\135\1\136\64\0\1\137\1\140\54\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\27\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\13\35\1\141\5\35\1\142"+
    "\5\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\7\35\1\143\4\35\1\144\12\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\4\35\1\145\7\35\1\146"+
    "\12\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\11\35\1\147\4\35\1\150\4\35\1\151\3\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\14\35\1\152"+
    "\12\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\4\35\1\153\14\35\1\154\5\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\5\35\1\155\12\35\1\156"+
    "\6\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\4\35\1\157\14\35\1\160\5\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\1\161\3\35\1\162\7\35"+
    "\1\163\12\35\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\1\164\16\35\1\165\7\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\2\35\1\166\1\35\1\167"+
    "\7\35\1\170\12\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\4\35\1\171\22\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\13\35\1\172\4\35\1\173"+
    "\1\142\5\35\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\1\174\6\35\1\143\4\35\1\144\12\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\4\35\1\145"+
    "\3\35\1\175\3\35\1\146\12\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\11\35\1\176\4\35\1\150"+
    "\4\35\1\151\1\35\1\177\1\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\3\35\1\200\1\35\1\155"+
    "\5\35\1\201\4\35\1\156\6\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\14\35\1\202\12\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\5\35\1\203"+
    "\11\35\1\204\7\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\4\35\1\205\22\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\1\206\1\35\1\166\1\35"+
    "\1\167\7\35\1\170\12\35\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\4\35\1\171\2\35\1\207\4\35"+
    "\1\210\2\35\1\211\7\35\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\13\35\1\212\13\35\4\0\1\213"+
    "\12\0\2\74\1\0\1\74\1\214\6\0\2\74\2\0"+
    "\27\74\17\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\27\102\17\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\13\102\1\215\5\102\1\216\5\102\17\0\2\102\1\0"+
    "\1\102\7\0\2\102\2\0\7\102\1\217\4\102\1\220"+
    "\12\102\17\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\4\102\1\221\7\102\1\222\12\102\17\0\2\102\1\0"+
    "\1\102\7\0\2\102\2\0\11\102\1\223\1\224\3\102"+
    "\1\225\4\102\1\226\3\102\17\0\2\102\1\0\1\102"+
    "\7\0\2\102\2\0\14\102\1\227\12\102\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\4\102\1\230\14\102"+
    "\1\231\5\102\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\5\102\1\232\12\102\1\233\1\234\5\102\17\0"+
    "\2\102\1\0\1\102\7\0\2\102\2\0\4\102\1\235"+
    "\14\102\1\236\5\102\17\0\2\102\1\0\1\102\7\0"+
    "\2\102\2\0\1\237\3\102\1\240\7\102\1\241\12\102"+
    "\17\0\2\102\1\0\1\102\7\0\2\102\2\0\1\242"+
    "\16\102\1\243\7\102\17\0\2\102\1\0\1\102\7\0"+
    "\2\102\2\0\2\102\1\244\1\102\1\245\7\102\1\246"+
    "\12\102\17\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\4\102\1\247\22\102\17\0\2\117\1\0\1\117\7\0"+
    "\2\117\2\0\27\117\4\0\1\120\66\0\1\12\135\0"+
    "\1\250\64\0\1\251\16\0\1\15\75\0\1\130\10\0"+
    "\1\132\6\0\1\132\37\0\1\252\1\0\1\252\2\0"+
    "\1\253\61\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\2\35\1\254\24\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\21\35\1\255\5\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\10\35\1\256\16\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\12\35\1\257"+
    "\14\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\20\35\1\260\6\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\2\35\1\261\24\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\4\35\1\257\22\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\4\35\1\262"+
    "\22\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\11\35\1\263\5\35\1\264\7\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\12\35\1\265\14\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\3\35\1\266"+
    "\23\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\17\35\1\267\7\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\4\35\1\270\7\35\1\271\12\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\7\35\1\272"+
    "\17\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\11\35\1\273\15\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\12\35\1\274\14\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\25\35\1\275\1\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\2\35\1\254"+
    "\1\276\23\35\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\20\35\1\277\6\35\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\23\35\1\300\3\35\17\0\2\35"+
    "\1\0\1\35\7\0\2\35\2\0\4\35\1\257\13\35"+
    "\1\301\6\35\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\2\35\1\302\24\35\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\10\35\1\303\16\35\17\0\2\35"+
    "\1\0\1\35\7\0\2\35\2\0\20\35\1\304\1\305"+
    "\5\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\3\35\1\306\23\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\21\35\1\307\5\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\21\35\1\310\5\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\4\35\1\311"+
    "\22\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\4\35\1\312\22\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\10\35\1\313\16\35\4\0\1\213\16\0"+
    "\1\214\60\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\2\102\1\314\24\102\17\0\2\102\1\0\1\102\7\0"+
    "\2\102\2\0\21\102\1\315\5\102\17\0\2\102\1\0"+
    "\1\102\7\0\2\102\2\0\10\102\1\316\16\102\17\0"+
    "\2\102\1\0\1\102\7\0\2\102\2\0\12\102\1\317"+
    "\14\102\17\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\20\102\1\320\6\102\17\0\2\102\1\0\1\102\7\0"+
    "\2\102\2\0\2\102\1\321\24\102\17\0\2\102\1\0"+
    "\1\102\7\0\2\102\2\0\4\102\1\317\22\102\17\0"+
    "\2\102\1\0\1\102\7\0\2\102\2\0\15\102\1\322"+
    "\11\102\17\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\4\102\1\323\22\102\17\0\2\102\1\0\1\102\7\0"+
    "\2\102\2\0\11\102\1\324\5\102\1\325\7\102\17\0"+
    "\2\102\1\0\1\102\7\0\2\102\2\0\4\102\1\326"+
    "\22\102\17\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\12\102\1\327\14\102\17\0\2\102\1\0\1\102\7\0"+
    "\2\102\2\0\3\102\1\330\23\102\17\0\2\102\1\0"+
    "\1\102\7\0\2\102\2\0\17\102\1\331\7\102\17\0"+
    "\2\102\1\0\1\102\7\0\2\102\2\0\4\102\1\332"+
    "\7\102\1\333\12\102\17\0\2\102\1\0\1\102\7\0"+
    "\2\102\2\0\7\102\1\334\17\102\17\0\2\102\1\0"+
    "\1\102\7\0\2\102\2\0\11\102\1\335\15\102\17\0"+
    "\2\102\1\0\1\102\7\0\2\102\2\0\12\102\1\336"+
    "\14\102\17\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\25\102\1\337\1\102\24\0\1\340\64\0\1\341\62\0"+
    "\1\253\61\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\4\35\1\342\22\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\17\35\1\343\7\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\11\35\1\344\15\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\12\35\1\345"+
    "\14\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\2\35\1\346\24\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\22\35\1\347\4\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\17\35\1\350\7\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\11\35\1\351"+
    "\15\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\4\35\1\352\22\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\4\35\1\353\22\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\4\35\1\354\22\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\2\35\1\355"+
    "\24\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\2\35\1\356\24\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\4\35\1\357\22\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\5\35\1\360\21\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\4\35\1\361"+
    "\22\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\21\35\1\353\5\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\21\35\1\362\5\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\4\35\1\363\22\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\4\35\1\364"+
    "\22\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\23\35\1\365\3\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\21\35\1\366\5\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\4\35\1\367\22\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\22\35\1\370"+
    "\4\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\10\35\1\371\16\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\13\35\1\372\13\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\1\373\26\35\17\0\2\35"+
    "\1\0\1\35\7\0\2\35\2\0\14\35\1\374\12\35"+
    "\17\0\2\102\1\0\1\102\7\0\2\102\2\0\4\102"+
    "\1\375\22\102\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\17\102\1\376\7\102\17\0\2\102\1\0\1\102"+
    "\7\0\2\102\2\0\11\102\1\377\15\102\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\12\102\1\u0100\14\102"+
    "\17\0\2\102\1\0\1\102\7\0\2\102\2\0\2\102"+
    "\1\u0101\24\102\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\22\102\1\u0102\4\102\17\0\2\102\1\0\1\102"+
    "\7\0\2\102\2\0\21\102\1\u0103\5\102\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\17\102\1\u0104\7\102"+
    "\17\0\2\102\1\0\1\102\7\0\2\102\2\0\11\102"+
    "\1\u0105\15\102\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\12\102\1\u0106\14\102\17\0\2\102\1\0\1\102"+
    "\7\0\2\102\2\0\4\102\1\u0107\22\102\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\4\102\1\u0108\22\102"+
    "\17\0\2\102\1\0\1\102\7\0\2\102\2\0\4\102"+
    "\1\u0109\22\102\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\2\102\1\u010a\24\102\17\0\2\102\1\0\1\102"+
    "\7\0\2\102\2\0\2\102\1\u010b\24\102\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\4\102\1\u010c\22\102"+
    "\17\0\2\102\1\0\1\102\7\0\2\102\2\0\5\102"+
    "\1\u010d\21\102\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\4\102\1\u010e\22\102\17\0\2\102\1\0\1\102"+
    "\7\0\2\102\2\0\21\102\1\u0108\5\102\26\0\1\137"+
    "\64\0\1\136\55\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\20\35\1\u010f\6\35\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\10\35\1\u0110\16\35\17\0\2\35"+
    "\1\0\1\35\7\0\2\35\2\0\3\35\1\360\23\35"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\4\35"+
    "\1\u0111\22\35\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\4\35\1\u0112\22\35\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\12\35\1\u0113\14\35\17\0\2\35"+
    "\1\0\1\35\7\0\2\35\2\0\26\35\1\u0114\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\14\35\1\u0115"+
    "\12\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\20\35\1\u0116\6\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\13\35\1\u0117\13\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\4\35\1\u0118\22\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\4\35\1\u0119"+
    "\22\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\12\35\1\u011a\14\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\1\u011b\26\35\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\15\35\1\u011c\11\35\17\0\2\35"+
    "\1\0\1\35\7\0\2\35\2\0\1\u011d\26\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\17\35\1\u011e"+
    "\7\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\17\35\1\u011f\7\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\20\35\1\u0120\6\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\21\35\1\u0121\5\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\13\35\1\u0122"+
    "\13\35\17\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\20\102\1\u0123\6\102\17\0\2\102\1\0\1\102\7\0"+
    "\2\102\2\0\10\102\1\u0124\16\102\17\0\2\102\1\0"+
    "\1\102\7\0\2\102\2\0\3\102\1\u010d\23\102\17\0"+
    "\2\102\1\0\1\102\7\0\2\102\2\0\4\102\1\u0125"+
    "\22\102\17\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\4\102\1\u0126\22\102\17\0\2\102\1\0\1\102\7\0"+
    "\2\102\2\0\12\102\1\u0127\14\102\17\0\2\102\1\0"+
    "\1\102\7\0\2\102\2\0\26\102\1\u0128\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\26\102\1\u0129\17\0"+
    "\2\102\1\0\1\102\7\0\2\102\2\0\14\102\1\u012a"+
    "\12\102\17\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\20\102\1\u012b\6\102\17\0\2\102\1\0\1\102\7\0"+
    "\2\102\2\0\13\102\1\u012c\13\102\17\0\2\102\1\0"+
    "\1\102\7\0\2\102\2\0\4\102\1\u012d\22\102\17\0"+
    "\2\102\1\0\1\102\7\0\2\102\2\0\4\102\1\u012e"+
    "\22\102\17\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\12\102\1\u012f\14\102\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\21\35\1\u0130\5\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\1\35\1\u0131\25\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\13\35\1\275"+
    "\13\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\13\35\1\u0132\13\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\4\35\1\u0133\22\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\24\35\1\u0134\2\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\15\35\1\u0135"+
    "\11\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\21\35\1\360\5\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\3\35\1\u0134\23\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\20\35\1\u0136\6\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\1\u0137\26\35"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\1\35"+
    "\1\u0138\25\35\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\21\35\1\u0139\5\35\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\13\35\1\u013a\13\35\17\0\2\35"+
    "\1\0\1\35\7\0\2\35\2\0\20\35\1\u013b\6\35"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\13\35"+
    "\1\u013c\13\35\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\5\35\1\u013d\21\35\17\0\2\102\1\0\1\102"+
    "\7\0\2\102\2\0\21\102\1\u013e\5\102\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\1\102\1\u013f\25\102"+
    "\17\0\2\102\1\0\1\102\7\0\2\102\2\0\13\102"+
    "\1\337\13\102\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\13\102\1\u0140\13\102\17\0\2\102\1\0\1\102"+
    "\7\0\2\102\2\0\4\102\1\u0141\22\102\17\0\1\u0142"+
    "\1\102\1\0\1\102\7\0\2\102\2\0\27\102\17\0"+
    "\2\102\1\0\1\102\7\0\2\102\2\0\24\102\1\u0143"+
    "\2\102\17\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\15\102\1\u0144\11\102\17\0\2\102\1\0\1\102\7\0"+
    "\2\102\2\0\21\102\1\u010d\5\102\17\0\2\102\1\0"+
    "\1\102\7\0\2\102\2\0\3\102\1\u0143\23\102\17\0"+
    "\2\102\1\0\1\102\7\0\2\102\2\0\20\102\1\u0145"+
    "\6\102\17\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\1\u0146\26\102\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\14\35\1\u0147\12\35\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\22\35\1\u0148\4\35\17\0\2\35"+
    "\1\0\1\35\7\0\2\35\2\0\3\35\1\u0149\23\35"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\13\35"+
    "\1\u014a\13\35\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\10\35\1\u014b\16\35\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\1\u014c\26\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\20\35\1\u014d\6\35\17\0"+
    "\1\u014e\1\35\1\0\1\35\7\0\2\35\2\0\27\35"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\11\35"+
    "\1\u014f\15\35\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\2\35\1\u0150\24\35\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\4\35\1\u0151\22\35\17\0\2\35"+
    "\1\0\1\35\7\0\2\35\2\0\10\35\1\u0152\16\35"+
    "\17\0\2\102\1\0\1\102\7\0\2\102\2\0\14\102"+
    "\1\u0153\12\102\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\22\102\1\u0154\4\102\17\0\2\102\1\0\1\102"+
    "\7\0\2\102\2\0\3\102\1\u0155\23\102\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\13\102\1\u0156\13\102"+
    "\17\0\2\102\1\0\1\102\7\0\2\102\2\0\20\102"+
    "\1\u0157\6\102\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\10\102\1\u0158\16\102\17\0\2\102\1\0\1\102"+
    "\7\0\2\102\2\0\1\u0159\26\102\17\0\2\102\1\0"+
    "\1\102\7\0\2\102\2\0\20\102\1\u015a\6\102\17\0"+
    "\1\u015b\1\102\1\0\1\102\7\0\2\102\2\0\27\102"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\17\35"+
    "\1\u015c\7\35\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\21\35\1\266\5\35\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\1\u015d\26\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\21\35\1\u015e\5\35\17\0"+
    "\2\35\1\0\1\35\7\0\2\35\2\0\13\35\1\u015f"+
    "\13\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\2\35\1\u0160\24\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\10\35\1\u0161\16\35\17\0\2\35\1\0"+
    "\1\35\7\0\2\35\2\0\1\u0162\3\35\1\u0163\22\35"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\4\35"+
    "\1\u0164\22\35\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\4\35\1\u0165\22\35\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\2\35\1\u0166\24\35\17\0\2\35"+
    "\1\0\1\35\7\0\2\35\2\0\4\35\1\u0167\22\35"+
    "\17\0\2\102\1\0\1\102\7\0\2\102\2\0\17\102"+
    "\1\u0168\7\102\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\21\102\1\330\5\102\17\0\2\102\1\0\1\102"+
    "\7\0\2\102\2\0\1\u0169\26\102\17\0\2\102\1\0"+
    "\1\102\7\0\2\102\2\0\21\102\1\u016a\5\102\17\0"+
    "\2\102\1\0\1\102\7\0\2\102\2\0\4\102\1\u016b"+
    "\22\102\17\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\13\102\1\u016c\13\102\17\0\2\102\1\0\1\102\7\0"+
    "\2\102\2\0\2\102\1\u016d\24\102\17\0\2\102\1\0"+
    "\1\102\7\0\2\102\2\0\10\102\1\u016e\16\102\17\0"+
    "\2\102\1\0\1\102\7\0\2\102\2\0\1\u016f\3\102"+
    "\1\u0170\22\102\17\0\1\u0171\1\35\1\0\1\35\7\0"+
    "\2\35\2\0\27\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\13\35\1\u0172\13\35\17\0\1\u0173\1\35"+
    "\1\0\1\35\7\0\2\35\2\0\27\35\17\0\2\35"+
    "\1\0\1\35\7\0\2\35\2\0\6\35\1\u0174\20\35"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\4\35"+
    "\1\360\22\35\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\13\35\1\u0175\13\35\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\21\35\1\142\5\35\17\0\2\35"+
    "\1\0\1\35\7\0\2\35\2\0\11\35\1\147\15\35"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\21\35"+
    "\1\u0176\5\35\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\20\35\1\u0177\6\35\17\0\1\u0178\1\102\1\0"+
    "\1\102\7\0\2\102\2\0\27\102\17\0\2\102\1\0"+
    "\1\102\7\0\2\102\2\0\13\102\1\u0179\13\102\17\0"+
    "\1\u017a\1\102\1\0\1\102\7\0\2\102\2\0\27\102"+
    "\17\0\2\102\1\0\1\102\7\0\2\102\2\0\16\102"+
    "\1\u017b\10\102\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\6\102\1\u017c\20\102\17\0\2\102\1\0\1\102"+
    "\7\0\2\102\2\0\4\102\1\u010d\22\102\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\13\102\1\u017d\13\102"+
    "\17\0\2\102\1\0\1\102\7\0\2\102\2\0\21\102"+
    "\1\216\5\102\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\11\102\1\223\15\102\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\14\35\1\u017e\12\35\17\0\2\35"+
    "\1\0\1\35\7\0\2\35\2\0\21\35\1\u015c\5\35"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\13\35"+
    "\1\u017f\13\35\17\0\1\u0180\1\35\1\0\1\35\7\0"+
    "\2\35\2\0\27\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\6\35\1\u0181\20\35\17\0\2\102\1\0"+
    "\1\102\7\0\2\102\2\0\14\102\1\u0182\12\102\17\0"+
    "\2\102\1\0\1\102\7\0\2\102\2\0\21\102\1\u0168"+
    "\5\102\17\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\13\102\1\u0183\13\102\17\0\2\102\1\0\1\102\7\0"+
    "\2\102\2\0\22\102\1\u0184\4\102\17\0\1\u0185\1\102"+
    "\1\0\1\102\7\0\2\102\2\0\27\102\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\6\102\1\u0186\20\102"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\17\35"+
    "\1\u0187\7\35\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\14\35\1\163\12\35\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\20\35\1\u0188\6\35\17\0\1\u0189"+
    "\1\35\1\0\1\35\7\0\2\35\2\0\27\35\17\0"+
    "\2\102\1\0\1\102\7\0\2\102\2\0\17\102\1\u018a"+
    "\7\102\17\0\2\102\1\0\1\102\7\0\2\102\2\0"+
    "\14\102\1\241\12\102\17\0\2\102\1\0\1\102\7\0"+
    "\2\102\2\0\4\102\1\u018b\22\102\17\0\2\102\1\0"+
    "\1\102\7\0\2\102\2\0\20\102\1\u018c\6\102\17\0"+
    "\1\u018d\1\102\1\0\1\102\7\0\2\102\2\0\27\102"+
    "\17\0\1\u018e\1\35\1\0\1\35\7\0\2\35\2\0"+
    "\27\35\17\0\2\35\1\0\1\35\7\0\2\35\2\0"+
    "\10\35\1\u018f\16\35\17\0\2\35\1\0\1\35\7\0"+
    "\2\35\2\0\10\35\1\u0190\16\35\17\0\1\u0191\1\102"+
    "\1\0\1\102\7\0\2\102\2\0\27\102\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\13\102\1\u0192\13\102"+
    "\17\0\2\102\1\0\1\102\7\0\2\102\2\0\10\102"+
    "\1\u0193\16\102\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\10\102\1\u0194\16\102\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\20\35\1\u0195\6\35\17\0\2\35"+
    "\1\0\1\35\7\0\2\35\2\0\1\35\1\u0196\25\35"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\13\35"+
    "\1\u0197\13\35\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\20\102\1\u0198\6\102\17\0\2\102\1\0\1\102"+
    "\7\0\2\102\2\0\2\102\1\u0199\24\102\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\1\102\1\u019a\25\102"+
    "\17\0\2\102\1\0\1\102\7\0\2\102\2\0\13\102"+
    "\1\u019b\13\102\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\4\35\1\167\22\35\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\11\35\1\u019c\15\35\17\0\2\35"+
    "\1\0\1\35\7\0\2\35\2\0\20\35\1\u019d\6\35"+
    "\17\0\2\102\1\0\1\102\7\0\2\102\2\0\4\102"+
    "\1\245\22\102\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\4\102\1\u019e\22\102\17\0\2\102\1\0\1\102"+
    "\7\0\2\102\2\0\11\102\1\u019f\15\102\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\20\102\1\u01a0\6\102"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\10\35"+
    "\1\u01a1\16\35\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\21\35\1\u01a2\5\35\17\0\2\102\1\0\1\102"+
    "\7\0\2\102\2\0\10\102\1\u01a3\16\102\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\21\102\1\u01a4\5\102"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\13\35"+
    "\1\u01a5\13\35\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\17\35\1\u01a6\7\35\17\0\2\102\1\0\1\102"+
    "\7\0\2\102\2\0\13\102\1\u01a7\13\102\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\17\102\1\u01a8\7\102"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\6\35"+
    "\1\360\20\35\17\0\2\35\1\0\1\35\7\0\2\35"+
    "\2\0\22\35\1\u01a9\4\35\17\0\2\102\1\0\1\102"+
    "\7\0\2\102\2\0\6\102\1\u010d\20\102\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\22\102\1\u01aa\4\102"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\2\35"+
    "\1\u01ab\24\35\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\2\102\1\u01ac\24\102\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\21\35\1\u01ad\5\35\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\21\102\1\u01ae\5\102"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\10\35"+
    "\1\u01af\16\35\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\10\102\1\u01b0\16\102\17\0\2\35\1\0\1\35"+
    "\7\0\2\35\2\0\14\35\1\u01b1\12\35\17\0\2\102"+
    "\1\0\1\102\7\0\2\102\2\0\14\102\1\u01b2\12\102"+
    "\17\0\2\35\1\0\1\35\7\0\2\35\2\0\13\35"+
    "\1\353\13\35\17\0\2\102\1\0\1\102\7\0\2\102"+
    "\2\0\13\102\1\u0108\13\102\3\0";

  private static int [] zzUnpacktrans() {
    int [] result = new int[18815];
    int offset = 0;
    offset = zzUnpacktrans(ZZ_TRANS_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpacktrans(String packed, int offset, int [] result) {
    int i = 0;       /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      value--;
      do result[j++] = value; while (--count > 0);
    }
    return j;
  }


  /* error codes */
  private static final int ZZ_UNKNOWN_ERROR = 0;
  private static final int ZZ_NO_MATCH = 1;
  private static final int ZZ_PUSHBACK_2BIG = 2;

  /* error messages for the codes above */
  private static final String[] ZZ_ERROR_MSG = {
    "Unknown internal scanner error",
    "Error: could not match input",
    "Error: pushback value was too large"
  };

  /**
   * ZZ_ATTRIBUTE[aState] contains the attributes of state {@code aState}
   */
  private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();

  private static final String ZZ_ATTRIBUTE_PACKED_0 =
    "\6\0\1\11\3\1\1\11\3\1\5\11\5\1\1\11"+
    "\1\1\2\11\1\1\2\11\14\1\4\11\16\1\4\11"+
    "\17\1\1\11\1\1\2\0\1\1\2\11\1\1\1\11"+
    "\1\0\6\11\52\1\1\0\1\11\33\1\3\0\u0108\1";

  private static int [] zzUnpackAttribute() {
    int [] result = new int[434];
    int offset = 0;
    offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackAttribute(String packed, int offset, int [] result) {
    int i = 0;       /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length();
    while (i < l) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      do result[j++] = value; while (--count > 0);
    }
    return j;
  }

  /** the input device */
  private java.io.Reader zzReader;

  /** the current state of the DFA */
  private int zzState;

  /** the current lexical state */
  private int zzLexicalState = YYINITIAL;

  /** this buffer contains the current text to be matched and is
      the source of the yytext() string */
  private CharSequence zzBuffer = "";

  /** the textposition at the last accepting state */
  private int zzMarkedPos;

  /** the current text position in the buffer */
  private int zzCurrentPos;

  /** startRead marks the beginning of the yytext() string in the buffer */
  private int zzStartRead;

  /** endRead marks the last character in the buffer, that has been read
      from input */
  private int zzEndRead;

  /** zzAtEOF == true <=> the scanner is at the EOF */
  private boolean zzAtEOF;

  /** For the backwards DFA of general lookahead statements */
  private boolean [] zzFin = new boolean [Math.min(ZZ_BUFFERSIZE, zzMaxBufferLen())+1];

  /** Number of newlines encountered up to the start of the matched text. */
  @SuppressWarnings("unused")
  private int yyline;

  /** Number of characters from the last newline up to the start of the matched text. */
  @SuppressWarnings("unused")
  protected int yycolumn;

  /** Number of characters up to the start of the matched text. */
  @SuppressWarnings("unused")
  private long yychar;

  /** Whether the scanner is currently at the beginning of a line. */
  @SuppressWarnings("unused")
  private boolean zzAtBOL = true;

  /** Whether the user-EOF-code has already been executed. */
  @SuppressWarnings("unused")
  private boolean zzEOFDone;

  /* user code: */
  private boolean allowXPath2Syntax = false;

  _XPathLexer(boolean allowXPath2Syntax) {
    this((java.io.Reader)null);
    this.allowXPath2Syntax = allowXPath2Syntax;
  }

  public final void setStart(int start) {
    zzCurrentPos = zzStartRead = start;
  }

  private IElementType ncName() {
    yybegin(S1);
    return XPathTokenTypes.NCNAME;
  }

  protected abstract void readComment() throws java.io.IOException;


  /**
   * Creates a new scanner
   *
   * @param   in  the java.io.Reader to read input from.
   */
  _XPathLexer(java.io.Reader in) {
    this.zzReader = in;
  }


  /** Returns the maximum size of the scanner buffer, which limits the size of tokens. */
  private int zzMaxBufferLen() {
    return Integer.MAX_VALUE;
  }

  /**  Whether the scanner buffer can grow to accommodate a larger token. */
  private boolean zzCanGrow() {
    return true;
  }

  /**
   * Translates raw input code points to DFA table row
   */
  private static int zzCMap(int input) {
    int offset = input & 255;
    return offset == input ? ZZ_CMAP_BLOCKS[offset] : ZZ_CMAP_BLOCKS[ZZ_CMAP_TOP[input >> 8] | offset];
  }

  public final int getTokenStart() {
    return zzStartRead;
  }

  public final int getTokenEnd() {
    return getTokenStart() + yylength();
  }

  public void reset(CharSequence buffer, int start, int end, int initialState) {
    zzBuffer = buffer;
    zzCurrentPos = zzMarkedPos = zzStartRead = start;
    zzAtEOF  = false;
    zzAtBOL = true;
    zzEndRead = end;
    yybegin(initialState);
  }

  /**
   * Refills the input buffer.
   *
   * @return      {@code false}, iff there was new input.
   *
   * @exception   java.io.IOException  if any I/O-Error occurs
   */
  private boolean zzRefill() throws java.io.IOException {
    return true;
  }


  /**
   * Returns the current lexical state.
   */
  public final int yystate() {
    return zzLexicalState;
  }


  /**
   * Enters a new lexical state
   *
   * @param newState the new lexical state
   */
  public final void yybegin(int newState) {
    zzLexicalState = newState;
  }


  /**
   * Returns the text matched by the current regular expression.
   */
  public final CharSequence yytext() {
    return zzBuffer.subSequence(zzStartRead, zzMarkedPos);
  }


  /**
   * Returns the character at position {@code pos} from the
   * matched text.
   *
   * It is equivalent to yytext().charAt(pos), but faster
   *
   * @param pos the position of the character to fetch.
   *            A value from 0 to yylength()-1.
   *
   * @return the character at position pos
   */
  public final char yycharat(int pos) {
    return zzBuffer.charAt(zzStartRead+pos);
  }


  /**
   * Returns the length of the matched text region.
   */
  public final int yylength() {
    return zzMarkedPos-zzStartRead;
  }


  /**
   * Reports an error that occurred while scanning.
   *
   * In a wellformed scanner (no or only correct usage of
   * yypushback(int) and a match-all fallback rule) this method
   * will only be called with things that "Can't Possibly Happen".
   * If this method is called, something is seriously wrong
   * (e.g. a JFlex bug producing a faulty scanner etc.).
   *
   * Usual syntax/scanner level error handling should be done
   * in error fallback rules.
   *
   * @param   errorCode  the code of the errormessage to display
   */
  private void zzScanError(int errorCode) {
    String message;
    try {
      message = ZZ_ERROR_MSG[errorCode];
    }
    catch (ArrayIndexOutOfBoundsException e) {
      message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
    }

    throw new Error(message);
  }


  /**
   * Pushes the specified amount of characters back into the input stream.
   *
   * They will be read again by then next call of the scanning method
   *
   * @param number  the number of characters to be read again.
   *                This number must not be greater than yylength()!
   */
  public void yypushback(int number)  {
    if ( number > yylength() )
      zzScanError(ZZ_PUSHBACK_2BIG);

    zzMarkedPos -= number;
  }


  /**
   * Resumes scanning until the next regular expression is matched,
   * the end of input is encountered or an I/O-Error occurs.
   *
   * @return      the next token
   * @exception   java.io.IOException  if any I/O-Error occurs
   */
  public IElementType advance() throws java.io.IOException
  {
    int zzInput;
    int zzAction;

    // cached fields:
    int zzCurrentPosL;
    int zzMarkedPosL;
    int zzEndReadL = zzEndRead;
    CharSequence zzBufferL = zzBuffer;

    int [] zzTransL = ZZ_TRANS;
    int [] zzRowMapL = ZZ_ROWMAP;
    int [] zzAttrL = ZZ_ATTRIBUTE;

    while (true) {
      zzMarkedPosL = zzMarkedPos;

      zzAction = -1;

      zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;

      zzState = ZZ_LEXSTATE[zzLexicalState];

      // set up zzAction for empty match case:
      int zzAttributes = zzAttrL[zzState];
      if ( (zzAttributes & 1) == 1 ) {
        zzAction = zzState;
      }


      zzForAction: {
        while (true) {

          if (zzCurrentPosL < zzEndReadL) {
            zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL);
            zzCurrentPosL += Character.charCount(zzInput);
          }
          else if (zzAtEOF) {
            zzInput = YYEOF;
            break zzForAction;
          }
          else {
            // store back cached positions
            zzCurrentPos  = zzCurrentPosL;
            zzMarkedPos   = zzMarkedPosL;
            boolean eof = zzRefill();
            // get translated positions and possibly new buffer
            zzCurrentPosL  = zzCurrentPos;
            zzMarkedPosL   = zzMarkedPos;
            zzBufferL      = zzBuffer;
            zzEndReadL     = zzEndRead;
            if (eof) {
              zzInput = YYEOF;
              break zzForAction;
            }
            else {
              zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL);
              zzCurrentPosL += Character.charCount(zzInput);
            }
          }
          int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMap(zzInput) ];
          if (zzNext == -1) break zzForAction;
          zzState = zzNext;

          zzAttributes = zzAttrL[zzState];
          if ( (zzAttributes & 1) == 1 ) {
            zzAction = zzState;
            zzMarkedPosL = zzCurrentPosL;
            if ( (zzAttributes & 8) == 8 ) break zzForAction;
          }

        }
      }

      // store back cached position
      zzMarkedPos = zzMarkedPosL;

      if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
        zzAtEOF = true;
        return null;
      }
      else {
        switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
          case 1:
            { yybegin(YYINITIAL);   return XPathTokenTypes.BAD_CHARACTER;
            }
          // fall through
          case 81: break;
          case 2:
            { return XPathTokenTypes.WHITESPACE;
            }
          // fall through
          case 82: break;
          case 3:
            { yybegin(S1);          return XPathTokenTypes.STRING_LITERAL;
            }
          // fall through
          case 83: break;
          case 4:
            { yybegin(VAR);         return XPathTokenTypes.DOLLAR;
            }
          // fall through
          case 84: break;
          case 5:
            { yybegin(YYINITIAL);   return XPathTokenTypes.LPAREN;
            }
          // fall through
          case 85: break;
          case 6:
            { yybegin(S1);          return XPathTokenTypes.RPAREN;
            }
          // fall through
          case 86: break;
          case 7:
            { yybegin(S1);          return XPathTokenTypes.STAR;
            }
          // fall through
          case 87: break;
          case 8:
            { yybegin(YYINITIAL);   return XPathTokenTypes.PLUS;
            }
          // fall through
          case 88: break;
          case 9:
            { yybegin(YYINITIAL);   return XPathTokenTypes.COMMA;
            }
          // fall through
          case 89: break;
          case 10:
            { yybegin(YYINITIAL);   return XPathTokenTypes.MINUS;
            }
          // fall through
          case 90: break;
          case 11:
            { yybegin(S1);          return XPathTokenTypes.DOT;
            }
          // fall through
          case 91: break;
          case 12:
            { yybegin(YYINITIAL);   return XPathTokenTypes.PATH;
            }
          // fall through
          case 92: break;
          case 13:
            { yybegin(S1);          return XPathTokenTypes.NUMBER;
            }
          // fall through
          case 93: break;
          case 14:
            { yybegin(YYINITIAL);   return XPathTokenTypes.COL;
            }
          // fall through
          case 94: break;
          case 15:
            { yybegin(YYINITIAL);   return XPathTokenTypes.LT;
            }
          // fall through
          case 95: break;
          case 16:
            { yybegin(YYINITIAL);   return XPathTokenTypes.EQ;
            }
          // fall through
          case 96: break;
          case 17:
            { yybegin(YYINITIAL);   return XPathTokenTypes.GT;
            }
          // fall through
          case 97: break;
          case 18:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL);   return XPath2TokenTypes.QUEST; } else { return XPathTokenTypes.BAD_CHARACTER; }
            }
          // fall through
          case 98: break;
          case 19:
            { yybegin(YYINITIAL);   return XPathTokenTypes.AT;
            }
          // fall through
          case 99: break;
          case 20:
            { yybegin(S1);          return XPathTokenTypes.NCNAME;
            }
          // fall through
          case 100: break;
          case 21:
            { yybegin(YYINITIAL);   return XPathTokenTypes.LBRACKET;
            }
          // fall through
          case 101: break;
          case 22:
            { yybegin(S1);          return XPathTokenTypes.RBRACKET;
            }
          // fall through
          case 102: break;
          case 23:
            { return XPathTokenTypes.LBRACE;
            }
          // fall through
          case 103: break;
          case 24:
            { yybegin(YYINITIAL);   return XPathTokenTypes.UNION;
            }
          // fall through
          case 104: break;
          case 25:
            { return XPathTokenTypes.RBRACE;
            }
          // fall through
          case 105: break;
          case 26:
            { yybegin(YYINITIAL);   return XPathTokenTypes.MULT;
            }
          // fall through
          case 106: break;
          case 27:
            { return XPathTokenTypes.COL;
            }
          // fall through
          case 107: break;
          case 28:
            { yybegin(S1);          return XPathTokenTypes.VARIABLE_NAME;
            }
          // fall through
          case 108: break;
          case 29:
            { return XPathTokenTypes.LPAREN;
            }
          // fall through
          case 109: break;
          case 30:
            { return XPathTokenTypes.RPAREN;
            }
          // fall through
          case 110: break;
          case 31:
            { yybegin(S1); return XPathTokenTypes.STAR;
            }
          // fall through
          case 111: break;
          case 32:
            { yybegin(S1); return XPathTokenTypes.PLUS;
            }
          // fall through
          case 112: break;
          case 33:
            { yybegin(S1); return XPath2TokenTypes.QUEST;
            }
          // fall through
          case 113: break;
          case 34:
            { return XPathTokenTypes.NCNAME;
            }
          // fall through
          case 114: break;
          case 35:
            { yybegin(YYINITIAL);   return XPathTokenTypes.NE;
            }
          // fall through
          case 115: break;
          case 36:
            { if (allowXPath2Syntax) { readComment(); return XPath2TokenTypes.COMMENT; } else { yypushback(1); return XPathTokenTypes.LPAREN; }
            }
          // fall through
          case 116: break;
          case 37:
            { yybegin(S1);          return XPathTokenTypes.DOTDOT;
            }
          // fall through
          case 117: break;
          case 38:
            { yybegin(YYINITIAL);   return XPathTokenTypes.ANY_PATH;
            }
          // fall through
          case 118: break;
          case 39:
            { if (allowXPath2Syntax) { return XPath2TokenTypes.END_COMMENT;            } else { yypushback(1); return XPathTokenTypes.COL;    }
            }
          // fall through
          case 119: break;
          case 40:
            { yybegin(YYINITIAL);   return XPathTokenTypes.COLCOL;
            }
          // fall through
          case 120: break;
          case 41:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL);   return XPath2TokenTypes.BEFORE; } else { yypushback(1); return XPathTokenTypes.LT; }
            }
          // fall through
          case 121: break;
          case 42:
            { yybegin(YYINITIAL);   return XPathTokenTypes.LE;
            }
          // fall through
          case 122: break;
          case 43:
            { yybegin(YYINITIAL);   return XPathTokenTypes.GE;
            }
          // fall through
          case 123: break;
          case 44:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL);   return XPath2TokenTypes.AFTER;  } else { yypushback(1); return XPathTokenTypes.GT; }
            }
          // fall through
          case 124: break;
          case 45:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL);   return XPath2TokenTypes.WEQ; } else { return ncName(); }
            }
          // fall through
          case 125: break;
          case 46:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL);   return XPath2TokenTypes.WGE; } else { return ncName(); }
            }
          // fall through
          case 126: break;
          case 47:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL);   return XPath2TokenTypes.WGT; } else { return ncName(); }
            }
          // fall through
          case 127: break;
          case 48:
            { if (allowXPath2Syntax) { return XPath2TokenTypes.IF;        } else { return ncName(); }
            }
          // fall through
          case 128: break;
          case 49:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL);   return XPath2TokenTypes.IS;     } else { return ncName(); }
            }
          // fall through
          case 129: break;
          case 50:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL);   return XPath2TokenTypes.WLE; } else { return ncName(); }
            }
          // fall through
          case 130: break;
          case 51:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL);   return XPath2TokenTypes.WLT; } else { return ncName(); }
            }
          // fall through
          case 131: break;
          case 52:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL);   return XPath2TokenTypes.WNE; } else { return ncName(); }
            }
          // fall through
          case 132: break;
          case 53:
            { if (allowXPath2Syntax) { yybegin(TYPE); return XPath2TokenTypes.AS;        } else { return ncName(); }
            }
          // fall through
          case 133: break;
          case 54:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL); return XPath2TokenTypes.IN;        } else { return ncName(); }
            }
          // fall through
          case 134: break;
          case 55:
            { if (allowXPath2Syntax) { yybegin(TYPE); return XPath2TokenTypes.OF;        } else { return ncName(); }
            }
          // fall through
          case 135: break;
          case 56:
            { yybegin(YYINITIAL);   return XPathTokenTypes.OR;
            }
          // fall through
          case 136: break;
          case 57:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL); return XPath2TokenTypes.TO;        } else { return ncName(); }
            }
          // fall through
          case 137: break;
          case 58:
            // general lookahead, find correct zzMarkedPos
            { int zzFState = 4;
              int zzFPos = zzStartRead;
              if (zzFin.length <= zzBufferL.length()) {
                zzFin = new boolean[zzBufferL.length()+1];
              }
              boolean zzFinL[] = zzFin;
              while (zzFState != -1 && zzFPos < zzMarkedPos) {
                zzFinL[zzFPos] = ((zzAttrL[zzFState] & 1) == 1);
                zzInput = Character.codePointAt(zzBufferL, zzFPos);
                zzFPos += Character.charCount(zzInput);
                zzFState = zzTransL[ zzRowMapL[zzFState] + zzCMap(zzInput) ];
              }
              if (zzFState != -1) {
                zzFinL[zzFPos++] = ((zzAttrL[zzFState] & 1) == 1);
              }
              while (zzFPos <= zzMarkedPos) {
                zzFinL[zzFPos++] = false;
              }

              zzFState = 5;
              zzFPos = zzMarkedPos;
              while (!zzFinL[zzFPos] || (zzAttrL[zzFState] & 1) != 1) {
                zzInput = Character.codePointBefore(zzBufferL, zzFPos);
                zzFPos -= Character.charCount(zzInput);
                zzFState = zzTransL[ zzRowMapL[zzFState] + zzCMap(zzInput) ];
              };
              zzMarkedPos = zzFPos;
            }
            { return XPathTokenTypes.VARIABLE_PREFIX;
            }
          // fall through
          case 138: break;
          case 59:
            { if (allowXPath2Syntax) { return XPath2TokenTypes.FOR;       } else { return ncName(); }
            }
          // fall through
          case 139: break;
          case 60:
            { yybegin(YYINITIAL);   return XPathTokenTypes.AND;
            }
          // fall through
          case 140: break;
          case 61:
            { yybegin(YYINITIAL);   return XPathTokenTypes.DIV;
            }
          // fall through
          case 141: break;
          case 62:
            { yybegin(YYINITIAL);   return XPathTokenTypes.MOD;
            }
          // fall through
          case 142: break;
          case 63:
            { yybegin(S1);          return XPathTokenTypes.NODE_TYPE;
            }
          // fall through
          case 143: break;
          case 64:
            { yybegin(S1);          return XPathTokenTypes.AXIS_NAME;
            }
          // fall through
          case 144: break;
          case 65:
            { if (allowXPath2Syntax) { return XPath2TokenTypes.SOME;      } else { return ncName(); }
            }
          // fall through
          case 145: break;
          case 66:
            { if (allowXPath2Syntax) { return XPath2TokenTypes.CAST;      } else { return ncName(); }
            }
          // fall through
          case 146: break;
          case 67:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL); return XPath2TokenTypes.ELSE;      } else { return ncName(); }
            }
          // fall through
          case 147: break;
          case 68:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL);   return XPath2TokenTypes.IDIV; } else { return ncName(); }
            }
          // fall through
          case 148: break;
          case 69:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL); return XPath2TokenTypes.THEN;      } else { return ncName(); }
            }
          // fall through
          case 149: break;
          case 70:
            { return  XPath2TokenTypes.ITEM;
            }
          // fall through
          case 150: break;
          case 71:
            { if (allowXPath2Syntax) { return XPath2TokenTypes.EVERY;     } else { return ncName(); }
            }
          // fall through
          case 151: break;
          case 72:
            { if (allowXPath2Syntax) { return XPath2TokenTypes.TREAT;     } else { return ncName(); }
            }
          // fall through
          case 152: break;
          case 73:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL); return XPath2TokenTypes.UNION;     } else { return ncName(); }
            }
          // fall through
          case 153: break;
          case 74:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL); return XPath2TokenTypes.EXCEPT;    } else { return ncName(); }
            }
          // fall through
          case 154: break;
          case 75:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL); return XPath2TokenTypes.RETURN;    } else { return ncName(); }
            }
          // fall through
          case 155: break;
          case 76:
            { if (allowXPath2Syntax) { return XPath2TokenTypes.CASTABLE;  } else { return ncName(); }
            }
          // fall through
          case 156: break;
          case 77:
            { if (allowXPath2Syntax) { return XPath2TokenTypes.INSTANCE;  } else { return ncName(); }
            }
          // fall through
          case 157: break;
          case 78:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL); return XPath2TokenTypes.INTERSECT; } else { return ncName(); }
            }
          // fall through
          case 158: break;
          case 79:
            { if (allowXPath2Syntax) { yybegin(YYINITIAL); return XPath2TokenTypes.SATISFIES; } else { return ncName(); }
            }
          // fall through
          case 159: break;
          case 80:
            { yybegin(YYINITIAL); return XPath2TokenTypes.EMPTY_SEQUENCE;
            }
          // fall through
          case 160: break;
          default:
            zzScanError(ZZ_NO_MATCH);
          }
      }
    }
  }


}
