From 342247d5d24c7f9971c477cb84487fad501eda0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Tue, 4 Nov 2014 20:51:39 +0100 Subject: [PATCH] Issue #698 Better obfuscated identifiers handling, separated reserved keyword for AS2/AS3 --- ...ion.java => IdentifiersDeobfuscation.java} | 85 +- .../src/com/jpexs/decompiler/flash/SWF.java | 24 +- .../decompiler/flash/abc/avm2/AVM2Code.java | 2 +- .../flash/abc/avm2/model/AVM2Item.java | 4 +- .../avm2/parser/script/ActionScriptLexer.java | 4080 ++++++++--------- .../parser/script/ActionScriptParser.java | 80 +- .../abc/avm2/parser/script/SymbolType.java | 6 +- .../abc/avm2/parser/script/actionscript.flex | 30 +- .../flash/abc/types/MethodInfo.java | 6 +- .../decompiler/flash/abc/types/Multiname.java | 4 +- .../decompiler/flash/abc/types/Namespace.java | 4 +- .../jpexs/decompiler/flash/action/Action.java | 23 +- .../action/model/CallFunctionActionItem.java | 4 +- .../action/model/CallMethodActionItem.java | 4 +- .../action/model/DefineLocalActionItem.java | 6 +- .../action/model/FunctionActionItem.java | 17 +- .../action/model/GetMemberActionItem.java | 7 +- .../action/model/GetVariableActionItem.java | 6 +- .../action/model/SetMemberActionItem.java | 7 +- .../action/model/SetVariableActionItem.java | 6 +- 20 files changed, 2124 insertions(+), 2281 deletions(-) rename libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/{action/Deobfuscation.java => IdentifiersDeobfuscation.java} (69%) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Deobfuscation.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/IdentifiersDeobfuscation.java similarity index 69% rename from libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Deobfuscation.java rename to libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/IdentifiersDeobfuscation.java index 225ab8848..454ac38ee 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Deobfuscation.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/IdentifiersDeobfuscation.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU Lesser General Public * License along with this library. */ -package com.jpexs.decompiler.flash.action; +package com.jpexs.decompiler.flash; import com.jpexs.decompiler.flash.abc.RenameType; import com.jpexs.decompiler.flash.tags.DefineSpriteTag; @@ -32,7 +32,7 @@ import java.util.regex.Pattern; * * @author JPEXS */ -public class Deobfuscation { +public class IdentifiersDeobfuscation { private final Random rnd = new Random(); private final int DEFAULT_FOO_SIZE = 10; @@ -44,7 +44,48 @@ public class Deobfuscation { public static final String FOO_CHARACTERS = "bcdfghjklmnpqrstvwz"; public static final String FOO_JOIN_CHARACTERS = "aeiouy"; - private String fooString(HashMap deobfuscated, String orig, boolean firstUppercase, int rndSize) { + //http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=00000477.html + public static final String[] reservedWordsAS2= { + //is "add" really a keyword? documentation says yes, but I can create "add" variable in CS6... + //"add", + "and","break","case","catch","class","continue","default","delete","do","dynamic","else", + "eq","extends","false","finally","for","function","ge","get","gt","if","ifFrameLoaded","implements", + "import","in","instanceof","interface","intrinsic","le", + //is "it" really a keyword? documentation says yes, but I can create "it" variable in CS6... + //"it", + "ne","new","not","null","on","onClipEvent", + "or","private","public","return","set","static","super","switch","tellTarget","this","throw","try", + "typeof","undefined","var","void","while","with" + }; + + //http://www.adobe.com/devnet/actionscript/learning/as3-fundamentals/syntax.html + public static final String[] reservedWordsAS3 = { + "as", "break", "case", "catch", "class", "const", "continue", "default", "delete", "do", "else", + "extends", "false", "finally", "for", "function", "if", "implements", "import", "in", "instanceof", + "interface", "internal", "is", "new", "null", "package", "private", "protected", "public", + "return", "super", "switch", "this", "throw", + //is "to" really a keyword? documentation says yes, but I can create "to" variable... + // "to", + "true", "try", "typeof", "use", "var", + "void","while","with" + }; + //syntactic keywords - can be used as identifiers, but that have special meaning in certain contexts + public static final String[] syntacticKeywordsAS3= {"each", "get", "set", "namespace", "include", "dynamic", "final", "native", "override", "static"}; + + public static boolean isReservedWord(String s,boolean as3) { + if (s == null) { + return false; + } + String reservedWords[] = as3?reservedWordsAS3:reservedWordsAS2; + for (String rw : reservedWords) { + if (rw.equals(s.trim())) { + return true; + } + } + return false; + } + + private String fooString(boolean as3,HashMap deobfuscated, String orig, boolean firstUppercase, int rndSize) { boolean exists; String ret; loopfoo: @@ -69,7 +110,7 @@ public class Deobfuscation { rndSize += 1; continue loopfoo; } - if (Action.isReservedWord(ret)) { + if (isReservedWord(ret,as3)) { exists = true; rndSize += 1; continue; @@ -83,16 +124,16 @@ public class Deobfuscation { return ret; } - public void deobfuscateInstanceNames(HashMap namesMap, RenameType renameType, List tags, Map selected) { + public void deobfuscateInstanceNames(boolean as3,HashMap namesMap, RenameType renameType, List tags, Map selected) { for (Tag t : tags) { if (t instanceof DefineSpriteTag) { - deobfuscateInstanceNames(namesMap, renameType, ((DefineSpriteTag) t).subTags, selected); + deobfuscateInstanceNames(as3,namesMap, renameType, ((DefineSpriteTag) t).subTags, selected); } if (t instanceof PlaceObjectTypeTag) { PlaceObjectTypeTag po = (PlaceObjectTypeTag) t; String name = po.getInstanceName(); if (name != null) { - String changedName = deobfuscateName(name, false, "instance", namesMap, renameType, selected); + String changedName = deobfuscateName(as3,name, false, "instance", namesMap, renameType, selected); if (changedName != null) { po.setInstanceName(changedName); ((Tag) po).setModified(true); @@ -100,7 +141,7 @@ public class Deobfuscation { } String className = po.getClassName(); if (className != null) { - String changedClassName = deobfuscateNameWithPackage(className, namesMap, renameType, selected); + String changedClassName = deobfuscateNameWithPackage(as3,className, namesMap, renameType, selected); if (changedClassName != null) { po.setClassName(changedClassName); ((Tag) po).setModified(true); @@ -110,7 +151,7 @@ public class Deobfuscation { } } - public String deobfuscatePackage(String pkg, HashMap namesMap, RenameType renameType, Map selected) { + public String deobfuscatePackage(boolean as3,String pkg, HashMap namesMap, RenameType renameType, Map selected) { if (namesMap.containsKey(pkg)) { return namesMap.get(pkg); } @@ -126,7 +167,7 @@ public class Deobfuscation { if (p > 0) { ret += "."; } - String partChanged = deobfuscateName(parts[p], false, "package", namesMap, renameType, selected); + String partChanged = deobfuscateName(as3,parts[p], false, "package", namesMap, renameType, selected); if (partChanged != null) { ret += partChanged; isChanged = true; @@ -141,7 +182,7 @@ public class Deobfuscation { return null; } - public String deobfuscateNameWithPackage(String n, HashMap namesMap, RenameType renameType, Map selected) { + public String deobfuscateNameWithPackage(boolean as3,String n, HashMap namesMap, RenameType renameType, Map selected) { String pkg = null; String name = ""; if (n.contains(".")) { @@ -152,13 +193,13 @@ public class Deobfuscation { } boolean changed = false; if ((pkg != null) && (!pkg.isEmpty())) { - String changedPkg = deobfuscatePackage(pkg, namesMap, renameType, selected); + String changedPkg = deobfuscatePackage(as3,pkg, namesMap, renameType, selected); if (changedPkg != null) { changed = true; pkg = changedPkg; } } - String changedName = deobfuscateName(name, true, "class", namesMap, renameType, selected); + String changedName = deobfuscateName(as3,name, true, "class", namesMap, renameType, selected); if (changedName != null) { changed = true; name = changedName; @@ -175,7 +216,7 @@ public class Deobfuscation { return null; } - public static boolean isValidName(String s, String... exceptions) { + public static boolean isValidName(boolean as3,String s, String... exceptions) { boolean isValid = true; for (String e : exceptions) { @@ -184,7 +225,7 @@ public class Deobfuscation { } } - if (Action.isReservedWord(s)) { + if (isReservedWord(s,as3)) { isValid = false; } @@ -206,7 +247,7 @@ public class Deobfuscation { return isValid; } - public String deobfuscateName(String s, boolean firstUppercase, String usageType, HashMap namesMap, RenameType renameType, Map selected) { + public String deobfuscateName(boolean as3,String s, boolean firstUppercase, String usageType, HashMap namesMap, RenameType renameType, Map selected) { boolean isValid = true; if (usageType == null) { usageType = "name"; @@ -218,7 +259,7 @@ public class Deobfuscation { } } - isValid = isValidName(s); + isValid = isValidName(as3,s); if (!isValid) { if (namesMap.containsKey(s)) { return namesMap.get(s); @@ -240,7 +281,7 @@ public class Deobfuscation { } while (found); typeCounts.put(usageType, cnt); } else if (renameType == RenameType.RANDOMWORD) { - ret = fooString(namesMap, s, firstUppercase, DEFAULT_FOO_SIZE); + ret = fooString(as3,namesMap, s, firstUppercase, DEFAULT_FOO_SIZE); } namesMap.put(s, ret); return ret; @@ -263,14 +304,14 @@ public class Deobfuscation { * words) * @return */ - public static String printIdentifier(String s, String... validExceptions) { + public static String printIdentifier(boolean as3, String s, String... validExceptions) { if (s.startsWith("\u00A7") && s.endsWith("\u00A7")) { //Assuming already printed - TODO:detect better return s; } if (nameCache.containsKey(s)) { return nameCache.get(s); } - if (isValidName(s, validExceptions)) { + if (isValidName(as3, s, validExceptions)) { nameCache.put(s, s); return s; } @@ -279,7 +320,7 @@ public class Deobfuscation { return ret; } - public static String printNamespace(String pkg, String... validNameExceptions) { + public static String printNamespace(boolean as3,String pkg, String... validNameExceptions) { if (nameCache.containsKey(pkg)) { return nameCache.get(pkg); } @@ -298,7 +339,7 @@ public class Deobfuscation { if (i > 0) { ret += "."; } - ret += printIdentifier(parts[i], validNameExceptions); + ret += printIdentifier(as3,parts[i], validNameExceptions); } nameCache.put(pkg, ret); return ret; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java index 273c8ec9b..050caa440 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/SWF.java @@ -27,7 +27,7 @@ import com.jpexs.decompiler.flash.action.Action; import com.jpexs.decompiler.flash.action.ActionGraphSource; import com.jpexs.decompiler.flash.action.ActionList; import com.jpexs.decompiler.flash.action.ActionLocalData; -import com.jpexs.decompiler.flash.action.Deobfuscation; +import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; import com.jpexs.decompiler.flash.action.model.ConstantPool; import com.jpexs.decompiler.flash.action.model.DirectValueActionItem; import com.jpexs.decompiler.flash.action.model.FunctionActionItem; @@ -1676,7 +1676,7 @@ public final class SWF implements TreeItem, Timelined { private List allFunctions = new ArrayList<>(); private HashMap allStrings = new HashMap<>(); private final HashMap usageTypes = new HashMap<>(); - private final Deobfuscation deobfuscation = new Deobfuscation(); + private final IdentifiersDeobfuscation deobfuscation = new IdentifiersDeobfuscation(); private static void getVariables(ConstantPool constantPool, BaseLocalData localData, TranslateStack stack, List output, ActionGraphSource code, int ip, List> variables, List functions, HashMap strings, List visited, HashMap usageTypes, String path) throws InterruptedException { boolean debugMode = false; @@ -1893,7 +1893,7 @@ public final class SWF implements TreeItem, Timelined { if (tag instanceof SymbolClassTag) { SymbolClassTag sc = (SymbolClassTag) tag; for (int i = 0; i < sc.names.length; i++) { - String newname = deobfuscation.deobfuscateNameWithPackage(sc.names[i], deobfuscated, renameType, deobfuscated); + String newname = deobfuscation.deobfuscateNameWithPackage(true,sc.names[i], deobfuscated, renameType, deobfuscated); if (newname != null) { sc.names[i] = newname; } @@ -1901,7 +1901,7 @@ public final class SWF implements TreeItem, Timelined { sc.setModified(true); } } - deobfuscation.deobfuscateInstanceNames(deobfuscated, renameType, tags, new HashMap()); + deobfuscation.deobfuscateInstanceNames(true,deobfuscated, renameType, tags, new HashMap()); return deobfuscated.size(); } @@ -1993,7 +1993,7 @@ public final class SWF implements TreeItem, Timelined { if (fun.calculatedFunctionName instanceof DirectValueActionItem) { DirectValueActionItem dvf = (DirectValueActionItem) fun.calculatedFunctionName; String fname = dvf.toStringNoH(null); - String changed = deobfuscation.deobfuscateName(fname, false, "method", deobfuscated, renameType, selected); + String changed = deobfuscation.deobfuscateName(false,fname, false, "method", deobfuscated, renameType, selected); if (changed != null) { deobfuscated.put(fname, changed); } @@ -2012,7 +2012,7 @@ public final class SWF implements TreeItem, Timelined { if (gti instanceof DirectValueActionItem) { DirectValueActionItem dvf = (DirectValueActionItem) gti; String vname = dvf.toStringNoH(null); - String changed = deobfuscation.deobfuscateName(vname, false, "attribute", deobfuscated, renameType, selected); + String changed = deobfuscation.deobfuscateName(false,vname, false, "attribute", deobfuscated, renameType, selected); if (changed != null) { deobfuscated.put(vname, changed); } @@ -2045,7 +2045,7 @@ public final class SWF implements TreeItem, Timelined { if (classNameParts != null) { changedNameStr = classNameParts[classNameParts.length - 1 - pos]; } - String changedNameStr2 = deobfuscation.deobfuscateName(changedNameStr, pos == 0, pos == 0 ? "class" : "package", deobfuscated, renameType, selected); + String changedNameStr2 = deobfuscation.deobfuscateName(false,changedNameStr, pos == 0, pos == 0 ? "class" : "package", deobfuscated, renameType, selected); if (changedNameStr2 != null) { changedNameStr = changedNameStr2; } @@ -2069,7 +2069,7 @@ public final class SWF implements TreeItem, Timelined { if (classNameParts != null) { changedNameStr = classNameParts[classNameParts.length - 1 - pos]; } - String changedNameStr2 = deobfuscation.deobfuscateName(changedNameStr, pos == 0, pos == 0 ? "class" : "package", deobfuscated, renameType, selected); + String changedNameStr2 = deobfuscation.deobfuscateName(false,changedNameStr, pos == 0, pos == 0 ? "class" : "package", deobfuscated, renameType, selected); if (changedNameStr2 != null) { changedNameStr = changedNameStr2; } @@ -2091,7 +2091,7 @@ public final class SWF implements TreeItem, Timelined { if (f.functionName.isEmpty()) { //anonymous function, leave as is continue; } - String changed = deobfuscation.deobfuscateName(f.functionName, false, "function", deobfuscated, renameType, selected); + String changed = deobfuscation.deobfuscateName(false,f.functionName, false, "function", deobfuscated, renameType, selected); if (changed != null) { f.replacedFunctionName = changed; ret++; @@ -2102,7 +2102,7 @@ public final class SWF implements TreeItem, Timelined { if (f.functionName.isEmpty()) { //anonymous function, leave as is continue; } - String changed = deobfuscation.deobfuscateName(f.functionName, false, "function", deobfuscated, renameType, selected); + String changed = deobfuscation.deobfuscateName(false,f.functionName, false, "function", deobfuscated, renameType, selected); if (changed != null) { f.replacedFunctionName = changed; ret++; @@ -2125,7 +2125,7 @@ public final class SWF implements TreeItem, Timelined { for (MyEntry it : allVariableNames) { vc++; String name = it.getKey().toStringNoH(it.getValue()); - String changed = deobfuscation.deobfuscateName(name, false, usageTypes.get(it.getKey()), deobfuscated, renameType, selected); + String changed = deobfuscation.deobfuscateName(false,name, false, usageTypes.get(it.getKey()), deobfuscated, renameType, selected); if (changed != null) { boolean addNew = false; String h = System.identityHashCode(it.getKey()) + "_" + name; @@ -2163,7 +2163,7 @@ public final class SWF implements TreeItem, Timelined { src.setActions(actionsMap.get(src)); src.setModified(); } - deobfuscation.deobfuscateInstanceNames(deobfuscated, renameType, tags, selected); + deobfuscation.deobfuscateInstanceNames(false,deobfuscated, renameType, tags, selected); return ret; } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index fc35fef16..85b482902 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -214,7 +214,7 @@ import com.jpexs.decompiler.flash.abc.types.traits.TraitFunction; import com.jpexs.decompiler.flash.abc.types.traits.TraitMethodGetterSetter; import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import com.jpexs.decompiler.flash.abc.types.traits.Traits; -import com.jpexs.decompiler.flash.action.Deobfuscation; +import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.dumpview.DumpInfo; import com.jpexs.decompiler.flash.ecma.EcmaScript; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java index 00ab61c26..38966a01a 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/model/AVM2Item.java @@ -21,7 +21,7 @@ import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.InstructionDefinition; import com.jpexs.decompiler.flash.abc.avm2.instructions.stack.PopIns; import com.jpexs.decompiler.flash.abc.avm2.parser.script.AVM2SourceGenerator; -import com.jpexs.decompiler.flash.action.Deobfuscation; +import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; @@ -98,7 +98,7 @@ public abstract class AVM2Item extends GraphTargetItem { public static String localRegName(HashMap localRegNames, int reg) { if (localRegNames.containsKey(reg)) { - return Deobfuscation.printIdentifier(localRegNames.get(reg)); + return IdentifiersDeobfuscation.printIdentifier(true,localRegNames.get(reg)); } else { if (reg == 0) { return "this"; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java index 3f528ed4b..f73c6323f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptLexer.java @@ -1,991 +1,998 @@ +/* The following code was generated by JFlex 1.6.0 */ + /* - * Copyright (C) 2010-2014 JPEXS, All rights reserved. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, + * Copyright (C) 2010-2014 JPEXS + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . */ package com.jpexs.decompiler.flash.abc.avm2.parser.script; - import com.jpexs.decompiler.flash.abc.avm2.parser.AVM2ParseException; -import java.io.StringReader; -import java.util.ArrayList; -import java.util.List; import java.util.Stack; +import java.util.List; +import java.util.ArrayList; +import java.io.StringReader; + /** - * This class is a scanner generated by - * JFlex 1.5.0-SNAPSHOT from the - * specification file - * D:/Dropbox/Programovani/JavaSE/FFDec/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/actionscript.flex + * This class is a scanner generated by + * JFlex 1.6.0 + * from the specification file D:/Dropbox/Programovani/JavaSE/FFDec/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/actionscript.flex */ public final class ActionScriptLexer { - /** - * This character denotes the end of file - */ - public static final int YYEOF = -1; + /** This character denotes the end of file */ + public static final int YYEOF = -1; - /** - * initial size of the lookahead buffer - */ - private static final int ZZ_BUFFERSIZE = 16384; + /** initial size of the lookahead buffer */ + private static final int ZZ_BUFFERSIZE = 16384; - /** - * lexical states - */ - public static final int YYINITIAL = 0; - public static final int STRING = 2; - public static final int CHARLITERAL = 4; - public static final int XMLOPENTAG = 6; - public static final int XMLOPENTAGATTRIB = 8; - public static final int XMLINSTROPENTAG = 10; - public static final int XMLINSTRATTRIB = 12; - public static final int XMLCDATA = 14; - public static final int XMLCOMMENT = 16; - public static final int XML = 18; - public static final int OIDENTIFIER = 20; + /** lexical states */ + public static final int YYINITIAL = 0; + public static final int STRING = 2; + public static final int CHARLITERAL = 4; + public static final int XMLOPENTAG = 6; + public static final int XMLOPENTAGATTRIB = 8; + public static final int XMLINSTROPENTAG = 10; + public static final int XMLINSTRATTRIB = 12; + public static final int XMLCDATA = 14; + public static final int XMLCOMMENT = 16; + public static final int XML = 18; + public static final int OIDENTIFIER = 20; - /** - * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l - * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l at the - * beginning of a line l is of the form l = 2*k, k a non negative integer - */ - private static final int ZZ_LEXSTATE[] = { - 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, - 8, 8, 9, 9, 10, 10 - }; + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ + private static final int ZZ_LEXSTATE[] = { + 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, + 8, 8, 9, 9, 10, 10 + }; - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED - = "\11\7\1\12\1\2\1\112\1\3\1\1\16\7\4\0\1\12\1\13" - + "\1\33\1\0\1\6\1\110\1\105\1\34\1\76\1\77\1\5\1\45" - + "\1\103\1\14\1\10\1\4\1\35\3\41\4\42\2\21\1\16\1\102" - + "\1\11\1\32\1\15\1\23\1\111\1\27\1\17\1\25\1\26\1\43" - + "\1\17\2\20\1\74\4\20\1\75\5\20\1\30\3\20\1\37\2\20" - + "\1\24\1\46\1\31\1\107\1\20\1\0\1\52\1\50\1\54\1\63" - + "\1\44\1\40\1\73\1\66\1\61\1\20\1\53\1\64\1\71\1\57" - + "\1\56\1\67\1\20\1\51\1\55\1\60\1\62\1\72\1\65\1\36" - + "\1\70\1\20\1\100\1\106\1\101\1\104\6\7\1\113\32\7\2\0" - + "\4\6\1\0\1\47\2\0\1\6\2\0\1\7\7\0\1\6\1\0" - + "\1\22\2\0\1\6\5\0\2\6\1\114\24\6\1\0\37\6\1\0" - + "\u01ca\6\4\0\14\6\16\0\5\6\7\0\1\6\1\0\1\6\21\0" - + "\160\7\5\6\1\0\2\6\2\0\4\6\1\0\7\0\1\6\1\0" - + "\3\6\1\0\1\6\1\0\24\6\1\0\123\6\1\0\213\6\1\0" - + "\5\7\2\0\236\6\11\0\46\6\2\0\1\6\7\0\47\6\11\0" - + "\55\7\1\0\1\7\1\0\2\7\1\0\2\7\1\0\1\7\10\0" - + "\33\6\5\0\3\6\15\0\4\7\7\0\1\6\4\0\13\7\5\0" - + "\53\6\37\7\4\0\2\6\1\7\143\6\1\0\1\6\10\7\1\0" - + "\6\7\2\6\2\7\1\0\4\7\2\6\12\7\3\6\2\0\1\6" - + "\17\0\1\7\1\6\1\7\36\6\33\7\2\0\131\6\13\7\1\6" - + "\16\0\12\7\41\6\11\7\2\6\4\0\1\6\5\0\26\6\4\7" - + "\1\6\11\7\1\6\3\7\1\6\5\7\22\0\31\6\3\7\244\0" - + "\4\7\66\6\3\7\1\6\22\7\1\6\7\7\12\6\2\7\2\0" - + "\12\7\1\0\7\6\1\0\7\6\1\0\3\7\1\0\10\6\2\0" - + "\2\6\2\0\26\6\1\0\7\6\1\0\1\6\3\0\4\6\2\0" - + "\1\7\1\6\7\7\2\0\2\7\2\0\3\7\1\6\10\0\1\7" - + "\4\0\2\6\1\0\3\6\2\7\2\0\12\7\4\6\7\0\1\6" - + "\5\0\3\7\1\0\6\6\4\0\2\6\2\0\26\6\1\0\7\6" - + "\1\0\2\6\1\0\2\6\1\0\2\6\2\0\1\7\1\0\5\7" - + "\4\0\2\7\2\0\3\7\3\0\1\7\7\0\4\6\1\0\1\6" - + "\7\0\14\7\3\6\1\7\13\0\3\7\1\0\11\6\1\0\3\6" - + "\1\0\26\6\1\0\7\6\1\0\2\6\1\0\5\6\2\0\1\7" - + "\1\6\10\7\1\0\3\7\1\0\3\7\2\0\1\6\17\0\2\6" - + "\2\7\2\0\12\7\1\0\1\6\17\0\3\7\1\0\10\6\2\0" - + "\2\6\2\0\26\6\1\0\7\6\1\0\2\6\1\0\5\6\2\0" - + "\1\7\1\6\7\7\2\0\2\7\2\0\3\7\10\0\2\7\4\0" - + "\2\6\1\0\3\6\2\7\2\0\12\7\1\0\1\6\20\0\1\7" - + "\1\6\1\0\6\6\3\0\3\6\1\0\4\6\3\0\2\6\1\0" - + "\1\6\1\0\2\6\3\0\2\6\3\0\3\6\3\0\14\6\4\0" - + "\5\7\3\0\3\7\1\0\4\7\2\0\1\6\6\0\1\7\16\0" - + "\12\7\11\0\1\6\7\0\3\7\1\0\10\6\1\0\3\6\1\0" - + "\27\6\1\0\12\6\1\0\5\6\3\0\1\6\7\7\1\0\3\7" - + "\1\0\4\7\7\0\2\7\1\0\2\6\6\0\2\6\2\7\2\0" - + "\12\7\22\0\2\7\1\0\10\6\1\0\3\6\1\0\27\6\1\0" - + "\12\6\1\0\5\6\2\0\1\7\1\6\7\7\1\0\3\7\1\0" - + "\4\7\7\0\2\7\7\0\1\6\1\0\2\6\2\7\2\0\12\7" - + "\1\0\2\6\17\0\2\7\1\0\10\6\1\0\3\6\1\0\51\6" - + "\2\0\1\6\7\7\1\0\3\7\1\0\4\7\1\6\10\0\1\7" - + "\10\0\2\6\2\7\2\0\12\7\12\0\6\6\2\0\2\7\1\0" - + "\22\6\3\0\30\6\1\0\11\6\1\0\1\6\2\0\7\6\3\0" - + "\1\7\4\0\6\7\1\0\1\7\1\0\10\7\22\0\2\7\15\0" - + "\60\6\1\7\2\6\7\7\4\0\10\6\10\7\1\0\12\7\47\0" - + "\2\6\1\0\1\6\2\0\2\6\1\0\1\6\2\0\1\6\6\0" - + "\4\6\1\0\7\6\1\0\3\6\1\0\1\6\1\0\1\6\2\0" - + "\2\6\1\0\4\6\1\7\2\6\6\7\1\0\2\7\1\6\2\0" - + "\5\6\1\0\1\6\1\0\6\7\2\0\12\7\2\0\2\6\42\0" - + "\1\6\27\0\2\7\6\0\12\7\13\0\1\7\1\0\1\7\1\0" - + "\1\7\4\0\2\7\10\6\1\0\44\6\4\0\24\7\1\0\2\7" - + "\5\6\13\7\1\0\44\7\11\0\1\7\71\0\53\6\24\7\1\6" - + "\12\7\6\0\6\6\4\7\4\6\3\7\1\6\3\7\2\6\7\7" - + "\3\6\4\7\15\6\14\7\1\6\17\7\2\0\46\6\12\0\53\6" - + "\1\0\1\6\3\0\u0149\6\1\0\4\6\2\0\7\6\1\0\1\6" - + "\1\0\4\6\2\0\51\6\1\0\4\6\2\0\41\6\1\0\4\6" - + "\2\0\7\6\1\0\1\6\1\0\4\6\2\0\17\6\1\0\71\6" - + "\1\0\4\6\2\0\103\6\2\0\3\7\40\0\20\6\20\0\125\6" - + "\14\0\u026c\6\2\0\21\6\1\0\32\6\5\0\113\6\3\0\3\6" - + "\17\0\15\6\1\0\4\6\3\7\13\0\22\6\3\7\13\0\22\6" - + "\2\7\14\0\15\6\1\0\3\6\1\0\2\7\14\0\64\6\40\7" - + "\3\0\1\6\3\0\2\6\1\7\2\0\12\7\41\0\3\7\2\0" - + "\12\7\6\0\130\6\10\0\51\6\1\7\1\6\5\0\106\6\12\0" - + "\35\6\3\0\14\7\4\0\14\7\12\0\12\7\36\6\2\0\5\6" - + "\13\0\54\6\4\0\21\7\7\6\2\7\6\0\12\7\46\0\27\6" - + "\5\7\4\0\65\6\12\7\1\0\35\7\2\0\13\7\6\0\12\7" - + "\15\0\1\6\130\0\5\7\57\6\21\7\7\6\4\0\12\7\21\0" - + "\11\7\14\0\3\7\36\6\12\7\3\0\2\6\12\7\6\0\46\6" - + "\16\7\14\0\44\6\24\7\10\0\12\7\3\0\3\6\12\7\44\6" - + "\122\0\3\7\1\0\25\7\4\6\1\7\4\6\1\7\15\0\300\6" - + "\47\7\25\0\4\7\u0116\6\2\0\6\6\2\0\46\6\2\0\6\6" - + "\2\0\10\6\1\0\1\6\1\0\1\6\1\0\1\6\1\0\37\6" - + "\2\0\65\6\1\0\7\6\1\0\1\6\3\0\3\6\1\0\7\6" - + "\3\0\4\6\2\0\6\6\4\0\15\6\5\0\3\6\1\0\7\6" - + "\3\0\13\0\1\7\2\7\2\7\30\0\1\112\1\112\5\7\20\0" - + "\2\6\23\0\1\6\13\0\5\7\5\0\6\7\1\0\1\6\15\0" - + "\1\6\20\0\15\6\3\0\32\6\26\0\15\7\4\0\1\7\3\0" - + "\14\7\21\0\1\6\4\0\1\6\2\0\12\6\1\0\1\6\3\0" - + "\5\6\6\0\1\6\1\0\1\6\1\0\1\6\1\0\4\6\1\0" - + "\13\6\2\0\4\6\5\0\5\6\4\0\1\6\21\0\51\6\7\0" - + "\u0a70\0\57\6\1\0\57\6\1\0\205\6\6\0\4\6\3\7\16\0" - + "\46\6\12\0\66\6\11\0\1\6\17\0\1\7\27\6\11\0\7\6" - + "\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6" - + "\1\0\7\6\1\0\7\6\1\0\40\7\57\0\1\6\u01c0\0\21\0" - + "\4\0\3\6\31\0\11\6\6\7\1\0\5\6\2\0\5\6\4\0" - + "\126\6\2\0\2\7\2\0\3\6\1\0\132\6\1\0\4\6\5\0" - + "\51\6\3\0\136\6\21\0\33\6\65\0\20\6\u0200\0\u19b6\6\112\0" - + "\u51cc\6\64\0\u048d\6\103\0\56\6\2\0\u010d\6\3\0\20\6\12\7" - + "\2\6\24\0\57\6\1\7\14\0\2\7\1\0\31\6\10\0\120\6" - + "\2\7\45\0\11\6\2\0\147\6\2\0\4\6\1\0\2\6\16\0" - + "\12\6\120\0\10\6\1\7\3\6\1\7\4\6\1\7\27\6\5\7" - + "\20\0\1\6\7\0\64\6\14\0\2\7\62\6\21\7\13\0\12\7" - + "\6\0\22\7\6\6\3\0\1\6\4\0\12\7\34\6\10\7\2\0" - + "\27\6\15\7\14\0\35\6\3\0\4\7\57\6\16\7\16\0\1\6" - + "\12\7\46\0\51\6\16\7\11\0\3\6\1\7\10\6\2\7\2\0" - + "\12\7\6\0\27\6\3\0\1\6\1\7\4\0\60\6\1\7\1\6" - + "\3\7\2\6\2\7\5\6\2\7\1\6\1\7\1\6\30\0\3\6" - + "\43\0\6\6\2\0\6\6\2\0\6\6\11\0\7\6\1\0\7\6" - + "\221\0\43\6\10\7\1\0\2\7\2\0\12\7\6\0\u2ba4\6\14\0" - + "\27\6\4\0\61\6\4\0\u1800\0\u0900\0\u012e\6\2\0\76\6\2\0" - + "\152\6\46\0\7\6\14\0\5\6\5\0\1\6\1\7\12\6\1\0" - + "\15\6\1\0\5\6\1\0\1\6\1\0\2\6\1\0\2\6\1\0" - + "\154\6\41\0\u016b\6\22\0\100\6\2\0\66\6\10\0\40\0\15\6" - + "\3\0\20\7\20\0\7\7\14\0\2\6\30\0\3\6\31\0\1\6" - + "\6\0\5\6\1\0\207\6\2\0\1\7\4\0\1\6\13\0\12\7" - + "\7\0\32\6\4\0\1\6\1\0\32\6\13\0\131\6\3\0\6\6" - + "\2\0\6\6\2\0\6\6\2\0\3\6\3\0\2\6\3\0\2\6" - + "\22\0\3\7\2\0\2\0"; + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\7\1\12\1\2\1\112\1\3\1\1\16\7\4\0\1\12\1\13"+ + "\1\33\1\0\1\6\1\110\1\105\1\34\1\76\1\77\1\5\1\45"+ + "\1\103\1\14\1\10\1\4\1\35\3\41\4\42\2\21\1\16\1\102"+ + "\1\11\1\32\1\15\1\23\1\111\1\27\1\17\1\25\1\26\1\43"+ + "\1\17\2\20\1\74\4\20\1\75\5\20\1\30\3\20\1\37\2\20"+ + "\1\24\1\46\1\31\1\107\1\20\1\0\1\52\1\50\1\54\1\63"+ + "\1\44\1\40\1\73\1\66\1\61\1\20\1\53\1\64\1\71\1\57"+ + "\1\56\1\67\1\20\1\51\1\55\1\60\1\62\1\72\1\65\1\36"+ + "\1\70\1\20\1\100\1\106\1\101\1\104\6\7\1\113\32\7\2\0"+ + "\4\6\1\0\1\47\2\0\1\6\2\0\1\7\7\0\1\6\1\0"+ + "\1\22\2\0\1\6\5\0\2\6\1\114\24\6\1\0\37\6\1\0"+ + "\u01ca\6\4\0\14\6\16\0\5\6\7\0\1\6\1\0\1\6\21\0"+ + "\160\7\5\6\1\0\2\6\2\0\4\6\1\0\7\0\1\6\1\0"+ + "\3\6\1\0\1\6\1\0\24\6\1\0\123\6\1\0\213\6\1\0"+ + "\5\7\2\0\236\6\11\0\46\6\2\0\1\6\7\0\47\6\7\0"+ + "\1\6\1\0\55\7\1\0\1\7\1\0\2\7\1\0\2\7\1\0"+ + "\1\7\10\0\33\6\5\0\3\6\15\0\5\7\6\0\1\6\4\0"+ + "\13\7\5\0\53\6\37\7\4\0\2\6\1\7\143\6\1\0\1\6"+ + "\10\7\1\0\6\7\2\6\2\7\1\0\4\7\2\6\12\7\3\6"+ + "\2\0\1\6\17\0\1\7\1\6\1\7\36\6\33\7\2\0\131\6"+ + "\13\7\1\6\16\0\12\7\41\6\11\7\2\6\4\0\1\6\5\0"+ + "\26\6\4\7\1\6\11\7\1\6\3\7\1\6\5\7\22\0\31\6"+ + "\3\7\104\0\1\6\1\0\13\6\67\0\33\7\1\0\4\7\66\6"+ + "\3\7\1\6\22\7\1\6\7\7\12\6\2\7\2\0\12\7\1\0"+ + "\7\6\1\0\7\6\1\0\3\7\1\0\10\6\2\0\2\6\2\0"+ + "\26\6\1\0\7\6\1\0\1\6\3\0\4\6\2\0\1\7\1\6"+ + "\7\7\2\0\2\7\2\0\3\7\1\6\10\0\1\7\4\0\2\6"+ + "\1\0\3\6\2\7\2\0\12\7\4\6\7\0\1\6\5\0\3\7"+ + "\1\0\6\6\4\0\2\6\2\0\26\6\1\0\7\6\1\0\2\6"+ + "\1\0\2\6\1\0\2\6\2\0\1\7\1\0\5\7\4\0\2\7"+ + "\2\0\3\7\3\0\1\7\7\0\4\6\1\0\1\6\7\0\14\7"+ + "\3\6\1\7\13\0\3\7\1\0\11\6\1\0\3\6\1\0\26\6"+ + "\1\0\7\6\1\0\2\6\1\0\5\6\2\0\1\7\1\6\10\7"+ + "\1\0\3\7\1\0\3\7\2\0\1\6\17\0\2\6\2\7\2\0"+ + "\12\7\1\0\1\6\17\0\3\7\1\0\10\6\2\0\2\6\2\0"+ + "\26\6\1\0\7\6\1\0\2\6\1\0\5\6\2\0\1\7\1\6"+ + "\7\7\2\0\2\7\2\0\3\7\10\0\2\7\4\0\2\6\1\0"+ + "\3\6\2\7\2\0\12\7\1\0\1\6\20\0\1\7\1\6\1\0"+ + "\6\6\3\0\3\6\1\0\4\6\3\0\2\6\1\0\1\6\1\0"+ + "\2\6\3\0\2\6\3\0\3\6\3\0\14\6\4\0\5\7\3\0"+ + "\3\7\1\0\4\7\2\0\1\6\6\0\1\7\16\0\12\7\11\0"+ + "\1\6\7\0\3\7\1\0\10\6\1\0\3\6\1\0\27\6\1\0"+ + "\12\6\1\0\5\6\3\0\1\6\7\7\1\0\3\7\1\0\4\7"+ + "\7\0\2\7\1\0\2\6\6\0\2\6\2\7\2\0\12\7\22\0"+ + "\2\7\1\0\10\6\1\0\3\6\1\0\27\6\1\0\12\6\1\0"+ + "\5\6\2\0\1\7\1\6\7\7\1\0\3\7\1\0\4\7\7\0"+ + "\2\7\7\0\1\6\1\0\2\6\2\7\2\0\12\7\1\0\2\6"+ + "\17\0\2\7\1\0\10\6\1\0\3\6\1\0\51\6\2\0\1\6"+ + "\7\7\1\0\3\7\1\0\4\7\1\6\10\0\1\7\10\0\2\6"+ + "\2\7\2\0\12\7\12\0\6\6\2\0\2\7\1\0\22\6\3\0"+ + "\30\6\1\0\11\6\1\0\1\6\2\0\7\6\3\0\1\7\4\0"+ + "\6\7\1\0\1\7\1\0\10\7\22\0\2\7\15\0\60\6\1\7"+ + "\2\6\7\7\4\0\10\6\10\7\1\0\12\7\47\0\2\6\1\0"+ + "\1\6\2\0\2\6\1\0\1\6\2\0\1\6\6\0\4\6\1\0"+ + "\7\6\1\0\3\6\1\0\1\6\1\0\1\6\2\0\2\6\1\0"+ + "\4\6\1\7\2\6\6\7\1\0\2\7\1\6\2\0\5\6\1\0"+ + "\1\6\1\0\6\7\2\0\12\7\2\0\4\6\40\0\1\6\27\0"+ + "\2\7\6\0\12\7\13\0\1\7\1\0\1\7\1\0\1\7\4\0"+ + "\2\7\10\6\1\0\44\6\4\0\24\7\1\0\2\7\5\6\13\7"+ + "\1\0\44\7\11\0\1\7\71\0\53\6\24\7\1\6\12\7\6\0"+ + "\6\6\4\7\4\6\3\7\1\6\3\7\2\6\7\7\3\6\4\7"+ + "\15\6\14\7\1\6\17\7\2\0\46\6\1\0\1\6\5\0\1\6"+ + "\2\0\53\6\1\0\u014d\6\1\0\4\6\2\0\7\6\1\0\1\6"+ + "\1\0\4\6\2\0\51\6\1\0\4\6\2\0\41\6\1\0\4\6"+ + "\2\0\7\6\1\0\1\6\1\0\4\6\2\0\17\6\1\0\71\6"+ + "\1\0\4\6\2\0\103\6\2\0\3\7\40\0\20\6\20\0\125\6"+ + "\14\0\u026c\6\2\0\21\6\1\0\32\6\5\0\113\6\3\0\3\6"+ + "\17\0\15\6\1\0\4\6\3\7\13\0\22\6\3\7\13\0\22\6"+ + "\2\7\14\0\15\6\1\0\3\6\1\0\2\7\14\0\64\6\40\7"+ + "\3\0\1\6\3\0\2\6\1\7\2\0\12\7\41\0\3\7\2\0"+ + "\12\7\6\0\130\6\10\0\51\6\1\7\1\6\5\0\106\6\12\0"+ + "\35\6\3\0\14\7\4\0\14\7\12\0\12\7\36\6\2\0\5\6"+ + "\13\0\54\6\4\0\21\7\7\6\2\7\6\0\12\7\46\0\27\6"+ + "\5\7\4\0\65\6\12\7\1\0\35\7\2\0\13\7\6\0\12\7"+ + "\15\0\1\6\130\0\5\7\57\6\21\7\7\6\4\0\12\7\21\0"+ + "\11\7\14\0\3\7\36\6\15\7\2\6\12\7\54\6\16\7\14\0"+ + "\44\6\24\7\10\0\12\7\3\0\3\6\12\7\44\6\122\0\3\7"+ + "\1\0\25\7\4\6\1\7\4\6\3\7\2\6\11\0\300\6\47\7"+ + "\25\0\4\7\u0116\6\2\0\6\6\2\0\46\6\2\0\6\6\2\0"+ + "\10\6\1\0\1\6\1\0\1\6\1\0\1\6\1\0\37\6\2\0"+ + "\65\6\1\0\7\6\1\0\1\6\3\0\3\6\1\0\7\6\3\0"+ + "\4\6\2\0\6\6\4\0\15\6\5\0\3\6\1\0\7\6\3\0"+ + "\13\0\1\7\2\7\2\7\30\0\1\112\1\112\5\7\20\0\2\6"+ + "\23\0\1\6\13\0\5\7\5\0\6\7\1\0\1\6\15\0\1\6"+ + "\20\0\15\6\3\0\33\6\25\0\15\7\4\0\1\7\3\0\14\7"+ + "\21\0\1\6\4\0\1\6\2\0\12\6\1\0\1\6\3\0\5\6"+ + "\6\0\1\6\1\0\1\6\1\0\1\6\1\0\4\6\1\0\13\6"+ + "\2\0\4\6\5\0\5\6\4\0\1\6\21\0\51\6\7\0\u0a70\0"+ + "\57\6\1\0\57\6\1\0\205\6\6\0\4\6\3\7\2\6\14\0"+ + "\46\6\1\0\1\6\5\0\1\6\2\0\70\6\7\0\1\6\17\0"+ + "\1\7\27\6\11\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6"+ + "\1\0\7\6\1\0\7\6\1\0\7\6\1\0\7\6\1\0\40\7"+ + "\57\0\1\6\u01c0\0\21\0\4\0\3\6\31\0\11\6\6\7\1\0"+ + "\5\6\2\0\5\6\4\0\126\6\2\0\2\7\2\0\3\6\1\0"+ + "\132\6\1\0\4\6\5\0\51\6\3\0\136\6\21\0\33\6\65\0"+ + "\20\6\u0200\0\u19b6\6\112\0\u51cd\6\63\0\u048d\6\103\0\56\6\2\0"+ + "\u010d\6\3\0\20\6\12\7\2\6\24\0\57\6\1\7\4\0\12\7"+ + "\1\0\31\6\7\0\1\7\120\6\2\7\45\0\11\6\2\0\147\6"+ + "\2\0\4\6\1\0\4\6\14\0\13\6\115\0\12\6\1\7\3\6"+ + "\1\7\4\6\1\7\27\6\5\7\20\0\1\6\7\0\64\6\14\0"+ + "\2\7\62\6\21\7\13\0\12\7\6\0\22\7\6\6\3\0\1\6"+ + "\4\0\12\7\34\6\10\7\2\0\27\6\15\7\14\0\35\6\3\0"+ + "\4\7\57\6\16\7\16\0\1\6\12\7\46\0\51\6\16\7\11\0"+ + "\3\6\1\7\10\6\2\7\2\0\12\7\6\0\27\6\3\0\1\6"+ + "\1\7\4\0\60\6\1\7\1\6\3\7\2\6\2\7\5\6\2\7"+ + "\1\6\1\7\1\6\30\0\3\6\2\0\13\6\5\7\2\0\3\6"+ + "\2\7\12\0\6\6\2\0\6\6\2\0\6\6\11\0\7\6\1\0"+ + "\7\6\221\0\43\6\10\7\1\0\2\7\2\0\12\7\6\0\u2ba4\6"+ + "\14\0\27\6\4\0\61\6\4\0\u1800\0\u0900\0\u016e\6\2\0\152\6"+ + "\46\0\7\6\14\0\5\6\5\0\1\6\1\7\12\6\1\0\15\6"+ + "\1\0\5\6\1\0\1\6\1\0\2\6\1\0\2\6\1\0\154\6"+ + "\41\0\u016b\6\22\0\100\6\2\0\66\6\10\0\40\0\15\6\3\0"+ + "\20\7\20\0\7\7\14\0\2\6\30\0\3\6\31\0\1\6\6\0"+ + "\5\6\1\0\207\6\2\0\1\7\4\0\1\6\13\0\12\7\7\0"+ + "\32\6\4\0\1\6\1\0\32\6\13\0\131\6\3\0\6\6\2\0"+ + "\6\6\2\0\6\6\2\0\3\6\3\0\2\6\3\0\2\6\22\0"+ + "\3\7\2\0\2\0\14\6\1\0\32\6\1\0\23\6\1\0\2\6"+ + "\1\0\17\6\2\0\16\6\42\0\173\6\105\0\65\6\210\0\1\7"+ + "\202\0\35\6\3\0\61\6\57\0\37\6\21\0\33\6\65\0\36\6"+ + "\2\0\44\6\4\0\10\6\1\0\5\6\52\0\236\6\2\0\12\7"+ + "\u0356\0\6\6\2\0\1\6\1\0\54\6\1\0\2\6\3\0\1\6"+ + "\2\0\27\6\252\0\26\6\12\0\32\6\106\0\70\6\6\0\2\6"+ + "\100\0\1\6\3\7\1\0\2\7\5\0\4\7\4\6\1\0\3\6"+ + "\1\0\33\6\4\0\3\7\4\0\1\7\40\0\35\6\203\0\66\6"+ + "\12\0\26\6\12\0\23\6\215\0\111\6\u03b7\0\3\7\65\6\17\7"+ + "\37\0\12\7\20\0\3\7\55\6\13\7\2\0\1\7\22\0\31\6"+ + "\7\0\12\7\6\0\3\7\44\6\16\7\1\0\12\7\100\0\3\7"+ + "\60\6\16\7\4\6\13\0\12\7\u04a6\0\53\6\15\7\10\0\12\7"+ + "\u0936\0\u036f\6\221\0\143\6\u0b9d\0\u042f\6\u33d1\0\u0239\6\u04c7\0\105\6"+ + "\13\0\1\6\56\7\20\0\4\7\15\6\u4060\0\2\6\u2163\0\5\7"+ + "\3\0\26\7\2\0\7\7\36\0\4\7\224\0\3\7\u01bb\0\125\6"+ + "\1\0\107\6\1\0\2\6\2\0\1\6\2\0\2\6\2\0\4\6"+ + "\1\0\14\6\1\0\1\6\1\0\7\6\1\0\101\6\1\0\4\6"+ + "\2\0\10\6\1\0\7\6\1\0\34\6\1\0\4\6\1\0\5\6"+ + "\1\0\1\6\3\0\7\6\1\0\u0154\6\2\0\31\6\1\0\31\6"+ + "\1\0\37\6\1\0\31\6\1\0\37\6\1\0\31\6\1\0\37\6"+ + "\1\0\31\6\1\0\37\6\1\0\31\6\1\0\10\6\2\0\62\7"+ + "\u1600\0\4\6\1\0\33\6\1\0\2\6\1\0\1\6\2\0\1\6"+ + "\1\0\12\6\1\0\4\6\1\0\1\6\1\0\1\6\6\0\1\6"+ + "\4\0\1\6\1\0\1\6\1\0\1\6\1\0\3\6\1\0\2\6"+ + "\1\0\1\6\2\0\1\6\1\0\1\6\1\0\1\6\1\0\1\6"+ + "\1\0\1\6\1\0\2\6\1\0\1\6\2\0\4\6\1\0\7\6"+ + "\1\0\4\6\1\0\4\6\1\0\1\6\1\0\12\6\1\0\21\6"+ + "\5\0\3\6\1\0\5\6\1\0\21\6\u1144\0\ua6d7\6\51\0\u1035\6"+ + "\13\0\336\6\u3fe2\0\u021e\6\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\u05ee\0"+ + "\1\7\36\0\140\7\200\0\360\7\uffff\0\uffff\0\ufe12\0"; - /** - * Translates characters to character classes - */ - private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - /** - * Translates DFA states to action switch labels. - */ - private static final int[] ZZ_ACTION = zzUnpackAction(); + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); - private static final String ZZ_ACTION_PACKED_0 - = "\13\0\1\1\2\2\1\3\1\4\1\5\1\6\1\7" - + "\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17" - + "\1\20\1\21\1\22\1\23\1\15\2\6\1\24\1\25" - + "\21\6\1\26\1\27\1\30\1\31\1\32\1\33\1\34" - + "\1\35\1\36\1\37\1\40\1\41\1\42\2\43\1\44" - + "\1\1\1\42\2\45\1\42\1\1\1\46\1\1\1\47" - + "\1\1\1\50\2\1\1\51\1\1\1\52\2\42\2\53" - + "\1\42\1\54\1\42\1\1\1\55\1\3\1\0\1\56" - + "\1\57\1\60\1\61\1\62\1\63\1\64\1\65\1\66" - + "\1\67\1\70\1\71\1\72\1\73\1\74\1\75\1\0" - + "\1\76\1\62\1\77\1\0\2\77\7\6\1\100\1\101" - + "\2\6\1\102\16\6\1\103\1\104\1\105\4\6\1\106" - + "\13\6\1\107\1\110\1\111\1\112\1\113\1\114\1\115" - + "\1\116\1\117\1\120\1\121\1\120\1\122\1\123\1\124" - + "\1\125\1\126\1\127\1\0\1\130\1\0\1\131\1\0" - + "\1\132\1\133\1\0\1\134\5\0\1\135\1\0\1\136" - + "\1\115\2\3\2\0\1\137\1\140\1\141\1\142\1\143" - + "\1\0\1\62\1\144\2\145\1\77\1\6\1\146\13\6" - + "\1\147\4\6\1\150\3\6\1\151\6\6\1\152\12\6" - + "\1\153\1\6\1\154\1\6\1\155\1\120\1\0\1\134" - + "\1\156\1\157\1\0\1\160\2\0\1\161\1\162\1\163" - + "\1\0\1\164\1\145\1\77\4\6\1\165\1\166\2\6" - + "\1\167\11\6\1\170\1\171\1\6\1\172\11\6\1\173" - + "\5\6\1\174\1\6\1\0\1\175\1\176\1\0\1\145" - + "\1\77\1\177\1\200\2\6\1\201\1\6\1\202\1\203" - + "\1\6\1\204\1\6\1\205\3\6\1\206\11\6\1\207" - + "\5\6\1\0\1\145\1\77\3\6\1\210\1\6\1\211" - + "\1\212\2\6\1\213\3\6\1\214\3\6\1\215\4\6" - + "\1\216\1\6\1\0\1\145\1\77\1\217\1\6\1\220" - + "\10\6\1\221\1\222\1\6\1\223\1\224\1\6\1\0" - + "\1\145\1\77\1\225\1\226\1\227\3\6\1\230\3\6" - + "\1\231\1\0\1\145\1\77\1\232\1\6\1\233\1\6" - + "\1\234\1\235\1\236\1\145\1\77\1\237\1\240\6\77"; + private static final String ZZ_ACTION_PACKED_0 = + "\13\0\1\1\2\2\1\3\1\4\1\5\1\6\1\7"+ + "\1\10\1\11\1\12\1\13\1\14\1\15\1\16\1\17"+ + "\1\20\1\21\1\22\1\23\1\15\2\6\1\24\1\25"+ + "\21\6\1\26\1\27\1\30\1\31\1\32\1\33\1\34"+ + "\1\35\1\36\1\37\1\40\1\41\1\42\2\43\1\44"+ + "\1\1\1\42\2\45\1\42\1\1\1\46\1\1\1\47"+ + "\1\1\1\50\2\1\1\51\1\1\1\52\2\42\2\53"+ + "\1\42\1\54\1\42\1\1\1\55\1\3\1\0\1\56"+ + "\1\57\1\60\1\61\1\62\1\63\1\64\1\65\1\66"+ + "\1\67\1\70\1\71\1\72\1\73\1\74\1\75\1\0"+ + "\1\76\1\62\1\77\1\0\2\77\7\6\1\100\1\101"+ + "\2\6\1\102\16\6\1\103\1\104\1\105\4\6\1\106"+ + "\13\6\1\107\1\110\1\111\1\112\1\113\1\114\1\115"+ + "\1\116\1\117\1\120\1\121\1\120\1\122\1\123\1\124"+ + "\1\125\1\126\1\127\1\0\1\130\1\0\1\131\1\0"+ + "\1\132\1\133\1\0\1\134\5\0\1\135\1\0\1\136"+ + "\1\115\2\3\2\0\1\137\1\140\1\141\1\142\1\143"+ + "\1\0\1\62\1\144\2\145\1\77\1\6\1\146\13\6"+ + "\1\147\4\6\1\150\4\6\1\151\6\6\1\152\12\6"+ + "\1\153\1\6\1\154\1\6\1\155\1\120\1\0\1\134"+ + "\1\156\1\157\1\0\1\160\2\0\1\161\1\162\1\163"+ + "\1\0\1\164\1\145\1\77\4\6\1\165\1\166\2\6"+ + "\1\167\12\6\1\170\1\171\1\6\1\172\11\6\1\173"+ + "\5\6\1\174\1\6\1\0\1\175\1\176\1\0\1\145"+ + "\1\77\1\177\1\200\2\6\1\201\1\6\1\202\1\203"+ + "\1\6\1\204\1\6\1\205\4\6\1\206\11\6\1\207"+ + "\5\6\1\0\1\145\1\77\3\6\1\210\1\6\1\211"+ + "\1\212\1\6\1\213\1\6\1\214\3\6\1\215\3\6"+ + "\1\216\4\6\1\217\1\6\1\0\1\145\1\77\1\220"+ + "\1\6\1\221\10\6\1\222\1\223\1\6\1\224\1\225"+ + "\1\6\1\0\1\145\1\77\1\226\1\227\1\230\3\6"+ + "\1\231\3\6\1\232\1\0\1\145\1\77\1\233\1\6"+ + "\1\234\1\6\1\235\1\236\1\237\1\145\1\77\1\240"+ + "\1\241\6\77"; - private static int[] zzUnpackAction() { - int[] result = new int[433]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; + private static int [] zzUnpackAction() { + int [] result = new int[437]; + int offset = 0; + offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } - private static int zzUnpackAction(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do { - result[j++] = value; - } while (--count > 0); - } - return j; + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\115\0\232\0\347\0\u0134\0\u0181\0\u01ce\0\u021b"+ + "\0\u0268\0\u02b5\0\u0302\0\u034f\0\u039c\0\u034f\0\u03e9\0\u0436"+ + "\0\u0483\0\u04d0\0\u051d\0\u056a\0\u05b7\0\u0604\0\u0651\0\u069e"+ + "\0\u06eb\0\u034f\0\u034f\0\u034f\0\u0738\0\u034f\0\u034f\0\u0785"+ + "\0\u07d2\0\u081f\0\u086c\0\u034f\0\u08b9\0\u0906\0\u0953\0\u09a0"+ + "\0\u09ed\0\u0a3a\0\u0a87\0\u0ad4\0\u0b21\0\u0b6e\0\u0bbb\0\u0c08"+ + "\0\u0c55\0\u0ca2\0\u0cef\0\u0d3c\0\u0d89\0\u034f\0\u034f\0\u034f"+ + "\0\u034f\0\u034f\0\u034f\0\u034f\0\u0dd6\0\u0e23\0\u0e70\0\u0ebd"+ + "\0\u034f\0\u0f0a\0\u0f57\0\u034f\0\u034f\0\u0fa4\0\u0ff1\0\u103e"+ + "\0\u034f\0\u108b\0\u10d8\0\u034f\0\u1125\0\u034f\0\u1172\0\u034f"+ + "\0\u11bf\0\u120c\0\u034f\0\u1259\0\u034f\0\u034f\0\u12a6\0\u034f"+ + "\0\u12f3\0\u1340\0\u034f\0\u138d\0\u13da\0\u034f\0\u1427\0\u1474"+ + "\0\u034f\0\u034f\0\u14c1\0\u034f\0\u150e\0\u034f\0\u155b\0\u15a8"+ + "\0\u034f\0\u034f\0\u15f5\0\u034f\0\u034f\0\u1642\0\u034f\0\u034f"+ + "\0\u168f\0\u16dc\0\u1729\0\u1776\0\u17c3\0\u1810\0\u185d\0\u18aa"+ + "\0\u18f7\0\u1944\0\u1991\0\u19de\0\u1a2b\0\u1a78\0\u034f\0\u034f"+ + "\0\u1ac5\0\u1b12\0\u04d0\0\u1b5f\0\u1bac\0\u1bf9\0\u1c46\0\u1c93"+ + "\0\u1ce0\0\u1d2d\0\u1d7a\0\u1dc7\0\u1e14\0\u1e61\0\u1eae\0\u1efb"+ + "\0\u1f48\0\u04d0\0\u04d0\0\u1f95\0\u1fe2\0\u202f\0\u207c\0\u20c9"+ + "\0\u04d0\0\u2116\0\u2163\0\u21b0\0\u21fd\0\u224a\0\u2297\0\u22e4"+ + "\0\u2331\0\u237e\0\u23cb\0\u2418\0\u034f\0\u034f\0\u034f\0\u034f"+ + "\0\u034f\0\u034f\0\u034f\0\u034f\0\u034f\0\u2465\0\u034f\0\u24b2"+ + "\0\u034f\0\u034f\0\u034f\0\u034f\0\u034f\0\u034f\0\u1125\0\u034f"+ + "\0\u1172\0\u034f\0\u11bf\0\u034f\0\u034f\0\u1259\0\u24ff\0\u254c"+ + "\0\u2599\0\u25e6\0\u2633\0\u2680\0\u26cd\0\u271a\0\u034f\0\u2767"+ + "\0\u27b4\0\u034f\0\u2801\0\u284e\0\u034f\0\u034f\0\u034f\0\u289b"+ + "\0\u034f\0\u28e8\0\u28e8\0\u034f\0\u2935\0\u17c3\0\u2982\0\u29cf"+ + "\0\u04d0\0\u2a1c\0\u2a69\0\u2ab6\0\u2b03\0\u2b50\0\u2b9d\0\u2bea"+ + "\0\u2c37\0\u2c84\0\u2cd1\0\u2d1e\0\u04d0\0\u2d6b\0\u2db8\0\u2e05"+ + "\0\u2e52\0\u04d0\0\u2e9f\0\u2eec\0\u2f39\0\u2f86\0\u04d0\0\u2fd3"+ + "\0\u3020\0\u306d\0\u30ba\0\u3107\0\u3154\0\u04d0\0\u31a1\0\u31ee"+ + "\0\u323b\0\u3288\0\u32d5\0\u3322\0\u336f\0\u33bc\0\u3409\0\u3456"+ + "\0\u04d0\0\u34a3\0\u04d0\0\u34f0\0\u04d0\0\u034f\0\u24ff\0\u034f"+ + "\0\u034f\0\u034f\0\u353d\0\u034f\0\u358a\0\u35d7\0\u3624\0\u034f"+ + "\0\u034f\0\u3671\0\u034f\0\u36be\0\u370b\0\u3758\0\u37a5\0\u37f2"+ + "\0\u383f\0\u04d0\0\u04d0\0\u388c\0\u38d9\0\u04d0\0\u3926\0\u3973"+ + "\0\u39c0\0\u3a0d\0\u3a5a\0\u3aa7\0\u3af4\0\u3b41\0\u3b8e\0\u3bdb"+ + "\0\u04d0\0\u04d0\0\u3c28\0\u04d0\0\u3c75\0\u3cc2\0\u3d0f\0\u3d5c"+ + "\0\u3da9\0\u3df6\0\u3e43\0\u3e90\0\u3edd\0\u04d0\0\u3f2a\0\u3f77"+ + "\0\u3fc4\0\u4011\0\u405e\0\u04d0\0\u40ab\0\u40f8\0\u034f\0\u034f"+ + "\0\u4145\0\u4192\0\u41df\0\u04d0\0\u422c\0\u4279\0\u42c6\0\u04d0"+ + "\0\u4313\0\u04d0\0\u04d0\0\u4360\0\u04d0\0\u43ad\0\u04d0\0\u43fa"+ + "\0\u4447\0\u4494\0\u44e1\0\u04d0\0\u452e\0\u457b\0\u45c8\0\u4615"+ + "\0\u4662\0\u46af\0\u46fc\0\u4749\0\u4796\0\u04d0\0\u47e3\0\u4830"+ + "\0\u487d\0\u48ca\0\u4917\0\u4964\0\u49b1\0\u49fe\0\u4a4b\0\u4a98"+ + "\0\u4ae5\0\u04d0\0\u4b32\0\u04d0\0\u04d0\0\u4b7f\0\u04d0\0\u4bcc"+ + "\0\u04d0\0\u4c19\0\u4c66\0\u4cb3\0\u04d0\0\u4d00\0\u4d4d\0\u4d9a"+ + "\0\u04d0\0\u4de7\0\u4e34\0\u4e81\0\u4ece\0\u04d0\0\u4f1b\0\u4f68"+ + "\0\u4fb5\0\u5002\0\u04d0\0\u504f\0\u04d0\0\u509c\0\u50e9\0\u5136"+ + "\0\u5183\0\u51d0\0\u521d\0\u526a\0\u52b7\0\u04d0\0\u04d0\0\u5304"+ + "\0\u04d0\0\u04d0\0\u5351\0\u539e\0\u53eb\0\u5438\0\u04d0\0\u04d0"+ + "\0\u04d0\0\u5485\0\u54d2\0\u551f\0\u04d0\0\u556c\0\u55b9\0\u5606"+ + "\0\u04d0\0\u5653\0\u56a0\0\u56ed\0\u04d0\0\u573a\0\u04d0\0\u5787"+ + "\0\u04d0\0\u04d0\0\u034f\0\u034f\0\u57d4\0\u04d0\0\u04d0\0\u5821"+ + "\0\u586e\0\u58bb\0\u5908\0\u5955\0\u1729"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[437]; + int offset = 0; + offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); } + return j; + } - /** - * Translates a state to a row index in the transition table - */ - private static final int[] ZZ_ROWMAP = zzUnpackRowMap(); + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); - private static final String ZZ_ROWMAP_PACKED_0 - = "\0\0\0\115\0\232\0\347\0\u0134\0\u0181\0\u01ce\0\u021b" - + "\0\u0268\0\u02b5\0\u0302\0\u034f\0\u039c\0\u034f\0\u03e9\0\u0436" - + "\0\u0483\0\u04d0\0\u051d\0\u056a\0\u05b7\0\u0604\0\u0651\0\u069e" - + "\0\u06eb\0\u034f\0\u034f\0\u034f\0\u0738\0\u034f\0\u034f\0\u0785" - + "\0\u07d2\0\u081f\0\u086c\0\u034f\0\u08b9\0\u0906\0\u0953\0\u09a0" - + "\0\u09ed\0\u0a3a\0\u0a87\0\u0ad4\0\u0b21\0\u0b6e\0\u0bbb\0\u0c08" - + "\0\u0c55\0\u0ca2\0\u0cef\0\u0d3c\0\u0d89\0\u034f\0\u034f\0\u034f" - + "\0\u034f\0\u034f\0\u034f\0\u034f\0\u0dd6\0\u0e23\0\u0e70\0\u0ebd" - + "\0\u034f\0\u0f0a\0\u0f57\0\u034f\0\u034f\0\u0fa4\0\u0ff1\0\u103e" - + "\0\u034f\0\u108b\0\u10d8\0\u034f\0\u1125\0\u034f\0\u1172\0\u034f" - + "\0\u11bf\0\u120c\0\u034f\0\u1259\0\u034f\0\u034f\0\u12a6\0\u034f" - + "\0\u12f3\0\u1340\0\u034f\0\u138d\0\u13da\0\u034f\0\u1427\0\u1474" - + "\0\u034f\0\u034f\0\u14c1\0\u034f\0\u150e\0\u034f\0\u155b\0\u15a8" - + "\0\u034f\0\u034f\0\u15f5\0\u034f\0\u034f\0\u1642\0\u034f\0\u034f" - + "\0\u168f\0\u16dc\0\u1729\0\u1776\0\u17c3\0\u1810\0\u185d\0\u18aa" - + "\0\u18f7\0\u1944\0\u1991\0\u19de\0\u1a2b\0\u1a78\0\u034f\0\u034f" - + "\0\u1ac5\0\u1b12\0\u04d0\0\u1b5f\0\u1bac\0\u1bf9\0\u1c46\0\u1c93" - + "\0\u1ce0\0\u1d2d\0\u1d7a\0\u1dc7\0\u1e14\0\u1e61\0\u1eae\0\u1efb" - + "\0\u1f48\0\u04d0\0\u04d0\0\u1f95\0\u1fe2\0\u202f\0\u207c\0\u20c9" - + "\0\u04d0\0\u2116\0\u2163\0\u21b0\0\u21fd\0\u224a\0\u2297\0\u22e4" - + "\0\u2331\0\u237e\0\u23cb\0\u2418\0\u034f\0\u034f\0\u034f\0\u034f" - + "\0\u034f\0\u034f\0\u034f\0\u034f\0\u034f\0\u2465\0\u034f\0\u24b2" - + "\0\u034f\0\u034f\0\u034f\0\u034f\0\u034f\0\u034f\0\u1125\0\u034f" - + "\0\u1172\0\u034f\0\u11bf\0\u034f\0\u034f\0\u1259\0\u24ff\0\u254c" - + "\0\u2599\0\u25e6\0\u2633\0\u2680\0\u26cd\0\u271a\0\u034f\0\u2767" - + "\0\u27b4\0\u034f\0\u2801\0\u284e\0\u034f\0\u034f\0\u034f\0\u289b" - + "\0\u034f\0\u28e8\0\u28e8\0\u034f\0\u2935\0\u17c3\0\u2982\0\u29cf" - + "\0\u04d0\0\u2a1c\0\u2a69\0\u2ab6\0\u2b03\0\u2b50\0\u2b9d\0\u2bea" - + "\0\u2c37\0\u2c84\0\u2cd1\0\u2d1e\0\u04d0\0\u2d6b\0\u2db8\0\u2e05" - + "\0\u2e52\0\u04d0\0\u2e9f\0\u2eec\0\u2f39\0\u04d0\0\u2f86\0\u2fd3" - + "\0\u3020\0\u306d\0\u30ba\0\u3107\0\u04d0\0\u3154\0\u31a1\0\u31ee" - + "\0\u323b\0\u3288\0\u32d5\0\u3322\0\u336f\0\u33bc\0\u3409\0\u04d0" - + "\0\u3456\0\u04d0\0\u34a3\0\u04d0\0\u034f\0\u24ff\0\u034f\0\u034f" - + "\0\u034f\0\u34f0\0\u034f\0\u353d\0\u358a\0\u35d7\0\u034f\0\u034f" - + "\0\u3624\0\u034f\0\u3671\0\u36be\0\u370b\0\u3758\0\u37a5\0\u37f2" - + "\0\u04d0\0\u04d0\0\u383f\0\u388c\0\u04d0\0\u38d9\0\u3926\0\u3973" - + "\0\u39c0\0\u3a0d\0\u3a5a\0\u3aa7\0\u3af4\0\u3b41\0\u04d0\0\u04d0" - + "\0\u3b8e\0\u04d0\0\u3bdb\0\u3c28\0\u3c75\0\u3cc2\0\u3d0f\0\u3d5c" - + "\0\u3da9\0\u3df6\0\u3e43\0\u04d0\0\u3e90\0\u3edd\0\u3f2a\0\u3f77" - + "\0\u3fc4\0\u04d0\0\u4011\0\u405e\0\u034f\0\u034f\0\u40ab\0\u40f8" - + "\0\u4145\0\u04d0\0\u4192\0\u41df\0\u422c\0\u04d0\0\u4279\0\u04d0" - + "\0\u04d0\0\u42c6\0\u04d0\0\u4313\0\u04d0\0\u4360\0\u43ad\0\u43fa" - + "\0\u04d0\0\u4447\0\u4494\0\u44e1\0\u452e\0\u457b\0\u45c8\0\u4615" - + "\0\u4662\0\u46af\0\u04d0\0\u46fc\0\u4749\0\u4796\0\u47e3\0\u4830" - + "\0\u487d\0\u48ca\0\u4917\0\u4964\0\u49b1\0\u49fe\0\u04d0\0\u4a4b" - + "\0\u04d0\0\u04d0\0\u4a98\0\u4ae5\0\u04d0\0\u4b32\0\u4b7f\0\u4bcc" - + "\0\u04d0\0\u4c19\0\u4c66\0\u4cb3\0\u04d0\0\u4d00\0\u4d4d\0\u4d9a" - + "\0\u4de7\0\u04d0\0\u4e34\0\u4e81\0\u4ece\0\u4f1b\0\u04d0\0\u4f68" - + "\0\u04d0\0\u4fb5\0\u5002\0\u504f\0\u509c\0\u50e9\0\u5136\0\u5183" - + "\0\u51d0\0\u04d0\0\u04d0\0\u521d\0\u04d0\0\u04d0\0\u526a\0\u52b7" - + "\0\u5304\0\u5351\0\u04d0\0\u04d0\0\u04d0\0\u539e\0\u53eb\0\u5438" - + "\0\u04d0\0\u5485\0\u54d2\0\u551f\0\u04d0\0\u556c\0\u55b9\0\u5606" - + "\0\u04d0\0\u5653\0\u04d0\0\u56a0\0\u04d0\0\u04d0\0\u034f\0\u034f" - + "\0\u56ed\0\u04d0\0\u04d0\0\u573a\0\u5787\0\u57d4\0\u5821\0\u586e" - + "\0\u1729"; + private static final String ZZ_TRANS_PACKED_0 = + "\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\14"+ + "\1\23\1\24\1\17\1\25\1\26\1\27\1\30\2\22"+ + "\1\31\1\14\1\32\1\33\4\22\1\34\1\35\1\36"+ + "\1\37\1\40\2\22\1\41\2\31\1\22\1\42\1\43"+ + "\1\14\1\44\1\45\1\46\1\47\1\22\1\50\1\51"+ + "\1\52\1\53\1\54\1\55\1\56\1\57\1\22\1\60"+ + "\1\22\1\61\2\22\1\62\1\63\1\64\1\65\1\66"+ + "\1\67\1\70\1\71\1\72\1\73\1\74\1\75\1\76"+ + "\1\77\1\100\1\101\2\0\1\22\1\102\1\103\1\104"+ + "\30\102\1\105\12\102\1\106\46\102\1\107\1\103\1\104"+ + "\31\107\1\105\11\107\1\106\46\107\1\14\1\110\1\111"+ + "\1\112\1\113\5\14\1\112\2\14\1\114\3\115\4\14"+ + "\4\115\5\14\3\115\2\14\2\115\3\14\26\115\2\14"+ + "\1\116\11\14\2\0\2\14\1\0\1\14\1\0\27\14"+ + "\1\117\44\14\1\120\11\14\2\0\2\14\1\110\1\111"+ + "\1\112\6\14\1\112\3\14\3\121\2\14\1\122\1\14"+ + "\4\121\5\14\3\121\2\14\2\121\3\14\26\121\2\14"+ + "\1\123\11\14\2\0\2\14\1\0\1\14\1\0\27\14"+ + "\1\124\44\14\1\125\11\14\2\0\1\14\1\126\1\110"+ + "\1\111\1\0\25\126\1\127\60\126\2\0\1\126\1\130"+ + "\1\110\1\111\1\0\10\130\1\131\75\130\2\0\1\130"+ + "\1\126\1\110\1\111\1\0\5\126\1\132\66\126\1\133"+ + "\11\126\2\0\1\126\1\134\1\103\1\104\43\134\1\135"+ + "\1\136\45\134\117\0\1\16\115\0\1\17\6\0\1\17"+ + "\106\0\1\137\1\140\24\0\1\141\114\0\1\142\70\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\26\22\15\0\2\22\10\0\1\143\1\144\7\0\1\145"+ + "\13\0\1\145\3\0\2\145\33\0\1\146\27\0\1\147"+ + "\4\0\3\150\4\0\4\150\1\0\1\151\3\0\3\150"+ + "\2\0\2\150\3\0\26\150\2\0\1\152\46\0\1\153"+ + "\76\0\1\154\15\0\1\155\77\0\1\156\14\0\1\157"+ + "\100\0\1\160\106\0\1\145\10\0\1\31\13\0\1\31"+ + "\3\0\2\31\2\161\102\0\1\162\72\0\1\145\10\0"+ + "\1\163\13\0\1\164\2\165\1\0\1\166\1\167\2\161"+ + "\56\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\2\22\1\170\3\22\1\171\2\22\1\172\1\173"+ + "\13\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\1\22\1\174\6\22\3\0\2\22\1\175"+ + "\11\22\1\176\11\22\15\0\2\22\32\0\1\177\12\0"+ + "\1\200\55\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\1\22\1\201\24\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\7\22\1\202"+ + "\3\0\26\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\5\22\1\203\20\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\2\22\1\204\3\22\1\205\5\22"+ + "\1\206\11\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\207\3\0\10\22\1\210"+ + "\1\22\1\211\2\22\1\212\10\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\22\22\1\213\3\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\7\22\1\214\3\0\2\22"+ + "\1\215\7\22\1\216\13\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\1\22"+ + "\1\217\14\22\1\220\1\22\1\221\5\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\3\22"+ + "\1\222\4\22\3\0\5\22\1\223\1\22\1\224\11\22"+ + "\1\225\4\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\5\22\1\226\1\22"+ + "\1\227\16\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\230\3\0\6\22\1\231"+ + "\11\22\1\232\5\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\11\22\1\233"+ + "\4\22\1\234\7\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\1\22\1\235"+ + "\1\236\7\22\1\237\13\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\2\22"+ + "\1\240\3\22\1\241\17\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\7\22\1\242\3\0"+ + "\26\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\7\22\1\243\16\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\2\22\1\244\23\22\15\0\2\22\32\0"+ + "\1\245\52\0\1\246\41\0\1\247\53\0\1\250\40\0"+ + "\1\251\114\0\1\252\62\0\1\102\2\0\30\102\1\0"+ + "\12\102\1\0\46\102\2\0\1\104\112\0\1\253\3\0"+ + "\27\253\1\254\1\255\1\256\2\253\1\257\1\256\1\260"+ + "\3\253\1\261\1\253\1\262\1\263\5\253\1\264\1\265"+ + "\31\253\2\0\1\253\1\107\2\0\31\107\1\0\11\107"+ + "\1\0\46\107\2\0\1\111\115\0\1\112\6\0\1\112"+ + "\117\0\1\266\107\0\1\267\3\0\1\267\1\0\5\267"+ + "\2\0\4\267\1\0\1\270\2\0\10\267\3\0\26\267"+ + "\17\0\1\271\2\0\30\271\1\272\61\271\10\0\1\273"+ + "\3\0\1\273\1\0\5\273\2\0\4\273\1\0\1\274"+ + "\2\0\10\273\3\0\26\273\34\0\1\275\77\0\1\276"+ + "\2\0\30\276\1\277\1\300\60\276\31\0\1\301\77\0"+ + "\1\302\104\0\1\303\6\0\1\304\2\0\3\305\2\0"+ + "\1\306\1\0\4\305\5\0\3\305\2\0\2\305\3\0"+ + "\26\305\2\0\1\307\14\0\1\134\2\0\43\134\2\0"+ + "\45\134\1\253\3\0\34\253\1\257\5\253\1\261\1\253"+ + "\1\262\1\263\5\253\1\264\1\265\31\253\2\0\1\310"+ + "\1\137\1\311\1\312\112\137\5\313\1\314\107\313\10\0"+ + "\1\315\125\0\1\145\13\0\1\145\3\0\2\145\2\161"+ + "\102\0\1\316\72\0\1\150\3\0\1\150\1\0\5\150"+ + "\2\0\4\150\4\0\10\150\3\0\26\150\51\0\1\317"+ + "\77\0\1\320\14\0\1\321\76\0\1\322\4\0\1\323"+ + "\13\0\1\323\3\0\2\323\2\0\1\322\101\0\1\324"+ + "\72\0\1\145\10\0\1\163\13\0\1\163\3\0\2\163"+ + "\2\161\60\0\1\145\10\0\1\163\13\0\1\164\3\0"+ + "\1\166\1\167\2\161\67\0\1\325\1\0\1\325\3\0"+ + "\3\325\5\0\1\326\2\0\5\325\3\0\1\325\1\0"+ + "\1\325\1\0\1\325\6\0\1\325\41\0\1\145\10\0"+ + "\1\163\13\0\1\167\3\0\2\167\2\161\60\0\1\145"+ + "\10\0\1\163\13\0\1\327\3\0\2\327\2\161\56\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\14\22\1\330\11\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\1\22\1\331"+ + "\24\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\7\22\1\332\16\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\7\22\1\333\16\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\10\22\1\334\15\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\4\22\1\335"+ + "\21\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\5\22\1\336\20\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\7\22\1\337\3\0\26\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\10\22"+ + "\1\340\15\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\5\22\1\341\2\22"+ + "\1\342\15\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\7\22\1\343\16\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\2\22\1\344\23\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\10\22\1\345\15\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\2\22"+ + "\1\346\23\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\17\22\1\347\6\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\11\22\1\350\14\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\7\22"+ + "\1\351\3\0\26\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\15\22\1\352"+ + "\10\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\10\22\1\353\10\22\1\354"+ + "\4\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\14\22\1\355\11\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\12\22\1\356\5\22\1\357\5\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\1\22\1\360\7\22\1\361\14\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\17\22\1\362\6\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\5\22\1\363\2\22\1\364\15\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\17\22\1\365\6\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\7\22\1\366\3\0\26\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\13\22\1\367\12\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\3\22"+ + "\1\370\4\22\3\0\14\22\1\371\11\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\7\22\1\372\16\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\10\22"+ + "\1\373\15\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\11\22\1\374\14\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\6\22\1\375\2\22\1\376\14\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\4\22\1\377\21\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\1\u0100\25\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\1\22\1\u0101"+ + "\24\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\11\22\1\u0102\14\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\10\22\1\u0103\15\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\3\22\1\u0104"+ + "\4\22\3\0\26\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\25\22\1\u0105"+ + "\15\0\2\22\35\0\1\260\3\0\2\260\107\0\1\u0106"+ + "\3\0\2\u0106\52\0\1\u0107\2\0\30\u0107\1\277\1\0"+ + "\60\u0107\1\300\2\0\30\300\1\u0108\61\300\15\0\1\u0109"+ + "\114\0\1\u010a\115\0\3\u010b\4\0\4\u010b\5\0\3\u010b"+ + "\2\0\2\u010b\3\0\26\u010b\2\0\1\u010c\30\0\1\u010d"+ + "\7\0\1\u010e\100\0\1\305\3\0\1\305\1\0\5\305"+ + "\2\0\4\305\4\0\10\305\3\0\26\305\35\0\3\u010f"+ + "\4\0\4\u010f\5\0\3\u010f\2\0\2\u010f\3\0\26\u010f"+ + "\2\0\1\u0110\63\0\1\u0111\47\0\1\312\112\0\5\313"+ + "\1\u0112\107\313\4\0\1\312\1\314\141\0\1\u0113\103\0"+ + "\1\323\13\0\1\323\3\0\2\323\71\0\1\u0114\1\0"+ + "\1\u0114\3\0\3\u0114\5\0\1\u0114\2\0\5\u0114\3\0"+ + "\1\u0114\1\0\1\u0114\1\0\1\u0114\6\0\1\u0114\41\0"+ + "\1\145\10\0\1\163\13\0\1\u0115\3\0\2\u0115\2\161"+ + "\56\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\5\22\1\u0116\20\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\2\22"+ + "\1\u0117\23\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\4\22\1\u0118\21\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\7\22\1\u0119\3\0\26\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\16\22\1\u011a\7\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\7\22\1\u011b\3\0\26\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\2\22\1\u011c\23\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\12\22\1\u011d\13\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\7\22\1\u011e\3\0"+ + "\26\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\4\22\1\u011f\21\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\5\22\1\u0120\2\22\1\u0121\15\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\5\22\1\u0122\20\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\10\22\1\u0123\15\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\7\22\1\u0124\3\0\26\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\10\22\1\u0125\15\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\1\22\1\u0126\24\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\11\22"+ + "\1\u0127\14\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\u0128\3\0\26\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\14\22\1\u0129\11\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\7\22\1\u012a"+ + "\3\0\26\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\6\22\1\u012b\17\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\5\22\1\u012c\20\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\7\22"+ + "\1\u012d\3\0\26\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u012e"+ + "\15\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\7\22\1\u012f\3\0\26\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\6\22\1\u0130\5\22\1\u0131\11\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\7\22"+ + "\1\u0132\3\0\26\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\2\22\1\u0133"+ + "\23\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\7\22\1\u0134\3\0\26\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\2\22\1\u0135\23\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\16\22"+ + "\1\u0136\7\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\14\22\1\u0137\11\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\10\22\1\u0138\15\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\22\22\1\u0139\3\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\3\22"+ + "\1\u013a\22\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\14\22\1\u013b\11\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\13\22\1\u013c\12\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\11\22\1\u013d\14\22\15\0\2\22\1\0\2\u013e"+ + "\5\0\1\u010b\1\0\1\u013e\1\0\1\u010b\1\u013f\5\u010b"+ + "\2\0\4\u010b\4\0\10\u010b\3\0\26\u010b\33\0\1\u0140"+ + "\125\0\1\u0141\77\0\1\u010f\3\0\1\u010f\1\0\5\u010f"+ + "\2\0\4\u010f\4\0\10\u010f\3\0\26\u010f\17\0\4\313"+ + "\1\312\1\u0112\107\313\17\0\1\u0142\1\0\1\u0142\3\0"+ + "\3\u0142\5\0\1\u0142\2\0\5\u0142\3\0\1\u0142\1\0"+ + "\1\u0142\1\0\1\u0142\6\0\1\u0142\41\0\1\145\10\0"+ + "\1\163\13\0\1\u0143\3\0\2\u0143\2\161\56\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\7\22\1\u0144\3\0"+ + "\26\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\14\22\1\u0145\11\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\10\22\1\u0146\15\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\7\22\1\u0147\16\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\3\22\1\u0148"+ + "\22\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\1\22\1\u0149\24\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\16\22\1\u014a\7\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\10\22\1\u014b\15\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\11\22\1\u014c"+ + "\14\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\5\22\1\u014d\20\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\11\22\1\u014e\14\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\1\22\1\u014f\24\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\4\22\1\u0150"+ + "\21\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\1\22\1\u0151\24\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\22\22\1\u0152\3\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\5\22\1\u0153\20\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\15\22\1\u0154"+ + "\10\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\6\22\1\u0155\17\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\2\22\1\u0156\23\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\1\22\1\u0157\24\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\1\22\1\u0158"+ + "\24\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\7\22\1\u0159\3\0\26\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\3\22"+ + "\1\u015a\4\22\3\0\26\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\12\22"+ + "\1\u015b\13\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\10\22\1\u015c\15\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\21\22\1\u015d\4\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\7\22"+ + "\1\u015e\3\0\26\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\7\22\1\u015f\3\0\26\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\2\22\1\u0160\23\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\2\22\1\u0161\23\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\11\22"+ + "\1\u0162\14\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\7\22\1\u0163\16\22"+ + "\15\0\2\22\1\0\2\u013e\7\0\1\u013e\2\0\1\u013f"+ + "\125\0\1\u0164\105\0\1\u0165\1\0\1\u0165\3\0\3\u0165"+ + "\5\0\1\u0165\2\0\5\u0165\3\0\1\u0165\1\0\1\u0165"+ + "\1\0\1\u0165\6\0\1\u0165\41\0\1\145\10\0\1\163"+ + "\13\0\1\u0166\3\0\2\u0166\2\161\56\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\14\22\1\u0167"+ + "\11\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\11\22\1\u0168\14\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\13\22\1\u0169\12\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\7\22\1\u016a\16\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\7\22\1\u016b"+ + "\16\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\4\22\1\u016c\21\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\16\22\1\u016d\7\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\11\22\1\u016e\14\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\7\22\1\u016f\3\0\26\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\17\22\1\u0170\6\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\3\22"+ + "\1\u0171\4\22\3\0\26\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\7\22"+ + "\1\u0172\16\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\3\22\1\u0173\4\22\3\0\7\22"+ + "\1\u0174\16\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\10\22\1\u0175\15\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\21\22\1\u0176\4\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\11\22\1\u0177\14\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\14\22"+ + "\1\u0178\11\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\u0179\3\0\26\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\11\22\1\u017a\14\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\4\22\1\u017b\21\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u017c"+ + "\15\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\23\22\1\u017d\2\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\4\22\1\u017e\21\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\11\22\1\u017f\14\22\15\0\2\22\27\0\1\u0180\104\0"+ + "\1\u0181\1\0\1\u0181\3\0\3\u0181\5\0\1\u0181\2\0"+ + "\5\u0181\3\0\1\u0181\1\0\1\u0181\1\0\1\u0181\6\0"+ + "\1\u0181\41\0\1\145\10\0\1\163\13\0\1\u0182\3\0"+ + "\2\u0182\2\161\56\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\20\22\1\u0183\5\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\6\22\1\u0184\17\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\5\22"+ + "\1\u0185\20\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\12\22\1\u0186\13\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\13\22\1\u0187\12\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\2\22\1\u0188\23\22\15\0\2\22\6\0\2\22"+ + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\4\22"+ + "\1\u0189\21\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\2\22\1\u018a\23\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\2\22\1\u018b\23\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\7\22"+ + "\1\u018c\3\0\26\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\7\22\1\u018d"+ + "\16\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\10\22\1\u018e\15\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\4\22\1\u018f\21\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\10\22\1\u0190\15\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\7\22\1\u0191\3\0\26\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\7\22\1\u0192\3\0\26\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0"+ + "\10\22\1\u0193\15\22\15\0\2\22\30\0\1\u0194\103\0"+ + "\1\u0195\1\0\1\u0195\3\0\3\u0195\5\0\1\u0195\2\0"+ + "\5\u0195\3\0\1\u0195\1\0\1\u0195\1\0\1\u0195\6\0"+ + "\1\u0195\41\0\1\145\10\0\1\163\13\0\1\u0196\3\0"+ + "\2\u0196\2\161\56\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\7\22\1\u0197\16\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\7\22"+ + "\1\u0198\3\0\26\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\7\22\1\u0199\3\0\26\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\4\22\1\u019a\21\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\7\22"+ + "\1\u019b\3\0\26\22\15\0\2\22\6\0\2\22\7\0"+ + "\3\22\3\0\4\22\4\0\10\22\3\0\4\22\1\u019c"+ + "\21\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\10\22\3\0\14\22\1\u019d\11\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\7\22\1\u019e\16\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\7\22\1\u019f"+ + "\3\0\26\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\u01a0\3\0\26\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\20\22\1\u01a1\5\22\15\0\2\22\27\0"+ + "\1\u01a2\104\0\1\u01a3\1\0\1\u01a3\3\0\3\u01a3\5\0"+ + "\1\u01a3\2\0\5\u01a3\3\0\1\u01a3\1\0\1\u01a3\1\0"+ + "\1\u01a3\6\0\1\u01a3\41\0\1\145\10\0\1\163\13\0"+ + "\1\u01a4\3\0\2\u01a4\2\161\56\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\7\22\1\u01a5\3\0\26\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\6\22\1\u01a6\17\22\15\0\2\22\6\0"+ + "\2\22\7\0\3\22\3\0\4\22\4\0\7\22\1\u01a7"+ + "\3\0\26\22\15\0\2\22\6\0\2\22\7\0\3\22"+ + "\3\0\4\22\4\0\10\22\3\0\10\22\1\u01a8\15\22"+ + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22"+ + "\4\0\10\22\3\0\13\22\1\u01a9\12\22\15\0\2\22"+ + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22"+ + "\3\0\13\22\1\u01aa\12\22\15\0\2\22\24\0\1\u01ab"+ + "\107\0\1\u01ac\1\0\1\u01ac\3\0\3\u01ac\5\0\1\u01ac"+ + "\2\0\5\u01ac\3\0\1\u01ac\1\0\1\u01ac\1\0\1\u01ac"+ + "\6\0\1\u01ac\41\0\1\145\10\0\1\163\13\0\1\u01ad"+ + "\3\0\2\u01ad\2\161\56\0\2\22\7\0\3\22\3\0"+ + "\4\22\4\0\3\22\1\u01ae\4\22\3\0\26\22\15\0"+ + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0"+ + "\10\22\3\0\5\22\1\u01af\20\22\15\0\2\22\10\0"+ + "\1\145\10\0\1\163\13\0\1\u01b0\3\0\2\u01b0\2\161"+ + "\60\0\1\145\10\0\1\163\13\0\1\u01b1\3\0\2\u01b1"+ + "\2\161\60\0\1\145\10\0\1\163\13\0\1\u01b2\3\0"+ + "\2\u01b2\2\161\60\0\1\145\10\0\1\163\13\0\1\u01b3"+ + "\3\0\2\u01b3\2\161\60\0\1\145\10\0\1\163\13\0"+ + "\1\u01b4\3\0\2\u01b4\2\161\60\0\1\145\10\0\1\163"+ + "\13\0\1\u01b5\3\0\2\u01b5\2\161\50\0"; - private static int[] zzUnpackRowMap() { - int[] result = new int[433]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; + private static int [] zzUnpackTrans() { + int [] result = new int[22946]; + int offset = 0; + offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); } + return j; + } - private static int zzUnpackRowMap(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ + /* error codes */ + private static final int ZZ_UNKNOWN_ERROR = 0; + private static final int ZZ_NO_MATCH = 1; + private static final int ZZ_PUSHBACK_2BIG = 2; - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; + /* error messages for the codes above */ + private static final String ZZ_ERROR_MSG[] = { + "Unkown internal scanner error", + "Error: could not match input", + "Error: pushback value was too large" + }; + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\13\0\1\11\1\1\1\11\13\1\3\11\1\1\2\11"+ + "\4\1\1\11\21\1\7\11\4\1\1\11\2\1\2\11"+ + "\3\1\1\11\2\1\1\11\1\1\1\11\1\1\1\11"+ + "\2\1\1\11\1\1\2\11\1\1\1\11\2\1\1\11"+ + "\2\1\1\11\1\1\1\0\2\11\1\1\1\11\1\1"+ + "\1\11\2\1\2\11\1\1\2\11\1\1\2\11\1\0"+ + "\3\1\1\0\11\1\2\11\44\1\11\11\1\1\1\11"+ + "\1\1\6\11\1\0\1\11\1\0\1\11\1\0\2\11"+ + "\1\0\1\1\5\0\1\1\1\0\1\11\2\1\1\11"+ + "\2\0\3\11\1\1\1\11\1\0\1\1\1\11\61\1"+ + "\1\11\1\0\3\11\1\0\1\11\2\0\1\1\2\11"+ + "\1\0\1\11\52\1\1\0\2\11\1\0\42\1\1\0"+ + "\33\1\1\0\23\1\1\0\15\1\1\0\10\1\2\11"+ + "\11\1"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[437]; + int offset = 0; + offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); } + return j; + } - /** - * The transition table of the DFA - */ - private static final int[] ZZ_TRANS = zzUnpackTrans(); + /** the input device */ + private java.io.Reader zzReader; - private static final String ZZ_TRANS_PACKED_0 - = "\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\14" - + "\1\23\1\24\1\17\1\25\1\26\1\27\1\30\2\22" - + "\1\31\1\14\1\32\1\33\4\22\1\34\1\35\1\36" - + "\1\37\1\40\2\22\1\41\2\31\1\22\1\42\1\43" - + "\1\14\1\44\1\45\1\46\1\47\1\22\1\50\1\51" - + "\1\52\1\53\1\54\1\55\1\56\1\57\1\22\1\60" - + "\1\22\1\61\2\22\1\62\1\63\1\64\1\65\1\66" - + "\1\67\1\70\1\71\1\72\1\73\1\74\1\75\1\76" - + "\1\77\1\100\1\101\2\0\1\22\1\102\1\103\1\104" - + "\30\102\1\105\12\102\1\106\46\102\1\107\1\103\1\104" - + "\31\107\1\105\11\107\1\106\46\107\1\14\1\110\1\111" - + "\1\112\1\113\5\14\1\112\2\14\1\114\3\115\4\14" - + "\4\115\5\14\3\115\2\14\2\115\3\14\26\115\2\14" - + "\1\116\11\14\2\0\2\14\1\0\1\14\1\0\27\14" - + "\1\117\44\14\1\120\11\14\2\0\2\14\1\110\1\111" - + "\1\112\6\14\1\112\3\14\3\121\2\14\1\122\1\14" - + "\4\121\5\14\3\121\2\14\2\121\3\14\26\121\2\14" - + "\1\123\11\14\2\0\2\14\1\0\1\14\1\0\27\14" - + "\1\124\44\14\1\125\11\14\2\0\1\14\1\126\1\110" - + "\1\111\1\0\25\126\1\127\60\126\2\0\1\126\1\130" - + "\1\110\1\111\1\0\10\130\1\131\75\130\2\0\1\130" - + "\1\126\1\110\1\111\1\0\5\126\1\132\66\126\1\133" - + "\11\126\2\0\1\126\1\134\1\103\1\104\43\134\1\135" - + "\1\136\45\134\117\0\1\16\115\0\1\17\6\0\1\17" - + "\106\0\1\137\1\140\24\0\1\141\114\0\1\142\70\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\26\22\15\0\2\22\10\0\1\143\1\144\7\0\1\145" - + "\13\0\1\145\3\0\2\145\33\0\1\146\27\0\1\147" - + "\4\0\3\150\4\0\4\150\1\0\1\151\3\0\3\150" - + "\2\0\2\150\3\0\26\150\2\0\1\152\46\0\1\153" - + "\76\0\1\154\15\0\1\155\77\0\1\156\14\0\1\157" - + "\100\0\1\160\106\0\1\145\10\0\1\31\13\0\1\31" - + "\3\0\2\31\2\161\102\0\1\162\72\0\1\145\10\0" - + "\1\163\13\0\1\164\2\165\1\0\1\166\1\167\2\161" - + "\56\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\2\22\1\170\3\22\1\171\2\22\1\172\1\173" - + "\13\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\1\22\1\174\6\22\3\0\2\22\1\175" - + "\11\22\1\176\11\22\15\0\2\22\32\0\1\177\12\0" - + "\1\200\55\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\1\22\1\201\24\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\7\22\1\202" - + "\3\0\26\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\5\22\1\203\20\22" - + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\2\22\1\204\3\22\1\205\5\22" - + "\1\206\11\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\7\22\1\207\3\0\10\22\1\210" - + "\1\22\1\211\2\22\1\212\10\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\22\22\1\213\3\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\7\22\1\214\3\0\2\22" - + "\1\215\7\22\1\216\13\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\1\22" - + "\1\217\14\22\1\220\1\22\1\221\5\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\3\22" - + "\1\222\4\22\3\0\5\22\1\223\1\22\1\224\11\22" - + "\1\225\4\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\5\22\1\226\1\22" - + "\1\227\16\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\7\22\1\230\3\0\6\22\1\231" - + "\11\22\1\232\5\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\11\22\1\233" - + "\4\22\1\234\7\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\1\22\1\235" - + "\1\236\7\22\1\237\13\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\2\22" - + "\1\240\3\22\1\241\17\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\7\22\1\242\3\0" - + "\26\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\7\22\1\243\16\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\2\22\1\244\23\22\15\0\2\22\32\0" - + "\1\245\52\0\1\246\41\0\1\247\53\0\1\250\40\0" - + "\1\251\114\0\1\252\62\0\1\102\2\0\30\102\1\0" - + "\12\102\1\0\46\102\2\0\1\104\112\0\1\253\3\0" - + "\27\253\1\254\1\255\1\256\2\253\1\257\1\256\1\260" - + "\3\253\1\261\1\253\1\262\1\263\5\253\1\264\1\265" - + "\31\253\2\0\1\253\1\107\2\0\31\107\1\0\11\107" - + "\1\0\46\107\2\0\1\111\115\0\1\112\6\0\1\112" - + "\117\0\1\266\107\0\1\267\3\0\1\267\1\0\5\267" - + "\2\0\4\267\1\0\1\270\2\0\10\267\3\0\26\267" - + "\17\0\1\271\2\0\30\271\1\272\61\271\10\0\1\273" - + "\3\0\1\273\1\0\5\273\2\0\4\273\1\0\1\274" - + "\2\0\10\273\3\0\26\273\34\0\1\275\77\0\1\276" - + "\2\0\30\276\1\277\1\300\60\276\31\0\1\301\77\0" - + "\1\302\104\0\1\303\6\0\1\304\2\0\3\305\2\0" - + "\1\306\1\0\4\305\5\0\3\305\2\0\2\305\3\0" - + "\26\305\2\0\1\307\14\0\1\134\2\0\43\134\2\0" - + "\45\134\1\253\3\0\34\253\1\257\5\253\1\261\1\253" - + "\1\262\1\263\5\253\1\264\1\265\31\253\2\0\1\310" - + "\1\137\1\311\1\312\112\137\5\313\1\314\107\313\10\0" - + "\1\315\125\0\1\145\13\0\1\145\3\0\2\145\2\161" - + "\102\0\1\316\72\0\1\150\3\0\1\150\1\0\5\150" - + "\2\0\4\150\4\0\10\150\3\0\26\150\51\0\1\317" - + "\77\0\1\320\14\0\1\321\76\0\1\322\4\0\1\323" - + "\13\0\1\323\3\0\2\323\2\0\1\322\101\0\1\324" - + "\72\0\1\145\10\0\1\163\13\0\1\163\3\0\2\163" - + "\2\161\60\0\1\145\10\0\1\163\13\0\1\164\3\0" - + "\1\166\1\167\2\161\67\0\1\325\1\0\1\325\3\0" - + "\3\325\5\0\1\326\2\0\5\325\3\0\1\325\1\0" - + "\1\325\1\0\1\325\6\0\1\325\41\0\1\145\10\0" - + "\1\163\13\0\1\167\3\0\2\167\2\161\60\0\1\145" - + "\10\0\1\163\13\0\1\327\3\0\2\327\2\161\56\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\14\22\1\330\11\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\1\22\1\331" - + "\24\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\7\22\1\332\16\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\7\22\1\333\16\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\10\22\1\334\15\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\4\22\1\335" - + "\21\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\5\22\1\336\20\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\7\22\1\337\3\0\26\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\10\22" - + "\1\340\15\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\5\22\1\341\2\22" - + "\1\342\15\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\7\22\1\343\16\22" - + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\2\22\1\344\23\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\10\22\1\345\15\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\2\22" - + "\1\346\23\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\17\22\1\347\6\22" - + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\11\22\1\350\14\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\7\22" - + "\1\351\3\0\26\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\15\22\1\352" - + "\10\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\21\22\1\353\4\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\14\22\1\354\11\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\12\22\1\355\5\22\1\356\5\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\1\22\1\357\7\22\1\360\14\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\17\22\1\361\6\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\5\22\1\362" - + "\2\22\1\363\15\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\17\22\1\364" - + "\6\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\7\22\1\365\3\0\26\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\13\22\1\366\12\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\3\22\1\367\4\22" - + "\3\0\14\22\1\370\11\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\7\22" - + "\1\371\16\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\10\22\1\372\15\22" - + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\11\22\1\373\14\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\6\22\1\374\2\22\1\375\14\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\4\22\1\376\21\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\1\377" - + "\25\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\1\22\1\u0100\24\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\11\22\1\u0101\14\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\10\22\1\u0102\15\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\3\22\1\u0103\4\22\3\0" - + "\26\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\25\22\1\u0104\15\0\2\22" - + "\35\0\1\260\3\0\2\260\107\0\1\u0105\3\0\2\u0105" - + "\52\0\1\u0106\2\0\30\u0106\1\277\1\0\60\u0106\1\300" - + "\2\0\30\300\1\u0107\61\300\15\0\1\u0108\114\0\1\u0109" - + "\115\0\3\u010a\4\0\4\u010a\5\0\3\u010a\2\0\2\u010a" - + "\3\0\26\u010a\2\0\1\u010b\30\0\1\u010c\7\0\1\u010d" - + "\100\0\1\305\3\0\1\305\1\0\5\305\2\0\4\305" - + "\4\0\10\305\3\0\26\305\35\0\3\u010e\4\0\4\u010e" - + "\5\0\3\u010e\2\0\2\u010e\3\0\26\u010e\2\0\1\u010f" - + "\63\0\1\u0110\47\0\1\312\112\0\5\313\1\u0111\107\313" - + "\4\0\1\312\1\314\141\0\1\u0112\103\0\1\323\13\0" - + "\1\323\3\0\2\323\71\0\1\u0113\1\0\1\u0113\3\0" - + "\3\u0113\5\0\1\u0113\2\0\5\u0113\3\0\1\u0113\1\0" - + "\1\u0113\1\0\1\u0113\6\0\1\u0113\41\0\1\145\10\0" - + "\1\163\13\0\1\u0114\3\0\2\u0114\2\161\56\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\5\22" - + "\1\u0115\20\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\2\22\1\u0116\23\22" - + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\4\22\1\u0117\21\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\7\22" - + "\1\u0118\3\0\26\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\16\22\1\u0119" - + "\7\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\7\22\1\u011a\3\0\26\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\2\22\1\u011b\23\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\12\22" - + "\1\u011c\13\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\7\22\1\u011d\3\0\26\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\4\22\1\u011e\21\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\5\22\1\u011f\2\22\1\u0120\15\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\5\22\1\u0121\20\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u0122" - + "\15\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\7\22\1\u0123\3\0\26\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\10\22\1\u0124\15\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\1\22" - + "\1\u0125\24\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\7\22\1\u0126\3\0\26\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\14\22\1\u0127\11\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\7\22\1\u0128" - + "\3\0\26\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\6\22\1\u0129\17\22" - + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\5\22\1\u012a\20\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\7\22" - + "\1\u012b\3\0\26\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\10\22\1\u012c" - + "\15\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\7\22\1\u012d\3\0\26\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\6\22\1\u012e\5\22\1\u012f\11\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\7\22" - + "\1\u0130\3\0\26\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\2\22\1\u0131" - + "\23\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\7\22\1\u0132\3\0\26\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\2\22\1\u0133\23\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\16\22" - + "\1\u0134\7\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\14\22\1\u0135\11\22" - + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\10\22\1\u0136\15\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\22\22\1\u0137\3\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\3\22" - + "\1\u0138\22\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\14\22\1\u0139\11\22" - + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\13\22\1\u013a\12\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\11\22\1\u013b\14\22\15\0\2\22\1\0\2\u013c" - + "\5\0\1\u010a\1\0\1\u013c\1\0\1\u010a\1\u013d\5\u010a" - + "\2\0\4\u010a\4\0\10\u010a\3\0\26\u010a\33\0\1\u013e" - + "\125\0\1\u013f\77\0\1\u010e\3\0\1\u010e\1\0\5\u010e" - + "\2\0\4\u010e\4\0\10\u010e\3\0\26\u010e\17\0\4\313" - + "\1\312\1\u0111\107\313\17\0\1\u0140\1\0\1\u0140\3\0" - + "\3\u0140\5\0\1\u0140\2\0\5\u0140\3\0\1\u0140\1\0" - + "\1\u0140\1\0\1\u0140\6\0\1\u0140\41\0\1\145\10\0" - + "\1\163\13\0\1\u0141\3\0\2\u0141\2\161\56\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\7\22\1\u0142\3\0" - + "\26\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\14\22\1\u0143\11\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\10\22\1\u0144\15\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\7\22\1\u0145\16\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\3\22\1\u0146" - + "\22\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\1\22\1\u0147\24\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\16\22\1\u0148\7\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\10\22\1\u0149\15\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\11\22\1\u014a" - + "\14\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\5\22\1\u014b\20\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\11\22\1\u014c\14\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\1\22\1\u014d\24\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\4\22\1\u014e" - + "\21\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\1\22\1\u014f\24\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\5\22\1\u0150\20\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\15\22\1\u0151\10\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\6\22\1\u0152" - + "\17\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\2\22\1\u0153\23\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\1\22\1\u0154\24\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\1\22\1\u0155\24\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\7\22\1\u0156\3\0\26\22" - + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22" - + "\4\0\3\22\1\u0157\4\22\3\0\26\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\12\22\1\u0158\13\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\10\22" - + "\1\u0159\15\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\21\22\1\u015a\4\22" - + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22" - + "\4\0\7\22\1\u015b\3\0\26\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\7\22\1\u015c" - + "\3\0\26\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\2\22\1\u015d\23\22" - + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\2\22\1\u015e\23\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\11\22\1\u015f\14\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\7\22" - + "\1\u0160\16\22\15\0\2\22\1\0\2\u013c\7\0\1\u013c" - + "\2\0\1\u013d\125\0\1\u0161\105\0\1\u0162\1\0\1\u0162" - + "\3\0\3\u0162\5\0\1\u0162\2\0\5\u0162\3\0\1\u0162" - + "\1\0\1\u0162\1\0\1\u0162\6\0\1\u0162\41\0\1\145" - + "\10\0\1\163\13\0\1\u0163\3\0\2\u0163\2\161\56\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\14\22\1\u0164\11\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\11\22\1\u0165" - + "\14\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\13\22\1\u0166\12\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\7\22\1\u0167\16\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\7\22\1\u0168\16\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\4\22\1\u0169" - + "\21\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\16\22\1\u016a\7\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\11\22\1\u016b\14\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\17\22\1\u016c\6\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\3\22\1\u016d\4\22\3\0" - + "\26\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\7\22\1\u016e\16\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\3\22\1\u016f\4\22\3\0\7\22\1\u0170\16\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\10\22\1\u0171\15\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\21\22\1\u0172\4\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\11\22\1\u0173" - + "\14\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\14\22\1\u0174\11\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\7\22\1\u0175\3\0\26\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\11\22" - + "\1\u0176\14\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\4\22\1\u0177\21\22" - + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\10\22\1\u0178\15\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\23\22\1\u0179\2\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\4\22" - + "\1\u017a\21\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\11\22\1\u017b\14\22" - + "\15\0\2\22\27\0\1\u017c\104\0\1\u017d\1\0\1\u017d" - + "\3\0\3\u017d\5\0\1\u017d\2\0\5\u017d\3\0\1\u017d" - + "\1\0\1\u017d\1\0\1\u017d\6\0\1\u017d\41\0\1\145" - + "\10\0\1\163\13\0\1\u017e\3\0\2\u017e\2\161\56\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\20\22\1\u017f\5\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\6\22\1\u0180" - + "\17\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\5\22\1\u0181\20\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\12\22\1\u0182\13\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\13\22\1\u0183\12\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\2\22\1\u0184" - + "\23\22\15\0\2\22\6\0\2\22\7\0\3\22\3\0" - + "\4\22\4\0\10\22\3\0\4\22\1\u0185\21\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\2\22\1\u0186\23\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\2\22\1\u0187\23\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\7\22\1\u0188\3\0\26\22" - + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\7\22\1\u0189\16\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\10\22\1\u018a\15\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\4\22" - + "\1\u018b\21\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\10\22\1\u018c\15\22" - + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22" - + "\4\0\7\22\1\u018d\3\0\26\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\7\22\1\u018e" - + "\3\0\26\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\10\22\3\0\10\22\1\u018f\15\22" - + "\15\0\2\22\30\0\1\u0190\103\0\1\u0191\1\0\1\u0191" - + "\3\0\3\u0191\5\0\1\u0191\2\0\5\u0191\3\0\1\u0191" - + "\1\0\1\u0191\1\0\1\u0191\6\0\1\u0191\41\0\1\145" - + "\10\0\1\163\13\0\1\u0192\3\0\2\u0192\2\161\56\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\7\22\1\u0193\16\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\7\22\1\u0194\3\0\26\22" - + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22" - + "\4\0\7\22\1\u0195\3\0\26\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\4\22\1\u0196\21\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\7\22\1\u0197\3\0\26\22" - + "\15\0\2\22\6\0\2\22\7\0\3\22\3\0\4\22" - + "\4\0\10\22\3\0\4\22\1\u0198\21\22\15\0\2\22" - + "\6\0\2\22\7\0\3\22\3\0\4\22\4\0\10\22" - + "\3\0\14\22\1\u0199\11\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\7\22" - + "\1\u019a\16\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\7\22\1\u019b\3\0\26\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\7\22\1\u019c\3\0\26\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\20\22" - + "\1\u019d\5\22\15\0\2\22\27\0\1\u019e\104\0\1\u019f" - + "\1\0\1\u019f\3\0\3\u019f\5\0\1\u019f\2\0\5\u019f" - + "\3\0\1\u019f\1\0\1\u019f\1\0\1\u019f\6\0\1\u019f" - + "\41\0\1\145\10\0\1\163\13\0\1\u01a0\3\0\2\u01a0" - + "\2\161\56\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\7\22\1\u01a1\3\0\26\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\6\22" - + "\1\u01a2\17\22\15\0\2\22\6\0\2\22\7\0\3\22" - + "\3\0\4\22\4\0\7\22\1\u01a3\3\0\26\22\15\0" - + "\2\22\6\0\2\22\7\0\3\22\3\0\4\22\4\0" - + "\10\22\3\0\10\22\1\u01a4\15\22\15\0\2\22\6\0" - + "\2\22\7\0\3\22\3\0\4\22\4\0\10\22\3\0" - + "\13\22\1\u01a5\12\22\15\0\2\22\6\0\2\22\7\0" - + "\3\22\3\0\4\22\4\0\10\22\3\0\13\22\1\u01a6" - + "\12\22\15\0\2\22\24\0\1\u01a7\107\0\1\u01a8\1\0" - + "\1\u01a8\3\0\3\u01a8\5\0\1\u01a8\2\0\5\u01a8\3\0" - + "\1\u01a8\1\0\1\u01a8\1\0\1\u01a8\6\0\1\u01a8\41\0" - + "\1\145\10\0\1\163\13\0\1\u01a9\3\0\2\u01a9\2\161" - + "\56\0\2\22\7\0\3\22\3\0\4\22\4\0\3\22" - + "\1\u01aa\4\22\3\0\26\22\15\0\2\22\6\0\2\22" - + "\7\0\3\22\3\0\4\22\4\0\10\22\3\0\5\22" - + "\1\u01ab\20\22\15\0\2\22\10\0\1\145\10\0\1\163" - + "\13\0\1\u01ac\3\0\2\u01ac\2\161\60\0\1\145\10\0" - + "\1\163\13\0\1\u01ad\3\0\2\u01ad\2\161\60\0\1\145" - + "\10\0\1\163\13\0\1\u01ae\3\0\2\u01ae\2\161\60\0" - + "\1\145\10\0\1\163\13\0\1\u01af\3\0\2\u01af\2\161" - + "\60\0\1\145\10\0\1\163\13\0\1\u01b0\3\0\2\u01b0" - + "\2\161\60\0\1\145\10\0\1\163\13\0\1\u01b1\3\0" - + "\2\u01b1\2\161\50\0"; + /** the current state of the DFA */ + private int zzState; - private static int[] zzUnpackTrans() { - int[] result = new int[22715]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; - private static int zzUnpackTrans(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; - int j = offset; /* index in unpacked array */ + /** the textposition at the last accepting state */ + private int zzMarkedPos; - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do { - result[j++] = value; - } while (--count > 0); - } - return j; - } + /** the current text position in the buffer */ + private int zzCurrentPos; + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; - /* error codes */ - private static final int ZZ_UNKNOWN_ERROR = 0; - private static final int ZZ_NO_MATCH = 1; - private static final int ZZ_PUSHBACK_2BIG = 2; + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; - /* error messages for the codes above */ - private static final String ZZ_ERROR_MSG[] = { - "Unkown internal scanner error", - "Error: could not match input", - "Error: pushback value was too large" - }; + /** number of newlines encountered up to the start of the matched text */ + private int yyline; - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int[] ZZ_ATTRIBUTE = zzUnpackAttribute(); + /** the number of characters up to the start of the matched text */ + private int yychar; - private static final String ZZ_ATTRIBUTE_PACKED_0 - = "\13\0\1\11\1\1\1\11\13\1\3\11\1\1\2\11" - + "\4\1\1\11\21\1\7\11\4\1\1\11\2\1\2\11" - + "\3\1\1\11\2\1\1\11\1\1\1\11\1\1\1\11" - + "\2\1\1\11\1\1\2\11\1\1\1\11\2\1\1\11" - + "\2\1\1\11\1\1\1\0\2\11\1\1\1\11\1\1" - + "\1\11\2\1\2\11\1\1\2\11\1\1\2\11\1\0" - + "\3\1\1\0\11\1\2\11\44\1\11\11\1\1\1\11" - + "\1\1\6\11\1\0\1\11\1\0\1\11\1\0\2\11" - + "\1\0\1\1\5\0\1\1\1\0\1\11\2\1\1\11" - + "\2\0\3\11\1\1\1\11\1\0\1\1\1\11\60\1" - + "\1\11\1\0\3\11\1\0\1\11\2\0\1\1\2\11" - + "\1\0\1\11\51\1\1\0\2\11\1\0\41\1\1\0" - + "\32\1\1\0\23\1\1\0\15\1\1\0\10\1\2\11" - + "\11\1"; + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; - private static int[] zzUnpackAttribute() { - int[] result = new int[433]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } + /** + * zzAtBOL == true <=> the scanner is currently at the beginning of a line + */ + private boolean zzAtBOL = true; - private static int zzUnpackAttribute(String packed, int offset, int[] result) { - int i = 0; /* index in packed string */ + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; - int j = offset; /* index in unpacked array */ + /** denotes if the user-EOF-code has already been executed */ + private boolean zzEOFDone; + + /** + * The number of occupied positions in zzBuffer beyond zzEndRead. + * When a lead/high surrogate has been read from the input stream + * into the final zzBuffer position, this will have a value of 1; + * otherwise, it will have a value of 0. + */ + private int zzFinalHighSurrogate = 0; - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do { - result[j++] = value; - } while (--count > 0); - } - return j; - } + /* user code: */ - /** - * the input device - */ - private java.io.Reader zzReader; - - /** - * the current state of the DFA - */ - private int zzState; - - /** - * the current lexical state - */ - private int zzLexicalState = YYINITIAL; - - /** - * this buffer contains the current text to be matched and is the source of - * the yytext() string - */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; - - /** - * the textposition at the last accepting state - */ - private int zzMarkedPos; - - /** - * the current text position in the buffer - */ - private int zzCurrentPos; - - /** - * startRead marks the beginning of the yytext() string in the buffer - */ - private int zzStartRead; - - /** - * endRead marks the last character in the buffer, that has been read from - * input - */ - private int zzEndRead; - - /** - * number of newlines encountered up to the start of the matched text - */ - private int yyline; - - /** - * the number of characters up to the start of the matched text - */ - private int yychar; - - /** - * the number of characters from the last newline up to the start of the - * matched text - */ - private int yycolumn; - - /** - * zzAtBOL == true <=> the scanner is currently at the beginning of a line - */ - private boolean zzAtBOL = true; - - /** - * zzAtEOF == true <=> the scanner is at the EOF - */ - private boolean zzAtEOF; - - /** - * denotes if the user-EOF-code has already been executed - */ - private boolean zzEOFDone; - - /* user code: */ private String sourceCode; - public ActionScriptLexer(String sourceCode) { + public ActionScriptLexer(String sourceCode){ this(new StringReader(sourceCode)); - this.sourceCode = sourceCode; + this.sourceCode = sourceCode; } - public void yypushbackstr(String s, int state) { - sourceCode = s + sourceCode.substring(yychar + yylength()); + public void yypushbackstr(String s, int state) + { + sourceCode=s+sourceCode.substring(yychar+yylength()); yyreset(new StringReader(sourceCode)); yybegin(state); } - public void yypushbackstr(String s) { - yypushbackstr(s, YYINITIAL); + public void yypushbackstr(String s) + { + yypushbackstr(s,YYINITIAL); } StringBuffer string = new StringBuffer(); - private static String xmlTagName = ""; + private static String xmlTagName=""; public int yychar() { return yychar; } - private Stack pushedBack = new Stack<>(); + private Stack pushedBack=new Stack(); public int yyline() { - return yyline + 1; + return yyline+1; } - private List listeners = new ArrayList<>(); + private List listeners=new ArrayList<>(); - public void addListener(LexListener listener) { + public void addListener(LexListener listener){ listeners.add(listener); } - public void removeListener(LexListener listener) { + public void removeListener(LexListener listener){ listeners.remove(listener); } - public void informListenersLex(ParsedSymbol s) { - for (LexListener l : listeners) { + public void informListenersLex(ParsedSymbol s){ + for(LexListener l:listeners){ l.onLex(s); } } - public void informListenersPushBack(ParsedSymbol s) { - for (LexListener l : listeners) { + public void informListenersPushBack(ParsedSymbol s){ + for(LexListener l:listeners){ l.onPushBack(s); } } @@ -996,1262 +1003,1093 @@ public final class ActionScriptLexer { informListenersPushBack(symb); } ParsedSymbol last; - - public ParsedSymbol lex() throws java.io.IOException, AVM2ParseException { - ParsedSymbol ret = null; - if (!pushedBack.isEmpty()) { + public ParsedSymbol lex() throws java.io.IOException, AVM2ParseException{ + ParsedSymbol ret=null; + if(!pushedBack.isEmpty()){ ret = last = pushedBack.pop(); - } else { + }else{ ret = last = yylex(); } informListenersLex(ret); return ret; } - /** - * 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 ActionScriptLexer(java.io.Reader in) { - this.zzReader = in; + + + /** + * Creates a new scanner + * + * @param in the java.io.Reader to read input from. + */ + public ActionScriptLexer(java.io.Reader in) { + this.zzReader = in; + } + + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x110000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 2928) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Refills the input buffer. + * + * @return false, iff there was new input. + * + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill() throws java.io.IOException { + + /* first: make room (if you can) */ + if (zzStartRead > 0) { + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead-zzStartRead); + + /* translate stored positions */ + zzEndRead-= zzStartRead; + zzCurrentPos-= zzStartRead; + zzMarkedPos-= zzStartRead; + zzStartRead = 0; } - /** - * 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 ActionScriptLexer(java.io.InputStream in) { - this(new java.io.InputStreamReader(in, java.nio.charset.Charset.forName("UTF-8"))); + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) { + /* if not: blow it up */ + char newBuffer[] = new char[zzBuffer.length*2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + zzEndRead += zzFinalHighSurrogate; + zzFinalHighSurrogate = 0; } - /** - * Unpacks the compressed character translation table. - * - * @param packed the packed character translation table - * @return the unpacked character translation table - */ - private static char[] zzUnpackCMap(String packed) { - char[] map = new char[0x10000]; - int i = 0; /* index in packed string */ + /* fill the buffer with new input */ + int requested = zzBuffer.length - zzEndRead; + int totalRead = 0; + while (totalRead < requested) { + int numRead = zzReader.read(zzBuffer, zzEndRead + totalRead, requested - totalRead); + if (numRead == -1) { + break; + } + totalRead += numRead; + } - int j = 0; /* index in unpacked array */ - - while (i < 2288) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do { - map[j++] = value; - } while (--count > 0); + if (totalRead > 0) { + zzEndRead += totalRead; + if (totalRead == requested) { /* possibly more input available */ + if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) { + --zzEndRead; + zzFinalHighSurrogate = 1; } - return map; + } + return false; } - /** - * Refills the input buffer. - * - * @return false, iff there was new input. - * - * @exception java.io.IOException if any I/O-Error occurs - */ - private boolean zzRefill() throws java.io.IOException { + // totalRead = 0: End of stream + return true; + } - /* first: make room (if you can) */ - if (zzStartRead > 0) { - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead - zzStartRead); + + /** + * Closes the input stream. + */ + public final void yyclose() throws java.io.IOException { + zzAtEOF = true; /* indicate end of file */ + zzEndRead = zzStartRead; /* invalidate buffer */ - /* translate stored positions */ - zzEndRead -= zzStartRead; - zzCurrentPos -= zzStartRead; - zzMarkedPos -= zzStartRead; - zzStartRead = 0; - } + if (zzReader != null) + zzReader.close(); + } - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length) { - /* if not: blow it up */ - char newBuffer[] = new char[zzCurrentPos * 2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; - } - /* finally: fill the buffer with new input */ - int numRead = zzReader.read(zzBuffer, zzEndRead, - zzBuffer.length - zzEndRead); + /** + * Resets the scanner to read from a new input stream. + * Does not close the old reader. + * + * All internal variables are reset, the old input stream + * cannot be reused (internal buffer is discarded and lost). + * Lexical state is set to ZZ_INITIAL. + * + * Internal scan buffer is resized down to its initial length, if it has grown. + * + * @param reader the new input stream + */ + public final void yyreset(java.io.Reader reader) { + zzReader = reader; + zzAtBOL = true; + zzAtEOF = false; + zzEOFDone = false; + zzEndRead = zzStartRead = 0; + zzCurrentPos = zzMarkedPos = 0; + zzFinalHighSurrogate = 0; + yyline = yychar = yycolumn = 0; + zzLexicalState = YYINITIAL; + if (zzBuffer.length > ZZ_BUFFERSIZE) + zzBuffer = new char[ZZ_BUFFERSIZE]; + } - if (numRead > 0) { - zzEndRead += numRead; - return false; - } - // unlikely but not impossible: read 0 characters, but not at end of stream - if (numRead == 0) { - int c = zzReader.read(); - if (c == -1) { - return true; - } else { - zzBuffer[zzEndRead++] = (char) c; - return false; - } - } - // numRead < 0 - return true; + /** + * Returns the current lexical state. + */ + public final int yystate() { + return zzLexicalState; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Returns the character at position pos from the + * matched text. + * + * It is equivalent to yytext().charAt(pos), but faster + * + * @param pos the position of the character to fetch. + * A value from 0 to yylength()-1. + * + * @return the character at position pos + */ + public final char yycharat(int pos) { + return zzBuffer[zzStartRead+pos]; + } + + + /** + * Returns the length of the matched text region. + */ + public final int yylength() { + return zzMarkedPos-zzStartRead; + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param errorCode the code of the errormessage to display + */ + private void zzScanError(int errorCode) { + String message; + try { + message = ZZ_ERROR_MSG[errorCode]; + } + catch (ArrayIndexOutOfBoundsException e) { + message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; } - /** - * Closes the input stream. - * - * @throws java.io.IOException - */ - public final void yyclose() throws java.io.IOException { - zzAtEOF = true; /* indicate end of file */ + throw new Error(message); + } - zzEndRead = zzStartRead; /* invalidate buffer */ - if (zzReader != null) { - zzReader.close(); - } - } + /** + * Pushes the specified amount of characters back into the input stream. + * + * They will be read again by then next call of the scanning method + * + * @param number the number of characters to be read again. + * This number must not be greater than yylength()! + */ + public void yypushback(int number) { + if ( number > yylength() ) + zzScanError(ZZ_PUSHBACK_2BIG); - /** - * Resets the scanner to read from a new input stream. Does not close the - * old reader. - * - * All internal variables are reset, the old input stream - * cannot be reused (internal buffer is discarded and lost). Lexical - * state is set to ZZ_INITIAL. - * - * Internal scan buffer is resized down to its initial length, if it has - * grown. - * - * @param reader the new input stream - */ - public final void yyreset(java.io.Reader reader) { - zzReader = reader; - zzAtBOL = true; - zzAtEOF = false; - zzEOFDone = false; - zzEndRead = zzStartRead = 0; - zzCurrentPos = zzMarkedPos = 0; - yyline = yychar = yycolumn = 0; - zzLexicalState = YYINITIAL; - if (zzBuffer.length > ZZ_BUFFERSIZE) { - zzBuffer = new char[ZZ_BUFFERSIZE]; - } - } + zzMarkedPos -= number; + } - /** - * Returns the current lexical state. - * - * @return - */ - public final int yystate() { - return zzLexicalState; - } - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public ParsedSymbol yylex() throws java.io.IOException, AVM2ParseException { + int zzInput; + int zzAction; - /** - * Returns the text matched by the current regular expression. - * - * @return - */ - public final String yytext() { - return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead); - } + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; - /** - * Returns the character at position pos from the matched text. - * - * It is equivalent to yytext().charAt(pos), but faster - * - * @param pos the position of the character to fetch. A value from 0 to - * yylength()-1. - * - * @return the character at position pos - */ - public final char yycharat(int pos) { - return zzBuffer[zzStartRead + pos]; - } + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; - /** - * Returns the length of the matched text region. - * - * @return - */ - public final int yylength() { - return zzMarkedPos - zzStartRead; - } + while (true) { + zzMarkedPosL = zzMarkedPos; - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of yypushback(int) and - * a match-all fallback rule) this method will only be called with things - * that "Can't Possibly Happen". If this method is called, something is - * seriously wrong (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done in error - * fallback rules. - * - * @param errorCode the code of the errormessage to display - */ - private void zzScanError(int errorCode) { - String message; - try { - message = ZZ_ERROR_MSG[errorCode]; - } catch (ArrayIndexOutOfBoundsException e) { - message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR]; - } + yychar+= zzMarkedPosL-zzStartRead; - throw new Error(message); - } + zzAction = -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()! - */ - public void yypushback(int number) { - if (number > yylength()) { - zzScanError(ZZ_PUSHBACK_2BIG); - } + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + + zzState = ZZ_LEXSTATE[zzLexicalState]; - zzMarkedPos -= number; - } + // set up zzAction for empty match case: + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + } - /** - * Resumes scanning until the next regular expression is matched, the end of - * input is encountered or an I/O-Error occurs. - * - * @return the next token - * @exception java.io.IOException if any I/O-Error occurs - * @throws com.jpexs.decompiler.flash.abc.avm2.parser.AVM2ParseException - */ - public ParsedSymbol yylex() throws java.io.IOException, AVM2ParseException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char[] zzBufferL = zzBuffer; - char[] zzCMapL = ZZ_CMAP; - - int[] zzTransL = ZZ_TRANS; - int[] zzRowMapL = ZZ_ROWMAP; - int[] zzAttrL = ZZ_ATTRIBUTE; + zzForAction: { while (true) { - zzMarkedPosL = zzMarkedPos; - - yychar += zzMarkedPosL - zzStartRead; - - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - - zzState = ZZ_LEXSTATE[zzLexicalState]; - - // set up zzAction for empty match case: - int zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; + + if (zzCurrentPosL < zzEndReadL) { + zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzCurrentPosL += Character.charCount(zzInput); + } + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; } - - zzForAction: - { - while (true) { - - if (zzCurrentPosL < zzEndReadL) { - zzInput = zzBufferL[zzCurrentPosL++]; - } else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput]]; - if (zzNext == -1) { - break zzForAction; - } - zzState = zzNext; - - zzAttributes = zzAttrL[zzState]; - if ((zzAttributes & 1) == 1) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ((zzAttributes & 8) == 8) { - break zzForAction; - } - } - - } + else { + zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL); + zzCurrentPosL += Character.charCount(zzInput); } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; - // store back cached position - zzMarkedPos = zzMarkedPosL; + zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 1: { - } - case 161: - break; - case 2: { - yyline++; - } - case 162: - break; - case 3: { /*ignore*/ - - } - case 163: - break; - case 4: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DIVIDE, yytext()); - } - case 164: - break; - case 5: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MULTIPLY, yytext()); - } - case 165: - break; - case 6: { - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, yytext()); - } - case 166: - break; - case 7: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DOT, yytext()); - } - case 167: - break; - case 8: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_THAN, yytext()); - } - case 168: - break; - case 9: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT, yytext()); - } - case 169: - break; - case 10: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MINUS, yytext()); - } - case 170: - break; - case 11: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_THAN, yytext()); - } - case 171: - break; - case 12: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COLON, yytext()); - } - case 172: - break; - case 13: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong((yytext()))); - } - case 173: - break; - case 14: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TERNAR, yytext()); - } - case 174: - break; - case 15: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_OPEN, yytext()); - } - case 175: - break; - case 16: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BRACKET_CLOSE, yytext()); - } - case 176: - break; - case 17: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN, yytext()); - } - case 177: - break; - case 18: { - string.setLength(0); - yybegin(STRING); - } - case 178: - break; - case 19: { - string.setLength(0); - yybegin(CHARLITERAL); - } - case 179: - break; - case 20: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PLUS, yytext()); - } - case 180: - break; - case 21: { - string.setLength(0); - yybegin(OIDENTIFIER); - } - case 181: - break; - case 22: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_OPEN, yytext()); - } - case 182: - break; - case 23: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.PARENT_CLOSE, yytext()); - } - case 183: - break; - case 24: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_OPEN, yytext()); - } - case 184: - break; - case 25: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.CURLY_CLOSE, yytext()); - } - case 185: - break; - case 26: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SEMICOLON, yytext()); - } - case 186: - break; - case 27: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.COMMA, yytext()); - } - case 187: - break; - case 28: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEGATE, yytext()); - } - case 188: - break; - case 29: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITAND, yytext()); - } - case 189: - break; - case 30: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.BITOR, yytext()); - } - case 190: - break; - case 31: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.XOR, yytext()); - } - case 191: - break; - case 32: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.MODULO, yytext()); - } - case 192: - break; - case 33: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ATTRIBUTE, yytext()); - } - case 193: - break; - case 34: { - string.append(yytext()); - } - case 194: - break; - case 35: { - yybegin(YYINITIAL); - yyline++; - } - case 195: - break; - case 36: { - yybegin(YYINITIAL); - // length also includes the trailing quote - return new ParsedSymbol(SymbolGroup.STRING, SymbolType.STRING, string.toString()); - } - case 196: - break; - case 37: { - string.append(yytext()); - yyline++; - } - case 197: - break; - case 38: { - yybegin(XML); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_END, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 198: - break; - case 39: { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 199: - break; - case 40: { - yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRVALVAR_BEGIN, yytext()); - } - case 200: - break; - case 41: { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRATTRNAMEVAR_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 201: - break; - case 42: { - yybegin(YYINITIAL); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRATTRVALVAR_BEGIN, yytext()); - } - case 202: - break; - case 43: { - string.append(yytext()); - } - case 203: - break; - case 44: { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_VAR_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 204: - break; - case 45: { - yybegin(YYINITIAL); - // length also includes the trailing quote - return new ParsedSymbol(SymbolGroup.IDENTIFIER, SymbolType.IDENTIFIER, string.toString()); - } - case 205: - break; - case 46: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_DIVIDE, yytext()); - } - case 206: - break; - case 47: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MULTIPLY, yytext()); - } - case 207: - break; - case 48: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DESCENDANTS, yytext()); - } - case 208: - break; - case 49: { - return new ParsedSymbol(SymbolGroup.TYPENAME, SymbolType.TYPENAME, yytext()); - } - case 209: - break; - case 50: { - return new ParsedSymbol(SymbolGroup.DOUBLE, SymbolType.DOUBLE, Double.parseDouble((yytext()))); - } - case 210: - break; - case 51: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.FILTER, yytext()); - } - case 211: - break; - case 52: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_LEFT, yytext()); - } - case 212: - break; - case 53: { - yybegin(XMLOPENTAG); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext()); - } - case 213: - break; - case 54: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.LOWER_EQUAL, yytext()); - } - case 214: - break; - case 55: { - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext()); - } - case 215: - break; - case 56: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NOT_EQUAL, yytext()); - } - case 216: - break; - case 57: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DECREMENT, yytext()); - } - case 217: - break; - case 58: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MINUS, yytext()); - } - case 218: - break; - case 59: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.SHIFT_RIGHT, yytext()); - } - case 219: - break; - case 60: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.GREATER_EQUAL, yytext()); - } - case 220: - break; - case 61: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NAMESPACE_OP, yytext()); - } - case 221: - break; - case 62: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.EQUALS, yytext()); - } - case 222: - break; - case 63: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong(yytext(), 8)); - } - case 223: - break; - case 64: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_PLUS, yytext()); - } - case 224: - break; - case 65: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INCREMENT, yytext()); - } - case 225: - break; - case 66: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AS, yytext()); - } - case 226: - break; - case 67: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IF, yytext()); - } - case 227: - break; - case 68: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.IS, yytext()); - } - case 228: - break; - case 69: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IN, yytext()); - } - case 229: - break; - case 70: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DO, yytext()); - } - case 230: - break; - case 71: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITAND, yytext()); - } - case 231: - break; - case 72: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.AND, yytext()); - } - case 232: - break; - case 73: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_BITOR, yytext()); - } - case 233: - break; - case 74: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.OR, yytext()); - } - case 234: - break; - case 75: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_XOR, yytext()); - } - case 235: - break; - case 76: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_MODULO, yytext()); - } - case 236: - break; - case 77: { - throw new AVM2ParseException("Illegal escape sequence \"" + yytext() + "\"", yyline + 1); - } - case 237: - break; - case 78: { - string.append('\"'); - } - case 238: - break; - case 79: { - string.append('\''); - } - case 239: - break; - case 80: { - char val = (char) Integer.parseInt(yytext().substring(1), 8); - string.append(val); - } - case 240: - break; - case 81: { - string.append('\f'); - } - case 241: - break; - case 82: { - string.append('\\'); - } - case 242: - break; - case 83: { - string.append('\b'); - } - case 243: - break; - case 84: { - string.append('\r'); - } - case 244: - break; - case 85: { - string.append('\n'); - } - case 245: - break; - case 86: { - string.append('\t'); - } - case 246: - break; - case 87: { - yybegin(XML); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTFINISHTAG_END, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 247: - break; - case 88: { - yybegin(XMLOPENTAGATTRIB); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 248: - break; - case 89: { - yybegin(XMLOPENTAG); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext()); - } - case 249: - break; - case 90: { - yybegin(XMLINSTRATTRIB); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTENAME, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 250: - break; - case 91: { - yybegin(XML); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTR_END, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 251: - break; - case 92: { - yybegin(XMLINSTROPENTAG); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_ATTRIBUTEVALUE, yytext()); - } - case 252: - break; - case 93: { - yybegin(XMLOPENTAG); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTTAG_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 253: - break; - case 94: { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_STARTVARTAG_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 254: - break; - case 95: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.REST, yytext()); - } - case 255: - break; - case 96: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_LEFT, yytext()); - } - case 256: - break; - case 97: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_NOT_EQUAL, yytext()); - } - case 257: - break; - case 98: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.USHIFT_RIGHT, yytext()); - } - case 258: - break; - case 99: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_SHIFT_RIGHT, yytext()); - } - case 259: - break; - case 100: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.STRICT_EQUALS, yytext()); - } - case 260: - break; - case 101: { - return new ParsedSymbol(SymbolGroup.INTEGER, SymbolType.INTEGER, Long.parseLong(yytext().substring(2), 16)); - } - case 261: - break; - case 102: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FOR, yytext()); - } - case 262: - break; - case 103: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SET, yytext()); - } - case 263: - break; - case 104: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.NEW, yytext()); - } - case 264: - break; - case 105: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRY, yytext()); - } - case 265: - break; - case 106: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.USE, yytext()); - } - case 266: - break; - case 107: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.VAR, yytext()); - } - case 267: - break; - case 108: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.GET, yytext()); - } - case 268: - break; - case 109: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NAN, yytext()); - } - case 269: - break; - case 110: { - string.append(yytext()); - yybegin(XML); - String ret = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_CDATA, ret); - } - case 270: - break; - case 111: { - string.append(yytext()); - yybegin(XML); - String ret = string.toString(); - string.setLength(0); - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_COMMENT, ret); - } - case 271: - break; - case 112: { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHVARTAG_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 272: - break; - case 113: { - yybegin(XMLINSTROPENTAG); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTR_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 273: - break; - case 114: { - yybegin(YYINITIAL); - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_INSTRVARTAG_BEGIN, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 274: - break; - case 115: { - string.append('\u00A7'); - } - case 275: - break; - case 116: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.ASSIGN_USHIFT_RIGHT, yytext()); - } - case 276: - break; - case 117: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EACH, yytext()); - } - case 277: - break; - case 118: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.ELSE, yytext()); - } - case 278: - break; - case 119: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CASE, yytext()); - } - case 279: - break; - case 120: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.NULL, yytext()); - } - case 280: - break; - case 121: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.TRUE, yytext()); - } - case 281: - break; - case 122: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THIS, yytext()); - } - case 282: - break; - case 123: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WITH, yytext()); - } - case 283: - break; - case 124: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.VOID, yytext()); - } - case 284: - break; - case 125: { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_FINISHTAG, yytext())); - if (string.length() > 0) { - pushback(new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, string.toString())); - string.setLength(0); - } - return lex(); - } - case 285: - break; - case 126: { - String ret = string.toString(); - string.setLength(0); - string.append(yytext()); - yybegin(XMLCOMMENT); - if (!ret.isEmpty()) { - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret); - } - } - case 286: - break; - case 127: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FALSE, yytext()); - } - case 287: - break; - case 128: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINAL, yytext()); - } - case 288: - break; - case 129: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.BREAK, yytext()); - } - case 289: - break; - case 130: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CATCH, yytext()); - } - case 290: - break; - case 131: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONST, yytext()); - } - case 291: - break; - case 132: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CLASS, yytext()); - } - case 292: - break; - case 133: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SUPER, yytext()); - } - case 293: - break; - case 134: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.THROW, yytext()); - } - case 294: - break; - case 135: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.WHILE, yytext()); - } - case 295: - break; - case 136: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.RETURN, yytext()); - } - case 296: - break; - case 137: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.STATIC, yytext()); - } - case 297: - break; - case 138: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.SWITCH, yytext()); - } - case 298: - break; - case 139: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.TYPEOF, yytext()); - } - case 299: - break; - case 140: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPORT, yytext()); - } - case 300: - break; - case 141: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.DELETE, yytext()); - } - case 301: - break; - case 142: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PUBLIC, yytext()); - } - case 302: - break; - case 143: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FINALLY, yytext()); - } - case 303: - break; - case 144: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.EXTENDS, yytext()); - } - case 304: - break; - case 145: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DEFAULT, yytext()); - } - case 305: - break; - case 146: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.DYNAMIC, yytext()); - } - case 306: - break; - case 147: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PRIVATE, yytext()); - } - case 307: - break; - case 148: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PACKAGE, yytext()); - } - case 308: - break; - case 149: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.FUNCTION, yytext()); - } - case 309: - break; - case 150: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.CONTINUE, yytext()); - } - case 310: - break; - case 151: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.OVERRIDE, yytext()); - } - case 311: - break; - case 152: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERNAL, yytext()); - } - case 312: - break; - case 153: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.INFINITY, yytext()); - } - case 313: - break; - case 154: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.NAMESPACE, yytext()); - } - case 314: - break; - case 155: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.INTERFACE, yytext()); - } - case 315: - break; - case 156: { - return new ParsedSymbol(SymbolGroup.GLOBALCONST, SymbolType.UNDEFINED, yytext()); - } - case 316: - break; - case 157: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.PROTECTED, yytext()); - } - case 317: - break; - case 158: { - String ret = string.toString(); - string.setLength(0); - string.append(yytext()); - yybegin(XMLCDATA); - if (!ret.isEmpty()) { - return new ParsedSymbol(SymbolGroup.XML, SymbolType.XML_TEXT, ret); - } - } - case 318: - break; - case 159: { - return new ParsedSymbol(SymbolGroup.OPERATOR, SymbolType.INSTANCEOF, yytext()); - } - case 319: - break; - case 160: { - return new ParsedSymbol(SymbolGroup.KEYWORD, SymbolType.IMPLEMENTS, yytext()); - } - case 320: - break; - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - { - return new ParsedSymbol(SymbolGroup.EOF, SymbolType.EOF, null); - } - } else { - zzScanError(ZZ_NO_MATCH); - } - } } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 1: + { + } + case 162: break; + case 2: + { yyline++; + } + case 163: break; + case 3: + { /*ignore*/ + } + case 164: break; + case 4: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DIVIDE,yytext()); + } + case 165: break; + case 5: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MULTIPLY,yytext()); + } + case 166: break; + case 6: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.IDENTIFIER, yytext()); + } + case 167: break; + case 7: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DOT,yytext()); + } + case 168: break; + case 8: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_THAN,yytext()); + } + case 169: break; + case 9: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT,yytext()); + } + case 170: break; + case 10: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MINUS,yytext()); + } + case 171: break; + case 11: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_THAN,yytext()); + } + case 172: break; + case 12: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COLON,yytext()); + } + case 173: break; + case 13: + { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong((yytext())))); + } + case 174: break; + case 14: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TERNAR,yytext()); + } + case 175: break; + case 15: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_OPEN,yytext()); + } + case 176: break; + case 16: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BRACKET_CLOSE,yytext()); + } + case 177: break; + case 17: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN,yytext()); + } + case 178: break; + case 18: + { string.setLength(0); + yybegin(STRING); + } + case 179: break; + case 19: + { string.setLength(0); + yybegin(CHARLITERAL); + } + case 180: break; + case 20: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PLUS,yytext()); + } + case 181: break; + case 21: + { string.setLength(0); + yybegin(OIDENTIFIER); + } + case 182: break; + case 22: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_OPEN,yytext()); + } + case 183: break; + case 23: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.PARENT_CLOSE,yytext()); + } + case 184: break; + case 24: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_OPEN,yytext()); + } + case 185: break; + case 25: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.CURLY_CLOSE,yytext()); + } + case 186: break; + case 26: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SEMICOLON,yytext()); + } + case 187: break; + case 27: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.COMMA,yytext()); + } + case 188: break; + case 28: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEGATE,yytext()); + } + case 189: break; + case 29: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITAND,yytext()); + } + case 190: break; + case 30: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.BITOR,yytext()); + } + case 191: break; + case 31: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.XOR,yytext()); + } + case 192: break; + case 32: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.MODULO,yytext()); + } + case 193: break; + case 33: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ATTRIBUTE,yytext()); + } + case 194: break; + case 34: + { string.append( yytext() ); + } + case 195: break; + case 35: + { yybegin(YYINITIAL); yyline++; + } + case 196: break; + case 36: + { yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.STRING,SymbolType.STRING,string.toString()); + } + case 197: break; + case 37: + { string.append( yytext() ); yyline++; + } + case 198: break; + case 38: + { yybegin(XML); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTTAG_END, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 199: break; + case 39: + { yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRNAMEVAR_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 200: break; + case 40: + { yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRVALVAR_BEGIN, yytext()); + } + case 201: break; + case 41: + { yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTRATTRNAMEVAR_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 202: break; + case 42: + { yybegin(YYINITIAL); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTRATTRVALVAR_BEGIN, yytext()); + } + case 203: break; + case 43: + { string.append(yytext()); + } + case 204: break; + case 44: + { yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_VAR_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 205: break; + case 45: + { yybegin(YYINITIAL); + // length also includes the trailing quote + return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.IDENTIFIER,string.toString()); + } + case 206: break; + case 46: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_DIVIDE,yytext()); + } + case 207: break; + case 47: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MULTIPLY,yytext()); + } + case 208: break; + case 48: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DESCENDANTS,yytext()); + } + case 209: break; + case 49: + { return new ParsedSymbol(SymbolGroup.TYPENAME,SymbolType.TYPENAME,yytext()); + } + case 210: break; + case 50: + { return new ParsedSymbol(SymbolGroup.DOUBLE,SymbolType.DOUBLE,new Double(Double.parseDouble((yytext())))); + } + case 211: break; + case 51: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.FILTER,yytext()); + } + case 212: break; + case 52: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_LEFT,yytext()); + } + case 213: break; + case 53: + { yybegin(XMLOPENTAG); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTTAG_BEGIN, yytext()); + } + case 214: break; + case 54: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.LOWER_EQUAL,yytext()); + } + case 215: break; + case 55: + { return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTVARTAG_BEGIN, yytext()); + } + case 216: break; + case 56: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NOT_EQUAL,yytext()); + } + case 217: break; + case 57: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DECREMENT,yytext()); + } + case 218: break; + case 58: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MINUS,yytext()); + } + case 219: break; + case 59: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.SHIFT_RIGHT,yytext()); + } + case 220: break; + case 60: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.GREATER_EQUAL,yytext()); + } + case 221: break; + case 61: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NAMESPACE_OP,yytext()); + } + case 222: break; + case 62: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.EQUALS,yytext()); + } + case 223: break; + case 63: + { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext(),8))); + } + case 224: break; + case 64: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_PLUS,yytext()); + } + case 225: break; + case 65: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INCREMENT,yytext()); + } + case 226: break; + case 66: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AS,yytext()); + } + case 227: break; + case 67: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IF,yytext()); + } + case 228: break; + case 68: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.IS,yytext()); + } + case 229: break; + case 69: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IN,yytext()); + } + case 230: break; + case 70: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DO,yytext()); + } + case 231: break; + case 71: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITAND,yytext()); + } + case 232: break; + case 72: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.AND,yytext()); + } + case 233: break; + case 73: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_BITOR,yytext()); + } + case 234: break; + case 74: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.OR,yytext()); + } + case 235: break; + case 75: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_XOR,yytext()); + } + case 236: break; + case 76: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_MODULO,yytext()); + } + case 237: break; + case 77: + { throw new AVM2ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); + } + case 238: break; + case 78: + { string.append( '\"' ); + } + case 239: break; + case 79: + { string.append( '\'' ); + } + case 240: break; + case 80: + { char val = (char) Integer.parseInt(yytext().substring(1),8); + string.append( val ); + } + case 241: break; + case 81: + { string.append( '\f' ); + } + case 242: break; + case 82: + { string.append( '\\' ); + } + case 243: break; + case 83: + { string.append( '\b' ); + } + case 244: break; + case 84: + { string.append( '\r' ); + } + case 245: break; + case 85: + { string.append( '\n' ); + } + case 246: break; + case 86: + { string.append( '\t' ); + } + case 247: break; + case 87: + { yybegin(XML); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTFINISHTAG_END, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 248: break; + case 88: + { yybegin(XMLOPENTAGATTRIB); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTENAME, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 249: break; + case 89: + { yybegin(XMLOPENTAG); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTEVALUE, yytext()); + } + case 250: break; + case 90: + { yybegin(XMLINSTRATTRIB); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTENAME, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 251: break; + case 91: + { yybegin(XML); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTR_END, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 252: break; + case 92: + { yybegin(XMLINSTROPENTAG); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_ATTRIBUTEVALUE, yytext()); + } + case 253: break; + case 93: + { yybegin(XMLOPENTAG); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTTAG_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 254: break; + case 94: + { yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_STARTVARTAG_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 255: break; + case 95: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.REST,yytext()); + } + case 256: break; + case 96: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_LEFT,yytext()); + } + case 257: break; + case 97: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_NOT_EQUAL,yytext()); + } + case 258: break; + case 98: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.USHIFT_RIGHT,yytext()); + } + case 259: break; + case 99: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_SHIFT_RIGHT,yytext()); + } + case 260: break; + case 100: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.STRICT_EQUALS,yytext()); + } + case 261: break; + case 101: + { return new ParsedSymbol(SymbolGroup.INTEGER,SymbolType.INTEGER,new Long(Long.parseLong(yytext().substring(2),16))); + } + case 262: break; + case 102: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FOR,yytext()); + } + case 263: break; + case 103: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.SET,yytext()); + } + case 264: break; + case 104: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.NEW,yytext()); + } + case 265: break; + case 105: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRY,yytext()); + } + case 266: break; + case 106: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.USE,yytext()); + } + case 267: break; + case 107: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.VAR,yytext()); + } + case 268: break; + case 108: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.GET,yytext()); + } + case 269: break; + case 109: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NAN,yytext()); + } + case 270: break; + case 110: + { string.append(yytext()); + yybegin(XML); + String ret = string.toString(); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_CDATA, ret); + } + case 271: break; + case 111: + { string.append(yytext()); + yybegin(XML); + String ret = string.toString(); + string.setLength(0); + return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_COMMENT, ret); + } + case 272: break; + case 112: + { yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_FINISHVARTAG_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 273: break; + case 113: + { yybegin(XMLINSTROPENTAG); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTR_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 274: break; + case 114: + { yybegin(YYINITIAL); + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_INSTRVARTAG_BEGIN, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 275: break; + case 115: + { string.append( '\u00A7' ); + } + case 276: break; + case 116: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.ASSIGN_USHIFT_RIGHT,yytext()); + } + case 277: break; + case 117: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.EACH,yytext()); + } + case 278: break; + case 118: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.ELSE,yytext()); + } + case 279: break; + case 119: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CASE,yytext()); + } + case 280: break; + case 120: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NULL,yytext()); + } + case 281: break; + case 121: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.TRUE,yytext()); + } + case 282: break; + case 122: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THIS,yytext()); + } + case 283: break; + case 123: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WITH,yytext()); + } + case 284: break; + case 124: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.VOID,yytext()); + } + case 285: break; + case 125: + { pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_FINISHTAG, yytext())); + if(string.length()>0){ + pushback(new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT, string.toString())); + string.setLength(0); + } + return lex(); + } + case 286: break; + case 126: + { String ret=string.toString(); string.setLength(0); string.append(yytext()); yybegin(XMLCOMMENT); + if(!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT,ret); + } + case 287: break; + case 127: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FALSE,yytext()); + } + case 288: break; + case 128: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.FINAL,yytext()); + } + case 289: break; + case 129: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.BREAK,yytext()); + } + case 290: break; + case 130: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CATCH,yytext()); + } + case 291: break; + case 131: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONST,yytext()); + } + case 292: break; + case 132: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CLASS,yytext()); + } + case 293: break; + case 133: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SUPER,yytext()); + } + case 294: break; + case 134: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.THROW,yytext()); + } + case 295: break; + case 135: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WHILE,yytext()); + } + case 296: break; + case 136: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.RETURN,yytext()); + } + case 297: break; + case 137: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.STATIC,yytext()); + } + case 298: break; + case 138: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SWITCH,yytext()); + } + case 299: break; + case 139: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.NATIVE,yytext()); + } + case 300: break; + case 140: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.TYPEOF,yytext()); + } + case 301: break; + case 141: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPORT,yytext()); + } + case 302: break; + case 142: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.DELETE,yytext()); + } + case 303: break; + case 143: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PUBLIC,yytext()); + } + case 304: break; + case 144: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FINALLY,yytext()); + } + case 305: break; + case 145: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EXTENDS,yytext()); + } + case 306: break; + case 146: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DEFAULT,yytext()); + } + case 307: break; + case 147: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.DYNAMIC,yytext()); + } + case 308: break; + case 148: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PRIVATE,yytext()); + } + case 309: break; + case 149: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PACKAGE,yytext()); + } + case 310: break; + case 150: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FUNCTION,yytext()); + } + case 311: break; + case 151: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONTINUE,yytext()); + } + case 312: break; + case 152: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.OVERRIDE,yytext()); + } + case 313: break; + case 153: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERNAL,yytext()); + } + case 314: break; + case 154: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.INFINITY,yytext()); + } + case 315: break; + case 155: + { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.NAMESPACE,yytext()); + } + case 316: break; + case 156: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERFACE,yytext()); + } + case 317: break; + case 157: + { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.UNDEFINED,yytext()); + } + case 318: break; + case 158: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PROTECTED,yytext()); + } + case 319: break; + case 159: + { String ret=string.toString(); string.setLength(0); string.append(yytext() ); yybegin(XMLCDATA); + if(!ret.isEmpty()) return new ParsedSymbol(SymbolGroup.XML,SymbolType.XML_TEXT,ret); + } + case 320: break; + case 160: + { return new ParsedSymbol(SymbolGroup.OPERATOR,SymbolType.INSTANCEOF,yytext()); + } + case 321: break; + case 161: + { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPLEMENTS,yytext()); + } + case 322: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return new ParsedSymbol(SymbolGroup.EOF,SymbolType.EOF,null); + } + } + else { + zzScanError(ZZ_NO_MATCH); + } + } } + } + } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java index 7ab71531b..2fa7b7276 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/ActionScriptParser.java @@ -260,7 +260,7 @@ public class ActionScriptParser { s = lex(); } else { s = lex(); - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); String propName = s.value.toString(); GraphTargetItem propItem = null; s = lex(); @@ -274,7 +274,7 @@ public class ActionScriptParser { expectedType(SymbolType.BRACKET_CLOSE); propName = null; } else { - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); propName = s.value.toString(); propItem = null; } @@ -300,7 +300,7 @@ public class ActionScriptParser { name += "@"; s = lex(); } - expected(s, lexer.yyline(), SymbolType.IDENTIFIER, SymbolType.THIS, SymbolType.SUPER, SymbolType.STRING_OP); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER, SymbolType.THIS, SymbolType.SUPER, SymbolType.STRING_OP); name += s.value.toString(); s = lex(); boolean attrBracket = false; @@ -313,7 +313,7 @@ public class ActionScriptParser { s = lex(); if (s.type == SymbolType.MULTIPLY) { name += s.value.toString(); - } else if (s.type == SymbolType.IDENTIFIER) { + } else if (s.group == SymbolGroup.IDENTIFIER) { name += s.value.toString(); } else { if (s.type != SymbolType.BRACKET_OPEN) { @@ -323,7 +323,7 @@ public class ActionScriptParser { continue; } } else { - expected(s, lexer.yyline(), SymbolType.IDENTIFIER, SymbolType.NAMESPACE); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER, SymbolType.NAMESPACE); name += s.value.toString(); } s = lex(); @@ -338,7 +338,7 @@ public class ActionScriptParser { nsname = name; } s = lex(); - if (s.type == SymbolType.IDENTIFIER) { + if (s.group == SymbolGroup.IDENTIFIER) { nsprop = s.value.toString(); } else if (s.type == SymbolType.BRACKET_OPEN) { nspropItem = expression(thisType, pkg, needsActivation, importedClasses, openedNamespaces, registerVars, inFunction, inMethod, true, variables); @@ -350,27 +350,7 @@ public class ActionScriptParser { name = null; } s = lex(); - } - /* - List params = new ArrayList<>(); - if (s.type == SymbolType.TYPENAME) { - s = lex(); - do { - String p = ""; - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); - p = s.value.toString(); - s = lex(); - while (s.type == SymbolType.DOT) { - s = lex(); - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); - name += "." + s.value.toString(); - s = lex(); - } - params.add(p); - } while (s.type == SymbolType.COMMA); - expected(s, lexer.yyline(), SymbolType.GREATER_THAN); - s = lex(); - }*/ + } GraphTargetItem ret = null; if (name != null) { @@ -478,7 +458,7 @@ public class ActionScriptParser { hasRest = true; s = lex(); } - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); paramNames.add(s.value.toString()); s = lex(); @@ -580,7 +560,7 @@ public class ActionScriptParser { s = lex(); } - while (s.isType(SymbolType.STATIC, SymbolType.PUBLIC, SymbolType.PRIVATE, SymbolType.PROTECTED, SymbolType.OVERRIDE, SymbolType.FINAL, SymbolType.DYNAMIC, SymbolType.IDENTIFIER)) { + while (s.isType(SymbolType.STATIC, SymbolType.PUBLIC, SymbolType.PRIVATE, SymbolType.PROTECTED, SymbolType.OVERRIDE, SymbolType.FINAL, SymbolType.DYNAMIC, SymbolGroup.IDENTIFIER)) { if (s.type == SymbolType.FINAL) { if (isFinal) { throw new AVM2ParseException("Only one final keyword allowed", lexer.yyline()); @@ -607,7 +587,7 @@ public class ActionScriptParser { throw new AVM2ParseException("Only one static keyword allowed", lexer.yyline()); } isStatic = true; - } else if (s.type == SymbolType.IDENTIFIER) { + } else if (s.group == SymbolGroup.IDENTIFIER) { customAccess = s.value.toString(); namespace = -2; } else { @@ -666,7 +646,7 @@ public class ActionScriptParser { //GraphTargetItem classTypeStr = type(thisType,pkg,needsActivation, importedClasses, openedNamespaces, variables); s = lex(); - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); String classTypeStr = s.value.toString(); GraphTargetItem extendsTypeStr = null; s = lex(); @@ -704,7 +684,7 @@ public class ActionScriptParser { } //GraphTargetItem interfaceTypeStr = type(thisType,pkg,needsActivation, importedClasses, openedNamespaces, variables); s = lex(); - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); String intTypeStr = s.value.toString(); s = lex(); List intExtendsTypeStrs = new ArrayList<>(); @@ -744,7 +724,7 @@ public class ActionScriptParser { s = lex(); } - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); String fname = s.value.toString(); if (classNameStr != null && fname.equals(classNameStr)) { //constructor if (isStatic) { @@ -803,7 +783,7 @@ public class ActionScriptParser { throw new AVM2ParseException("Interface cannot have namespace fields", lexer.yyline()); } s = lex(); - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); String nname = s.value.toString(); String nval = ""; s = lex(); @@ -840,7 +820,7 @@ public class ActionScriptParser { } s = lex(); - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); String vcname = s.value.toString(); s = lex(); GraphTargetItem type = null; @@ -1194,7 +1174,7 @@ public class ActionScriptParser { } String loopLabel = null; - if (s.type == SymbolType.IDENTIFIER) { + if (s.group == SymbolGroup.IDENTIFIER) { ParsedSymbol sc = lex(); if (sc.type == SymbolType.COLON) { loopLabel = s.value.toString(); @@ -1206,7 +1186,7 @@ public class ActionScriptParser { if (s.type == SymbolType.DEFAULT) { ParsedSymbol sx = lex(); - if (sx.type != SymbolType.IDENTIFIER) { + if (sx.group != SymbolGroup.IDENTIFIER) { lexer.pushback(sx); } else { if (!sx.value.equals("xml")) { @@ -1266,13 +1246,13 @@ public class ActionScriptParser { break;*/ case FUNCTION: s = lexer.lex(); - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); needsActivation.setVal(true); ret = (function(pkg, false, needsActivation, importedClasses, 0/*?*/, thisType, openedNamespaces, s.value.toString(), false, variables)); break; case VAR: s = lex(); - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); String varIdentifier = s.value.toString(); s = lex(); GraphTargetItem type; @@ -1480,7 +1460,7 @@ public class ActionScriptParser { if (loops.isEmpty()) { throw new AVM2ParseException("No loop to break", lexer.yyline()); } - if (s.type == SymbolType.IDENTIFIER) { + if (s.group == SymbolGroup.IDENTIFIER) { String breakLabel = s.value.toString(); for (Loop l : loops) { if (breakLabel.equals(loopLabels.get(l))) { @@ -1503,7 +1483,7 @@ public class ActionScriptParser { if (loops.isEmpty()) { throw new AVM2ParseException("No loop to continue", lexer.yyline()); } - if (s.type == SymbolType.IDENTIFIER) { + if (s.group == SymbolGroup.IDENTIFIER) { String continueLabel = s.value.toString(); for (Loop l : loops) { if (l.id < 0) { //negative id marks switch => no continue @@ -1553,7 +1533,7 @@ public class ActionScriptParser { while (s.type == SymbolType.CATCH) { expectedType(SymbolType.PARENT_OPEN); s = lex(); - expected(s, lexer.yyline(), SymbolType.IDENTIFIER, SymbolType.THIS, SymbolType.SUPER, SymbolType.STRING_OP); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER, SymbolType.THIS, SymbolType.SUPER, SymbolType.STRING_OP); String enamestr = s.value.toString(); expectedType(SymbolType.COLON); @@ -1696,7 +1676,7 @@ public class ActionScriptParser { break; case DESCENDANTS: ParsedSymbol d = lex(); - expected(d, lexer.yyline(), SymbolType.IDENTIFIER, SymbolType.MULTIPLY); + expected(d, lexer.yyline(), SymbolGroup.IDENTIFIER, SymbolType.MULTIPLY); ret = new GetDescendantsAVM2Item(expr, d.type == SymbolType.MULTIPLY ? null : d.value.toString(), openedNamespaces); allowRemainder = true; break; @@ -2054,7 +2034,7 @@ public class ActionScriptParser { lexer.pushback(s); } s = lex(); - expected(s, lexer.yyline(), SymbolType.IDENTIFIER, SymbolType.STRING); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER, SymbolType.STRING); GraphTargetItem n = new StringAVM2Item(null, s.value.toString()); //expression(thisType,pkg,needsActivation, importedClasses, openedNamespaces, registerVars, inFunction, inMethod, allowRemainder, variables); @@ -2082,7 +2062,7 @@ public class ActionScriptParser { case FUNCTION: s = lexer.lex(); String fname = ""; - if (s.isType(SymbolType.IDENTIFIER)) { + if (s.isType(SymbolGroup.IDENTIFIER)) { fname = s.value.toString(); } else { lexer.pushback(s); @@ -2146,7 +2126,7 @@ public class ActionScriptParser { if (s.type == SymbolType.FUNCTION) { s = lexer.lex(); String ffname = ""; - if (s.isType(SymbolType.IDENTIFIER)) { + if (s.isType(SymbolGroup.IDENTIFIER)) { ffname = s.value.toString(); } else { lexer.pushback(s); @@ -2221,14 +2201,14 @@ public class ActionScriptParser { String name = ""; ParsedSymbol s = lex(); if (s.type != SymbolType.CURLY_OPEN) { - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); name = s.value.toString(); s = lex(); } while (s.type != SymbolType.CURLY_OPEN) { expected(s, lexer.yyline(), SymbolType.DOT); s = lex(); - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); name += "." + s.value.toString(); s = lex(); } @@ -2241,7 +2221,7 @@ public class ActionScriptParser { String impName = null; boolean all = false; s = lex(); - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); impName = s.value.toString(); s = lex(); while (s.type == SymbolType.DOT) { @@ -2256,7 +2236,7 @@ public class ActionScriptParser { s = lex(); break; } - expected(s, lexer.yyline(), SymbolType.IDENTIFIER); + expected(s, lexer.yyline(), SymbolGroup.IDENTIFIER); impName = s.value.toString(); s = lex(); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SymbolType.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SymbolType.java index f92f37340..29da8371e 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SymbolType.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/parser/script/SymbolType.java @@ -12,7 +12,8 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library. */ + * License along with this library. + */ package com.jpexs.decompiler.flash.abc.avm2.parser.script; /** @@ -201,5 +202,6 @@ public enum SymbolType { XML_INSTRATTRVALVAR_BEGIN, // aaa={ XML_INSTRVARTAG_BEGIN, // . */ package com.jpexs.decompiler.flash.abc.avm2.parser.script; -import com.jpexs.decompiler.flash.abc.avm2.parser.ParseException; +import com.jpexs.decompiler.flash.abc.avm2.parser.AVM2ParseException; import java.util.Stack; import java.util.List; import java.util.ArrayList; @@ -29,7 +29,7 @@ import java.io.StringReader; %unicode %char %type ParsedSymbol -%throws ParseException +%throws AVM2ParseException %{ @@ -93,7 +93,7 @@ import java.io.StringReader; informListenersPushBack(symb); } ParsedSymbol last; - public ParsedSymbol lex() throws java.io.IOException, ParseException{ + public ParsedSymbol lex() throws java.io.IOException, AVM2ParseException{ ParsedSymbol ret=null; if(!pushedBack.isEmpty()){ ret = last = pushedBack.pop(); @@ -212,7 +212,7 @@ OIdentifierCharacter = [^\r\n\u00A7\\] "while" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WHILE,yytext()); } "else" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.ELSE,yytext()); } "for" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FOR,yytext()); } - "each" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EACH,yytext()); } + "each" { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.EACH,yytext()); } "in" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IN,yytext()); } "if" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IF,yytext()); } "return" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.RETURN,yytext()); } @@ -224,23 +224,23 @@ OIdentifierCharacter = [^\r\n\u00A7\\] "finally" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FINALLY,yytext()); } "while" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WHILE,yytext()); } "with" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.WITH,yytext()); } - "dynamic" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.DYNAMIC,yytext()); } + "dynamic" { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.DYNAMIC,yytext()); } "internal" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERNAL,yytext()); } - "override" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.OVERRIDE,yytext()); } + "override" { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.OVERRIDE,yytext()); } "private" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PRIVATE,yytext()); } "protected" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PROTECTED,yytext()); } "public" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PUBLIC,yytext()); } - "static" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.STATIC,yytext()); } + "static" { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.STATIC,yytext()); } "class" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CLASS,yytext()); } "const" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.CONST,yytext()); } "extends" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.EXTENDS,yytext()); } "function" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FUNCTION,yytext()); } - "get" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.GET,yytext()); } + "get" { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.GET,yytext()); } "implements" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPLEMENTS,yytext()); } "interface" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.INTERFACE,yytext()); } - "namespace" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.NAMESPACE,yytext()); } + "namespace" { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.NAMESPACE,yytext()); } "package" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.PACKAGE,yytext()); } - "set" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.SET,yytext()); } + "set" { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.SET,yytext()); } "var" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.VAR,yytext()); } "import" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.IMPORT,yytext()); } "use" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.USE,yytext()); } @@ -251,8 +251,8 @@ OIdentifierCharacter = [^\r\n\u00A7\\] "undefined" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.UNDEFINED,yytext()); } "Infinity" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.INFINITY,yytext()); } "NaN" { return new ParsedSymbol(SymbolGroup.GLOBALCONST,SymbolType.NAN,yytext()); } - "final" { return new ParsedSymbol(SymbolGroup.KEYWORD,SymbolType.FINAL,yytext()); } - + "final" { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.FINAL,yytext()); } + "native" { return new ParsedSymbol(SymbolGroup.IDENTIFIER,SymbolType.NATIVE,yytext()); } /* operators */ @@ -584,7 +584,7 @@ OIdentifierCharacter = [^\r\n\u00A7\\] /* escape sequences */ - \\. { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); } + \\. { throw new AVM2ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); } {LineTerminator} { yybegin(YYINITIAL); yyline++;} } @@ -611,7 +611,7 @@ OIdentifierCharacter = [^\r\n\u00A7\\] /* escape sequences */ - \\. { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); } + \\. { throw new AVM2ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); } {LineTerminator} { yybegin(YYINITIAL); yyline++;} } @@ -639,7 +639,7 @@ OIdentifierCharacter = [^\r\n\u00A7\\] /* escape sequences */ - \\. { throw new ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); } + \\. { throw new AVM2ParseException("Illegal escape sequence \""+yytext()+"\"",yyline+1); } {LineTerminator} { yybegin(YYINITIAL); yyline++;} } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodInfo.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodInfo.java index c7fbeef04..bfa2d8310 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodInfo.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/MethodInfo.java @@ -20,7 +20,7 @@ import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; import com.jpexs.decompiler.flash.abc.avm2.instructions.AVM2Instruction; import com.jpexs.decompiler.flash.abc.avm2.instructions.construction.NewFunctionIns; -import com.jpexs.decompiler.flash.action.Deobfuscation; +import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; import com.jpexs.decompiler.flash.configuration.Configuration; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.helpers.Helper; @@ -283,9 +283,9 @@ public class MethodInfo { pdata.put("regIndex", ""+(i+1)); if (!localRegNames.isEmpty()) { pdata.put("slotName", localRegNames.get(i + 1)); //assuming it is a slot - writer.hilightSpecial(Deobfuscation.printIdentifier(localRegNames.get(i + 1)),"paramname",i,pdata); + writer.hilightSpecial(IdentifiersDeobfuscation.printIdentifier(true,localRegNames.get(i + 1)),"paramname",i,pdata); } else if ((paramNames.length > i) && (paramNames[i] != 0) && Configuration.paramNamesEnable.get()) { - writer.hilightSpecial(Deobfuscation.printIdentifier(constants.getString(paramNames[i])),"paramname",i,pdata); + writer.hilightSpecial(IdentifiersDeobfuscation.printIdentifier(true,constants.getString(paramNames[i])),"paramname",i,pdata); } else { writer.hilightSpecial("param" + (i + 1),"paramname",i,pdata); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java index ba5643519..83d50edb7 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Multiname.java @@ -17,7 +17,7 @@ package com.jpexs.decompiler.flash.abc.types; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; -import com.jpexs.decompiler.flash.action.Deobfuscation; +import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; import com.jpexs.helpers.Helper; import java.util.List; @@ -264,7 +264,7 @@ public class Multiname { if ((fullyQualifiedNames != null) && fullyQualifiedNames.contains(name)) { return getNameWithNamespace(constants, raw); } - return (isAttribute() ? "@" : "") + (raw ? name : Deobfuscation.printIdentifier(name)); + return (isAttribute() ? "@" : "") + (raw ? name : IdentifiersDeobfuscation.printIdentifier(true,name)); } } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Namespace.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Namespace.java index c1d6b75b6..7c7ec3ae4 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Namespace.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/types/Namespace.java @@ -18,7 +18,7 @@ package com.jpexs.decompiler.flash.abc.types; import com.jpexs.decompiler.flash.abc.ABC; import com.jpexs.decompiler.flash.abc.avm2.AVM2ConstantPool; -import com.jpexs.decompiler.flash.action.Deobfuscation; +import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; public class Namespace { @@ -104,7 +104,7 @@ public class Namespace { if (raw) { return constants.getString(name_index); } - return Deobfuscation.printNamespace(constants.getString(name_index)); + return IdentifiersDeobfuscation.printNamespace(true,constants.getString(name_index)); } public boolean hasName(String name, AVM2ConstantPool constants) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java index faa19d1bf..405fda48b 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/Action.java @@ -103,28 +103,7 @@ public class Action implements GraphSourceItem { * Length of action data */ public int actionLength; - private long address; - - public static final String[] reservedWords = { - "as", "break", "case", "catch", "class", "const", "continue", "default", "delete", "do", "else", - "extends", "false", "finally", "for", "function", "if", "implements", "import", "in", "instanceof", - "interface", "internal", "is", "native", "new", "null", "package", "private", "protected", "public", - "return", "super", "switch", "this", "throw",/*to*/ "true", "try", "typeof", "use", "var", /*"void",*/ "while", - "with", - //syntactic keywords - can be used as identifiers, but that have special meaning in certain contexts - "each", "get", "set", "namespace", "#include", "include", "dynamic", "final", "native", "override", "static", "in"}; - - public static boolean isReservedWord(String s) { - if (s == null) { - return false; - } - for (String rw : reservedWords) { - if (rw.equals(s.trim())) { - return true; - } - } - return false; - } + private long address; /** * Names of ActionScript properties diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallFunctionActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallFunctionActionItem.java index 524431dbf..e06bc5329 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallFunctionActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallFunctionActionItem.java @@ -17,7 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; -import com.jpexs.decompiler.flash.action.Deobfuscation; +import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; import com.jpexs.decompiler.flash.action.swf5.ActionCallFunction; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; @@ -49,7 +49,7 @@ public class CallFunctionActionItem extends ActionItem { @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { String paramStr = ""; - writer.append(Deobfuscation.printIdentifier(((DirectValueActionItem) functionName).toStringNoQuotes(localData))); + writer.append(IdentifiersDeobfuscation.printIdentifier(false,((DirectValueActionItem) functionName).toStringNoQuotes(localData))); writer.spaceBeforeCallParenthesies(arguments.size()); writer.append("("); for (int t = 0; t < arguments.size(); t++) { diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java index 2f0330565..0c474fa71 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/CallMethodActionItem.java @@ -17,7 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; -import com.jpexs.decompiler.flash.action.Deobfuscation; +import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; import com.jpexs.decompiler.flash.action.swf5.ActionCallMethod; import com.jpexs.decompiler.flash.ecma.Undefined; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; @@ -73,7 +73,7 @@ public class CallMethodActionItem extends ActionItem { scriptObject.toString(writer, localData); } writer.append("."); - writer.append(Deobfuscation.printIdentifier(methodName.toStringNoQuotes(localData))); + writer.append(IdentifiersDeobfuscation.printIdentifier(false,methodName.toStringNoQuotes(localData))); } else { scriptObject.toString(writer, localData); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/DefineLocalActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/DefineLocalActionItem.java index 6e88258d8..c38f08b97 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/DefineLocalActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/DefineLocalActionItem.java @@ -17,7 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; -import com.jpexs.decompiler.flash.action.Deobfuscation; +import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; import com.jpexs.decompiler.flash.action.swf5.ActionDefineLocal; import com.jpexs.decompiler.flash.action.swf5.ActionDefineLocal2; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; @@ -76,8 +76,8 @@ public class DefineLocalActionItem extends ActionItem implements SetTypeActionIt public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { writer.append("var "); - if (((name instanceof DirectValueActionItem)) && (((DirectValueActionItem) name).isString()) && (!Deobfuscation.isValidName(((DirectValueActionItem) name).toStringNoQuotes(localData), "this", "super"))) { - writer.append(Deobfuscation.makeObfuscatedIdentifier(((DirectValueActionItem) name).toStringNoQuotes(localData))); + if (((name instanceof DirectValueActionItem)) && (((DirectValueActionItem) name).isString()) && (!IdentifiersDeobfuscation.isValidName(false,((DirectValueActionItem) name).toStringNoQuotes(localData), "this", "super"))) { + writer.append(IdentifiersDeobfuscation.makeObfuscatedIdentifier(((DirectValueActionItem) name).toStringNoQuotes(localData))); } else { stripQuotes(name, localData, writer); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/FunctionActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/FunctionActionItem.java index 3511e3aff..0d21d54b3 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/FunctionActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/FunctionActionItem.java @@ -12,13 +12,14 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library. */ + * License along with this library. + */ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; import com.jpexs.decompiler.flash.action.Action; -import com.jpexs.decompiler.flash.action.Deobfuscation; +import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator; import com.jpexs.decompiler.flash.action.parser.script.VariableActionItem; import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; @@ -82,15 +83,15 @@ public class FunctionActionItem extends ActionItem { if (calculatedFunctionName != null) { writer.append(" "); String fname = calculatedFunctionName.toStringNoQuotes(localData); - if (!Deobfuscation.isValidName(fname)) { - writer.append(Deobfuscation.makeObfuscatedIdentifier(fname)); + if (!IdentifiersDeobfuscation.isValidName(false,fname)) { + writer.append(IdentifiersDeobfuscation.makeObfuscatedIdentifier(fname)); } else { calculatedFunctionName.appendToNoQuotes(writer, localData); } } else if (!functionName.isEmpty()) { writer.append(" "); - if (!Deobfuscation.isValidName(functionName)) { - writer.append(Deobfuscation.makeObfuscatedIdentifier(functionName)); + if (!IdentifiersDeobfuscation.isValidName(false,functionName)) { + writer.append(IdentifiersDeobfuscation.makeObfuscatedIdentifier(functionName)); } else { writer.append(functionName); } @@ -106,8 +107,8 @@ public class FunctionActionItem extends ActionItem { if (pname == null || pname.isEmpty()) { pname = new RegisterNumber(regStart + p).translate(); } - if (!Deobfuscation.isValidName(pname)) { - writer.append(Deobfuscation.makeObfuscatedIdentifier(pname)); + if (!IdentifiersDeobfuscation.isValidName(false,pname)) { + writer.append(IdentifiersDeobfuscation.makeObfuscatedIdentifier(pname)); } writer.append(pname); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetMemberActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetMemberActionItem.java index 998e10ca0..effd5a367 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetMemberActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetMemberActionItem.java @@ -12,11 +12,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library. */ + * License along with this library. + */ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; -import com.jpexs.decompiler.flash.action.Deobfuscation; +import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; import com.jpexs.decompiler.flash.action.swf5.ActionGetMember; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; import com.jpexs.decompiler.graph.CompilationException; @@ -49,7 +50,7 @@ public class GetMemberActionItem extends ActionItem { @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { object.toString(writer, localData); - if ((!(memberName instanceof DirectValueActionItem)) || (!((DirectValueActionItem) memberName).isString()) || (!Deobfuscation.isValidName(((DirectValueActionItem) memberName).toStringNoQuotes(localData)))) { + if ((!(memberName instanceof DirectValueActionItem)) || (!((DirectValueActionItem) memberName).isString()) || (!IdentifiersDeobfuscation.isValidName(false,((DirectValueActionItem) memberName).toStringNoQuotes(localData)))) { writer.append("["); memberName.toString(writer, localData); return writer.append("]"); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetVariableActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetVariableActionItem.java index f4cef2f7c..775873c61 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetVariableActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/GetVariableActionItem.java @@ -17,7 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; -import com.jpexs.decompiler.flash.action.Deobfuscation; +import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; import com.jpexs.decompiler.flash.action.swf4.ActionGetVariable; import com.jpexs.decompiler.flash.ecma.Undefined; import com.jpexs.decompiler.flash.helpers.GraphTextWriter; @@ -59,8 +59,8 @@ public class GetVariableActionItem extends ActionItem { @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - if (((name instanceof DirectValueActionItem)) && (((DirectValueActionItem) name).isString()) && (!Deobfuscation.isValidName(((DirectValueActionItem) name).toStringNoQuotes(localData), "this", "super"))) { - return writer.append(Deobfuscation.makeObfuscatedIdentifier(((DirectValueActionItem) name).toStringNoQuotes(localData))); + if (((name instanceof DirectValueActionItem)) && (((DirectValueActionItem) name).isString()) && (!IdentifiersDeobfuscation.isValidName(false,((DirectValueActionItem) name).toStringNoQuotes(localData), "this", "super"))) { + return writer.append(IdentifiersDeobfuscation.makeObfuscatedIdentifier(((DirectValueActionItem) name).toStringNoQuotes(localData))); } else if ((!(name instanceof DirectValueActionItem)) || (!((DirectValueActionItem) name).isString())) { writer.append("eval("); name.appendTo(writer, localData); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java index eaf2d7604..844f4672f 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetMemberActionItem.java @@ -12,11 +12,12 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public - * License along with this library. */ + * License along with this library. + */ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; -import com.jpexs.decompiler.flash.action.Deobfuscation; +import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator; import com.jpexs.decompiler.flash.action.swf4.ActionPush; import com.jpexs.decompiler.flash.action.swf4.RegisterNumber; @@ -84,7 +85,7 @@ public class SetMemberActionItem extends ActionItem implements SetTypeActionItem public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { object.toString(writer, localData); - if ((!(objectName instanceof DirectValueActionItem)) || (!((DirectValueActionItem) objectName).isString()) || (!Deobfuscation.isValidName(((DirectValueActionItem) objectName).toStringNoQuotes(localData)))) { + if ((!(objectName instanceof DirectValueActionItem)) || (!((DirectValueActionItem) objectName).isString()) || (!IdentifiersDeobfuscation.isValidName(false,((DirectValueActionItem) objectName).toStringNoQuotes(localData)))) { writer.append("["); objectName.toString(writer, localData); writer.append("]"); diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java index b1addaa41..0426c4348 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/action/model/SetVariableActionItem.java @@ -17,7 +17,7 @@ package com.jpexs.decompiler.flash.action.model; import com.jpexs.decompiler.flash.SourceGeneratorLocalData; -import com.jpexs.decompiler.flash.action.Deobfuscation; +import com.jpexs.decompiler.flash.IdentifiersDeobfuscation; import com.jpexs.decompiler.flash.action.parser.script.ActionSourceGenerator; import com.jpexs.decompiler.flash.action.swf4.ActionPush; import com.jpexs.decompiler.flash.action.swf4.ActionSetVariable; @@ -73,8 +73,8 @@ public class SetVariableActionItem extends ActionItem implements SetTypeActionIt @Override public GraphTextWriter appendTo(GraphTextWriter writer, LocalData localData) throws InterruptedException { - if (((name instanceof DirectValueActionItem)) && (((DirectValueActionItem) name).isString()) && (!Deobfuscation.isValidName(((DirectValueActionItem) name).toStringNoQuotes(localData), "this", "super"))) { - writer.append(Deobfuscation.makeObfuscatedIdentifier(((DirectValueActionItem) name).toStringNoQuotes(localData))); + if (((name instanceof DirectValueActionItem)) && (((DirectValueActionItem) name).isString()) && (!IdentifiersDeobfuscation.isValidName(false,((DirectValueActionItem) name).toStringNoQuotes(localData), "this", "super"))) { + writer.append(IdentifiersDeobfuscation.makeObfuscatedIdentifier(((DirectValueActionItem) name).toStringNoQuotes(localData))); writer.append(" = "); return value.toString(writer, localData); } else if ((!(name instanceof DirectValueActionItem)) || (!((DirectValueActionItem) name).isString())) {