/* The following code was generated by JFlex 1.2.2 on 1/30/19 6:16 PM */

/*******************************************************************************
 * Copyright (c) 2004, 2019 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * 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;

/**
 * Generate with -skel skeleton-jsp.sse
 */

/**
 * This class is a scanner generated by 
 * <a href="http://www.informatik.tu-muenchen.de/~kleing/jflex/">JFlex</a> 1.2.2
 * on 1/30/19 6:16 PM from the specification file
 * <tt>file:/Users/nitin/epl2/webtools.sourceediting/core/bundles/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\31\2\0\1\24\22\0\1\24\1\30\1\16\1\15"+
    "\1\21\1\27\1\17\1\20\1\14\1\14\1\14\1\67\1\67\1\7"+
    "\1\6\1\3\12\25\1\11\1\74\1\1\1\53\1\2\1\4\1\26"+
    "\1\42\1\75\1\40\1\41\1\57\1\72\1\64\1\64\1\65\1\64"+
    "\1\64\1\36\1\34\1\66\1\54\1\56\1\64\1\71\1\70\1\43"+
    "\1\73\2\64\1\32\1\55\1\64\1\12\1\23\1\13\1\0\1\10"+
    "\1\0\1\61\1\105\1\76\1\62\1\45\1\72\1\77\1\107\1\50"+
    "\1\102\1\64\1\37\1\35\1\52\1\51\1\103\1\64\1\46\1\47"+
    "\1\60\1\104\1\44\1\64\1\33\1\63\1\64\1\22\1\0\1\106"+
    "\71\0\1\101\10\0\27\100\1\0\37\100\1\0\72\100\2\0\13\100"+
    "\2\0\10\100\1\0\65\100\1\0\104\100\11\0\44\100\3\0\2\100"+
    "\4\0\36\100\70\0\131\100\22\0\7\100\16\0\2\101\56\0\106\101"+
    "\32\0\2\101\44\0\1\100\1\101\3\100\1\0\1\100\1\0\24\100"+
    "\1\0\54\100\1\0\7\100\3\0\1\100\1\0\1\100\1\0\1\100"+
    "\1\0\1\100\1\0\22\100\15\0\14\100\1\0\102\100\1\0\14\100"+
    "\1\0\44\100\1\0\4\101\11\0\65\100\2\0\2\100\2\0\2\100"+
    "\3\0\34\100\2\0\10\100\2\0\2\100\67\0\46\100\2\0\1\100"+
    "\7\0\46\100\12\0\21\101\1\0\27\101\1\0\3\101\1\0\1\101"+
    "\1\0\2\101\1\0\1\101\13\0\33\100\5\0\3\100\56\0\32\100"+
    "\5\0\1\101\12\100\10\101\15\0\12\101\6\0\1\101\107\100\2\0"+
    "\5\100\1\0\17\100\1\0\4\100\1\0\1\100\17\101\2\100\2\101"+
    "\1\0\4\101\2\0\12\101\u0207\0\3\101\1\0\65\100\2\0\1\101"+
    "\1\100\20\101\3\0\4\101\3\0\12\100\2\101\2\0\12\101\21\0"+
    "\3\101\1\0\10\100\2\0\2\100\2\0\26\100\1\0\7\100\1\0"+
    "\1\100\3\0\4\100\2\0\1\101\1\0\7\101\2\0\2\101\2\0"+
    "\3\101\11\0\1\101\4\0\2\100\1\0\3\100\2\101\2\0\12\101"+
    "\2\100\20\0\1\101\2\0\6\100\4\0\2\100\2\0\26\100\1\0"+
    "\7\100\1\0\2\100\1\0\2\100\1\0\2\100\2\0\1\101\1\0"+
    "\5\101\4\0\2\101\2\0\3\101\13\0\4\100\1\0\1\100\7\0"+
    "\12\101\2\101\3\100\14\0\3\101\1\0\7\100\1\0\1\100\1\0"+
    "\3\100\1\0\26\100\1\0\7\100\1\0\2\100\1\0\5\100\2\0"+
    "\1\101\1\100\10\101\1\0\3\101\1\0\3\101\22\0\1\100\5\0"+
    "\12\101\21\0\3\101\1\0\10\100\2\0\2\100\2\0\26\100\1\0"+
    "\7\100\1\0\2\100\2\0\4\100\2\0\1\101\1\100\6\101\3\0"+
    "\2\101\2\0\3\101\10\0\2\101\4\0\2\100\1\0\3\100\4\0"+
    "\12\101\22\0\2\101\1\0\6\100\3\0\3\100\1\0\4\100\3\0"+
    "\2\100\1\0\1\100\1\0\2\100\3\0\2\100\3\0\3\100\3\0"+
    "\10\100\1\0\3\100\4\0\5\101\3\0\3\101\1\0\4\101\11\0"+
    "\1\101\17\0\11\101\21\0\3\101\1\0\10\100\1\0\3\100\1\0"+
    "\27\100\1\0\12\100\1\0\5\100\4\0\7\101\1\0\3\101\1\0"+
    "\4\101\7\0\2\101\11\0\2\100\4\0\12\101\22\0\2\101\1\0"+
    "\10\100\1\0\3\100\1\0\27\100\1\0\12\100\1\0\5\100\4\0"+
    "\7\101\1\0\3\101\1\0\4\101\7\0\2\101\7\0\1\100\1\0"+
    "\2\100\4\0\12\101\22\0\2\101\1\0\10\100\1\0\3\100\1\0"+
    "\27\100\1\0\20\100\4\0\6\101\2\0\3\101\1\0\4\101\11\0"+
    "\1\101\10\0\2\100\4\0\12\101\221\0\56\100\1\0\1\100\1\101"+
    "\2\100\7\101\5\0\6\100\1\101\10\101\1\0\12\101\47\0\2\100"+
    "\1\0\1\100\2\0\2\100\1\0\1\100\2\0\1\100\6\0\4\100"+
    "\1\0\7\100\1\0\3\100\1\0\1\100\1\0\1\100\2\0\2\100"+
    "\1\0\2\100\1\0\1\100\1\101\2\100\6\101\1\0\2\101\1\100"+
    "\2\0\5\100\1\0\1\101\1\0\6\101\2\0\12\101\76\0\2\101"+
    "\6\0\12\101\13\0\1\101\1\0\1\101\1\0\1\101\4\0\2\101"+
    "\10\100\1\0\41\100\7\0\24\101\1\0\6\101\4\0\6\101\1\0"+
    "\1\101\1\0\25\101\3\0\7\101\1\0\1\101\346\0\46\100\12\0"+
    "\47\100\11\0\1\100\1\0\2\100\1\0\3\100\1\0\1\100\1\0"+
    "\2\100\1\0\5\100\51\0\1\100\1\0\1\100\1\0\1\100\13\0"+
    "\1\100\1\0\1\100\1\0\1\100\3\0\2\100\3\0\1\100\5\0"+
    "\3\100\1\0\1\100\1\0\1\100\1\0\1\100\1\0\1\100\3\0"+
    "\2\100\3\0\2\100\1\0\1\100\50\0\1\100\11\0\1\100\2\0"+
    "\1\100\2\0\2\100\7\0\2\100\1\0\1\100\1\0\7\100\50\0"+
    "\1\100\4\0\1\100\10\0\1\100\u0c06\0\234\100\4\0\132\100\6\0"+
    "\26\100\2\0\6\100\2\0\46\100\2\0\6\100\2\0\10\100\1\0"+
    "\1\100\1\0\1\100\1\0\1\100\1\0\37\100\2\0\65\100\1\0"+
    "\7\100\1\0\1\100\3\0\3\100\1\0\7\100\3\0\4\100\2\0"+
    "\6\100\4\0\15\100\5\0\3\100\1\0\7\100\323\0\15\101\4\0"+
    "\1\101\104\0\1\100\3\0\2\100\2\0\1\100\121\0\3\100\u0e82\0"+
    "\1\101\1\0\1\100\31\0\11\100\6\101\1\0\5\101\13\0\124\100"+
    "\4\0\2\101\2\0\2\101\2\0\132\100\1\0\3\101\6\0\50\100"+
    "\u1cd3\0\u51a6\100\u0c5a\0\u2ba4\100\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,    72,   144,   216,   288,   360,   432,   504,   576,   648, 
      720,   792,   864,   936,  1008,  1080,  1152,  1224,  1296,  1368, 
     1440,  1512,  1584,  1656,  1728,  1800,  1872,  1944,  2016,  2088, 
     2160,  2232,  2304,  2376,  2448,  2520,  2592,  2664,  2736,  2808, 
     2880,  2952,  3024,  3096,  3168,  3240,  3312,  3384,  3456,  3528, 
     3600,  3672,  3744,  3816,  3888,  3960,  4032,  4104,  4176,  4248, 
     4320,  4392,  4464,  4536,  4608,  4680,  4608,  4680,  4752,  4608, 
     4608,  4680,  4824,  4896,  4968,  5040,  5112,  5184,  5256,  5328, 
     4608,  4680,  5400,  5472,  5544,  4608,  5616,  5616,  5688,  5760, 
     5832,  5400,  4608,  5904,  5976,  4608,  6048,  6120,  6192,  6264, 
     4608,  4680,  6336,  6408,  6480,  6552,  6624,  6696,  4608,  6768, 
     6768,  6840,  6912,  6984,  7056,  7128,  4608,  7200,  7272,  7344, 
     7416,  7488,  7560,  7632,  7704,  4608,  7776,  7848,  7920,  7992, 
     8064,  8136,  8208,  8280,  4608,  8352,  8424,  8496,  8568,  8640, 
     8712,  8784,  8856,  8856,  8928,  9000,  9072,  9144,  9144,  9216, 
     9288,  9360,  9432,  9432,  9504,  9576,  9648,  9720,  4608,  9792, 
     9792,  9864,  9936, 10008, 10080,  4608,  4608,  4680,  4608,  4680, 
    10152, 10224,  7848, 10296, 10368, 10440, 10512, 10584, 10656, 10728, 
    10800, 10872,  4608, 10944, 11016, 11088, 11160,  4608, 11232, 11304, 
    11376,  4608,  4608, 11448,  4608, 11520, 11592,  4608, 11520, 11664, 
    11736,  4608, 11664, 11808, 11880,  4608, 11952,  4608, 12024, 12096, 
    12168, 12240, 12312, 12384,  4608,  4608,  4608, 12456, 12528,  4608, 
    12456, 12600, 12672,  4608, 12600, 12744, 12816, 12888,  4608, 12960, 
    13032, 13104,  4608,  4608, 13176, 13248, 13320, 13392, 13464, 13536, 
    13608, 13680, 13752, 13824, 13896, 13968, 14040, 14112, 14184,  4608, 
    14256, 14328, 14400,  4608,  4608,  5616,  5760, 14472,  4608, 14544, 
     5832, 14616, 14688,  5904,  6048,  6120, 14760,  6192, 14832,  4608, 
    14904, 14976,  6264, 15048, 15120,  4608, 13248,  4608,  6768,  6840, 
    15192,  4608, 15264,  6912, 15336, 15408,  4608, 15480, 15552, 15624, 
    15696,  7776, 15768, 15840,  8064, 15912,  4608, 15984,  8136, 16056, 
    16128, 16200, 16272, 16344, 16416,  8568,  4608, 16488, 16560,  8856, 
     8928,  8856,  9000, 16632,  4608, 16704, 16776, 16848, 16920, 16992, 
    17064,  9144,  9216,  9144,  9288,  4608,  9360,  9432,  9504, 17136, 
     4608, 17208, 17280, 17352, 17424, 17496, 17568, 17640, 17712,  9792, 
     9864, 17784,  4608, 17856, 17928, 18000, 18072, 18144, 18216, 18288, 
    18360, 18432, 10224, 18504, 10440, 18576,  4608, 18648, 10512, 18720, 
    18792, 18864,  4608, 18936,  4608,  4608,  4608,  4608, 19008, 19080, 
    19152, 19224, 11520,  4608, 19296, 19368, 11664,  4608, 19440, 19512, 
    19584, 19656, 19728, 19800, 19872, 19944, 20016, 12240, 12456,  4608, 
    20088, 20160, 12600,  4608, 20232, 20304, 20376, 20448, 20520, 20592, 
    20664, 20736, 20808,  4608,  4608,  4608, 20880, 20952, 21024,  4608, 
    21096, 21168, 21240,  4608, 21312, 21384, 21456,  4608,  4608,  4608, 
     4608,  4608,  5040, 21528, 21600, 21672, 21744, 21816, 21888, 21960, 
    22032, 22104, 22176, 22248, 22320, 22392,  4608,  4608, 22464, 22536, 
    22464, 22608, 22680, 22752, 22824, 22752, 22896, 22968, 23040, 23112, 
    23184, 23256, 23328, 23400, 23400, 23472, 23544, 23616, 23688, 23688, 
    23760, 23832,  9648,  9648,  9648, 23904, 23976, 24048, 24120, 24120, 
    24192, 24264, 10008, 10008, 10008, 24336, 24408, 24480, 24480, 24552, 
    10440, 24624, 10512, 24696, 24696, 19152, 24768, 11304, 11304, 11304, 
    24840, 24912, 11520, 11520, 11520, 24984, 25056, 11664, 11664, 11664, 
    25128, 25200, 11808, 11808, 11808, 19728, 25272, 25344, 12024, 12024, 
    12024, 19944, 25416, 25488, 12240, 12240, 12240, 25560, 12456, 12456, 
    12456, 25632, 25704, 12600, 12600, 12600, 25776, 25848, 12744, 12744, 
    12744, 20520, 25920, 25992, 12960, 12960, 12960, 20736, 26064,  4608, 
     4608, 26136, 26208,  4608, 26280, 26352, 26424, 26496, 26568, 26640, 
     7776,  4608,  4608, 26712, 26784, 26856, 26928, 27000, 16992, 17496, 
     9648, 27072, 18144, 10008, 27144,  4608, 10224, 11304, 11520, 27216, 
    11664, 27288, 11808, 27360,  4608, 12024, 27432, 12240, 12456, 27504, 
    12600, 27576, 12744, 27648,  4608, 12960, 27720, 27792, 27864, 27936, 
    28008, 28080, 28152, 28224, 28296, 28368, 28440, 28512, 28584, 28656, 
    28728, 28800, 28872, 28944, 29016, 29088, 29160, 29232, 29304,  5040, 
    29376, 29448, 29520, 29592, 29664,  4608,  4608, 29736, 29808, 29880, 
    29952, 19728, 19944, 30024, 30096, 20520, 20736, 30168, 30240, 30312, 
    30384,  4608,  4608,  4608, 30456, 30528, 30600, 30672, 30744, 30816, 
    30888, 30960,  7344, 31032, 31104, 31176, 31248, 31320, 31392, 31464, 
     4608, 31536, 31608,  9648, 10008, 11520, 11664, 12456, 12600, 31680, 
    31752, 31824, 31896, 31968, 32040, 32112, 32184,  5040, 32256, 32328, 
    32400, 32472, 32544, 32616, 32688, 32760, 32832, 32904, 32976, 33048, 
    33120, 33192, 33264, 33336, 33408, 33480, 33552, 33624, 33696, 33768, 
    33840, 33912, 33984, 34056, 34128, 34200, 34272, 34344, 34416, 34488, 
    34560, 34632, 34704, 34776,  4608, 34848, 34920, 34992, 35064,  7344, 
    35136, 35208, 35280, 35352, 35424, 35496, 35568, 35640, 35712, 35784, 
    35856, 35928, 36000, 36072
  };

  /** 
   * The packed transition table of the DFA
   */
  final private static String yy_packed = 
    "\1\72\1\73\13\72\1\74\1\72\1\75\1\72\1\76"+
    "\1\72\1\77\3\72\1\100\60\72\1\101\1\102\106\101"+
    "\1\103\1\104\11\103\1\105\15\103\1\106\56\103\1\107"+
    "\1\110\106\107\1\103\1\104\5\103\1\111\21\103\1\106"+
    "\57\103\1\104\2\103\1\112\1\113\2\103\2\114\12\103"+
    "\1\113\4\103\1\113\1\115\1\116\14\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\16\103\1\120\4\103\1\120\56\103\1\121\1\122"+
    "\2\121\1\123\24\121\1\106\56\121\1\103\1\104\2\103"+
    "\1\124\1\113\2\103\2\125\12\103\1\113\4\103\1\113"+
    "\21\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\12\103\1\113\4\103\1\113\21\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\10\127"+
    "\1\132\1\127\1\133\3\127\1\113\4\127\1\113\56\127"+
    "\1\103\1\104\2\103\1\134\24\103\1\106\57\103\1\104"+
    "\1\135\1\136\1\103\1\113\2\103\2\137\12\103\1\113"+
    "\4\103\1\113\21\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\12\103\1\113\4\103"+
    "\1\113\21\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\10\141\1\143\1\141\1\144\3\141\1\113"+
    "\4\141\1\113\56\141\1\103\1\104\3\103\1\113\16\103"+
    "\1\113\4\103\1\113\56\103\1\145\1\146\25\145\1\147"+
    "\60\145\1\103\1\150\3\103\1\113\2\103\2\151\12\103"+
    "\1\113\2\103\1\152\1\103\1\113\21\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\16\103\1\153\2\103\1\152"+
    "\1\103\1\153\57\103\1\150\3\103\1\113\2\103\2\154"+
    "\12\103\1\113\2\103\1\152\1\103\1\113\21\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\12\103"+
    "\1\113\2\103\1\152\1\103\1\113\21\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\10\156\1\160"+
    "\1\156\1\161\3\156\1\113\2\156\1\162\1\156\1\113"+
    "\56\156\1\163\1\164\1\165\1\166\4\163\2\167\20\163"+
    "\21\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\5\173\1\174\3\103\1\175\2\103"+
    "\1\113\1\103\1\173\2\103\1\113\21\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\6\173"+
    "\6\103\1\113\1\103\1\173\2\103\1\113\21\173\1\176"+
    "\13\173\1\103\4\173\1\103\4\173\1\103\4\173\1\103"+
    "\1\173\1\177\1\200\1\165\1\201\1\177\1\113\7\177"+
    "\1\202\1\203\1\177\1\204\1\205\2\177\1\113\4\177"+
    "\1\113\56\177\1\103\1\206\1\207\2\103\1\113\16\103"+
    "\1\113\4\103\1\113\7\103\1\210\1\211\2\103\1\212"+
    "\11\103\1\212\1\103\1\211\1\210\26\103\1\104\1\207"+
    "\2\103\1\113\4\103\1\213\11\103\1\113\4\103\1\113"+
    "\57\103\1\104\1\207\2\103\1\113\2\103\2\214\1\213"+
    "\11\103\1\113\4\103\1\113\21\214\1\103\13\214\1\103"+
    "\4\214\1\103\4\214\1\103\4\214\1\103\1\214\1\103"+
    "\1\104\1\207\2\103\1\113\4\103\1\213\11\103\1\113"+
    "\4\103\1\113\15\103\1\215\6\103\1\216\11\103\1\215"+
    "\12\103\1\216\4\103\1\217\1\104\1\207\1\220\1\217"+
    "\1\113\4\217\1\221\3\217\1\222\1\217\1\223\3\217"+
    "\1\113\4\217\1\113\56\217\1\224\1\104\1\207\1\225"+
    "\1\224\1\113\4\224\1\226\3\224\1\227\1\224\1\230"+
    "\3\224\1\113\4\224\1\113\56\224\1\231\1\104\1\207"+
    "\1\232\1\231\1\113\10\231\1\233\1\231\1\234\3\231"+
    "\1\113\4\231\1\113\56\231\1\235\1\236\1\237\105\235"+
    "\1\240\1\104\1\207\1\241\1\240\1\113\10\240\1\242"+
    "\1\240\1\243\3\240\1\113\4\240\1\113\56\240\1\244"+
    "\1\245\1\246\105\244\1\247\1\250\106\247\1\103\1\104"+
    "\27\103\1\106\56\103\1\251\1\252\106\251\1\103\1\104"+
    "\5\103\1\253\21\103\1\106\56\103\1\254\1\255\1\165"+
    "\1\256\1\254\1\113\7\254\1\257\1\260\1\254\1\261"+
    "\1\262\2\254\1\113\4\254\1\113\56\254\1\263\1\264"+
    "\3\263\1\265\7\263\1\266\2\263\1\267\1\270\2\263"+
    "\1\265\4\263\1\265\56\263\1\271\1\264\3\271\1\272"+
    "\7\271\1\273\1\274\2\271\1\275\2\271\1\272\4\271"+
    "\1\272\56\271\1\276\1\277\14\276\1\300\1\276\1\301"+
    "\1\302\64\276\1\303\1\276\1\304\1\305\16\304\1\306"+
    "\10\304\1\307\56\304\1\310\1\311\14\310\1\312\12\310"+
    "\1\313\56\310\1\103\1\104\16\103\1\306\10\103\1\106"+
    "\57\103\1\104\14\103\1\312\12\103\1\106\56\103\1\314"+
    "\1\315\14\314\1\316\4\314\1\317\62\314\1\320\1\314"+
    "\1\321\1\322\16\321\1\267\2\321\1\323\62\321\1\320"+
    "\1\321\1\324\1\325\13\324\1\326\1\327\1\324\1\330"+
    "\65\324\1\331\1\324\1\332\1\333\16\332\1\334\10\332"+
    "\1\335\56\332\1\336\1\337\14\336\1\340\12\336\1\341"+
    "\56\336\1\103\1\104\16\103\1\334\10\103\1\106\57\103"+
    "\1\104\14\103\1\340\12\103\1\106\56\103\1\342\1\343"+
    "\14\342\1\316\4\342\1\344\62\342\1\345\1\342\1\346"+
    "\1\347\16\346\1\267\2\346\1\350\62\346\1\345\1\346"+
    "\1\72\1\0\13\72\1\0\1\72\1\0\1\72\1\0"+
    "\5\72\1\0\60\72\3\0\1\351\1\352\22\0\1\353"+
    "\1\354\57\0\1\72\1\0\13\72\1\355\1\72\1\0"+
    "\2\72\1\356\4\72\1\0\60\72\5\0\1\357\2\0"+
    "\2\360\3\0\1\361\6\0\1\357\4\0\1\357\21\360"+
    "\1\0\13\360\1\0\4\360\1\0\4\360\1\0\4\360"+
    "\1\0\1\360\1\72\1\0\15\72\1\0\1\72\1\362"+
    "\1\363\4\72\1\0\61\72\1\0\13\72\1\364\1\72"+
    "\1\0\1\72\1\364\5\72\1\0\60\72\5\0\1\357"+
    "\2\0\2\365\12\0\1\357\2\0\1\366\1\0\1\357"+
    "\21\365\1\0\13\365\1\0\4\365\1\0\4\365\1\0"+
    "\4\365\1\0\1\365\137\0\1\353\1\367\72\0\1\370"+
    "\103\0\1\371\102\0\1\372\112\0\1\113\16\0\1\113"+
    "\4\0\1\113\64\0\10\114\7\0\1\114\4\0\21\114"+
    "\1\0\13\114\1\0\4\114\1\0\11\114\1\0\1\114"+
    "\6\0\10\114\7\0\1\114\4\0\2\114\2\373\15\114"+
    "\1\0\13\114\1\0\4\114\1\0\11\114\1\0\1\114"+
    "\6\0\10\114\7\0\1\114\4\0\2\114\1\373\1\374"+
    "\15\114\1\0\13\114\1\0\4\114\1\0\11\114\1\0"+
    "\1\114\6\0\10\114\7\0\1\114\4\0\2\114\2\375"+
    "\15\114\1\0\13\114\1\0\4\114\1\0\11\114\1\0"+
    "\1\114\5\0\1\120\16\0\1\120\4\0\1\120\60\0"+
    "\1\376\107\0\1\377\113\0\10\125\7\0\1\125\4\0"+
    "\21\125\1\0\13\125\1\0\4\125\1\0\11\125\1\0"+
    "\1\125\1\127\2\0\1\u0100\1\127\1\0\10\127\1\0"+
    "\1\127\1\0\3\127\1\0\4\127\1\0\57\127\1\0"+
    "\1\377\1\u0100\1\127\1\0\10\127\1\0\1\127\1\0"+
    "\3\127\1\0\4\127\1\0\56\127\1\u0101\1\0\13\u0101"+
    "\1\u0102\1\u0103\2\u0101\1\u0102\1\u0101\1\u0104\64\u0101\1\u0105"+
    "\1\0\13\u0105\1\u0106\2\u0105\1\u0103\1\u0106\1\u0105\1\u0107"+
    "\64\u0105\2\0\1\135\1\u0108\112\0\10\137\7\0\1\137"+
    "\4\0\21\137\1\0\13\137\1\0\4\137\1\0\11\137"+
    "\1\0\1\137\1\141\2\0\1\u0109\1\141\1\0\10\141"+
    "\1\0\1\141\1\0\3\141\1\0\4\141\1\0\57\141"+
    "\1\0\1\135\1\u010a\1\141\1\0\10\141\1\0\1\141"+
    "\1\0\3\141\1\0\4\141\1\0\56\141\1\143\1\0"+
    "\1\u010b\1\u010c\1\143\1\u010b\7\143\1\u010d\1\u010e\1\143"+
    "\1\u010b\1\u010d\1\143\1\u010f\1\u010b\4\143\1\u010b\56\143"+
    "\1\144\1\0\1\u0110\1\u0111\1\144\1\u0110\7\144\1\u0112"+
    "\1\u0110\1\144\1\u010e\1\u0112\1\144\1\u0113\1\u0110\4\144"+
    "\1\u0110\56\144\2\0\1\u0114\134\0\1\353\1\u0115\65\0"+
    "\10\151\7\0\1\151\4\0\21\151\1\0\13\151\1\0"+
    "\4\151\1\0\11\151\1\0\1\151\2\0\1\u0116\112\0"+
    "\1\153\16\0\1\153\4\0\1\153\64\0\10\154\7\0"+
    "\1\154\4\0\21\154\1\0\13\154\1\0\4\154\1\0"+
    "\11\154\1\0\1\154\1\156\2\0\1\u0117\1\156\1\0"+
    "\10\156\1\0\1\156\1\0\3\156\1\0\4\156\1\0"+
    "\56\156\1\u0118\1\0\13\u0118\1\u0119\1\u011a\2\u0118\1\u0119"+
    "\1\u0118\1\u011b\64\u0118\1\u011c\1\0\13\u011c\1\u011d\2\u011c"+
    "\1\u011a\1\u011d\1\u011c\1\u011e\64\u011c\1\156\1\0\1\u0116"+
    "\1\u0117\1\156\1\0\10\156\1\0\1\156\1\0\3\156"+
    "\1\0\4\156\1\0\56\156\1\163\3\0\26\163\21\0"+
    "\1\163\13\0\1\163\4\0\1\163\4\0\1\163\4\0"+
    "\1\163\4\0\1\351\23\0\1\353\1\354\61\0\1\u011f"+
    "\105\0\1\163\3\0\2\163\10\167\7\163\1\167\4\163"+
    "\21\170\1\163\13\170\1\163\4\170\1\163\4\170\1\167"+
    "\4\170\1\163\1\170\6\0\10\170\7\0\1\170\4\0"+
    "\21\170\1\0\13\170\1\0\4\170\1\0\11\170\1\0"+
    "\1\170\6\0\10\170\7\0\1\170\4\0\15\170\1\u0120"+
    "\3\170\1\0\13\170\1\0\4\170\1\0\11\170\1\0"+
    "\1\170\3\0\1\351\4\0\2\u0121\15\0\1\353\1\354"+
    "\1\0\21\u0121\1\0\13\u0121\1\0\4\u0121\1\0\4\u0121"+
    "\1\0\4\u0121\1\0\1\u0121\6\0\10\173\7\0\1\173"+
    "\4\0\21\173\1\0\13\173\1\0\4\173\1\0\11\173"+
    "\1\0\1\173\6\0\10\173\4\0\1\u0122\2\0\1\173"+
    "\4\0\21\173\1\0\13\173\1\0\4\173\1\0\11\173"+
    "\1\0\1\173\22\0\1\u0123\65\0\1\177\2\0\1\u0124"+
    "\1\177\1\0\10\177\1\0\1\177\1\0\3\177\1\0"+
    "\4\177\1\0\56\177\3\0\1\351\4\0\2\u0125\15\0"+
    "\1\353\1\354\1\0\21\u0125\1\0\13\u0125\1\0\4\u0125"+
    "\1\0\4\u0125\1\0\4\u0125\1\0\1\u0125\1\177\1\0"+
    "\1\u011f\1\u0124\1\177\1\0\10\177\1\0\1\177\1\0"+
    "\3\177\1\0\4\177\1\0\57\177\2\0\1\u0124\1\177"+
    "\1\0\10\177\1\0\1\177\1\0\1\177\1\u0126\1\177"+
    "\1\0\4\177\1\0\56\177\1\u0127\1\0\13\u0127\1\u0128"+
    "\1\u0129\2\u0127\1\u0128\1\u0127\1\u012a\64\u0127\1\u012b\1\0"+
    "\13\u012b\1\u012c\2\u012b\1\u0129\1\u012c\1\u012b\1\u012d\64\u012b"+
    "\1\177\2\0\1\u0124\1\177\1\0\10\177\1\0\1\177"+
    "\1\0\1\177\1\u012e\1\177\1\0\4\177\1\0\56\177"+
    "\3\0\1\351\23\0\1\353\1\u0115\130\0\1\u012f\2\0"+
    "\1\u012f\76\0\1\u0130\14\0\1\u0130\65\0\2\u0131\50\0"+
    "\13\u0132\1\u0133\74\u0132\6\0\10\214\7\0\1\214\4\0"+
    "\21\214\1\0\13\214\1\0\4\214\1\0\11\214\1\0"+
    "\1\214\55\0\1\u0134\5\0\1\u0134\117\0\1\u0135\10\0"+
    "\1\u0135\3\0\1\217\2\0\1\u0136\1\217\1\0\10\217"+
    "\1\0\1\217\1\0\3\217\1\0\4\217\1\0\56\217"+
    "\1\221\2\u0132\1\u0137\1\221\1\u0132\5\221\1\u0138\2\221"+
    "\1\u0132\1\221\1\u0132\3\221\1\u0132\4\221\1\u0132\56\221"+
    "\1\u0139\1\0\13\u0139\1\u013a\1\u013b\2\u0139\1\u013a\1\u0139"+
    "\1\u013c\64\u0139\1\u013d\1\0\1\u013d\2\u013e\1\u013d\4\u013e"+
    "\2\u013d\1\u013e\1\u013f\2\u013d\1\u0140\1\u013f\1\u013d\1\u0141"+
    "\54\u013e\2\u013d\4\u013e\1\u013d\1\u013e\1\224\2\0\1\u0142"+
    "\1\224\1\0\10\224\1\0\1\224\1\0\3\224\1\0"+
    "\4\224\1\0\56\224\1\226\2\u0132\1\u0143\1\226\1\u0132"+
    "\5\226\1\u0144\2\226\1\u0132\1\226\1\u0132\3\226\1\u0132"+
    "\4\226\1\u0132\56\226\16\u0145\1\u0146\71\u0145\20\u0147\1\u0146"+
    "\67\u0147\1\231\2\0\1\u0148\1\231\1\0\10\231\1\0"+
    "\1\231\1\0\3\231\1\0\4\231\1\0\56\231\1\u0149"+
    "\1\0\13\u0149\1\u014a\1\u014b\2\u0149\1\u014a\1\u0149\1\u014c"+
    "\64\u0149\1\u014d\1\0\1\u014d\2\u014e\1\u014d\4\u014e\2\u014d"+
    "\1\u014e\1\u014f\2\u014d\1\u0150\1\u014f\1\u014d\1\u0151\54\u014e"+
    "\2\u014d\4\u014e\1\u014d\1\u014e\2\235\1\0\107\235\1\0"+
    "\24\235\1\u0152\1\u0153\57\235\1\240\2\0\1\u0154\1\240"+
    "\1\0\10\240\1\0\1\240\1\0\3\240\1\0\4\240"+
    "\1\0\56\240\1\u0155\1\0\13\u0155\1\u0156\1\u0157\2\u0155"+
    "\1\u0156\1\u0155\1\u0158\64\u0155\1\u0159\1\0\1\u0159\2\u015a"+
    "\1\u0159\4\u015a\2\u0159\1\u015a\1\u015b\2\u0159\1\u015c\1\u015b"+
    "\1\u0159\1\u015d\54\u015a\2\u0159\4\u015a\1\u0159\1\u015a\2\244"+
    "\1\0\107\244\1\0\24\244\1\u015e\1\u015f\57\244\7\0"+
    "\1\u0160\100\0\1\254\2\0\1\u0161\1\254\1\0\10\254"+
    "\1\0\1\254\1\0\3\254\1\0\4\254\1\0\57\254"+
    "\1\0\1\u011f\1\u0161\1\254\1\0\10\254\1\0\1\254"+
    "\1\0\3\254\1\0\4\254\1\0\57\254\2\0\1\u0161"+
    "\1\254\1\0\10\254\1\0\1\254\1\0\1\254\1\u0162"+
    "\1\254\1\0\4\254\1\0\56\254\1\u0163\1\0\13\u0163"+
    "\1\u0164\1\u0165\2\u0163\1\u0164\1\u0163\1\u0166\64\u0163\1\u0167"+
    "\1\0\13\u0167\1\u0168\2\u0167\1\u0165\1\u0168\1\u0167\1\u0169"+
    "\64\u0167\1\254\2\0\1\u0161\1\254\1\0\10\254\1\0"+
    "\1\254\1\0\1\254\1\u016a\1\254\1\0\4\254\1\0"+
    "\56\254\1\263\1\0\13\263\1\0\2\263\2\0\66\263"+
    "\3\0\1\u016b\23\0\1\353\1\367\57\0\1\263\1\0"+
    "\3\263\1\265\7\263\1\0\2\263\2\0\2\263\1\265"+
    "\4\263\1\265\56\263\5\0\1\u016c\14\0\1\u016d\1\0"+
    "\1\u016c\4\0\1\u016c\63\0\1\u016c\14\0\1\u016e\1\0"+
    "\1\u016c\4\0\1\u016c\56\0\1\271\1\0\13\271\2\0"+
    "\2\271\1\0\67\271\1\0\3\271\1\272\7\271\2\0"+
    "\2\271\1\0\2\271\1\272\4\271\1\272\56\271\5\0"+
    "\1\u016c\14\0\1\u016f\1\0\1\u016c\4\0\1\u016c\63\0"+
    "\1\u016c\14\0\1\u0170\1\0\1\u016c\4\0\1\u016c\56\0"+
    "\16\276\1\0\1\276\1\0\1\u0171\64\276\1\0\17\276"+
    "\1\0\1\276\1\0\1\u0171\5\276\1\u0172\56\276\1\0"+
    "\17\276\1\0\1\276\1\0\1\276\1\u0173\63\276\1\u0174"+
    "\1\276\20\u0175\1\u0176\107\u0175\1\u0176\6\u0175\1\u0177\1\u0178"+
    "\57\u0175\16\u0179\1\u017a\107\u0179\1\u017a\10\u0179\1\u017b\1\u017c"+
    "\57\u0179\16\314\1\0\4\314\1\u017d\62\314\1\0\17\314"+
    "\1\0\4\314\1\u017d\3\314\1\u017e\56\314\1\0\17\314"+
    "\1\u017f\71\314\20\321\1\0\2\321\1\u0180\62\321\1\0"+
    "\21\321\1\0\2\321\1\u0180\3\321\1\u0181\56\321\1\0"+
    "\21\321\1\u0182\67\321\16\324\1\0\1\324\1\0\65\324"+
    "\1\0\17\324\1\0\1\324\1\0\6\324\1\u0183\56\324"+
    "\1\0\17\324\1\0\1\324\1\0\1\324\1\u0184\63\324"+
    "\1\0\1\324\20\u0185\1\u0186\107\u0185\1\u0186\6\u0185\1\u0187"+
    "\1\u0188\57\u0185\16\u0189\1\u018a\107\u0189\1\u018a\10\u0189\1\u018b"+
    "\1\u018c\57\u0189\16\342\1\0\4\342\1\u018d\62\342\1\0"+
    "\17\342\1\0\4\342\1\u018d\3\342\1\u018e\56\342\1\0"+
    "\17\342\1\u018f\71\342\20\346\1\0\2\346\1\u0190\62\346"+
    "\1\0\21\346\1\0\2\346\1\u0190\3\346\1\u0191\56\346"+
    "\1\0\21\346\1\u0192\67\346\7\0\1\u0193\16\0\1\u0194"+
    "\1\0\1\u0195\22\0\1\u0196\43\0\1\u0197\2\0\1\u0198"+
    "\75\0\1\72\1\0\13\72\1\u0199\1\72\1\0\1\72"+
    "\1\0\5\72\1\0\60\72\106\356\1\u019a\1\356\5\0"+
    "\1\357\2\0\2\u019b\12\0\1\357\4\0\1\357\21\u019b"+
    "\1\0\13\u019b\1\0\4\u019b\1\0\4\u019b\1\0\4\u019b"+
    "\1\0\1\u019b\1\u019c\1\0\3\u019c\1\u019d\10\360\1\u019c"+
    "\1\0\4\u019c\1\u019d\1\360\1\u019c\1\0\1\u019c\1\u019d"+
    "\21\360\1\u019c\13\360\1\u019c\4\360\1\u019e\11\360\1\u019c"+
    "\1\360\25\0\1\u019f\5\0\1\u01a0\54\0\1\72\1\0"+
    "\13\72\1\0\1\72\1\0\1\72\1\u01a1\5\72\1\0"+
    "\60\72\106\363\1\u01a2\1\363\22\0\1\u01a3\65\0\1\u019c"+
    "\1\0\3\u019c\1\u019d\10\365\1\u019c\1\0\4\u019c\1\u019d"+
    "\1\365\1\u019c\1\0\1\u019c\1\u019d\21\365\1\u019c\13\365"+
    "\1\u019c\4\365\1\u01a4\11\365\1\u019c\1\365\27\0\1\366"+
    "\72\0\1\u0198\77\0\1\u01a5\107\0\1\u01a6\113\0\10\114"+
    "\7\0\1\114\4\0\4\114\2\u01a7\13\114\1\0\13\114"+
    "\1\0\4\114\1\0\11\114\1\0\1\114\6\0\10\114"+
    "\7\0\1\114\4\0\4\114\1\u01a7\1\u01a8\13\114\1\0"+
    "\13\114\1\0\4\114\1\0\11\114\1\0\1\114\6\0"+
    "\10\114\7\0\1\114\4\0\21\114\1\0\2\114\1\u01a9"+
    "\10\114\1\0\4\114\1\0\6\114\1\u01a9\2\114\1\0"+
    "\1\114\1\u0101\1\0\14\u0101\1\u0103\3\u0101\1\0\66\u0101"+
    "\1\0\13\u0101\1\u01aa\1\u0103\2\u0101\1\u01aa\1\u0101\1\u0104"+
    "\64\u0101\1\u0105\1\0\16\u0105\1\u0103\1\u0105\1\0\66\u0105"+
    "\1\0\13\u0105\1\u01ab\2\u0105\1\u0103\1\u01ab\1\u0105\1\u0107"+
    "\64\u0105\1\u010b\1\0\13\u010b\1\u01ac\1\u010e\2\u010b\1\u01ac"+
    "\1\u010b\1\u01ad\64\u010b\1\143\1\0\1\u010b\1\u010c\1\143"+
    "\1\u010b\10\143\1\u010e\1\143\1\u010b\1\143\1\141\1\143"+
    "\1\u010b\4\143\1\u010b\57\143\1\0\1\u010b\1\u010c\1\143"+
    "\1\u010b\7\143\1\u01ae\1\u010e\1\143\1\u010b\1\u01ae\1\143"+
    "\1\u010f\1\u010b\4\143\1\u010b\56\143\1\u0110\1\0\13\u0110"+
    "\1\u01af\2\u0110\1\u010e\1\u01af\1\u0110\1\u01b0\64\u0110\1\144"+
    "\1\0\1\u0110\1\u0111\1\144\1\u0110\10\144\1\u0110\1\144"+
    "\1\u010e\1\144\1\141\1\144\1\u0110\4\144\1\u0110\57\144"+
    "\1\0\1\u0110\1\u0111\1\144\1\u0110\7\144\1\u01b1\1\u0110"+
    "\1\144\1\u010e\1\u01b1\1\144\1\u0113\1\u0110\4\144\1\u0110"+
    "\56\144\1\u0118\1\0\14\u0118\1\u011a\3\u0118\1\0\66\u0118"+
    "\1\0\13\u0118\1\u01b2\1\u011a\2\u0118\1\u01b2\1\u0118\1\u011b"+
    "\64\u0118\1\u011c\1\0\16\u011c\1\u011a\1\u011c\1\0\66\u011c"+
    "\1\0\13\u011c\1\u01b3\2\u011c\1\u011a\1\u01b3\1\u011c\1\u011e"+
    "\64\u011c\6\0\10\170\7\0\1\170\4\0\21\170\1\0"+
    "\13\170\1\0\4\170\1\0\6\170\1\u01b4\2\170\1\0"+
    "\1\170\6\0\10\u0121\7\0\1\u0121\4\0\21\u0121\1\0"+
    "\13\u0121\1\0\4\u0121\1\0\11\u0121\1\0\1\u0121\106\u0122"+
    "\1\u01b5\1\u0122\106\u0123\1\u01b6\1\u0123\6\0\10\u0125\7\0"+
    "\1\u0125\4\0\21\u0125\1\0\13\u0125\1\0\4\u0125\1\0"+
    "\11\u0125\1\0\1\u0125\1\u01b7\2\u01b8\1\u01b9\1\u01b7\1\u01b8"+
    "\10\u01b7\1\u01b8\1\u01b7\1\u01b8\3\u01b7\1\u01b8\4\u01b7\1\u01b8"+
    "\54\u01b7\1\177\1\u01b7\1\u0127\1\0\14\u0127\1\u0129\3\u0127"+
    "\1\0\66\u0127\1\0\13\u0127\1\u01ba\1\u0129\2\u0127\1\u01ba"+
    "\1\u0127\1\u012a\64\u0127\1\u012b\1\0\16\u012b\1\u0129\1\u012b"+
    "\1\0\66\u012b\1\0\13\u012b\1\u01bb\2\u012b\1\u0129\1\u01bb"+
    "\1\u012b\1\u012d\64\u012b\1\u01bc\2\u01bd\1\u01be\1\u01bc\1\u01bd"+
    "\10\u01bc\1\u01bd\1\u01bc\1\u01bd\3\u01bc\1\u01bd\4\u01bc\1\u01bd"+
    "\54\u01bc\1\177\1\u01bc\40\0\1\u01bf\35\0\1\u01bf\54\0"+
    "\1\u01c0\14\0\1\u01c0\74\0\1\u01c1\11\0\1\u01c1\77\0"+
    "\1\u01c2\20\0\1\u01c2\114\0\1\u01c3\7\0\1\u01c3\2\0"+
    "\1\u0139\1\0\14\u0139\1\u013b\3\u0139\1\0\66\u0139\1\0"+
    "\13\u0139\1\u01c4\1\u013b\2\u0139\1\u01c4\1\u0139\1\u013c\64\u0139"+
    "\1\u013d\1\0\13\u013d\1\u01c5\2\u013d\1\u013b\1\u01c5\1\u013d"+
    "\1\u0141\65\u013d\1\0\13\u013d\1\u01c5\2\u013d\1\u01c6\1\u01c5"+
    "\1\u013d\1\u0141\65\u013d\1\0\16\u013d\1\u01c6\1\u013d\1\0"+
    "\65\u013d\20\0\1\u01c7\67\0\1\u013d\1\0\13\u013d\1\u01c8"+
    "\2\u013d\1\u013b\1\u01c8\1\u013d\1\u0141\64\u013d\1\u0149\1\0"+
    "\14\u0149\1\u014b\3\u0149\1\0\66\u0149\1\0\13\u0149\1\u01c9"+
    "\1\u014b\2\u0149\1\u01c9\1\u0149\1\u014c\64\u0149\1\u014d\1\0"+
    "\13\u014d\1\u01ca\2\u014d\1\u014b\1\u01ca\1\u014d\1\u0151\65\u014d"+
    "\1\0\13\u014d\1\u01ca\2\u014d\1\u01cb\1\u01ca\1\u014d\1\u0151"+
    "\65\u014d\1\0\16\u014d\1\u01cb\1\u014d\1\0\65\u014d\20\0"+
    "\1\u01cc\67\0\1\u014d\1\0\13\u014d\1\u01cd\2\u014d\1\u014b"+
    "\1\u01cd\1\u014d\1\u0151\64\u014d\2\235\1\0\4\235\1\u01ce"+
    "\16\235\1\u01cf\1\235\1\u01d0\22\235\1\u01d1\36\235\1\0"+
    "\7\235\1\u01d2\75\235\1\u0155\1\0\14\u0155\1\u0157\3\u0155"+
    "\1\0\66\u0155\1\0\13\u0155\1\u01d3\1\u0157\2\u0155\1\u01d3"+
    "\1\u0155\1\u0158\64\u0155\1\u0159\1\0\13\u0159\1\u01d4\2\u0159"+
    "\1\u0157\1\u01d4\1\u0159\1\u015d\65\u0159\1\0\13\u0159\1\u01d4"+
    "\2\u0159\1\u01d5\1\u01d4\1\u0159\1\u015d\65\u0159\1\0\16\u0159"+
    "\1\u01d5\1\u0159\1\0\65\u0159\20\0\1\u01d6\67\0\1\u0159"+
    "\1\0\13\u0159\1\u01d7\2\u0159\1\u0157\1\u01d7\1\u0159\1\u015d"+
    "\64\u0159\2\244\1\0\4\244\1\u01d8\16\244\1\u01d9\1\244"+
    "\1\u01da\22\244\1\u01db\36\244\1\0\7\244\1\u01dc\75\244"+
    "\27\0\1\u01dd\60\0\1\u01de\2\u01b8\1\u01df\1\u01de\1\u01b8"+
    "\10\u01de\1\u01b8\1\u01de\1\u01b8\3\u01de\1\u01b8\4\u01de\1\u01b8"+
    "\54\u01de\1\254\1\u01de\16\u0163\1\u0165\3\u0163\1\0\66\u0163"+
    "\1\0\13\u0163\1\u01e0\1\u01e1\2\u0163\1\u01e0\1\u0163\1\u0166"+
    "\64\u0163\20\u0167\1\u0165\1\u0167\1\0\66\u0167\1\0\13\u0167"+
    "\1\u01e2\2\u0167\1\u01e3\1\u01e2\1\u0167\1\u0169\64\u0167\1\u01e4"+
    "\2\u01bd\1\u01e5\1\u01e4\1\u01bd\10\u01e4\1\u01bd\1\u01e4\1\u01bd"+
    "\3\u01e4\1\u01bd\4\u01e4\1\u01bd\54\u01e4\1\254\1\u01e4\5\0"+
    "\1\u016c\16\0\1\u016c\4\0\1\u016c\56\0\16\276\1\0"+
    "\1\276\1\0\1\276\1\u01e6\63\276\1\u0174\10\276\1\u01e7"+
    "\6\276\1\0\1\276\1\0\1\u0171\4\276\1\u01e8\1\276"+
    "\1\u01e9\22\276\1\u01ea\32\276\1\0\1\276\16\u01e6\1\0"+
    "\1\u01e6\1\0\65\u01e6\1\0\1\u01e6\16\u0174\1\0\1\u0174"+
    "\1\0\1\u01eb\64\u0174\1\0\1\u0174\7\u0175\1\u01ec\10\u0175"+
    "\1\u0176\5\u0175\1\u01ed\1\u0175\1\u01ee\22\u0175\1\u01ef\46\u0175"+
    "\1\u01f0\5\u0175\1\u0176\67\u0175\7\u0179\1\u01f1\6\u0179\1\u017a"+
    "\7\u0179\1\u01f2\1\u0179\1\u01f3\22\u0179\1\u01f4\46\u0179\1\u01f5"+
    "\3\u0179\1\u017a\71\u0179\16\314\1\0\100\314\1\u01f6\6\314"+
    "\1\0\4\314\1\u017d\2\314\1\u01f7\1\314\1\u01f8\22\314"+
    "\1\u01f9\32\314\1\0\1\314\23\u01fa\1\u01fb\64\u01fa\20\321"+
    "\1\0\76\321\1\u01fc\10\321\1\0\2\321\1\u0180\2\321"+
    "\1\u01fd\1\321\1\u01fe\22\321\1\u01ff\32\321\1\0\1\321"+
    "\23\u0200\1\u0201\64\u0200\7\324\1\u0202\6\324\1\0\1\324"+
    "\1\0\5\324\1\u0203\1\324\1\u0204\22\324\1\u0205\32\324"+
    "\1\0\1\324\7\u0185\1\u0206\10\u0185\1\u0186\5\u0185\1\u0207"+
    "\1\u0185\1\u0208\22\u0185\1\u0209\46\u0185\1\u020a\5\u0185\1\u0186"+
    "\67\u0185\7\u0189\1\u020b\6\u0189\1\u018a\7\u0189\1\u020c\1\u0189"+
    "\1\u020d\22\u0189\1\u020e\46\u0189\1\u020f\3\u0189\1\u018a\71\u0189"+
    "\16\342\1\0\100\342\1\u0210\6\342\1\0\4\342\1\u018d"+
    "\2\342\1\u0211\1\342\1\u0212\22\342\1\u0213\32\342\1\0"+
    "\1\342\23\u0214\1\u0215\64\u0214\20\346\1\0\76\346\1\u0216"+
    "\10\346\1\0\2\346\1\u0190\2\346\1\u0217\1\346\1\u0218"+
    "\22\346\1\u0219\32\346\1\0\1\346\23\u021a\1\u021b\64\u021a"+
    "\7\0\1\u021c\107\0\1\u021d\140\0\1\u021e\64\0\1\u0199"+
    "\72\0\1\u019b\1\0\15\u019b\1\0\7\u019b\1\0\60\u019b"+
    "\1\u019c\1\0\15\u019c\1\0\7\u019c\1\0\44\u019c\1\0"+
    "\14\u019c\1\0\3\u019c\1\u019d\11\u019c\1\0\4\u019c\1\u019d"+
    "\2\u019c\1\0\1\u019c\1\u019d\42\u019c\1\u021f\13\u019c\25\0"+
    "\1\u019f\46\0\1\u0220\40\0\1\u0221\12\0\3\u0221\2\0"+
    "\1\u0221\11\0\1\u0221\1\0\2\u0221\7\0\1\u0221\2\0"+
    "\2\u0221\6\0\1\u0221\23\0\1\u01a1\74\0\1\114\1\u0222"+
    "\6\114\7\0\1\114\4\0\21\114\1\0\13\114\1\0"+
    "\4\114\1\0\11\114\1\0\1\114\6\0\10\114\7\0"+
    "\1\114\4\0\17\114\1\u0223\1\114\1\0\1\u0223\12\114"+
    "\1\0\4\114\1\0\11\114\1\0\1\114\1\u0101\1\0"+
    "\14\u0101\1\u0103\71\u0101\1\u0105\1\0\16\u0105\1\u0103\67\u0105"+
    "\1\u010b\1\0\14\u010b\1\u010e\3\u010b\1\0\66\u010b\1\0"+
    "\13\u010b\1\u0224\1\u010e\2\u010b\1\u0224\1\u010b\1\u01ad\64\u010b"+
    "\1\143\1\0\1\u010b\1\u010c\1\143\1\u010b\10\143\1\u010e"+
    "\1\143\1\u010b\3\143\1\u010b\4\143\1\u010b\56\143\1\u0110"+
    "\1\0\16\u0110\1\u010e\1\u0110\1\0\66\u0110\1\0\13\u0110"+
    "\1\u0225\2\u0110\1\u010e\1\u0225\1\u0110\1\u01b0\64\u0110\1\144"+
    "\1\0\1\u0110\1\u0111\1\144\1\u0110\10\144\1\u0110\1\144"+
    "\1\u010e\3\144\1\u0110\4\144\1\u0110\56\144\1\u0118\1\0"+
    "\14\u0118\1\u011a\71\u0118\1\u011c\1\0\16\u011c\1\u011a\67\u011c"+
    "\6\0\3\170\1\u0226\4\170\7\0\1\170\4\0\21\170"+
    "\1\0\13\170\1\0\4\170\1\0\11\170\1\0\1\170"+
    "\1\u01b7\2\u01b8\1\u01b9\1\u01b7\1\u01b8\10\u01b7\1\u01b8\1\u01b7"+
    "\1\u01b8\3\u01b7\1\u01b8\4\u01b7\1\u01b8\54\u01b7\1\u0227\1\u01b7"+
    "\106\u01b8\1\u0228\1\u01b8\1\u0127\1\0\14\u0127\1\u0129\71\u0127"+
    "\1\u012b\1\0\16\u012b\1\u0129\67\u012b\1\u01bc\2\u01bd\1\u01be"+
    "\1\u01bc\1\u01bd\10\u01bc\1\u01bd\1\u01bc\1\u01bd\3\u01bc\1\u01bd"+
    "\4\u01bc\1\u01bd\54\u01bc\1\u0227\1\u01bc\106\u01bd\1\u0229\1\u01bd"+
    "\43\0\1\u022a\14\0\1\u022a\65\0\2\u022b\104\0\2\u022c"+
    "\115\0\1\u022d\14\0\1\u022d\65\0\2\u022e\50\0\1\u0139"+
    "\1\0\14\u0139\1\u013b\71\u0139\1\u013d\1\0\16\u013d\1\u013b"+
    "\1\u013d\1\0\65\u013d\3\0\2\u022f\1\0\4\u022f\2\0"+
    "\2\u022f\2\0\1\u0140\1\u022f\2\0\54\u022f\2\0\4\u022f"+
    "\1\0\1\u022f\1\u013d\1\0\16\u013d\1\u013b\67\u013d\1\u0149"+
    "\1\0\14\u0149\1\u014b\71\u0149\1\u014d\1\0\16\u014d\1\u014b"+
    "\1\u014d\1\0\65\u014d\3\0\2\u0230\1\0\4\u0230\2\0"+
    "\2\u0230\2\0\1\u0150\1\u0230\2\0\54\u0230\2\0\4\u0230"+
    "\1\0\1\u0230\1\u014d\1\0\16\u014d\1\u014b\67\u014d\2\235"+
    "\1\0\4\235\1\u0231\102\235\1\0\35\235\1\u0232\47\235"+
    "\1\u0155\1\0\14\u0155\1\u0157\71\u0155\1\u0159\1\0\16\u0159"+
    "\1\u0157\1\u0159\1\0\65\u0159\3\0\2\u0233\1\0\4\u0233"+
    "\2\0\2\u0233\2\0\1\u015c\1\u0233\2\0\54\u0233\2\0"+
    "\4\u0233\1\0\1\u0233\1\u0159\1\0\16\u0159\1\u0157\67\u0159"+
    "\2\244\1\0\4\244\1\u0234\102\244\1\0\35\244\1\u0235"+
    "\47\244\2\0\1\u0236\105\0\1\u01de\2\u01b8\1\u01df\1\u01de"+
    "\1\u01b8\10\u01de\1\u01b8\1\u01de\1\u01b8\3\u01de\1\u01b8\4\u01de"+
    "\1\u01b8\54\u01de\1\u0237\1\u01de\16\u0163\1\u0165\71\u0163\20\u0167"+
    "\1\u0165\67\u0167\1\u01e4\2\u01bd\1\u01e5\1\u01e4\1\u01bd\10\u01e4"+
    "\1\u01bd\1\u01e4\1\u01bd\3\u01e4\1\u01bd\4\u01e4\1\u01bd\54\u01e4"+
    "\1\u0237\1\u01e4\7\276\1\u0238\6\276\1\0\1\276\1\0"+
    "\1\u0171\64\276\1\0\1\276\16\u0174\1\0\1\u0174\1\0"+
    "\1\u0174\1\0\65\u0174\7\u0175\1\u0239\10\u0175\1\u0176\107\u0175"+
    "\1\u0176\17\u0175\1\u023a\47\u0175\7\u0179\1\u023b\6\u0179\1\u017a"+
    "\107\u0179\1\u017a\21\u0179\1\u023c\47\u0179\7\314\1\u023d\6\314"+
    "\1\0\4\314\1\u017d\62\314\1\0\1\314\16\u023e\1\u023f"+
    "\67\u023e\1\0\1\u023e\7\321\1\u0240\10\321\1\0\2\321"+
    "\1\u0180\62\321\1\0\1\321\20\u0241\1\u023f\65\u0241\1\0"+
    "\1\u0241\7\324\1\u0242\6\324\1\0\1\324\1\0\65\324"+
    "\1\0\1\324\7\u0185\1\u0243\10\u0185\1\u0186\107\u0185\1\u0186"+
    "\17\u0185\1\u0244\47\u0185\7\u0189\1\u0245\6\u0189\1\u018a\107\u0189"+
    "\1\u018a\21\u0189\1\u0246\47\u0189\7\342\1\u0247\6\342\1\0"+
    "\4\342\1\u018d\62\342\1\0\1\342\16\u0248\1\u0249\67\u0248"+
    "\1\0\1\u0248\7\346\1\u024a\10\346\1\0\2\346\1\u0190"+
    "\62\346\1\0\1\346\20\u024b\1\u0249\65\u024b\1\0\1\u024b"+
    "\41\0\1\u024c\142\0\1\u021f\40\0\1\u0221\12\0\3\u0221"+
    "\2\0\1\u0221\11\0\1\u0221\1\0\2\u0221\7\0\1\u0221"+
    "\1\0\1\u0220\2\u0221\6\0\1\u0221\10\0\10\114\7\0"+
    "\1\114\4\0\15\114\1\u024d\3\114\1\0\13\114\1\0"+
    "\4\114\1\0\11\114\1\0\1\114\6\0\10\114\7\0"+
    "\1\114\4\0\14\114\1\u024e\4\114\1\0\13\114\1\0"+
    "\1\114\1\u024e\2\114\1\0\11\114\1\0\1\114\1\u010b"+
    "\1\0\14\u010b\1\u010e\71\u010b\1\u0110\1\0\16\u0110\1\u010e"+
    "\67\u0110\6\0\10\170\7\0\1\170\4\0\14\170\1\u024f"+
    "\4\170\1\0\6\170\1\u0250\4\170\1\0\4\170\1\0"+
    "\11\170\1\0\1\170\55\0\1\u0251\5\0\1\u0251\74\0"+
    "\1\u0252\14\0\1\u0252\67\0\1\u0253\11\0\1\u0253\75\0"+
    "\1\u0254\11\0\1\u0254\100\0\1\u0255\14\0\1\u0255\22\0"+
    "\2\235\1\0\36\235\1\u0256\46\235\2\244\1\0\36\244"+
    "\1\u0257\46\244\20\u0175\1\u0176\20\u0175\1\u0258\46\u0175\16\u0179"+
    "\1\u017a\22\u0179\1\u0259\46\u0179\16\u023e\1\u01fa\4\u023e\1\u025a"+
    "\62\u023e\1\u01fa\1\u023e\20\u0241\1\u0200\2\u0241\1\u025b\62\u0241"+
    "\1\u0200\1\u0241\20\u0185\1\u0186\20\u0185\1\u025c\46\u0185\16\u0189"+
    "\1\u018a\22\u0189\1\u025d\46\u0189\16\u0248\1\u0214\4\u0248\1\u025e"+
    "\62\u0248\1\u0214\1\u0248\20\u024b\1\u021a\2\u024b\1\u025f\62\u024b"+
    "\1\u021a\1\u024b\42\0\1\u0260\53\0\10\114\7\0\1\114"+
    "\4\0\21\114\1\0\4\114\1\u0261\6\114\1\0\4\114"+
    "\1\0\11\114\1\0\1\114\6\0\10\114\7\0\1\114"+
    "\4\0\11\114\1\u0262\7\114\1\0\4\114\1\u0262\6\114"+
    "\1\0\4\114\1\0\11\114\1\0\1\114\6\0\10\170"+
    "\7\0\1\170\4\0\17\170\1\u0263\1\170\1\0\13\170"+
    "\1\0\4\170\1\0\11\170\1\0\1\170\6\0\10\170"+
    "\7\0\1\170\4\0\16\170\1\u0264\2\170\1\0\13\170"+
    "\1\0\4\170\1\0\11\170\1\0\1\170\56\0\1\u0265"+
    "\24\0\1\u0265\53\0\1\u0266\20\0\1\u0266\71\0\1\u0267"+
    "\13\0\1\u0267\55\0\2\u0268\112\0\1\u0269\35\0\1\u0269"+
    "\11\0\2\235\1\0\37\235\1\u026a\45\235\2\244\1\0"+
    "\37\244\1\u026b\45\244\20\u0175\1\u0176\21\u0175\1\u026c\45\u0175"+
    "\16\u0179\1\u017a\23\u0179\1\u026d\45\u0179\16\u023e\1\u026e\4\u023e"+
    "\1\u025a\62\u023e\1\u01fa\1\u023e\20\u0241\1\u026f\2\u0241\1\u025b"+
    "\62\u0241\1\u0200\1\u0241\20\u0185\1\u0186\21\u0185\1\u0270\45\u0185"+
    "\16\u0189\1\u018a\23\u0189\1\u0271\45\u0189\16\u0248\1\u0272\4\u0248"+
    "\1\u025e\62\u0248\1\u0214\1\u0248\20\u024b\1\u0273\2\u024b\1\u025f"+
    "\62\u024b\1\u021a\1\u024b\43\0\1\u0274\52\0\10\114\7\0"+
    "\1\114\4\0\21\114\1\0\7\114\1\u0275\3\114\1\0"+
    "\4\114\1\0\11\114\1\0\1\114\6\0\10\170\7\0"+
    "\1\170\4\0\17\170\1\u0276\1\170\1\0\13\170\1\0"+
    "\4\170\1\0\11\170\1\0\1\170\6\0\10\170\7\0"+
    "\1\170\4\0\14\170\1\u0277\4\170\1\0\13\170\1\0"+
    "\4\170\1\0\11\170\1\0\1\170\45\0\1\u0278\11\0"+
    "\1\u0278\73\0\1\u0279\14\0\1\u0279\72\0\1\u027a\14\0"+
    "\1\u027a\27\0\2\235\1\0\40\235\1\u027b\44\235\2\244"+
    "\1\0\40\244\1\u027c\44\244\20\u0175\1\u0176\22\u0175\1\u027d"+
    "\44\u0175\16\u0179\1\u017a\24\u0179\1\u027e\44\u0179\20\u0185\1\u0186"+
    "\22\u0185\1\u027f\44\u0185\16\u0189\1\u018a\24\u0189\1\u0280\44\u0189"+
    "\42\0\1\u0281\53\0\10\114\7\0\1\114\4\0\5\114"+
    "\1\u0282\13\114\1\0\13\114\1\0\4\114\1\0\11\114"+
    "\1\0\1\114\6\0\10\170\7\0\1\170\4\0\21\170"+
    "\1\0\4\170\1\u0283\6\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\6\0\10\170\7\0\1\170\4\0\13\170"+
    "\1\u0284\5\170\1\0\13\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\2\235\1\0\37\235\1\u0285\45\235\2\244"+
    "\1\0\37\244\1\u0286\45\244\20\u0175\1\u0176\21\u0175\1\u0287"+
    "\45\u0175\16\u0179\1\u017a\23\u0179\1\u0288\45\u0179\20\u0185\1\u0186"+
    "\21\u0185\1\u0289\45\u0185\16\u0189\1\u018a\23\u0189\1\u028a\45\u0189"+
    "\12\0\1\u028b\103\0\10\114\7\0\1\114\4\0\13\114"+
    "\1\u028c\5\114\1\0\13\114\1\0\4\114\1\0\11\114"+
    "\1\0\1\114\6\0\10\170\7\0\1\170\4\0\21\170"+
    "\1\0\13\170\1\0\4\170\1\0\1\170\1\u028d\7\170"+
    "\1\0\1\170\2\235\1\0\7\235\1\u028e\75\235\2\244"+
    "\1\0\7\244\1\u028f\75\244\12\u0175\1\u0290\5\u0175\1\u0176"+
    "\67\u0175\12\u0179\1\u0291\3\u0179\1\u017a\71\u0179\12\u0185\1\u0292"+
    "\5\u0185\1\u0186\67\u0185\12\u0189\1\u0293\3\u0189\1\u018a\71\u0189"+
    "\6\0\10\114\7\0\1\114\4\0\15\114\1\u0294\3\114"+
    "\1\0\13\114\1\0\4\114\1\0\11\114\1\0\1\114"+
    "\6\0\10\170\7\0\1\170\4\0\21\170\1\0\4\170"+
    "\1\u0295\6\170\1\0\4\170\1\0\11\170\1\0\1\170"+
    "\6\0\10\114\7\0\1\114\4\0\21\114\1\0\13\114"+
    "\1\0\4\114\1\0\11\114\1\0\1\u0296\6\0\10\170"+
    "\7\0\1\170\4\0\16\170\1\u0297\2\170\1\0\13\170"+
    "\1\0\4\170\1\0\11\170\1\0\1\170\6\0\10\114"+
    "\7\0\1\114\4\0\13\114\1\u0298\5\114\1\0\13\114"+
    "\1\0\4\114\1\0\11\114\1\0\1\114\6\0\10\170"+
    "\7\0\1\170\4\0\12\170\1\u0299\6\170\1\0\13\170"+
    "\1\0\4\170\1\0\11\170\1\0\1\170\6\0\10\114"+
    "\7\0\1\114\4\0\13\114\1\u029a\5\114\1\0\13\114"+
    "\1\0\4\114\1\0\11\114\1\0\1\114\6\0\10\170"+
    "\7\0\1\170\4\0\13\170\1\u029b\5\170\1\0\13\170"+
    "\1\0\4\170\1\0\11\170\1\0\1\170\6\0\10\114"+
    "\7\0\1\114\4\0\21\114\1\0\4\114\1\u029c\6\114"+
    "\1\0\4\114\1\0\11\114\1\0\1\114\6\u029d\10\u029e"+
    "\7\u029d\1\u029e\3\u029d\1\0\21\u029e\1\u029d\13\u029e\1\u029d"+
    "\4\u029e\1\u029d\11\u029e\1\u029d\1\u029e\44\0\1\u029f\3\0"+
    "\1\u02a0\7\0\1\u02a1\1\u02a2\21\0\1\u02a3\12\0\10\170"+
    "\7\0\1\170\4\0\12\170\1\u02a4\3\170\1\u02a5\2\170"+
    "\1\0\4\170\1\u02a6\1\u02a7\5\170\1\0\4\170\1\0"+
    "\6\170\1\u02a8\2\170\1\0\1\170\61\0\1\u02a9\100\0"+
    "\1\u02aa\116\0\1\u02ab\106\0\1\u02ac\110\0\1\u02ad\34\0"+
    "\10\170\7\0\1\170\4\0\21\170\1\0\5\170\1\u02ae"+
    "\5\170\1\0\4\170\1\0\11\170\1\0\1\170\6\0"+
    "\10\170\7\0\1\170\4\0\20\170\1\u02af\1\0\13\170"+
    "\1\0\4\170\1\0\11\170\1\0\1\170\6\0\10\170"+
    "\7\0\1\170\4\0\21\170\1\0\5\170\1\u02b0\5\170"+
    "\1\0\4\170\1\0\11\170\1\0\1\170\6\0\10\170"+
    "\7\0\1\170\4\0\21\170\1\0\4\170\1\u02b1\6\170"+
    "\1\0\4\170\1\0\11\170\1\0\1\170\6\0\10\170"+
    "\7\0\1\170\4\0\21\170\1\0\5\170\1\u02b2\5\170"+
    "\1\0\4\170\1\0\11\170\1\0\1\170\46\0\1\u02b3"+
    "\137\0\1\u02b4\110\0\1\u02b5\70\0\1\u02b6\126\0\1\u02b7"+
    "\16\0\10\170\7\0\1\170\4\0\14\170\1\u02b8\4\170"+
    "\1\0\13\170\1\0\4\170\1\0\11\170\1\0\1\170"+
    "\6\0\10\170\7\0\1\170\4\0\21\170\1\0\13\170"+
    "\1\0\4\170\1\0\1\170\1\u02b9\7\170\1\0\1\170"+
    "\6\0\10\170\7\0\1\170\4\0\21\170\1\0\13\170"+
    "\1\0\4\170\1\0\2\170\1\u02ba\6\170\1\0\1\170"+
    "\6\0\10\170\7\0\1\170\4\0\21\170\1\0\4\170"+
    "\1\u02bb\6\170\1\0\4\170\1\0\11\170\1\0\1\170"+
    "\6\0\10\170\7\0\1\170\4\0\21\170\1\0\13\170"+
    "\1\0\4\170\1\0\2\170\1\u02bc\6\170\1\0\1\170"+
    "\50\0\1\u02bd\76\0\1\u02be\107\0\1\u02bf\116\0\1\u02c0"+
    "\106\0\1\u02c1\50\0\10\170\7\0\1\170\4\0\16\170"+
    "\1\u02c2\2\170\1\0\13\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\6\0\10\170\7\0\1\170\4\0\5\170"+
    "\1\u02c3\13\170\1\0\13\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\6\0\10\170\7\0\1\170\4\0\5\170"+
    "\1\u02c4\13\170\1\0\13\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\6\0\10\170\7\0\1\170\4\0\14\170"+
    "\1\u02c5\4\170\1\0\13\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\6\0\10\170\7\0\1\170\4\0\13\170"+
    "\1\u02c6\5\170\1\0\13\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\61\0\1\u02c7\132\0\1\u02c8\53\0\1\u02c9"+
    "\107\0\1\u02ca\45\0\10\170\7\0\1\170\4\0\21\170"+
    "\1\0\5\170\1\u02cb\5\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\6\0\10\170\7\0\1\170\4\0\21\170"+
    "\1\0\13\170\1\0\4\170\1\0\7\170\1\u02cc\1\170"+
    "\1\0\1\170\6\0\10\170\7\0\1\170\4\0\16\170"+
    "\1\u02cd\2\170\1\0\13\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\6\0\10\170\7\0\1\170\4\0\16\170"+
    "\1\u02ce\2\170\1\0\13\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\105\0\1\u02cf\64\0\1\u02b7\132\0\1\u02c1"+
    "\107\0\1\u02d0\10\0\10\170\7\0\1\170\4\0\21\170"+
    "\1\0\13\170\1\0\4\170\1\0\10\170\1\u02d1\1\0"+
    "\1\170\6\0\10\170\7\0\1\170\4\0\21\170\1\0"+
    "\6\170\1\u02bc\4\170\1\0\4\170\1\0\11\170\1\0"+
    "\1\170\6\0\10\170\7\0\1\170\4\0\21\170\1\0"+
    "\13\170\1\0\4\170\1\0\10\170\1\u02c6\1\0\1\170"+
    "\6\0\10\170\7\0\1\170\4\0\21\170\1\0\13\170"+
    "\1\0\4\170\1\0\10\170\1\u02d2\1\0\1\170\37\0"+
    "\1\u02b7\154\0\1\u02d3\11\0\10\170\7\0\1\170\4\0"+
    "\5\170\1\u02bc\13\170\1\0\13\170\1\0\4\170\1\0"+
    "\11\170\1\0\1\170\6\0\10\170\7\0\1\170\4\0"+
    "\21\170\1\0\13\170\1\0\4\170\1\0\7\170\1\u02d4"+
    "\1\170\1\0\1\170\60\0\1\u02b7\35\0\10\170\7\0"+
    "\1\170\4\0\21\170\1\0\4\170\1\u02bc\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,  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,  1,  9,  1,  1,  1,  1,  9,  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,  1,  9,  9,  9,  3,  3,  9,  3,  3,  3,  9, 
     3,  1,  1,  1,  9,  1,  1,  1,  9,  9,  1,  1,  1,  2,  0,  1, 
     0,  1,  2,  0,  1,  1,  0,  0,  0,  9,  1,  1,  1,  9,  9,  0, 
     0,  0,  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  9,  1,  0, 
     0,  1,  1,  9,  0,  9,  0,  0,  0,  9,  0,  0,  0,  0,  9,  1, 
     1,  2,  2,  0,  1,  1,  0,  0,  9,  0,  0,  0,  0,  1,  0,  0, 
     0,  0,  9,  0,  0,  0,  0,  1,  0,  0,  9,  0,  0,  0,  0,  1, 
     0,  0,  0,  1,  0,  9,  0,  0,  0,  0,  9,  0,  0,  0,  0,  1, 
     0,  1,  1,  0,  0,  0,  9,  0,  0,  0,  0,  1,  0,  1,  1,  0, 
     0,  1,  0,  0,  9,  0,  0,  0,  0,  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, 13,  1,  1,  1,  9,  0,  0, 
     1, 13,  9,  9,  9,  9,  1,  1,  1,  0,  0,  0,  0,  1,  0,  0, 
     1,  0,  0,  1, 13, 13,  3,  2,  2,  0,  0,  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,  3,  2,  0, 
     1,  0,  1,  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_currentPos - searchStringLength > yy_startRead &&
					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[36144];
    int i = 0;  /* index in packed string  */
    int j = 0;  /* index in unpacked array */
    while (i < 9082) {
      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 126: 
        case 129: 
        case 132: 
        case 293: 
        case 296: 
        case 301: 
        case 438: 
        case 443: 
        case 550: 
          {  /* 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 725: break;
        case 171: 
        case 174: 
        case 177: 
        case 353: 
        case 356: 
        case 361: 
        case 477: 
        case 480: 
        case 482: 
        case 483: 
        case 566: 
          {  /* 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 726: break;
        case 692: 
        case 697: 
        case 704: 
        case 709: 
          { 
	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 727: break;
        case 667: 
          { 
	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 728: break;
        case 650: 
        case 653: 
        case 654: 
        case 655: 
        case 656: 
        case 657: 
        case 658: 
          { 
	if(Debug.debugTokenizer)
		dump("\nCDATA start");//$NON-NLS-1$
	fStateStack.push(yystate());
	yybegin(ST_CDATA_TEXT);
	return XML_CDATA_OPEN;
 }
        case 729: break;
        case 642: 
          { 
	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 730: break;
        case 633: 
          { 
	if(Debug.debugTokenizer)
		dump("element");//$NON-NLS-1$
	yybegin(ST_XML_ELEMENT_DECLARATION);
	return XML_ELEMENT_DECLARATION;
 }
        case 731: break;
        case 632: 
          { 
	if(Debug.debugTokenizer)
		dump("attlist");//$NON-NLS-1$
	yybegin(ST_XML_ATTLIST_DECLARATION);
	return XML_ATTLIST_DECLARATION;
 }
        case 732: break;
        case 631: 
          { 
	if(Debug.debugTokenizer)
		dump("doctype");//$NON-NLS-1$
	yybegin(ST_XML_DOCTYPE_DECLARATION);
	return XML_DOCTYPE_DECLARATION;
 }
        case 733: break;
        case 616: 
          { 
	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 734: break;
        case 615: 
          { 
	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 735: break;
        case 609: 
          { 
	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 736: break;
        case 584: 
        case 625: 
        case 626: 
          { 
	return JSP_VBL_QUOTED_CONTENT;
 }
        case 737: break;
        case 574: 
        case 621: 
        case 622: 
          { 
	return JSP_EL_QUOTED_CONTENT;
 }
        case 738: break;
        case 565: 
          { 
	if(Debug.debugTokenizer)
		dump("\nJSP comment close");//$NON-NLS-1$
	yybegin(YYINITIAL);
	return JSP_COMMENT_CLOSE;
 }
        case 739: break;
        case 552: 
          { 
	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 740: break;
        case 551: 
          { 
	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 741: break;
        case 543: 
          { 
	if(Debug.debugTokenizer)
		dump("\nCharRef");//$NON-NLS-1$
	return XML_CHAR_REFERENCE;
 }
        case 742: break;
        case 540: 
          { 
	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 743: break;
        case 539: 
        case 560: 
        case 563: 
        case 567: 
        case 568: 
        case 570: 
        case 572: 
        case 575: 
        case 577: 
        case 578: 
        case 580: 
        case 582: 
        case 585: 
          { 
	/* 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 744: break;
        case 437: 
          { 
	yybegin(ST_JSP_EL);
	if(yylength() > 2)
		yypushback(yylength() - 2);
	fELlevel++;
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	assembleEmbeddedContainer(JSP_EL_OPEN, JSP_EL_CLOSE);
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	yybegin(ST_XML_ATTRIBUTE_NAME);
	return PROXY_CONTEXT;
 }
        case 745: break;
        case 436: 
          { 
	yybegin(ST_JSP_VBL);
	if(yylength() > 2)
		yypushback(yylength() - 2);
	fELlevel++;
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	assembleEmbeddedContainer(JSP_VBL_OPEN, JSP_VBL_CLOSE);
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	yybegin(ST_XML_ATTRIBUTE_NAME);
	return PROXY_CONTEXT;
 }
        case 746: break;
        case 422: 
        case 423: 
          { 
	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 747: break;
        case 421: 
          { 
	if(Debug.debugTokenizer)
		dump("comment end");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
	yybegin(YYINITIAL);
	return XML_COMMENT_CLOSE;
 }
        case 748: break;
        case 420: 
          { 
	if(Debug.debugTokenizer)
		dump("CDATA end");//$NON-NLS-1$
	yybegin(fStateStack.pop());
	return XML_CDATA_CLOSE;
 }
        case 749: break;
        case 419: 
          { 
	if(Debug.debugTokenizer)
		dump("\nPEReference");//$NON-NLS-1$
	return XML_PE_REFERENCE;
 }
        case 750: break;
        case 417: 
          { 
	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 751: break;
        case 413: 
          { 
	if(Debug.debugTokenizer)
		dump("\nEntityRef");//$NON-NLS-1$
	return XML_ENTITY_REFERENCE;
 }
        case 752: break;
        case 409: 
          { 
	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 753: break;
        case 405: 
        case 464: 
        case 474: 
        case 489: 
        case 494: 
        case 499: 
        case 504: 
        case 510: 
        case 516: 
        case 520: 
        case 525: 
        case 530: 
        case 536: 
          { 
	/* 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 754: break;
        case 404: 
        case 463: 
        case 473: 
        case 488: 
        case 493: 
        case 498: 
        case 503: 
        case 509: 
        case 515: 
        case 519: 
        case 524: 
        case 529: 
        case 535: 
          { 
	/* 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 755: break;
        case 403: 
        case 462: 
        case 472: 
        case 487: 
        case 492: 
        case 497: 
        case 502: 
        case 508: 
        case 514: 
        case 518: 
        case 523: 
        case 528: 
        case 534: 
          { 
	/* 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 756: break;
        case 393: 
          { 
	yybegin(ST_JSP_VBL_DQUOTES_END);
	return JSP_VBL_QUOTED_CONTENT;
 }
        case 757: break;
        case 389: 
          { 
	yybegin(ST_JSP_VBL_SQUOTES_END);
	return JSP_VBL_QUOTED_CONTENT;
 }
        case 758: break;
        case 387: 
          { 
	fELlevel++;
	if(fELlevel == 1) {
		return JSP_VBL_OPEN;
	}
 }
        case 759: break;
        case 377: 
          { 
	yybegin(ST_JSP_EL_DQUOTES_END);
	return JSP_EL_QUOTED_CONTENT;
 }
        case 760: break;
        case 373: 
          { 
	yybegin(ST_JSP_EL_SQUOTES_END);
	return JSP_EL_QUOTED_CONTENT;
 }
        case 761: break;
        case 371: 
          { 
	//System.out.println(JSP_EL_CONTENT+ ":[" + yytext() + "]");
	return JSP_EL_CONTENT;
 }
        case 762: break;
        case 370: 
          { 
	fELlevel++;
	if(fELlevel == 1) {
		return JSP_EL_OPEN;
	}
 }
        case 763: break;
        case 367: 
          { 
	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 764: break;
        case 366: 
          { 
	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 765: break;
        case 365: 
          { 
	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 766: break;
        case 364: 
          { 
	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 767: break;
        case 362: 
          { 
	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 768: break;
        case 306: 
        case 311: 
        case 323: 
          { 
	return XML_DOCTYPE_INTERNAL_SUBSET;
 }
        case 769: break;
        case 292: 
          { 
	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 770: 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 || fStateStack.peek() == ST_XML_ATTRIBUTE_VALUE_DQUOTED || fStateStack.peek() == ST_XML_ATTRIBUTE_VALUE_SQUOTED))) {
		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 771: break;
        case 286: 
          { 
        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 772: break;
        case 277: 
          { 
	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 773: 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_CLOSE;
 }
        case 774: break;
        case 254: 
          { 
	if(Debug.debugTokenizer)
		dump("XML processing instruction end");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
        yybegin(YYINITIAL);
        return XML_PI_CLOSE;
 }
        case 775: break;
        case 127: 
          { 
	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 776: break;
        case 125: 
          { 
	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 777: break;
        case 122: 
        case 123: 
          { 
	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 778: break;
        case 118: 
        case 119: 
        case 120: 
        case 287: 
        case 435: 
        case 549: 
        case 590: 
        case 591: 
        case 610: 
        case 611: 
        case 629: 
        case 630: 
        case 643: 
        case 652: 
        case 660: 
        case 662: 
        case 664: 
        case 666: 
        case 669: 
        case 675: 
        case 676: 
        case 677: 
        case 678: 
        case 679: 
        case 685: 
        case 686: 
        case 687: 
        case 688: 
        case 689: 
        case 695: 
        case 696: 
        case 698: 
        case 699: 
        case 705: 
        case 706: 
        case 707: 
        case 708: 
        case 714: 
        case 715: 
        case 716: 
        case 717: 
        case 720: 
        case 721: 
        case 723: 
          { 
	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 779: 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 780: break;
        case 109: 
        case 113: 
        case 281: 
          { 
	if(Debug.debugTokenizer)
		dump("attr value");//$NON-NLS-1$
        yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_NAME);
        return XML_TAG_ATTRIBUTE_VALUE;
 }
        case 781: break;
        case 108: 
          { 
	if(Debug.debugTokenizer)
		dump("equals");//$NON-NLS-1$
        yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_VALUE);
        return XML_TAG_ATTRIBUTE_EQUALS;
 }
        case 782: break;
        case 107: 
          { 
	if(Debug.debugTokenizer)
		dump("attr name");//$NON-NLS-1$
        yybegin(ST_JSP_DIRECTIVE_EQUALS);
        return XML_TAG_ATTRIBUTE_NAME;
 }
        case 783: break;
        case 104: 
          { 
	if(Debug.debugTokenizer)
		dump("JSP directive name");//$NON-NLS-1$
	yybegin(ST_JSP_DIRECTIVE_NAME_WHITESPACE);
	return JSP_DIRECTIVE_NAME;
 }
        case 784: 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 785: break;
        case 96: 
        case 98: 
        case 99: 
        case 268: 
        case 269: 
        case 270: 
        case 273: 
        case 274: 
        case 429: 
        case 432: 
          { 
	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 786: 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 787: 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 788: break;
        case 92: 
          { 
	if(Debug.debugTokenizer)
		dump("DHTML processing instruction end");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
        yybegin(YYINITIAL);
        return XML_PI_CLOSE;
 }
        case 789: break;
        case 86: 
        case 88: 
        case 258: 
          { 
	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 790: 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 791: 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 792: break;
        case 50: 
        case 211: 
        case 212: 
        case 213: 
        case 225: 
        case 226: 
        case 229: 
        case 230: 
        case 398: 
        case 401: 
        case 513: 
        case 527: 
        case 533: 
          { 
	return JSP_VBL_CONTENT;
 }
        case 793: break;
        case 43: 
        case 189: 
        case 190: 
        case 193: 
        case 203: 
        case 204: 
        case 208: 
        case 209: 
        case 368: 
        case 382: 
        case 385: 
        case 485: 
        case 486: 
        case 501: 
        case 507: 
          { 
	return JSP_EL_CONTENT;
 }
        case 794: break;
        case 35: 
        case 163: 
        case 164: 
        case 350: 
        case 471: 
        case 475: 
        case 564: 
        case 598: 
        case 618: 
        case 635: 
        case 645: 
          { 
	if(Debug.debugTokenizer)
		dump("attlist contentspec");//$NON-NLS-1$
	return XML_ATTLIST_DECL_CONTENT;
 }
        case 795: break;
        case 33: 
        case 156: 
        case 157: 
        case 338: 
        case 461: 
        case 465: 
        case 561: 
        case 597: 
        case 617: 
        case 634: 
        case 644: 
          { 
	if(Debug.debugTokenizer)
		dump("elementdecl contentspec");//$NON-NLS-1$
	return XML_ELEMENT_DECL_CONTENT;
 }
        case 796: 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 797: break;
        case 18: 
        case 106: 
          { 
	if(Debug.debugTokenizer)
		dump("white space");//$NON-NLS-1$
	yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_NAME);
	return WHITE_SPACE;
 }
        case 798: 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 180: 
        case 185: 
          { 
	if(Debug.debugTokenizer)
		dump("white space");//$NON-NLS-1$
        return WHITE_SPACE;
 }
        case 799: break;
        case 0: 
        case 57: 
        case 59: 
        case 61: 
        case 62: 
        case 236: 
        case 239: 
        case 241: 
        case 244: 
        case 408: 
        case 410: 
        case 411: 
        case 412: 
        case 416: 
        case 418: 
        case 542: 
          { 
	if(Debug.debugTokenizer)
		dump("\nXML content");//$NON-NLS-1$
	return XML_CONTENT;
 }
        case 800: break;
        case 58: 
        case 103: 
        case 115: 
        case 121: 
        case 133: 
          { 
	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 801: break;
        case 60: 
        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 124: 
        case 128: 
        case 135: 
        case 136: 
        case 137: 
        case 138: 
        case 140: 
        case 141: 
        case 143: 
        case 145: 
        case 146: 
        case 148: 
        case 150: 
        case 151: 
        case 153: 
        case 154: 
        case 155: 
        case 160: 
        case 161: 
        case 162: 
        case 170: 
        case 172: 
        case 173: 
        case 195: 
        case 196: 
        case 199: 
        case 200: 
        case 206: 
        case 210: 
        case 217: 
        case 218: 
        case 221: 
        case 222: 
        case 227: 
        case 231: 
          { 
	if (Debug.debugTokenizer)
		System.out.println("!!!unexpected!!!: \"" + yytext() + "\":" + //$NON-NLS-2$//$NON-NLS-1$
			yychar + "-" + (yychar + yylength()));//$NON-NLS-1$
	return UNDEFINED;
 }
        case 802: break;
        case 63: 
        case 245: 
          { 
	if(Debug.debugTokenizer)
		dump("non-reference %");//$NON-NLS-1$
	return XML_CONTENT;
 }
        case 803: 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 804: break;
        case 69: 
        case 198: 
        case 202: 
        case 220: 
        case 224: 
          { 
	if(Debug.debugTokenizer)
		dump("LINE FEED");//$NON-NLS-1$
	return WHITE_SPACE;
 }
        case 805: break;
        case 70: 
        case 71: 
          { 
	if(Debug.debugTokenizer)
		dump("comment content");//$NON-NLS-1$
	return scanXMLCommentText();
 }
        case 806: break;
        case 75: 
        case 76: 
        case 77: 
        case 78: 
        case 250: 
        case 251: 
        case 252: 
        case 424: 
        case 545: 
        case 546: 
        case 588: 
        case 589: 
        case 608: 
        case 628: 
        case 641: 
        case 651: 
        case 659: 
        case 661: 
        case 663: 
        case 665: 
          { 
	if(Debug.debugTokenizer)
		dump("processing instruction target");//$NON-NLS-1$
	fEmbeddedHint = XML_CONTENT;
        yybegin(ST_PI_WS);
        return XML_TAG_NAME;
 }
        case 807: break;
        case 79: 
          { 
        yybegin(ST_PI_CONTENT);
        return WHITE_SPACE;
 }
        case 808: 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 809: break;
        case 130: 
        case 175: 
          { 
	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 810: break;
        case 131: 
        case 176: 
          { 
	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 811: break;
        case 134: 
          { 
	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 812: break;
        case 139: 
          { 
	if(Debug.debugTokenizer)
		dump("doctype type");//$NON-NLS-1$
	yybegin(ST_XML_DOCTYPE_EXTERNAL_ID);
	return XML_DOCTYPE_NAME;
 }
        case 813: break;
        case 142: 
        case 144: 
        case 314: 
        case 319: 
        case 453: 
          { 
	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 814: break;
        case 147: 
        case 149: 
        case 325: 
          { 
	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 815: break;
        case 152: 
        case 330: 
        case 335: 
        case 458: 
          { 
	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 816: break;
        case 158: 
          { 
	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 817: break;
        case 159: 
        case 342: 
        case 347: 
        case 468: 
          { 
	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 818: break;
        case 165: 
          { 
	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 819: break;
        case 168: 
        case 169: 
          { 
	if(Debug.debugTokenizer)
		dump("\nJSP comment text");//$NON-NLS-1$
	return scanJSPCommentText();
 }
        case 820: break;
        case 178: 
        case 181: 
        case 183: 
        case 184: 
        case 186: 
        case 188: 
        case 363: 
          { 
	return XML_TAG_ATTRIBUTE_VALUE;
 }
        case 821: break;
        case 179: 
          { 
	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 822: break;
        case 182: 
          { 
	return isJspTag() ? JSP_TAG_ATTRIBUTE_VALUE_SQUOTE : XML_TAG_ATTRIBUTE_VALUE_SQUOTE;
 }
        case 823: break;
        case 187: 
          { 
	return isJspTag()? JSP_TAG_ATTRIBUTE_VALUE_DQUOTE : XML_TAG_ATTRIBUTE_VALUE_DQUOTE;
 }
        case 824: break;
        case 191: 
          { 
	yybegin(ST_JSP_EL_DQUOTES);
	return JSP_EL_DQUOTE;
 }
        case 825: break;
        case 192: 
          { 
	yybegin(ST_JSP_EL_SQUOTES);
	return JSP_EL_SQUOTE;
 }
        case 826: break;
        case 194: 
          { 
	fELlevel--;
	if(fELlevel == 0) {
		yybegin(YYINITIAL);
		return JSP_EL_CLOSE;
	}
	return JSP_EL_CONTENT;
 }
        case 827: break;
        case 197: 
          { 
	yybegin(ST_JSP_EL);
	return JSP_EL_SQUOTE;
 }
        case 828: break;
        case 201: 
          { 
	yybegin(ST_JSP_EL);
	return JSP_EL_DQUOTE;
 }
        case 829: break;
        case 205: 
          { 
	return isJspTag() ? JSP_TAG_ATTRIBUTE_VALUE_DQUOTE: XML_TAG_ATTRIBUTE_VALUE_DQUOTE;
 }
        case 830: break;
        case 207: 
          { 
	return JSP_EL_CLOSE;
 }
        case 831: break;
        case 214: 
          { 
	yybegin(ST_JSP_VBL_DQUOTES);
	return JSP_VBL_DQUOTE;
 }
        case 832: break;
        case 215: 
          { 
	yybegin(ST_JSP_VBL_SQUOTES);
	return JSP_VBL_SQUOTE;
 }
        case 833: break;
        case 216: 
          { 
	fELlevel--;
	if(fELlevel == 0) {
		yybegin(YYINITIAL);
		return JSP_VBL_CLOSE;
	}
	return JSP_VBL_CONTENT;
 }
        case 834: break;
        case 219: 
          { 
	yybegin(ST_JSP_VBL);
	return JSP_VBL_SQUOTE;
 }
        case 835: break;
        case 223: 
          { 
	yybegin(ST_JSP_VBL);
	return JSP_VBL_DQUOTE;
 }
        case 836: break;
        case 228: 
          { 
	return JSP_VBL_CLOSE;
 }
        case 837: break;
        case 232: 
          { 
	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 838: break;
        case 233: 
          { 
	if(Debug.debugTokenizer)
		dump("\nprocessing instruction start");//$NON-NLS-1$
	yybegin(ST_PI);
        return XML_PI_OPEN;
 }
        case 839: break;
        case 234: 
        case 337: 
        case 349: 
        case 369: 
        case 374: 
        case 378: 
        case 381: 
        case 384: 
        case 386: 
        case 390: 
        case 394: 
        case 397: 
        case 400: 
          { 
	/* 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 840: break;
        case 235: 
          { 
	fStateStack.push(yystate());
	if(Debug.debugTokenizer)
		dump("\ndeclaration start");//$NON-NLS-1$
        yybegin(ST_XML_DECLARATION);
	return XML_DECLARATION_OPEN;
 }
        case 841: break;
        case 249: 
          { 
	if(Debug.debugTokenizer)
		dump("processing instruction end");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
        yybegin(YYINITIAL);
        return XML_PI_CLOSE;
 }
        case 842: break;
        case 253: 
          { 
		// ended with nothing inside
		fEmbeddedHint = UNDEFINED;
        yybegin(YYINITIAL);
        return XML_PI_CLOSE;
 }
        case 843: break;
        case 166: 
        case 167: 
          { 
		return doBlockTagScan();
	 }
        case 844: break;
        default: 
          if (yy_input == YYEOF && yy_startRead == yy_currentPos) {
            yy_atEOF = true;
            yy_do_eof();
              return null;
          } 
          else {
            yy_ScanError(YY_NO_MATCH);
          }
      }
    }
  }    


}
