Package JFlex

Source Code of JFlex.LexScan$ZzFlexStreamInfo

/* The following code was generated by JFlex 1.4.3 on 1/31/09 11:52 PM */

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* JFlex 1.4.3                                                             *
* Copyright (C) 1998-2009  Gerwin Klein <lsf@jflex.de>                    *
* All rights reserved.                                                    *
*                                                                         *
* This program is free software; you can redistribute it and/or modify    *
* it under the terms of the GNU General Public License. See the file      *
* COPYRIGHT for more information.                                         *
*                                                                         *
* This program is distributed in the hope that it will be useful,         *
* but WITHOUT ANY WARRANTY; without even the implied warranty of          *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *
* GNU General Public License for more details.                            *
*                                                                         *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                 *
*                                                                         *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

package JFlex;

import java_cup.runtime.Symbol;
import java.util.Vector;
import java.io.*;
import java.util.Stack;

/**
* The lexer of JFlex.
*
* Generated by <a href="http://www.jflex.de/">JFlex</a>.
*
* @author Gerwin Klein
* @version JFlex 1.4.3, $Revision: 433 $, $Date: 2009-01-31 19:52:34 +1100 (Sat, 31 Jan 2009) $
*/

public final class LexScan implements sym, java_cup.runtime.Scanner {

  /** 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 STRING_CONTENT = 16;
  public static final int REGEXPSTART = 8;
  public static final int MACROS = 6;
  public static final int STATELIST = 4;
  public static final int CTOR_ARG = 26;
  public static final int EATWSPNL = 24;
  public static final int CHARCLASS = 18;
  public static final int JAVA_CODE = 12;
  public static final int REGEXP = 10;
  public static final int YYINITIAL = 0;
  public static final int REPEATEXP = 22;
  public static final int COMMENT = 2;
  public static final int STATES = 14;
  public static final int COPY = 20;

  /**
   * 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[] = {
     0011223455667788,
     99, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14
  };

  /**
   * Translates characters to character classes
   */
  private static final String ZZ_CMAP_PACKED =
    "\10\25\1\26\1\10\1\13\2\11\1\12\16\25\4\0\1\10\1\76"+
    "\1\32\1\0\1\103\1\35\1\22\1\33\1\100\1\101\1\30\1\102"+
    "\1\15\1\106\1\14\1\31\1\7\1\66\2\7\2\3\1\67\1\64"+
    "\1\65\1\1\1\105\1\0\1\20\1\71\1\21\1\23\1\0\4\2"+
    "\1\72\1\74\10\24\1\73\13\24\1\16\1\4\1\17\1\104\1\24"+
    "\1\0\1\53\1\57\1\55\1\62\1\46\1\47\1\63\1\42\1\37"+
    "\1\60\1\70\1\51\1\56\1\40\1\44\1\61\1\24\1\43\1\54"+
    "\1\41\1\6\1\52\1\45\1\5\1\50\1\24\1\36\1\75\1\34"+
    "\1\77\6\25\1\27\32\25\2\0\4\24\4\0\1\24\2\0\1\25"+
    "\7\0\1\24\4\0\1\24\5\0\27\24\1\0\37\24\1\0\u013f\24"+
    "\31\0\162\24\4\0\14\24\16\0\5\24\11\0\1\24\21\0\130\25"+
    "\5\0\23\25\12\0\1\24\13\0\1\24\1\0\3\24\1\0\1\24"+
    "\1\0\24\24\1\0\54\24\1\0\46\24\1\0\5\24\4\0\202\24"+
    "\1\0\4\25\3\0\105\24\1\0\46\24\2\0\2\24\6\0\20\24"+
    "\41\0\46\24\2\0\1\24\7\0\47\24\11\0\21\25\1\0\27\25"+
    "\1\0\3\25\1\0\1\25\1\0\2\25\1\0\1\25\13\0\33\24"+
    "\5\0\3\24\15\0\4\25\14\0\6\25\13\0\32\24\5\0\13\24"+
    "\16\25\7\0\12\25\4\0\2\24\1\25\143\24\1\0\1\24\10\25"+
    "\1\0\6\25\2\24\2\25\1\0\4\25\2\24\12\25\3\24\2\0"+
    "\1\24\17\0\1\25\1\24\1\25\36\24\33\25\2\0\3\24\60\0"+
    "\46\24\13\25\1\24\u014f\0\3\25\66\24\2\0\1\25\1\24\20\25"+
    "\2\0\1\24\4\25\3\0\12\24\2\25\2\0\12\25\21\0\3\25"+
    "\1\0\10\24\2\0\2\24\2\0\26\24\1\0\7\24\1\0\1\24"+
    "\3\0\4\24\2\0\1\25\1\24\7\25\2\0\2\25\2\0\3\25"+
    "\11\0\1\25\4\0\2\24\1\0\3\24\2\25\2\0\12\25\4\24"+
    "\15\0\3\25\1\0\6\24\4\0\2\24\2\0\26\24\1\0\7\24"+
    "\1\0\2\24\1\0\2\24\1\0\2\24\2\0\1\25\1\0\5\25"+
    "\4\0\2\25\2\0\3\25\13\0\4\24\1\0\1\24\7\0\14\25"+
    "\3\24\14\0\3\25\1\0\11\24\1\0\3\24\1\0\26\24\1\0"+
    "\7\24\1\0\2\24\1\0\5\24\2\0\1\25\1\24\10\25\1\0"+
    "\3\25\1\0\3\25\2\0\1\24\17\0\2\24\2\25\2\0\12\25"+
    "\1\0\1\24\17\0\3\25\1\0\10\24\2\0\2\24\2\0\26\24"+
    "\1\0\7\24\1\0\2\24\1\0\5\24\2\0\1\25\1\24\6\25"+
    "\3\0\2\25\2\0\3\25\10\0\2\25\4\0\2\24\1\0\3\24"+
    "\4\0\12\25\1\0\1\24\20\0\1\25\1\24\1\0\6\24\3\0"+
    "\3\24\1\0\4\24\3\0\2\24\1\0\1\24\1\0\2\24\3\0"+
    "\2\24\3\0\3\24\3\0\10\24\1\0\3\24\4\0\5\25\3\0"+
    "\3\25\1\0\4\25\11\0\1\25\17\0\11\25\11\0\1\24\7\0"+
    "\3\25\1\0\10\24\1\0\3\24\1\0\27\24\1\0\12\24\1\0"+
    "\5\24\4\0\7\25\1\0\3\25\1\0\4\25\7\0\2\25\11\0"+
    "\2\24\4\0\12\25\22\0\2\25\1\0\10\24\1\0\3\24\1\0"+
    "\27\24\1\0\12\24\1\0\5\24\2\0\1\25\1\24\7\25\1\0"+
    "\3\25\1\0\4\25\7\0\2\25\7\0\1\24\1\0\2\24\4\0"+
    "\12\25\22\0\2\25\1\0\10\24\1\0\3\24\1\0\27\24\1\0"+
    "\20\24\4\0\6\25\2\0\3\25\1\0\4\25\11\0\1\25\10\0"+
    "\2\24\4\0\12\25\22\0\2\25\1\0\22\24\3\0\30\24\1\0"+
    "\11\24\1\0\1\24\2\0\7\24\3\0\1\25\4\0\6\25\1\0"+
    "\1\25\1\0\10\25\22\0\2\25\15\0\60\24\1\25\2\24\7\25"+
    "\4\0\10\24\10\25\1\0\12\25\47\0\2\24\1\0\1\24\2\0"+
    "\2\24\1\0\1\24\2\0\1\24\6\0\4\24\1\0\7\24\1\0"+
    "\3\24\1\0\1\24\1\0\1\24\2\0\2\24\1\0\4\24\1\25"+
    "\2\24\6\25\1\0\2\25\1\24\2\0\5\24\1\0\1\24\1\0"+
    "\6\25\2\0\12\25\2\0\2\24\42\0\1\24\27\0\2\25\6\0"+
    "\12\25\13\0\1\25\1\0\1\25\1\0\1\25\4\0\2\25\10\24"+
    "\1\0\42\24\6\0\24\25\1\0\2\25\4\24\4\0\10\25\1\0"+
    "\44\25\11\0\1\25\71\0\42\24\1\0\5\24\1\0\2\24\1\0"+
    "\7\25\3\0\4\25\6\0\12\25\6\0\6\24\4\25\106\0\46\24"+
    "\12\0\51\24\7\0\132\24\5\0\104\24\5\0\122\24\6\0\7\24"+
    "\1\0\77\24\1\0\1\24\1\0\4\24\2\0\7\24\1\0\1\24"+
    "\1\0\4\24\2\0\47\24\1\0\1\24\1\0\4\24\2\0\37\24"+
    "\1\0\1\24\1\0\4\24\2\0\7\24\1\0\1\24\1\0\4\24"+
    "\2\0\7\24\1\0\7\24\1\0\27\24\1\0\37\24\1\0\1\24"+
    "\1\0\4\24\2\0\7\24\1\0\47\24\1\0\23\24\16\0\11\25"+
    "\56\0\125\24\14\0\u026c\24\2\0\10\24\12\0\32\24\5\0\113\24"+
    "\3\0\3\24\17\0\15\24\1\0\4\24\3\25\13\0\22\24\3\25"+
    "\13\0\22\24\2\25\14\0\15\24\1\0\3\24\1\0\2\25\14\0"+
    "\64\24\40\25\3\0\1\24\3\0\2\24\1\25\2\0\12\25\41\0"+
    "\3\25\2\0\12\25\6\0\130\24\10\0\51\24\1\25\126\0\35\24"+
    "\3\0\14\25\4\0\14\25\12\0\12\25\36\24\2\0\5\24\u038b\0"+
    "\154\24\224\0\234\24\4\0\132\24\6\0\26\24\2\0\6\24\2\0"+
    "\46\24\2\0\6\24\2\0\10\24\1\0\1\24\1\0\1\24\1\0"+
    "\1\24\1\0\37\24\2\0\65\24\1\0\7\24\1\0\1\24\3\0"+
    "\3\24\1\0\7\24\3\0\4\24\2\0\6\24\4\0\15\24\5\0"+
    "\3\24\1\0\7\24\17\0\4\25\30\0\2\11\5\25\20\0\2\24"+
    "\23\0\1\24\13\0\4\25\6\0\6\25\1\0\1\24\15\0\1\24"+
    "\40\0\22\24\36\0\15\25\4\0\1\25\3\0\6\25\27\0\1\24"+
    "\4\0\1\24\2\0\12\24\1\0\1\24\3\0\5\24\6\0\1\24"+
    "\1\0\1\24\1\0\1\24\1\0\4\24\1\0\3\24\1\0\7\24"+
    "\3\0\3\24\5\0\5\24\26\0\44\24\u0e81\0\3\24\31\0\11\24"+
    "\6\25\1\0\5\24\2\0\5\24\4\0\126\24\2\0\2\25\2\0"+
    "\3\24\1\0\137\24\5\0\50\24\4\0\136\24\21\0\30\24\70\0"+
    "\20\24\u0200\0\u19b6\24\112\0\u51a6\24\132\0\u048d\24\u0773\0\u2ba4\24\u215c\0"+
    "\u012e\24\2\0\73\24\225\0\7\24\14\0\5\24\5\0\1\24\1\25"+
    "\12\24\1\0\15\24\1\0\5\24\1\0\1\24\1\0\2\24\1\0"+
    "\2\24\1\0\154\24\41\0\u016b\24\22\0\100\24\2\0\66\24\50\0"+
    "\15\24\3\0\20\25\20\0\4\25\17\0\2\24\30\0\3\24\31\0"+
    "\1\24\6\0\5\24\1\0\207\24\2\0\1\25\4\0\1\24\13\0"+
    "\12\25\7\0\32\24\4\0\1\24\1\0\32\24\12\0\132\24\3\0"+
    "\6\24\2\0\6\24\2\0\6\24\2\0\3\24\3\0\2\24\3\0"+
    "\2\24\22\0\3\25\4\0";

