/* The following code was generated by JFlex 1.2.2 on 5/2/11 2:19 PM */

/*******************************************************************************
 * Copyright (c) 2004, 2011 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *     Frits Jalvingh - contributions for bug 150794
 *******************************************************************************/

package org.eclipse.jst.jsp.core.internal.parser.internal;

import java.io.CharArrayReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.eclipse.jst.jsp.core.internal.Logger;
import org.eclipse.jst.jsp.core.internal.contenttype.IntStack;
import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts;
import org.eclipse.wst.sse.core.internal.ltk.parser.BlockMarker;
import org.eclipse.wst.sse.core.internal.ltk.parser.BlockTokenizer;
import org.eclipse.wst.sse.core.internal.ltk.parser.TagMarker;
import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList;
import org.eclipse.wst.sse.core.internal.util.Debug;
import org.eclipse.wst.sse.core.utils.StringUtils;
import org.eclipse.wst.xml.core.internal.parser.ContextRegionContainer;


/**
 * This class is a scanner generated by 
 * <a href="http://www.informatik.tu-muenchen.de/~kleing/jflex/">JFlex</a> 1.2.2
 * on 5/2/11 2:19 PM from the specification file
 * <tt>file:/C:/dev/workspaces/indigo/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex</tt>
 */
public class JSPTokenizer implements BlockTokenizer, DOMJSPRegionContexts {

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

  /** lexical states */
  final public static int ST_JSP_VBL_DQUOTES = 52;
  final public static int ST_JSP_VBL_SQUOTES = 51;
  final public static int ST_JSP_VBL_SQUOTES_END = 53;
  final public static int ST_XML_COMMENT_END = 4;
  final public static int ST_JSP_DIRECTIVE_ATTRIBUTE_VALUE = 21;
  final public static int ST_JSP_EL_SQUOTES_END = 46;
  final public static int ST_JSP_EL_DQUOTES = 45;
  final public static int ST_JSP_EL = 43;
  final public static int ST_BLOCK_TAG_SCAN = 36;
  final public static int ST_JSP_EL_SQUOTES = 44;
  final public static int ST_DHTML_ATTRIBUTE_VALUE = 14;
  final public static int ST_XML_PI_ATTRIBUTE_NAME = 8;
  final public static int ST_DHTML_TAG_CLOSE = 15;
  final public static int ST_XML_ATTRIBUTE_VALUE_DQUOTED = 42;
  final public static int ST_DHTML_EQUALS = 13;
  final public static int ST_XML_PI_ATTRIBUTE_VALUE = 10;
  final public static int ST_XML_ATTRIBUTE_VALUE = 25;
  final public static int ST_JSP_VBL = 50;
  final public static int ST_JSP_SQUOTED_VBL = 56;
  final public static int ST_XML_ATTRIBUTE_VALUE_SQUOTED = 41;
  final public static int ST_XML_ATTRIBUTE_NAME = 23;
  final public static int ST_XML_EQUALS = 24;
  final public static int YYINITIAL = 0;
  final public static int ST_JSP_DIRECTIVE_ATTRIBUTE_NAME = 19;
  final public static int ST_JSP_CONTENT = 16;
  final public static int ST_XML_DOCTYPE_ID_SYSTEM = 31;
  final public static int ST_XML_ELEMENT_DECLARATION = 32;
  final public static int ST_XML_DECLARATION_CLOSE = 27;
  final public static int ST_JSP_DIRECTIVE_EQUALS = 20;
  final public static int ST_JSP_VBL_DQUOTES_END = 54;
  final public static int ST_JSP_DQUOTED_EL = 48;
  final public static int ST_XML_DOCTYPE_DECLARATION = 28;
  final public static int ST_CDATA_END = 2;
  final public static int ST_PI_WS = 6;
  final public static int ST_CDATA_TEXT = 1;
  final public static int ST_JSP_DIRECTIVE_NAME_WHITESPACE = 18;
  final public static int ST_XML_ELEMENT_DECLARATION_CONTENT = 33;
  final public static int ST_XML_ATTLIST_DECLARATION = 34;
  final public static int ST_JSP_EL_DQUOTES_END = 47;
  final public static int ST_JSP_SQUOTED_EL = 49;
  final public static int ST_JSP_COMMENT_END = 39;
  final public static int ST_XML_PI_EQUALS = 9;
  final public static int ST_XML_ATTLIST_DECLARATION_CONTENT = 35;
  final public static int ST_XML_DOCTYPE_ID_PUBLIC = 30;
  final public static int ST_JSP_DQUOTED_VBL = 55;
  final public static int ST_DHTML_ATTRIBUTE_NAME = 12;
  final public static int ST_ABORT_EMBEDDED = 37;
  final public static int ST_XML_DOCTYPE_EXTERNAL_ID = 29;
  final public static int ST_JSP_COMMENT = 38;
  final public static int ST_PI_CONTENT = 7;
  final public static int ST_BLOCK_TAG_INTERNAL_SCAN = 37;
  final public static int ST_PI = 5;
  final public static int ST_XML_DECLARATION = 26;
  final public static int ST_JSP_DIRECTIVE_NAME = 17;
  final public static int ST_XML_TAG_NAME = 22;
  final public static int ST_XML_PI_TAG_CLOSE = 11;
  final public static int ST_XML_COMMENT = 3;
  final public static int ST_JSP_ATTRIBUTE_VALUE = 40;

  /** 
   * Translates characters to character classes
   */
  final private static String yycmap_packed = 
    "\11\0\1\5\1\27\2\0\1\20\22\0\1\20\1\26\1\12\1\66"+
    "\1\15\1\23\1\13\1\14\1\25\1\25\1\25\1\25\1\25\1\7"+
    "\1\6\1\3\12\21\1\11\1\73\1\1\1\52\1\2\1\4\1\22"+
    "\1\41\1\74\1\37\1\40\1\56\1\71\1\63\1\63\1\64\1\63"+
    "\1\63\1\34\1\32\1\65\1\53\1\55\1\63\1\70\1\67\1\42"+
    "\1\72\2\63\1\30\1\54\1\63\1\36\1\17\1\24\1\0\1\10"+
    "\1\0\1\60\1\104\1\75\1\61\1\44\1\71\1\76\1\106\1\47"+
    "\1\101\1\63\1\35\1\33\1\51\1\50\1\102\1\63\1\45\1\46"+
    "\1\57\1\103\1\43\1\63\1\31\1\62\1\63\1\16\1\0\1\105"+
    "\71\0\1\100\10\0\27\77\1\0\37\77\1\0\72\77\2\0\13\77"+
    "\2\0\10\77\1\0\65\77\1\0\104\77\11\0\44\77\3\0\2\77"+
    "\4\0\36\77\70\0\131\77\22\0\7\77\16\0\2\100\56\0\106\100"+
    "\32\0\2\100\44\0\1\77\1\100\3\77\1\0\1\77\1\0\24\77"+
    "\1\0\54\77\1\0\7\77\3\0\1\77\1\0\1\77\1\0\1\77"+
    "\1\0\1\77\1\0\22\77\15\0\14\77\1\0\102\77\1\0\14\77"+
    "\1\0\44\77\1\0\4\100\11\0\65\77\2\0\2\77\2\0\2\77"+
    "\3\0\34\77\2\0\10\77\2\0\2\77\67\0\46\77\2\0\1\77"+
    "\7\0\46\77\12\0\21\100\1\0\27\100\1\0\3\100\1\0\1\100"+
    "\1\0\2\100\1\0\1\100\13\0\33\77\5\0\3\77\56\0\32\77"+
    "\5\0\1\100\12\77\10\100\15\0\12\100\6\0\1\100\107\77\2\0"+
    "\5\77\1\0\17\77\1\0\4\77\1\0\1\77\17\100\2\77\2\100"+
    "\1\0\4\100\2\0\12\100\u0207\0\3\100\1\0\65\77\2\0\1\100"+
    "\1\77\20\100\3\0\4\100\3\0\12\77\2\100\2\0\12\100\21\0"+
    "\3\100\1\0\10\77\2\0\2\77\2\0\26\77\1\0\7\77\1\0"+
    "\1\77\3\0\4\77\2\0\1\100\1\0\7\100\2\0\2\100\2\0"+
    "\3\100\11\0\1\100\4\0\2\77\1\0\3\77\2\100\2\0\12\100"+
    "\2\77\20\0\1\100\2\0\6\77\4\0\2\77\2\0\26\77\1\0"+
    "\7\77\1\0\2\77\1\0\2\77\1\0\2\77\2\0\1\100\1\0"+
    "\5\100\4\0\2\100\2\0\3\100\13\0\4\77\1\0\1\77\7\0"+
    "\12\100\2\100\3\77\14\0\3\100\1\0\7\77\1\0\1\77\1\0"+
    "\3\77\1\0\26\77\1\0\7\77\1\0\2\77\1\0\5\77\2\0"+
    "\1\100\1\77\10\100\1\0\3\100\1\0\3\100\22\0\1\77\5\0"+
    "\12\100\21\0\3\100\1\0\10\77\2\0\2\77\2\0\26\77\1\0"+
    "\7\77\1\0\2\77\2\0\4\77\2\0\1\100\1\77\6\100\3\0"+
    "\2\100\2\0\3\100\10\0\2\100\4\0\2\77\1\0\3\77\4\0"+
    "\12\100\22\0\2\100\1\0\6\77\3\0\3\77\1\0\4\77\3\0"+
    "\2\77\1\0\1\77\1\0\2\77\3\0\2\77\3\0\3\77\3\0"+
    "\10\77\1\0\3\77\4\0\5\100\3\0\3\100\1\0\4\100\11\0"+
    "\1\100\17\0\11\100\21\0\3\100\1\0\10\77\1\0\3\77\1\0"+
    "\27\77\1\0\12\77\1\0\5\77\4\0\7\100\1\0\3\100\1\0"+
    "\4\100\7\0\2\100\11\0\2\77\4\0\12\100\22\0\2\100\1\0"+
    "\10\77\1\0\3\77\1\0\27\77\1\0\12\77\1\0\5\77\4\0"+
    "\7\100\1\0\3\100\1\0\4\100\7\0\2\100\7\0\1\77\1\0"+
    "\2\77\4\0\12\100\22\0\2\100\1\0\10\77\1\0\3\77\1\0"+
    "\27\77\1\0\20\77\4\0\6\100\2\0\3\100\1\0\4\100\11\0"+
    "\1\100\10\0\2\77\4\0\12\100\221\0\56\77\1\0\1\77\1\100"+
    "\2\77\7\100\5\0\6\77\1\100\10\100\1\0\12\100\47\0\2\77"+
    "\1\0\1\77\2\0\2\77\1\0\1\77\2\0\1\77\6\0\4\77"+
    "\1\0\7\77\1\0\3\77\1\0\1\77\1\0\1\77\2\0\2\77"+
    "\1\0\2\77\1\0\1\77\1\100\2\77\6\100\1\0\2\100\1\77"+
    "\2\0\5\77\1\0\1\100\1\0\6\100\2\0\12\100\76\0\2\100"+
    "\6\0\12\100\13\0\1\100\1\0\1\100\1\0\1\100\4\0\2\100"+
    "\10\77\1\0\41\77\7\0\24\100\1\0\6\100\4\0\6\100\1\0"+
    "\1\100\1\0\25\100\3\0\7\100\1\0\1\100\346\0\46\77\12\0"+
    "\47\77\11\0\1\77\1\0\2\77\1\0\3\77\1\0\1\77\1\0"+
    "\2\77\1\0\5\77\51\0\1\77\1\0\1\77\1\0\1\77\13\0"+
    "\1\77\1\0\1\77\1\0\1\77\3\0\2\77\3\0\1\77\5\0"+
    "\3\77\1\0\1\77\1\0\1\77\1\0\1\77\1\0\1\77\3\0"+
    "\2\77\3\0\2\77\1\0\1\77\50\0\1\77\11\0\1\77\2\0"+
    "\1\77\2\0\2\77\7\0\2\77\1\0\1\77\1\0\7\77\50\0"+
    "\1\77\4\0\1\77\10\0\1\77\u0c06\0\234\77\4\0\132\77\6\0"+
    "\26\77\2\0\6\77\2\0\46\77\2\0\6\77\2\0\10\77\1\0"+
    "\1\77\1\0\1\77\1\0\1\77\1\0\37\77\2\0\65\77\1\0"+
    "\7\77\1\0\1\77\3\0\3\77\1\0\7\77\3\0\4\77\2\0"+
    "\6\77\4\0\15\77\5\0\3\77\1\0\7\77\323\0\15\100\4\0"+
    "\1\100\104\0\1\77\3\0\2\77\2\0\1\77\121\0\3\77\u0e82\0"+
    "\1\100\1\0\1\77\31\0\11\77\6\100\1\0\5\100\13\0\124\77"+
    "\4\0\2\100\2\0\2\100\2\0\132\77\1\0\3\100\6\0\50\77"+
    "\u1cd3\0\u51a6\77\u0c5a\0\u2ba4\77\134\0\u0800\0\u1ffe\0\2\0";

  /** 
   * Translates characters to character classes
   */
  final private static char [] yycmap = yy_unpack_cmap(yycmap_packed);

