/* The following code was generated by JFlex 1.4.1 on 2/16/08 4:44 PM */

/* HTMLLexer1.java is a generated file.  You probably want to
 * edit HTMLLexer1.lex to make changes.  Use JFlex to generate it.
 * To generate HTMLLexer1.java
 * Install <a href="http://jflex.de/">JFlex</a> v1.3.2 or later.
 * Once JFlex is in your classpath run<br>
 * <code>java JFlex.Main HTMLLexer1.lex</code><br>
 * You will then have a file called HTMLLexer1.java
 */

/*
 * This file is part of a <a href="http://ostermiller.org/syntax/">syntax
 * highlighting</a> package.
 * Copyright (C) 1999-2002 Stephen Ostermiller
 * http://ostermiller.org/contact.pl?regarding=Syntax+Highlighting
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * 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.
 *
 * See COPYING.TXT for details.
 */

package com.Ostermiller.Syntax.Lexer;

import java.io.*;

/** 
 * HTMLLexer1 is a html 2.0 lexer.  Created with JFlex.  An example of how it is used:
 *  <CODE>
 *  <PRE>
 *  HTMLLexer1 shredder = new HTMLLexer1(System.in);
 *  HTMLToken1 t;
 *  while ((t = shredder.getNextToken()) != null){
 *      System.out.println(t);
 *  }
 *  </PRE>
 *  </CODE>
 *
 * <P>
 * There are two HTML Lexers that come with this package.  HTMLLexer is a basic HTML lexer
 * that knows the difference between tags, text, and comments.  HTMLLexer1 knows something
 * about the structure of tags and can return names and values from name value pairs.  It 
 * also knows about text elements such as words and character references.  The two are
 * similar but which you should use depends on your purpose.  In my opinion the HTMLLexer1
 * is much better for syntax highlighting.
 * 
 * @see HTMLLexer
 * @see HTMLToken1
 */ 


public class HTMLLexer1 implements Lexer {

  /** 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 START_SCRIPT_VALUE = 9;
  public static final int PRE_TAG = 11;
  public static final int TAG = 4;
  public static final int COMMENT_DEF = 21;
  public static final int TEXTAREA = 18;
  public static final int START_PRE_EQUAL = 12;
  public static final int START_END_TAG = 2;
  public static final int START_PRE_VALUE = 13;
  public static final int TEXTAREA_TAG = 15;
  public static final int SCRIPT = 10;
  public static final int START_TEXTAREA_EQUAL = 16;
  public static final int START_TEXTAREA_VALUE = 17;
  public static final int TAG_END = 19;
  public static final int START_EQUAL = 5;
  public static final int FINISH_END_TAG = 22;
  public static final int START_TAG = 1;
  public static final int SCRIPT_TAG = 7;
  public static final int START_VALUE = 6;
  public static final int PRE = 14;
  public static final int START_DOC_TAG = 3;
  public static final int YYINITIAL = 0;
  public static final int START_SCRIPT_EQUAL = 8;
  public static final int DOCTYPE = 20;

  /** 
   * Translates characters to character classes
   */
  private static final char [] ZZ_CMAP = {
     0,  0,  0,  0,  0,  0,  0,  0,  0,  5,  4,  0,  5,  4,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     4, 64, 60,  6,  0, 67, 57, 61,  0,  0,  0,  0,  0, 68, 62, 63, 
     1, 32, 30, 31, 33,  1,  1,  1,  1,  1,  0, 58, 59, 69, 65, 66, 
     0, 34, 46, 36, 48, 35,  3, 47, 39, 37,  2, 50, 51, 52, 40, 41, 
    53,  2, 44, 54, 38, 42,  2,  2,  7, 43, 49,  0,  0,  0,  0,  0, 
     0, 24,  9, 15, 20, 13, 26, 29, 28, 12, 56, 50, 16, 25,  8, 18, 
    11, 27, 21, 10, 17, 19, 23, 55, 14, 22, 45,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
  };

  /** 
   * Translates DFA states to action switch labels.
   */
  private static final int [] ZZ_ACTION = zzUnpackAction();

  private static final String ZZ_ACTION_PACKED_0 =
    "\1\1\11\0\1\2\3\0\1\3\3\0\1\3\1\0"+
    "\1\4\2\0\1\1\1\5\1\6\1\7\1\10\4\11"+
    "\1\10\1\12\3\13\1\14\1\13\1\15\1\16\1\17"+
    "\1\20\2\10\1\21\1\22\1\23\1\24\1\25\1\26"+
    "\2\14\1\24\2\2\1\27\1\30\1\31\1\32\1\33"+
    "\2\14\2\3\1\34\1\35\1\36\1\37\1\40\1\41"+
    "\2\14\2\3\1\4\2\14\3\13\53\6\1\42\1\43"+
    "\2\0\3\11\1\5\4\0\1\20\1\21\1\0\1\26"+
    "\2\0\2\2\1\27\1\0\1\33\2\0\1\3\1\34"+
    "\1\40\1\0\1\41\2\0\1\3\2\0\1\44\1\6"+
    "\1\44\22\6\1\44\52\6\1\44\42\6\2\0\1\11"+
    "\1\45\1\11\4\0\2\2\1\0\1\3\1\0\1\3"+
    "\2\44\2\6\1\44\10\6\2\44\71\6\1\46\2\11"+
    "\2\0\1\47\1\0\2\2\1\0\1\3\1\0\1\3"+
    "\27\6\2\11\3\0\1\2\1\0\1\2\1\0\1\3"+
    "\1\0\1\3\2\44\2\6\1\50\1\11\3\0\1\2"+
    "\2\0\1\51\1\0\1\3\1\6\1\11\1\0\1\52"+
    "\1\0\1\2\2\0\1\3\1\53\1\0\1\2\2\0"+
    "\1\3\3\0\1\3\2\0\1\3\6\0\1\2\1\0";