  /**
   * Translates characters to character classes
   */
  private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);

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

  private static final String ZZ_ACTION_PACKED_0 =
    "\1\1\1\2\15\0\1\1\2\3\1\1\1\2\3\4"+
    "\1\5\1\6\2\7\1\6\1\10\2\6\1\4\1\11"+
    "\1\12\1\6\1\11\1\13\1\14\1\4\1\15\2\16"+
    "\1\6\2\17\1\20\1\21\1\16\1\22\1\23\1\24"+
    "\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\34"+
    "\1\35\1\36\1\37\3\4\1\40\1\41\1\6\1\42"+
    "\1\43\1\44\1\4\2\45\1\46\1\16\1\47\1\50"+
    "\1\51\1\52\1\16\1\53\1\54\1\4\2\44\1\4"+
    "\1\55\1\4\1\56\1\13\1\57\1\60\1\61\3\0"+
    "\1\62\1\63\1\0\1\64\1\0\2\11\1\0\15\11"+
    "\3\0\1\65\1\11\1\66\1\11\2\0\1\67\1\6"+
    "\1\70\1\71\2\70\1\71\1\72\1\73\1\74\1\75"+
    "\1\76\1\0\1\77\2\0\1\100\1\101\3\0\2\102"+
    "\10\0\1\103\1\104\2\103\1\104\1\105\1\106\1\107"+
    "\1\110\1\111\1\112\3\0\1\113\5\0\1\114\1\0"+
    "\1\60\1\61\2\6\1\11\2\115\35\11\3\0\2\116"+
    "\1\11\2\117\1\11\1\0\1\71\1\0\1\120\6\0"+
    "\1\121\1\122\1\0\1\37\4\0\1\104\1\0\1\123"+
    "\1\124\2\125\3\0\2\11\1\126\24\11\1\127\12\11"+
    "\3\0\2\11\1\0\2\120\14\0\2\123\3\0\20\11"+
    "\1\130\3\11\1\131\10\11\1\132\6\11\1\133\1\11"+
    "\1\134\1\130\1\0\2\11\1\0\1\120\13\0\1\123"+
    "\5\0\11\11\1\0\1\11\1\135\5\11\1\136\1\137"+
    "\17\11\1\140\1\141\2\11\7\0\2\37\10\0\2\142"+
    "\3\0\11\11\1\143\1\0\11\11\1\144\4\11\1\145"+
    "\1\0\3\11\1\146\1\147\2\11\6\0\1\150\1\37"+
    "\3\0\1\37\6\0\2\151\4\0\1\141\1\11\1\152"+
    "\1\126\3\11\1\153\2\154\1\143\4\0\11\11\2\155"+
    "\2\11\1\156\1\11\2\157\1\11\1\160\6\0\1\37"+
    "\6\0\1\37\13\0\1\11\1\161\2\11\1\154\1\162"+
    "\1\154\1\143\3\0\2\11\1\163\2\11\1\164\3\11"+
    "\1\155\1\165\1\155\1\166\1\0\1\11\1\156\1\0"+
    "\1\167\1\157\2\170\1\157\4\0\1\171\1\172\2\37"+
    "\4\0\2\37\7\0\2\173\1\0\3\11\2\162\2\143"+
    "\1\174\2\175\1\0\1\11\1\0\5\11\2\165\2\0"+
    "\1\11\1\0\2\170\2\0\1\176\2\0\1\37\2\0"+
    "\2\37\4\0\1\37\2\0\2\37\7\0\2\177\1\11"+
    "\1\162\1\0\1\143\1\0\1\174\1\0\1\175\1\200"+
    "\1\175\2\0\2\11\1\201\1\11\1\202\1\203\2\204"+
    "\1\165\1\0\1\205\3\0\1\205\1\0\1\205\1\156"+
    "\3\0\1\206\1\0\4\37\3\0\4\37\3\0\2\207"+
    "\1\0\1\177\1\210\1\177\1\211\3\0\2\200\2\0"+
    "\2\11\1\201\2\212\1\204\1\213\1\204\12\0\3\37"+
    "\5\0\3\37\1\0\2\214\1\0\2\210\2\143\1\174"+
    "\1\200\3\0\2\11\1\212\1\215\1\212\2\213\1\205"+
    "\2\0\1\216\1\217\4\0\1\37\3\0\1\37\2\220"+
    "\1\210\1\0\1\143\1\163\1\0\1\163\1\11\2\215"+
    "\1\213\1\0\2\205\1\0\1\205\3\0\1\37\2\0"+
    "\1\37\2\221\1\215\10\0\1\222\3\205";

  private static int [] zzUnpackAction() {
    int [] result = new int[826];
    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\107\0\216\0\325\0\u011c\0\u0163\0\u01aa\0\u01f1"+
    "\0\u0238\0\u027f\0\u02c6\0\u030d\0\u0354\0\u039b\0\u03e2\0\u0429"+
    "\0\u0429\0\u0470\0\u04b7\0\u04fe\0\u0545\0\u058c\0\u0470\0\u05d3"+
    "\0\u061a\0\u0470\0\u0661\0\u06a8\0\u06ef\0\u0736\0\u077d\0\u07c4"+
    "\0\u080b\0\u0852\0\u0899\0\u08e0\0\u0927\0\u096e\0\u09b5\0\u0470"+
    "\0\u0470\0\u09fc\0\u0a43\0\u0a8a\0\u0ad1\0\u0470\0\u0b18\0\u0b5f"+
    "\0\u0470\0\u0470\0\u0ba6\0\u0470\0\u0bed\0\u0c34\0\u0470\0\u0470"+
    "\0\u0470\0\u0470\0\u0470\0\u0470\0\u0470\0\u0c7b\0\u0cc2\0\u0d09"+
    "\0\u0d50\0\u0470\0\u0470\0\u0d97\0\u0470\0\u0dde\0\u0e25\0\u0e6c"+
    "\0\u0470\0\u0eb3\0\u0470\0\u0efa\0\u0efa\0\u0b18\0\u0470\0\u0470"+
    "\0\u0f41\0\u0470\0\u0f88\0\u0fcf\0\u0fcf\0\u0470\0\u1016\0\u0470"+
    "\0\u105d\0\u0470\0\u10a4\0\u0470\0\u10eb\0\u1132\0\u1179\0\u11c0"+
    "\0\u0545\0\u0470\0\u0470\0\u058c\0\u0470\0\u1207\0\u124e\0\u1295"+
    "\0\u12dc\0\u1323\0\u136a\0\u13b1\0\u13f8\0\u143f\0\u1486\0\u14cd"+
    "\0\u1514\0\u155b\0\u15a2\0\u15e9\0\u1630\0\u1677\0\u16be\0\u1705"+
    "\0\u174c\0\u0470\0\u1793\0\u17da\0\u1821\0\u09b5\0\u1868\0\u0470"+
    "\0\u18af\0\u0470\0\u18f6\0\u193d\0\u1984\0\u19cb\0\u0470\0\u0470"+
    "\0\u0470\0\u0470\0\u0470\0\u0a8a\0\u0bed\0\u1a12\0\u1a59\0\u0470"+
    "\0\u1aa0\0\u1ae7\0\u0bed\0\u0c34\0\u0470\0\u1b2e\0\u0cc2\0\u0d09"+
    "\0\u0d50\0\u1b75\0\u1bbc\0\u1c03\0\u1c4a\0\u1c91\0\u0470\0\u1cd8"+
    "\0\u1d1f\0\u1d66\0\u1dad\0\u0470\0\u0470\0\u0470\0\u0470\0\u0470"+
    "\0\u0470\0\u0efa\0\u0b18\0\u1df4\0\u0470\0\u0fcf\0\u1e3b\0\u1e82"+
    "\0\u1ec9\0\u1f10\0\u1f57\0\u105d\0\u1f9e\0\u0470\0\u1207\0\u0470"+
    "\0\u1fe5\0\u12dc\0\u0470\0\u202c\0\u2073\0\u20ba\0\u2101\0\u2148"+
    "\0\u218f\0\u21d6\0\u221d\0\u2264\0\u22ab\0\u22f2\0\u2339\0\u2380"+
    "\0\u23c7\0\u240e\0\u2455\0\u249c\0\u24e3\0\u252a\0\u2571\0\u25b8"+
    "\0\u25ff\0\u2646\0\u268d\0\u26d4\0\u271b\0\u2762\0\u27a9\0\u27f0"+
    "\0\u2837\0\u287e\0\u28c5\0\u290c\0\u2953\0\u299a\0\u29e1\0\u2a28"+
    "\0\u2a6f\0\u2ab6\0\u0470\0\u2afd\0\u2b44\0\u2b8b\0\u2bd2\0\u2c19"+
    "\0\u2c60\0\u2ca7\0\u2cee\0\u0470\0\u0470\0\u2d35\0\u2d7c\0\u2dc3"+
    "\0\u2e0a\0\u2e51\0\u2e98\0\u0470\0\u2edf\0\u2f26\0\u0470\0\u1e3b"+
    "\0\u0470\0\u2f6d\0\u2fb4\0\u2ffb\0\u3042\0\u3089\0\u30d0\0\u3117"+
    "\0\u315e\0\u31a5\0\u31ec\0\u3233\0\u327a\0\u32c1\0\u3308\0\u334f"+
    "\0\u3396\0\u33dd\0\u3424\0\u346b\0\u34b2\0\u34f9\0\u3540\0\u3587"+
    "\0\u35ce\0\u3615\0\u365c\0\u36a3\0\u36ea\0\u3731\0\u3778\0\u37bf"+
    "\0\u3806\0\u384d\0\u3894\0\u38db\0\u3922\0\u3969\0\u39b0\0\u39f7"+
    "\0\u3a3e\0\u3a85\0\u3acc\0\u3b13\0\u0470\0\u3b5a\0\u3ba1\0\u3be8"+
    "\0\u3c2f\0\u3c76\0\u3cbd\0\u3d04\0\u3d4b\0\u3d92\0\u3dd9\0\u3e20"+
    "\0\u3e67\0\u3eae\0\u0470\0\u3ef5\0\u3f3c\0\u3f83\0\u3fca\0\u4011"+
    "\0\u4058\0\u409f\0\u40e6\0\u412d\0\u4174\0\u41bb\0\u4202\0\u4249"+
    "\0\u4290\0\u42d7\0\u431e\0\u4365\0\u43ac\0\u43f3\0\u443a\0\u124e"+
    "\0\u4481\0\u44c8\0\u450f\0\u124e\0\u4556\0\u459d\0\u45e4\0\u462b"+
    "\0\u4672\0\u46b9\0\u4700\0\u4747\0\u124e\0\u478e\0\u47d5\0\u481c"+
    "\0\u4863\0\u48aa\0\u48f1\0\u124e\0\u4938\0\u0470\0\u0470\0\u497f"+
    "\0\u49c6\0\u4a0d\0\u4a54\0\u2afd\0\u4a9b\0\u4ae2\0\u4b29\0\u4b70"+
    "\0\u4bb7\0\u4bfe\0\u4c45\0\u4c8c\0\u4cd3\0\u4d1a\0\u4d61\0\u2edf"+
    "\0\u4da8\0\u4def\0\u4e36\0\u4e7d\0\u4ec4\0\u4f0b\0\u4f52\0\u4f99"+
    "\0\u4fe0\0\u5027\0\u506e\0\u50b5\0\u50fc\0\u5143\0\u518a\0\u51d1"+
    "\0\u124e\0\u5218\0\u525f\0\u52a6\0\u52ed\0\u5334\0\u124e\0\u124e"+
    "\0\u537b\0\u53c2\0\u5409\0\u5450\0\u5497\0\u54de\0\u5525\0\u556c"+
    "\0\u55b3\0\u55fa\0\u5641\0\u5688\0\u56cf\0\u5716\0\u575d\0\u124e"+
    "\0\u0470\0\u57a4\0\u57eb\0\u5832\0\u5879\0\u58c0\0\u5907\0\u594e"+
    "\0\u5995\0\u59dc\0\u5a23\0\u5a6a\0\u5ab1\0\u5af8\0\u5b3f\0\u5b86"+
    "\0\u5bcd\0\u5c14\0\u5c5b\0\u5ca2\0\u4def\0\u0470\0\u5ce9\0\u5d30"+
    "\0\u5d77\0\u5dbe\0\u5e05\0\u5e4c\0\u5e93\0\u5eda\0\u5f21\0\u5f68"+
    "\0\u5faf\0\u5ff6\0\u603d\0\u6084\0\u60cb\0\u6112\0\u6159\0\u61a0"+
    "\0\u61e7\0\u622e\0\u6275\0\u62bc\0\u6303\0\u124e\0\u634a\0\u6391"+
    "\0\u63d8\0\u641f\0\u124e\0\u6466\0\u64ad\0\u64f4\0\u653b\0\u124e"+
    "\0\u124e\0\u6582\0\u2a28\0\u65c9\0\u6610\0\u6657\0\u669e\0\u66e5"+
    "\0\u672c\0\u6773\0\u67ba\0\u6801\0\u6848\0\u688f\0\u68d6\0\u691d"+
    "\0\u6964\0\u69ab\0\u69f2\0\u6a39\0\u6a80\0\u5c5b\0\u0470\0\u6ac7"+
    "\0\u6b0e\0\u6b55\0\u6b9c\0\u124e\0\u6be3\0\u124e\0\u124e\0\u6c2a"+
    "\0\u6c71\0\u6cb8\0\u124e\0\u6cff\0\u6d46\0\u6d8d\0\u6dd4\0\u6e1b"+
    "\0\u6e62\0\u6ea9\0\u6ef0\0\u6f37\0\u6f7e\0\u6fc5\0\u700c\0\u7053"+
    "\0\u709a\0\u70e1\0\u7128\0\u716f\0\u71b6\0\u71fd\0\u7244\0\u728b"+
    "\0\u72d2\0\u7319\0\u7360\0\u2953\0\u0470\0\u73a7\0\u73ee\0\u7435"+
    "\0\u747c\0\u74c3\0\u750a\0\u7551\0\u7598\0\u75df\0\u7626\0\u766d"+
    "\0\u76b4\0\u76fb\0\u7742\0\u7789\0\u77d0\0\u7817\0\u785e\0\u78a5"+
    "\0\u78ec\0\u7933\0\u797a\0\u79c1\0\u7a08\0\u7a4f\0\u7a96\0\u7add"+
    "\0\u7b24\0\u7b6b\0\u7bb2\0\u7bf9\0\u7c40\0\u7c87\0\u7cce\0\u7d15"+
    "\0\u7d5c\0\u7da3\0\u7dea\0\u7e31\0\u7e78\0\u7ebf\0\u124e\0\u7f06"+
    "\0\u7f4d\0\u7f94\0\u7fdb\0\u8022\0\u8069\0\u124e\0\u80b0\0\u80f7"+
    "\0\u813e\0\u8185\0\u124e\0\u81cc\0\u8213\0\u825a\0\u82a1\0\u82e8"+
    "\0\u832f\0\u8376\0\u83bd\0\u0470\0\u0470\0\u8404\0\u844b\0\u8492"+
    "\0\u84d9\0\u8520\0\u8567\0\u85ae\0\u85f5\0\u863c\0\u8683\0\u86ca"+
    "\0\u8711\0\u8758\0\u879f\0\u87e6\0\u7a08\0\u0470\0\u882d\0\u8874"+
    "\0\u88bb\0\u8902\0\u8949\0\u8990\0\u89d7\0\u8a1e\0\u8a65\0\u8aac"+
    "\0\u8af3\0\u8b3a\0\u8b81\0\u8bc8\0\u8c0f\0\u8c56\0\u8c9d\0\u8ce4"+
    "\0\u8d2b\0\u8d72\0\u8db9\0\u8e00\0\u8e47\0\u8e8e\0\u8ed5\0\u8f1c"+
    "\0\u8f63\0\u8faa\0\u8ff1\0\u0470\0\u9038\0\u907f\0\u90c6\0\u910d"+
    "\0\u9154\0\u919b\0\u91e2\0\u9229\0\u9270\0\u92b7\0\u92fe\0\u9345"+
    "\0\u938c\0\u93d3\0\u941a\0\u9461\0\u94a8\0\u94ef\0\u9536\0\u957d"+
    "\0\u95c4\0\u960b\0\u9652\0\u9699\0\u96e0\0\u9727\0\u976e\0\u97b5"+
    "\0\u97fc\0\u9843\0\u988a\0\u98d1\0\u9918\0\u995f\0\u99a6\0\u99ed"+
    "\0\u9a34\0\u9a7b\0\u9ac2\0\u9b09\0\u9b50\0\u124e\0\u124e\0\u9b97"+
    "\0\u9bde\0\u9c25\0\u9c6c\0\u9cb3\0\u9cfa\0\u9d41\0\u9d88\0\u8e00"+
    "\0\u9dcf\0\u8e8e\0\u9e16\0\u9e5d\0\u9ea4\0\u9eeb\0\u0470\0\u9f32"+
    "\0\u9f79\0\u9fc0\0\ua007\0\ua04e\0\ua095\0\ua0dc\0\ua123\0\ua16a"+
    "\0\ua1b1\0\ua1f8\0\ua23f\0\ua286\0\ua2cd\0\ua314\0\u960b\0\u0470"+
    "\0\ua35b\0\ua3a2\0\ua3e9\0\ua430\0\ua477\0\ua4be\0\ua505\0\ua54c"+
    "\0\ua593\0\ua5da\0\ua621\0\ua668\0\ua6af\0\ua6f6\0\ua73d\0\ua784"+
    "\0\ua7cb\0\ua812\0\ua859\0\ua8a0\0\ua8e7\0\ua92e\0\ua975\0\ua9bc"+
    "\0\uaa03\0\uaa4a\0\uaa91\0\uaad8\0\uab1f\0\uab66\0\uabad\0\uabf4"+
    "\0\uac3b\0\uac82\0\uacc9\0\uad10\0\uad57\0\uad9e\0\uade5\0\uae2c"+
    "\0\uae73\0\uaeba\0\ua314\0\u0470\0\uaf01\0\uaf48\0\uaf8f\0\uafd6"+
    "\0\ub01d\0\ub064\0\ub0ab\0\ub0f2\0\ub139\0\ub180\0\ub1c7\0\ub20e"+
    "\0\ub255\0\ub29c\0\ub2e3\0\ub32a\0\ub371\0\ua8e7\0\ub3b8\0\ub3ff"+
    "\0\u0470\0\u0470\0\ub446\0\ub48d\0\ub4d4\0\ub51b\0\ub562\0\ub5a9"+
    "\0\ub5f0\0\ub637\0\ub67e\0\uaf01\0\u0470\0\ub6c5\0\ub70c\0\ub753"+
    "\0\u0470\0\ub79a\0\u124e\0\ub7e1\0\ub828\0\ub86f\0\ub8b6\0\ub8fd"+
    "\0\ub3b8\0\ub944\0\ub98b\0\ub3ff\0\ub9d2\0\uba19\0\uba60\0\ubaa7"+
    "\0\ubaee\0\ubb35\0\ubb7c\0\u0470\0\u124e\0\ubbc3\0\ubc0a\0\ubc51"+
    "\0\ubc98\0\ubcdf\0\ubd26\0\ubd6d\0\ubdb4\0\ubdfb\0\u0470\0\ubdb4"+
    "\0\ube42\0\ubdfb";

  private static int [] zzUnpackRowMap() {
    int [] result = new int[826];
    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();
    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 =
    "\11\20\2\21\1\22\13\20\1\21\5\20\1\23\51\20"+
    "\30\24\1\25\1\26\55\24\2\27\1\30\2\27\2\30"+
    "\1\27\1\31\1\32\1\33\1\32\1\27\1\34\6\27"+
    "\1\30\2\27\1\32\7\27\25\30\4\27\1\30\1\27"+
    "\3\30\6\27\1\30\5\27\1\35\2\27\2\35\1\27"+
    "\1\36\3\37\10\27\1\35\1\27\1\36\1\37\1\27"+
    "\1\40\3\27\1\41\1\27\25\35\4\27\1\35\1\42"+
    "\3\35\6\27\1\35\5\27\1\35\2\27\2\35\1\27"+
    "\1\43\3\37\10\27\1\35\1\27\1\43\1\37\1\27"+
    "\1\40\3\27\1\44\1\27\25\35\4\27\1\35\1\42"+
    "\3\35\6\27\1\35\13\27\4\45\4\27\1\46\5\27"+
    "\2\45\1\27\1\47\2\27\1\50\52\27\4\51\1\52"+
    "\3\51\1\53\1\54\1\55\1\54\1\56\1\51\1\57"+
    "\1\51\1\60\2\51\1\61\2\51\1\53\1\54\1\62"+
    "\1\63\1\64\3\51\1\65\36\51\1\66\1\67\1\70"+
    "\1\71\1\72\1\73\1\74\1\75\2\51\31\76\1\77"+
    "\1\100\1\101\1\102\1\76\1\103\50\76\2\27\1\35"+
    "\2\27\2\35\1\27\4\104\1\27\1\105\3\27\1\106"+
    "\2\27\1\35\1\27\2\104\7\27\25\35\4\27\1\35"+
    "\1\27\3\35\6\27\1\35\3\27\4\107\1\110\4\107"+
    "\1\111\1\112\1\111\13\107\1\111\2\107\1\113\54\107"+
    "\4\51\1\52\3\51\3\114\1\115\2\51\1\116\1\117"+
    "\6\51\2\114\2\51\1\120\3\51\1\121\45\51\1\122"+
    "\1\51\1\123\11\124\2\125\1\126\13\124\1\125\5\124"+
    "\1\127\51\124\10\27\1\36\2\27\1\130\1\27\1\131"+
    "\10\27\1\36\5\27\1\132\62\27\4\133\12\27\2\133"+
    "\57\27\2\134\1\135\2\134\2\135\15\134\1\135\12\134"+
    "\25\135\4\134\1\135\1\134\3\135\6\134\1\135\3\134"+
    "\11\20\2\21\1\22\13\20\1\21\57\20\107\0\11\20"+
    "\2\21\1\22\13\20\1\21\5\20\1\136\51\20\30\24"+
    "\1\137\1\140\105\24\1\141\1\142\105\24\1\143\1\144"+
    "\55\24\1\0\3\30\1\0\3\30\14\0\4\30\7\0"+
    "\32\30\1\0\3\30\6\0\1\30\13\0\1\31\4\0"+
    "\1\34\104\0\1\32\103\0\1\34\77\0\3\35\1\0"+
    "\3\35\14\0\4\35\7\0\32\35\1\0\3\35\6\0"+
    "\1\35\13\0\1\36\15\0\1\36\71\0\3\37\13\0"+
    "\1\37\107\0\1\145\1\146\57\0\1\147\2\0\1\147"+
    "\1\150\15\0\1\147\11\0\1\151\1\152\1\153\1\154"+
    "\4\147\1\155\1\156\1\157\1\160\1\147\1\161\1\162"+
    "\1\163\1\147\1\164\1\147\1\165\1\166\1\147\1\167"+
    "\1\170\1\171\1\0\1\147\1\0\3\147\6\0\1\147"+
    "\13\0\1\42\15\0\1\42\70\0\1\43\15\0\1\43"+
    "\6\0\1\172\53\0\1\147\2\0\1\173\1\150\15\0"+
    "\1\147\10\0\1\174\1\151\1\152\1\153\1\154\4\147"+
    "\1\155\1\156\1\157\1\160\1\147\1\161\1\175\1\163"+
    "\1\147\1\164\1\147\1\165\1\166\1\147\1\167\1\170"+
    "\1\171\1\0\1\147\1\0\3\147\6\0\1\147\13\0"+
    "\4\45\4\0\1\46\5\0\2\45\1\0\1\176\2\0"+
    "\1\50\72\0\1\177\116\0\1\200\1\201\55\0\3\202"+
    "\1\203\1\202\1\204\1\205\1\206\3\202\1\0\24\202"+
    "\1\207\1\210\1\202\1\211\3\202\1\212\7\202\1\213"+
    "\4\202\1\203\1\202\1\206\1\203\17\202\10\0\1\53"+
    "\3\214\1\56\1\0\1\57\4\0\1\61\2\0\1\53"+
    "\1\214\1\62\1\63\1\64\3\0\1\215\36\0\1\66"+
    "\1\67\1\70\1\71\1\72\1\73\1\74\1\75\12\0"+
    "\4\214\1\56\1\0\1\57\4\0\1\61\2\0\2\214"+
    "\1\62\1\63\1\64\3\0\1\215\36\0\1\66\1\67"+
    "\1\70\1\71\1\72\1\73\1\74\1\75\12\0\3\214"+
    "\1\54\1\56\1\0\1\57\4\0\1\61\2\0\2\214"+
    "\1\62\1\63\1\64\3\0\1\215\36\0\1\66\1\67"+
    "\1\70\1\71\1\72\1\73\1\74\1\75\107\0\1\216"+
    "\21\0\1\217\116\0\1\220\1\201\56\0\1\221\1\222"+
    "\1\221\1\0\2\222\1\221\1\223\13\0\1\222\1\0"+
    "\1\223\10\0\25\222\4\221\1\222\1\0\3\222\6\0"+
    "\1\222\13\0\1\224\1\225\1\226\1\225\12\0\1\224"+
    "\1\225\57\0\31\76\1\227\1\230\1\231\1\0\1\76"+
    "\1\0\100\76\1\232\1\233\55\76\4\230\1\234\4\230"+
    "\3\0\13\230\1\0\2\230\1\76\54\230\4\235\1\236"+
    "\4\235\3\0\13\235\1\0\3\235\1\0\53\235\10\0"+
    "\4\104\12\0\2\104\67\0\4\106\12\0\2\106\57\0"+
    "\4\107\1\0\4\107\3\0\13\107\1\0\2\107\1\0"+
    "\54\107\3\237\1\240\1\237\1\241\1\242\1\243\3\237"+
    "\1\0\16\237\1\244\5\237\1\245\1\246\1\237\1\247"+
    "\3\237\1\250\7\237\1\251\4\237\1\240\1\237\1\243"+
    "\1\240\17\237\13\0\1\111\103\0\4\252\2\0\1\253"+
    "\7\0\2\252\61\0\1\254\2\0\2\254\15\0\1\254"+
    "\12\0\25\254\4\0\1\254\1\0\3\254\6\0\1\254"+
    "\22\0\1\255\67\0\11\256\2\125\1\126\13\256\1\125"+
    "\70\256\2\125\1\126\13\256\1\125\4\256\1\257\2\256"+
    "\1\260\6\256\1\261\1\256\1\262\36\256\1\0\1\263"+
    "\1\0\1\263\3\0\1\263\1\264\15\0\1\264\35\0"+
    "\4\263\27\0\4\133\12\0\2\133\60\0\3\135\1\0"+
    "\3\135\1\265\13\0\4\135\7\0\32\135\1\0\3\135"+
    "\6\0\1\135\3\0\13\136\1\266\73\136\30\24\1\137"+
    "\1\0\105\24\1\0\1\140\55\24\11\146\2\267\1\270"+
    "\13\146\1\267\57\146\1\0\3\147\1\0\3\147\14\0"+
    "\4\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\271"+
    "\30\147\1\0\3\147\6\0\1\147\3\0\11\151\2\272"+
    "\1\273\13\151\1\272\57\151\1\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\1\147\1\274\15\147\1\275\4\147"+
    "\1\276\5\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\5\147\1\277\24\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\3\147\1\300\5\147\1\301\2\147"+
    "\1\302\15\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\1\303\2\147\14\0\4\147\7\0\5\147\1\304"+
    "\24\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\1\147\1\305\1\147\14\0\4\147\7\0\1\306\31\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\11\147\1\307\20\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\1\310\31\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\20\147\1\311"+
    "\1\147\1\312\7\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\2\147\1\313"+
    "\3\147\1\314\7\147\1\315\13\147\1\0\3\147\6\0"+
    "\1\147\4\0\3\147\1\0\1\147\1\316\1\147\14\0"+
    "\4\147\7\0\2\147\1\317\1\320\1\147\1\321\4\147"+
    "\1\322\1\147\1\323\15\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\1\147\1\324\1\147\14\0\4\147"+
    "\7\0\11\147\1\325\20\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\1\147\1\326\1\147\14\0\4\147"+
    "\7\0\14\147\1\327\15\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+
    "\1\330\22\147\1\0\3\147\6\0\1\147\62\0\1\331"+
    "\106\0\1\332\116\0\1\333\20\0\3\147\1\0\3\147"+
    "\1\334\13\0\2\147\1\335\1\147\7\0\15\147\1\336"+
    "\14\147\1\0\3\147\6\0\1\147\3\0\11\174\3\0"+
    "\13\174\1\0\57\174\1\0\3\147\1\0\3\147\1\337"+
    "\13\0\2\147\1\340\1\147\7\0\2\147\1\341\3\147"+
    "\1\314\7\147\1\315\13\147\1\0\3\147\6\0\1\147"+
    "\75\0\1\342\14\0\11\201\3\0\13\201\1\0\57\201"+
    "\3\0\1\343\3\0\1\343\54\0\1\343\1\0\2\343"+
    "\20\0\3\344\3\0\1\344\36\0\2\344\3\0\1\344"+
    "\1\0\1\344\1\0\1\344\2\0\1\344\1\0\4\344"+
    "\2\0\1\344\1\0\1\344\13\0\3\345\3\0\1\345"+
    "\36\0\2\345\3\0\1\345\1\0\1\345\1\0\1\345"+
    "\2\0\1\345\1\0\4\345\2\0\1\345\1\0\1\345"+
    "\15\0\1\203\3\0\1\203\54\0\1\203\1\0\2\203"+
    "\25\0\1\346\42\0\1\347\6\0\1\350\1\0\1\351"+
    "\116\0\1\352\15\0\1\221\1\0\1\221\3\0\1\221"+
    "\54\0\4\221\20\0\3\222\1\0\3\222\1\353\13\0"+
    "\4\222\4\0\1\354\2\0\32\222\1\0\3\222\6\0"+
    "\1\222\16\0\1\355\73\0\30\232\1\356\56\232\11\233"+
    "\2\357\1\76\13\233\1\357\57\233\11\230\3\0\13\230"+
    "\1\0\57\230\33\0\1\76\53\0\3\235\1\360\1\361"+
    "\1\235\1\362\1\363\1\235\3\0\13\235\1\0\34\235"+
    "\1\360\1\235\1\363\1\360\17\235\3\0\1\364\3\0"+
    "\1\364\54\0\1\364\1\0\2\364\20\0\3\365\3\0"+
    "\1\365\36\0\2\365\3\0\1\365\1\0\1\365\1\0"+
    "\1\365\2\0\1\365\1\0\4\365\2\0\1\365\1\0"+
    "\1\365\13\0\3\366\3\0\1\366\36\0\2\366\3\0"+
    "\1\366\1\0\1\366\1\0\1\366\2\0\1\366\1\0"+
    "\4\366\2\0\1\366\1\0\1\366\15\0\1\240\3\0"+
    "\1\240\54\0\1\240\1\0\2\240\20\0\3\254\1\0"+
    "\3\254\14\0\4\254\4\0\1\367\2\0\32\254\1\0"+
    "\3\254\6\0\1\254\3\0\11\257\2\370\1\371\13\257"+
    "\1\370\57\257\11\256\2\125\1\126\13\256\1\125\10\256"+
    "\1\372\57\256\2\125\1\126\13\256\1\125\14\256\1\373"+
    "\53\256\2\125\1\126\13\256\1\125\20\256\1\374\36\256"+
    "\1\0\1\263\1\0\1\263\3\0\1\263\54\0\4\263"+
    "\27\0\1\265\15\0\1\265\61\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\1\375\31\147\1\0\3\147\6\0"+
    "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
    "\1\376\1\147\1\377\13\147\1\u0100\13\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\22\147\1\u0101\7\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+
    "\1\u0102\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\2\147\1\u0103\27\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\4\147\1\u0104\25\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\22\147\1\u0105\7\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\20\147"+
    "\1\u0106\11\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\2\147\1\u0107\27\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\10\147\1\u0108\21\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\1\147\1\u0109\10\147\1\u010a\17\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\1\147\1\u010b\30\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+
    "\1\u010c\2\147\1\u010d\17\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+
    "\1\u010e\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\15\147\1\u010f\14\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\1\u0110\31\147\1\0\3\147\6\0"+
    "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
    "\14\147\1\u0111\15\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\1\u0112\31\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\14\147\1\u0113\15\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\22\147\1\u0114\7\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\5\147"+
    "\1\u0115\24\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\14\147\1\u0116\15\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\12\147\1\u0117\17\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\14\147\1\u0118\15\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+
    "\1\u0119\14\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\10\147\1\u011a\21\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\14\147\1\u011b\15\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\20\147\1\u011c\11\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\16\147"+
    "\1\u011d\13\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\20\147\1\u011e\11\147"+
    "\1\0\3\147\6\0\1\147\42\0\1\u011f\106\0\1\u0120"+
    "\126\0\1\u0121\37\0\1\334\15\0\1\334\61\0\3\147"+
    "\1\0\3\147\1\334\13\0\2\147\1\335\1\147\7\0"+
    "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\14\0\4\147\7\0\2\147\1\u0122\27\147\1\0"+
    "\3\147\6\0\1\147\13\0\1\337\15\0\1\337\61\0"+
    "\3\147\1\0\3\147\1\337\13\0\2\147\1\340\1\147"+
    "\7\0\32\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\14\147\1\u0123\15\147"+
    "\1\0\3\147\6\0\1\147\76\0\1\u0124\14\0\3\u0125"+
    "\3\0\1\u0125\36\0\2\u0125\3\0\1\u0125\1\0\1\u0125"+
    "\1\0\1\u0125\2\0\1\u0125\1\0\4\u0125\2\0\1\u0125"+
    "\1\0\1\u0125\13\0\3\u0126\3\0\1\u0126\36\0\2\u0126"+
    "\3\0\1\u0126\1\0\1\u0126\1\0\1\u0126\2\0\1\u0126"+
    "\1\0\4\u0126\2\0\1\u0126\1\0\1\u0126\73\0\1\u0127"+
    "\71\0\1\u0128\1\0\1\u0129\111\0\1\u012a\74\0\1\u012b"+
    "\142\0\1\u012c\23\0\1\353\15\0\1\353\5\0\1\354"+
    "\52\0\30\232\1\356\1\76\55\232\13\357\1\76\15\357"+
    "\1\u012d\1\u012e\1\u012f\1\233\1\357\1\233\50\357\3\0"+
    "\1\235\3\0\1\235\23\0\1\76\30\0\1\235\1\0"+
    "\2\235\23\0\1\u0130\1\0\1\u0131\24\0\1\76\54\0"+
    "\3\u0132\3\0\1\u0132\23\0\1\76\12\0\2\u0132\3\0"+
    "\1\u0132\1\0\1\u0132\1\0\1\u0132\2\0\1\u0132\1\0"+
    "\4\u0132\2\0\1\u0132\1\0\1\u0132\15\0\1\360\3\0"+
    "\1\360\23\0\1\76\30\0\1\360\1\0\2\360\20\0"+
    "\3\u0133\3\0\1\u0133\36\0\2\u0133\3\0\1\u0133\1\0"+
    "\1\u0133\1\0\1\u0133\2\0\1\u0133\1\0\4\u0133\2\0"+
    "\1\u0133\1\0\1\u0133\13\0\3\u0134\3\0\1\u0134\36\0"+
    "\2\u0134\3\0\1\u0134\1\0\1\u0134\1\0\1\u0134\2\0"+
    "\1\u0134\1\0\4\u0134\2\0\1\u0134\1\0\1\u0134\12\0"+
    "\11\256\2\125\1\126\13\256\1\125\7\256\1\u0135\60\256"+
    "\2\125\1\126\13\256\1\125\17\256\1\u0136\50\256\2\125"+
    "\1\126\13\256\1\125\21\256\1\u0137\35\256\1\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\16\147\1\u0138\13\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\2\147\1\u0139\27\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\6\147\1\u013a\1\u013b\22\147\1\0\3\147\6\0"+
    "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
    "\12\147\1\u013c\17\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\12\147\1\u013d"+
    "\17\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\14\0\4\147\7\0\5\147\1\u013e\24\147\1\0"+
    "\3\147\6\0\1\147\4\0\3\147\1\0\1\147\1\u013f"+
    "\1\147\14\0\4\147\7\0\32\147\1\0\3\147\6\0"+
    "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
    "\5\147\1\u0140\24\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\7\147\1\u0141"+
    "\22\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\14\0\4\147\7\0\12\147\1\u0142\17\147\1\0"+
    "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
    "\4\147\7\0\7\147\1\u0143\22\147\1\0\3\147\6\0"+
    "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\6\0"+
    "\1\151\2\147\1\u0144\10\147\1\u0145\2\147\1\u0146\13\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\16\147\1\u0147\13\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\12\147\1\u0148\17\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\14\147"+
    "\1\u0149\15\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\5\147\1\u014a\24\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\7\147\1\u014b\22\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\7\147\1\u014c\22\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\2\147"+
    "\1\u014d\27\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\22\147\1\u014e\7\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\1\147\1\u014f\30\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\2\147\1\u0150\27\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+
    "\1\u0151\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\15\147\1\u0152\5\147"+
    "\1\u0153\6\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\4\147\1\u0154\25\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\4\147\1\u0155\25\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\1\147\1\u0156\1\147"+
    "\14\0\4\147\7\0\32\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+
    "\1\u0157\14\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\7\147\1\u0158\22\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\10\147\1\u0159\21\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\16\147\1\u015a\13\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\12\147"+
    "\1\u015b\17\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\31\147\1\u015c\1\0"+
    "\3\147\6\0\1\147\4\0\3\147\1\0\1\147\1\u015d"+
    "\1\147\14\0\4\147\7\0\32\147\1\0\3\147\6\0"+
    "\1\147\44\0\1\u015e\106\0\1\u015f\104\0\1\u0160\50\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\14\147\1\u0161"+
    "\15\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\14\0\4\147\7\0\1\147\1\u014f\1\u0162\27\147"+
    "\1\0\3\147\6\0\1\147\77\0\1\u0163\13\0\3\u0164"+
    "\3\0\1\u0164\36\0\2\u0164\3\0\1\u0164\1\0\1\u0164"+
    "\1\0\1\u0164\2\0\1\u0164\1\0\4\u0164\2\0\1\u0164"+
    "\1\0\1\u0164\73\0\1\u0165\72\0\1\u0166\102\0\1\u0167"+
    "\113\0\1\u0168\123\0\1\u0169\117\0\1\u016a\12\0\13\357"+
    "\1\76\14\357\1\u016b\1\233\55\357\4\u012e\1\u016c\4\u012e"+
    "\2\357\1\76\13\u012e\1\357\2\u012e\1\357\54\u012e\4\u016d"+
    "\1\u016e\4\u016d\2\357\1\76\13\u016d\1\357\3\u016d\1\233"+
    "\53\u016d\4\0\1\u0130\1\0\1\u0131\101\0\3\u0132\3\0"+
    "\1\u0132\36\0\2\u0132\3\0\1\u0132\1\0\1\u0132\1\0"+
    "\1\u0132\2\0\1\u0132\1\0\4\u0132\2\0\1\u0132\1\0"+
    "\1\u0132\13\0\3\u016f\3\0\1\u016f\36\0\2\u016f\3\0"+
    "\1\u016f\1\0\1\u016f\1\0\1\u016f\2\0\1\u016f\1\0"+
    "\4\u016f\2\0\1\u016f\1\0\1\u016f\13\0\3\u0170\3\0"+
    "\1\u0170\36\0\2\u0170\3\0\1\u0170\1\0\1\u0170\1\0"+
    "\1\u0170\2\0\1\u0170\1\0\4\u0170\2\0\1\u0170\1\0"+
    "\1\u0170\12\0\11\256\2\125\1\126\13\256\1\125\11\256"+
    "\1\u0171\56\256\2\125\1\126\13\256\1\125\4\256\1\u0172"+
    "\4\256\1\u0173\10\256\1\u0174\45\256\2\125\1\126\13\256"+
    "\1\125\16\256\1\u0175\40\256\1\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\5\147\1\u0176\24\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\6\0\1\151\2\147\1\u0177\27\147\1\0\3\147\6\0"+
    "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
    "\4\147\1\u0178\25\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\24\147\1\u0179"+
    "\5\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\1\147\1\u017a\1\147\14\0\4\147\7\0\32\147\1\0"+
    "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
    "\4\147\7\0\7\147\1\u017b\22\147\1\0\3\147\6\0"+
    "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
    "\4\147\1\u017c\25\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\u017d"+
    "\30\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\14\0\4\147\7\0\6\147\1\u017e\23\147\1\0"+
    "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\1\u017f"+
    "\13\0\2\147\1\u0180\1\147\7\0\32\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\7\147\1\u0181\22\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+
    "\1\u0182\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\3\147\1\u0183\26\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\14\147\1\u0184\15\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\12\147\1\u0185\17\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\2\147"+
    "\1\u0186\27\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\12\147\1\u0187\17\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\10\147\1\u0188\21\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\1\u0189\2\147\14\0"+
    "\4\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\4\147\1\u018a"+
    "\25\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\14\0\4\147\7\0\4\147\1\u018b\25\147\1\0"+
    "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
    "\4\147\7\0\23\147\1\u018c\6\147\1\0\3\147\6\0"+
    "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
    "\16\147\1\u018d\13\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\7\147\1\u018e"+
    "\22\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\14\0\4\147\7\0\11\147\1\u018f\20\147\1\0"+
    "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
    "\4\147\7\0\7\147\1\u0190\22\147\1\0\3\147\6\0"+
    "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
    "\14\147\1\u0191\15\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\17\147\1\u0192"+
    "\12\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\14\0\4\147\7\0\15\147\1\u0193\14\147\1\0"+
    "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
    "\4\147\7\0\12\147\1\u0194\17\147\1\0\3\147\6\0"+
    "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
    "\7\147\1\u0195\22\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\16\147\1\u0196"+
    "\13\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\14\0\4\147\7\0\1\u0197\31\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\24\147\1\u0198\5\147\1\0\3\147\6\0\1\147"+
    "\44\0\1\u0199\46\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\2\147\1\u019a\27\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+
    "\1\u019b\22\147\1\0\3\147\6\0\1\147\24\0\1\u019c"+
    "\133\0\1\u019d\106\0\1\u019e\101\0\1\u019f\106\0\1\u01a0"+
    "\104\0\1\u01a1\70\0\1\u01a2\65\0\11\u016b\2\u01a3\1\u01a4"+
    "\13\u016b\1\u01a3\1\u01a5\56\u016b\11\u012e\2\357\1\76\13\u012e"+
    "\1\357\57\u012e\11\233\2\357\1\76\13\233\1\357\3\233"+
    "\1\357\53\233\3\u016d\1\u01a6\1\u01a7\1\u016d\1\u01a8\1\u01a9"+
    "\1\u016d\2\357\1\76\13\u016d\1\357\34\u016d\1\u01a6\1\u016d"+
    "\1\u01a9\1\u01a6\17\u016d\1\0\3\u01aa\3\0\1\u01aa\36\0"+
    "\2\u01aa\3\0\1\u01aa\1\0\1\u01aa\1\0\1\u01aa\2\0"+
    "\1\u01aa\1\0\4\u01aa\2\0\1\u01aa\1\0\1\u01aa\12\0"+
    "\11\256\2\125\1\126\13\256\1\125\4\256\1\u01ab\4\256"+
    "\1\u01ac\45\256\11\u0172\2\u01ad\1\u01ae\13\u0172\1\u01ad\57\u0172"+
    "\11\256\2\125\1\126\13\256\1\125\12\256\1\u01af\55\256"+
    "\2\125\1\126\13\256\1\125\23\256\1\u01b0\40\256\1\u01b1"+
    "\3\256\2\125\1\126\13\256\1\125\57\256\1\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\23\147\1\u01b2\6\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\3\147\1\u01b3\26\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\14\147\1\u01b4\15\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\7\147"+
    "\1\u01b5\22\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\23\147\1\u01b6\6\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\17\147\1\u01b7\12\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\7\147\1\u01b8\22\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\u01b9"+
    "\31\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\14\0\4\147\7\0\15\147\1\u01ba\14\147\1\0"+
    "\3\147\6\0\1\147\5\0\1\u01bb\2\0\2\u01bb\1\0"+
    "\1\u017f\7\0\1\u01bc\3\0\1\u01bb\1\0\1\u017f\10\0"+
    "\25\u01bb\4\0\1\u01bb\1\0\3\u01bb\6\0\1\u01bb\4\0"+
    "\1\147\1\u01bb\1\147\1\0\2\u01bb\1\147\1\u017f\7\0"+
    "\1\u01bc\3\0\1\u01bb\1\147\1\u0180\1\147\7\0\25\u01bb"+
    "\4\147\1\u01bb\1\0\3\u01bb\6\0\1\u01bb\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\23\147\1\u01bd\6\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\4\147\1\u01be\25\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\12\147\1\u01bf\17\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\5\147"+
    "\1\u01c0\24\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\1\u01c1\31\147\1\0"+
    "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
    "\4\147\7\0\2\147\1\u01c2\27\147\1\0\3\147\6\0"+
    "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
    "\14\147\1\u01c3\15\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\1\u01c4\31\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\14\147\1\u01c5\15\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\3\147\1\u01c6\26\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\4\147"+
    "\1\u01c7\25\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\17\147\1\u01c8\12\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\20\147\1\u01c9\11\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\4\147\1\u01ca\25\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\1\147"+
    "\1\u01cb\30\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\1\u01cc\13\0\2\147\1\u01cd\1\147\7\0"+
    "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\14\0\4\147\7\0\7\147\1\u01ce\22\147\1\0"+
    "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
    "\4\147\7\0\4\147\1\u01cf\25\147\1\0\3\147\6\0"+
    "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
    "\21\147\1\u01d0\10\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\16\147\1\u01d1"+
    "\13\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\14\0\4\147\7\0\7\147\1\u01d2\22\147\1\0"+
    "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\1\337"+
    "\13\0\2\147\1\340\1\147\7\0\15\147\1\u01d3\14\147"+
    "\1\0\3\147\6\0\1\147\24\0\1\u01d4\130\0\1\u01d5"+
    "\106\0\1\u01d6\111\0\1\u01d7\101\0\1\u01d8\106\0\1\u01d9"+
    "\66\0\1\u01da\65\0\13\u01a3\1\u01a4\14\u01a3\1\u01db\1\u01dc"+
    "\1\u01dd\1\u01de\1\u016b\1\u01a3\1\u016b\50\u01a3\30\u01a4\1\u01df"+
    "\1\u01e0\1\u01e1\1\u01e2\1\232\1\u01a4\1\232\50\u01a4\11\u016b"+
    "\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\1\357\55\u016b\3\233"+
    "\1\u016d\3\233\1\u016d\1\233\2\357\1\76\13\233\1\357"+
    "\3\233\1\357\30\233\1\u016d\1\233\2\u016d\23\233\1\u01e3"+
    "\1\233\1\u01e4\2\233\2\357\1\76\13\233\1\357\3\233"+
    "\1\357\54\233\3\u01e5\3\233\1\u01e5\1\233\2\357\1\76"+
    "\13\233\1\357\3\233\1\357\12\233\2\u01e5\3\233\1\u01e5"+
    "\1\233\1\u01e5\1\233\1\u01e5\2\233\1\u01e5\1\233\4\u01e5"+
    "\2\233\1\u01e5\1\233\1\u01e5\15\233\1\u01a6\3\233\1\u01a6"+
    "\1\233\2\357\1\76\13\233\1\357\3\233\1\357\30\233"+
    "\1\u01a6\1\233\2\u01a6\17\233\1\0\3\235\3\0\1\235"+
    "\36\0\2\235\3\0\1\235\1\0\1\235\1\0\1\235"+
    "\2\0\1\235\1\0\4\235\2\0\1\235\1\0\1\235"+
    "\12\0\11\u01ab\2\u01e6\1\u01e7\13\u01ab\1\u01e6\57\u01ab\11\256"+
    "\2\125\1\126\13\256\1\125\12\256\1\u01e8\55\256\2\125"+
    "\1\126\13\256\1\125\13\256\1\u01e9\54\256\2\125\1\126"+
    "\13\256\1\125\21\256\1\u01ea\46\256\2\125\1\126\13\256"+
    "\1\125\11\256\1\u01eb\45\256\1\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\7\147\1\u01ec\22\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\4\147\1\u01ed\25\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\22\147"+
    "\1\u01ee\7\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\4\147\1\u01ef\25\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\7\147\1\u01f0\22\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\7\147\1\u01f1\22\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\16\147"+
    "\1\u01f2\13\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\1\u01f3\2\147\14\0\4\147\7\0\32\147\1\0"+
    "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\1\u01f4"+
    "\13\0\2\147\1\u01f5\1\147\7\0\32\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\u01bb\1\0\3\u01bb\1\u01f6\3\0"+
    "\1\u01f7\1\0\1\u01f8\1\0\1\u01f9\3\0\4\u01bb\7\0"+
    "\32\u01bb\1\0\3\u01bb\6\0\1\u01bb\4\0\3\u01fa\1\0"+
    "\4\u01fa\3\0\2\u01fa\2\0\10\u01fa\7\0\32\u01fa\1\0"+
    "\3\u01fa\6\0\1\u01fa\4\0\3\147\1\0\3\147\14\0"+
    "\4\147\7\0\15\147\1\u01fb\14\147\1\0\3\147\6\0"+
    "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
    "\5\147\1\u01fc\24\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\6\0\1\151\32\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\15\147\1\u01fd\14\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\5\147\1\u01fe\24\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\3\147"+
    "\1\u01ff\26\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\16\147\1\u0200\13\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\13\147\1\u0201\16\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\12\147\1\u0202\17\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\4\147"+
    "\1\u0203\25\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\1\u0204\13\0\2\147\1\u0205\1\147\7\0"+
    "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\1\147\1\u0206\1\147\14\0\4\147\7\0\32\147\1\0"+
    "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
    "\4\147\7\0\24\147\1\u0207\5\147\1\0\3\147\6\0"+
    "\1\147\5\0\1\u0208\2\0\2\u0208\1\0\1\u01cc\13\0"+
    "\1\u0208\1\0\1\u01cc\10\0\25\u0208\4\0\1\u0208\1\0"+
    "\3\u0208\6\0\1\u0208\4\0\1\147\1\u0208\1\147\1\0"+
    "\2\u0208\1\147\1\u01cc\13\0\1\u0208\1\147\1\u01cd\1\147"+
    "\7\0\25\u0208\4\147\1\u0208\1\0\3\u0208\6\0\1\u0208"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\15\147"+
    "\1\u0209\14\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\1\u020a\13\0\2\147\1\u020b\1\147\7\0"+
    "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\1\334\13\0\2\147\1\335\1\147\7\0\15\147"+
    "\1\u020c\14\147\1\0\3\147\6\0\1\147\13\0\4\u01d4"+
    "\12\0\2\u01d4\6\0\1\u020d\125\0\1\u020e\106\0\1\u020f"+
    "\74\0\1\u0210\111\0\1\u0211\145\0\1\u0212\11\0\4\u0213"+
    "\12\0\2\u0213\57\0\13\u01a3\1\u01a4\14\u01a3\1\u01db\1\u0214"+
    "\1\u01dd\1\u01de\1\u016b\1\u01a3\1\u016b\63\u01a3\1\u01a4\14\u01a3"+
    "\1\u0215\1\u016b\55\u01a3\4\u01dd\1\u0216\4\u01dd\2\u01a3\1\u01a4"+
    "\13\u01dd\1\u01a3\1\u0217\1\u01dd\1\u01a3\54\u01dd\4\u0218\1\u0219"+
    "\4\u0218\2\u01a3\1\u01a4\13\u0218\1\u01a3\1\u021a\2\u0218\1\u016b"+
    "\53\u0218\30\u01a4\1\u01df\1\u021b\1\u01e1\1\u01e2\1\232\1\u01a4"+
    "\1\232\100\u01a4\1\u021c\1\u016b\55\u01a4\4\u01e1\1\u021d\4\u01e1"+
    "\3\232\13\u01e1\1\232\1\u021e\1\u01e1\1\u01a4\54\u01e1\4\u021f"+
    "\1\u0220\4\u021f\3\232\13\u021f\1\232\1\u0221\2\u021f\1\232"+
    "\53\u021f\4\233\1\u01e3\1\233\1\u01e4\2\233\2\357\1\76"+
    "\13\233\1\357\60\233\3\u01e5\3\233\1\u01e5\1\233\2\357"+
    "\1\76\13\233\1\357\16\233\2\u01e5\3\233\1\u01e5\1\233"+
    "\1\u01e5\1\233\1\u01e5\2\233\1\u01e5\1\233\4\u01e5\2\233"+
    "\1\u01e5\1\233\1\u01e5\13\233\3\u0222\3\233\1\u0222\1\233"+
    "\2\357\1\76\13\233\1\357\16\233\2\u0222\3\233\1\u0222"+
    "\1\233\1\u0222\1\233\1\u0222\2\233\1\u0222\1\233\4\u0222"+
    "\2\233\1\u0222\1\233\1\u0222\12\233\11\256\2\125\1\126"+
    "\13\256\1\125\13\256\1\u0223\54\256\2\125\1\126\13\256"+
    "\1\125\14\256\1\u0224\53\256\2\125\1\126\13\256\1\125"+
    "\4\256\1\u0225\63\256\2\125\1\126\13\256\1\125\12\256"+
    "\1\u0226\44\256\1\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\5\147\1\u0227\24\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\1\u0228\13\0\2\147\1\u0228"+
    "\1\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\u0229"+
    "\30\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\14\0\4\147\7\0\14\147\1\u022a\15\147\1\0"+
    "\3\147\6\0\1\147\3\0\2\u022b\1\u022c\2\u022b\2\u022c"+
    "\1\u022b\1\u01f4\3\0\10\u022b\1\u022c\1\u022b\1\u01f4\1\0"+
    "\7\u022b\25\u022c\4\u022b\1\u022c\1\u022b\3\u022c\6\u022b\1\u022c"+
    "\4\u022b\1\u022d\1\u022c\1\u022d\1\u022b\2\u022c\1\u022d\1\u01f4"+
    "\3\0\10\u022b\1\u022c\1\u022d\1\u01f5\1\147\7\u022b\25\u022c"+
    "\4\u022d\1\u022c\1\u022b\3\u022c\6\u022b\1\u022c\3\u022b\10\0"+
    "\1\u01f6\3\0\1\u01f7\1\0\1\u01f8\1\0\1\u01f9\5\0"+
    "\1\u01f6\62\0\1\u01bb\2\0\2\u01bb\1\0\1\u01f7\13\0"+
    "\1\u01bb\1\0\1\u01f7\10\0\25\u01bb\4\0\1\u01bb\1\0"+
    "\3\u01bb\6\0\1\u01bb\13\0\1\u01f8\6\0\1\u022e\6\0"+
    "\1\u01f8\61\0\3\u022f\1\0\4\u022f\3\0\2\u022f\2\0"+
    "\10\u022f\7\0\32\u022f\1\0\3\u022f\6\0\1\u022f\4\0"+
    "\3\u01fa\1\0\4\u01fa\3\0\2\u01fa\2\0\1\u01fa\1\u0230"+
    "\6\u01fa\7\0\32\u01fa\1\0\3\u01fa\6\0\1\u01fa\4\0"+
    "\3\147\1\0\3\147\1\u0231\13\0\2\147\1\u0232\1\147"+
    "\7\0\32\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\6\147\1\u0233\23\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\7\147\1\u0234\22\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\1\147\1\u0235\30\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\4\147"+
    "\1\u0236\25\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\2\147\1\u0237\27\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\14\147\1\u0238\15\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\5\147\1\u0239\24\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\5\147"+
    "\1\u023a\24\147\1\0\3\147\6\0\1\147\3\0\2\u023b"+
    "\1\u023c\2\u023b\2\u023c\1\u023b\1\u0204\3\0\10\u023b\1\u023c"+
    "\1\u023b\1\u0204\1\0\7\u023b\25\u023c\4\u023b\1\u023c\1\u023b"+
    "\3\u023c\6\u023b\1\u023c\4\u023b\1\u023d\1\u023c\1\u023d\1\u023b"+
    "\2\u023c\1\u023d\1\u0204\3\0\10\u023b\1\u023c\1\u023d\1\u0205"+
    "\1\147\7\u023b\25\u023c\4\u023d\1\u023c\1\u023b\3\u023c\6\u023b"+
    "\1\u023c\3\u023b\1\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\24\147\1\u023e\5\147\1\0\3\147\6\0\1\147"+
    "\4\0\3\147\1\0\3\147\1\u023f\13\0\2\147\1\u0240"+
    "\1\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\u0208\1\0\3\u0208\1\u0241\7\0\1\u0242\3\0\4\u0208"+
    "\7\0\32\u0208\1\0\3\u0208\6\0\1\u0208\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\15\147\1\u0243\14\147"+
    "\1\0\3\147\6\0\1\147\3\0\1\u0244\1\u0245\1\u0244"+
    "\1\u0245\3\u0244\1\u0245\1\u020a\3\0\12\u0244\1\u020a\1\0"+
    "\34\u0244\4\u0245\20\u0244\1\u0246\1\u0247\1\u0246\1\u0244\2\u0247"+
    "\1\u0246\1\u020a\3\0\10\u0244\2\u0247\1\u020b\1\147\7\u0244"+
    "\25\u0247\4\u0246\1\u0247\1\u0244\3\u0247\6\u0244\1\u0247\3\u0244"+
    "\53\0\1\u0248\106\0\1\u0249\140\0\1\u024a\44\0\1\u024b"+
    "\62\0\1\u024c\77\0\4\u0213\12\0\2\u0213\6\0\1\u024d"+
    "\50\0\13\357\1\76\14\357\1\u01a3\1\u012d\1\u024e\1\u024f"+
    "\53\357\11\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\1\u01a3"+
    "\55\u016b\11\u01dd\2\u01a3\1\u01a4\13\u01dd\1\u01a3\1\u0217\62\u01dd"+
    "\1\u0216\4\u01dd\2\u01a3\1\u01a4\13\u01dd\1\u01a3\1\u0217\1\u024e"+
    "\1\u01a3\54\u01dd\11\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5"+
    "\2\u016b\1\u01a3\53\u016b\3\u0218\1\u0250\1\u0251\1\u0218\1\u0252"+
    "\1\u0253\1\u0218\2\u01a3\1\u01a4\13\u0218\1\u01a3\1\u021a\33\u0218"+
    "\1\u0250\1\u0218\1\u0253\1\u0250\17\u0218\11\u016b\2\u01a3\1\u01a4"+
    "\13\u016b\1\u01a3\1\u01a5\1\357\1\u016b\1\u01a3\53\u016b\30\76"+
    "\1\u01a4\1\u012d\1\u0254\1\u0255\53\76\30\232\1\356\1\u01a4"+
    "\55\232\11\u01e1\3\232\13\u01e1\1\232\1\u021e\62\u01e1\1\u021d"+
    "\4\u01e1\3\232\13\u01e1\1\232\1\u021e\1\u0254\1\u01a4\54\u01e1"+
    "\30\232\1\356\2\232\1\u01a4\53\232\3\u021f\1\u0256\1\u0257"+
    "\1\u021f\1\u0258\1\u0259\1\u021f\3\232\13\u021f\1\232\1\u0221"+
    "\33\u021f\1\u0256\1\u021f\1\u0259\1\u0256\17\u021f\30\232\1\356"+
    "\1\76\1\232\1\u01a4\53\232\1\233\3\u025a\3\233\1\u025a"+
    "\1\233\2\357\1\76\13\233\1\357\16\233\2\u025a\3\233"+
    "\1\u025a\1\233\1\u025a\1\233\1\u025a\2\233\1\u025a\1\233"+
    "\4\u025a\2\233\1\u025a\1\233\1\u025a\12\233\11\256\2\125"+
    "\1\126\13\256\1\125\14\256\1\u025b\53\256\2\125\1\126"+
    "\13\256\1\125\15\256\1\u025c\41\256\11\u0225\2\u025d\1\u025e"+
    "\13\u0225\1\u025d\57\u0225\11\256\2\125\1\126\13\256\1\125"+
    "\13\256\1\u025f\43\256\1\0\3\147\1\0\3\147\14\0"+
    "\4\147\7\0\6\147\1\u0260\23\147\1\0\3\147\6\0"+
    "\1\147\3\0\13\u0228\1\0\73\u0228\1\0\3\147\1\0"+
    "\3\147\14\0\4\147\7\0\2\147\1\u0261\27\147\1\0"+
    "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
    "\4\147\7\0\15\147\1\u0262\14\147\1\0\3\147\6\0"+
    "\1\147\3\0\11\u022b\3\0\13\u022b\1\0\60\u022b\3\u022c"+
    "\1\u022b\3\u022c\1\u0263\3\0\2\u01f4\6\u022b\3\u022c\1\u0264"+
    "\7\u022b\32\u022c\1\u022b\3\u022c\6\u022b\1\u022c\4\u022b\3\u022d"+
    "\1\u022b\3\u022d\1\u022b\3\0\10\u022b\3\u022d\1\147\7\u022b"+
    "\32\u022d\1\u022b\3\u022d\6\u022b\1\u022d\3\u022b\10\0\1\u022e"+
    "\5\0\1\u01f8\7\0\1\u022e\61\0\3\u022f\1\0\4\u022f"+
    "\3\0\2\u022f\2\0\1\u022f\1\u0265\6\u022f\7\0\32\u022f"+
    "\1\0\3\u022f\6\0\1\u022f\4\0\1\u01fa\1\u0266\1\u01fa"+
    "\1\0\2\u0266\1\u01fa\1\u0230\3\0\2\u01fa\2\0\1\u01fa"+
    "\1\u0230\2\u01fa\1\u0266\1\u01fa\1\u0230\1\u01fa\7\0\25\u0266"+
    "\4\u01fa\1\u0266\1\0\3\u0266\6\0\1\u0266\5\0\1\u0267"+
    "\2\0\2\u0267\1\0\1\u0231\13\0\1\u0267\1\0\1\u0231"+
    "\10\0\25\u0267\4\0\1\u0267\1\0\3\u0267\6\0\1\u0267"+
    "\4\0\1\147\1\u0267\1\147\1\0\2\u0267\1\147\1\u0231"+
    "\13\0\1\u0267\1\147\1\u0232\1\147\7\0\25\u0267\4\147"+
    "\1\u0267\1\0\3\u0267\6\0\1\u0267\4\0\3\147\1\0"+
    "\3\147\1\u0268\13\0\2\147\1\u0269\1\147\6\0\1\151"+
    "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\1\u026a\13\0\2\147\1\u026b\1\147\7\0\32\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\1\u026c\13\0\2\147\1\u026d\1\147\7\0\32\147\1\0"+
    "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
    "\4\147\7\0\5\147\1\u026e\24\147\1\0\3\147\6\0"+
    "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
    "\2\147\1\u026f\27\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\1\147\1\u0270"+
    "\30\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\14\0\4\147\7\0\4\147\1\u0271\25\147\1\0"+
    "\3\147\6\0\1\147\3\0\11\u023b\3\0\13\u023b\1\0"+
    "\60\u023b\3\u023c\1\u023b\3\u023c\1\u0272\3\0\1\u0204\7\u023b"+
    "\3\u023c\1\u0273\7\u023b\32\u023c\1\u023b\3\u023c\6\u023b\1\u023c"+
    "\4\u023b\3\u023d\1\u023b\3\u023d\1\u023b\3\0\10\u023b\3\u023d"+
    "\1\147\7\u023b\32\u023d\1\u023b\3\u023d\6\u023b\1\u023d\3\u023b"+
    "\2\0\1\u0274\2\0\2\u0274\1\0\1\u023f\7\0\1\u0275"+
    "\3\0\1\u0274\1\0\1\u023f\10\0\25\u0274\4\0\1\u0274"+
    "\1\0\3\u0274\6\0\1\u0274\4\0\1\147\1\u0276\1\147"+
    "\1\0\2\u0276\1\147\1\u023f\7\0\1\u0275\3\0\1\u0276"+
    "\1\147\1\u0240\1\147\7\0\25\u0276\4\147\1\u0276\1\0"+
    "\3\u0276\6\0\1\u0276\13\0\1\u0241\7\0\1\u0242\5\0"+
    "\1\u0241\61\0\3\u0277\1\0\4\u0277\3\0\2\u0277\2\0"+
    "\10\u0277\7\0\32\u0277\1\0\3\u0277\6\0\1\u0277\3\0"+
    "\11\u0244\3\0\13\u0244\1\0\60\u0244\1\u0245\1\u0244\1\u0245"+
    "\3\u0244\1\u0245\1\u0278\3\0\12\u0244\1\u0278\1\0\34\u0244"+
    "\4\u0245\20\u0244\1\u0246\1\u0247\1\u0246\1\u0244\2\u0247\1\u0246"+
    "\1\u0278\3\0\10\u0244\2\u0247\1\u0279\1\147\7\u0244\25\u0247"+
    "\4\u0246\1\u0247\1\u0244\3\u0247\6\u0244\1\u0247\4\u0244\3\u0247"+
    "\1\u0244\3\u0247\1\u0244\3\0\10\u0244\3\u0247\1\147\7\u0244"+
    "\32\u0247\1\u0244\3\u0247\6\u0244\1\u0247\3\u0244\54\0\1\u027a"+
    "\106\0\1\u027b\51\0\1\u027c\151\0\1\u027d\22\0\1\u027e"+
    "\1\0\4\u024e\1\u027f\4\u024e\2\357\1\76\13\u024e\1\357"+
    "\1\u024e\1\u0280\1\u024e\1\u0281\1\u012e\1\u024e\1\u012e\50\u024e"+
    "\4\u0282\1\u0283\4\u0282\2\357\1\76\13\u0282\1\357\1\u0282"+
    "\1\u012d\1\u0284\1\u012f\1\u016d\1\u0282\1\u016d\50\u0282\3\u016b"+
    "\1\u0218\3\u016b\1\u0218\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3"+
    "\1\u01a5\2\u016b\1\u01a3\30\u016b\1\u0218\1\u016b\2\u0218\23\u016b"+
    "\1\u0285\1\u016b\1\u0286\2\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3"+
    "\1\u01a5\2\u016b\1\u01a3\54\u016b\3\u0287\3\u016b\1\u0287\1\u016b"+
    "\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\2\u016b\1\u01a3\12\u016b"+
    "\2\u0287\3\u016b\1\u0287\1\u016b\1\u0287\1\u016b\1\u0287\2\u016b"+
    "\1\u0287\1\u016b\4\u0287\2\u016b\1\u0287\1\u016b\1\u0287\15\u016b"+
    "\1\u0250\3\u016b\1\u0250\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3"+
    "\1\u01a5\2\u016b\1\u01a3\30\u016b\1\u0250\1\u016b\2\u0250\17\u016b"+
    "\4\u0254\1\u0288\4\u0254\3\76\13\u0254\1\76\1\u0254\1\u0289"+
    "\1\u0254\1\u028a\1\230\1\u0254\1\230\50\u0254\4\u028b\1\u028c"+
    "\4\u028b\3\76\13\u028b\1\76\1\u028b\1\227\1\u028d\1\231"+
    "\1\235\1\u028b\1\235\50\u028b\3\232\1\u021f\3\232\1\u021f"+
    "\20\232\1\356\2\232\1\u01a4\30\232\1\u021f\1\232\2\u021f"+
    "\23\232\1\u028e\1\232\1\u028f\21\232\1\356\2\232\1\u01a4"+
    "\54\232\3\u0290\3\232\1\u0290\20\232\1\356\2\232\1\u01a4"+
    "\12\232\2\u0290\3\232\1\u0290\1\232\1\u0290\1\232\1\u0290"+
    "\2\232\1\u0290\1\232\4\u0290\2\232\1\u0290\1\232\1\u0290"+
    "\15\232\1\u0256\3\232\1\u0256\20\232\1\356\2\232\1\u01a4"+
    "\30\232\1\u0256\1\232\2\u0256\17\232\1\233\3\u016d\3\233"+
    "\1\u016d\1\233\2\357\1\76\13\233\1\357\16\233\2\u016d"+
    "\3\233\1\u016d\1\233\1\u016d\1\233\1\u016d\2\233\1\u016d"+
    "\1\233\4\u016d\2\233\1\u016d\1\233\1\u016d\12\233\11\256"+
    "\2\125\1\126\13\256\1\125\15\256\1\u0291\52\256\2\125"+
    "\1\126\13\256\1\125\4\256\1\u0292\63\256\2\125\1\126"+
    "\13\256\1\125\14\256\1\u0293\42\256\1\0\3\147\1\0"+
    "\3\147\1\u0294\13\0\2\147\1\u0295\1\147\6\0\1\151"+
    "\32\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\14\0\4\147\7\0\15\147\1\u0296\14\147\1\0"+
    "\3\147\6\0\1\147\4\0\3\147\1\0\3\147\14\0"+
    "\4\147\7\0\7\147\1\u0243\22\147\1\0\3\147\6\0"+
    "\1\147\3\0\10\u022b\1\u0263\3\0\2\u01f4\10\u022b\1\u0263"+
    "\1\0\57\u022b\1\0\3\u0264\1\0\3\u0264\1\u0297\3\0"+
    "\2\u0298\6\0\4\u0264\7\0\32\u0264\1\0\3\u0264\6\0"+
    "\1\u0264\4\0\3\u022f\1\0\3\u022f\1\u0265\3\0\2\u022f"+
    "\1\u01f8\1\0\1\u022f\1\u0265\4\u022f\1\u0265\1\u022f\7\0"+
    "\32\u022f\1\0\3\u022f\6\0\1\u022f\4\0\3\u0266\1\0"+
    "\3\u0266\1\u0299\3\0\1\u0230\1\u01fa\1\u01f8\1\0\1\u029a"+
    "\1\u0230\2\u01fa\4\u0266\7\0\32\u0266\1\0\3\u0266\6\0"+
    "\1\u0266\4\0\3\u0267\1\0\3\u0267\1\u029b\3\0\1\u0231"+
    "\3\0\1\u029c\3\0\4\u0267\7\0\32\u0267\1\0\3\u0267"+
    "\6\0\1\u0267\3\0\2\u029d\1\u029e\2\u029d\2\u029e\1\u029d"+
    "\1\u0268\3\0\10\u029d\1\u029e\1\u029d\1\u0268\1\0\7\u029d"+
    "\25\u029e\4\u029d\1\u029e\1\u029d\3\u029e\6\u029d\1\u029e\4\u029d"+
    "\1\u029f\1\u029e\1\u029f\1\u029d\2\u029e\1\u029f\1\u0268\3\0"+
    "\10\u029d\1\u029e\1\u029f\1\u0269\1\147\7\u029d\25\u029e\4\u029f"+
    "\1\u029e\1\u029d\3\u029e\6\u029d\1\u029e\3\u029d\10\0\1\u026a"+
    "\15\0\1\u026a\12\0\1\u02a0\5\0\1\u02a1\40\0\3\147"+
    "\1\0\3\147\1\u026a\13\0\2\147\1\u026b\1\147\7\0"+
    "\2\147\1\u02a2\5\147\1\u02a3\21\147\1\0\3\147\6\0"+
    "\1\147\5\0\1\u02a4\2\0\2\u02a4\1\0\1\u026c\13\0"+
    "\1\u02a4\1\0\1\u026c\10\0\25\u02a4\4\0\1\u02a4\1\0"+
    "\3\u02a4\6\0\1\u02a4\4\0\1\147\1\u02a4\1\147\1\0"+
    "\2\u02a4\1\147\1\u026c\13\0\1\u02a4\1\147\1\u026d\1\147"+
    "\7\0\25\u02a4\4\147\1\u02a4\1\0\3\u02a4\6\0\1\u02a4"+
    "\4\0\3\147\1\0\3\147\14\0\4\147\7\0\6\147"+
    "\1\u02a5\23\147\1\0\3\147\6\0\1\147\4\0\3\147"+
    "\1\0\3\147\14\0\4\147\7\0\7\147\1\u02a6\22\147"+
    "\1\0\3\147\6\0\1\147\4\0\3\147\1\0\3\147"+
    "\14\0\4\147\7\0\7\147\1\u02a7\22\147\1\0\3\147"+
    "\6\0\1\147\4\0\3\147\1\0\3\147\1\u02a8\13\0"+
    "\2\147\1\u02a9\1\147\7\0\32\147\1\0\3\147\6\0"+
    "\1\147\3\0\10\u023b\1\u0272\3\0\1\u0204\11\u023b\1\u0272"+
    "\1\0\57\u023b\1\0\3\u0273\1\0\3\u0273\1\u02aa\3\0"+
    "\1\u02ab\7\0\4\u0273\7\0\32\u0273\1\0\3\u0273\6\0"+
    "\1\u0273\4\0\3\u0274\1\0\3\u0274\1\u02ac\3\0\1\u02ad"+
    "\1\0\1\u02ae\1\0\1\u02af\3\0\2\u0274\1\u02b0\1\u0274"+
    "\7\0\32\u0274\1\0\3\u0274\6\0\1\u0274\4\0\3\u02b1"+
    "\1\0\4\u02b1\3\0\2\u02b1\2\0\10\u02b1\7\0\32\u02b1"+
    "\1\0\3\u02b1\6\0\1\u02b1\4\0\3\u0276\1\0\3\u0276"+
    "\1\u02ac\3\0\1\u02ad\1\0\1\u02ae\1\0\1\u02af\3\0"+
    "\2\u0276\1\u02b2\1\u0276\7\0\32\u0276\1\0\3\u0276\6\0"+
    "\1\u0276\4\0\3\u0277\1\0\4\u0277\3\0\2\u0277\2\0"+
    "\1\u0277\1\u02b3\6\u0277\7\0\32\u0277\1\0\3\u0277\6\0"+
    "\1\u0277\3\0\10\u0244\1\u0278\3\0\12\u0244\1\u0278\1\0"+
    "\60\u0244\3\u0247\1\u0244\3\u0247\1\u0278\3\0\10\u0244\2\u0247"+
    "\1\u0279\1\147\7\u0244\32\u0247\1\u0244\3\u0247\6\u0244\1\u0247"+
    "\3\u0244\46\0\1\u02b4\106\0\1\u02b5\77\0\1\u02b6\66\0"+
    "\1\u02b7\67\0\11\u024e\2\357\1\76\13\u024e\1\357\1\u024e"+
    "\1\u0280\1\u012e\1\u0281\1\u012e\1\u024e\1\u012e\54\u024e\1\u027f"+
    "\4\u024e\2\357\1\76\13\u024e\1\357\1\u01dd\1\u012e\1\357"+
    "\54\u024e\4\u0284\1\u02b8\4\u0284\2\357\1\76\13\u0284\1\357"+
    "\2\u0284\1\u0282\1\u012e\53\u0284\13\357\1\76\15\357\1\u012d"+
    "\1\u012e\1\u024f\1\233\1\357\1\233\50\357\3\u0282\1\u02b9"+
    "\1\u02ba\1\u0282\1\u02bb\1\u02bc\1\u0282\2\357\1\76\13\u0282"+
    "\1\357\1\u0282\1\u012d\1\u0284\1\u02bd\1\u016d\1\u0282\1\u016d"+
    "\25\u0282\1\u02b9\1\u0282\1\u02bc\1\u02b9\17\u0282\4\u012e\1\u016c"+
    "\4\u012e\2\357\1\76\13\u012e\1\357\2\u012e\1\357\1\u024e"+
    "\53\u012e\4\u016b\1\u0285\1\u016b\1\u0286\2\u016b\2\u01a3\1\u01a4"+
    "\13\u016b\1\u01a3\1\u01a5\57\u016b\3\u0287\3\u016b\1\u0287\1\u016b"+
    "\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\15\u016b\2\u0287\3\u016b"+
    "\1\u0287\1\u016b\1\u0287\1\u016b\1\u0287\2\u016b\1\u0287\1\u016b"+
    "\4\u0287\2\u016b\1\u0287\1\u016b\1\u0287\13\u016b\3\u02be\3\u016b"+
    "\1\u02be\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\15\u016b"+
    "\2\u02be\3\u016b\1\u02be\1\u016b\1\u02be\1\u016b\1\u02be\2\u016b"+
    "\1\u02be\1\u016b\4\u02be\2\u016b\1\u02be\1\u016b\1\u02be\12\u016b"+
    "\11\u0254\3\76\13\u0254\1\76\1\u0254\1\u0289\1\230\1\u028a"+
    "\1\230\1\u0254\1\230\54\u0254\1\u0288\4\u0254\3\76\13\u0254"+
    "\1\76\1\u01e1\1\u012e\1\76\54\u0254\4\u028d\1\u02bf\4\u028d"+
    "\3\0\13\u028d\1\0\2\u028d\1\u028b\1\230\53\u028d\31\76"+
    "\1\227\1\230\1\u0255\1\0\1\76\1\0\50\76\3\u028b"+
    "\1\u02c0\1\u02c1\1\u028b\1\u02c2\1\u02c3\1\u028b\3\76\13\u028b"+
    "\1\76\1\u028b\1\227\1\u028d\1\u02c4\1\235\1\u028b\1\235"+
    "\25\u028b\1\u02c0\1\u028b\1\u02c3\1\u02c0\17\u028b\4\230\1\234"+
    "\4\230\3\0\13\230\1\0\2\230\1\76\1\u0254\53\230"+
    "\4\232\1\u028e\1\232\1\u028f\21\232\1\356\57\232\3\u0290"+
    "\3\232\1\u0290\20\232\1\356\15\232\2\u0290\3\232\1\u0290"+
    "\1\232\1\u0290\1\232\1\u0290\2\232\1\u0290\1\232\4\u0290"+
    "\2\232\1\u0290\1\232\1\u0290\13\232\3\u02c5\3\232\1\u02c5"+
    "\20\232\1\356\15\232\2\u02c5\3\232\1\u02c5\1\232\1\u02c5"+
    "\1\232\1\u02c5\2\232\1\u02c5\1\232\4\u02c5\2\232\1\u02c5"+
    "\1\232\1\u02c5\12\232\11\256\2\125\1\126\13\256\1\125"+
    "\4\256\1\u02c6\52\256\11\u0292\2\u02c7\1\u02c8\13\u0292\1\u02c7"+
    "\57\u0292\11\256\2\125\1\126\13\256\1\125\15\256\1\u02c9"+
    "\41\256\2\u02ca\1\u02cb\2\u02ca\2\u02cb\1\u02ca\1\u0294\3\0"+
    "\10\u02ca\1\u02cb\1\u02ca\1\u0294\1\0\7\u02ca\25\u02cb\4\u02ca"+
    "\1\u02cb\1\u02ca\3\u02cb\6\u02ca\1\u02cb\4\u02ca\1\u02cc\1\u02cb"+
    "\1\u02cc\1\u02ca\2\u02cb\1\u02cc\1\u0294\3\0\10\u02ca\1\u02cb"+
    "\1\u02cc\1\u0295\1\147\7\u02ca\25\u02cb\4\u02cc\1\u02cb\1\u02ca"+
    "\3\u02cb\6\u02ca\1\u02cb\3\u02ca\1\0\3\147\1\0\3\147"+
    "\1\u02cd\13\0\2\147\1\u02cd\1\147\7\0\32\147\1\0"+
    "\3\147\6\0\1\147\13\0\1\u0297\3\0\2\u0298\10\0"+
    "\1\u0297\62\0\1\u0264\2\0\2\u0264\1\0\1\u0298\13\0"+
    "\1\u0264\1\0\1\u0298\10\0\25\u0264\4\0\1\u0264\1\0"+
    "\3\u0264\6\0\1\u0264\4\0\3\u01fa\1\0\3\u01fa\1\u0299"+
    "\3\0\1\u0230\1\u01fa\1\u01f8\1\0\1\u029a\1\u0230\4\u01fa"+
    "\1\u0299\1\u01fa\7\0\32\u01fa\1\0\3\u01fa\6\0\1\u01fa"+
    "\4\0\3\u02ce\1\0\4\u02ce\3\0\2\u02ce\2\0\1\u02ce"+
    "\1\u02cf\6\u02ce\7\0\32\u02ce\1\0\3\u02ce\6\0\1\u02ce"+
    "\13\0\1\u029b\3\0\1\u0231\3\0\1\u029c\5\0\1\u029b"+
    "\61\0\3\u02d0\1\0\4\u02d0\3\0\2\u02d0\2\0\10\u02d0"+
    "\7\0\32\u02d0\1\0\3\u02d0\6\0\1\u02d0\3\0\11\u029d"+
    "\3\0\13\u029d\1\0\60\u029d\3\u029e\1\u029d\3\u029e\1\u02d1"+
    "\3\0\2\u0268\6\u029d\3\u029e\1\u02d2\7\u029d\32\u029e\1\u029d"+
    "\3\u029e\6\u029d\1\u029e\4\u029d\3\u029f\1\u029d\3\u029f\1\u029d"+
    "\3\0\10\u029d\3\u029f\1\147\7\u029d\32\u029f\1\u029d\3\u029f"+
    "\6\u029d\1\u029f\3\u029d\43\0\1\u02d3\116\0\1\u02d4\34\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\4\147\1\u02d5"+
    "\25\147\1\0\3\147\6\0\1\147\4\0\3\147\1\0"+
    "\3\147\14\0\4\147\7\0\14\147\1\u02d6\15\147\1\0"+
    "\3\147\6\0\1\147\4\0\3\u02a4\1\0\3\u02a4\1\u02d7"+
    "\13\0\4\u02a4\7\0\32\u02a4\1\0\3\u02a4\6\0\1\u02a4"+
    "\4\0\3\147\1\0\3\147\1\u02d8\13\0\2\147\1\u02d9"+
    "\1\147\6\0\1\151\32\147\1\0\3\147\6\0\1\147"+
    "\3\0\2\u02da\1\u02db\2\u02da\2\u02db\1\u02da\1\u02a8\3\0"+
    "\10\u02da\1\u02db\1\u02da\1\u02a8\1\0\7\u02da\25\u02db\4\u02da"+
    "\1\u02db\1\u02da\3\u02db\6\u02da\1\u02db\4\u02da\1\u02dc\1\u02db"+
    "\1\u02dc\1\u02da\2\u02db\1\u02dc\1\u02a8\3\0\10\u02da\1\u02db"+
    "\1\u02dc\1\u02a9\1\147\7\u02da\25\u02db\4\u02dc\1\u02db\1\u02da"+
    "\3\u02db\6\u02da\1\u02db\3\u02da\10\0\1\u02aa\3\0\1\u02ab"+
    "\11\0\1\u02aa\62\0\1\u0273\2\0\2\u0273\1\0\1\u02ab"+
    "\13\0\1\u0273\1\0\1\u02ab\10\0\25\u0273\4\0\1\u0273"+
    "\1\0\3\u0273\6\0\1\u0273\13\0\1\u02ac\3\0\1\u02ad"+
    "\1\0\1\u02ae\1\0\1\u02af\5\0\1\u02ac\62\0\1\u0274"+
    "\2\0\2\u0274\1\0\1\u02ad\13\0\1\u0274\1\0\1\u02ad"+
    "\10\0\25\u0274\4\0\1\u0274\1\0\3\u0274\6\0\1\u0274"+
    "\13\0\1\u02ae\6\0\1\u02dd\6\0\1\u02ae\61\0\3\u02de"+
    "\1\0\4\u02de\3\0\2\u02de\2\0\10\u02de\7\0\32\u02de"+
    "\1\0\3\u02de\6\0\1\u02de\4\0\3\u02b1\1\0\4\u02b1"+
    "\3\0\2\u02b1\2\0\1\u02b1\1\u02df\6\u02b1\7\0\32\u02b1"+
    "\1\0\3\u02b1\6\0\1\u02b1\4\0\3\u0277\1\0\3\u0277"+
    "\1\u02b3\3\0\2\u0277\2\0\1\u0277\1\u02b3\4\u0277\1\u02b3"+
    "\1\u0277\7\0\32\u0277\1\0\3\u0277\6\0\1\u0277\110\0"+
    "\1\u02e0\106\0\1\u02e1\64\0\1\u02e2\23\0\3\u0284\1\u02e3"+
    "\1\u02e4\1\u0284\1\u02e5\1\u02e6\1\u0284\2\357\1\76\13\u0284"+
    "\1\357\34\u0284\1\u02e3\1\u0284\1\u02e6\1\u02e3\17\u0284\3\357"+
    "\1\u0282\3\357\1\u0282\3\357\1\76\15\357\1\u012d\1\u012e"+
    "\1\u024f\1\233\1\357\1\233\25\357\1\u0282\1\357\2\u0282"+
    "\23\357\1\u02e7\1\357\1\u02e8\4\357\1\76\15\357\1\u012d"+
    "\1\u012e\1\u024f\1\233\1\357\1\233\51\357\3\u02e9\3\357"+
    "\1\u02e9\3\357\1\76\15\357\1\u012d\1\u012e\1\u024f\1\233"+
    "\1\357\1\233\7\357\2\u02e9\3\357\1\u02e9\1\357\1\u02e9"+
    "\1\357\1\u02e9\2\357\1\u02e9\1\357\4\u02e9\2\357\1\u02e9"+
    "\1\357\1\u02e9\15\357\1\u02b9\3\357\1\u02b9\3\357\1\76"+
    "\15\357\1\u012d\1\u012e\1\u024f\1\233\1\357\1\233\25\357"+
    "\1\u02b9\1\357\2\u02b9\17\357\4\u016d\1\u016e\4\u016d\2\357"+
    "\1\76\13\u016d\1\357\3\u016d\1\357\53\u016d\1\u016b\3\u02ea"+
    "\3\u016b\1\u02ea\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5"+
    "\15\u016b\2\u02ea\3\u016b\1\u02ea\1\u016b\1\u02ea\1\u016b\1\u02ea"+
    "\2\u016b\1\u02ea\1\u016b\4\u02ea\2\u016b\1\u02ea\1\u016b\1\u02ea"+
    "\12\u016b\3\u028d\1\u02eb\1\u02ec\1\u028d\1\u02ed\1\u02ee\1\u028d"+
    "\3\0\13\u028d\1\0\34\u028d\1\u02eb\1\u028d\1\u02ee\1\u02eb"+
    "\17\u028d\3\76\1\u028b\3\76\1\u028b\21\76\1\227\1\230"+
    "\1\u0255\1\0\1\76\1\0\25\76\1\u028b\1\76\2\u028b"+
    "\23\76\1\u02ef\1\76\1\u02f0\22\76\1\227\1\230\1\u0255"+
    "\1\0\1\76\1\0\51\76\3\u02f1\3\76\1\u02f1\21\76"+
    "\1\227\1\230\1\u0255\1\0\1\76\1\0\7\76\2\u02f1"+
    "\3\76\1\u02f1\1\76\1\u02f1\1\76\1\u02f1\2\76\1\u02f1"+
    "\1\76\4\u02f1\2\76\1\u02f1\1\76\1\u02f1\15\76\1\u02c0"+
    "\3\76\1\u02c0\21\76\1\227\1\230\1\u0255\1\0\1\76"+
    "\1\0\25\76\1\u02c0\1\76\2\u02c0\17\76\4\235\1\236"+
    "\4\235\3\0\13\235\1\0\3\235\1\76\53\235\1\232"+
    "\3\u02f2\3\232\1\u02f2\20\232\1\356\15\232\2\u02f2\3\232"+
    "\1\u02f2\1\232\1\u02f2\1\232\1\u02f2\2\232\1\u02f2\1\232"+
    "\4\u02f2\2\232\1\u02f2\1\232\1\u02f2\12\232\11\u02c6\2\u02f3"+
    "\1\u02f4\13\u02c6\1\u02f3\57\u02c6\11\256\2\125\1\126\13\256"+
    "\1\125\4\256\1\u02f5\52\256\11\u02ca\3\0\13\u02ca\1\0"+
    "\60\u02ca\3\u02cb\1\u02ca\3\u02cb\1\u02f6\3\0\2\u0294\6\u02ca"+
    "\3\u02cb\1\u02f7\7\u02ca\32\u02cb\1\u02ca\3\u02cb\6\u02ca\1\u02cb"+
    "\4\u02ca\3\u02cc\1\u02ca\3\u02cc\1\u02ca\3\0\10\u02ca\3\u02cc"+
    "\1\147\7\u02ca\32\u02cc\1\u02ca\3\u02cc\6\u02ca\1\u02cc\3\u02ca"+
    "\13\u02cd\1\0\73\u02cd\1\0\3\u02ce\1\0\4\u02ce\3\0"+
    "\2\u02ce\2\0\1\u02ce\1\u02f8\6\u02ce\7\0\32\u02ce\1\0"+
    "\3\u02ce\6\0\1\u02ce\4\0\1\u02ce\1\u02f9\1\u02ce\1\0"+
    "\2\u02f9\1\u02ce\1\u02cf\3\0\2\u02ce\2\0\1\u02ce\1\u02f8"+
    "\2\u02ce\1\u02f9\1\u02ce\1\u02cf\1\u02ce\7\0\25\u02f9\4\u02ce"+
    "\1\u02f9\1\0\3\u02f9\6\0\1\u02f9\4\0\3\u02d0\1\0"+
    "\4\u02d0\3\0\2\u02d0\2\0\1\u02d0\1\u02fa\6\u02d0\7\0"+
    "\32\u02d0\1\0\3\u02d0\6\0\1\u02d0\3\0\10\u029d\1\u02d1"+
    "\3\0\2\u0268\10\u029d\1\u02d1\1\0\57\u029d\1\0\3\u02d2"+
    "\1\0\3\u02d2\1\u02fb\3\0\2\u02fc\6\0\4\u02d2\7\0"+
    "\32\u02d2\1\0\3\u02d2\6\0\1\u02d2\11\0\1\u02fd\151\0"+
    "\1\u02fe\36\0\3\147\1\0\1\147\1\u02ff\1\147\14\0"+
    "\4\147\7\0\32\147\1\0\3\147\6\0\1\147\4\0"+
    "\3\147\1\0\3\147\14\0\4\147\7\0\12\147\1\u0300"+
    "\17\147\1\0\3\147\6\0\1\147\13\0\1\u02d7\15\0"+
    "\1\u02d7\60\0\2\u0301\1\u0302\2\u0301\2\u0302\1\u0301\1\u02d8"+
    "\3\0\10\u0301\1\u0302\1\u0301\1\u02d8\1\0\7\u0301\25\u0302"+
    "\4\u0301\1\u0302\1\u0301\3\u0302\6\u0301\1\u0302\4\u0301\1\u0303"+
    "\1\u0302\1\u0303\1\u0301\2\u0302\1\u0303\1\u02d8\3\0\10\u0301"+
    "\1\u0302\1\u0303\1\u02d9\1\147\7\u0301\25\u0302\4\u0303\1\u0302"+
    "\1\u0301\3\u0302\6\u0301\1\u0302\3\u0301\11\u02da\3\0\13\u02da"+
    "\1\0\60\u02da\3\u02db\1\u02da\3\u02db\1\u0304\3\0\1\u02a8"+
    "\7\u02da\3\u02db\1\u0305\7\u02da\32\u02db\1\u02da\3\u02db\6\u02da"+
    "\1\u02db\4\u02da\3\u02dc\1\u02da\3\u02dc\1\u02da\3\0\10\u02da"+
    "\3\u02dc\1\147\7\u02da\32\u02dc\1\u02da\3\u02dc\6\u02da\1\u02dc"+
    "\3\u02da\10\0\1\u0306\5\0\1\u02ae\7\0\1\u0306\61\0"+
    "\3\u02de\1\0\4\u02de\3\0\2\u02de\2\0\1\u02de\1\u0307"+
    "\6\u02de\7\0\32\u02de\1\0\3\u02de\6\0\1\u02de\4\0"+
    "\1\u02b1\1\u0308\1\u02b1\1\0\2\u0308\1\u02b1\1\u02df\3\0"+
    "\2\u02b1\2\0\1\u02b1\1\u02df\2\u02b1\1\u0308\1\u02b1\1\u02df"+
    "\1\u02b1\7\0\25\u0308\4\u02b1\1\u0308\1\0\3\u0308\6\0"+
    "\1\u0308\22\0\1\u0309\106\0\1\u030a\126\0\1\u030b\47\0"+
    "\3\u012e\1\u0284\1\u016c\2\u012e\1\u0284\1\u012e\2\357\1\76"+
    "\13\u012e\1\357\2\u012e\1\357\1\u024e\30\u012e\1\u0284\1\u012e"+
    "\2\u0284\23\u012e\1\u030c\1\u012e\1\u030d\2\u012e\2\357\1\76"+
    "\13\u012e\1\357\2\u012e\1\357\1\u024e\54\u012e\3\u030e\1\u016c"+
    "\2\u012e\1\u030e\1\u012e\2\357\1\76\13\u012e\1\357\2\u012e"+
    "\1\357\1\u024e\12\u012e\2\u030e\3\u012e\1\u030e\1\u012e\1\u030e"+
    "\1\u012e\1\u030e\2\u012e\1\u030e\1\u012e\4\u030e\2\u012e\1\u030e"+
    "\1\u012e\1\u030e\15\u012e\1\u02e3\1\u016c\2\u012e\1\u02e3\1\u012e"+
    "\2\357\1\76\13\u012e\1\357\2\u012e\1\357\1\u024e\30\u012e"+
    "\1\u02e3\1\u012e\2\u02e3\17\u012e\4\357\1\u02e7\1\357\1\u02e8"+
    "\4\357\1\76\15\357\1\u012d\1\u012e\1\u012f\1\233\1\357"+
    "\1\233\51\357\3\u02e9\3\357\1\u02e9\3\357\1\76\15\357"+
    "\1\u012d\1\u012e\1\u012f\1\233\1\357\1\233\7\357\2\u02e9"+
    "\3\357\1\u02e9\1\357\1\u02e9\1\357\1\u02e9\2\357\1\u02e9"+
    "\1\357\4\u02e9\2\357\1\u02e9\1\357\1\u02e9\13\357\3\u030f"+
    "\3\357\1\u030f\3\357\1\76\15\357\1\u012d\1\u012e\1\u012f"+
    "\1\233\1\357\1\233\7\357\2\u030f\3\357\1\u030f\1\357"+
    "\1\u030f\1\357\1\u030f\2\357\1\u030f\1\357\4\u030f\2\357"+
    "\1\u030f\1\357\1\u030f\12\357\1\u016b\3\u0218\3\u016b\1\u0218"+
    "\1\u016b\2\u01a3\1\u01a4\13\u016b\1\u01a3\1\u01a5\15\u016b\2\u0218"+
    "\3\u016b\1\u0218\1\u016b\1\u0218\1\u016b\1\u0218\2\u016b\1\u0218"+
    "\1\u016b\4\u0218\2\u016b\1\u0218\1\u016b\1\u0218\12\u016b\3\230"+
    "\1\u028d\1\234\2\230\1\u028d\1\230\3\0\13\230\1\0"+
    "\2\230\1\76\1\u0254\30\230\1\u028d\1\230\2\u028d\23\230"+
    "\1\u0310\1\230\1\u0311\2\230\3\0\13\230\1\0\2\230"+
    "\1\76\1\u0254\54\230\3\u0312\1\234\2\230\1\u0312\1\230"+
    "\3\0\13\230\1\0\2\230\1\76\1\u0254\12\230\2\u0312"+
    "\3\230\1\u0312\1\230\1\u0312\1\230\1\u0312\2\230\1\u0312"+
    "\1\230\4\u0312\2\230\1\u0312\1\230\1\u0312\15\230\1\u02eb"+
    "\1\234\2\230\1\u02eb\1\230\3\0\13\230\1\0\2\230"+
    "\1\76\1\u0254\30\230\1\u02eb\1\230\2\u02eb\17\230\4\76"+
    "\1\u02ef\1\76\1\u02f0\22\76\1\227\1\230\1\231\1\0"+
    "\1\76\1\0\51\76\3\u02f1\3\76\1\u02f1\21\76\1\227"+
    "\1\230\1\231\1\0\1\76\1\0\7\76\2\u02f1\3\76"+
    "\1\u02f1\1\76\1\u02f1\1\76\1\u02f1\2\76\1\u02f1\1\76"+
    "\4\u02f1\2\76\1\u02f1\1\76\1\u02f1\13\76\3\u0313\3\76"+
    "\1\u0313\21\76\1\227\1\230\1\231\1\0\1\76\1\0"+
    "\7\76\2\u0313\3\76\1\u0313\1\76\1\u0313\1\76\1\u0313"+
    "\2\76\1\u0313\1\76\4\u0313\2\76\1\u0313\1\76\1\u0313"+
    "\12\76\1\232\3\u021f\3\232\1\u021f\20\232\1\356\15\232"+
    "\2\u021f\3\232\1\u021f\1\232\1\u021f\1\232\1\u021f\2\232"+
    "\1\u021f\1\232\4\u021f\2\232\1\u021f\1\232\1\u021f\12\232"+
    "\11\u02f5\2\u0314\1\u0315\13\u02f5\1\u0314\57\u02f5\10\u02ca\1\u02f6"+
    "\3\0\2\u0294\10\u02ca\1\u02f6\1\0\57\u02ca\1\0\3\u02f7"+
    "\1\0\3\u02f7\1\u0316\3\0\2\u0317\6\0\4\u02f7\7\0"+
    "\32\u02f7\1\0\3\u02f7\6\0\1\u02f7\4\0\1\u02ce\1\u02f9"+
    "\1\u02ce\1\0\2\u02f9\1\u02ce\1\u02f8\3\0\2\u02ce\1\u01f8"+
    "\1\0\1\u02ce\1\u02f8\2\u02ce\1\u02f9\1\u02ce\1\u02f8\1\u02ce"+
    "\7\0\25\u02f9\4\u02ce\1\u02f9\1\0\3\u02f9\6\0\1\u02f9"+
    "\4\0\3\u02f9\1\0\3\u02f9\1\u0318\3\0\1\u02cf\1\u02ce"+
    "\1\u01f8\1\0\1\u02ce\1\u02f8\2\u02ce\4\u02f9\7\0\32\u02f9"+
    "\1\0\3\u02f9\6\0\1\u02f9\4\0\3\u02d0\1\0\3\u02d0"+
    "\1\u02fa\3\0\2\u02d0\2\0\1\u02d0\1\u02fa\4\u02d0\1\u02fa"+
    "\1\u02d0\7\0\32\u02d0\1\0\3\u02d0\6\0\1\u02d0\13\0"+
    "\1\u02fb\3\0\2\u02fc\10\0\1\u02fb\62\0\1\u02d2\2\0"+
    "\2\u02d2\1\0\1\u02fc\13\0\1\u02d2\1\0\1\u02fc\10\0"+
    "\25\u02d2\4\0\1\u02d2\1\0\3\u02d2\6\0\1\u02d2\51\0"+
    "\1\u0319\114\0\1\u031a\33\0\3\147\1\0\3\147\14\0"+
    "\4\147\7\0\7\147\1\u031b\22\147\1\0\3\147\6\0"+
    "\1\147\4\0\3\147\1\0\3\147\14\0\4\147\7\0"+
    "\15\147\1\u031c\14\147\1\0\3\147\6\0\1\147\3\0"+
    "\11\u0301\3\0\13\u0301\1\0\60\u0301\3\u0302\1\u0301\3\u0302"+
    "\1\u031d\3\0\2\u02d8\6\u0301\3\u0302\1\u031e\7\u0301\32\u0302"+
    "\1\u0301\3\u0302\6\u0301\1\u0302\4\u0301\3\u0303\1\u0301\3\u0303"+
    "\1\u0301\3\0\10\u0301\3\u0303\1\147\7\u0301\32\u0303\1\u0301"+
    "\3\u0303\6\u0301\1\u0303\3\u0301\10\u02da\1\u0304\3\0\1\u02a8"+
    "\11\u02da\1\u0304\1\0\57\u02da\1\0\3\u0305\1\0\3\u0305"+
    "\1\u031f\3\0\1\u0320\7\0\4\u0305\7\0\32\u0305\1\0"+
    "\3\u0305\6\0\1\u0305\4\0\3\u02de\1\0\3\u02de\1\u0321"+
    "\3\0\2\u02de\1\u02ae\1\0\1\u02de\1\u0307\4\u02de\1\u0321"+
    "\1\u02de\7\0\32\u02de\1\0\3\u02de\6\0\1\u02de\4\0"+
    "\3\u0308\1\0\3\u0308\1\u0322\3\0\1\u02df\1\u02b1\1\u02ae"+
    "\1\0\1\u0323\1\u02df\2\u02b1\2\u0308\1\u0324\1\u0308\7\0"+
    "\32\u0308\1\0\3\u0308\6\0\1\u0308\44\0\1\u0325\45\0"+
    "\4\u012e\1\u0326\1\u012e\1\u030d\2\u012e\2\357\1\76\13\u012e"+
    "\1\357\60\u012e\3\u030e\1\u016c\2\u012e\1\u030e\1\u012e\2\357"+
    "\1\76\13\u012e\1\357\2\u012e\1\357\13\u012e\2\u030e\3\u012e"+
    "\1\u030e\1\u012e\1\u030e\1\u012e\1\u030e\2\u012e\1\u030e\1\u012e"+
    "\4\u030e\2\u012e\1\u030e\1\u012e\1\u030e\13\u012e\3\u0327\1\u016c"+
    "\2\u012e\1\u0327\1\u012e\2\357\1\76\13\u012e\1\357\2\u012e"+
    "\1\357\13\u012e\2\u0327\3\u012e\1\u0327\1\u012e\1\u0327\1\u012e"+
    "\1\u0327\2\u012e\1\u0327\1\u012e\4\u0327\2\u012e\1\u0327\1\u012e"+
    "\1\u0327\12\u012e\1\357\3\u0328\3\357\1\u0328\3\357\1\76"+
    "\15\357\1\u012d\1\u012e\1\u012f\1\233\1\357\1\233\7\357"+
    "\2\u0328\3\357\1\u0328\1\357\1\u0328\1\357\1\u0328\2\357"+
    "\1\u0328\1\357\4\u0328\2\357\1\u0328\1\357\1\u0328\12\357"+
    "\4\230\1\u0329\1\230\1\u0311\2\230\3\0\13\230\1\0"+
    "\60\230\3\u0312\1\234\2\230\1\u0312\1\230\3\0\13\230"+
    "\1\0\2\230\1\76\13\230\2\u0312\3\230\1\u0312\1\230"+
    "\1\u0312\1\230\1\u0312\2\230\1\u0312\1\230\4\u0312\2\230"+
    "\1\u0312\1\230\1\u0312\13\230\3\u032a\1\234\2\230\1\u032a"+
    "\1\230\3\0\13\230\1\0\2\230\1\76\13\230\2\u032a"+
    "\3\230\1\u032a\1\230\1\u032a\1\230\1\u032a\2\230\1\u032a"+
    "\1\230\4\u032a\2\230\1\u032a\1\230\1\u032a\12\230\1\76"+
    "\3\u032b\3\76\1\u032b\21\76\1\227\1\230\1\231\1\0"+
    "\1\76\1\0\7\76\2\u032b\3\76\1\u032b\1\76\1\u032b"+
    "\1\76\1\u032b\2\76\1\u032b\1\76\4\u032b\2\76\1\u032b"+
    "\1\76\1\u032b\12\76\10\0\1\u0316\3\0\2\u0317\10\0"+
    "\1\u0316\62\0\1\u02f7\2\0\2\u02f7\1\0\1\u0317\13\0"+
    "\1\u02f7\1\0\1\u0317\10\0\25\u02f7\4\0\1\u02f7\1\0"+
    "\3\u02f7\6\0\1\u02f7\4\0\3\u02ce\1\0\3\u02ce\1\u0318"+
    "\3\0\1\u02cf\1\u02ce\1\u01f8\1\0\1\u02ce\1\u02f8\4\u02ce"+
    "\1\u0318\1\u02ce\7\0\32\u02ce\1\0\3\u02ce\6\0\1\u02ce"+
    "\51\0\1\u032c\41\0\3\147\1\0\3\147\14\0\4\147"+
    "\7\0\7\147\1\u032d\22\147\1\0\3\147\6\0\1\147"+
    "\3\0\10\u0301\1\u031d\3\0\2\u02d8\10\u0301\1\u031d\1\0"+
    "\57\u0301\1\0\3\u031e\1\0\3\u031e\1\u032e\3\0\2\u032f"+
    "\6\0\4\u031e\7\0\32\u031e\1\0\3\u031e\6\0\1\u031e"+
    "\13\0\1\u031f\3\0\1\u0320\11\0\1\u031f\62\0\1\u0305"+
    "\2\0\2\u0305\1\0\1\u0320\13\0\1\u0305\1\0\1\u0320"+
    "\10\0\25\u0305\4\0\1\u0305\1\0\3\u0305\6\0\1\u0305"+
    "\4\0\3\u02b1\1\0\3\u02b1\1\u0322\3\0\1\u02df\1\u02b1"+
    "\1\u02ae\1\0\1\u0323\1\u02df\4\u02b1\1\u0322\1\u02b1\7\0"+
    "\32\u02b1\1\0\3\u02b1\6\0\1\u02b1\4\0\3\u0330\1\0"+
    "\4\u0330\3\0\2\u0330\2\0\1\u0330\1\u0331\6\u0330\7\0"+
    "\32\u0330\1\0\3\u0330\6\0\1\u0330\110\0\1\u0332\1\0"+
    "\4\u012e\1\u030c\1\u012e\1\u030d\2\u012e\2\357\1\76\13\u012e"+
    "\1\357\2\u012e\1\357\55\u012e\3\u0333\1\u016c\2\u012e\1\u0333"+
    "\1\u012e\2\357\1\76\13\u012e\1\357\2\u012e\1\357\13\u012e"+
    "\2\u0333\3\u012e\1\u0333\1\u012e\1\u0333\1\u012e\1\u0333\2\u012e"+
    "\1\u0333\1\u012e\4\u0333\2\u012e\1\u0333\1\u012e\1\u0333\12\u012e"+
    "\1\357\3\u0282\3\357\1\u0282\3\357\1\76\15\357\1\u012d"+
    "\1\u012e\1\u012f\1\233\1\357\1\233\7\357\2\u0282\3\357"+
    "\1\u0282\1\357\1\u0282\1\357\1\u0282\2\357\1\u0282\1\357"+
    "\4\u0282\2\357\1\u0282\1\357\1\u0282\12\357\4\230\1\u0310"+
    "\1\230\1\u0311\2\230\3\0\13\230\1\0\2\230\1\76"+
    "\55\230\3\u0334\1\234\2\230\1\u0334\1\230\3\0\13\230"+
    "\1\0\2\230\1\76\13\230\2\u0334\3\230\1\u0334\1\230"+
    "\1\u0334\1\230\1\u0334\2\230\1\u0334\1\230\4\u0334\2\230"+
    "\1\u0334\1\230\1\u0334\12\230\1\76\3\u028b\3\76\1\u028b"+
    "\21\76\1\227\1\230\1\231\1\0\1\76\1\0\7\76"+
    "\2\u028b\3\76\1\u028b\1\76\1\u028b\1\76\1\u028b\2\76"+
    "\1\u028b\1\76\4\u028b\2\76\1\u028b\1\76\1\u028b\12\76"+
    "\10\0\1\u032e\3\0\2\u032f\10\0\1\u032e\62\0\1\u031e"+
    "\2\0\2\u031e\1\0\1\u032f\13\0\1\u031e\1\0\1\u032f"+
    "\10\0\25\u031e\4\0\1\u031e\1\0\3\u031e\6\0\1\u031e"+
    "\4\0\3\u0330\1\0\4\u0330\3\0\2\u0330\2\0\1\u0330"+
    "\1\u0335\6\u0330\7\0\32\u0330\1\0\3\u0330\6\0\1\u0330"+
    "\4\0\1\u0330\1\u0336\1\u0330\1\0\2\u0336\1\u0330\1\u0331"+
    "\3\0\2\u0330\2\0\1\u0330\1\u0335\2\u0330\1\u0336\1\u0330"+
    "\1\u0331\1\u0330\7\0\25\u0336\4\u0330\1\u0336\1\0\3\u0336"+
    "\6\0\1\u0336\22\0\1\u0337\67\0\1\u012e\3\u0284\1\u016c"+
    "\2\u012e\1\u0284\1\u012e\2\357\1\76\13\u012e\1\357\2\u012e"+
    "\1\357\13\u012e\2\u0284\3\u012e\1\u0284\1\u012e\1\u0284\1\u012e"+
    "\1\u0284\2\u012e\1\u0284\1\u012e\4\u0284\2\u012e\1\u0284\1\u012e"+
    "\1\u0284\12\u012e\1\230\3\u028d\1\234\2\230\1\u028d\1\230"+
    "\3\0\13\230\1\0\2\230\1\76\13\230\2\u028d\3\230"+
    "\1\u028d\1\230\1\u028d\1\230\1\u028d\2\230\1\u028d\1\230"+
    "\4\u028d\2\230\1\u028d\1\230\1\u028d\12\230\1\0\1\u0330"+
    "\1\u0336\1\u0330\1\0\2\u0336\1\u0330\1\u0338\3\0\2\u0330"+
    "\1\u02ae\1\0\1\u0330\1\u0335\2\u0330\1\u0336\1\u0330\1\u0338"+
    "\1\u0330\7\0\25\u0336\4\u0330\1\u0336\1\0\3\u0336\6\0"+
    "\1\u0336\4\0\3\u0336\1\0\3\u0336\1\u0339\3\0\1\u0331"+
    "\1\u0330\1\u02ae\1\0\1\u0330\1\u0335\2\u0330\2\u0336\1\u033a"+
    "\1\u0336\7\0\32\u0336\1\0\3\u0336\6\0\1\u0336\4\0"+
    "\3\u0330\1\0\3\u0330\1\u0339\3\0\1\u0331\1\u0330\1\u02ae"+
    "\1\0\1\u0330\1\u0335\4\u0330\1\u0339\1\u0330\7\0\32\u0330"+
    "\1\0\3\u0330\6\0\1\u0330\3\0";

  private static int [] zzUnpackTrans() {
    int [] result = new int[48777];
    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[] = {
    "Unkown internal scanner error",
    "Error: could not match input",
    "Error: pushback value was too large"
  };

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

  private static final String ZZ_ATTRIBUTE_PACKED_0 =
    "\2\1\15\0\2\1\1\11\4\1\1\11\2\1\1\11"+
    "\15\1\2\11\4\1\1\11\2\1\2\11\1\1\1\11"+
    "\2\1\7\11\4\1\2\11\1\1\1\11\3\1\1\11"+
    "\1\1\1\11\3\1\2\11\1\1\1\11\3\1\1\11"+
    "\1\1\1\11\1\1\1\11\1\1\1\11\2\1\3\0"+
    "\2\11\1\0\1\11\1\0\2\1\1\0\15\1\3\0"+
    "\1\11\3\1\2\0\1\11\1\1\1\11\4\1\5\11"+
    "\1\0\1\1\2\0\1\11\1\1\3\0\1\11\1\1"+
    "\10\0\1\11\4\1\6\11\3\0\1\11\5\0\1\1"+
    "\1\0\1\1\1\11\1\1\1\11\2\1\1\11\35\1"+
    "\3\0\6\1\1\0\1\11\1\0\1\1\6\0\2\11"+
    "\1\0\1\1\4\0\1\11\1\0\1\1\1\11\1\1"+
    "\1\11\3\0\42\1\3\0\2\1\1\0\1\11\1\1"+
    "\14\0\1\11\1\1\3\0\46\1\2\11\1\0\2\1"+
    "\1\0\1\1\13\0\1\1\5\0\11\1\1\0\31\1"+
    "\1\11\2\1\7\0\2\1\10\0\1\1\1\11\3\0"+
    "\12\1\1\0\17\1\1\0\7\1\6\0\2\1\3\0"+
    "\1\1\6\0\1\1\1\11\4\0\13\1\4\0\22\1"+
    "\1\11\6\0\1\1\6\0\1\1\13\0\10\1\3\0"+
    "\15\1\1\0\2\1\1\0\5\1\4\0\2\11\2\1"+
    "\4\0\2\1\7\0\1\1\1\11\1\0\12\1\1\0"+
    "\1\1\1\0\7\1\2\0\1\1\1\0\2\1\2\0"+
    "\1\11\2\0\1\1\2\0\2\1\4\0\1\1\2\0"+
    "\2\1\7\0\4\1\1\0\1\1\1\0\1\1\1\0"+
    "\3\1\2\0\11\1\1\0\1\1\3\0\1\1\1\0"+
    "\2\1\3\0\1\11\1\0\4\1\3\0\4\1\3\0"+
    "\1\1\1\11\1\0\4\1\3\0\2\1\2\0\10\1"+
    "\12\0\3\1\5\0\3\1\1\0\1\1\1\11\1\0"+
    "\6\1\3\0\10\1\2\0\2\11\4\0\1\1\3\0"+
    "\2\1\1\11\1\1\1\0\1\1\1\11\1\0\5\1"+
    "\1\0\2\1\1\0\1\1\3\0\1\1\2\0\1\1"+
    "\1\11\2\1\10\0\1\11\3\1";

  private static int [] zzUnpackAttribute() {
    int [] result = new int[826];
    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 char zzBuffer[] = new char[ZZ_BUFFERSIZE];

  /** 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;

  /** number of newlines encountered up to the start of the matched text */
  private int yyline;

  /** the number of characters up to the start of the matched text */
  private int yychar;

  /**
   * the number of characters from the last newline up to the start of the
   * matched text
   */
  private int yycolumn;

  /**
   * zzAtBOL == true <=> the scanner is currently at the beginning of a line
   */
  private boolean zzAtBOL = true;

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

  /** denotes if the user-EOF-code has already been executed */
  private boolean zzEOFDone;

  /** the stack of open (nested) input streams to read from */
  private java.util.Stack zzStreams = new java.util.Stack();

  /**
   * inner class used to store info for nested
   * input streams
   */
  private static final class ZzFlexStreamInfo {
    java.io.Reader zzReader;
    int zzEndRead;
    int zzStartRead;
    int zzCurrentPos;
    int zzMarkedPos;
    int yyline;
    int yycolumn;
    char [] zzBuffer;
    boolean zzAtEOF;
    boolean zzEOFDone;

    /** sets all values stored in this class */
    ZzFlexStreamInfo(java.io.Reader zzReader, int zzEndRead, int zzStartRead,
                  int zzCurrentPos, int zzMarkedPos,
                  char [] zzBuffer, boolean zzAtEOF, int yyline, int yycolumn) {
      this.zzReader      = zzReader;
      this.zzEndRead     = zzEndRead;
      this.zzStartRead   = zzStartRead;
      this.zzCurrentPos  = zzCurrentPos;
      this.zzMarkedPos   = zzMarkedPos;
      this.zzBuffer      = zzBuffer;
      this.zzAtEOF       = zzAtEOF;
      this.zzEOFDone     = zzEOFDone;
      this.yyline         = yyline;
      this.yycolumn       = yycolumn;
    }
  }

  /* user code: */
  int balance = 0;
  int commentbalance = 0;
  int action_line = 0;
  int bufferSize = 16384;

  File file;
  Stack files = new Stack();

  StringBuffer userCode   = new StringBuffer();
 
  String classCode;
  String initCode;  
  String initThrow;
  String eofCode;
  String eofThrow;
  String lexThrow;
  String eofVal;
  String scanErrorException;
  String cupSymbol = "sym";

  StringBuffer actionText = new StringBuffer();
  StringBuffer string     = new StringBuffer();
 
  boolean charCount;
  boolean lineCount;
  boolean columnCount;
  boolean cupCompatible; 
  boolean cupDebug;
  boolean isInteger;
  boolean isIntWrap;
  boolean isYYEOF;
  boolean notUnix;
  boolean isPublic;
  boolean isFinal;
  boolean isAbstract;
  boolean bolUsed;
  boolean standalone;
  boolean debugOption;
  boolean useRowMap = Options.gen_method == Options.PACK || Options.gen_method == Options.TABLE;
  boolean packed = Options.gen_method == Options.PACK;
  boolean caseless;
  boolean inclusive_states;
  boolean eofclose;
   
  String isImplementing;
  String isExtending;
  String className = "Yylex";
  String functionName;
  String tokenType;
  String visibility = "public";
   
  Vector /* String */ ctorArgs = new Vector();
  Vector /* String */ ctorTypes = new Vector();
   
  LexicalStates states = new LexicalStates();

  Vector actions = new Vector();
 
  private int nextState;

  boolean macroDefinition;

  Timer t = new Timer();

  public int currentLine() {
    return yyline;
  }   

  public void setFile(File file) {
    this.file = file;
  }

  private Symbol symbol(int type, Object value) {
    return new Symbol(type, yyline, yycolumn, value);
  }

  private Symbol symbol(int type) {
    return new Symbol(type, yyline, yycolumn);
  }
  
  // updates line and column count to the beginning of the first
  // non whitespace character in yytext, but leaves yyline+yycolumn
  // untouched
  private Symbol symbol_countUpdate(int type, Object value) {
     int lc = yyline;
     int cc = yycolumn;
     String text = yytext();

     for (int i=0; i < text.length(); i++) {
      char c = text.charAt(i);

      if (c != '\n' && c != '\r' && c != ' ' && c != '\t' )
        return new Symbol(type, lc, cc, value);

      if (c == '\n') {
        lc++;
        cc = 0;
      }
      else
        cc++;
    }
  
    return new Symbol(type, yyline, yycolumn, value);
  }

  private String makeMacroIdent() {
    String matched = yytext().trim();
    return matched.substring(1, matched.length()-1).trim();
  }

  public static String conc(Object a, Object b) {
    if (a == null && b == null) return null;
    if (a == null) return b.toString();
    if (b == null) return a.toString();
   
    return a.toString()+b.toString();
  }

  public static String concExc(Object a, Object b) {
    if (a == null && b == null) return null;
    if (a == null) return b.toString();
    if (b == null) return a.toString();
   
    return a.toString()+", "+b.toString();
  }


  /**
   * Creates a new scanner
   * There is also a java.io.InputStream version of this constructor.
   *
   * @param   in  the java.io.Reader to read input from.
   */
  public LexScan(java.io.Reader in) {
    states.insert("YYINITIAL", true);
    this.zzReader = in;
  }

  /**
   * Creates a new scanner.
   * There is also java.io.Reader version of this constructor.
   *
   * @param   in  the java.io.Inputstream to read input from.
   */
  public LexScan(java.io.InputStream in) {
    this(new java.io.InputStreamReader(in));
  }

  /**
   * Unpacks the compressed character translation table.
   *
   * @param packed   the packed character translation table
   * @return         the unpacked character translation table
   */
  private static char [] zzUnpackCMap(String packed) {
    char [] map = new char[0x10000];
    int i = 0/* index in packed string  */
    int j = 0/* index in unpacked array */
    while (i < 1788) {
      int  count = packed.charAt(i++);
      char value = packed.charAt(i++);
      do map[j++] = value; while (--count > 0);
    }
    return map;
  }


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

    /* first: make room (if you can) */
    if (zzStartRead > 0) {
      System.arraycopy(zzBuffer, zzStartRead,
                       zzBuffer, 0,
                       zzEndRead-zzStartRead);

      /* translate stored positions */
      zzEndRead-= zzStartRead;
      zzCurrentPos-= zzStartRead;
      zzMarkedPos-= zzStartRead;
      zzStartRead = 0;
    }

    /* is the buffer big enough? */
    if (zzCurrentPos >= zzBuffer.length) {
      /* if not: blow it up */
      char newBuffer[] = new char[zzCurrentPos*2];
      System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);
      zzBuffer = newBuffer;
    }

    /* finally: fill the buffer with new input */
    int numRead = zzReader.read(zzBuffer, zzEndRead,
                                            zzBuffer.length-zzEndRead);

    if (numRead > 0) {
      zzEndRead+= numRead;
      return false;
    }
    // unlikely but not impossible: read 0 characters, but not at end of stream
    if (numRead == 0) {
      int c = zzReader.read();
      if (c == -1) {
        return true;
      } else {
        zzBuffer[zzEndRead++] = (char) c;
        return false;
      }    
    }
   
    // numRead < 0)
    return true;
  }

   
  /**
   * Closes the input stream.
   */
  public final void yyclose() throws java.io.IOException {
    zzAtEOF = true;            /* indicate end of file */
    zzEndRead = zzStartRead;  /* invalidate buffer    */

    if (zzReader != null)
      zzReader.close();
  }


  /**
   * Stores the current input stream on a stack, and
   * reads from a new stream. Lexical state, line,
   * char, and column counting remain untouched.
   *
   * The current input stream can be restored with
   * yypopstream (usually in an <<EOF>> action).
   *
   * @param reader the new input stream to read from
   *
   * @see #yypopStream()
   */
  public final void yypushStream(java.io.Reader reader) {
    zzStreams.push(
      new ZzFlexStreamInfo(zzReader, zzEndRead, zzStartRead, zzCurrentPos,
                        zzMarkedPos, zzBuffer, zzAtEOF,
                        yyline, yycolumn)
    );
    zzAtEOF  = false;
    zzBuffer = new char[ZZ_BUFFERSIZE];
    zzReader = reader;
    zzEndRead = zzStartRead = 0;
    zzCurrentPos = zzMarkedPos = 0;
    yyline = yycolumn = 0;
  }
   

  /**
   * Closes the current input stream and continues to
   * read from the one on top of the stream stack.
   *
   * @throws java.util.EmptyStackException
   *         if there is no further stream to read from.
   *
   * @throws java.io.IOException
   *         if there was an error in closing the stream.
   *
   * @see #yypushStream(java.io.Reader)
   */
  public final void yypopStream() throws java.io.IOException {
    zzReader.close();
    ZzFlexStreamInfo s = (ZzFlexStreamInfo) zzStreams.pop();
    zzBuffer      = s.zzBuffer;
    zzReader      = s.zzReader;
    zzEndRead     = s.zzEndRead;
    zzStartRead   = s.zzStartRead;
    zzCurrentPos  = s.zzCurrentPos;
    zzMarkedPos   = s.zzMarkedPos ;
    zzAtEOF       = s.zzAtEOF;
    zzEOFDone     = s.zzEOFDone;
    yyline         = s.yyline;
    yycolumn       = s.yycolumn;
  }


  /**
   * Returns true iff there are still streams left
   * to read from on the stream stack.
   */
  public final boolean yymoreStreams() {
    return !zzStreams.isEmpty();
  }


  /**
   * Resets the scanner to read from a new input stream.
   * Does not close the old reader.
   *
   * All internal variables are reset, the old input stream
   * <b>cannot</b> be reused (internal buffer is discarded and lost).
   * Lexical state is set to <tt>ZZ_INITIAL</tt>.
   *
   * @param reader   the new input stream
   *
   * @see #yypushStream(java.io.Reader)
   * @see #yypopStream()
   */
  public final void yyreset(java.io.Reader reader) {
    zzReader = reader;
    zzAtBOL  = true;
    zzAtEOF  = false;
    zzEOFDone = false;
    zzEndRead = zzStartRead = 0;
    zzCurrentPos = zzMarkedPos = 0;
    yyline = yychar = yycolumn = 0;
    zzLexicalState = YYINITIAL;
  }


  /**
   * 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 String yytext() {
    return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead );
  }


  /**
   * Returns the character at position <tt>pos</tt> 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[zzStartRead+pos];
  }


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


  /**
   * Reports an error that occured 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;
  }


  /**
   * Contains user EOF-code, which will be executed exactly once,
   * when the end of file is reached
   */
  private void zzDoEOF() throws java.io.IOException {
    if (!zzEOFDone) {
      zzEOFDone = true;
      yyclose();
    }
  }


  /**
   * 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 Symbol next_token() throws java.io.IOException {
    int zzInput;
    int zzAction;

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

    while (true) {
      // cached fields:
      int zzCurrentPosL;
      int zzMarkedPosL = zzMarkedPos;
      int zzEndReadL = zzEndRead;
      char [] zzBufferL = zzBuffer;
      char [] zzCMapL = ZZ_CMAP;

      boolean zzR = false;
      for (zzCurrentPosL = zzStartRead; zzCurrentPosL < zzMarkedPosL;
                                                             zzCurrentPosL++) {
        switch (zzBufferL[zzCurrentPosL]) {
        case '\u000B':
        case '\u000C':
        case '\u0085':
        case '\u2028':
        case '\u2029':
          yyline++;
          yycolumn = 0;
          zzR = false;
          break;
        case '\r':
          yyline++;
          yycolumn = 0;
          zzR = true;
          break;
        case '\n':
          if (zzR)
            zzR = false;
          else {
            yyline++;
            yycolumn = 0;
          }
          break;
        default:
          zzR = false;
          yycolumn++;
        }
      }

      if (zzR) {
        // peek one character ahead if it is \n (if we have counted one line too much)
        boolean zzPeek;
        if (zzMarkedPosL < zzEndReadL)
          zzPeek = zzBufferL[zzMarkedPosL] == '\n';
        else if (zzAtEOF)
          zzPeek = false;
        else {
          boolean eof = zzRefill();
          zzEndReadL = zzEndRead;
          zzMarkedPosL = zzMarkedPos;
          zzBufferL = zzBuffer;
          if (eof)
            zzPeek = false;
          else
            zzPeek = zzBufferL[zzMarkedPosL] == '\n';
        }
        if (zzPeek) yyline--;
      }
      if (zzMarkedPosL > zzStartRead) {
        switch (zzBufferL[zzMarkedPosL-1]) {
        case '\n':
        case '\u000B':
        case '\u000C':
        case '\u0085':
        case '\u2028':
        case '\u2029':
          zzAtBOL = true;
          break;
        case '\r':
          if (zzMarkedPosL < zzEndReadL)
            zzAtBOL = zzBufferL[zzMarkedPosL] != '\n';
          else if (zzAtEOF)
            zzAtBOL = false;
          else {
            boolean eof = zzRefill();
            zzMarkedPosL = zzMarkedPos;
            zzEndReadL = zzEndRead;
            zzBufferL = zzBuffer;
            if (eof)
              zzAtBOL = false;
            else
              zzAtBOL = zzBufferL[zzMarkedPosL] != '\n';
          }
          break;
        default:
          zzAtBOL = false;
        }
      }
      zzAction = -1;

      zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
 
      if (zzAtBOL)
        zzState = ZZ_LEXSTATE[zzLexicalState+1];
      else
        zzState = ZZ_LEXSTATE[zzLexicalState];


      zzForAction: {
        while (true) {
   
          if (zzCurrentPosL < zzEndReadL)
            zzInput = zzBufferL[zzCurrentPosL++];
          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 = zzBufferL[zzCurrentPosL++];
            }
          }
          int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
          if (zzNext == -1) break zzForAction;
          zzState = zzNext;

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

        }
      }

      // store back cached position
      zzMarkedPos = zzMarkedPosL;

      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
        case 118:
          { cupDebug = true;
          }
        case 147: break;
        case 122:
          { actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(EOFRULE);
          }
        case 148: break;
        case 113:
          { File f = new File(yytext().substring(9).trim());
                                if ( !f.canRead() )
                                  throw new ScannerException(file,ErrorMessages.NOT_READABLE, yyline);
                                // check for cycle
                                if (files.search(f) > 0)
                                  throw new ScannerException(file,ErrorMessages.FILE_CYCLE, yyline);
                                try {
                                  yypushStream( new FileReader(f) );
                                  files.push(file);
                                  file = f;
                                  Out.println("Including \""+file+"\"");
                                }
                                catch (FileNotFoundException e) {
                                  throw new ScannerException(file,ErrorMessages.NOT_READABLE, yyline);
                                }
          }
        case 149: break;
        case 88:
          { return symbol(FULL);
          }
        case 150: break;
        case 92:
          { return symbol(ASCII);
          }
        case 151: break;
        case 21:
          { string.setLength(0); nextState = REGEXP; yybegin(STRING_CONTENT);
          }
        case 152: break;
        case 142:
          { return symbol(UPPERCLASS);
          }
        case 153: break;
        case 34:
          { return symbol(COMMA);
          }
        case 154: break;
        case 61:
          { return symbol(CHAR,new Character('\f'));
          }
        case 155: break;
        case 111:
          { throw new ScannerException(file,ErrorMessages.NO_BUFFER_SIZE, yyline);
          }
        case 156: break;
        case 104:
          { throw new ScannerException(file,ErrorMessages.EOF_WO_ACTION);
          }
        case 157: break;
        case 143:
          { return symbol(LOWERCLASS);
          }
        case 158: break;
        case 72:
          { string.append('\r');
          }
        case 159: break;
        case 43:
          { return symbol(HAT);
          }
        case 160: break;
        case 48:
          { yybegin(MACROS); ctorArgs.add(yytext().trim());
          }
        case 161: break;
        case 1:
          { return symbol(EOF);
          }
        case 162: break;
        case 59:
          { return symbol(CHAR,new Character('\t'));
          }
        case 163: break;
        case 145:
          { eofclose = false;
          }
        case 164: break;
        case 103:
          { isPublic = true;
          }
        case 165: break;
        case 112:
          { actionText.setLength(0); yybegin(JAVA_CODE);
                                Symbol s = symbol_countUpdate(EOFRULE, null);
                                action_line = s.left+1;
                                return s;
          }
        case 166: break;
        case 40:
          { balance++; return symbol(OPENCLASS);
          }
        case 167: break;
        case 11:
          { yybegin(REGEXP);
          }
        case 168: break;
        case 12:
          { yybegin(STATES); return symbol_countUpdate(LESSTHAN, null);
          }
        case 169: break;
        case 68:
          { string.append( (char) Integer.parseInt(yytext().substring(1,yytext().length()), 8));
          }
        case 170: break;
        case 62:
          { return symbol(CHAR,new Character('\b'));
          }
        case 171: break;
        case 39:
          { throw new ScannerException(file,ErrorMessages.EOL_IN_CHARCLASS,yyline,yycolumn);
          }
        case 172: break;
        case 5:
          { states.insert(yytext(),inclusive_states);
          }
        case 173: break;
        case 70:
          { string.append('\n');
          }
        case 174: break;
        case 10:
          { yybegin(REGEXP); return symbol(EQUALS);
          }
        case 175: break;
        case 146:
          { return symbol(JLETTERDIGITCLASS);
          }
        case 176: break;
        case 19:
          { return symbol(STAR);
          }
        case 177: break;
        case 42:
          { string.setLength(0); nextState = CHARCLASS; yybegin(STRING_CONTENT);
          }
        case 178: break;
        case 116:
          { isAbstract = true;
          }
        case 179: break;
        case 75:
          { yypushback(1); yycolumn--; return symbol(CHAR, new Character(yytext().charAt(0)));
          }
        case 180: break;
        case 114:
          { lexThrow = concExc(lexThrow,yytext().substring(8).trim());
          }
        case 181: break;
        case 109:
          { throw new ScannerException(file,ErrorMessages.QUIL_CUPSYM, yyline);
          }
        case 182: break;
        case 93:
          { packed = false; useRowMap = true;
          }
        case 183: break;
        case 87:
          { cupCompatible = true
                                isImplementing = concExc(isImplementing, "java_cup.runtime.Scanner");
                                if (functionName == null)
                                  functionName = "next_token";
                                if (tokenType == null)
                                  tokenType = "java_cup.runtime.Symbol";
                                if (eofVal == null)
                                  eofVal = "return new java_cup.runtime.Symbol("+cupSymbol+".EOF);";
                                if (!Options.jlex) eofclose = true;
          }
        case 184: break;
        case 30:
          { bolUsed = true; return symbol(HAT);
          }
        case 185: break;
        case 4:
          { throw new ScannerException(file,ErrorMessages.UNEXPECTED_CHAR, yyline, yycolumn);
          }
        case 186: break;
        case 35:
          { yybegin(REGEXP); return symbol(MORETHAN);
          }
        case 187: break;
        case 100:
          { packed = false; useRowMap = false;
          }
        case 188: break;
        case 119:
          { caseless = true;
          }
        case 189: break;
        case 38:
          { yybegin(nextState); return symbol(STRING, string.toString());
          }
        case 190: break;
        case 76:
          { return symbol(REPEAT, new Integer(yytext().substring(1).trim()));
          }
        case 191: break;
        case 13:
          { return symbol_countUpdate(RBRACE, null);
          }
        case 192: break;
        case 139:
          { scanErrorException = yytext().substring(11).trim();
          }
        case 193: break;
        case 141:
          { lexThrow = concExc(lexThrow,yytext().substring(12).trim());
          }
        case 194: break;
        case 84:
          { return symbol(MACROUSE, yytext().substring(1,yytext().length()-1));
          }
        case 195: break;
        case 2:
          { /* ignore */
          }
        case 196: break;
        case 127:
          { throw new ScannerException(file,ErrorMessages.QUIL_INITTHROW, yyline);
          }
        case 197: break;
        case 47:
          { throw new ScannerException(file,ErrorMessages.CTOR_ARG,yyline,yycolumn);
          }
        case 198: break;
        case 108:
          { throw new ScannerException(file,ErrorMessages.QUIL_THROW, yyline);
          }
        case 199: break;
        case 31:
          { actionText.append(yytext());
          }
        case 200: break;
        case 83:
          { string.append( (char) Integer.parseInt(yytext().substring(2,yytext().length()), 16));
          }
        case 201: break;
        case 107:
          { notUnix = true;
          }
        case 202: break;
        case 89:
          { lineCount = true;
          }
        case 203: break;
        case 136:
          { initThrow = concExc(initThrow,yytext().substring(11).trim());
          }
        case 204: break;
        case 131:
          { standalone = true; isInteger = true;
          }
        case 205: break;
        case 52:
          { nextState = MACROS; yybegin(COMMENT);
          }
        case 206: break;
        case 25:
          { return symbol(TILDE);
          }
        case 207: break;
        case 37:
          { throw new ScannerException(file,ErrorMessages.UNTERMINATED_STR, yyline, yycolumn);
          }
        case 208: break;
        case 110:
          { className = yytext().substring(7).trim();
          }
        case 209: break;
        case 9:
          { throw new ScannerException(file,ErrorMessages.UNKNOWN_OPTION, yyline, yycolumn);
          }
        case 210: break;
        case 55:
          { nextState = REGEXPSTART; yybegin(COMMENT);
          }
        case 211: break;
        case 16:
          { return symbol(POINT);
          }
        case 212: break;
        case 73:
          { string.append('\f');
          }
        case 213: break;
        case 65:
          { yybegin(REPEATEXP); return symbol(REPEAT, new Integer(yytext().trim().substring(1).trim()));
          }
        case 214: break;
        case 80:
          { return symbol(CHAR, new Character( (char) Integer.parseInt(yytext().substring(2,yytext().length()), 16)));
          }
        case 215: break;
        case 140:
          { initThrow = concExc(initThrow,string);  yybegin(MACROS);
          }
        case 216: break;
        case 135:
          { eofThrow = concExc(eofThrow,string); yybegin(MACROS);
          }
        case 217: break;
        case 71:
          { string.append('\t');
          }
        case 218: break;
        case 67:
          { string.append(yytext().charAt(1));
          }
        case 219: break;
        case 7:
          { yybegin(MACROS);
          }
        case 220: break;
        case 98:
          { eofCode = conc(eofCode,string); yybegin(MACROS);
          }
        case 221: break;
        case 56:
          { return symbol(CHAR, new Character(yytext().charAt(1)));
          }
        case 222: break;
        case 28:
          { return symbol(PLUS);
          }
        case 223: break;
        case 101:
          { columnCount = true;
          }
        case 224: break;
        case 124:
          { isExtending = yytext().substring(9).trim();
          }
        case 225: break;
        case 123:
          { eofVal = string.toString(); yybegin(MACROS);
          }
        case 226: break;
        case 36:
          { string.append(yytext());
          }
        case 227: break;
        case 97:
          { return symbol(UNICODE);
          }
        case 228: break;
        case 74:
          { string.append('\b');
          }
        case 229: break;
        case 24:
          { return symbol(BANG);
          }
        case 230: break;
        case 132:
          { throw new ScannerException(file,ErrorMessages.QUIL_SCANERROR, yyline);
          }
        case 231: break;
        case 91:
          { packed = true; useRowMap = true;
          }
        case 232: break;
        case 26:
          { return symbol(OPENBRACKET);
          }
        case 233: break;
        case 60:
          { return symbol(CHAR,new Character('\r'));
          }
        case 234: break;
        case 94:
          { isFinal = true;
          }
        case 235: break;
        case 27:
          { return symbol(CLOSEBRACKET);
          }
        case 236: break;
        case 86:
          { isInteger = true;
          }
        case 237: break;
        case 20:
          { return symbol(LOOKAHEAD);
          }
        case 238: break;
        case 51:
          { commentbalance++;
          }
        case 239: break;
        case 49:
          { t.start();
                             yybegin(MACROS);
                             macroDefinition = true;
                             return symbol(USERCODE,userCode);
          }
        case 240: break;
        case 44:
          { return symbol(DASH);
          }
        case 241: break;
        case 138:
          { throw new ScannerException(file,ErrorMessages.QUIL_YYLEXTHROW, yyline);
          }
        case 242: break;
        case 96:
          { debugOption = true;
          }
        case 243: break;
        case 64:
          { nextState = REGEXP; yybegin(COMMENT);
          }
        case 244: break;
        case 32:
          { if (balance > 0) {
                 balance--;    
                 actionText.append('}');
               }
               else {
                 yybegin(REGEXPSTART);
                 Action a = new Action(actionText.toString(), action_line);
                 actions.addElement(a);
                 return symbol(ACTION, a);
               }
          }
        case 245: break;
        case 29:
          { return symbol(DOLLAR);
          }
        case 246: break;
        case 17:
          { yybegin(CHARCLASS); return symbol(OPENCLASS);
          }
        case 247: break;
        case 105:
          { initCode = conc(initCode,string);    yybegin(MACROS);
          }
        case 248: break;
        case 69:
          { string.append('\"');
          }
        case 249: break;
        case 137:
          { isImplementing = concExc(isImplementing, yytext().substring(12).trim());
          }
        case 250: break;
        case 126:
          { return symbol(LETTERCLASS);
          }
        case 251: break;
        case 102:
          { isInteger = true;
                                if (eofVal == null)
                                  eofVal = "return 0;";
                                eofclose = true;
          }
        case 252: break;
        case 41:
          { if (balance > 0) balance--; else yybegin(REGEXP); return symbol(CLOSECLASS);
          }
        case 253: break;
        case 77:
          { string.setLength(0); yybegin(COPY);
          }
        case 254: break;
        case 8:
          { return symbol(IDENT, yytext());
          }
        case 255: break;
        case 121:
          { return symbol(DIGITCLASS);
          }
        case 256: break;
        case 144:
          { lexThrow = concExc(lexThrow,string); yybegin(MACROS);
          }
        case 257: break;
        case 53:
          { Out.warning(ErrorMessages.NOT_AT_BOL, yyline); yypushback(1);
          }
        case 258: break;
        case 23:
          { return symbol(BAR);
          }
        case 259: break;
        case 45:
          { throw new ScannerException(file,ErrorMessages.UNEXPECTED_NL, yyline, yycolumn);
          }
        case 260: break;
        case 117:
          { cupSymbol = yytext().substring(8).trim();
                                if (cupCompatible) Out.warning(ErrorMessages.CUPSYM_AFTER_CUP, yyline);
          }
        case 261: break;
        case 58:
          { return symbol(CHAR,new Character('\n'));
          }
        case 262: break;
        case 95:
          { isYYEOF = true;
          }
        case 263: break;
        case 14:
          { return symbol(CHAR, new Character(yytext().charAt(0)));
          }
        case 264: break;
        case 99:
          { tokenType = yytext().substring(6).trim();
          }
        case 265: break;
        case 33:
          { balance++; actionText.append('{');
          }
        case 266: break;
        case 128:
          { eofThrow = concExc(eofThrow,yytext().substring(10).trim());
          }
        case 267: break;
        case 63:
          { actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(REGEXPEND);
          }
        case 268: break;
        case 81:
          { return symbol_countUpdate(MACROUSE, makeMacroIdent());
          }
        case 269: break;
        case 15:
          { if (macroDefinition) { yybegin(MACROS); } return symbol(REGEXPEND);
          }
        case 270: break;
        case 125:
          { throw new ScannerException(file,ErrorMessages.QUIL_EOFTHROW, yyline);
          }
        case 271: break;
        case 90:
          { charCount = true;
          }
        case 272: break;
        case 130:
          { visibility = "private"; Skeleton.makePrivate();
          }
        case 273: break;
        case 134:
          { return symbol(JLETTERCLASS);
          }
        case 274: break;
        case 22:
          { yybegin(REGEXPSTART); return symbol(LBRACE);
          }
        case 275: break;
        case 115:
          { eofclose = true;
          }
        case 276: break;
        case 66:
          // lookahead expression with fixed lookahead length
          yypushback(1);
          { if (macroDefinition) {
                              yybegin(EATWSPNL);
                              return symbol(BAR);
                            }
                            else {
                              yybegin(REGEXPSTART);
                              return symbol(NOACTION);
                            }
          }
        case 277: break;
        case 82:
          // lookahead expression with fixed lookahead length
          yypushback(2);
          { if (macroDefinition) {
                              yybegin(EATWSPNL);
                              return symbol(BAR);
                            }
                            else {
                              yybegin(REGEXPSTART);
                              return symbol(NOACTION);
                            }
          }
        case 278: break;
        case 46:
          { yybegin(REGEXP); return symbol(RBRACE);
          }
        case 279: break;
        case 78:
          { inclusive_states = false; yybegin(STATELIST);
          }
        case 280: break;
        case 120:
          { bufferSize = Integer.parseInt(yytext().substring(8).trim());
          }
        case 281: break;
        case 106:
          { isIntWrap = true;
          }
        case 282: break;
        case 133:
          { yybegin(CTOR_ARG); ctorTypes.add(yytext().substring(8).trim());
          }
        case 283: break;
        case 3:
          { userCode.append(yytext());
          }
        case 284: break;
        case 54:
          { macroDefinition = false; yybegin(REGEXPSTART); return symbol(DELIMITER);
          }
        case 285: break;
        case 129:
          { functionName = yytext().substring(10).trim();
          }
        case 286: break;
        case 85:
          { classCode = conc(classCode,string);  yybegin(MACROS);
          }
        case 287: break;
        case 18:
          { return symbol(QUESTION);
          }
        case 288: break;
        case 50:
          { if (commentbalance > 0)
                commentbalance--;
              else
                yybegin(nextState);
          }
        case 289: break;
        case 79:
          { inclusive_states = true; yybegin(STATELIST);
          }
        case 290: break;
        case 57:
          { return symbol(CHAR, new Character( (char) Integer.parseInt(yytext().substring(1,yytext().length()), 8)));
          }
        case 291: break;
        case 6:
          {
          }
        case 292: break;
        default:
          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
            zzAtEOF = true;
            zzDoEOF();
            switch (zzLexicalState) {
            case STRING_CONTENT: {
              throw new ScannerException(file,ErrorMessages.EOF_IN_STRING);
            }
            case 827: break;
            case MACROS: {
              if ( yymoreStreams() ) {
                                  file = (File) files.pop();
                                  yypopStream();
                                }
                                else
                                  throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS);
            }
            case 828: break;
            case STATELIST: {
              throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS);
            }
            case 829: break;
            case CHARCLASS: {
              throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP);
            }
            case 830: break;
            case JAVA_CODE: {
              throw new ScannerException(file,ErrorMessages.EOF_IN_ACTION, action_line-1);
            }
            case 831: break;
            case REPEATEXP: {
              throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP);
            }
            case 832: break;
            case COMMENT: {
              throw new ScannerException(file,ErrorMessages.EOF_IN_COMMENT);
            }
            case 833: break;
            case STATES: {
              throw new ScannerException(file,ErrorMessages.EOF_IN_STATES);
            }
            case 834: break;
            case COPY: {
              throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS);
            }
            case 835: break;
            default:
              {
                if ( yymoreStreams() ) {
             file = (File) files.pop();
             yypopStream();
           }
           else
             return symbol(EOF);
              }
            }
          }
          else {
            zzScanError(ZZ_NO_MATCH);
          }
      }
    }
  }

  /**
   * Converts an int token code into the name of the
   * token by reflection on the cup symbol class/interface sym
   *
   * This code was contributed by Karl Meissner <meissnersd@yahoo.com>
   */
  private String getTokenName(int token) {
    try {
      java.lang.reflect.Field [] classFields = sym.class.getFields();
      for (int i = 0; i < classFields.length; i++) {
        if (classFields[i].getInt(null) == token) {
          return classFields[i].getName();
        }
      }
    } catch (Exception e) {
      e.printStackTrace(System.err);
    }

    return "UNKNOWN TOKEN";
  }

  /**
   * Same as next_token but also prints the token to standard out
   * for debugging.
   *
   * This code was contributed by Karl Meissner <meissnersd@yahoo.com>
   */
  public Symbol debug_next_token() throws java.io.IOException {
    java_cup.runtime.Symbol s = next_token();
    System.out.println( "line:" + (yyline+1) + " col:" + (yycolumn+1) + " --"+ yytext() + "--" + getTokenName(s.sym) + "--");
    return s;
  }

  /**
   * Runs the scanner on input files.
   *
   * This main method is the debugging routine for the scanner.
   * It prints debugging information about each returned token to
   * System.out until the end of file is reached, or an error occured.
   *
   * @param argv   the command line, contains the filenames to run
   *               the scanner on.
   */
  public static void main(String argv[]) {
    if (argv.length == 0) {
      System.out.println("Usage : java LexScan <inputfile>");
    }
    else {
      for (int i = 0; i < argv.length; i++) {
        LexScan scanner = null;
        try {
          scanner = new LexScan( new java.io.FileReader(argv[i]) );
          while ( !scanner.zzAtEOF ) scanner.debug_next_token();
        }
        catch (java.io.FileNotFoundException e) {
          System.out.println("File not found : \""+argv[i]+"\"");
        }
        catch (java.io.IOException e) {
          System.out.println("IO error scanning file \""+argv[i]+"\"");
          System.out.println(e);
        }
        catch (Exception e) {
          System.out.println("Unexpected exception:");
          e.printStackTrace();
        }
      }
    }
  }


}
TOP

Related Classes of JFlex.LexScan$ZzFlexStreamInfo

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.