  /** 
   * Translates a state to a row index in the transition table
   */
  final private static int yy_rowMap [] = { 
        0,    71,   142,   213,   284,   355,   426,   497,   568,   639, 
      710,   781,   852,   923,   994,  1065,  1136,  1207,  1278,  1349, 
     1420,  1491,  1562,  1633,  1704,  1775,  1846,  1917,  1988,  2059, 
     2130,  2201,  2272,  2343,  2414,  2485,  2556,  2627,  2698,  2769, 
     2840,  2911,  2982,  3053,  3124,  3195,  3266,  3337,  3408,  3479, 
     3550,  3621,  3692,  3763,  3834,  3905,  3976,  4047,  4118,  4189, 
     4260,  4331,  4402,  4473,  4544,  4615,  4544,  4615,  4686,  4544, 
     4544,  4615,  4757,  4828,  4899,  4970,  5041,  5112,  5183,  5254, 
     4544,  4615,  5325,  5396,  5467,  4544,  5538,  5538,  5609,  5680, 
     5751,  5325,  4544,  5822,  5893,  4544,  5964,  6035,  6106,  6177, 
     4544,  4615,  6248,  6319,  6390,  6461,  6532,  6603,  4544,  6674, 
     6674,  6745,  6816,  6887,  6958,  7029,  4544,  7100,  7171,  7242, 
     7313,  7384,  7455,  4544,  7526,  7597,  7668,  7739,  7810,  7881, 
     7952,  8023,  4544,  8094,  8165,  8236,  8307,  8378,  8449,  8520, 
     8591,  8591,  8662,  8733,  8804,  8875,  8875,  8946,  9017,  9088, 
     9159,  9159,  9230,  9301,  9372,  9443,  4544,  9514,  9514,  9585, 
     9656,  9727,  9798,  4544,  4544,  4615,  4544,  4615,  9869,  9940, 
     7597, 10011, 10082, 10153, 10224, 10295, 10366, 10437, 10508,  4544, 
    10579, 10650, 10721, 10792,  4544, 10863, 10934, 11005, 11076,  4544, 
     4544, 11147,  4544, 11218, 11289,  4544, 11218, 11360, 11431,  4544, 
    11360, 11502, 11573,  4544, 11644,  4544, 11715, 11786, 11857, 11928, 
    11999,  4544,  4544, 12070,  4544, 12141, 12212,  4544, 12141, 12283, 
    12354,  4544, 12283, 12425, 12496, 12567,  4544, 12638, 12709, 12780, 
     4544,  4544, 12851, 12922, 12993, 13064, 13135, 13206, 13277, 13348, 
    13419, 13490, 13561, 13632, 13703, 13774, 13845,  4544, 13916, 13987, 
    14058,  4544,  4544,  5538,  5680,  4544, 14129, 14200,  5751, 14271, 
    14342,  5822,  5964,  6035, 14413,  6106,  4544, 14484, 14555, 14626, 
     6177, 14697, 14768,  4544, 12922,  4544,  6674,  6745,  4544, 14839, 
    14910,  6816, 14981, 15052,  4544, 15123, 15194,  7526, 15265,  7739, 
     4544, 15336, 15407,  7810, 15478, 15549, 15620, 15691, 15762, 15833, 
    15904,  8307,  4544, 15975, 16046,  8591,  8662,  4544, 16117, 16188, 
    16259, 16330, 16401, 16472, 16543,  8804,  8591,  8875,  8946,  4544, 
     9017,  9088,  8875,  9159,  9230,  4544, 16614, 16685, 16756, 16827, 
    16898, 16969, 17040, 17111, 17182,  9514,  9585,  4544, 17253, 17324, 
    17395, 17466, 17537, 17608, 17679, 17750, 17821, 17892,  9940, 10082, 
     4544, 17963, 18034, 10153, 18105, 18176, 18247, 18318,  4544, 18389, 
     4544,  4544,  4544,  4544, 18460, 18531, 18602, 18673, 11218,  4544, 
    18744, 18815, 11360,  4544, 18886, 18957, 19028, 19099, 19170, 19241, 
    19312, 19383, 19454, 11928, 12141,  4544, 19525, 19596, 12283,  4544, 
    19667, 19738, 19809, 19880, 19951, 20022, 20093, 20164, 20235,  4544, 
     4544,  4544, 20306, 20377, 20448, 20519, 20590,  4544, 20661, 20732, 
    20803,  4544,  4544,  4544,  4544, 20874,  4544,  4544,  4970, 20945, 
    21016, 21087, 21158, 21229, 21300, 21371, 21442, 21513, 21584, 21655, 
    21726, 21797, 21868, 21939, 22010, 22081, 22010, 22152, 22223, 22152, 
    22294, 22365, 22436, 22507, 22578, 22649, 22720, 22791, 22791, 22862, 
    22933, 23004, 23075, 23075, 23146, 23217,  9372,  9372,  9372, 23288, 
    23359, 23430, 23501, 23501, 23572, 23643,  9727,  9727,  9727, 23714, 
    23785, 10082, 23856, 10153, 23927, 23998, 23998, 24069, 24069, 18602, 
    24140, 11005, 11005, 11005, 24211, 24282, 11218, 11218, 11218, 24353, 
    24424, 11360, 11360, 11360, 24495, 24566, 11502, 11502, 11502, 19170, 
    24637, 24708, 11715, 11715, 11715, 19383, 24779, 24850, 11928, 11928, 
    11928, 24921, 12141, 12141, 12141, 24992, 25063, 12283, 12283, 12283, 
    25134, 25205, 12425, 12425, 12425, 19951, 25276, 25347, 12638, 12638, 
    12638, 20164, 25418,  4544,  4544, 25489, 25560,  4544, 25631, 25702, 
    25773, 25844, 25915, 25986,  7526,  4544,  4544, 26057, 26128, 26199, 
    26270, 26341, 16401, 16898,  9372, 26412, 17537,  9727, 26483,  4544, 
     9940, 11005, 11218, 26554, 11360, 26625, 11502, 26696,  4544, 11715, 
    26767, 11928, 12141, 26838, 12283, 26909, 12425, 26980,  4544, 12638, 
    27051, 27122, 27193, 27264, 27335, 27406, 27477, 27548, 27619, 27690, 
    27761, 27832, 27903, 27974, 28045, 28116, 28187, 28258, 28329, 28400, 
    28471, 28542, 28613,  4970, 28684, 28755, 28826, 28897, 28968,  4544, 
     4544, 29039, 29110, 29181, 29252, 19170, 19383, 29323, 29394, 19951, 
    20164, 29465, 29536, 29607, 29678,  4544,  4544,  4544, 29749, 29820, 
    29891, 29962, 30033, 30104, 30175, 30246,  7242, 30317, 30388, 30459, 
    30530, 30601, 30672, 30743,  4544, 30814, 30885,  9372,  9727, 11218, 
    11360, 12141, 12283, 30956, 31027, 31098, 31169, 31240, 31311, 31382, 
    31453,  4970, 31524, 31595, 31666, 31737, 31808, 31879, 31950, 32021, 
    32092, 32163, 32234, 32305, 32376, 32447, 32518, 32589, 32660, 32731, 
    32802, 32873, 32944, 33015, 33086, 33157, 33228, 33299, 33370, 33441, 
    33512, 33583, 33654, 33725, 33796, 33867, 33938, 34009,  4544, 34080, 
    34151, 34222, 34293,  7242, 34364, 34435, 34506, 34577, 34648, 34719, 
    34790, 34861, 34932, 35003, 35074, 35145, 35216, 35287
  };

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

  /** 
   * The transition table of the DFA
   */
  final private static int yytrans [] = yy_unpack(yy_packed);


  /* error codes */
  final private static int YY_UNKNOWN_ERROR = 0;
  // final private static int YY_ILLEGAL_STATE = 1;
  final private static int YY_NO_MATCH = 2;
  final private static int YY_PUSHBACK_2BIG = 3;

  /* error messages for the codes above */
  final private static String YY_ERROR_MSG[] = {
    "Unkown internal scanner error",		//$NON-NLS-1$
    "Internal error: unknown state",		//$NON-NLS-1$
    "Error: could not match input",		//$NON-NLS-1$
    "Error: pushback value was too large"	//$NON-NLS-1$
  };

  /**
   * YY_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
   */
  private final static byte YY_ATTRIBUTE[] = {
     1,  0,  0,  0,  0,  1,  0,  0,  1,  1,  1,  0,  1,  1,  1,  1, 
     0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
     1,  1,  1,  1,  0,  0,  0,  0,  1,  1,  1,  1,  0,  0,  0,  0, 
     0,  0,  1,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  1,  1, 
     9,  1,  9,  1,  1,  9,  9,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
     9,  1,  1,  1,  1,  9,  1,  1,  1,  1,  1,  1,  9,  1,  1,  9, 
     1,  1,  1,  1,  9,  1,  1,  1,  1,  1,  1,  1,  9,  1,  1,  1, 
     1,  1,  1,  1,  9,  1,  1,  1,  1,  1,  1,  9,  1,  1,  1,  1, 
     1,  1,  1,  1,  9,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
     1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  9,  1,  1,  1, 
     1,  1,  1,  9,  9,  1,  9,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
     1,  1,  1,  9,  1,  1,  1,  1,  9,  1,  1,  1,  1,  9,  9,  1, 
     9,  3,  3,  9,  3,  3,  3,  9,  3,  1,  1,  9,  1,  9,  1,  1, 
     1,  1,  1,  9,  9,  1,  9,  3,  3,  9,  3,  3,  3,  9,  3,  1, 
     1,  1,  9,  1,  1,  1,  9,  9,  1,  1,  0,  1,  0,  1,  2,  0, 
     1,  1,  2,  1,  0,  0,  0,  9,  1,  1,  1,  9,  9,  0,  0,  9, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  9,  1,  1,  0,  0,  1, 
     1,  9,  0,  9,  0,  0,  9,  0,  0,  0,  0,  0,  9,  1,  1,  0, 
     1,  0,  9,  0,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  9,  0, 
     0,  0,  0,  9,  0,  0,  0,  0,  1,  0,  0,  0,  1,  0,  0,  9, 
     0,  0,  1,  0,  0,  9,  0,  0,  0,  0,  1,  0,  0,  1,  1,  0, 
     0,  9,  0,  0,  0,  0,  1,  0,  0,  1,  1,  0,  0,  0,  9,  0, 
     0,  0,  0,  0,  1,  1,  9,  1,  9,  9,  9,  9,  1,  1,  1,  1, 
     2, 13,  3,  2,  2, 13,  3,  2,  0,  1,  1,  0,  1,  1,  1,  1, 
     2, 13,  3,  2,  2, 13,  3,  2,  0,  1,  1,  0,  1,  1,  0,  9, 
     9,  9,  0,  0,  1,  1,  1,  9,  0,  0,  1, 13,  9,  9, 13,  1, 
     9,  9,  1,  1,  1,  0,  0,  0,  0,  1,  0,  0,  1,  0,  0,  1, 
     0,  0,  3,  2,  2,  3,  2,  2,  0,  0,  0,  0,  0,  0,  0,  1, 
     0,  0,  0,  0,  1,  0,  0,  1,  1,  1,  1,  1,  0,  0,  1,  0, 
     0,  1,  1,  1,  1,  1,  0,  1,  0,  1,  0,  3,  2,  3,  2,  1, 
     1,  1,  1,  1,  0,  2,  3,  3,  3,  2,  2,  3,  3,  3,  2,  1, 
     1,  1,  1,  0,  0,  1,  1,  1,  1,  0,  0,  1,  1,  1,  1,  2, 
     3,  3,  3,  2,  2,  3,  3,  3,  2,  1,  1,  1,  1,  0,  0,  1, 
     1,  1,  1,  0,  0,  9,  9,  0,  1,  9,  0,  1,  1,  0,  0,  1, 
     5, 13, 13,  0,  0,  0,  0,  0,  0,  0,  1,  1,  0,  1,  1,  9, 
     5,  1,  3,  2,  3,  2,  1,  0,  9,  1,  0,  1,  3,  2,  3,  2, 
     1,  0,  9,  1,  0,  0,  1,  1,  1,  1,  0,  0,  0,  0,  0,  1, 
     1,  2,  2,  0,  0,  2,  2,  0,  0,  0,  1,  1,  1,  1,  0,  0, 
     0,  9,  9,  1,  1,  2,  2,  1,  1,  2,  2,  1,  1,  0,  1,  1, 
     1,  9,  9,  9,  1,  1,  2,  2,  2,  2,  0,  1,  1,  1,  1,  1, 
     2,  2,  2,  2,  9,  1,  1,  1,  1,  3,  3,  3,  3,  1,  1,  1, 
     1,  1,  1,  1,  1,  1,  0,  1,  0,  0,  0,  0,  0,  1,  1,  1, 
     1,  1,  0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  0,  0,  1,  0, 
     0,  1,  1,  1,  1,  1,  0,  0,  0,  0,  9,  1,  1,  1,  1,  1, 
     0,  0,  0,  0,  1,  1,  1,  1,  0,  0,  1,  1,  0,  1
  };

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

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

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

  /** this buffer contains the current text to be matched and is
      the source of the yytext() string */
  private char yy_buffer[] = new char[16384];

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

  /** the textposition at the last state to be included in yytext */
  private int yy_pushbackPos;

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

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

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

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

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

  /** yy_atEOF == true <=> the scanner has returned a value for EOF */
  private boolean yy_atEOF;

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

  /* user code: */
	private int fTokenCount = 0;
 
	// required holders for white-space compacting
	private boolean fShouldLoadBuffered = false;
	private String fBufferedContext = null;
	private int fBufferedStart = 1;
	private int fBufferedLength = 0;
	private ITextRegion fBufferedEmbeddedContainer = null;
	private ITextRegion fProxyUnknownRegion = null;
	private String f_context = null;

	// state stack for handling embedded regions
	private IntStack fStateStack = new IntStack();
	// a "hint" as to what an embedded region should be evaluated
	private String fEmbeddedHint = UNDEFINED;
	// a "hint" as to what state to enter once an embedded region has
	//   been completed
	private int fEmbeddedPostState = YYINITIAL;
	
	// the container used to create embedded regions
	private ContextRegionContainer fEmbeddedContainer = null;
	private static final String PROXY_CONTEXT = "PROXY_CONTEXT";
	private static final String PROXY_UNKNOWN_CONTEXT = "PROXY_UNKNOWN_CONTEXT";

	private String context = null;
	private int start = 0;
	private int textLength = 0;
	private int length = 0;

	// offset for tracking position specific block tags
	private int fOffset = 0;
	
	// the name of the current tag being opened
	private String fCurrentTagName = null;

	// the name of the current tag inside of an embedded region
	private String internalTagName = null;
	private String internalContext = null;

	// the list of tag name BlockMarkers
	private List fBlockMarkers = new ArrayList(0);
	private List fNestablePrefixes = new ArrayList(1);
	
	// where the last internal container block was found
	private int fLastInternalBlockStart = -1;

	// required to not seek text blocks on an end tag
	private boolean fIsBlockingEnabled = false;
	private boolean fIsCaseSensitiveBlocking = true;

	private static final boolean fForbidJSP = false;
	
	private int fELlevel = 0;

	private JSPParserRegionFactory fRegionFactory = new JSPParserRegionFactory();

	// Is the embedded tag a JSP tag
	private boolean fEmbeddedTag = false;
	// Is the non-embedded tag a JSP tag
	private boolean fContainerTag = false;
	// Is the tokenizer in a non-embedded tag (between < and >)
	private boolean fInTagContainer = false;
	// Is the tokenizer in an embedded tag (between < and >)
	private boolean fInTagEmbedded = false;