  private static int [] zzUnpackAction() {
    int [] result = new int[438];
    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\106\0\214\0\322\0\u0118\0\u015e\0\u01a4\0\u01ea"+
    "\0\u0230\0\u0276\0\u02bc\0\u0302\0\u0348\0\u038e\0\u03d4\0\u041a"+
    "\0\u0460\0\u04a6\0\u04ec\0\u0532\0\u0578\0\u05be\0\u0604\0\u064a"+
    "\0\u0690\0\u06d6\0\u071c\0\u0762\0\u07a8\0\u07ee\0\u0834\0\u087a"+
    "\0\u08c0\0\u0906\0\u0762\0\u094c\0\u0992\0\u08c0\0\u09d8\0\u0a1e"+
    "\0\u08c0\0\u08c0\0\u0a64\0\u0aaa\0\u0af0\0\u0b36\0\u0b7c\0\u08c0"+
    "\0\u0bc2\0\u08c0\0\u0c08\0\u0c4e\0\u0c94\0\u08c0\0\u0cda\0\u0d20"+
    "\0\u0d66\0\u0dac\0\u08c0\0\u08c0\0\u0df2\0\u0e38\0\u0e7e\0\u0ec4"+
    "\0\u0f0a\0\u0f50\0\u0f96\0\u08c0\0\u08c0\0\u0fdc\0\u1022\0\u1068"+
    "\0\u10ae\0\u10f4\0\u113a\0\u1180\0\u11c6\0\u120c\0\u08c0\0\u0690"+
    "\0\u1252\0\u1298\0\u12de\0\u1324\0\u136a\0\u13b0\0\u13f6\0\u143c"+
    "\0\u1482\0\u14c8\0\u150e\0\u1554\0\u159a\0\u15e0\0\u1626\0\u166c"+
    "\0\u16b2\0\u16f8\0\u173e\0\u1784\0\u17ca\0\u1810\0\u1856\0\u189c"+
    "\0\u18e2\0\u1928\0\u196e\0\u19b4\0\u19fa\0\u1a40\0\u1a86\0\u1acc"+
    "\0\u1b12\0\u1b58\0\u1b9e\0\u1be4\0\u1c2a\0\u1c70\0\u1cb6\0\u1cfc"+
    "\0\u1d42\0\u1d88\0\u1dce\0\u1e14\0\u08c0\0\u08c0\0\u1e5a\0\u1ea0"+
    "\0\u1ee6\0\u1f2c\0\u1f72\0\u094c\0\u1fb8\0\u1ffe\0\u2044\0\u208a"+
    "\0\u08c0\0\u08c0\0\u0c4e\0\u08c0\0\u0c94\0\u20d0\0\u2116\0\u215c"+
    "\0\u08c0\0\u0e38\0\u08c0\0\u0e7e\0\u21a2\0\u21e8\0\u08c0\0\u08c0"+
    "\0\u1068\0\u08c0\0\u10ae\0\u222e\0\u2274\0\u11c6\0\u120c\0\u22ba"+
    "\0\u2300\0\u2346\0\u238c\0\u23d2\0\u2418\0\u245e\0\u24a4\0\u24ea"+
    "\0\u2530\0\u2576\0\u25bc\0\u2602\0\u2648\0\u268e\0\u26d4\0\u271a"+
    "\0\u2760\0\u27a6\0\u27ec\0\u2832\0\u2878\0\u28be\0\u2904\0\u294a"+
    "\0\u2990\0\u29d6\0\u2a1c\0\u2a62\0\u2aa8\0\u2aee\0\u2b34\0\u2b7a"+
    "\0\u2bc0\0\u2c06\0\u2c4c\0\u2c92\0\u2cd8\0\u2d1e\0\u2d64\0\u2daa"+
    "\0\u2df0\0\u2e36\0\u2e7c\0\u2ec2\0\u2f08\0\u2f4e\0\u2f94\0\u2fda"+
    "\0\u3020\0\u3066\0\u30ac\0\u30f2\0\u3138\0\u317e\0\u31c4\0\u320a"+
    "\0\u3250\0\u3296\0\u32dc\0\u3322\0\u3368\0\u33ae\0\u33f4\0\u343a"+
    "\0\u3480\0\u34c6\0\u350c\0\u3552\0\u3598\0\u35de\0\u3624\0\u366a"+
    "\0\u36b0\0\u36f6\0\u373c\0\u3782\0\u37c8\0\u380e\0\u3854\0\u389a"+
    "\0\u38e0\0\u3926\0\u396c\0\u39b2\0\u39f8\0\u3a3e\0\u3a84\0\u3aca"+
    "\0\u3b10\0\u3b56\0\u3b9c\0\u3be2\0\u3c28\0\u3c6e\0\u3cb4\0\u3cfa"+
    "\0\u3d40\0\u3d86\0\u3dcc\0\u3e12\0\u3e58\0\u07a8\0\u3e9e\0\u3ee4"+
    "\0\u3f2a\0\u3f70\0\u3fb6\0\u3ffc\0\u4042\0\u4088\0\u40ce\0\u4114"+
    "\0\u415a\0\u08c0\0\u41a0\0\u41e6\0\u422c\0\u4272\0\u42b8\0\u42fe"+
    "\0\u4344\0\u438a\0\u43d0\0\u4416\0\u445c\0\u44a2\0\u44e8\0\u452e"+
    "\0\u4574\0\u45ba\0\u4600\0\u4646\0\u468c\0\u46d2\0\u4718\0\u475e"+
    "\0\u47a4\0\u47ea\0\u4830\0\u4876\0\u48bc\0\u4902\0\u4948\0\u498e"+
    "\0\u49d4\0\u4a1a\0\u4a60\0\u4aa6\0\u4aec\0\u4b32\0\u4b78\0\u4bbe"+
    "\0\u4c04\0\u4c4a\0\u4c90\0\u4cd6\0\u4d1c\0\u4d62\0\u4da8\0\u4dee"+
    "\0\u4e34\0\u4e7a\0\u4ec0\0\u4f06\0\u4f4c\0\u4f92\0\u4fd8\0\u501e"+
    "\0\u5064\0\u50aa\0\u50f0\0\u5136\0\u517c\0\u51c2\0\u5208\0\u524e"+
    "\0\u5294\0\u52da\0\u5320\0\u5366\0\u53ac\0\u53f2\0\u5438\0\u547e"+
    "\0\u54c4\0\u08c0\0\u550a\0\u5550\0\u5596\0\u55dc\0\u08c0\0\u5622"+
    "\0\u5668\0\u56ae\0\u56f4\0\u573a\0\u5780\0\u57c6\0\u580c\0\u5852"+
    "\0\u5898\0\u58de\0\u5924\0\u596a\0\u59b0\0\u59f6\0\u5a3c\0\u5a82"+
    "\0\u5ac8\0\u5b0e\0\u5b54\0\u5b9a\0\u5be0\0\u5c26\0\u5c6c\0\u5cb2"+
    "\0\u5cf8\0\u5d3e\0\u5d84\0\u5dca\0\u5e10\0\u5e56\0\u5e9c\0\u5ee2"+
    "\0\u5f28\0\u5f6e\0\u5fb4\0\u5ffa\0\u6040\0\u6086\0\u60cc\0\u6112"+
    "\0\u6158\0\u619e\0\u61e4\0\u622a\0\u6270\0\u07a8\0\u62b6\0\u62fc"+
    "\0\u6342\0\u6388\0\u63ce\0\u6414\0\u645a\0\u08c0\0\u64a0\0\u64e6"+
    "\0\u652c\0\u6572\0\u65b8\0\u08c0\0\u65fe\0\u6644\0\u668a\0\u66d0"+
    "\0\u6716\0\u07a8\0\u675c\0\u67a2\0\u67e8\0\u682e\0\u6874\0\u68ba"+
    "\0\u6900\0\u6946\0\u698c\0\u69d2\0\u6a18\0\u6a5e\0\u6aa4\0\u6aea"+
    "\0\u6b30\0\u6b76\0\u6bbc\0\u6c02\0\u08c0\0\u6c48";

  private static int [] zzUnpackRowMap() {
    int [] result = new int[438];
    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 =
    "\4\30\2\31\63\30\1\32\1\30\1\33\12\30\2\34"+
    "\2\35\3\34\3\35\1\36\1\37\5\35\1\40\14\35"+
    "\4\34\4\35\1\40\16\35\1\37\1\36\2\35\10\34"+
    "\1\41\6\34\2\42\1\31\2\34\27\42\4\34\27\42"+
    "\10\34\1\41\4\34\4\43\1\44\17\43\1\45\33\43"+
    "\1\45\20\43\1\46\2\43\1\47\1\43\1\34\3\50"+
    "\1\31\2\34\62\50\5\34\1\50\2\34\1\51\2\34"+
    "\1\50\2\34\3\50\1\31\2\34\62\50\5\34\1\50"+
    "\2\34\1\51\2\34\1\50\1\52\1\34\3\53\1\31"+
    "\2\34\62\53\3\34\1\54\1\55\1\53\2\34\1\41"+
    "\2\34\1\53\1\34\1\56\3\57\1\31\2\56\62\57"+
    "\5\56\1\57\2\56\1\60\2\56\1\57\1\56\1\61"+
    "\3\57\1\31\2\61\62\57\5\61\1\57\2\61\1\60"+
    "\2\61\1\57\1\62\1\56\3\63\1\31\2\56\62\63"+
    "\3\56\1\64\1\65\1\63\2\56\1\66\2\56\1\63"+
    "\1\56\73\67\1\70\12\67\1\71\3\72\1\31\2\71"+
    "\62\72\5\71\1\72\2\71\1\73\2\71\1\72\2\71"+
    "\3\72\1\31\2\71\62\72\5\71\1\72\2\71\1\73"+
    "\2\71\1\72\1\74\1\71\3\75\1\31\2\71\62\75"+
    "\3\71\1\76\1\77\1\75\2\71\1\46\2\71\1\75"+
    "\1\71\73\100\1\101\12\100\1\102\3\103\1\31\2\102"+
    "\62\103\5\102\1\103\2\102\1\104\2\102\1\103\2\102"+
    "\3\103\1\31\2\102\62\103\5\102\1\103\2\102\1\104"+
    "\2\102\1\103\1\105\1\106\3\107\1\31\2\106\62\107"+
    "\3\106\1\110\1\111\1\107\2\106\1\46\2\106\1\107"+
    "\1\106\73\112\1\113\12\112\106\46\74\114\1\115\1\116"+
    "\3\114\1\51\4\114\4\117\2\120\73\117\1\51\2\117"+
    "\1\121\1\117\4\34\1\31\74\34\1\51\4\34\4\30"+
    "\2\0\63\30\1\0\1\30\1\0\12\30\4\0\2\31"+
    "\100\0\4\122\1\0\1\122\1\123\1\124\1\125\1\126"+
    "\1\127\1\130\1\131\1\132\1\124\1\133\1\134\1\135"+
    "\1\136\1\137\1\140\1\141\1\142\1\122\1\143\1\144"+
    "\1\145\1\146\1\147\1\150\4\122\1\151\1\152\1\153"+
    "\1\154\1\155\1\122\1\156\1\157\1\160\1\161\1\162"+
    "\1\163\1\164\1\165\1\166\1\164\1\167\1\170\1\171"+
    "\1\172\1\173\1\174\1\122\3\0\12\122\77\0\1\175"+
    "\1\176\1\0\1\177\1\200\2\0\101\34\1\41\4\34"+
    "\1\0\3\35\3\0\62\35\5\0\1\35\5\0\1\35"+
    "\2\0\3\35\3\0\10\35\1\201\24\35\1\201\24\35"+
    "\5\0\1\35\5\0\1\35\2\0\3\35\3\0\16\35"+
    "\1\202\26\35\1\202\14\35\5\0\1\35\5\0\1\35"+
    "\2\0\3\35\3\0\6\35\1\203\25\35\1\203\25\35"+
    "\5\0\1\35\5\0\1\35\110\0\3\42\3\0\62\42"+
    "\5\0\1\42\5\0\1\42\1\0\4\34\1\204\17\34"+
    "\1\205\33\34\1\205\20\34\1\0\2\34\1\206\23\34"+
    "\1\207\26\34\1\207\27\34\1\0\105\34\1\0\2\34"+
    "\1\210\1\34\1\0\3\50\3\0\62\50\5\0\1\50"+
    "\5\0\1\50\2\0\3\53\3\0\62\53\5\0\1\53"+
    "\5\0\1\53\1\0\74\54\1\211\11\54\75\55\1\211"+
    "\10\55\101\56\1\212\4\56\1\0\3\57\3\0\62\57"+
    "\5\0\1\57\5\0\1\57\1\0\101\61\1\66\4\61"+
    "\1\0\3\63\3\0\62\63\5\0\1\63\5\0\1\63"+
    "\1\0\74\213\1\214\11\213\75\215\1\214\10\215\73\67"+
    "\1\216\105\67\1\216\3\67\1\217\1\220\5\67\101\71"+
    "\1\221\4\71\1\0\3\72\3\0\62\72\5\0\1\72"+
    "\5\0\1\72\2\0\3\75\3\0\62\75\5\0\1\75"+
    "\5\0\1\75\1\0\74\222\1\223\11\222\75\224\1\223"+
    "\10\224\73\100\1\225\105\100\1\225\3\100\1\226\6\100"+
    "\101\102\1\227\4\102\1\0\3\103\3\0\62\103\5\0"+
    "\1\103\5\0\1\103\1\0\101\106\1\230\4\106\1\0"+
    "\3\107\3\0\62\107\5\0\1\107\5\0\1\107\1\0"+
    "\74\231\1\232\11\231\75\233\1\232\10\233\73\112\1\234"+
    "\105\112\1\234\3\112\1\235\6\112\74\114\1\236\1\237"+
    "\3\114\1\0\4\114\74\236\1\114\11\236\75\237\1\114"+
    "\10\237\104\0\1\210\1\0\4\122\1\0\64\122\3\0"+
    "\13\122\1\240\2\122\1\0\2\122\1\241\6\122\1\241"+
    "\17\122\4\240\27\122\3\0\16\122\1\0\7\122\1\242"+
    "\54\122\3\0\16\122\1\0\4\122\1\243\1\244\1\122"+
    "\2\242\3\122\1\245\1\246\1\242\1\247\3\122\1\250"+
    "\40\122\3\0\16\122\1\0\10\122\1\251\5\122\1\252"+
    "\1\253\1\254\43\122\3\0\16\122\1\0\4\122\1\253"+
    "\1\122\1\255\1\256\1\257\1\122\1\260\3\122\1\261"+
    "\1\262\7\122\1\263\20\122\1\264\13\122\3\0\16\122"+
    "\1\0\5\122\1\124\1\122\1\265\1\266\2\122\1\267"+
    "\1\122\1\270\2\122\1\271\2\122\1\272\3\122\1\124"+
    "\34\122\3\0\16\122\1\0\3\122\1\273\1\122\1\274"+
    "\2\122\1\275\1\122\1\276\2\122\1\251\1\277\4\122"+
    "\1\300\1\301\1\122\1\302\1\122\1\303\33\122\3\0"+
    "\16\122\1\0\3\122\1\243\2\122\1\304\2\122\1\305"+
    "\1\276\1\122\1\306\1\122\1\307\4\122\1\300\1\310"+
    "\1\122\1\311\1\122\1\303\33\122\3\0\16\122\1\0"+
    "\7\122\1\312\1\313\1\122\1\314\1\315\1\122\1\316"+
    "\1\317\1\122\1\320\2\122\1\321\3\122\1\124\34\122"+
    "\3\0\16\122\1\0\5\122\1\322\2\122\1\242\1\122"+
    "\1\323\1\122\1\242\1\324\1\122\1\253\1\325\2\122"+
    "\1\326\1\122\1\327\7\122\1\330\26\122\3\0\16\122"+
    "\1\0\7\122\1\331\10\122\1\332\2\122\1\171\3\122"+
    "\1\333\34\122\3\0\16\122\1\0\5\122\1\334\1\335"+
    "\1\122\1\264\1\122\1\276\1\336\1\337\1\122\1\277"+
    "\1\122\1\340\2\122\1\300\1\341\3\122\1\303\33\122"+
    "\3\0\16\122\1\0\6\122\1\342\3\122\1\276\3\122"+
    "\1\277\4\122\1\343\1\344\3\122\1\303\4\122\1\330"+
    "\26\122\3\0\16\122\1\0\7\122\1\345\1\346\12\122"+
    "\1\347\11\122\1\330\26\122\3\0\16\122\1\0\5\122"+
    "\1\322\2\122\1\350\1\122\1\323\1\325\3\122\1\253"+
    "\3\122\1\351\1\122\1\327\1\122\1\352\5\122\1\330"+
    "\26\122\3\0\16\122\1\0\10\122\1\353\5\122\1\277"+
    "\4\122\1\300\40\122\3\0\16\122\1\0\3\122\1\354"+
    "\1\122\1\355\2\122\1\264\1\122\1\356\1\357\1\245"+
    "\1\122\1\277\1\122\1\360\2\122\1\300\1\321\3\122"+
    "\1\303\33\122\3\0\16\122\1\0\7\122\1\361\6\122"+
    "\1\242\1\247\3\122\1\362\40\122\3\0\16\122\1\0"+
    "\3\122\1\363\11\122\1\364\2\122\1\365\43\122\3\0"+
    "\16\122\1\0\16\122\1\262\45\122\3\0\16\122\1\0"+
    "\10\122\1\366\12\122\1\330\11\122\1\330\26\122\3\0"+
    "\16\122\1\0\10\122\1\242\3\122\1\242\6\122\1\367"+
    "\40\122\3\0\16\122\1\0\12\122\1\276\1\357\1\245"+
    "\1\122\1\277\1\122\1\360\2\122\1\300\4\122\1\303"+
    "\5\122\1\264\25\122\3\0\16\122\1\0\6\122\1\304"+
    "\3\122\1\276\1\122\1\370\1\122\1\277\4\122\1\300"+
    "\4\122\1\303\10\122\1\371\22\122\3\0\16\122\1\0"+
    "\12\122\1\314\14\122\1\124\34\122\3\0\16\122\1\0"+
    "\12\122\1\276\2\122\1\251\1\277\4\122\1\300\4\122"+
    "\1\303\33\122\3\0\16\122\1\0\23\122\1\171\3\122"+
    "\1\164\12\122\1\372\21\122\3\0\16\122\1\0\14\122"+
    "\1\245\1\122\1\242\45\122\3\0\16\122\1\0\5\122"+
    "\1\334\4\122\1\276\1\122\1\245\1\122\1\277\4\122"+
    "\1\300\1\341\3\122\1\303\5\122\1\264\25\122\3\0"+
    "\16\122\1\0\6\122\1\304\3\122\1\276\3\122\1\277"+
    "\4\122\1\300\4\122\1\303\33\122\3\0\16\122\1\0"+
    "\16\122\1\277\4\122\1\300\40\122\3\0\16\122\1\0"+
    "\27\122\1\352\34\122\3\0\16\122\1\0\10\122\1\251"+
    "\51\122\1\373\1\122\3\0\16\122\1\0\10\122\1\251"+
    "\53\122\3\0\16\122\1\0\23\122\1\367\40\122\3\0"+
    "\16\122\1\0\10\122\1\374\12\122\1\375\40\122\3\0"+
    "\16\122\1\0\23\122\1\376\40\122\3\0\16\122\1\0"+
    "\23\122\1\377\40\122\3\0\16\122\1\0\16\122\1\242"+
    "\45\122\3\0\16\122\1\0\5\122\1\124\1\122\1\242"+
    "\10\122\1\u0100\6\122\1\124\34\122\3\0\16\122\1\0"+
    "\7\122\1\u0101\2\122\1\260\51\122\3\0\16\122\1\0"+
    "\10\122\1\u0102\53\122\3\0\12\122\102\177\1\u0103\3\177"+
    "\103\200\1\u0104\2\200\1\0\3\35\3\0\16\35\1\u0105"+
    "\26\35\1\u0105\14\35\5\0\1\35\5\0\1\35\2\0"+
    "\3\35\3\0\6\35\1\u0106\25\35\1\u0106\25\35\5\0"+
    "\1\35\5\0\1\35\2\0\3\35\3\0\1\u0107\6\35"+
    "\1\u0107\52\35\5\0\1\35\5\0\1\35\1\0\22\34"+
    "\1\u0108\26\34\1\u0108\27\34\1\0\105\34\1\0\2\34"+
    "\1\0\20\34\1\u0109\24\34\1\u0109\34\34\1\0\4\34"+
    "\104\210\1\u010a\1\210\73\67\1\216\3\67\1\u010b\20\67"+
    "\1\u010c\53\67\1\u010c\4\67\1\216\16\67\2\220\65\67"+
    "\1\216\10\67\1\u010d\1\67\73\100\1\225\3\100\1\u010e"+
    "\21\100\1\u010f\51\100\1\u010f\5\100\1\225\12\100\73\112"+
    "\1\234\3\112\1\u0110\27\112\1\u0111\24\112\1\u0111\24\112"+
    "\1\234\12\112\1\122\1\240\2\122\1\0\31\122\4\240"+
    "\27\122\1\0\1\u0112\1\0\13\122\1\u0113\1\122\1\u0113"+
    "\1\0\4\122\1\u0113\3\122\1\u0113\1\122\1\u0113\4\122"+
    "\1\u0113\3\122\1\u0113\1\122\1\u0113\3\122\7\u0113\11\122"+
    "\1\u0113\1\122\1\u0113\10\122\3\0\16\122\1\0\64\122"+
    "\1\0\1\u0112\1\0\16\122\1\0\5\122\1\321\56\122"+
    "\3\0\16\122\1\0\16\122\1\u0114\45\122\3\0\16\122"+
    "\1\0\7\122\1\u0115\54\122\3\0\16\122\1\0\14\122"+
    "\1\u0116\47\122\3\0\16\122\1\0\23\122\1\u0117\40\122"+
    "\3\0\16\122\1\0\4\122\1\u0118\57\122\3\0\16\122"+
    "\1\0\14\122\1\370\47\122\3\0\16\122\1\0\13\122"+
    "\1\344\50\122\3\0\16\122\1\0\26\122\1\u0119\35\122"+
    "\3\0\16\122\1\0\22\122\1\u011a\41\122\3\0\16\122"+
    "\1\0\23\122\1\u011b\40\122\3\0\16\122\1\0\24\122"+
    "\1\242\3\122\1\u011c\33\122\3\0\16\122\1\0\12\122"+
    "\1\u011d\51\122\3\0\16\122\1\0\23\122\1\u011e\40\122"+
    "\3\0\16\122\1\0\4\122\1\u011f\1\122\1\u0120\15\122"+
    "\1\242\37\122\3\0\16\122\1\0\15\122\1\u011d\46\122"+
    "\3\0\16\122\1\0\21\122\1\242\42\122\3\0\16\122"+
    "\1\0\13\122\1\u0121\50\122\3\0\16\122\1\0\22\122"+
    "\1\242\41\122\1\0\1\u0112\1\0\16\122\1\0\20\122"+
    "\1\u0122\43\122\3\0\16\122\1\0\16\122\1\u0123\45\122"+
    "\3\0\16\122\1\0\16\122\1\u0124\45\122\3\0\16\122"+
    "\1\0\7\122\1\u0125\5\122\1\u0126\46\122\3\0\16\122"+
    "\1\0\20\122\1\u0127\43\122\3\0\16\122\1\0\14\122"+
    "\1\242\10\122\1\274\36\122\3\0\16\122\1\0\7\122"+
    "\1\353\54\122\3\0\16\122\1\0\11\122\1\u0128\52\122"+
    "\3\0\16\122\1\0\7\122\1\312\54\122\3\0\16\122"+
    "\1\0\24\122\1\344\37\122\3\0\16\122\1\0\12\122"+
    "\1\u0129\51\122\3\0\16\122\1\0\23\122\1\u012a\40\122"+
    "\3\0\16\122\1\0\16\122\1\u012b\45\122\3\0\16\122"+
    "\1\0\20\122\1\u012c\43\122\3\0\16\122\1\0\5\122"+
    "\1\u012d\56\122\3\0\16\122\1\0\7\122\1\u012e\54\122"+
    "\3\0\16\122\1\0\23\122\1\242\3\122\1\242\34\122"+
    "\3\0\16\122\1\0\20\122\1\352\3\122\1\344\37\122"+
    "\3\0\16\122\1\0\5\122\1\321\1\u012f\55\122\3\0"+
    "\16\122\1\0\16\122\1\u0130\45\122\3\0\16\122\1\0"+
    "\20\122\1\u0131\43\122\3\0\16\122\1\0\3\122\1\u011d"+
    "\13\122\1\u0132\44\122\3\0\16\122\1\0\10\122\1\u0133"+
    "\53\122\3\0\16\122\1\0\16\122\1\u0134\45\122\3\0"+
    "\16\122\1\0\3\122\1\u0135\2\122\1\263\55\122\3\0"+
    "\16\122\1\0\6\122\1\242\11\122\1\u0136\43\122\3\0"+
    "\16\122\1\0\23\122\1\330\40\122\3\0\16\122\1\0"+
    "\6\122\1\242\55\122\3\0\16\122\1\0\23\122\1\253"+
    "\2\122\1\u0119\35\122\3\0\16\122\1\0\10\122\1\u0132"+
    "\53\122\3\0\16\122\1\0\50\122\1\242\11\122\1\u0137"+
    "\1\122\3\0\16\122\1\0\24\122\1\242\37\122\3\0"+
    "\16\122\1\0\3\122\1\u0135\14\122\1\u0138\3\122\1\u0139"+
    "\1\122\1\u0119\35\122\3\0\16\122\1\0\13\122\1\u013a"+
    "\50\122\3\0\16\122\1\0\20\122\1\u0138\43\122\3\0"+
    "\16\122\1\0\13\122\1\u013b\10\122\1\u013c\37\122\3\0"+
    "\16\122\1\0\23\122\1\u013b\40\122\3\0\16\122\1\0"+
    "\7\122\1\u013d\1\u013e\4\122\1\u013f\46\122\3\0\16\122"+
    "\1\0\13\122\1\247\50\122\3\0\16\122\1\0\13\122"+
    "\1\u0140\50\122\3\0\16\122\1\0\7\122\1\u0141\54\122"+
    "\3\0\16\122\1\0\7\122\1\331\54\122\3\0\16\122"+
    "\1\0\17\122\1\u0142\44\122\1\0\1\u0112\1\0\16\122"+
    "\1\0\7\122\1\u0143\1\u0144\53\122\3\0\16\122\1\0"+
    "\5\122\1\u0145\56\122\3\0\16\122\1\0\12\122\1\u0129"+
    "\5\122\1\u0138\43\122\3\0\16\122\1\0\13\122\1\242"+
    "\50\122\3\0\16\122\1\0\22\122\1\u0146\1\u0147\40\122"+
    "\3\0\16\122\1\0\13\122\1\251\14\122\1\242\33\122"+
    "\3\0\16\122\1\0\20\122\1\u0138\7\122\1\u0148\33\122"+
    "\3\0\16\122\1\0\23\122\1\344\4\122\1\242\33\122"+
    "\3\0\16\122\1\0\3\122\1\u0135\13\122\1\u0149\1\u0138"+
    "\5\122\1\u0119\35\122\3\0\16\122\1\0\15\122\1\242"+
    "\46\122\3\0\16\122\1\0\3\122\1\242\60\122\3\0"+
    "\16\122\1\0\17\122\1\242\10\122\1\242\33\122\3\0"+
    "\16\122\1\0\21\122\1\u014a\42\122\3\0\16\122\1\0"+
    "\7\122\1\312\6\122\1\u014b\45\122\3\0\16\122\1\0"+
    "\6\122\1\u014c\55\122\3\0\16\122\1\0\7\122\1\u014d"+
    "\54\122\3\0\16\122\1\0\3\122\1\u0140\6\122\1\u014e"+
    "\4\122\1\u014f\44\122\3\0\16\122\1\0\12\122\1\u0138"+
    "\51\122\3\0\16\122\1\0\15\122\1\u0150\46\122\3\0"+
    "\16\122\1\0\20\122\1\u0151\43\122\3\0\16\122\1\0"+
    "\23\122\1\u0152\40\122\3\0\16\122\1\0\13\122\1\u0153"+
    "\7\122\1\u0154\40\122\3\0\16\122\1\0\24\122\1\u0155"+
    "\37\122\3\0\16\122\1\0\23\122\1\242\40\122\3\0"+
    "\16\122\1\0\42\122\1\242\21\122\3\0\16\122\1\0"+
    "\44\122\1\u0156\17\122\3\0\16\122\1\0\3\122\1\u0157"+
    "\57\122\1\242\3\0\16\122\1\0\13\122\1\251\50\122"+
    "\3\0\16\122\1\0\30\122\1\u0148\33\122\3\0\16\122"+
    "\1\0\6\122\1\u0158\55\122\3\0\16\122\1\0\24\122"+
    "\1\u0139\37\122\3\0\16\122\1\0\7\122\1\u0125\54\122"+
    "\3\0\16\122\1\0\30\122\1\u0155\33\122\3\0\16\122"+
    "\1\0\7\122\1\u0159\54\122\3\0\12\122\101\177\1\u015a"+
    "\1\u0103\3\177\101\200\1\u015a\1\200\1\u0104\2\200\1\0"+
    "\3\35\3\0\5\35\1\u015b\30\35\1\u015b\23\35\5\0"+
    "\1\35\5\0\1\35\2\0\3\35\3\0\12\35\1\u015c"+
    "\24\35\1\u015c\22\35\5\0\1\35\5\0\1\35\1\0"+
    "\17\34\1\u015d\24\34\1\u015d\34\34\1\0\25\34\1\u015e"+
    "\24\34\1\u015e\32\34\1\0\4\34\104\210\1\u015f\1\210"+
    "\12\67\1\u0160\53\67\1\u0160\4\67\1\216\31\67\1\u0161"+
    "\24\67\1\u0161\26\67\1\216\105\67\1\216\10\67\1\u0162"+
    "\1\67\13\100\1\u0163\51\100\1\u0163\5\100\1\225\37\100"+
    "\1\u0164\26\100\1\u0164\16\100\1\225\12\100\21\112\1\u0165"+
    "\24\112\1\u0165\24\112\1\234\27\112\1\u0166\25\112\1\u0166"+
    "\27\112\1\234\12\112\1\122\1\u0113\1\122\1\u0113\1\0"+
    "\4\122\1\u0113\3\122\1\u0113\1\122\1\u0113\4\122\1\u0113"+
    "\3\122\1\u0113\1\122\1\u0113\3\122\7\u0113\11\122\1\u0113"+
    "\1\122\1\u0113\10\122\1\0\1\u0112\1\0\16\122\1\0"+
    "\4\122\1\242\57\122\3\0\16\122\1\0\13\122\1\u013b"+
    "\50\122\3\0\16\122\1\0\7\122\1\353\54\122\1\0"+
    "\1\u0112\1\0\16\122\1\0\5\122\1\u0167\56\122\3\0"+
    "\16\122\1\0\13\122\1\370\50\122\3\0\16\122\1\0"+
    "\16\122\1\352\45\122\3\0\16\122\1\0\4\122\1\u0168"+
    "\57\122\3\0\16\122\1\0\17\122\1\u013c\44\122\3\0"+
    "\16\122\1\0\24\122\1\u0169\37\122\3\0\16\122\1\0"+
    "\14\122\1\242\47\122\3\0\16\122\1\0\20\122\1\u016a"+
    "\43\122\3\0\16\122\1\0\10\122\1\242\53\122\1\0"+
    "\1\u0112\1\0\16\122\1\0\10\122\1\242\20\122\3\242"+
    "\30\122\1\0\1\u0112\1\0\16\122\1\0\7\122\1\u0135"+
    "\54\122\3\0\16\122\1\0\6\122\1\242\15\122\1\u0132"+
    "\37\122\3\0\16\122\1\0\5\122\1\u016b\56\122\3\0"+
    "\16\122\1\0\3\122\1\u016c\60\122\3\0\16\122\1\0"+
    "\24\122\1\u016d\37\122\3\0\16\122\1\0\6\122\1\242"+
    "\10\122\1\242\44\122\3\0\16\122\1\0\14\122\1\242"+
    "\6\122\1\242\40\122\3\0\16\122\1\0\12\122\1\344"+
    "\51\122\3\0\16\122\1\0\16\122\1\u014b\45\122\3\0"+
    "\16\122\1\0\30\122\1\u016d\33\122\3\0\16\122\1\0"+
    "\10\122\1\u012e\53\122\3\0\16\122\1\0\23\122\1\u016e"+
    "\40\122\3\0\16\122\1\0\7\122\1\u016f\54\122\3\0"+
    "\16\122\1\0\5\122\1\u011d\56\122\3\0\16\122\1\0"+
    "\14\122\1\263\47\122\3\0\16\122\1\0\7\122\1\u0170"+
    "\54\122\3\0\16\122\1\0\12\122\1\242\51\122\3\0"+
    "\16\122\1\0\7\122\1\344\54\122\3\0\16\122\1\0"+
    "\17\122\1\u0132\44\122\3\0\16\122\1\0\4\122\1\u0171"+
    "\57\122\3\0\16\122\1\0\30\122\1\242\33\122\3\0"+
    "\16\122\1\0\20\122\1\u0172\43\122\3\0\16\122\1\0"+
    "\23\122\1\u012e\40\122\3\0\16\122\1\0\20\122\1\242"+
    "\43\122\3\0\16\122\1\0\4\122\1\u0173\57\122\3\0"+
    "\16\122\1\0\15\122\1\u0174\46\122\3\0\16\122\1\0"+
    "\17\122\1\u016d\44\122\3\0\16\122\1\0\10\122\1\u0171"+
    "\53\122\3\0\16\122\1\0\3\122\1\243\60\122\3\0"+
    "\16\122\1\0\14\122\1\u0175\3\122\1\u0176\43\122\3\0"+
    "\16\122\1\0\20\122\1\353\43\122\3\0\16\122\1\0"+
    "\16\122\1\u0171\45\122\3\0\16\122\1\0\3\122\1\u016d"+
    "\60\122\3\0\16\122\1\0\24\122\2\242\36\122\3\0"+
    "\16\122\1\0\12\122\1\u011e\51\122\3\0\16\122\1\0"+
    "\30\122\1\370\33\122\3\0\16\122\1\0\7\122\1\u0177"+
    "\54\122\3\0\16\122\1\0\7\122\1\u013b\54\122\3\0"+
    "\16\122\1\0\24\122\1\u0171\37\122\3\0\16\122\1\0"+
    "\30\122\1\u0178\33\122\3\0\16\122\1\0\7\122\1\u0131"+
    "\54\122\3\0\16\122\1\0\24\122\1\321\37\122\3\0"+
    "\16\122\1\0\14\122\1\u016d\47\122\3\0\16\122\1\0"+
    "\27\122\1\370\34\122\3\0\16\122\1\0\3\122\1\u0135"+
    "\60\122\3\0\16\122\1\0\20\122\1\352\43\122\3\0"+
    "\16\122\1\0\17\122\1\262\44\122\3\0\16\122\1\0"+
    "\25\122\1\242\36\122\3\0\16\122\1\0\23\122\1\252"+
    "\40\122\3\0\16\122\1\0\5\122\1\344\4\122\1\u0179"+
    "\51\122\3\0\16\122\1\0\13\122\1\u017a\50\122\3\0"+
    "\16\122\1\0\20\122\1\u017b\43\122\3\0\16\122\1\0"+
    "\24\122\1\370\37\122\3\0\16\122\1\0\47\122\1\u017c"+
    "\14\122\3\0\16\122\1\0\63\122\1\242\3\0\16\122"+
    "\1\0\6\122\1\370\55\122\3\0\16\122\1\0\10\122"+
    "\1\u017d\53\122\3\0\12\122\1\0\3\35\3\0\4\35"+
    "\1\u017e\51\35\1\u017e\3\35\5\0\1\35\5\0\1\35"+
    "\2\0\3\35\3\0\21\35\1\u017f\11\35\1\u017f\26\35"+
    "\5\0\1\35\5\0\1\35\1\0\21\34\1\u0180\24\34"+
    "\1\u0180\32\34\1\0\32\34\1\u0181\24\34\1\u0181\25\34"+
    "\1\0\4\34\17\67\1\u0182\24\67\1\u0182\26\67\1\216"+
    "\37\67\1\u0183\26\67\1\u0183\16\67\1\216\12\67\73\u0162"+
    "\1\u0184\10\u0162\1\u0185\1\u0162\25\100\1\u0186\26\100\1\u0186"+
    "\16\100\1\225\27\100\1\u0187\25\100\1\u0187\27\100\1\225"+
    "\12\100\15\112\1\u0188\25\112\1\u0188\27\112\1\234\21\112"+
    "\1\u0189\6\112\1\u0189\54\112\1\234\12\112\4\122\1\0"+
    "\27\122\1\242\34\122\3\0\16\122\1\0\23\122\1\u0138"+
    "\40\122\3\0\16\122\1\0\23\122\1\u018a\40\122\3\0"+
    "\16\122\1\0\15\122\1\353\46\122\3\0\16\122\1\0"+
    "\24\122\1\353\37\122\3\0\16\122\1\0\17\122\1\242"+
    "\44\122\3\0\16\122\1\0\10\122\1\242\53\122\3\0"+
    "\16\122\1\0\22\122\1\u016d\41\122\3\0\16\122\1\0"+
    "\13\122\1\u016a\50\122\3\0\16\122\1\0\22\122\1\242"+
    "\41\122\3\0\16\122\1\0\5\122\1\242\56\122\3\0"+
    "\16\122\1\0\10\122\1\353\53\122\3\0\16\122\1\0"+
    "\17\122\1\370\44\122\3\0\16\122\1\0\15\122\1\u0138"+
    "\46\122\3\0\16\122\1\0\23\122\1\u018b\40\122\3\0"+
    "\16\122\1\0\10\122\1\u018c\53\122\3\0\16\122\1\0"+
    "\13\122\1\u016a\13\122\1\242\34\122\3\0\16\122\1\0"+
    "\10\122\1\u0138\53\122\3\0\16\122\1\0\32\122\1\u018c"+
    "\1\u018d\30\122\3\0\16\122\1\0\7\122\1\321\54\122"+
    "\3\0\16\122\1\0\14\122\1\u0171\47\122\3\0\16\122"+
    "\1\0\43\122\1\242\20\122\3\0\16\122\1\0\20\122"+
    "\1\321\43\122\3\0\12\122\1\0\3\35\3\0\12\35"+
    "\1\u018e\24\35\1\u018e\22\35\5\0\1\35\5\0\1\35"+
    "\2\0\3\35\3\0\16\35\1\u018f\26\35\1\u018f\14\35"+
    "\5\0\1\35\5\0\1\35\1\0\26\34\1\u0190\24\34"+
    "\1\u0190\25\34\1\0\17\34\1\u0191\51\34\1\u0191\13\34"+
    "\1\0\4\34\25\67\1\u0192\26\67\1\u0192\16\67\1\216"+
    "\26\67\1\u0193\30\67\1\u0193\25\67\1\216\12\67\73\u0162"+
    "\1\u0184\3\u0162\1\u0194\4\u0162\1\u0185\74\u0162\1\u0184\10\u0162"+
    "\1\220\1\u0162\15\100\1\u0195\25\100\1\u0195\27\100\1\225"+
    "\105\100\1\225\5\100\1\u0196\4\100\7\112\1\u0197\6\112"+
    "\1\u0197\54\112\1\234\33\112\1\u0198\24\112\1\u0198\24\112"+
    "\1\234\12\112\4\122\1\0\25\122\1\242\36\122\1\0"+
    "\1\u0112\1\0\16\122\1\0\5\122\1\u0199\56\122\1\0"+
    "\1\u0112\1\0\16\122\1\0\34\122\1\242\27\122\3\0"+
    "\16\122\1\0\31\122\1\242\2\122\1\242\27\122\3\0"+
    "\12\122\1\0\3\35\3\0\6\35\1\u019a\25\35\1\u019a"+
    "\25\35\5\0\1\35\5\0\1\35\1\0\13\34\1\u019b"+
    "\51\34\1\u019b\13\34\1\0\21\34\1\u019c\25\34\1\u019c"+
    "\35\34\1\0\4\34\14\67\1\u019d\30\67\1\u019d\25\67"+
    "\1\216\25\67\1\u019e\51\67\1\u019e\5\67\1\216\12\67"+
    "\12\u0162\1\u019f\53\u0162\1\u019f\4\u0162\1\u0184\10\u0162\1\u0185"+
    "\1\u0162\73\100\1\225\5\100\1\0\4\100\21\112\1\u01a0"+
    "\24\112\1\u01a0\24\112\1\234\42\112\1\u01a1\11\112\1\u01a1"+
    "\30\112\1\234\12\112\4\122\1\0\21\122\1\325\42\122"+
    "\3\0\12\122\1\0\3\35\3\0\21\35\1\u01a2\11\35"+
    "\1\u01a2\26\35\5\0\1\35\5\0\1\35\1\0\15\34"+
    "\1\0\25\34\1\0\35\34\1\0\4\34\13\67\1\u01a3"+
    "\51\67\1\u01a3\5\67\1\216\33\67\1\u01a4\24\67\1\u01a4"+
    "\24\67\1\216\12\67\17\u0162\1\u01a5\24\u0162\1\u01a5\26\u0162"+
    "\1\u0184\10\u0162\1\u0185\1\u0162\30\112\1\u01a6\11\112\1\u01a6"+
    "\30\112\1\234\37\112\1\u01a7\26\112\1\u01a7\16\112\1\234"+
    "\12\112\21\67\1\u01a8\24\67\1\u01a8\24\67\1\216\105\67"+
    "\1\216\5\67\1\u0196\4\67\25\u0162\1\u01a9\26\u0162\1\u01a9"+
    "\16\u0162\1\u0184\10\u0162\1\u0185\1\u0162\25\112\1\u01aa\26\112"+
    "\1\u01aa\16\112\1\234\27\112\1\u01ab\25\112\1\u01ab\27\112"+
    "\1\234\12\112\73\67\1\216\5\67\1\0\4\67\14\u0162"+
    "\1\u01ac\30\u0162\1\u01ac\25\u0162\1\u0184\10\u0162\1\u0185\1\u0162"+
    "\15\112\1\u01ad\25\112\1\u01ad\27\112\1\234\42\112\1\u01ae"+
    "\11\112\1\u01ae\30\112\1\234\12\112\13\u0162\1\u01af\51\u0162"+
    "\1\u01af\5\u0162\1\u0184\10\u0162\1\u0185\1\u0162\30\112\1\u01b0"+
    "\11\112\1\u01b0\30\112\1\234\105\112\1\234\5\112\1\u0196"+
    "\4\112\21\u0162\1\u01b1\24\u0162\1\u01b1\24\u0162\1\u0184\10\u0162"+
    "\1\u0185\1\u0162\73\112\1\234\5\112\1\0\4\112\73\u0162"+
    "\1\u0184\5\u0162\1\u01b2\2\u0162\1\u0185\1\u0162\104\u01b2\1\u01b3"+
    "\105\u01b2\1\u01b4\1\u01b2\4\0\2\u01b4\73\0\1\u01b5\2\0"+
    "\1\u01b6\105\0\1\u01b2\1\0";

  private static int [] zzUnpackTrans() {
    int [] result = new int[27790];
    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 =
    "\1\1\11\0\1\1\3\0\1\1\3\0\1\1\1\0"+
    "\1\1\2\0\11\1\1\11\4\1\1\11\2\1\2\11"+
    "\5\1\1\11\1\1\1\11\3\1\1\11\4\1\2\11"+
    "\7\1\2\11\11\1\1\11\55\1\2\11\2\0\4\1"+
    "\4\0\2\11\1\0\1\11\2\0\2\1\1\11\1\0"+
    "\1\11\2\0\1\1\2\11\1\0\1\11\2\0\1\1"+
    "\2\0\143\1\2\0\3\1\4\0\2\1\1\0\1\1"+
    "\1\0\1\1\1\11\107\1\1\11\2\1\2\0\1\11"+
    "\1\0\2\1\1\0\1\1\1\0\32\1\3\0\1\1"+
    "\1\0\1\1\1\0\1\1\1\0\7\1\3\0\1\1"+
    "\2\0\1\11\1\0\3\1\1\0\1\11\1\0\1\1"+
    "\2\0\2\1\1\0\1\1\2\0\1\1\3\0\1\1"+
    "\2\0\1\1\6\0\1\11\1\0";

  private static int [] zzUnpackAttribute() {
    int [] result = new int[438];
    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 textposition at the last state to be included in yytext */
  private int zzPushbackPos;

  /** 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;

  /* user code: */

	private int lastToken;

    private int nextState=YYINITIAL;
	
    /** 
     * next Token method that allows you to control if whitespace and comments are
     * returned as tokens.
     */
    public Token getNextToken(boolean returnComments, boolean returnWhiteSpace)throws IOException{
        Token t = getNextToken();
        while (t != null && ((!returnWhiteSpace && t.isWhiteSpace()) || (!returnComments && t.isComment()))){
            t = getNextToken();
        }
        return (t); 
    }

    /**
     * Prints out tokens from a file or System.in.
     * If no arguments are given, System.in will be used for input.
     * If more arguments are given, the first argument will be used as
     * the name of the file to use as input
     *
     * @param args program arguments, of which the first is a filename
     */
    public static void main(String[] args) {
        InputStream in;
        try {
            if (args.length > 0){
                File f = new File(args[0]);
                if (f.exists()){
                    if (f.canRead()){
                        in = new FileInputStream(f);
                    } else {
                        throw new IOException("Could not open " + args[0]);
                    }
                } else {
                    throw new IOException("Could not find " + args[0]);
                }                   
            } else {
                in = System.in;
            }       
            HTMLLexer1 shredder = new HTMLLexer1(in);
            Token t;
            while ((t = shredder.getNextToken()) != null) {
                if (t.getID() != CToken.WHITE_SPACE){
                    System.out.println(t);
                }
            }
        } catch (IOException e){
            System.out.println(e.getMessage());
        }
    }

    /**
     * Closes the current input stream, and resets the scanner to read from a new input stream.
	 * All internal variables are reset, the old input stream  cannot be reused
	 * (content of the internal buffer is discarded and lost).
	 * The lexical state is set to the initial state.
     * Subsequent tokens read from the lexer will start with the line, char, and column
     * values given here.
     *
     * @param reader The new input.
     * @param yyline The line number of the first token.
     * @param yychar The position (relative to the start of the stream) of the first token.
     * @param yycolumn The position (relative to the line) of the first token.
     * @throws IOException if an IOExecption occurs while switching readers.
     */
    public void reset(java.io.Reader reader, int yyline, int yychar, int yycolumn) throws IOException{
        yyreset(reader);
        this.yyline = yyline;
		this.yychar = yychar;
		this.yycolumn = yycolumn;
	}


  /**
   * 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 HTMLLexer1(java.io.Reader in) {
    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 HTMLLexer1(java.io.InputStream in) {
    this(new java.io.InputStreamReader(in));
  }


  /**
   * 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;
      zzPushbackPos-= 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) {
      return true;
    }
    else {
      zzEndRead+= numRead;
      return false;
    }
  }

    
  /**
   * 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();
  }


  /**
   * 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 
   */
  public final void yyreset(java.io.Reader reader) {
    zzReader = reader;
    zzAtBOL  = true;
    zzAtEOF  = false;
    zzEndRead = zzStartRead = 0;
    zzCurrentPos = zzMarkedPos = zzPushbackPos = 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;
  }


  /**
   * 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 Token getNextToken() throws java.io.IOException {
    int zzInput;
    int zzAction;

    // cached fields:
    int zzCurrentPosL;
    int zzMarkedPosL;
    int zzEndReadL = zzEndRead;
    char [] zzBufferL = zzBuffer;
    char [] zzCMapL = ZZ_CMAP;

    int [] zzTransL = ZZ_TRANS;
    int [] zzRowMapL = ZZ_ROWMAP;
    int [] zzAttrL = ZZ_ATTRIBUTE;

    while (true) {
      zzMarkedPosL = zzMarkedPos;

      yychar+= zzMarkedPosL-zzStartRead;

      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--;
      }
      zzAction = -1;

      zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
  
      zzState = 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 1: 
          { nextState = YYINITIAL;
	lastToken = HTMLToken1.WORD;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	return(t);
          }
        case 44: break;
        case 27: 
          { nextState = PRE_TAG;
	lastToken = HTMLToken1.VALUE;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 45: break;
        case 24: 
          { nextState = START_PRE_EQUAL;
	lastToken = HTMLToken1.NAME;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 46: break;
        case 28: 
          { nextState = TEXTAREA;
	lastToken = HTMLToken1.ERROR_MALFORMED_TAG;
	
    String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 47: break;
        case 40: 
          { nextState = SCRIPT_TAG;
	lastToken = HTMLToken1.TAG_NAME;	
    String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 48: break;
        case 9: 
          { nextState = TAG;
	lastToken = HTMLToken1.TAG_NAME;
    String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 49: break;
        case 31: 
          { nextState = START_TEXTAREA_VALUE;
	lastToken = HTMLToken1.EQUAL;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 50: break;
        case 22: 
          { nextState = SCRIPT_TAG;
	lastToken = HTMLToken1.VALUE;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 51: break;
        case 8: 
          { nextState = YYINITIAL;
	lastToken = HTMLToken1.ERROR_MALFORMED_TAG;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 52: break;
        case 26: 
          { nextState = START_PRE_VALUE;
	lastToken = HTMLToken1.EQUAL;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 53: break;
        case 12: 
          { System.err.println("Unmatched input.");
    String state = "";    
	String text = yytext();
    switch (nextState){
        case YYINITIAL: state = "YYINITIAL"; break;
        case START_TAG: state = "START_TAG"; break;
        case START_END_TAG: state = "START_END_TAG"; break;
        case START_DOC_TAG: state = "START_DOC_TAG"; break;
        case TAG: state = "TAG"; break;
        case START_EQUAL: state = "START_EQUAL"; break;
        case START_VALUE: state = "START_VALUE"; break;
        case SCRIPT_TAG: state = "SCRIPT_TAG"; break;
        case START_SCRIPT_EQUAL: state = "START_SCRIPT_EQUAL"; break;
        case START_SCRIPT_VALUE: state = "START_SCRIPT_VALUE"; break;
        case SCRIPT: state = "SCRIPT"; break;
        case PRE_TAG: state = "PRE_TAG"; break;
        case START_PRE_EQUAL: state = "START_PRE_EQUAL"; break;
        case START_PRE_VALUE: state = "START_PRE_VALUE"; break;
        case PRE: state = "PRE"; break;
        case TEXTAREA_TAG: state = "TEXTAREA_TAG"; break;
        case START_TEXTAREA_EQUAL: state = "START_TEXTAREA_EQUAL"; break;
        case START_TEXTAREA_VALUE: state = "START_TEXTAREA_VALUE"; break;
        case TEXTAREA: state = "TEXTAREA"; break;
        case TAG_END: state = "TAG_END"; break;
        case DOCTYPE: state = "DOCTYPE"; break;
        case COMMENT_DEF: state = "COMMENT_DEF"; break;
        case FINISH_END_TAG: state = "FINISH_END_TAG"; break;
    }
    System.err.println("State: " + state);
    System.err.println("Text: " + text);
    System.err.println("Line: " + (yyline+1));
    System.err.println("Column: " + (yycolumn+1));
	zzScanError(ZZ_NO_MATCH);
          }
        case 54: break;
        case 29: 
          { nextState = START_TEXTAREA_EQUAL;
	lastToken = HTMLToken1.NAME;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 55: break;
        case 11: 
          { nextState = COMMENT_DEF;
	lastToken = HTMLToken1.ERROR_MALFORMED_TAG;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 56: break;
        case 10: 
          { nextState = FINISH_END_TAG;
	lastToken = HTMLToken1.END_TAG_NAME;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 57: break;
        case 37: 
          { nextState = PRE_TAG;
	lastToken = HTMLToken1.TAG_NAME;
    String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 58: break;
        case 19: 
          { nextState = SCRIPT;
	lastToken = HTMLToken1.TAG_END;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 59: break;
        case 42: 
          { nextState = DOCTYPE;
	lastToken = HTMLToken1.TAG_NAME;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 60: break;
        case 6: 
          { nextState = YYINITIAL;
	lastToken = HTMLToken1.ERROR_MALFORMED_TAG;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	return(t);
          }
        case 61: break;
        case 20: 
          { nextState = SCRIPT;
	lastToken = HTMLToken1.ERROR_MALFORMED_TAG;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 62: break;
        case 34: 
          { nextState = START_END_TAG;
	lastToken = HTMLToken1.TAG_START;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 63: break;
        case 33: 
          { nextState = TEXTAREA_TAG;
	lastToken = HTMLToken1.VALUE;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 64: break;
        case 17: 
          { nextState = SCRIPT;
	lastToken = HTMLToken1.ERROR_MALFORMED_TAG;
	
    String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 65: break;
        case 38: 
          { nextState = YYINITIAL;
	lastToken = HTMLToken1.SCRIPT;
    String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	return(t);
          }
        case 66: break;
        case 21: 
          { nextState = START_SCRIPT_VALUE;
	lastToken = HTMLToken1.EQUAL;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 67: break;
        case 43: 
          { nextState = TEXTAREA_TAG;
	lastToken = HTMLToken1.TAG_NAME;
    String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 68: break;
        case 5: 
          { lastToken = HTMLToken1.WHITE_SPACE;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	return(t);
          }
        case 69: break;
        case 41: 
          { nextState = YYINITIAL;
	lastToken = HTMLToken1.END_TAG_NAME;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 70: break;
        case 14: 
          { nextState = YYINITIAL;
	lastToken = HTMLToken1.TAG_END;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 71: break;
        case 7: 
          { nextState = START_TAG;
	lastToken = HTMLToken1.TAG_START;	
    String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 72: break;
        case 32: 
          { nextState = TEXTAREA;
	lastToken = HTMLToken1.ERROR_MALFORMED_TAG;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 73: break;
        case 35: 
          { nextState = START_DOC_TAG;
	lastToken = HTMLToken1.TAG_START;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 74: break;
        case 4: 
          { lastToken = HTMLToken1.NAME;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	return(t);
          }
        case 75: break;
        case 23: 
          { nextState = PRE;
	lastToken = HTMLToken1.ERROR_MALFORMED_TAG;
	
    String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 76: break;
        case 18: 
          { nextState = START_SCRIPT_EQUAL;
	lastToken = HTMLToken1.NAME;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 77: break;
        case 30: 
          { nextState = TEXTAREA;
	lastToken = HTMLToken1.TAG_END;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 78: break;
        case 16: 
          { nextState = TAG;
	lastToken = HTMLToken1.VALUE;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 79: break;
        case 2: 
          { lastToken = HTMLToken1.SCRIPT;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	return(t);
          }
        case 80: break;
        case 25: 
          { nextState = PRE;
	lastToken = HTMLToken1.TAG_END;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 81: break;
        case 3: 
          { lastToken = HTMLToken1.WORD;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	return(t);
          }
        case 82: break;
        case 15: 
          { nextState = START_VALUE;
	lastToken = HTMLToken1.EQUAL;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 83: break;
        case 39: 
          { nextState = COMMENT_DEF;
	lastToken = HTMLToken1.COMMENT;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 84: break;
        case 36: 
          { nextState = YYINITIAL;
	lastToken = HTMLToken1.CHAR_REF;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	return(t);
          }
        case 85: break;
        case 13: 
          { nextState = START_EQUAL;
	lastToken = HTMLToken1.NAME;
	String text = yytext();
	HTMLToken1 t = (new HTMLToken1(lastToken,text,yyline,yychar,yychar+text.length(),nextState));
	yybegin(nextState);
	return(t);
          }
        case 86: break;
        default: 
          if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
            zzAtEOF = true;
            return null;
          } 
          else {
            zzScanError(ZZ_NO_MATCH);
          }
      }
    }
  }


}