	/**
	 * user method 
	 */
	public final void addBlockMarker(BlockMarker marker) {
		if(containsTagName(marker.getTagName()))
			return;
		fBlockMarkers.add(marker);
	}
	/**
	 * user method
	 */
	public final void addNestablePrefix(TagMarker marker) {
		fNestablePrefixes.add(marker);
	}
	/* user method */
	public List getNestablePrefixes() {
		return fNestablePrefixes;
	}
	/**
	 * user method
	 */
	private boolean isNestable(String tagName) {
		//Iterator blocks = fNestablePrefixes.iterator();
		//while(blocks.hasNext()) {
		//	TagMarker marker = (TagMarker)blocks.next();
		//	String markerName = marker.getTagName();
		//	if(tagName.length() > markerName.length() + 1 && tagName.startsWith(markerName) && tagName.charAt(markerName.length()) == ':') {
		//		return marker.isGlobal() || getOffset() >= marker.getMarker().getStart();
		//	}
		//}
		//return false;
		return true;
	}
	/**
	 * user method 
	 */
	public final void removeNestablePrefix(String name) {
		if (fNestablePrefixes != null) {
			Iterator nestables = fNestablePrefixes.iterator();
			while (nestables.hasNext()) {
				if (((TagMarker) nestables.next()).getTagName().equalsIgnoreCase(name))
					nestables.remove();
			}
		}
	}
	/**
	 * user method 
	 */
	public final void removeBlockMarker(BlockMarker marker) {
		fBlockMarkers.remove(marker);
	}
	/**
	 * user method 
	 */
	public final void removeBlockMarker(String tagname) {
		if (fBlockMarkers != null) {
			Iterator blocks = fBlockMarkers.iterator();
			while (blocks.hasNext()) {
				if (((BlockMarker) blocks.next()).getTagName().equals(tagname))
					blocks.remove();
			}
		}
	}
	/* user method */
	private final void assembleEmbeddedTagSequence(String startType, String endTagName) {
		assembleEmbeddedContainer(startType, null, endTagName);
	}
	/* user method */
	private final void assembleEmbeddedContainer(String startType, String[] endTypes) {
		assembleEmbeddedContainer(startType, endTypes, null);
	}
	/* user method */
	private final void assembleEmbeddedContainer(String startType, String endType) {
		assembleEmbeddedContainer(startType, new String[]{endType}, null);
	}
	/**
	 *  user method 
	 * 
	 * Assembles an embedded container beginning with the given startType as
	 * the first ContextRegion within it and of the type fEmbeddedHint.  The
	 * endTypes[] array contains the context types that will cause a successful
	 * exit.  Use of the endTagName parameter alters this behavior to force an
	 * exit on an XML_TAG_CLOSE after seeing an XML_TAG_NAME whose significant
	 * text matches the endTagName String.  All contents in between are
	 * insignificant, and yes, this means comments are allowed inside.
	 **/
	private final void assembleEmbeddedContainer(String startType, String[] endTypes, String endTagName) {
		// the context of the region being added to the embedded container
		internalContext = startType;
		// keep track of where this container began; to provide relative indeces for the regions
		int containerStart = yychar;
		boolean notFinished = true;
		// keep track of where we seem to be so that the endTagName can be checked
		boolean isInEndTag = false;
		boolean isInFirstTag = true;
		// create the embedded container and setup its "type"
		if (fEmbeddedContainer == null) {
			fEmbeddedContainer = new ContextRegionContainer();
			fEmbeddedContainer.setType(fEmbeddedHint);
			fEmbeddedContainer.setStart(containerStart);
			// TODO: parent region needs to be set .... but not sure where to get it from 
			//		fEmbeddedContainer.setParent(parentRegion);
		}
		int initialLength = fEmbeddedContainer.getRegions().size();
		containerStart = fEmbeddedContainer.getStart();
		while (notFinished) {
			// add the region to the container
			if (internalContext != null && internalContext != PROXY_CONTEXT) {
				ITextRegion newToken = fRegionFactory.createToken(internalContext, yychar - containerStart, yylength(), yylength());
				fEmbeddedContainer.getRegions().add(newToken);
				fEmbeddedContainer.setLength(fEmbeddedContainer.getLength() + yylength());
				fEmbeddedContainer.setTextLength(fEmbeddedContainer.getTextLength() + yylength());
				// DW, 4/16/2003 token regions no longer have parents
				//newToken.setParent(fEmbeddedContainer);
			}
			try {
				// longscan determines whether to attempt a blockTagScan within the embedded container
				boolean longscan = false;
				// save the tokenizer state in case of a block tag scan
				int previousState = yystate();
				String previousCurrentTagName = fCurrentTagName;
				int previousPostState = fEmbeddedPostState;
				String previousEmbeddedHint = fEmbeddedHint;
				// determine if a block tag scan is necessary
				if (internalContext == XML_TAG_NAME) {
					internalTagName = yytext();
					if (endTagName != null && endTagName.length() == 0){
						endTagName = internalTagName;
					}
					if(!isNestable(internalTagName)) {
						internalTagName = null;
						// snagged a tag name we shouldn't have
						fEmbeddedPostState = ST_ABORT_EMBEDDED;
						notFinished = false;
					}
				}
				else if (internalContext == XML_TAG_OPEN || internalContext == XML_END_TAG_OPEN) {
					internalTagName = null;
				}
				// do upkeep for endTagName usage; must be here since the next token could be the close
				if (internalContext == XML_END_TAG_OPEN) {
					isInEndTag = true;
				} else if (internalContext == XML_TAG_CLOSE) {
					isInFirstTag = isInEndTag = false;
				} else {
				 	ITextRegionList embeddedRegions = fEmbeddedContainer.getRegions();
					if (embeddedRegions.size() > 2 && (embeddedRegions.get(embeddedRegions.size()-1)).getType() == XML_TAG_CLOSE && (embeddedRegions.get(embeddedRegions.size() - 3)).getType() == XML_TAG_OPEN && internalTagName != null) {
						if (containsTagName(internalTagName)) {
							longscan = true;
							yybegin(ST_BLOCK_TAG_SCAN);
						}
					}
				}
				if (longscan)
					fCurrentTagName = internalTagName;
				// read the next region and context
				internalContext = primGetNextToken();
				if (longscan) {
					// Returning from a block tag scan requires restoring some state variables
					// as well as handling the block region and setting up for normal scanning
					// inside the embedded container
					ITextRegion newToken = fRegionFactory.createToken(internalContext, yychar - containerStart, yylength(), yylength());
					fEmbeddedContainer.getRegions().add(newToken);
					fEmbeddedContainer.setLength(fEmbeddedContainer.getLength() + yylength());
					fEmbeddedContainer.setTextLength(fEmbeddedContainer.getTextLength() + yylength());
					// DW, 4/16/2003 token regions no longer have parents
					// newToken.setParent(fEmbeddedContainer);
					longscan = false;
					fEmbeddedPostState = previousPostState;
					fEmbeddedHint = previousEmbeddedHint;
					fCurrentTagName = previousCurrentTagName;
					yybegin(previousState);
					internalContext = primGetNextToken();
				}
			} catch (IOException e) {
				// primGetNextToken() calls may throw an IOException
				// catch and do nothing since the isEOF check below
				// will properly exit if the input was too short
			} catch (Exception f) {
				// some other exception happened; never should
				Logger.logException(f);
			}
			boolean isEndingType = yystate() == ST_ABORT_EMBEDDED;
			ITextRegionList embeddedList = fEmbeddedContainer.getRegions();
			if(!isEndingType) {
				// check for ending context
				if (endTagName == null) {
					for (int i = 0; i < endTypes.length; i++) {
						isEndingType = isEndingType || (internalContext == endTypes[i]) || (embeddedList.size() - initialLength) >= 2 && (embeddedList.get(embeddedList.size()-1)).getType() == endTypes[i];
					}
				}
				else {
					isEndingType = ((isInEndTag && internalContext == XML_TAG_CLOSE) || (isInFirstTag && internalContext == XML_EMPTY_TAG_CLOSE)) && internalTagName != null && internalTagName.equals(endTagName);
				}
			}
			notFinished = notFinished && ((!isEndingType) && !isEOF() && (endTagName != null || internalContext != UNDEFINED) && !(internalContext == PROXY_CONTEXT && (embeddedList.get(embeddedList.size()-1)).getType() == UNDEFINED));
		}
		// finish adding the last context
		if (internalContext != null && internalContext != PROXY_CONTEXT) {
			ITextRegion newToken = fRegionFactory.createToken(internalContext, yychar - containerStart, yylength(), yylength());
			fEmbeddedContainer.getRegions().add(newToken);
			// DW, 4/16/2003 token regions no longer have parents
			//newToken.setParent(fEmbeddedContainer);
			fEmbeddedContainer.setLength(yychar - containerStart + yylength());
			fEmbeddedContainer.setTextLength(yychar - containerStart + yylength());
		}
		yybegin(fEmbeddedPostState);
	}
	/* user method */
	public final boolean isCaseSensitiveBlocking() {
		return fIsCaseSensitiveBlocking;
	}
	/* user method */
	public final void setCaseSensitiveBlocking(boolean newValue) {
		fIsCaseSensitiveBlocking = newValue;
	}
	/* user method */
	public boolean getBlockMarkerAllowsJSP() {
		return getBlockMarkerAllowsJSP(fCurrentTagName);
	}
	/* user method */
	public boolean getBlockMarkerAllowsJSP(String name) {
		Iterator iterator = fBlockMarkers.iterator();
		while(iterator.hasNext()) {
			BlockMarker marker = (BlockMarker)iterator.next();
			boolean casesensitive = marker.isCaseSensitive();
			if(casesensitive && marker.getTagName().equals(name))
				return marker.allowsJSP();
			else if(!casesensitive && marker.getTagName().equalsIgnoreCase(name))
				return marker.allowsJSP();
		}
		return true;
	}
	/* user method */
	public boolean getBlockMarkerCaseSensitivity() {
		return getBlockMarkerCaseSensitivity(fCurrentTagName);
	}
	public boolean getBlockMarkerCaseSensitivity(String name) {
		Iterator iterator = fBlockMarkers.iterator();
		while(iterator.hasNext()) {
			BlockMarker marker = (BlockMarker)iterator.next();
			boolean casesensitive = marker.isCaseSensitive();
			if(casesensitive && marker.getTagName().equals(name))
				return casesensitive;
			else if(!casesensitive && marker.getTagName().equalsIgnoreCase(name))
				return casesensitive;
		}
		return true;
	}
	/* user method */
	public String getBlockMarkerContext() {
		return getBlockMarkerContext(fCurrentTagName);
	}
	/* user method */
	public String getBlockMarkerContext(String name) {
		Iterator iterator = fBlockMarkers.iterator();
		while(iterator.hasNext()) {
			BlockMarker marker = (BlockMarker)iterator.next();
			if(marker.getTagName().equals(name))
				return marker.getContext();
		}
		return BLOCK_TEXT;
	}
	/* user method */
	public List getBlockMarkers() {
		return fBlockMarkers;
	}
	/* user method */
	public final int getOffset() {
		return fOffset + yychar;
	}
	private final boolean isBlockMarker() {
		return isBlockMarker(fCurrentTagName);
	}
	private final boolean isBlockMarker(String tagName) {
		if (!fIsBlockingEnabled)
			return false;
		return containsTagName(tagName);
	}
	/**
	 * user method
	 */
	public final void beginBlockTagScan(String newTagName) {
		beginBlockMarkerScan(newTagName, BLOCK_TEXT);
	}
	/**
	 * user method
	 *
	 * Special tokenizer setup.  Allows tokenization to be initiated at the
	 * start of a text block within a "newTagName" tag.
	 *
	 * Example: 
	 *	Tokenizer toker = new Tokenizer();
	 *	toker.setCaseSensitiveBlocking(false);
	 *	toker.reset(new java.io.StringReader("afiuhqwkejhtasihgalkwhtq</scripter></scr></script>asgdasga"));
	 *	toker.beginBlockMarkerScan("script", BLOCK_TEXT);
	 *	toker.getRegions(); 
	 *
	 * Returns:
	 *	BLOCK_TEXT: 0-40
	 *	XML_END_TAG_OPEN: 41-42
	 *	XML_TAG_NAME: 43-48
	 *	XML_TAG_CLOSE: 49-49
	 *	XML_CONTENT: 50-57
	 *
	 */
	public final void beginBlockMarkerScan(String newTagName, String blockcontext) {
		yybegin(ST_BLOCK_TAG_SCAN);
		fCurrentTagName = newTagName;
	}

/**
 * Method doScan.
 * 
 * Returns a context region for all of the text from the current position upto the end of input or
 * to right *before* the first occurence of searchString
 * 
 * @param searchString - target string to search for ex.: "-->", "</tagname"
 * @param requireTailSeparator - whether the target must be immediately followed by whitespace or '>'
 * @param allowJSP - check for and allow for JSP markup <%%>
 * @param context - the context of the scanned region if non-zero length
 * @param exitState - the state to go to if the region was of non-zero length
 * @param abortState - the state to go to if the searchString was found immediately
 * @return String - the context found: the desired context on a non-zero length match, the abortContext on immediate success
 * @throws IOException
 */
private final String doScan(String searchString, boolean requireTailSeparator, boolean allowJSP, boolean allowCDATA, String searchContext, int exitState, int immediateFallbackState) throws IOException {
	boolean stillSearching = true;
	boolean wasBlockingEnabled = fIsBlockingEnabled;
	try {
		// Disable further block (probably)
		fIsBlockingEnabled = false;
		int searchStringLength = searchString.length();
		int n = 0;
		char lastCheckChar;
		int i;
		boolean same = false;
		// Check for JSP starts ("<%") if the tag is global like SCRIPT or STYLE
		boolean checkJSPs = allowJSP && !fForbidJSP;
		boolean checkedForJSPsOnce = !checkJSPs;
		boolean checkedJSPsAtStartOnce = false;
		
		while (stillSearching) {
			n = 0;
			// Ensure that enough data from the input exists to compare against the search String.
			n = yy_advance();
			while(n != YYEOF && yy_currentPos < searchStringLength)
				n = yy_advance();
	//		c = (char) n;
			// If the input was too short or we've exhausted the input, stop immediately.
			if (n == YYEOF && checkedForJSPsOnce) {
				stillSearching = false;
			}
			else {
				/**
				 * Look for starting JSPs "<%"
				 */
				checkedForJSPsOnce = true;
				// 1) yy_currentPos - searchStringLength : There's at least searchStringLength of input available; once that's read, check for JSPs
				// ---
				// Look for a JSP beginning at current-searchStringLength; if so, backup and switch scanner states to handle it.
				// Ensure that we've not encountered a complete block (<%%>) that was *shorter* than the closeTagString and
				// thus found twice at current-targetLength [since the first scan would have come out this far anyway].
				if(checkJSPs && yy_currentPos > searchStringLength && yy_currentPos - searchStringLength != fLastInternalBlockStart && 
					yy_buffer[yy_currentPos - searchStringLength] == '<' && yy_buffer[yy_currentPos - searchStringLength + 1] == '%') {
					fLastInternalBlockStart = yy_markedPos = yy_currentPos - searchStringLength;
					yy_currentPos = yy_markedPos + 1;
					int resumeState = yystate();
					yybegin(ST_BLOCK_TAG_INTERNAL_SCAN);
					if(yy_markedPos == yy_startRead) {
						String jspContext = primGetNextToken();
						yybegin(resumeState);
						return jspContext;
					}
					return searchContext;
				}
				// 2) yy_currentPos - jspstarter.length : There's not searchStringLength of input available; check for a JSP 2 spots back in what we could read
				// ---
				// Look for a JSP beginning at the current position; this case wouldn't be handled by the preceding section
				// since it relies upon *having* closeTagStringLength amount of input to work as designed.  Must be sure we don't
				// spill over the end of the buffer while checking.
				else if(checkJSPs && yy_startRead != fLastInternalBlockStart && yy_currentPos > 0 && yy_currentPos < yy_buffer.length - 1 &&
						yy_buffer[yy_currentPos - 1] == '<' && yy_buffer[yy_currentPos] == '%') {
					fLastInternalBlockStart = yy_markedPos = yy_currentPos - 1;
					yy_currentPos = yy_markedPos + 1;
					int resumeState = yystate();
					yybegin(ST_BLOCK_TAG_INTERNAL_SCAN);
					if(yy_markedPos == yy_startRead) {
						String jspContext = primGetNextToken();
						yybegin(resumeState);
						return jspContext;
					}
					return searchContext;
				}
				// 3) yy_currentPos..(yy_currentPos+jspStartlength-1) : Check at the start of the block one time
				// ---
				// Look for a JSP beginning immediately in the block area; this case wouldn't be handled by the preceding section
				// since it relies upon yy_currentPos equaling exactly the previous end +1 to work as designed.
				else if(checkJSPs && !checkedJSPsAtStartOnce && yy_startRead != fLastInternalBlockStart && yy_startRead > 0 &&
						yy_startRead < yy_buffer.length - 1 && yy_buffer[yy_startRead] == '<' && yy_buffer[yy_startRead + 1] == '%') {
					checkedJSPsAtStartOnce = true;
					fLastInternalBlockStart = yy_markedPos = yy_startRead;
					yy_currentPos = yy_markedPos + 1;
					int resumeState = yystate();
					yybegin(ST_BLOCK_TAG_INTERNAL_SCAN);
					if(yy_markedPos == yy_startRead) {
						String jspContext = primGetNextToken();
						yybegin(resumeState);
						return jspContext;
					}
					return searchContext;
				}
	
	
				/**
				 * Look for starting CDATA "<![CDATA["
				 */
				// 1) yy_currentPos - searchStringLength: There's at least searchStringLength of input available; once that's read, check for CDATA
				// ---
				// Look for a CDATA beginning at current-searchStringLength; if so, backup and switch scanner states to handle it.
				// Ensure that we've not encountered a complete block (<[!CDATA[]]>) that was *shorter* than the closeTagString and
				// thus found twice at current-targetLength [since the first scan would have come out this far anyway].
	/*			if(checkCDATA && yy_currentPos > searchStringLength && yy_currentPos + searchStringLength < yy_buffer.length && yy_currentPos - searchStringLength != fLastInternalBlockStart && 
					charsMatch(cdataStarter, yy_buffer, 0, yy_currentPos - searchStringLength)) {
					fLastInternalBlockStart = yy_markedPos = yy_currentPos - searchStringLength;
					yy_currentPos = yy_markedPos + 1;
					int resumeState = yystate();
					// go to a state where CDATA can be found
					if (fEmbeddedContainer == null) {
						fEmbeddedContainer = new ContextRegionContainer();
						fEmbeddedContainer.setType(searchContext);
						fEmbeddedContainer.setStart(yychar);
					}
					ITextRegion newToken = fRegionFactory.createToken(searchContext, yychar, yylength(), yylength());
					fEmbeddedContainer.getRegions().add(newToken);
					fEmbeddedContainer.setLength(fEmbeddedContainer.getLength() + yylength());
					fEmbeddedContainer.setTextLength(fEmbeddedContainer.getTextLength() + yylength());
					yybegin(YYINITIAL);
					String context = primGetNextToken();
					if(context.equals(XMLRegionContexts.XML_CDATA_OPEN)) {
						assembleEmbeddedContainer(XMLRegionContexts.XML_CDATA_OPEN, XMLRegionContexts.XML_CDATA_CLOSE);
					}
					yybegin(resumeState);
					return searchContext;
				}
	*//*
				// 2) yy_currentPos - cdataStarter.length: There's not searchStringLength of input available; check for a CDATA right here spots back in what we could read
				// ---
				// Look for a JSP beginning at the current position; this case wouldn't be handled by the preceding section
				// since it relies upon *having* closeTagStringLength amount of input to work as designed.  Must be sure we don't
				// spill over the end of the buffer while checking.
				else if(checkCDATA && yy_startRead != fLastInternalBlockStart && yy_currentPos > 0 && yy_currentPos < yy_buffer.length - 1 &&
						yy_buffer[yy_currentPos - 1] == '<' && yy_buffer[yy_currentPos] == '%') {
					fLastInternalBlockStart = yy_markedPos = yy_currentPos - 1;
					yy_currentPos = yy_markedPos + 1;
					int resumeState = yystate();
					yybegin(ST_BLOCK_TAG_INTERNAL_SCAN);
					if(yy_markedPos == yy_startRead) {
						String jspContext = primGetNextToken();
						yybegin(resumeState);
						return jspContext;
					}
					return searchContext;
				}
				// 3) yy_currentPos : Check at the start of the block one time
				// ---
				// Look for a JSP beginning immediately in the block area; this case wouldn't be handled by the preceding section
				// since it relies upon yy_currentPos equaling exactly the previous end +1 to work as designed.
				else if(checkCDATA && !checkedForCDATAOnce && yy_startRead != fLastInternalBlockStart && yy_startRead > 0 &&
						yy_startRead < yy_buffer.length - 1 && yy_buffer[yy_startRead] == '<' && yy_buffer[yy_startRead + 1] == '%') {
					checkedForCDATAOnce = true;
					fLastInternalBlockStart = yy_markedPos = yy_startRead;
					yy_currentPos = yy_markedPos + 1;
					int resumeState = yystate();
					yybegin(ST_BLOCK_TAG_INTERNAL_SCAN);
					if(yy_markedPos == yy_startRead) {
						String jspContext = primGetNextToken();
						yybegin(resumeState);
						return jspContext;
					}
					return searchContext;
				}
	*/
				// Check the characters in the target versus the last targetLength characters read from the buffer
				// and see if it matches
				if (n == YYEOF) {
					stillSearching = false;
				}
				else {
					same = true;
					// safety check for array accesses
					if(yy_currentPos >= searchStringLength && yy_currentPos <= yy_buffer.length) {
						for(i = 0; i < searchStringLength && same; i++) {
							if(fIsCaseSensitiveBlocking)
								same = yy_buffer[i + yy_currentPos - searchStringLength] == searchString.charAt(i);
							else
								same = Character.toLowerCase(yy_buffer[i + yy_currentPos - searchStringLength]) == Character.toLowerCase(searchString.charAt(i));
						}
					}
					// safety check failed; no match is possible right now
					else {
						same = false;
					}
				}
				if (same && requireTailSeparator && yy_currentPos < yy_buffer.length) {
					// Additional check for close tags to ensure that targetString="</script" doesn't match
					// "</scriptS"
					lastCheckChar = yy_buffer[yy_currentPos];
					// Succeed on "</script>" and "</script "
					if(lastCheckChar == '>' || Character.isWhitespace(lastCheckChar))
						stillSearching = false;
				}
				else {
					stillSearching = !same || (yy_currentPos < yy_startRead + searchStringLength);
				}
			}
		}
		if (n != YYEOF || same) {
			// We've stopped short of the end or definitely found a match
			yy_markedPos = yy_currentPos - searchStringLength;
			yy_currentPos = yy_markedPos + 1;
			// If the searchString occurs at the very beginning of what would have
			// been a Block, resume scanning normally immediately
			if (yy_markedPos == yy_startRead) {
				yybegin(immediateFallbackState);
				return primGetNextToken();
			}
		}
		else {
			// We ran through the rest of the input
			yy_markedPos = yy_currentPos;
			yy_currentPos++;
		}
		yybegin(exitState);
		// If the ending occurs at the very beginning of what would have
		// been a Block, resume scanning normally immediately
		if(yy_markedPos == yy_startRead)
			return primGetNextToken();
		return searchContext;
	}
	finally {
		fIsBlockingEnabled = wasBlockingEnabled;
	}
}
/**
 * user method 
 * does a lookahead for the current tag name
 */
private final String doBlockTagScan() throws IOException {
	fIsCaseSensitiveBlocking = getBlockMarkerCaseSensitivity();
	return doScan("</" + fCurrentTagName, true, getBlockMarkerAllowsJSP(), true, getBlockMarkerContext(fCurrentTagName), YYINITIAL, YYINITIAL);
}
	/**
	 * user method
	 *
	 * Converts the raw context String returned by the primGetNextToken()
	 * method into a full ITextRegion by pulling in values for the
	 * current offset within the scanning text.
	 *
	 * Returns null when EOF is encountered and attaches intermittently
	 * discovered whitespace onto the end of useful regions.
	 *
	 * Note that this algorithm caches the token following the one being returned
	 * so that whitespace can be collapsed.
	 */
	public final ITextRegion getNextToken() throws IOException {
		fEmbeddedContainer = null;
		// load the starting non-whitespace token (assume that it is so)
		if (fShouldLoadBuffered) {
			if (fBufferedEmbeddedContainer != null) {
				ITextRegion container = fBufferedEmbeddedContainer;
				fBufferedEmbeddedContainer = null;
				fShouldLoadBuffered = false;
				return container;
			}
			context = fBufferedContext;
			start = fBufferedStart;
			textLength = length = fBufferedLength;
			fShouldLoadBuffered = false;
		} else {
			context = primGetNextToken();
			if (context == PROXY_CONTEXT) {
				return fEmbeddedContainer;
			} else if (context == XML_TAG_NAME || f_context == JSP_ROOT_TAG_NAME || f_context == JSP_DIRECTIVE_NAME) {
				if(containsTagName(yy_buffer, yy_startRead, yy_markedPos-yy_startRead))
					fCurrentTagName = yytext();
				else
					fCurrentTagName = null;
			} else if (context == XML_TAG_OPEN) {
				fIsBlockingEnabled = true;
			} else if (context == XML_END_TAG_OPEN) {
				fIsBlockingEnabled = false;
			}
			start = yychar;
			textLength = length = yylength();
			if (yy_atEOF) {
				fTokenCount++;
				return null;
			}
		}
		// store the next token
		f_context = primGetNextToken();
		if (f_context == PROXY_CONTEXT) {
			fBufferedEmbeddedContainer = fEmbeddedContainer;
			fShouldLoadBuffered = true;
		} else if (f_context == XML_TAG_NAME || f_context == JSP_ROOT_TAG_NAME || f_context == JSP_DIRECTIVE_NAME) {
			if(containsTagName(yy_buffer, yy_startRead, yy_markedPos-yy_startRead))
				fCurrentTagName = yytext();
			else
				fCurrentTagName = null;
		} else if (f_context == XML_TAG_OPEN) {
			fIsBlockingEnabled = true;
		} else if (f_context == XML_END_TAG_OPEN) {
			fIsBlockingEnabled = false;
		} else if (f_context == PROXY_UNKNOWN_CONTEXT) {
			fBufferedEmbeddedContainer = fProxyUnknownRegion;
		}
		fBufferedContext = f_context;
		fBufferedStart = yychar;
		fBufferedLength = yylength();
		fShouldLoadBuffered = true;
		if (fBufferedContext == WHITE_SPACE) {
			fShouldLoadBuffered = false;
			length += fBufferedLength;
		}
		if (context == null) {
			// EOF
			if (Debug.debugTokenizer) {
				System.out.println(getClass().getName() + " discovered " + fTokenCount + " tokens."); //$NON-NLS-2$//$NON-NLS-1$
			}
			return null;
		}
		fTokenCount++;
		return fRegionFactory.createToken(context, start, textLength, length, null, fCurrentTagName);
	}
	/* user method */
	public JSPTokenizer(){
		super();
	}
	/* user method */
	public JSPTokenizer(char[] charArray){
			this(new CharArrayReader(charArray));
	}
	/* user method */
	public void reset(char[] charArray) {
		reset(new CharArrayReader(charArray), 0);
	}
	/* user method */
	public void reset(char[] charArray, int newOffset) {
		reset(new CharArrayReader(charArray), newOffset);
	}
	/* user method */
	public void reset(java.io.InputStream in) {
		reset(new java.io.InputStreamReader(in), 0);
	}
	/* user method */
	public void reset(java.io.InputStream in, int newOffset) {
		reset(new java.io.InputStreamReader(in), newOffset);
	}
	/* user method */
	public void reset(java.io.Reader in) {
		reset(in, 0);
	}
	/**
	 * user method *
	 *
	 * Reset internal counters and vars to "newly created" values, in the hopes
	 * that resetting a pre-existing tokenizer is faster than creating a new one.
	 *
	 * This method contains code blocks that were essentially duplicated from the
	 * <em>generated</em> output of this specification before this method was
	 * added.  Those code blocks were under the above copyright.
	 */
	public void reset(java.io.Reader in, int newOffset) {
		if (Debug.debugTokenizer) {
			System.out.println("resetting tokenizer");//$NON-NLS-1$
		}
		fOffset = newOffset;
	
		/* the input device */
		yy_reader = in;
	
		/* the current state of the DFA */
		yy_state = 0;
	
		/* the current lexical state */
		yy_lexical_state = YYINITIAL;
	
		/* this buffer contains the current text to be matched and is
		the source of the yytext() string */
		java.util.Arrays.fill(yy_buffer, (char)0);
	
		/* the textposition at the last accepting state */
		yy_markedPos = 0;
	
		/* the textposition at the last state to be included in yytext */
		yy_pushbackPos = 0;
	
		/* the current text position in the buffer */
		yy_currentPos = 0;
	
		/* startRead marks the beginning of the yytext() string in the buffer */
		yy_startRead = 0;
	
		/** 
		 * endRead marks the last character in the buffer, that has been read
		 * from input 
		 */
		yy_endRead = 0;
	
		/* number of newlines encountered up to the start of the matched text */
		//yyline = 0;
	
		/* the number of characters up to the start of the matched text */
		yychar = 0;
	
		/* yy_atEOF == true <=> the scanner has returned a value for EOF */
		yy_atEOF = false;
	
		/* denotes if the user-EOF-code has already been executed */
		yy_eof_done = false;
	
	
		/* user vars: */
		fTokenCount = 0;
	 
		fShouldLoadBuffered = false;
		fBufferedContext = null;
		fBufferedStart = 1;
		fBufferedLength = 0;
		fStateStack = new IntStack();
	
		fLastInternalBlockStart = -1;
	
		context = null;
		start = 0;
		textLength = 0;
		length = 0;
	
		fEmbeddedContainer = null;
		
		fELlevel = 0;
	}
	/**
	 * user method
	 *
	 */
	public BlockTokenizer newInstance() {
		JSPTokenizer newInstance = new JSPTokenizer();
		// global tagmarkers can be shared; they have no state and 
		// are never destroyed (e.g. 'release')
		for(int i = 0; i < fBlockMarkers.size(); i++) {
			BlockMarker blockMarker = (BlockMarker) fBlockMarkers.get(i);
			if(blockMarker.isGlobal())
				newInstance.addBlockMarker(blockMarker);
		}
		for(int i = 0; i < fNestablePrefixes.size(); i++) {
			TagMarker marker = (TagMarker) fNestablePrefixes.get(i);
			if(marker.isGlobal())
				newInstance.addNestablePrefix(marker);
		}
		return newInstance;
	}
	/* user method */
	private final String scanXMLCommentText() throws IOException {
		// Scan for '-->' and return the text up to that point as
		//   XML_COMMENT_TEXT unless the string occurs IMMEDIATELY, in which
		//  case change to the ST_XML_COMMENT_END state and return the next
		//  context as usual.
		return doScan("-->", false, true, true, XML_COMMENT_TEXT, ST_XML_COMMENT_END, ST_XML_COMMENT_END);
	}
	/* user method */
	private final String scanJSPCommentText() throws IOException {
		// Scan for '--%>' and return the text up to that point as
		//   JSP_COMMENT_TEXT unless the string occurs IMMEDIATELY, in which
		//  case change to the ST_JSP_COMMENT_END state and return the next
		//  context as usual.
		return doScan("--%>", false, false, true, JSP_COMMENT_TEXT, ST_JSP_COMMENT_END, ST_JSP_COMMENT_END);
	}
	
	/* user method */
	private boolean isJspTag() {
		return (fContainerTag && fEmbeddedContainer != null) || (fContainerTag && fInTagContainer) || (fEmbeddedTag && fInTagEmbedded);
	}


  /**
   * 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 JSPTokenizer(java.io.Reader in) {
    this.yy_reader = 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 JSPTokenizer(java.io.InputStream in) {
    this(new java.io.InputStreamReader(in));
  }

  /** 
   * Unpacks the compressed DFA transition table.
   *
   * @param packed   the packed transition table
   * @return         the unpacked transition table
   */
  private static int [] yy_unpack(String packed) {
    int [] trans = new int[35358];
    int i = 0;  /* index in packed string  */
    int j = 0;  /* index in unpacked array */
    while (i < 9486) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      value--;
      do trans[j++] = value; while (--count > 0);
    }
    return trans;
  }

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


  /**
   * Gets the next input character.
   *
   * @return      the next character of the input stream, EOF if the
   *              end of the stream is reached.
   * @exception   IOException  if any I/O-Error occurs
   */
  private int yy_advance() throws java.io.IOException {

    /* standard case */
    if (yy_currentPos < yy_endRead) return yy_buffer[yy_currentPos++];

    /* if the eof is reached, we don't need to work hard */ 
    if (yy_atEOF) return YYEOF;

    /* otherwise: need to refill the buffer */

    /* first: make room (if you can) */
    if (yy_startRead > 0) {
      System.arraycopy(yy_buffer, yy_startRead, 
                       yy_buffer, 0, 
                       yy_endRead-yy_startRead);

      /* translate stored positions */
      yy_endRead-= yy_startRead;
      yy_currentPos-= yy_startRead;
      yy_markedPos-= yy_startRead;
      yy_pushbackPos-= yy_startRead;
      yy_startRead = 0;
    }

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

    /* finally: fill the buffer with new input */
    int numRead = yy_reader.read(yy_buffer, yy_endRead, 
                                            yy_buffer.length-yy_endRead);

    if ( numRead == -1 ) return YYEOF;

    yy_endRead+= numRead;

    return yy_buffer[yy_currentPos++];
  }

    
  /**
   * Closes the input stream.
   */
  final public void yyclose() throws java.io.IOException {
    yy_atEOF = true;            /* indicate end of file */
    yy_endRead = yy_startRead;  /* invalidate buffer    */
    yy_reader.close();
  }


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

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


  /**
   * Returns the text matched by the current regular expression.
   */
  final public String yytext() {
    return new String( yy_buffer, yy_startRead, yy_markedPos-yy_startRead );
  }

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


  /**
   * Reports an error that occured while scanning - from the SED JFlex skeleton
   *
   * @param   errorCode  the code of the errormessage to display
   */
  private void yy_ScanError(int errorCode) {
    try {
      Logger.log(Logger.ERROR, YY_ERROR_MSG[errorCode]);
    }
    catch (ArrayIndexOutOfBoundsException e) {
      Logger.log(Logger.ERROR, YY_ERROR_MSG[YY_UNKNOWN_ERROR]);
    }
    // DO NOT EXIT the VM on an error
    // System.exit(1);
  } 


  /**
   * 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()!
   */
  void yypushback(int number) {
    if ( number > yylength() )
      yy_ScanError(YY_PUSHBACK_2BIG);

    yy_markedPos -= number;
  }

	/**
	 * user method - skeleton.sed
	 */
	protected final boolean containsTagName(char[] markerTagName, int offset, int tagnameLength) {
		for(int j = 0; j < fBlockMarkers.size(); j++) {
			BlockMarker marker = (BlockMarker)fBlockMarkers.get(j);
			if(marker.getTagName().length() == tagnameLength) {
				boolean matchesSoFar = true;
				for(int i = 0; i < tagnameLength && matchesSoFar; i++) {
					if(marker.isCaseSensitive()) {
						if(marker.getTagName().charAt(i) != markerTagName[i + offset])
							matchesSoFar = false;
					}
					else {
						if(Character.toLowerCase(marker.getTagName().charAt(i)) != Character.toLowerCase(markerTagName[i + offset]))
							matchesSoFar = false;
					}
				}
				if(matchesSoFar)
					return true;
			}
		}
		return false;
	}

	/**
	 * user method - skeleton.sed
	 *
	 * Return ALL of the regions scannable within the remaining text
	 * Note: for verification use
	 */
	public final List getRegions() {
		List tokens = new ArrayList();
		ITextRegion region = null;
		try {
			region = getNextToken();
			while(region != null) {
				if (region != null) {
					tokens.add(region);
				}
				region = getNextToken();
			}
		}
		catch (StackOverflowError e) {
			Logger.logException(getClass().getName()+": input could not be tokenized correctly at position " + getOffset(), e);//$NON-NLS-1$
			throw e;
		}
		catch (Exception e) {
			// Since this is convenience method and NOT the recommended 
			// way of getting tokens, many errors are simply hidden
			Logger.logException("Exception not handled retrieving regions: " + e.getLocalizedMessage(), e);//$NON-NLS-1$
		}
		return tokens;
	}
	/**
	 * user method - skeleton.sed
	 */
	private final void dump(String s) {
		if (Debug.debugTokenizer) {
			System.out.println(s + " (" + yychar + "-" + //$NON-NLS-2$//$NON-NLS-1$
				(yylength() + yychar) + "):\'" +//$NON-NLS-1$
					StringUtils.escape(yytext()) + "\'");//$NON-NLS-1$
		}
	}
	/* user method  - skeleton.sed */
	public final boolean isEOF() {
		return yy_atEOF;
	}
/* user method - skeleton.sed */
protected final boolean containsTagName(String markerTagName) {
	Iterator blocks = fBlockMarkers.iterator();
	while(blocks.hasNext()) {
		BlockMarker marker = (BlockMarker)blocks.next();
		if(marker.isCaseSensitive()) {
			if(marker.getTagName().equals(markerTagName))
				return true;
		}
		else {
			if(marker.getTagName().equalsIgnoreCase(markerTagName))
				return true;
		}
	}
	return false;
}

  /**
   * Contains user EOF-code, which will be executed exactly once,
   * when the end of file is reached
   */
  private void yy_do_eof() {
    if (!yy_eof_done) {
      yy_eof_done = true;
    // do nothing, this is the downstream parser's job

    }
  }


  /**
   * 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   IOException  if any I/O-Error occurs
   */
  public String primGetNextToken() throws java.io.IOException {
    int yy_input;
    int yy_action;

    yy_pushbackPos = -1;
    boolean yy_was_pushback;

    while (true) {

      yychar+= yylength();

      yy_action = -1;

      yy_currentPos = yy_startRead = yy_markedPos;

      yy_state = yy_lexical_state;

      yy_was_pushback = false;

      yy_forAction: {
        while (true) {
    
          yy_input = yy_advance();

          if ( yy_input == YYEOF ) break yy_forAction;

          int yy_next = yytrans[ yy_rowMap[yy_state] + yycmap[yy_input] ];
          if (yy_next == -1) break yy_forAction;
          yy_state = yy_next;

          int yy_attributes = YY_ATTRIBUTE[yy_state];
          if ( (yy_attributes & 2) > 0 )
            yy_pushbackPos = yy_currentPos;

          if ( (yy_attributes & 1) > 0 ) {
            yy_was_pushback = (yy_attributes & 4) > 0;
            yy_action = yy_state; 
            yy_markedPos = yy_currentPos; 
            if ( (yy_attributes & 8) > 0 ) break yy_forAction;
          }

        }
      }

      if (yy_was_pushback)
        yy_markedPos = yy_pushbackPos;

      switch (yy_action) {    

        case 124: 
        case 129: 
        case 130: 
        case 290: 
        case 296: 
        case 297: 
        case 434: 
        case 437: 
        case 544: 
          {  /* only allow for non-JSP tags for this does not obey JSP quoting rules */
	if(Debug.debugTokenizer)
		dump("attr value");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_ATTRIBUTE_NAME);
        return XML_TAG_ATTRIBUTE_VALUE;
 }
        case 719: break;
        case 169: 
        case 174: 
        case 175: 
        case 350: 
        case 356: 
        case 357: 
        case 471: 
        case 473: 
        case 475: 
        case 477: 
        case 560: 
          {  /* JSP attribute values have escape semantics */
	if(Debug.debugTokenizer)
		dump("jsp attr value");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
	yybegin(ST_XML_ATTRIBUTE_NAME);
	return XML_TAG_ATTRIBUTE_VALUE;
 }
        case 720: break;
        case 686: 
        case 691: 
        case 698: 
        case 703: 
          { 
	if(Debug.debugTokenizer)
		dump("jsp directive tag name");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_ATTRIBUTE_NAME);
        return JSP_DIRECTIVE_NAME;
 }
        case 721: break;
        case 661: 
          { 
	if(Debug.debugTokenizer)
		dump("XSL processing instruction target");//$NON-NLS-1$
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_PI_ATTRIBUTE_NAME);
        return XML_TAG_NAME;
 }
        case 722: break;
        case 644: 
        case 647: 
        case 648: 
        case 649: 
        case 650: 
        case 651: 
        case 652: 
          { 
	if(Debug.debugTokenizer)
		dump("\nCDATA start");//$NON-NLS-1$
	fStateStack.push(yystate());
	yybegin(ST_CDATA_TEXT);
	return XML_CDATA_OPEN;
 }
        case 723: break;
        case 636: 
          { 
	if(Debug.debugTokenizer)
		dump("jsp:root tag name");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_ATTRIBUTE_NAME);
        return JSP_ROOT_TAG_NAME;
 }
        case 724: break;
        case 627: 
          { 
	if(Debug.debugTokenizer)
		dump("element");//$NON-NLS-1$
	yybegin(ST_XML_ELEMENT_DECLARATION);
	return XML_ELEMENT_DECLARATION;
 }
        case 725: break;
        case 626: 
          { 
	if(Debug.debugTokenizer)
		dump("attlist");//$NON-NLS-1$
	yybegin(ST_XML_ATTLIST_DECLARATION);
	return XML_ATTLIST_DECLARATION;
 }
        case 726: break;
        case 625: 
          { 
	if(Debug.debugTokenizer)
		dump("doctype");//$NON-NLS-1$
	yybegin(ST_XML_DOCTYPE_DECLARATION);
	return XML_DOCTYPE_DECLARATION;
 }
        case 727: break;
        case 610: 
          { 
	if(Debug.debugTokenizer)
		dump("doctype external id");//$NON-NLS-1$
	fEmbeddedHint = XML_DOCTYPE_EXTERNAL_ID_PUBREF;
	yybegin(ST_XML_DOCTYPE_ID_PUBLIC);
	return XML_DOCTYPE_EXTERNAL_ID_PUBLIC;
 }
        case 728: break;
        case 609: 
          { 
	if(Debug.debugTokenizer)
		dump("doctype external id");//$NON-NLS-1$
	fEmbeddedHint = XML_DOCTYPE_EXTERNAL_ID_SYSREF;
	yybegin(ST_XML_DOCTYPE_ID_SYSTEM);
	return XML_DOCTYPE_EXTERNAL_ID_SYSTEM;
 }
        case 729: break;
        case 603: 
          { 
	if(Debug.debugTokenizer)
		dump("DHTML processing instruction target");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_DHTML_ATTRIBUTE_NAME);
        return XML_TAG_NAME;
 }
        case 730: break;
        case 578: 
        case 619: 
        case 620: 
          { 
	return JSP_VBL_QUOTED_CONTENT;
 }
        case 731: break;
        case 568: 
        case 615: 
        case 616: 
          { 
	return JSP_EL_QUOTED_CONTENT;
 }
        case 732: break;
        case 559: 
          { 
	if(Debug.debugTokenizer)
		dump("\nJSP comment close");//$NON-NLS-1$
	yybegin(YYINITIAL);
	return JSP_COMMENT_CLOSE;
 }
        case 733: break;
        case 546: 
          { 
	if (Debug.debugTokenizer) {
		System.out.println("begin embedded region: " + fEmbeddedHint+", el-unquoted");//$NON-NLS-1$
	}
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	fStateStack.push(yystate());
	if(yylength() > 2)
		yypushback(yylength() -2);
	if(Debug.debugTokenizer)
		dump("VBL in attr value");//$NON-NLS-1$
	yybegin(ST_JSP_VBL);
	fELlevel++;
	assembleEmbeddedContainer(JSP_VBL_OPEN, new String[]{JSP_VBL_CLOSE});
	fStateStack.pop();
	yybegin(ST_XML_ATTRIBUTE_NAME);
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
	return PROXY_CONTEXT;
 }
        case 734: break;
        case 545: 
          { 
	if (Debug.debugTokenizer) {
		System.out.println("begin embedded region: " + fEmbeddedHint+", el-unquoted");//$NON-NLS-1$
	}
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	fStateStack.push(yystate());
	if(yylength() > 2)
		yypushback(yylength() -2);
	if(Debug.debugTokenizer)
		dump("EL in attr value");//$NON-NLS-1$
	yybegin(ST_JSP_EL);
	fELlevel++;
	assembleEmbeddedContainer(JSP_EL_OPEN, new String[]{JSP_EL_CLOSE});
	fStateStack.pop();
	yybegin(ST_XML_ATTRIBUTE_NAME);
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
	return PROXY_CONTEXT;
 }
        case 735: break;
        case 537: 
          { 
	if(Debug.debugTokenizer)
		dump("\nCharRef");//$NON-NLS-1$
	return XML_CHAR_REFERENCE;
 }
        case 736: break;
        case 534: 
          { 
	if(Debug.debugTokenizer)
		dump("\ncomment start");//$NON-NLS-1$
	fEmbeddedHint = XML_COMMENT_TEXT;
	fEmbeddedPostState = ST_XML_COMMENT;
	yybegin(ST_XML_COMMENT);
	return XML_COMMENT_OPEN;
 }
        case 737: break;
        case 533: 
        case 554: 
        case 557: 
        case 561: 
        case 562: 
        case 564: 
        case 566: 
        case 569: 
        case 571: 
        case 572: 
        case 574: 
        case 576: 
        case 579: 
          { 
	/* JSP comment begun (anywhere)
	 * A consequence of the start anywhere possibility is that the
	 *  incoming state must be checked to see if it's erroneous
	 *  due to the order of precedence generated
	 */
	// begin sanity checks
	if(yystate() == ST_JSP_CONTENT) {
		// at the beginning?!
		yypushback(3);
		return JSP_CONTENT;
	}
	else if(yystate() == ST_BLOCK_TAG_SCAN) {
		yypushback(4);
		return doBlockTagScan();
	}
	else if(yystate() == ST_XML_COMMENT) {
		yypushback(4);
		return scanXMLCommentText();
	}
	else if(yystate() == ST_JSP_COMMENT) {
		yypushback(4);
		return scanJSPCommentText();
	}
	else if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN)  {
		yybegin(ST_JSP_COMMENT);
		assembleEmbeddedContainer(JSP_COMMENT_OPEN, JSP_COMMENT_CLOSE);
		if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN)
			yybegin(ST_BLOCK_TAG_SCAN);
		return PROXY_CONTEXT;
	}
	// finished sanity checks
	if(yystate()==YYINITIAL) {
		// the simple case, just a regular scriptlet out in content
		if(Debug.debugTokenizer)
			dump("\nJSP comment start");//$NON-NLS-1$
		yybegin(ST_JSP_COMMENT);
		return JSP_COMMENT_OPEN;
	}
	else {
		if (Debug.debugTokenizer) {
			System.out.println("begin embedded region: " + fEmbeddedHint+", jspCommentStart");//$NON-NLS-1$
		}
		if(Debug.debugTokenizer)
			dump("JSP comment start");//$NON-NLS-1$
		if(yystate() == ST_XML_ATTRIBUTE_VALUE_DQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE_SQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
		else if(yystate() == ST_CDATA_TEXT) {
			fEmbeddedPostState = ST_CDATA_TEXT;
			fEmbeddedHint = XML_CDATA_TEXT;
		}
		yybegin(ST_JSP_COMMENT);
		// the comment container itself will act as comment text
		fEmbeddedHint = JSP_COMMENT_TEXT;
		assembleEmbeddedContainer(JSP_COMMENT_OPEN, JSP_COMMENT_CLOSE);
		if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN) {
			yybegin(ST_BLOCK_TAG_SCAN);
			return BLOCK_TEXT;
		}
		/*
		 * required help for successive embedded regions; mark this one as a
		 * comment so it will be otherwise ignored but preserved (which is why
		 * we can't use white-space)
		 */
		if(yystate() == ST_XML_TAG_NAME) {
			fEmbeddedHint = XML_TAG_NAME;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		else if((yystate() == ST_XML_ATTRIBUTE_NAME || yystate() == ST_XML_EQUALS)) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
			fEmbeddedPostState = ST_XML_EQUALS;
		}
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		else if(yystate() == ST_JSP_ATTRIBUTE_VALUE) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		return PROXY_CONTEXT;
	}
 }
        case 738: break;
        case 418: 
        case 419: 
          { 
	if(Debug.debugTokenizer)
		dump("XML processing instruction target");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_PI_ATTRIBUTE_NAME);
        return XML_TAG_NAME;
 }
        case 739: break;
        case 417: 
          { 
	if(Debug.debugTokenizer)
		dump("comment end");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
	yybegin(YYINITIAL);
	return XML_COMMENT_CLOSE;
 }
        case 740: break;
        case 416: 
          { 
	if(Debug.debugTokenizer)
		dump("CDATA end");//$NON-NLS-1$
	yybegin(fStateStack.pop());
	return XML_CDATA_CLOSE;
 }
        case 741: break;
        case 414: 
          { 
	yybegin(ST_JSP_VBL);
	if(yylength() > 2)
		yypushback(yylength() - 2);
	fELlevel++;
	fEmbeddedHint = XML_CONTENT;
	fEmbeddedPostState = YYINITIAL;
	assembleEmbeddedContainer(JSP_VBL_OPEN, JSP_VBL_CLOSE);
	fEmbeddedHint = XML_CONTENT;
	yybegin(YYINITIAL);
	return PROXY_CONTEXT;
 }
        case 742: break;
        case 413: 
          { 
	if(Debug.debugTokenizer)
		dump("\nPEReference");//$NON-NLS-1$
	return XML_PE_REFERENCE;
 }
        case 743: break;
        case 411: 
          { 
	yybegin(ST_JSP_EL);
	if(yylength() > 2)
		yypushback(yylength() - 2);
	fELlevel++;
	fEmbeddedHint = XML_CONTENT;
	fEmbeddedPostState = YYINITIAL;
	assembleEmbeddedContainer(JSP_EL_OPEN, JSP_EL_CLOSE);
	fEmbeddedHint = XML_CONTENT;
	yybegin(YYINITIAL);
	return PROXY_CONTEXT;
 }
        case 744: break;
        case 407: 
          { 
	if(Debug.debugTokenizer)
		dump("\nEntityRef");//$NON-NLS-1$
	return XML_ENTITY_REFERENCE;
 }
        case 745: break;
        case 401: 
        case 458: 
        case 468: 
        case 483: 
        case 488: 
        case 493: 
        case 498: 
        case 504: 
        case 510: 
        case 514: 
        case 519: 
        case 524: 
        case 530: 
          { 
	/* JSP expression begun (anywhere)
	 * A consequence of the start anywhere possibility is that the
	 *  incoming state must be checked to see if it's erroneous
	 *  due to the order of precedence generated
	 */
	// begin sanity checks
	if(yystate() == ST_JSP_CONTENT) {
		// at the beginning?!
		yypushback(2);
		return JSP_CONTENT;
	}
	else if(yystate() == ST_BLOCK_TAG_SCAN) {
		yypushback(3);
		return doBlockTagScan();
	}
	else if(yystate() == ST_XML_COMMENT) {
		yypushback(3);
		return scanXMLCommentText();
	}
	else if(yystate() == ST_JSP_COMMENT) {
		yypushback(3);
		return scanJSPCommentText();
	}
	// end sanity checks
	fStateStack.push(yystate());
	if(fStateStack.peek()==YYINITIAL) {
		// the simple case, just an expression out in content
		if(Debug.debugTokenizer)
			dump("\nJSP expression start");//$NON-NLS-1$
		yybegin(ST_JSP_CONTENT);
		return JSP_EXPRESSION_OPEN;
	}
	else {
		if (Debug.debugTokenizer) {
			System.out.println("begin embedded region: " + fEmbeddedHint+", jspExpressionStart");//$NON-NLS-1$
		}
		if(Debug.debugTokenizer)
			dump("JSP expression start");//$NON-NLS-1$
		if(yystate() == ST_XML_ATTRIBUTE_VALUE_DQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE_SQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
		else if(yystate() == ST_CDATA_TEXT) {
			fEmbeddedPostState = ST_CDATA_TEXT;
			fEmbeddedHint = XML_CDATA_TEXT;
		}
		yybegin(ST_JSP_CONTENT);
		assembleEmbeddedContainer(JSP_EXPRESSION_OPEN, JSP_CLOSE);
		if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN) {
			yybegin(ST_BLOCK_TAG_SCAN);
			return BLOCK_TEXT;
		}
		// required help for successive embedded regions
		if(yystate() == ST_XML_TAG_NAME) {
			fEmbeddedHint = XML_TAG_NAME;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		else if((yystate() == ST_XML_ATTRIBUTE_NAME || yystate() == ST_XML_EQUALS)) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
			fEmbeddedPostState = ST_XML_EQUALS;
		}
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		else if(yystate() == ST_JSP_ATTRIBUTE_VALUE) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		
		return PROXY_CONTEXT;
	}
 }
        case 746: break;
        case 400: 
        case 457: 
        case 467: 
        case 482: 
        case 487: 
        case 492: 
        case 497: 
        case 503: 
        case 509: 
        case 513: 
        case 518: 
        case 523: 
        case 529: 
          { 
	/* JSP declaration begun (anywhere)
	 * A consequence of the start anywhere possibility is that the
	 *  incoming state must be checked to see if it's erroneous
	 *  due to the order of precedence generated
	 */
	// begin sanity checks
	if(yystate() == ST_JSP_CONTENT) {
		// at the beginning?!
		yypushback(2);
		return JSP_CONTENT;
	}
	else if(yystate() == ST_BLOCK_TAG_SCAN) {
		yypushback(3);
		return doBlockTagScan();
	}
	else if(yystate() == ST_XML_COMMENT) {
		yypushback(3);
		return scanXMLCommentText();
	}
	else if(yystate() == ST_JSP_COMMENT) {
		yypushback(3);
		return scanJSPCommentText();
	}
	// end sanity checks
	fStateStack.push(yystate());
	if(fStateStack.peek()==YYINITIAL) {
		// the simple case, just a declaration out in content
		if(Debug.debugTokenizer)
			dump("\nJSP declaration start");//$NON-NLS-1$
		yybegin(ST_JSP_CONTENT);
		return JSP_DECLARATION_OPEN;
	}
	else {
		if (Debug.debugTokenizer) {
			System.out.println("begin embedded region: " + fEmbeddedHint+", jspDeclarationStart");//$NON-NLS-1$
		}
		if(Debug.debugTokenizer)
			dump("JSP declaration start");//$NON-NLS-1$
		if(yystate() == ST_XML_ATTRIBUTE_VALUE_DQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE_SQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
		else if(yystate() == ST_CDATA_TEXT) {
			fEmbeddedPostState = ST_CDATA_TEXT;
			fEmbeddedHint = XML_CDATA_TEXT;
		}
		yybegin(ST_JSP_CONTENT);
		assembleEmbeddedContainer(JSP_DECLARATION_OPEN, JSP_CLOSE);
		if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN) {
			yybegin(ST_BLOCK_TAG_SCAN);
			return BLOCK_TEXT;
		}
		// required help for successive embedded regions
		if(yystate() == ST_XML_TAG_NAME) {
			fEmbeddedHint = XML_TAG_NAME;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		else if((yystate() == ST_XML_ATTRIBUTE_NAME || yystate() == ST_XML_EQUALS)) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
			fEmbeddedPostState = ST_XML_EQUALS;
		}
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		else if(yystate() == ST_JSP_ATTRIBUTE_VALUE) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		return PROXY_CONTEXT;
	}
 }
        case 747: break;
        case 399: 
        case 456: 
        case 466: 
        case 481: 
        case 486: 
        case 491: 
        case 496: 
        case 502: 
        case 508: 
        case 512: 
        case 517: 
        case 522: 
        case 528: 
          { 
	/* JSP directive begun (anywhere)
	 * A consequence of the start anywhere possibility is that the
	 *  incoming state must be checked to see if it's erroneous
	 *  due to the order of precedence generated
	 */
	// begin sanity checks
	if(yystate() == ST_JSP_CONTENT) {
		// at the beginning?!
		yypushback(2);
		return JSP_CONTENT;
	}
	else if(yystate() == ST_BLOCK_TAG_SCAN) {
		yypushback(3);
		return doBlockTagScan();
	}
	else if(yystate() == ST_XML_COMMENT) {
		yypushback(3);
		return scanXMLCommentText();
	}
	else if(yystate() == ST_JSP_COMMENT) {
		yypushback(3);
		return scanJSPCommentText();
	}
	// end sanity checks
	fStateStack.push(yystate());
	if(fStateStack.peek()==YYINITIAL) {
		// the simple case, just a declaration out in content
		if(Debug.debugTokenizer)
			dump("\nJSP directive start");//$NON-NLS-1$
		yybegin(ST_JSP_DIRECTIVE_NAME);
		return JSP_DIRECTIVE_OPEN;
	}
	else {
		if (Debug.debugTokenizer) {
			System.out.println("begin embedded region: " + fEmbeddedHint+", jspDirectiveStart");//$NON-NLS-1$
		}
		if(Debug.debugTokenizer)
			dump("JSP declaration start");//$NON-NLS-1$
		if(yystate() == ST_XML_ATTRIBUTE_VALUE_DQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE_SQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
		else if(yystate() == ST_CDATA_TEXT) {
			fEmbeddedPostState = ST_CDATA_TEXT;
			fEmbeddedHint = XML_CDATA_TEXT;
		}
		yybegin(ST_JSP_DIRECTIVE_NAME);
		assembleEmbeddedContainer(JSP_DIRECTIVE_OPEN, new String[]{JSP_DIRECTIVE_CLOSE, JSP_CLOSE});
		if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN) {
			yybegin(ST_BLOCK_TAG_SCAN);
			return BLOCK_TEXT;
		}
		// required help for successive embedded regions
		if(yystate() == ST_XML_TAG_NAME) {
			fEmbeddedHint = XML_TAG_NAME;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		else if((yystate() == ST_XML_ATTRIBUTE_NAME || yystate() == ST_XML_EQUALS)) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
			fEmbeddedPostState = ST_XML_EQUALS;
		}
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		return PROXY_CONTEXT;
	}
 }
        case 748: break;
        case 389: 
          { 
	yybegin(ST_JSP_VBL_DQUOTES_END);
	return JSP_VBL_QUOTED_CONTENT;
 }
        case 749: break;
        case 385: 
          { 
	yybegin(ST_JSP_VBL_SQUOTES_END);
	return JSP_VBL_QUOTED_CONTENT;
 }
        case 750: break;
        case 383: 
          { 
	fELlevel++;
	if(fELlevel == 1) {
		return JSP_VBL_OPEN;
	}
 }
        case 751: break;
        case 373: 
          { 
	yybegin(ST_JSP_EL_DQUOTES_END);
	return JSP_EL_QUOTED_CONTENT;
 }
        case 752: break;
        case 369: 
          { 
	yybegin(ST_JSP_EL_SQUOTES_END);
	return JSP_EL_QUOTED_CONTENT;
 }
        case 753: break;
        case 367: 
          { 
	//System.out.println(JSP_EL_CONTENT+ ":[" + yytext() + "]");
	return JSP_EL_CONTENT;
 }
        case 754: break;
        case 366: 
          { 
	fELlevel++;
	if(fELlevel == 1) {
		return JSP_EL_OPEN;
	}
 }
        case 755: break;
        case 363: 
          { 
	int enterState = yystate();
	yybegin(ST_JSP_DQUOTED_VBL);
	assembleEmbeddedContainer(JSP_VBL_OPEN, new String[]{JSP_VBL_CLOSE, XML_TAG_ATTRIBUTE_VALUE_DQUOTE, JSP_TAG_ATTRIBUTE_VALUE_DQUOTE});
	// abort early when an unescaped double quote is found in the VBL
	if(fEmbeddedContainer.getLastRegion().getType().equals(XML_TAG_ATTRIBUTE_VALUE_DQUOTE) || fEmbeddedContainer.getLastRegion().getType().equals(JSP_TAG_ATTRIBUTE_VALUE_DQUOTE)) {
		yybegin(ST_ABORT_EMBEDDED);
		fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	}
	else {
		yybegin(enterState);
	}
	return PROXY_CONTEXT;
 }
        case 756: break;
        case 362: 
          { 
	int enterState = yystate();
	yybegin(ST_JSP_DQUOTED_EL);
	assembleEmbeddedContainer(JSP_EL_OPEN, new String[]{JSP_EL_CLOSE, XML_TAG_ATTRIBUTE_VALUE_DQUOTE, JSP_TAG_ATTRIBUTE_VALUE_DQUOTE});
	// abort early when an unescaped double quote is found in the EL
	if(fEmbeddedContainer.getLastRegion().getType().equals(XML_TAG_ATTRIBUTE_VALUE_DQUOTE) || fEmbeddedContainer.getLastRegion().getType().equals(JSP_TAG_ATTRIBUTE_VALUE_DQUOTE)) {
		yybegin(ST_ABORT_EMBEDDED);
		fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	}
	else {
		yybegin(enterState);
	}
	return PROXY_CONTEXT;
 }
        case 757: break;
        case 361: 
          { 
	int enterState = yystate();
	yybegin(ST_JSP_SQUOTED_VBL);
	assembleEmbeddedContainer(JSP_VBL_OPEN, new String[]{JSP_VBL_CLOSE, XML_TAG_ATTRIBUTE_VALUE_SQUOTE, JSP_TAG_ATTRIBUTE_VALUE_SQUOTE});
	// abort early when an unescaped single quote is found in the VBL
	if(fEmbeddedContainer.getLastRegion().getType().equals(XML_TAG_ATTRIBUTE_VALUE_SQUOTE) || fEmbeddedContainer.getLastRegion().getType().equals(JSP_TAG_ATTRIBUTE_VALUE_SQUOTE)) {
		yybegin(ST_ABORT_EMBEDDED);
		fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	}
	else {
		yybegin(enterState);
	}
	return PROXY_CONTEXT;
 }
        case 758: break;
        case 360: 
          { 
	int enterState = yystate();
	yybegin(ST_JSP_SQUOTED_EL);
	assembleEmbeddedContainer(JSP_EL_OPEN, new String[]{JSP_EL_CLOSE, XML_TAG_ATTRIBUTE_VALUE_SQUOTE, JSP_TAG_ATTRIBUTE_VALUE_SQUOTE});
	// abort early when an unescaped single quote is found in the EL
	if(fEmbeddedContainer.getLastRegion().getType().equals(XML_TAG_ATTRIBUTE_VALUE_SQUOTE) || fEmbeddedContainer.getLastRegion().getType().equals(JSP_TAG_ATTRIBUTE_VALUE_SQUOTE)) {
		yybegin(ST_ABORT_EMBEDDED);
		fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	}
	else {
		yybegin(enterState);
	}
	return PROXY_CONTEXT;
 }
        case 759: break;
        case 358: 
          { 
	if (Debug.debugTokenizer) {
		System.out.println("begin embedded region: " + fEmbeddedHint+", genericEndTagOpen");//$NON-NLS-1$
	}
	int incomingState = yystate();
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	if(Debug.debugTokenizer)
		dump("JSP attribute value start - end tag");//$NON-NLS-1$
	yybegin(ST_XML_TAG_NAME);
	assembleEmbeddedContainer(XML_END_TAG_OPEN, new String[]{XML_TAG_CLOSE,XML_EMPTY_TAG_CLOSE});
	if(yystate() != ST_ABORT_EMBEDDED)
        yybegin(incomingState);
	return PROXY_CONTEXT;
 }
        case 760: break;
        case 302: 
        case 316: 
        case 322: 
          { 
	return XML_DOCTYPE_INTERNAL_SUBSET;
 }
        case 761: break;
        case 288: 
          { 
	String tagName = yytext().substring(1);
	// pushback to just after the opening bracket
	yypushback(yylength() - 1);
	/*
	 * If this tag can not be nested or we're already searching for an
	 * attribute name, equals, or value, return immediately.
	 */
	if (!isNestable(tagName) || (!fStateStack.empty() && (fStateStack.peek() == ST_XML_ATTRIBUTE_NAME || fStateStack.peek() == ST_XML_EQUALS || fStateStack.peek() == ST_XML_ATTRIBUTE_VALUE || fStateStack.peek() == ST_JSP_ATTRIBUTE_VALUE))) {
		yybegin(ST_XML_TAG_NAME);
		return XML_TAG_OPEN;
	}
	if(Debug.debugTokenizer)
		dump("tag in place of attr value");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	fStateStack.push(yystate());
	// embedded container should be looking for the name (again) next
	yybegin(ST_XML_TAG_NAME);
	assembleEmbeddedTagSequence(XML_TAG_OPEN, tagName); // ?
	fStateStack.pop();
	yybegin(ST_XML_ATTRIBUTE_NAME);
	return PROXY_CONTEXT;
 }
        case 762: break;
        case 286: 
          { 
	String tagName = yytext().substring(1);
	// pushback to just after the opening bracket
	yypushback(yylength() - 1);
	/*
	 * If this tag can not be nested or we're already searching for an
	 * attribute name, equals, or value, return immediately.
	 */
	if (!isNestable(tagName) || (!fStateStack.empty() && (fStateStack.peek() == ST_XML_ATTRIBUTE_NAME || fStateStack.peek() == ST_XML_EQUALS || fStateStack.peek() == ST_XML_ATTRIBUTE_VALUE || fStateStack.peek() == ST_JSP_ATTRIBUTE_VALUE))) {
		yybegin(ST_XML_TAG_NAME);
		return XML_TAG_OPEN;
	}
	if(Debug.debugTokenizer)
		dump("tag in place of attr name");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	fStateStack.push(yystate());
	// embedded container should be looking for the name (again) next
	yybegin(ST_XML_TAG_NAME);
	assembleEmbeddedTagSequence(XML_TAG_OPEN, tagName); // ?
	fStateStack.pop();
	yybegin(ST_XML_EQUALS);
	return PROXY_CONTEXT;
 }
        case 763: break;
        case 284: 
          { 
        yybegin(YYINITIAL);
	fEmbeddedHint = UNDEFINED;
	if(Debug.debugTokenizer)
		dump("empty tag close");//$NON-NLS-1$

	if (fEmbeddedContainer != null)
		fInTagEmbedded = false;
	else
		fInTagContainer = false;

	return XML_EMPTY_TAG_CLOSE;
 }
        case 764: break;
        case 275: 
          { 
	if(Debug.debugTokenizer)
		dump("JSP end");//$NON-NLS-1$
	if (Debug.debugTokenizer) {
		if(fStateStack.peek()!=YYINITIAL)
			System.out.println("end embedded region");//$NON-NLS-1$
	}
	yybegin(fStateStack.pop());
	return JSP_DIRECTIVE_CLOSE;
 }
        case 765: break;
        case 273: 
          { 
	if(Debug.debugTokenizer)
		dump("JSP end");//$NON-NLS-1$
	if (Debug.debugTokenizer) {
		if(fStateStack.peek()!=YYINITIAL)
			System.out.println("end embedded region");//$NON-NLS-1$
	}
	yybegin(fStateStack.pop());
	return JSP_CLOSE;
 }
        case 766: break;
        case 252: 
          { 
	if(Debug.debugTokenizer)
		dump("XML processing instruction end");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
        yybegin(YYINITIAL);
        return XML_PI_CLOSE;
 }
        case 767: break;
        case 125: 
          { 
	if (Debug.debugTokenizer) {
		System.out.println("begin embedded region: " + fEmbeddedHint+", unquoted genericTagOpen");//$NON-NLS-1$
	}
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	fStateStack.push(yystate());
	if(Debug.debugTokenizer)
		dump("JSP tag embedded name start - start tag");//$NON-NLS-1$
	yybegin(ST_XML_TAG_NAME);
	assembleEmbeddedContainer(XML_TAG_OPEN, new String[]{XML_TAG_CLOSE,XML_EMPTY_TAG_CLOSE});
	fStateStack.pop();
        yybegin(ST_XML_ATTRIBUTE_NAME);
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
	return PROXY_CONTEXT;
 }
        case 768: break;
        case 123: 
          { 
	if(Debug.debugTokenizer)
		dump("equals");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(isJspTag() ? ST_JSP_ATTRIBUTE_VALUE : ST_XML_ATTRIBUTE_VALUE);
        return XML_TAG_ATTRIBUTE_EQUALS;
 }
        case 769: break;
        case 122: 
          { 
	if(Debug.debugTokenizer)
		dump("attr name");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(ST_XML_EQUALS);
        return XML_TAG_ATTRIBUTE_NAME;
 }
        case 770: break;
        case 118: 
        case 119: 
        case 120: 
        case 285: 
        case 431: 
        case 543: 
        case 584: 
        case 585: 
        case 604: 
        case 605: 
        case 623: 
        case 624: 
        case 637: 
        case 646: 
        case 654: 
        case 656: 
        case 658: 
        case 660: 
        case 663: 
        case 669: 
        case 670: 
        case 671: 
        case 672: 
        case 673: 
        case 679: 
        case 680: 
        case 681: 
        case 682: 
        case 683: 
        case 689: 
        case 690: 
        case 692: 
        case 693: 
        case 699: 
        case 700: 
        case 701: 
        case 702: 
        case 708: 
        case 709: 
        case 710: 
        case 711: 
        case 714: 
        case 715: 
        case 717: 
          { 
	if(Debug.debugTokenizer)
		dump("tag name");//$NON-NLS-1$
    String tagname = yytext();
    boolean jspTag = tagname.indexOf(':') != -1;
	if (fEmbeddedContainer != null) {
    	fEmbeddedTag = jspTag;
		fInTagEmbedded = true;
    }
	else {
		fContainerTag = jspTag;
		fInTagContainer = true;
	}
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_ATTRIBUTE_NAME);
        return XML_TAG_NAME;
 }
        case 771: break;
        case 116: 
          { 
	if(Debug.debugTokenizer)
		dump("tag close");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
	if(isBlockMarker()) {
		fEmbeddedHint = getBlockMarkerContext();
		fEmbeddedPostState = ST_BLOCK_TAG_SCAN;
        	yybegin(ST_BLOCK_TAG_SCAN);
	}
	else
        	yybegin(YYINITIAL);

	if (fEmbeddedContainer != null)
		fInTagEmbedded = false;
	else
		fInTagContainer = false;

	return XML_TAG_CLOSE;
 }
        case 772: break;
        case 109: 
        case 113: 
        case 278: 
          { 
	if(Debug.debugTokenizer)
		dump("attr value");//$NON-NLS-1$
        yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_NAME);
        return XML_TAG_ATTRIBUTE_VALUE;
 }
        case 773: break;
        case 108: 
          { 
	if(Debug.debugTokenizer)
		dump("equals");//$NON-NLS-1$
        yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_VALUE);
        return XML_TAG_ATTRIBUTE_EQUALS;
 }
        case 774: break;
        case 107: 
          { 
	if(Debug.debugTokenizer)
		dump("attr name");//$NON-NLS-1$
        yybegin(ST_JSP_DIRECTIVE_EQUALS);
        return XML_TAG_ATTRIBUTE_NAME;
 }
        case 775: break;
        case 104: 
          { 
	if(Debug.debugTokenizer)
		dump("JSP directive name");//$NON-NLS-1$
	yybegin(ST_JSP_DIRECTIVE_NAME_WHITESPACE);
	return JSP_DIRECTIVE_NAME;
 }
        case 776: break;
        case 100: 
        case 101: 
        case 102: 
          { 
	if(Debug.debugTokenizer)
		dump("JSP code content");//$NON-NLS-1$
	return doScan("%>", false, false, false, JSP_CONTENT, ST_JSP_CONTENT, ST_JSP_CONTENT);
 }
        case 777: break;
        case 96: 
        case 98: 
        case 99: 
        case 266: 
        case 267: 
        case 268: 
        case 271: 
        case 272: 
        case 425: 
        case 428: 
          { 
	if(Debug.debugTokenizer)
		dump("DHTML processing instruction attribute value");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_DHTML_ATTRIBUTE_NAME);
        return XML_TAG_ATTRIBUTE_VALUE;
 }
        case 778: break;
        case 95: 
          { 
	if(Debug.debugTokenizer)
		dump("DHTML processing instruction '='");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(ST_DHTML_ATTRIBUTE_VALUE);
        return XML_TAG_ATTRIBUTE_EQUALS;
 }
        case 779: break;
        case 94: 
          { 
	if(Debug.debugTokenizer)
		dump("DHTML processing instruction attribute name");//$NON-NLS-1$
        yybegin(ST_DHTML_EQUALS);
        return XML_TAG_ATTRIBUTE_NAME;
 }
        case 780: break;
        case 92: 
          { 
	if(Debug.debugTokenizer)
		dump("DHTML processing instruction end");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
        yybegin(YYINITIAL);
        return XML_PI_CLOSE;
 }
        case 781: break;
        case 86: 
        case 88: 
        case 255: 
          { 
	if(Debug.debugTokenizer)
		dump("XML processing instruction attribute value");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_PI_ATTRIBUTE_NAME);
        return XML_TAG_ATTRIBUTE_VALUE;
 }
        case 782: break;
        case 85: 
          { 
	if(Debug.debugTokenizer)
		dump("XML processing instruction '='");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(ST_XML_PI_ATTRIBUTE_VALUE);
        return XML_TAG_ATTRIBUTE_EQUALS;
 }
        case 783: break;
        case 84: 
          { 
	if(Debug.debugTokenizer)
		dump("XML processing instruction attribute name");//$NON-NLS-1$
        yybegin(ST_XML_PI_EQUALS);
        return XML_TAG_ATTRIBUTE_NAME;
 }
        case 784: break;
        case 50: 
        case 209: 
        case 210: 
        case 213: 
        case 223: 
        case 224: 
        case 227: 
        case 228: 
        case 394: 
        case 397: 
        case 507: 
        case 521: 
        case 527: 
          { 
	return JSP_VBL_CONTENT;
 }
        case 785: break;
        case 43: 
        case 187: 
        case 188: 
        case 191: 
        case 201: 
        case 202: 
        case 206: 
        case 207: 
        case 364: 
        case 378: 
        case 381: 
        case 479: 
        case 480: 
        case 495: 
        case 501: 
          { 
	return JSP_EL_CONTENT;
 }
        case 786: break;
        case 35: 
        case 161: 
        case 162: 
        case 346: 
        case 465: 
        case 469: 
        case 558: 
        case 592: 
        case 612: 
        case 629: 
        case 639: 
          { 
	if(Debug.debugTokenizer)
		dump("attlist contentspec");//$NON-NLS-1$
	return XML_ATTLIST_DECL_CONTENT;
 }
        case 787: break;
        case 33: 
        case 154: 
        case 155: 
        case 334: 
        case 455: 
        case 459: 
        case 555: 
        case 591: 
        case 611: 
        case 628: 
        case 638: 
          { 
	if(Debug.debugTokenizer)
		dump("elementdecl contentspec");//$NON-NLS-1$
	return XML_ELEMENT_DECL_CONTENT;
 }
        case 788: break;
        case 22: 
        case 114: 
          { 
	if(Debug.debugTokenizer)
		dump("inappropriate tag name");//$NON-NLS-1$
	if(!fStateStack.empty() && (fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_SQUOTED||fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_DQUOTED)) {
		yybegin(ST_ABORT_EMBEDDED);
		char c = yy_buffer[yy_markedPos - 1];
		if (fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_DQUOTED && c == '\"') {
			return isJspTag() ? JSP_TAG_ATTRIBUTE_VALUE_DQUOTE : XML_TAG_ATTRIBUTE_VALUE_DQUOTE;
		}		
		if (fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_SQUOTED && c == '\'') {
			return isJspTag() ? JSP_TAG_ATTRIBUTE_VALUE_SQUOTE : XML_TAG_ATTRIBUTE_VALUE_SQUOTE;
		}
		yypushback(yylength()-1);
		return XML_TAG_ATTRIBUTE_VALUE;
	}
	yybegin(YYINITIAL);
        return XML_CONTENT;
 }
        case 789: break;
        case 18: 
        case 106: 
          { 
	if(Debug.debugTokenizer)
		dump("white space");//$NON-NLS-1$
	yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_NAME);
	return WHITE_SPACE;
 }
        case 790: break;
        case 5: 
        case 8: 
        case 9: 
        case 10: 
        case 12: 
        case 13: 
        case 14: 
        case 15: 
        case 17: 
        case 19: 
        case 20: 
        case 21: 
        case 23: 
        case 24: 
        case 25: 
        case 26: 
        case 27: 
        case 28: 
        case 29: 
        case 30: 
        case 31: 
        case 32: 
        case 34: 
        case 40: 
        case 41: 
        case 42: 
        case 74: 
        case 178: 
        case 183: 
          { 
	if(Debug.debugTokenizer)
		dump("white space");//$NON-NLS-1$
        return WHITE_SPACE;
 }
        case 791: break;
        case 0: 
        case 57: 
        case 60: 
        case 61: 
        case 63: 
        case 235: 
        case 237: 
        case 240: 
        case 243: 
        case 404: 
        case 405: 
        case 406: 
        case 410: 
        case 412: 
        case 415: 
        case 536: 
          { 
	if(Debug.debugTokenizer)
		dump("\nXML content");//$NON-NLS-1$
	return XML_CONTENT;
 }
        case 792: break;
        case 58: 
        case 103: 
        case 115: 
        case 121: 
        case 131: 
          { 
	if(Debug.debugTokenizer)
		dump("\nstart tag open");//$NON-NLS-1$
	if (!fStateStack.empty() && fStateStack.peek()== ST_XML_COMMENT){
		fStateStack.pop();
		fEmbeddedHint = XML_COMMENT_TEXT;
		yybegin(ST_XML_TAG_NAME);
		String tagName = "";
		assembleEmbeddedTagSequence(XML_TAG_OPEN, tagName); // ?
		return PROXY_CONTEXT;
	}
	fEmbeddedHint = XML_TAG_NAME;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(ST_XML_TAG_NAME);
        return XML_TAG_OPEN;
 }
        case 793: break;
        case 59: 
        case 66: 
        case 67: 
        case 68: 
        case 72: 
        case 73: 
        case 83: 
        case 87: 
        case 89: 
        case 90: 
        case 91: 
        case 93: 
        case 97: 
        case 105: 
        case 110: 
        case 111: 
        case 112: 
        case 117: 
        case 126: 
        case 133: 
        case 134: 
        case 135: 
        case 136: 
        case 138: 
        case 139: 
        case 141: 
        case 142: 
        case 143: 
        case 146: 
        case 147: 
        case 148: 
        case 151: 
        case 152: 
        case 153: 
        case 158: 
        case 159: 
        case 160: 
        case 168: 
        case 170: 
        case 171: 
        case 193: 
        case 194: 
        case 197: 
        case 198: 
        case 204: 
        case 208: 
        case 215: 
        case 216: 
        case 219: 
        case 220: 
        case 225: 
        case 229: 
          { 
	if (Debug.debugTokenizer)
		System.out.println("!!!unexpected!!!: \"" + yytext() + "\":" + //$NON-NLS-2$//$NON-NLS-1$
			yychar + "-" + (yychar + yylength()));//$NON-NLS-1$
	return UNDEFINED;
 }
        case 794: break;
        case 62: 
        case 241: 
          { 
	if(Debug.debugTokenizer)
		dump("non-reference %");//$NON-NLS-1$
	return XML_CONTENT;
 }
        case 795: break;
        case 64: 
        case 65: 
          { 
	if(Debug.debugTokenizer)
		dump("CDATA text");//$NON-NLS-1$
	fEmbeddedPostState = ST_CDATA_TEXT;
	fEmbeddedHint = XML_CDATA_TEXT;
	String returnedContext = doScan("]]>", false, true, true, XML_CDATA_TEXT, ST_CDATA_END,  ST_CDATA_END);//$NON-NLS-1$
	if(returnedContext == XML_CDATA_TEXT)
		yybegin(ST_CDATA_END);
	return returnedContext;
 }
        case 796: break;
        case 69: 
        case 196: 
        case 200: 
        case 218: 
        case 222: 
          { 
	if(Debug.debugTokenizer)
		dump("LINE FEED");//$NON-NLS-1$
	return WHITE_SPACE;
 }
        case 797: break;
        case 70: 
        case 71: 
          { 
	if(Debug.debugTokenizer)
		dump("comment content");//$NON-NLS-1$
	return scanXMLCommentText();
 }
        case 798: break;
        case 75: 
        case 76: 
        case 77: 
        case 78: 
        case 248: 
        case 249: 
        case 250: 
        case 420: 
        case 539: 
        case 540: 
        case 582: 
        case 583: 
        case 602: 
        case 622: 
        case 635: 
        case 645: 
        case 653: 
        case 655: 
        case 657: 
        case 659: 
          { 
	if(Debug.debugTokenizer)
		dump("processing instruction target");//$NON-NLS-1$
	fEmbeddedHint = XML_CONTENT;
        yybegin(ST_PI_WS);
        return XML_TAG_NAME;
 }
        case 799: break;
        case 79: 
          { 
        yybegin(ST_PI_CONTENT);
        return WHITE_SPACE;
 }
        case 800: break;
        case 80: 
        case 81: 
        case 82: 
          { 
		// block scan until close is found
	return doScan("?>", false, false, false, XML_PI_CONTENT, ST_XML_PI_TAG_CLOSE, ST_XML_PI_TAG_CLOSE);
 }
        case 801: break;
        case 127: 
        case 172: 
          { 
	String type = yy_lexical_state == ST_XML_ATTRIBUTE_VALUE ? XML_TAG_ATTRIBUTE_VALUE_DQUOTE : JSP_TAG_ATTRIBUTE_VALUE_DQUOTE;

	if (Debug.debugTokenizer) {
		System.out.println("begin embedded region: " + fEmbeddedHint+", "+type);//$NON-NLS-1$
	}
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
	yybegin(ST_XML_ATTRIBUTE_VALUE_DQUOTED);
	fStateStack.push(yystate());
	if(Debug.debugTokenizer)
		dump("JSP attribute value start - complex double quoted");//$NON-NLS-1$
	assembleEmbeddedContainer(type, type);
	fStateStack.pop();
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
	yybegin(ST_XML_ATTRIBUTE_NAME);
	if (fEmbeddedContainer.getLastRegion().getType() == UNDEFINED) {
		fProxyUnknownRegion = fRegionFactory.createToken(XML_TAG_ATTRIBUTE_VALUE, fEmbeddedContainer.getStart(), fEmbeddedContainer.getTextLength(), fEmbeddedContainer.getLength());
		return PROXY_UNKNOWN_CONTEXT;
	}
	return PROXY_CONTEXT;
 }
        case 802: break;
        case 128: 
        case 173: 
          { 
	String type = yy_lexical_state == ST_XML_ATTRIBUTE_VALUE ? XML_TAG_ATTRIBUTE_VALUE_SQUOTE : JSP_TAG_ATTRIBUTE_VALUE_SQUOTE;
	if (Debug.debugTokenizer) {
		System.out.println("begin embedded region: " + fEmbeddedHint+", "+type);//$NON-NLS-1$
	}
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
	yybegin(ST_XML_ATTRIBUTE_VALUE_SQUOTED);
	fStateStack.push(yystate());
	if(Debug.debugTokenizer)
		dump("JSP attribute value start - complex single quoted");//$NON-NLS-1$
	assembleEmbeddedContainer(type, type);
	fStateStack.pop();
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_ATTRIBUTE_NAME);
    if (fEmbeddedContainer.getLastRegion().getType() == UNDEFINED) {
		fProxyUnknownRegion = fRegionFactory.createToken(XML_TAG_ATTRIBUTE_VALUE, fEmbeddedContainer.getStart(), fEmbeddedContainer.getTextLength(), fEmbeddedContainer.getLength());
		return PROXY_UNKNOWN_CONTEXT;
	}
	return PROXY_CONTEXT;
 }
        case 803: break;
        case 132: 
          { 
	if(Debug.debugTokenizer)
		dump("declaration end");//$NON-NLS-1$
	if (Debug.debugTokenizer) {
		if(fStateStack.peek()!=YYINITIAL)
			System.out.println("end embedded region");//$NON-NLS-1$
	}
	yybegin(fStateStack.pop());
	return XML_DECLARATION_CLOSE;
 }
        case 804: break;
        case 137: 
          { 
	if(Debug.debugTokenizer)
		dump("doctype type");//$NON-NLS-1$
	yybegin(ST_XML_DOCTYPE_EXTERNAL_ID);
	return XML_DOCTYPE_NAME;
 }
        case 805: break;
        case 140: 
        case 144: 
        case 307: 
        case 312: 
        case 447: 
          { 
	if(Debug.debugTokenizer)
		dump("doctype public reference");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
	fEmbeddedPostState = YYINITIAL;
	yybegin(ST_XML_DOCTYPE_ID_SYSTEM);
	return XML_DOCTYPE_EXTERNAL_ID_PUBREF;
 }
        case 806: break;
        case 145: 
        case 149: 
        case 319: 
          { 
	if(Debug.debugTokenizer)
		dump("doctype system reference");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
	fEmbeddedPostState = YYINITIAL;
	yybegin(ST_XML_DECLARATION_CLOSE);
	return XML_DOCTYPE_EXTERNAL_ID_SYSREF;
 }
        case 807: break;
        case 150: 
        case 325: 
        case 330: 
        case 452: 
          { 
	if(Debug.debugTokenizer)
		dump("elementdecl name");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
	fEmbeddedPostState = YYINITIAL;
	yybegin(ST_XML_ELEMENT_DECLARATION_CONTENT);
	return XML_ELEMENT_DECL_NAME;
 }
        case 808: break;
        case 156: 
          { 
	if(Debug.debugTokenizer)
		dump("elementdecl close");//$NON-NLS-1$
	if (Debug.debugTokenizer) {
		if(fStateStack.peek()!=YYINITIAL)
			System.out.println("end embedded region");//$NON-NLS-1$
	}
	yybegin(fStateStack.pop());
	return XML_DECLARATION_CLOSE;
 }
        case 809: break;
        case 157: 
        case 337: 
        case 342: 
        case 462: 
          { 
	if(Debug.debugTokenizer)
		dump("attlist name");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
	fEmbeddedPostState = YYINITIAL;
	yybegin(ST_XML_ATTLIST_DECLARATION_CONTENT);
	return XML_ATTLIST_DECL_NAME;
 }
        case 810: break;
        case 163: 
          { 
	if(Debug.debugTokenizer)
		dump("attlist close");//$NON-NLS-1$
	if (Debug.debugTokenizer) {
		if(fStateStack.peek()!=YYINITIAL)
			System.out.println("end embedded region");//$NON-NLS-1$
	}
	yybegin(fStateStack.pop());
	return XML_DECLARATION_CLOSE;
 }
        case 811: break;
        case 166: 
        case 167: 
          { 
	if(Debug.debugTokenizer)
		dump("\nJSP comment text");//$NON-NLS-1$
	return scanJSPCommentText();
 }
        case 812: break;
        case 176: 
        case 180: 
        case 181: 
        case 182: 
        case 185: 
        case 186: 
        case 359: 
          { 
	return XML_TAG_ATTRIBUTE_VALUE;
 }
        case 813: break;
        case 177: 
          { 
	if (Debug.debugTokenizer) {
		System.out.println("begin embedded region: " + fEmbeddedHint+", genericTagOpen");//$NON-NLS-1$
	}
	int incomingState = yystate();
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	if(Debug.debugTokenizer)
		dump("tag inside of JSP attribute value start");//$NON-NLS-1$
	yybegin(ST_XML_TAG_NAME);
	assembleEmbeddedContainer(XML_TAG_OPEN, new String[]{XML_TAG_CLOSE,XML_EMPTY_TAG_CLOSE});
	if(yystate() != ST_ABORT_EMBEDDED)
        yybegin(incomingState);
	return PROXY_CONTEXT;
 }
        case 814: break;
        case 179: 
          { 
	return isJspTag() ? JSP_TAG_ATTRIBUTE_VALUE_SQUOTE : XML_TAG_ATTRIBUTE_VALUE_SQUOTE;
 }
        case 815: break;
        case 184: 
          { 
	return isJspTag()? JSP_TAG_ATTRIBUTE_VALUE_DQUOTE : XML_TAG_ATTRIBUTE_VALUE_DQUOTE;
 }
        case 816: break;
        case 189: 
          { 
	yybegin(ST_JSP_EL_DQUOTES);
	return JSP_EL_DQUOTE;
 }
        case 817: break;
        case 190: 
          { 
	yybegin(ST_JSP_EL_SQUOTES);
	return JSP_EL_SQUOTE;
 }
        case 818: break;
        case 192: 
          { 
	fELlevel--;
	if(fELlevel == 0) {
		yybegin(YYINITIAL);
		return JSP_EL_CLOSE;
	}
	return JSP_EL_CONTENT;
 }
        case 819: break;
        case 195: 
          { 
	yybegin(ST_JSP_EL);
	return JSP_EL_SQUOTE;
 }
        case 820: break;
        case 199: 
          { 
	yybegin(ST_JSP_EL);
	return JSP_EL_DQUOTE;
 }
        case 821: break;
        case 203: 
          { 
	return isJspTag() ? JSP_TAG_ATTRIBUTE_VALUE_DQUOTE: XML_TAG_ATTRIBUTE_VALUE_DQUOTE;
 }
        case 822: break;
        case 205: 
          { 
	return JSP_EL_CLOSE;
 }
        case 823: break;
        case 211: 
          { 
	yybegin(ST_JSP_VBL_DQUOTES);
	return JSP_VBL_DQUOTE;
 }
        case 824: break;
        case 212: 
          { 
	yybegin(ST_JSP_VBL_SQUOTES);
	return JSP_VBL_SQUOTE;
 }
        case 825: break;
        case 214: 
          { 
	fELlevel--;
	if(fELlevel == 0) {
		yybegin(YYINITIAL);
		return JSP_VBL_CLOSE;
	}
	return JSP_VBL_CONTENT;
 }
        case 826: break;
        case 217: 
          { 
	yybegin(ST_JSP_VBL);
	return JSP_VBL_SQUOTE;
 }
        case 827: break;
        case 221: 
          { 
	yybegin(ST_JSP_VBL);
	return JSP_VBL_DQUOTE;
 }
        case 828: break;
        case 226: 
          { 
	return JSP_VBL_CLOSE;
 }
        case 829: break;
        case 230: 
          { 
	if(Debug.debugTokenizer)
		dump("\nend tag open");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_NAME;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(ST_XML_TAG_NAME);
        return XML_END_TAG_OPEN;
 }
        case 830: break;
        case 231: 
          { 
	if(Debug.debugTokenizer)
		dump("\nprocessing instruction start");//$NON-NLS-1$
	yybegin(ST_PI);
        return XML_PI_OPEN;
 }
        case 831: break;
        case 232: 
        case 333: 
        case 345: 
        case 365: 
        case 370: 
        case 374: 
        case 377: 
        case 380: 
        case 382: 
        case 386: 
        case 390: 
        case 393: 
        case 396: 
          { 
	/* JSP scriptlet begun (anywhere)
	 * A consequence of the start anywhere possibility is that the
	 *  incoming state must be checked to see if it's erroneous
	 *  due to the order of precedence generated
	 */
	// begin sanity checks
	if(yystate() == ST_JSP_CONTENT) {
		// at the beginning?!
		yypushback(1);
		return JSP_CONTENT;
	}
	else if(yystate() == ST_BLOCK_TAG_SCAN) {
		yypushback(2);
		return doBlockTagScan();
	}
	else if(yystate() == ST_XML_COMMENT) {
		yypushback(2);
		return scanXMLCommentText();
	}
	else if(yystate() == ST_JSP_COMMENT) {
		yypushback(2);
		return scanJSPCommentText();
	}
	// finished sanity checks
	fStateStack.push(yystate());
	if(fStateStack.peek()==YYINITIAL) {
		// the simple case, just a regular scriptlet out in content
		if(Debug.debugTokenizer)
			dump("\nJSP scriptlet start");//$NON-NLS-1$
		yybegin(ST_JSP_CONTENT);
		return JSP_SCRIPTLET_OPEN;
	}
	else {
		if (Debug.debugTokenizer) {
			System.out.println("begin embedded region: " + fEmbeddedHint+", jspScriptletStart");//$NON-NLS-1$
		}
		if(Debug.debugTokenizer)
			dump("JSP scriptlet start");//$NON-NLS-1$
		if(yystate() == ST_XML_ATTRIBUTE_VALUE_DQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE_SQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
		else if(yystate() == ST_CDATA_TEXT) {
			fEmbeddedPostState = ST_CDATA_TEXT;
			fEmbeddedHint = XML_CDATA_TEXT;
		}
		yybegin(ST_JSP_CONTENT);
		assembleEmbeddedContainer(JSP_SCRIPTLET_OPEN, JSP_CLOSE);
		if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN) {
			yybegin(ST_BLOCK_TAG_SCAN);
			return BLOCK_TEXT;
		}
		// required help for successive embedded regions
		if(yystate() == ST_XML_TAG_NAME) {
			fEmbeddedHint = XML_TAG_NAME;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		else if((yystate() == ST_XML_ATTRIBUTE_NAME || yystate() == ST_XML_EQUALS)) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
			fEmbeddedPostState = ST_XML_EQUALS;
		}
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
        else if(yystate() == ST_JSP_ATTRIBUTE_VALUE) {
            fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
            fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        }
		
		return PROXY_CONTEXT;
	}
 }
        case 832: break;
        case 233: 
          { 
	fStateStack.push(yystate());
	if(Debug.debugTokenizer)
		dump("\ndeclaration start");//$NON-NLS-1$
        yybegin(ST_XML_DECLARATION);
	return XML_DECLARATION_OPEN;
 }
        case 833: break;
        case 247: 
          { 
	if(Debug.debugTokenizer)
		dump("processing instruction end");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
        yybegin(YYINITIAL);
        return XML_PI_CLOSE;
 }
        case 834: break;
        case 251: 
          { 
		// ended with nothing inside
		fEmbeddedHint = UNDEFINED;
        yybegin(YYINITIAL);
        return XML_PI_CLOSE;
 }
        case 835: break;
        case 164: 
        case 165: 
          { 
		return doBlockTagScan();
	 }
        case 836: break;
        default: 
          if (yy_input == YYEOF && yy_startRead == yy_currentPos) {
            yy_atEOF = true;
            yy_do_eof();
              return null;
          } 
          else {
            yy_ScanError(YY_NO_MATCH);
          }
      }
    }
  }    


}
